diff --git a/bin/asc.js b/bin/asc.js index aba4de72..4a78bec1 100644 --- a/bin/asc.js +++ b/bin/asc.js @@ -534,7 +534,7 @@ exports.main = function main(argv, options, callback) { function readFileNode(filename) { try { - var text; + let text; stats.readCount++; stats.readTime += measure(() => { text = fs.readFileSync(filename, { encoding: "utf8" }); diff --git a/dist/asc.js b/dist/asc.js index d25b58af..bf46c35d 100644 --- a/dist/asc.js +++ b/dist/asc.js @@ -1,2 +1,2 @@ -!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(function(){try{return require("assemblyscript")}catch(e){}}()):"function"==typeof define&&define.amd?define(["assemblyscript"],n):"object"==typeof exports?exports.asc=n(function(){try{return require("assemblyscript")}catch(e){}}()):e.asc=n(e.assemblyscript)}("undefined"!=typeof self?self:this,function(__WEBPACK_EXTERNAL_MODULE__6__){return function(e){var n={};function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}return t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=14)}([function(e,n,t){var i,r;n.nextTick=function(e){setTimeout(e,0)},n.platform=n.arch=n.execPath=n.title="browser",n.pid=1,n.browser=!0,n.env={},n.argv=[],n.binding=function(e){throw new Error("No such module. (Possibly not yet loaded)")},r="/",n.cwd=function(){return r},n.chdir=function(e){i||(i=t(2)),r=i.resolve(e,r)},n.exit=n.kill=n.umask=n.dlopen=n.uptime=n.memoryUsage=n.uvCounters=function(){},n.features={}},function(e,n){var t;t=function(){return this}();try{t=t||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(t=window)}e.exports=t},function(e,n,t){(function(e){function t(e,n){for(var t=0,i=e.length-1;i>=0;i--){var r=e[i];"."===r?e.splice(i,1):".."===r?(e.splice(i,1),t++):t&&(e.splice(i,1),t--)}if(n)for(;t--;t)e.unshift("..");return e}var i=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,r=function(e){return i.exec(e).slice(1)};function o(e,n){if(e.filter)return e.filter(n);for(var t=[],i=0;i=-1&&!i;r--){var s=r>=0?arguments[r]:e.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(n=s+"/"+n,i="/"===s.charAt(0))}return n=t(o(n.split("/"),function(e){return!!e}),!i).join("/"),(i?"/":"")+n||"."},n.normalize=function(e){var i=n.isAbsolute(e),r="/"===s(e,-1);return(e=t(o(e.split("/"),function(e){return!!e}),!i).join("/"))||i||(e="."),e&&r&&(e+="/"),(i?"/":"")+e},n.isAbsolute=function(e){return"/"===e.charAt(0)},n.join=function(){var e=Array.prototype.slice.call(arguments,0);return n.normalize(o(e,function(e,n){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))},n.relative=function(e,t){function i(e){for(var n=0;n=0&&""===e[t];t--);return n>t?[]:e.slice(n,t-n+1)}e=n.resolve(e).substr(1),t=n.resolve(t).substr(1);for(var r=i(e.split("/")),o=i(t.split("/")),s=Math.min(r.length,o.length),a=s,l=0;l>1,c=-7,f=t?r-1:0,h=t?-1:1,d=e[n+f];for(f+=h,o=d&(1<<-c)-1,d>>=-c,c+=a;c>0;o=256*o+e[n+f],f+=h,c-=8);for(s=o&(1<<-c)-1,o>>=-c,c+=i;c>0;s=256*s+e[n+f],f+=h,c-=8);if(0===o)o=1-u;else{if(o===l)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,i),o-=u}return(d?-1:1)*s*Math.pow(2,o-i)},n.write=function(e,n,t,i,r,o){var s,a,l,u=8*o-r-1,c=(1<>1,h=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,d=i?0:o-1,p=i?1:-1,m=n<0||0===n&&1/n<0?1:0;for(n=Math.abs(n),isNaN(n)||n===1/0?(a=isNaN(n)?1:0,s=c):(s=Math.floor(Math.log(n)/Math.LN2),n*(l=Math.pow(2,-s))<1&&(s--,l*=2),(n+=s+f>=1?h/l:h*Math.pow(2,1-f))*l>=2&&(s++,l/=2),s+f>=c?(a=0,s=c):s+f>=1?(a=(n*l-1)*Math.pow(2,r),s+=f):(a=n*Math.pow(2,f-1)*Math.pow(2,r),s=0));r>=8;e[t+d]=255&a,d+=p,a/=256,r-=8);for(s=s<0;e[t+d]=255&s,d+=p,s/=256,u-=8);e[t+d-p]|=128*m}},function(e,n,t){"use strict";n.byteLength=function(e){return 3*e.length/4-u(e)},n.toByteArray=function(e){var n,t,i,s,a,l=e.length;s=u(e),a=new o(3*l/4-s),t=s>0?l-4:l;var c=0;for(n=0;n>16&255,a[c++]=i>>8&255,a[c++]=255&i;2===s?(i=r[e.charCodeAt(n)]<<2|r[e.charCodeAt(n+1)]>>4,a[c++]=255&i):1===s&&(i=r[e.charCodeAt(n)]<<10|r[e.charCodeAt(n+1)]<<4|r[e.charCodeAt(n+2)]>>2,a[c++]=i>>8&255,a[c++]=255&i);return a},n.fromByteArray=function(e){for(var n,t=e.length,r=t%3,o="",s=[],a=0,l=t-r;al?l:a+16383));1===r?(n=e[t-1],o+=i[n>>2],o+=i[n<<4&63],o+="=="):2===r&&(n=(e[t-2]<<8)+e[t-1],o+=i[n>>10],o+=i[n>>4&63],o+=i[n<<2&63],o+="=");return s.push(o),s.join("")};for(var i=[],r=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,l=s.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===e[n-2]?2:"="===e[n-1]?1:0}function c(e,n,t){for(var r,o,s=[],a=n;a>18&63]+i[o>>12&63]+i[o>>6&63]+i[63&o]);return s.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},function(e,n,t){"use strict";(function(e){var i=t(11),r=t(10),o=t(9);function s(){return l.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(e,n){if(s()=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|e}function p(e,n){if(l.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var t=e.length;if(0===t)return 0;for(var i=!1;;)switch(n){case"ascii":case"latin1":case"binary":return t;case"utf8":case"utf-8":case void 0:return D(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*t;case"hex":return t>>>1;case"base64":return j(e).length;default:if(i)return D(e).length;n=(""+n).toLowerCase(),i=!0}}function m(e,n,t){var i=e[n];e[n]=e[t],e[t]=i}function g(e,n,t,i,r){if(0===e.length)return-1;if("string"==typeof t?(i=t,t=0):t>2147483647?t=2147483647:t<-2147483648&&(t=-2147483648),t=+t,isNaN(t)&&(t=r?0:e.length-1),t<0&&(t=e.length+t),t>=e.length){if(r)return-1;t=e.length-1}else if(t<0){if(!r)return-1;t=0}if("string"==typeof n&&(n=l.from(n,i)),l.isBuffer(n))return 0===n.length?-1:b(e,n,t,i,r);if("number"==typeof n)return n&=255,l.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(e,n,t):Uint8Array.prototype.lastIndexOf.call(e,n,t):b(e,[n],t,i,r);throw new TypeError("val must be string, number or Buffer")}function b(e,n,t,i,r){var o,s=1,a=e.length,l=n.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(e.length<2||n.length<2)return-1;s=2,a/=2,l/=2,t/=2}function u(e,n){return 1===s?e[n]:e.readUInt16BE(n*s)}if(r){var c=-1;for(o=t;oa&&(t=a-l),o=t;o>=0;o--){for(var f=!0,h=0;hr&&(i=r):i=r;var o=n.length;if(o%2!=0)throw new TypeError("Invalid hex string");i>o/2&&(i=o/2);for(var s=0;s>8,r=t%256,o.push(r),o.push(i);return o}(n,e.length-t),e,t,i)}function x(e,n,t){return 0===n&&t===e.length?i.fromByteArray(e):i.fromByteArray(e.slice(n,t))}function w(e,n,t){t=Math.min(e.length,t);for(var i=[],r=n;r239?4:u>223?3:u>191?2:1;if(r+f<=t)switch(f){case 1:u<128&&(c=u);break;case 2:128==(192&(o=e[r+1]))&&(l=(31&u)<<6|63&o)>127&&(c=l);break;case 3:o=e[r+1],s=e[r+2],128==(192&o)&&128==(192&s)&&(l=(15&u)<<12|(63&o)<<6|63&s)>2047&&(l<55296||l>57343)&&(c=l);break;case 4:o=e[r+1],s=e[r+2],a=e[r+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(l=(15&u)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&l<1114112&&(c=l)}null===c?(c=65533,f=1):c>65535&&(c-=65536,i.push(c>>>10&1023|55296),c=56320|1023&c),i.push(c),r+=f}return function(e){var n=e.length;if(n<=A)return String.fromCharCode.apply(String,e);var t="",i=0;for(;ithis.length)return"";if((void 0===t||t>this.length)&&(t=this.length),t<=0)return"";if((t>>>=0)<=(n>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return L(this,n,t);case"utf8":case"utf-8":return w(this,n,t);case"ascii":return S(this,n,t);case"latin1":case"binary":return k(this,n,t);case"base64":return x(this,n,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,n,t);default:if(i)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),i=!0}}.apply(this,arguments)},l.prototype.equals=function(e){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===l.compare(this,e)},l.prototype.inspect=function(){var e="",t=n.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString("hex",0,t).match(/.{2}/g).join(" "),this.length>t&&(e+=" ... ")),""},l.prototype.compare=function(e,n,t,i,r){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===n&&(n=0),void 0===t&&(t=e?e.length:0),void 0===i&&(i=0),void 0===r&&(r=this.length),n<0||t>e.length||i<0||r>this.length)throw new RangeError("out of range index");if(i>=r&&n>=t)return 0;if(i>=r)return-1;if(n>=t)return 1;if(n>>>=0,t>>>=0,i>>>=0,r>>>=0,this===e)return 0;for(var o=r-i,s=t-n,a=Math.min(o,s),u=this.slice(i,r),c=e.slice(n,t),f=0;fr)&&(t=r),e.length>0&&(t<0||n<0)||n>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var o=!1;;)switch(i){case"hex":return y(this,e,n,t);case"utf8":case"utf-8":return _(this,e,n,t);case"ascii":return v(this,e,n,t);case"latin1":case"binary":return T(this,e,n,t);case"base64":return z(this,e,n,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,e,n,t);default:if(o)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),o=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var A=4096;function S(e,n,t){var i="";t=Math.min(e.length,t);for(var r=n;ri)&&(t=i);for(var r="",o=n;ot)throw new RangeError("Trying to access beyond buffer length")}function N(e,n,t,i,r,o){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(n>r||ne.length)throw new RangeError("Index out of range")}function C(e,n,t,i){n<0&&(n=65535+n+1);for(var r=0,o=Math.min(e.length-t,2);r>>8*(i?r:1-r)}function O(e,n,t,i){n<0&&(n=4294967295+n+1);for(var r=0,o=Math.min(e.length-t,4);r>>8*(i?r:3-r)&255}function F(e,n,t,i,r,o){if(t+i>e.length)throw new RangeError("Index out of range");if(t<0)throw new RangeError("Index out of range")}function R(e,n,t,i,o){return o||F(e,0,t,4),r.write(e,n,t,i,23,4),t+4}function B(e,n,t,i,o){return o||F(e,0,t,8),r.write(e,n,t,i,52,8),t+8}l.prototype.slice=function(e,n){var t,i=this.length;if(e=~~e,n=void 0===n?i:~~n,e<0?(e+=i)<0&&(e=0):e>i&&(e=i),n<0?(n+=i)<0&&(n=0):n>i&&(n=i),n0&&(r*=256);)i+=this[e+--n]*r;return i},l.prototype.readUInt8=function(e,n){return n||M(e,1,this.length),this[e]},l.prototype.readUInt16LE=function(e,n){return n||M(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUInt16BE=function(e,n){return n||M(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUInt32LE=function(e,n){return n||M(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUInt32BE=function(e,n){return n||M(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readIntLE=function(e,n,t){e|=0,n|=0,t||M(e,n,this.length);for(var i=this[e],r=1,o=0;++o=(r*=128)&&(i-=Math.pow(2,8*n)),i},l.prototype.readIntBE=function(e,n,t){e|=0,n|=0,t||M(e,n,this.length);for(var i=n,r=1,o=this[e+--i];i>0&&(r*=256);)o+=this[e+--i]*r;return o>=(r*=128)&&(o-=Math.pow(2,8*n)),o},l.prototype.readInt8=function(e,n){return n||M(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,n){n||M(e,2,this.length);var t=this[e]|this[e+1]<<8;return 32768&t?4294901760|t:t},l.prototype.readInt16BE=function(e,n){n||M(e,2,this.length);var t=this[e+1]|this[e]<<8;return 32768&t?4294901760|t:t},l.prototype.readInt32LE=function(e,n){return n||M(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,n){return n||M(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readFloatLE=function(e,n){return n||M(e,4,this.length),r.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,n){return n||M(e,4,this.length),r.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,n){return n||M(e,8,this.length),r.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,n){return n||M(e,8,this.length),r.read(this,e,!1,52,8)},l.prototype.writeUIntLE=function(e,n,t,i){(e=+e,n|=0,t|=0,i)||N(this,e,n,t,Math.pow(2,8*t)-1,0);var r=1,o=0;for(this[n]=255&e;++o=0&&(o*=256);)this[n+r]=e/o&255;return n+t},l.prototype.writeUInt8=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,1,255,0),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[n]=255&e,n+1},l.prototype.writeUInt16LE=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[n]=255&e,this[n+1]=e>>>8):C(this,e,n,!0),n+2},l.prototype.writeUInt16BE=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[n]=e>>>8,this[n+1]=255&e):C(this,e,n,!1),n+2},l.prototype.writeUInt32LE=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[n+3]=e>>>24,this[n+2]=e>>>16,this[n+1]=e>>>8,this[n]=255&e):O(this,e,n,!0),n+4},l.prototype.writeUInt32BE=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[n]=e>>>24,this[n+1]=e>>>16,this[n+2]=e>>>8,this[n+3]=255&e):O(this,e,n,!1),n+4},l.prototype.writeIntLE=function(e,n,t,i){if(e=+e,n|=0,!i){var r=Math.pow(2,8*t-1);N(this,e,n,t,r-1,-r)}var o=0,s=1,a=0;for(this[n]=255&e;++o>0)-a&255;return n+t},l.prototype.writeIntBE=function(e,n,t,i){if(e=+e,n|=0,!i){var r=Math.pow(2,8*t-1);N(this,e,n,t,r-1,-r)}var o=t-1,s=1,a=0;for(this[n+o]=255&e;--o>=0&&(s*=256);)e<0&&0===a&&0!==this[n+o+1]&&(a=1),this[n+o]=(e/s>>0)-a&255;return n+t},l.prototype.writeInt8=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,1,127,-128),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[n]=255&e,n+1},l.prototype.writeInt16LE=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[n]=255&e,this[n+1]=e>>>8):C(this,e,n,!0),n+2},l.prototype.writeInt16BE=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[n]=e>>>8,this[n+1]=255&e):C(this,e,n,!1),n+2},l.prototype.writeInt32LE=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,4,2147483647,-2147483648),l.TYPED_ARRAY_SUPPORT?(this[n]=255&e,this[n+1]=e>>>8,this[n+2]=e>>>16,this[n+3]=e>>>24):O(this,e,n,!0),n+4},l.prototype.writeInt32BE=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),l.TYPED_ARRAY_SUPPORT?(this[n]=e>>>24,this[n+1]=e>>>16,this[n+2]=e>>>8,this[n+3]=255&e):O(this,e,n,!1),n+4},l.prototype.writeFloatLE=function(e,n,t){return R(this,e,n,!0,t)},l.prototype.writeFloatBE=function(e,n,t){return R(this,e,n,!1,t)},l.prototype.writeDoubleLE=function(e,n,t){return B(this,e,n,!0,t)},l.prototype.writeDoubleBE=function(e,n,t){return B(this,e,n,!1,t)},l.prototype.copy=function(e,n,t,i){if(t||(t=0),i||0===i||(i=this.length),n>=e.length&&(n=e.length),n||(n=0),i>0&&i=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-n=0;--r)e[r+n]=this[r+t];else if(o<1e3||!l.TYPED_ARRAY_SUPPORT)for(r=0;r>>=0,t=void 0===t?this.length:t>>>0,e||(e=0),"number"==typeof e)for(o=n;o55295&&t<57344){if(!r){if(t>56319){(n-=3)>-1&&o.push(239,191,189);continue}if(s+1===i){(n-=3)>-1&&o.push(239,191,189);continue}r=t;continue}if(t<56320){(n-=3)>-1&&o.push(239,191,189),r=t;continue}t=65536+(r-55296<<10|t-56320)}else r&&(n-=3)>-1&&o.push(239,191,189);if(r=null,t<128){if((n-=1)<0)break;o.push(t)}else if(t<2048){if((n-=2)<0)break;o.push(t>>6|192,63&t|128)}else if(t<65536){if((n-=3)<0)break;o.push(t>>12|224,t>>6&63|128,63&t|128)}else{if(!(t<1114112))throw new Error("Invalid code point");if((n-=4)<0)break;o.push(t>>18|240,t>>12&63|128,t>>6&63|128,63&t|128)}}return o}function j(e){return i.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(U,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function H(e,n,t,i){for(var r=0;r=n.length||r>=e.length);++r)n[r+t]=e[r];return r}}).call(this,t(1))},function(module,exports,__webpack_require__){(function(process,Buffer){const fs=__webpack_require__(8),path=__webpack_require__(2),os=__webpack_require__(7);var assemblyscript,isDev;function parseArguments(e){const n={};return Object.keys(exports.options).forEach(e=>{const t=exports.options[e];t.aliases&&((n.alias||(n.alias={}))[e]=t.aliases),void 0!==t.default&&((n.default||(n.default={}))[e]=t.default),"string"===t.type?(n.string||(n.string=[])).push(e):"boolean"===t.type&&(n.boolean||(n.boolean=[])).push(e)}),__webpack_require__(4)(e,n)}function checkDiagnostics(e,n){for(var t,i=!1;null!=(t=assemblyscript.nextDiagnostic(e));)n.write(assemblyscript.formatDiagnostic(t,n.isTTY,!0)+os.EOL+os.EOL),assemblyscript.isError(t)&&(i=!0);return i}function createStats(){return{readTime:0,readCount:0,writeTime:0,writeCount:0,parseTime:0,parseCount:0,compileTime:0,compileCount:0,emitTime:0,emitCount:0,validateTime:0,validateCount:0,optimizeTime:0,optimizeCount:0}}function measure(e){const n=process.hrtime();e();const t=process.hrtime(n);return 1e9*t[0]+t[1]}function printStats(e,n){function t(e,n){return e?(e/1e6).toFixed(3)+" ms":"N/A"}(n||process.stdout).write(["I/O Read : "+t(e.readTime,e.readCount),"I/O Write : "+t(e.writeTime,e.writeCount),"Parse : "+t(e.parseTime,e.parseCount),"Compile : "+t(e.compileTime,e.compileCount),"Emit : "+t(e.emitTime,e.emitCount),"Validate : "+t(e.validateTime,e.validateCount),"Optimize : "+t(e.optimizeTime,e.optimizeCount)].join(os.EOL)+os.EOL)}function createMemoryStream(e){var n=[];return n.write=function(n){"string"==typeof n?this.push(Buffer.from(n,"utf8")):this.push(n),e&&e(n)},n.toBuffer=function(){return Buffer.concat(this)},n.toString=function(){return this.toBuffer().toString("utf8")},n}(()=>{try{assemblyscript=__webpack_require__(6),isDev=!1;try{__webpack_require__(!function(){var e=new Error('Cannot find module "source-map-support"');throw e.code="MODULE_NOT_FOUND",e}()).install()}catch(e){}}catch(e){try{__webpack_require__(!function(){var e=new Error('Cannot find module "ts-node"');throw e.code="MODULE_NOT_FOUND",e}()).register({project:path.join(".","..","src","tsconfig.json")}),__webpack_require__(!function(){var e=new Error('Cannot find module "../src/glue/js"');throw e.code="MODULE_NOT_FOUND",e}()),assemblyscript=__webpack_require__(!function(){var e=new Error('Cannot find module "../src"');throw e.code="MODULE_NOT_FOUND",e}()),isDev=!0}catch(e){assemblyscript=eval("require('./assemblyscript')"),isDev=!1}}})(),exports.isBundle=!0,exports.isDev=isDev,exports.version=exports.isBundle?"0.5.0":__webpack_require__(!function(){var e=new Error('Cannot find module "../package.json"');throw e.code="MODULE_NOT_FOUND",e}()).version,exports.options=__webpack_require__(5),exports.sourceMapRoot="assemblyscript:///",exports.libraryPrefix=assemblyscript.LIBRARY_PREFIX,exports.defaultOptimizeLevel=2,exports.defaultShrinkLevel=1,exports.libraryFiles=exports.isBundle?Object({"(lib)/allocator/arena":'/**\n * @file Arena Memory Allocator\n *\n * Provides a `reset_memory` function to reset the heap to its initial state. A user has to make\n * sure that there are no more references to cleared memory afterwards. Always aligns to 8 bytes.\n */\n\nimport { MASK as AL_MASK } from "./common/alignment";\n\nvar offset: usize = (HEAP_BASE + AL_MASK) & ~AL_MASK;\n\n@global\nexport function allocate_memory(size: usize): usize {\n if (!size) return 0;\n var ptr = offset;\n var newPtr = (ptr + size + AL_MASK) & ~AL_MASK;\n var pagesBefore = current_memory();\n if (newPtr > pagesBefore << 16) {\n let pagesNeeded = ((newPtr - ptr + 0xffff) & ~0xffff) >>> 16;\n let pagesWanted = max(pagesBefore, pagesNeeded); // double memory\n if (grow_memory(pagesWanted) < 0) {\n if (grow_memory(pagesNeeded) < 0) {\n unreachable(); // out of memory\n }\n }\n }\n offset = newPtr;\n return ptr;\n}\n\n@global\nexport function free_memory(ptr: usize): void {\n // nop\n}\n\n@global\nexport function reset_memory(): void {\n offset = (HEAP_BASE + AL_MASK) & ~AL_MASK;\n}\n',"(lib)/allocator/buddy":'/**\n * @file Buddy Memory Allocator\n */\n\n/*\n Copyright 2018 Evan Wallace\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the "Software"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n*/// see: https://github.com/evanw/buddy-malloc\n\n/*\n * This file implements a buddy memory allocator, which is an allocator that\n * allocates memory within a fixed linear address range. It spans the address\n * range with a binary tree that tracks free space. Both "malloc" and "free"\n * are O(log N) time where N is the maximum possible number of allocations.\n *\n * The "buddy" term comes from how the tree is used. When memory is allocated,\n * nodes in the tree are split recursively until a node of the appropriate size\n * is reached. Every split results in two child nodes, each of which is the\n * buddy of the other. When a node is freed, the node and its buddy can be\n * merged again if the buddy is also free. This makes the memory available\n * for larger allocations again.\n */\n\n/*\n * Every allocation needs an 8-byte header to store the allocation size while\n * staying 8-byte aligned. The address returned by "malloc" is the address\n * right after this header (i.e. the size occupies the 8 bytes before the\n * returned address).\n */\nconst HEADER_SIZE: usize = 8;\n\n/*\n * The minimum allocation size is 16 bytes because we have an 8-byte header and\n * we need to stay 8-byte aligned.\n */\nconst MIN_ALLOC_LOG2: usize = 4;\nconst MIN_ALLOC: usize = 1 << MIN_ALLOC_LOG2;\n\n/*\n * The maximum allocation size is currently set to 2gb. This is the total size\n * of the heap. It\'s technically also the maximum allocation size because the\n * heap could consist of a single allocation of this size. But of course real\n * heaps will have multiple allocations, so the real maximum allocation limit\n * is at most 1gb.\n */\nconst MAX_ALLOC_LOG2: usize = 30; // 31;\nconst MAX_ALLOC: usize = 1 << MAX_ALLOC_LOG2;\n\n/*\n * Allocations are done in powers of two starting from MIN_ALLOC and ending at\n * MAX_ALLOC inclusive. Each allocation size has a bucket that stores the free\n * list for that allocation size.\n *\n * Given a bucket index, the size of the allocations in that bucket can be\n * found with "(size_t)1 << (MAX_ALLOC_LOG2 - bucket)".\n */\nconst BUCKET_COUNT: usize = MAX_ALLOC_LOG2 - MIN_ALLOC_LOG2 + 1;\n\n/*\n * Free lists are stored as circular doubly-linked lists. Every possible\n * allocation size has an associated free list that is threaded through all\n * currently free blocks of that size. That means MIN_ALLOC must be at least\n * "sizeof(list_t)". MIN_ALLOC is currently 16 bytes, so this will be true for\n * both 32-bit and 64-bit.\n */\n@unmanaged\nclass List {\n prev: List;\n next: List;\n static readonly SIZE: usize = 2 * sizeof();\n}\n\n/*\n * Each bucket corresponds to a certain allocation size and stores a free list\n * for that size. The bucket at index 0 corresponds to an allocation size of\n * MAX_ALLOC (i.e. the whole address space).\n */\nvar BUCKETS_START: usize = HEAP_BASE;\nvar BUCKETS_END: usize = BUCKETS_START + BUCKET_COUNT * List.SIZE;\n\nfunction buckets$get(index: usize): List {\n assert(index < BUCKET_COUNT);\n return changetype(BUCKETS_START + index * List.SIZE);\n}\n\n/*\n * We could initialize the allocator by giving it one free block the size of\n * the entire address space. However, this would cause us to instantly reserve\n * half of the entire address space on the first allocation, since the first\n * split would store a free list entry at the start of the right child of the\n * root. Instead, we have the tree start out small and grow the size of the\n * tree as we use more memory. The size of the tree is tracked by this value.\n */\nvar bucket_limit: usize;\n\n/*\n * This array represents a linearized binary tree of bits. Every possible\n * allocation larger than MIN_ALLOC has a node in this tree (and therefore a\n * bit in this array).\n *\n * Given the index for a node, lineraized binary trees allow you to traverse to\n * the parent node or the child nodes just by doing simple arithmetic on the\n * index:\n *\n * - Move to parent: index = (index - 1) / 2;\n * - Move to left child: index = index * 2 + 1;\n * - Move to right child: index = index * 2 + 2;\n * - Move to sibling: index = ((index - 1) ^ 1) + 1;\n *\n * Each node in this tree can be in one of several states:\n *\n * - UNUSED (both children are UNUSED)\n * - SPLIT (one child is UNUSED and the other child isn\'t)\n * - USED (neither children are UNUSED)\n *\n * These states take two bits to store. However, it turns out we have enough\n * information to distinguish between UNUSED and USED from context, so we only\n * need to store SPLIT or not, which only takes a single bit.\n *\n * Note that we don\'t need to store any nodes for allocations of size MIN_ALLOC\n * since we only ever care about parent nodes.\n */\nconst SPLIT_COUNT: usize = (1 << (BUCKET_COUNT - 1)) / 8;\nvar NODE_IS_SPLIT_START: usize = BUCKETS_END;\nvar NODE_IS_SPLIT_END: usize = NODE_IS_SPLIT_START + SPLIT_COUNT * sizeof();\n\nfunction node_is_split$get(index: usize): i32 {\n assert(index < SPLIT_COUNT);\n return load(NODE_IS_SPLIT_START + index);\n}\n\nfunction node_is_split$set(index: usize, state: i32): void {\n assert(index < SPLIT_COUNT);\n store(NODE_IS_SPLIT_START + index, state);\n}\n\n/*\n * This is the starting address of the address range for this allocator. Every\n * returned allocation will be an offset of this pointer from 0 to MAX_ALLOC.\n */\nvar base_ptr: usize;\n\n/*\n * This is the maximum address that has ever been used by the allocator. It\'s\n * used to know when to call "brk" to request more memory from the kernel.\n */\nvar max_ptr: usize;\n\n/*\n * Make sure all addresses before "new_value" are valid and can be used. Memory\n * is allocated in a 2gb address range but that memory is not reserved up\n * front. It\'s only reserved when it\'s needed by calling this function. This\n * will return false if the memory could not be reserved.\n */\nfunction update_max_ptr(new_value: usize): i32 {\n if (new_value > max_ptr) {\n // if (brk(new_value)) {\n // return 0;\n // }\n let oldPages = current_memory();\n let newPages = (((new_value + 0xffff) & ~0xffff) >> 16);\n assert(newPages > oldPages);\n if (grow_memory(newPages - oldPages) < 0) {\n return 0;\n }\n // max_ptr = new_value;\n max_ptr = newPages << 16;\n }\n return 1;\n}\n\n/*\n * Initialize a list to empty. Because these are circular lists, an "empty"\n * list is an entry where both links point to itself. This makes insertion\n * and removal simpler because they don\'t need any branches.\n */\nfunction list_init(list: List): void {\n list.prev = list;\n list.next = list;\n}\n\n/*\n * Append the provided entry to the end of the list. This assumes the entry\n * isn\'t in a list already because it overwrites the linked list pointers.\n */\nfunction list_push(list: List, entry: List): void {\n var prev = list.prev;\n entry.prev = prev;\n entry.next = list;\n prev.next = entry;\n list.prev = entry;\n}\n\n/*\n * Remove the provided entry from whichever list it\'s currently in. This\n * assumes that the entry is in a list. You don\'t need to provide the list\n * because the lists are circular, so the list\'s pointers will automatically\n * be updated if the first or last entries are removed.\n */\nfunction list_remove(entry: List): void {\n var prev = entry.prev;\n var next = entry.next;\n prev.next = next;\n next.prev = prev;\n}\n\n/*\n * Remove and return the first entry in the list or NULL if the list is empty.\n */\nfunction list_pop(list: List): List | null {\n var back = list.prev;\n if (back == list) return null;\n list_remove(back);\n return back;\n}\n\n/*\n * This maps from the index of a node to the address of memory that node\n * represents. The bucket can be derived from the index using a loop but is\n * required to be provided here since having them means we can avoid the loop\n * and have this function return in constant time.\n */\nfunction ptr_for_node(index: usize, bucket: usize): usize {\n return base_ptr + ((index - (1 << bucket) + 1) << (MAX_ALLOC_LOG2 - bucket));\n}\n\n/*\n * This maps from an address of memory to the node that represents that\n * address. There are often many nodes that all map to the same address, so\n * the bucket is needed to uniquely identify a node.\n */\nfunction node_for_ptr(ptr: usize, bucket: usize): usize {\n return ((ptr - base_ptr) >> (MAX_ALLOC_LOG2 - bucket)) + (1 << bucket) - 1;\n}\n\n/*\n * Given the index of a node, this returns the "is split" flag of the parent.\n */\nfunction parent_is_split(index: usize): i32 {\n index = (index - 1) / 2;\n return (node_is_split$get(index / 8) >>> (index % 8)) & 1;\n}\n\n/*\n * Given the index of a node, this flips the "is split" flag of the parent.\n */\nfunction flip_parent_is_split(index: usize): void {\n index = (index - 1) / 2;\n var indexDiv8 = index / 8;\n node_is_split$set(indexDiv8,\n node_is_split$get(indexDiv8) ^ (1 << (index % 8))\n );\n}\n\n/*\n * Given the requested size passed to "malloc", this function returns the index\n * of the smallest bucket that can fit that size.\n */\nfunction bucket_for_request(request: usize): usize {\n var bucket = BUCKET_COUNT - 1;\n var size = MIN_ALLOC;\n\n while (size < request) {\n bucket--;\n size *= 2;\n }\n\n return bucket;\n}\n\n/*\n * The tree is always rooted at the current bucket limit. This call grows the\n * tree by repeatedly doubling it in size until the root lies at the provided\n * bucket index. Each doubling lowers the bucket limit by 1.\n */\nfunction lower_bucket_limit(bucket: usize): u32 {\n while (bucket < bucket_limit) {\n let root = node_for_ptr(base_ptr, bucket_limit);\n let right_child: usize;\n\n /*\n * If the parent isn\'t SPLIT, that means the node at the current bucket\n * limit is UNUSED and our address space is entirely free. In that case,\n * clear the root free list, increase the bucket limit, and add a single\n * block with the newly-expanded address space to the new root free list.\n */\n if (!parent_is_split(root)) {\n list_remove(changetype(base_ptr));\n list_init(buckets$get(--bucket_limit));\n list_push(buckets$get(bucket_limit), changetype(base_ptr));\n continue;\n }\n\n /*\n * Otherwise, the tree is currently in use. Create a parent node for the\n * current root node in the SPLIT state with a right child on the free\n * list. Make sure to reserve the memory for the free list entry before\n * writing to it. Note that we do not need to flip the "is split" flag for\n * our current parent because it\'s already on (we know because we just\n * checked it above).\n */\n right_child = ptr_for_node(root + 1, bucket_limit);\n if (!update_max_ptr(right_child + List.SIZE)) {\n return 0;\n }\n list_push(buckets$get(bucket_limit), changetype(right_child));\n list_init(buckets$get(--bucket_limit));\n\n /*\n * Set the grandparent\'s SPLIT flag so if we need to lower the bucket limit\n * again, we\'ll know that the new root node we just added is in use.\n */\n root = (root - 1) / 2;\n if (root != 0) {\n flip_parent_is_split(root);\n }\n }\n\n return 1;\n}\n\n@global\nexport function allocate_memory(request: usize): usize {\n var original_bucket: usize, bucket: usize;\n\n /*\n * Make sure it\'s possible for an allocation of this size to succeed. There\'s\n * a hard-coded limit on the maximum allocation size because of the way this\n * allocator works.\n */\n if (request + HEADER_SIZE > MAX_ALLOC) {\n return 0;\n }\n\n /*\n * Initialize our global state if this is the first call to "malloc". At the\n * beginning, the tree has a single node that represents the smallest\n * possible allocation size. More memory will be reserved later as needed.\n */\n if (base_ptr == 0) {\n // base_ptr = max_ptr = (uint8_t *)sbrk(0);\n base_ptr = (NODE_IS_SPLIT_END + 7) & ~7; // must be aligned\n max_ptr = current_memory() << 16; // must grow first\n bucket_limit = BUCKET_COUNT - 1;\n if (!update_max_ptr(base_ptr + List.SIZE)) {\n return 0;\n }\n list_init(buckets$get(BUCKET_COUNT - 1));\n list_push(buckets$get(BUCKET_COUNT - 1), changetype(base_ptr));\n }\n\n /*\n * Find the smallest bucket that will fit this request. This doesn\'t check\n * that there\'s space for the request yet.\n */\n bucket = bucket_for_request(request + HEADER_SIZE);\n original_bucket = bucket;\n\n /*\n * Search for a bucket with a non-empty free list that\'s as large or larger\n * than what we need. If there isn\'t an exact match, we\'ll need to split a\n * larger one to get a match.\n */\n while (bucket + 1 != 0) {\n let size: usize, bytes_needed: usize, i: usize;\n let ptr: usize;\n\n /*\n * We may need to grow the tree to be able to fit an allocation of this\n * size. Try to grow the tree and stop here if we can\'t.\n */\n if (!lower_bucket_limit(bucket)) {\n return 0;\n }\n\n /*\n * Try to pop a block off the free list for this bucket. If the free list\n * is empty, we\'re going to have to split a larger block instead.\n */\n ptr = changetype(list_pop(buckets$get(bucket)));\n if (!ptr) {\n /*\n * If we\'re not at the root of the tree or it\'s impossible to grow the\n * tree any more, continue on to the next bucket.\n */\n if (bucket != bucket_limit || bucket == 0) {\n bucket--;\n continue;\n }\n\n /*\n * Otherwise, grow the tree one more level and then pop a block off the\n * free list again. Since we know the root of the tree is used (because\n * the free list was empty), this will add a parent above this node in\n * the SPLIT state and then add the new right child node to the free list\n * for this bucket. Popping the free list will give us this right child.\n */\n if (!lower_bucket_limit(bucket - 1)) {\n return 0;\n }\n ptr = changetype(list_pop(buckets$get(bucket)));\n }\n\n /*\n * Try to expand the address space first before going any further. If we\n * have run out of space, put this block back on the free list and fail.\n */\n size = 1 << (MAX_ALLOC_LOG2 - bucket);\n bytes_needed = bucket < original_bucket ? size / 2 + List.SIZE : size;\n if (!update_max_ptr(ptr + bytes_needed)) {\n list_push(buckets$get(bucket), changetype(ptr));\n return 0;\n }\n\n /*\n * If we got a node off the free list, change the node from UNUSED to USED.\n * This involves flipping our parent\'s "is split" bit because that bit is\n * the exclusive-or of the UNUSED flags of both children, and our UNUSED\n * flag (which isn\'t ever stored explicitly) has just changed.\n *\n * Note that we shouldn\'t ever need to flip the "is split" bit of our\n * grandparent because we know our buddy is USED so it\'s impossible for our\n * grandparent to be UNUSED (if our buddy chunk was UNUSED, our parent\n * wouldn\'t ever have been split in the first place).\n */\n i = node_for_ptr(ptr, bucket);\n if (i != 0) {\n flip_parent_is_split(i);\n }\n\n /*\n * If the node we got is larger than we need, split it down to the correct\n * size and put the new unused child nodes on the free list in the\n * corresponding bucket. This is done by repeatedly moving to the left\n * child, splitting the parent, and then adding the right child to the free\n * list.\n */\n while (bucket < original_bucket) {\n i = i * 2 + 1;\n bucket++;\n flip_parent_is_split(i);\n list_push(\n buckets$get(bucket),\n changetype(ptr_for_node(i + 1, bucket))\n );\n }\n\n /*\n * Now that we have a memory address, write the block header (just the size\n * of the allocation) and return the address immediately after the header.\n */\n store(ptr, request);\n return ptr + HEADER_SIZE;\n }\n\n return 0;\n}\n\n@global\nexport function free_memory(ptr: usize): void {\n var bucket: usize, i: usize;\n\n /*\n * Ignore any attempts to free a NULL pointer.\n */\n if (!ptr) {\n return;\n }\n\n /*\n * We were given the address returned by "malloc" so get back to the actual\n * address of the node by subtracting off the size of the block header. Then\n * look up the index of the node corresponding to this address.\n */\n ptr = ptr - HEADER_SIZE;\n bucket = bucket_for_request(load(ptr) + HEADER_SIZE);\n i = node_for_ptr(ptr, bucket);\n\n /*\n * Traverse up to the root node, flipping USED blocks to UNUSED and merging\n * UNUSED buddies together into a single UNUSED parent.\n */\n while (i != 0) {\n /*\n * Change this node from UNUSED to USED. This involves flipping our\n * parent\'s "is split" bit because that bit is the exclusive-or of the\n * UNUSED flags of both children, and our UNUSED flag (which isn\'t ever\n * stored explicitly) has just changed.\n */\n flip_parent_is_split(i);\n\n /*\n * If the parent is now SPLIT, that means our buddy is USED, so don\'t merge\n * with it. Instead, stop the iteration here and add ourselves to the free\n * list for our bucket.\n *\n * Also stop here if we\'re at the current root node, even if that root node\n * is now UNUSED. Root nodes don\'t have a buddy so we can\'t merge with one.\n */\n if (parent_is_split(i) || bucket == bucket_limit) {\n break;\n }\n\n /*\n * If we get here, we know our buddy is UNUSED. In this case we should\n * merge with that buddy and continue traversing up to the root node. We\n * need to remove the buddy from its free list here but we don\'t need to\n * add the merged parent to its free list yet. That will be done once after\n * this loop is finished.\n */\n list_remove(changetype(ptr_for_node(((i - 1) ^ 1) + 1, bucket)));\n i = (i - 1) / 2;\n bucket--;\n }\n\n /*\n * Add ourselves to the free list for our bucket. We add to the back of the\n * list because "malloc" takes from the back of the list and we want a "free"\n * followed by a "malloc" of the same size to ideally use the same address\n * for better memory locality.\n */\n list_push(buckets$get(bucket), changetype(ptr_for_node(i, bucket)));\n}\n\n@global\nexport function reset_memory(): void {\n unreachable();\n}\n',"(lib)/allocator/common/alignment":"/** Number of alignment bits. */\nexport const BITS: u32 = 3;\n\n/** Number of possible alignment values. */\nexport const SIZE: usize = 1 << BITS;\n\n/** Mask to obtain just the alignment bits. */\nexport const MASK: usize = SIZE - 1;\n","(lib)/allocator/emscripten":"/**\n * @file Emscripten Memory Allocator\n *\n * Uses Emscripten's exported _malloc and _free implementations, i.e., when linking with\n * Emscripten-compiled programs that already provide these. Differs from 'system' in that their\n * names are prefixed with an underscore.\n */\n\ndeclare function _malloc(size: usize): usize;\ndeclare function _free(ptr: usize): void;\n\n@global\nexport function allocate_memory(size: usize): usize {\n return _malloc(size);\n}\n\n@global\nexport function free_memory(ptr: usize): void {\n _free(ptr);\n}\n\n@global\nexport function reset_memory(): void {\n unreachable();\n}\n","(lib)/allocator/system":"/**\n * @file System Memory Allocator\n *\n * Uses the environment's malloc and free implementations, i.e., when linking with other C-like\n * programs that already provide these.\n */\n\ndeclare function malloc(size: usize): usize;\ndeclare function free(ptr: usize): void;\n\n@global\nexport function allocate_memory(size: usize): usize {\n return malloc(size);\n}\n\n@global\nexport function free_memory(ptr: usize): void {\n free(ptr);\n}\n\n@global\nexport function reset_memory(): void {\n unreachable();\n}\n","(lib)/allocator/tlsf":"/**\n * @file Two-Level Segregate Fit Memory Allocator\n *\n * A general purpose dynamic memory allocator specifically designed to meet real-time requirements.\n * Always aligns to 8 bytes.\n */\n\n// ╒══════════════ Block size interpretation (32-bit) ═════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┼─┴─┴─┴─┴─╫─┴─┴─┤\n// │ | FL │ SB = SL + AL │ ◄─ usize\n// └───────────────────────────────────────────────┴─────────╨─────┘\n// FL: first level, SL: second level, AL: alignment, SB: small block\n\nimport {\n BITS as AL_BITS,\n SIZE as AL_SIZE,\n MASK as AL_MASK\n} from \"./common/alignment\";\n\nconst SL_BITS: u32 = 5;\nconst SL_SIZE: usize = 1 << SL_BITS;\n\nconst SB_BITS: usize = (SL_BITS + AL_BITS);\nconst SB_SIZE: usize = 1 << SB_BITS;\n\nconst FL_BITS: u32 = (sizeof() == sizeof()\n ? 30 // ^= up to 1GB per block\n : 32 // ^= up to 4GB per block\n) - SB_BITS;\n\n// ╒════════════════ Block structure layout (32-bit) ══════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┼─┼─┤\n// │ size │L│F│ ◄─┐ info\n// ╞═══════════════════════════════════════════════════════════╧═╧═╡ │ ┐\n// │ if free: ◄ prev │ ◄─┤ usize\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ if free: next ► │ ◄─┤\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ ... unused free space >= 0 ... │ │ = 0\n// ├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤ │\n// │ if free: jump ▲ │ ◄─┘\n// └───────────────────────────────────────────────────────────────┘ MIN SIZE ┘\n// F: FREE, L: LEFT_FREE\n\n/** Tag indicating that this block is free. */\nconst FREE: usize = 1 << 0;\n/** Tag indicating that this block's left block is free. */\nconst LEFT_FREE: usize = 1 << 1;\n/** Mask to obtain all tags. */\nconst TAGS: usize = FREE | LEFT_FREE;\n\n/** Block structure. */\n@unmanaged\nclass Block {\n\n /** Info field holding this block's size and tags. */\n info: usize;\n\n /** End offset of the {@link Block#info} field. User data starts here. */\n static readonly INFO: usize = (sizeof() + AL_MASK) & ~AL_MASK;\n\n /** Previous free block, if any. Only valid if free. */\n prev: Block | null;\n /** Next free block, if any. Only valid if free. */\n next: Block | null;\n\n /** Minimum size of a block, excluding {@link Block#info}. */\n static readonly MIN_SIZE: usize = (3 * sizeof() + AL_MASK) & ~AL_MASK;// prev + next + jump\n\n /** Maximum size of a used block, excluding {@link Block#info}. */\n static readonly MAX_SIZE: usize = 1 << (FL_BITS + SB_BITS);\n\n /** Gets this block's left (free) block in memory. */\n get left(): Block {\n assert(this.info & LEFT_FREE); // must be free to contain a jump\n return assert(\n load(changetype(this) - sizeof())\n ); // can't be null\n }\n\n /** Gets this block's right block in memory. */\n get right(): Block {\n assert(this.info & ~TAGS); // can't skip beyond the tail block\n return assert(\n changetype(\n changetype(this) + Block.INFO + (this.info & ~TAGS)\n )\n ); // can't be null\n }\n}\n\n// ╒════════════════ Root structure layout (32-bit) ═══════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤ ┐\n// │ 0 | flMap S│ ◄────┐\n// ╞═══════════════════════════════════════════════════════════════╡ │\n// │ slMap[0] S │ ◄─┐ │\n// ├───────────────────────────────────────────────────────────────┤ │ │\n// │ slMap[1] │ ◄─┤ │\n// ├───────────────────────────────────────────────────────────────┤ u32 │\n// │ ... │ ◄─┤ │\n// ├───────────────────────────────────────────────────────────────┤ │ │\n// │ slMap[22] P │ ◄─┘ │\n// ╞═══════════════════════════════════════════════════════════════╡ usize\n// │ head[0] │ ◄────┤\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ ... │ ◄────┤\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ head[736] │ ◄────┤\n// ╞═══════════════════════════════════════════════════════════════╡ │\n// │ tailRef │ ◄────┘\n// └───────────────────────────────────────────────────────────────┘ SIZE ┘\n// S: Small blocks map, P: Possibly padded if 64-bit\n\nassert((1 << SL_BITS) <= 32); // second level must fit into 32 bits\n\n/** Root structure. */\n@unmanaged\nclass Root {\n\n /** First level bitmap. */\n flMap: usize = 0;\n\n /** Start offset of second level maps. */\n private static readonly SL_START: usize = sizeof();\n\n // Using *one* SL map per *FL bit*\n\n /** Gets the second level map for the specified first level. */\n getSLMap(fl: usize): u32 {\n assert(fl < FL_BITS); // fl out of range\n return load(changetype(this) + fl * 4, Root.SL_START);\n }\n\n /** Sets the second level map for the specified first level. */\n setSLMap(fl: usize, value: u32): void {\n assert(fl < FL_BITS); // fl out of range\n store(changetype(this) + fl * 4, value, Root.SL_START);\n }\n\n /** End offset of second level maps. */\n private static readonly SL_END: usize = Root.SL_START + FL_BITS * 4;\n\n // Using *number bits per SL* heads per *FL bit*\n\n /** Start offset of FL/SL heads. */\n private static readonly HL_START: usize = (Root.SL_END + AL_MASK) & ~AL_MASK;\n\n /** Gets the head of the specified first and second level index. */\n getHead(fl: usize, sl: u32): Block | null {\n assert(fl < FL_BITS); // fl out of range\n assert(sl < SL_SIZE); // sl out of range\n return changetype(load(\n changetype(this) + (fl * SL_SIZE + sl) * sizeof()\n , Root.HL_START));\n }\n\n /** Sets the head of the specified first and second level index. */\n setHead(fl: usize, sl: u32, value: Block | null): void {\n assert(fl < FL_BITS); // fl out of range\n assert(sl < SL_SIZE); // sl out of range\n store(\n changetype(this) + (fl * SL_SIZE + sl) * sizeof()\n , changetype(value)\n , Root.HL_START);\n }\n\n /** End offset of FL/SL heads. */\n private static readonly HL_END: usize = (\n Root.HL_START + FL_BITS * SL_SIZE * sizeof()\n );\n\n get tailRef(): usize { return load(0, Root.HL_END); }\n set tailRef(value: usize) { store(0, value, Root.HL_END); }\n\n /** Total size of the {@link Root} structure. */\n static readonly SIZE: usize = Root.HL_END + sizeof();\n\n /** Inserts a previously used block back into the free list. */\n insert(block: Block): void {\n // check as much as possible here to prevent invalid free blocks\n assert(block); // cannot be null\n var blockInfo = block.info;\n assert(blockInfo & FREE); // must be free\n var size: usize;\n assert(\n (size = block.info & ~TAGS) >= Block.MIN_SIZE && size < Block.MAX_SIZE\n ); // must be valid, not necessary to compute yet if noAssert=true\n\n var right: Block = assert(block.right); // can't be null\n var rightInfo = right.info;\n\n // merge with right block if also free\n if (rightInfo & FREE) {\n this.remove(right);\n block.info = (blockInfo += Block.INFO + (rightInfo & ~TAGS));\n right = block.right;\n rightInfo = right.info;\n // jump is set below\n }\n\n // merge with left block if also free\n if (blockInfo & LEFT_FREE) {\n let left: Block = assert(block.left); // can't be null\n let leftInfo = left.info;\n assert(leftInfo & FREE); // must be free according to tags\n this.remove(left);\n left.info = (leftInfo += Block.INFO + (blockInfo & ~TAGS));\n block = left;\n blockInfo = leftInfo;\n // jump is set below\n }\n\n right.info = rightInfo | LEFT_FREE;\n this.setJump(block, right);\n // right is no longer used now, hence rightInfo is not synced\n\n size = blockInfo & ~TAGS;\n assert(size >= Block.MIN_SIZE && size < Block.MAX_SIZE); // must be valid\n\n // mapping_insert\n var fl: usize, sl: u32;\n if (size < SB_SIZE) {\n fl = 0;\n sl = (size / AL_SIZE);\n } else {\n fl = fls(size);\n sl = ((size >> (fl - SL_BITS)) ^ (1 << SL_BITS));\n fl -= SB_BITS - 1;\n }\n\n // perform insertion\n var head = this.getHead(fl, sl);\n block.prev = null;\n block.next = head;\n if (head) head.prev = block;\n this.setHead(fl, sl, block);\n\n // update first and second level maps\n this.flMap |= (1 << fl);\n this.setSLMap(fl, this.getSLMap(fl) | (1 << sl));\n }\n\n /**\n * Removes a free block from FL/SL maps. Does not alter left/jump because it\n * is likely that splitting is performed afterwards, invalidating any changes\n * again.\n */\n private remove(block: Block): void {\n var blockInfo = block.info;\n assert(blockInfo & FREE); // must be free\n var size = blockInfo & ~TAGS;\n assert(size >= Block.MIN_SIZE && size < Block.MAX_SIZE); // must be valid\n\n // mapping_insert\n var fl: usize, sl: u32;\n if (size < SB_SIZE) {\n fl = 0;\n sl = (size / AL_SIZE);\n } else {\n fl = fls(size);\n sl = ((size >> (fl - SL_BITS)) ^ (1 << SL_BITS));\n fl -= SB_BITS - 1;\n }\n\n // link previous and next free block\n var prev = block.prev;\n var next = block.next;\n if (prev) prev.next = next;\n if (next) next.prev = prev;\n\n // update head if we are removing it\n if (block == this.getHead(fl, sl)) {\n this.setHead(fl, sl, next);\n\n // clear second level map if head is empty now\n if (!next) {\n let slMap = this.getSLMap(fl);\n this.setSLMap(fl, slMap &= ~(1 << sl));\n\n // clear first level map if second level is empty now\n if (!slMap) this.flMap &= ~(1 << fl);\n }\n }\n }\n\n /** Searches for a free block of at least the specified size. */\n search(size: usize): Block | null {\n assert(size >= Block.MIN_SIZE && size < Block.MAX_SIZE);\n\n // mapping_search\n var fl: usize, sl: u32;\n if (size < SB_SIZE) {\n fl = 0;\n sl = (size / AL_SIZE);\n } else {\n // (*) size += (1 << (fls(size) - SL_BITS)) - 1;\n fl = fls(size);\n sl = ((size >> (fl - SL_BITS)) ^ (1 << SL_BITS));\n fl -= SB_BITS - 1;\n // (*) instead of rounding up, use next second level list for better fit\n if (sl < SL_SIZE - 1) ++sl;\n else ++fl, sl = 0;\n }\n\n // search second level\n var slMap = this.getSLMap(fl) & (~0 << sl);\n var head: Block | null;\n if (!slMap) {\n // search next larger first level\n let flMap = this.flMap & (~0 << (fl + 1));\n if (!flMap) {\n head = null;\n } else {\n fl = ffs(flMap);\n slMap = assert(this.getSLMap(fl)); // can't be zero if fl points here\n head = this.getHead(fl, ffs(slMap));\n }\n } else {\n head = this.getHead(fl, ffs(slMap));\n }\n return head;\n }\n\n /** Links a free left with its right block in memory. */\n private setJump(left: Block, right: Block): void {\n assert(left.info & FREE); // must be free\n assert(left.right == right); // right block must match\n assert(right.info & LEFT_FREE); // right block must be tagged as LEFT_FREE\n store(\n changetype(right) - sizeof()\n , left); // last word in left block's (free) data region\n }\n\n /**\n * Uses the specified free block, removing it from internal maps and\n * splitting it if possible, and returns its data pointer.\n */\n use(block: Block, size: usize): usize {\n var blockInfo = block.info;\n assert(blockInfo & FREE); // must be free so we can use it\n assert(size >= Block.MIN_SIZE && size < Block.MAX_SIZE); // must be valid\n assert(!(size & AL_MASK)); // size must be aligned so the new block is\n\n this.remove(block);\n\n // split if the block can hold another MIN_SIZE block\n var remaining = (blockInfo & ~TAGS) - size;\n if (remaining >= Block.INFO + Block.MIN_SIZE) {\n block.info = size | (blockInfo & LEFT_FREE); // also discards FREE\n\n let spare = changetype(\n changetype(block) + Block.INFO + size\n );\n spare.info = (remaining - Block.INFO) | FREE; // not LEFT_FREE\n this.insert(spare); // also sets jump\n\n // otherwise tag block as no longer FREE and right as no longer LEFT_FREE\n } else {\n block.info = blockInfo & ~FREE;\n let right: Block = assert(block.right); // can't be null (tail)\n right.info &= ~LEFT_FREE;\n }\n\n return changetype(block) + Block.INFO;\n }\n\n /** Adds more memory to the pool. */\n addMemory(start: usize, end: usize): bool {\n assert(start <= end);\n assert(!(start & AL_MASK)); // must be aligned\n assert(!(end & AL_MASK)); // must be aligned\n\n var tailRef = this.tailRef;\n var tailInfo: usize = 0;\n if (tailRef) {\n assert(start >= tailRef + sizeof()); // starts after tail\n\n // merge with current tail if adjacent\n if (start - Block.INFO == tailRef) {\n start -= Block.INFO;\n tailInfo = changetype(tailRef).info;\n }\n\n } else {\n assert(start >= changetype(this) + Root.SIZE); // starts after root\n }\n\n // check if size is large enough for a free block and the tail block\n var size = end - start;\n if (size < Block.INFO + Block.MIN_SIZE + Block.INFO) {\n return false;\n }\n\n // left size is total minus its own and the zero-length tail's header\n var leftSize = size - 2 * Block.INFO;\n var left = changetype(start);\n left.info = leftSize | FREE | (tailInfo & LEFT_FREE);\n left.prev = null;\n left.next = null;\n\n // tail is a zero-length used block\n var tail = changetype(start + size - Block.INFO);\n tail.info = 0 | LEFT_FREE;\n this.tailRef = changetype(tail);\n\n this.insert(left); // also merges with free left before tail / sets jump\n\n return true;\n }\n}\n\n/** Determines the first (LSB to MSB) set bit's index of a word. */\nfunction ffs(word: T): T {\n assert(word != 0); // word cannot be 0\n return ctz(word); // differs from ffs only for 0\n}\n\n/** Determines the last (LSB to MSB) set bit's index of a word. */\nfunction fls(word: T): T {\n assert(word != 0); // word cannot be 0\n const inv: T = (sizeof() << 3) - 1;\n return inv - clz(word);\n}\n\n/** Reference to the initialized {@link Root} structure, once initialized. */\nvar ROOT: Root = changetype(0);\n\n// External interface\n\n/** Allocates a chunk of memory. */\n@global\nexport function allocate_memory(size: usize): usize {\n\n // initialize if necessary\n var root = ROOT;\n if (!root) {\n let rootOffset = (HEAP_BASE + AL_MASK) & ~AL_MASK;\n ROOT = root = changetype(rootOffset);\n root.tailRef = 0;\n root.flMap = 0;\n for (let fl: usize = 0; fl < FL_BITS; ++fl) {\n root.setSLMap(fl, 0);\n for (let sl: u32 = 0; sl < SL_SIZE; ++sl) {\n root.setHead(fl, sl, null);\n }\n }\n root.addMemory((rootOffset + Root.SIZE + AL_MASK) & ~AL_MASK, current_memory() << 16);\n }\n\n // search for a suitable block\n var data: usize = 0;\n if (size && size < Block.MAX_SIZE) {\n size = max((size + AL_MASK) & ~AL_MASK, Block.MIN_SIZE);\n\n let block = root.search(size);\n if (!block) {\n\n // request more memory\n let pagesBefore = current_memory();\n let pagesNeeded = ((size + 0xffff) & ~0xffff) >>> 16;\n let pagesWanted = max(pagesBefore, pagesNeeded); // double memory\n if (grow_memory(pagesWanted) < 0) {\n if (grow_memory(pagesNeeded) < 0) {\n unreachable(); // out of memory\n }\n }\n let pagesAfter = current_memory();\n root.addMemory(pagesBefore << 16, pagesAfter << 16);\n block = assert(root.search(size)); // must be found now\n }\n\n assert((block.info & ~TAGS) >= size);\n data = root.use(block, size);\n }\n\n return data;\n}\n\n/** Frees the chunk of memory at the specified address. */\n@global\nexport function free_memory(data: usize): void {\n if (data) {\n let root = ROOT;\n if (root) {\n let block = changetype(data - Block.INFO);\n let blockInfo = block.info;\n assert(!(blockInfo & FREE)); // must be used\n block.info = blockInfo | FREE;\n root.insert(changetype(data - Block.INFO));\n }\n }\n}\n\n@global\nexport function reset_memory(): void {\n unreachable();\n}\n","(lib)/array":'export class Array {\n\n private __memory: usize;\n private __capacity: i32; // capped to [0, 0x7fffffff]\n private __length: i32; // capped to [0, __capacity]\n\n private __grow(newCapacity: i32): void {\n assert(newCapacity > this.__capacity);\n var newMemory = allocate_memory(newCapacity * sizeof());\n if (this.__memory) {\n move_memory(newMemory, this.__memory, this.__capacity * sizeof());\n free_memory(this.__memory);\n }\n this.__memory = newMemory;\n this.__capacity = newCapacity;\n }\n\n constructor(capacity: i32 = 0) {\n if (capacity < 0) {\n throw new RangeError("Invalid array length");\n }\n this.__memory = capacity\n ? allocate_memory(capacity * sizeof())\n : 0;\n this.__capacity = this.__length = capacity;\n }\n\n get length(): i32 {\n return this.__length;\n }\n\n set length(length: i32) {\n if (length < 0) {\n throw new RangeError("Invalid array length");\n }\n if (length > this.__capacity) {\n this.__grow(max(length, this.__capacity << 1));\n }\n this.__length = length;\n }\n\n @operator("[]")\n private __get(index: i32): T {\n if (index >= this.__capacity) {\n throw new Error("Index out of bounds"); // return changetype(0) ?\n }\n return load(this.__memory + index * sizeof());\n }\n\n @operator("[]=")\n private __set(index: i32, value: T): void {\n if (index < 0) {\n throw new Error("Index out of bounds");\n }\n if (index >= this.__capacity) {\n this.__grow(max(index + 1, this.__capacity << 1));\n }\n store(this.__memory + index * sizeof(), value);\n }\n\n indexOf(searchElement: T, fromIndex: i32 = 0): i32 {\n if (fromIndex < 0) {\n fromIndex = this.__length + fromIndex;\n }\n while (fromIndex < this.__length) {\n if (load(this.__memory + fromIndex * sizeof()) == searchElement) {\n return fromIndex;\n }\n ++fromIndex;\n }\n return -1;\n }\n\n lastIndexOf(searchElement: T, fromIndex: i32 = 0): i32 {\n if (fromIndex < 0) {\n fromIndex = this.__length + fromIndex;\n } else if (fromIndex >= this.__length) {\n fromIndex = this.__length - 1;\n }\n while (fromIndex >= 0) {\n if (load(this.__memory + fromIndex * sizeof()) == searchElement) {\n return fromIndex;\n }\n --fromIndex;\n }\n return -1;\n }\n\n push(element: T): i32 {\n if (this.__length == this.__capacity) {\n this.__grow(this.__capacity ? this.__capacity << 1 : 1);\n }\n store(this.__memory + this.__length * sizeof(), element);\n return ++this.__length;\n }\n\n pop(): T {\n if (this.__length < 1) {\n throw new RangeError("Array is empty"); // return changetype(0) ?\n }\n return load(this.__memory + --this.__length * sizeof());\n }\n\n shift(): T {\n if (this.__length < 1) {\n throw new RangeError("Array is empty"); // return changetype(0) ?\n }\n var element = load(this.__memory);\n move_memory(\n this.__memory,\n this.__memory + sizeof(),\n (this.__capacity - 1) * sizeof()\n );\n set_memory(\n this.__memory + (this.__capacity - 1) * sizeof(),\n 0,\n sizeof()\n );\n --this.__length;\n return element;\n }\n\n unshift(element: T): i32 {\n var oldCapacity = this.__capacity;\n if (this.__length == oldCapacity) {\n // inlined __grow (avoids moving twice)\n let newCapacity: i32 = oldCapacity ? oldCapacity << 1 : 1;\n assert(newCapacity > this.__capacity);\n let newMemory = allocate_memory(newCapacity * sizeof());\n if (this.__memory) {\n move_memory(\n newMemory + sizeof(),\n this.__memory,\n oldCapacity * sizeof()\n );\n free_memory(this.__memory);\n }\n this.__memory = newMemory;\n this.__capacity = newCapacity;\n } else {\n move_memory(\n this.__memory + sizeof(),\n this.__memory,\n oldCapacity * sizeof()\n );\n }\n store(this.__memory, element);\n return ++this.__length;\n }\n\n slice(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Array {\n if (begin < 0) {\n begin = this.__length + begin;\n if (begin < 0) {\n begin = 0;\n }\n } else if (begin > this.__length) {\n begin = this.__length;\n }\n if (end < 0) {\n end = this.__length + end;\n } else if (end > this.__length) {\n end = this.__length;\n }\n if (end < begin) {\n end = begin;\n }\n var capacity = end - begin;\n assert(capacity >= 0);\n var sliced = new Array(capacity);\n if (capacity) {\n move_memory(\n sliced.__memory,\n this.__memory + begin * sizeof(),\n capacity * sizeof()\n );\n }\n return sliced;\n }\n\n splice(start: i32, deleteCount: i32 = i32.MAX_VALUE): void {\n if (deleteCount < 1) {\n return;\n }\n if (start < 0) {\n start = this.__length + start;\n if (start < 0) {\n start = 0;\n } else if (start >= this.__length) {\n return;\n }\n } else if (start >= this.__length) {\n return;\n }\n deleteCount = min(deleteCount, this.__length - start);\n move_memory(\n this.__memory + start * sizeof(),\n this.__memory + (start + deleteCount) * sizeof(),\n deleteCount * sizeof()\n );\n this.__length -= deleteCount;\n }\n\n reverse(): Array {\n for (let front: usize = 0, back: usize = this.__length - 1; front < back; ++front, --back) {\n let temp = load(this.__memory + front * sizeof());\n store(this.__memory + front * sizeof(), load(this.__memory + back * sizeof()));\n store(this.__memory + back * sizeof(), temp);\n }\n return this;\n }\n}\n\n@unmanaged\nexport class CArray {\n\n private constructor() {}\n\n @operator("[]")\n private __get(index: i32): T {\n if (index < 0) {\n throw new RangeError("Index out of range");\n }\n return load(changetype(this) + index * sizeof());\n }\n\n @operator("[]=")\n private __set(index: i32, value: T): void {\n if (index < 0) {\n throw new RangeError("Index out of range");\n }\n store(changetype(this) + index * sizeof(), value);\n }\n}\n',"(lib)/builtins":"@builtin\nexport declare const NaN: f64; // | f32\n\n@builtin\nexport declare const Infinity: f64; // | f32\n\n@builtin\nexport declare function isNaN(value: T): bool;\n\n@builtin\nexport declare function isFinite(value: T): bool;\n\n@builtin\nexport declare function clz(value: T): T;\n\n@builtin\nexport declare function ctz(value: T): T;\n\n@builtin\nexport declare function popcnt(value: T): T;\n\n@builtin\nexport declare function rotl(value: T, shift: T): T;\n\n@builtin\nexport declare function rotr(value: T, shift: T): T;\n\n@builtin\nexport declare function abs(value: T): T;\n\n@builtin\nexport declare function max(left: T, right: T): T;\n\n@builtin\nexport declare function min(left: T, right: T): T;\n\n@builtin\nexport declare function ceil(value: T): T;\n\n@builtin\nexport declare function floor(value: T): T;\n\n@builtin\nexport declare function copysign(left: T, right: T): T;\n\n@builtin\nexport declare function nearest(left: T, right: T): T;\n\n@builtin\nexport declare function reinterpret(value: void): T;\n\n@builtin\nexport declare function sqrt(value: T): T;\n\n@builtin\nexport declare function trunc(value: T): T;\n\n@builtin\nexport declare function load(offset: usize, constantOffset?: usize): T;\n\n@builtin\nexport declare function store(offset: usize, value: void, constantOffset?: usize): T;\n\n@builtin\nexport declare function sizeof(): usize;\n\n@builtin\nexport declare function select(ifTrue: T, ifFalse: T, condition: bool): T;\n\n@builtin\nexport declare function unreachable(): void;\n\n@builtin\nexport declare function current_memory(): i32;\n\n@builtin\nexport declare function grow_memory(pages: i32): i32;\n\n// @builtin\n// export declare function move_memory(dest: usize, src: usize: n: usize): void;\n\n// @builtin\n// export declare function set_memory(dest: usize, value: u32, n: usize): void;\n\n@builtin\nexport declare function changetype(value: void): T;\n\n@builtin\nexport declare function assert(isTrueish: T, message?: string): T;\n\n@builtin\nexport declare function abort(\n message?: string | null,\n fileName?: string | null,\n lineNumber?: u32,\n columnNumber?: u32\n): void;\n\n@builtin\ndeclare function i8(value: void): i8;\nnamespace i8 {\n export const MIN_VALUE: i8 = -128;\n export const MAX_VALUE: i8 = 127;\n}\nexport { i8 };\n\n@builtin\ndeclare function i16(value: void): i16;\nnamespace i16 {\n export const MIN_VALUE: i16 = -32768;\n export const MAX_VALUE: i16 = 32767;\n}\nexport { i16 };\n\n@builtin\ndeclare function i32(value: void): i32;\nnamespace i32 {\n export const MIN_VALUE: i32 = -2147483648;\n export const MAX_VALUE: i32 = 2147483647;\n}\nexport { i32 };\n\n@builtin\ndeclare function i64(value: void): i64;\nnamespace i64 {\n export const MIN_VALUE: i64 = -9223372036854775808;\n export const MAX_VALUE: i64 = 9223372036854775807;\n}\nexport { i64 };\n\n@builtin\ndeclare function isize(value: void): isize;\nnamespace isize {\n export const MIN_VALUE: isize = sizeof() == sizeof()\n ? -2147483648\n : -9223372036854775808;\n export const MAX_VALUE: isize = sizeof() == sizeof()\n ? 2147483647\n : 9223372036854775807;\n}\nexport { isize };\n\n@builtin\ndeclare function u8(value: void): u8;\nnamespace u8 {\n export const MIN_VALUE: u8 = 0;\n export const MAX_VALUE: u8 = 255;\n}\nexport { u8 };\n\n@builtin\ndeclare function u16(value: void): u16;\nnamespace u16 {\n export const MIN_VALUE: u16 = 0;\n export const MAX_VALUE: u16 = 65535;\n}\nexport { u16 };\n\n@builtin\ndeclare function u32(value: void): u32;\nnamespace u32 {\n export const MIN_VALUE: u32 = 0;\n export const MAX_VALUE: u32 = 4294967295;\n}\nexport { u32 };\n\n@builtin\ndeclare function u64(value: void): u64;\nnamespace u64 {\n export const MIN_VALUE: u64 = 0;\n export const MAX_VALUE: u64 = 18446744073709551615;\n}\nexport { u64 };\n\n@builtin\ndeclare function usize(value: void): usize;\nnamespace usize {\n export const MIN_VALUE: usize = 0;\n export const MAX_VALUE: usize = sizeof() == sizeof()\n ? 4294967295\n : 18446744073709551615;\n}\nexport { usize };\n\n@builtin\ndeclare function bool(value: void): bool;\nnamespace bool {\n export const MIN_VALUE: bool = false;\n export const MAX_VALUE: bool = true;\n}\nexport { bool };\n\n@builtin\ndeclare function f32(value: void): f32;\nnamespace f32 {\n export const MIN_VALUE: f32 = -3.40282347e+38;\n export const MAX_VALUE: f32 = 3.40282347e+38;\n export const MIN_SAFE_INTEGER: f32 = -16777215;\n export const MAX_SAFE_INTEGER: f32 = 16777215;\n export const EPSILON: f32 = 1.19209290e-07;\n}\nexport { f32 };\n\n@builtin\ndeclare function f64(value: void): f64;\nnamespace f64 {\n export const MIN_VALUE: f64 = -1.7976931348623157e+308;\n export const MAX_VALUE: f64 = 1.7976931348623157e+308;\n export const MIN_SAFE_INTEGER: f64 = -9007199254740991;\n export const MAX_SAFE_INTEGER: f64 = 9007199254740991;\n export const EPSILON: f64 = 2.2204460492503131e-16;\n}\nexport{ f64 };\n\n@builtin\nexport declare const HEAP_BASE: usize;\n\n@builtin\nexport declare function start(): void;\n","(lib)/collector/itcm":'/**\n * @file Incremental Tri-Color-Marking Garbage Collector\n */\n\n// TODO: Generations?\n\nimport { MASK as AL_MASK } from "../allocator/common/alignment";\n\n// ╒════════════════ Object header layout (32-bit) ════════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┼─┴─┤ ┐\n// │ next │ C │ ◄─┐ = nextWithColor\n// ├───────────────────────────────────────────────────────────┴───┤ │ usize\n// │ prev │ ◄─┘\n// ╞═══════════════════════════════════════════════════════════════╡ SIZE ┘\n// │ ... data ... │\n// └───────────────────────────────────────────────────────────────┘\n// C: color\n\n@unmanaged\nclass ObjectHeader {\n\n /** Pointer to the next object with additional tags stored in the alignment bits. */\n taggedNext: usize;\n\n /** Pointer to the previous object. */\n prev: ObjectHeader;\n\n /** Visitor function. */\n visitFn: (obj: ObjectHeader) => void;\n\n /** Release function. */\n releaseFn: (obj: ObjectHeader) => void;\n\n // NOTE that visitFn and releaseFn take 4 bytes each in memory. Storing both doesn\'t matter\n // because alignment must be retained at 8 bytes anyway.\n\n static readonly SIZE: usize = (2 * sizeof() + 2 * sizeof() + AL_MASK) & ~AL_MASK;\n\n /** Gets the pointer to the next object in the list. */\n get next(): ObjectHeader {\n return changetype(this.taggedNext & ~AL_MASK);\n }\n\n /** Sets the pointer to the next object in the list. */\n set next(obj: ObjectHeader) {\n this.taggedNext = changetype(obj) | (this.taggedNext & AL_MASK);\n }\n\n /** Inserts an object to this list. */\n insert(obj: ObjectHeader): void {\n var prev = this.prev;\n obj.next = this;\n obj.prev = prev;\n prev.next = obj;\n this.prev = obj;\n }\n\n /** Removes this object from its list. */\n remove(): void {\n var next = this.next;\n var prev = this.prev;\n next.prev = prev;\n prev.next = next;\n }\n\n /** Tests if this object is white, this is unreachable (so far). */\n get isWhite(): bool {\n return (this.taggedNext & Color.MASK) == Color.WHITE;\n }\n\n /** Marks this object as white, that is unreachable (so far). */\n makeWhite(): void {\n this.taggedNext = (this.taggedNext & ~Color.MASK) | Color.WHITE;\n }\n\n /** Tests if this object is black, that is reachable. */\n get isBlack(): bool {\n return (this.taggedNext & Color.MASK) == Color.BLACK;\n }\n\n /** Marks this object as black, that is reachable. */\n makeBlack(): void {\n this.taggedNext = (this.taggedNext & ~Color.MASK) | Color.BLACK;\n }\n\n /** Tests if this object is gray, that is reachable with unscanned children. */\n get isGray(): bool {\n return (this.taggedNext & Color.MASK) == Color.GRAY;\n }\n\n /** Marks this object as gray, that is reachable with unscanned children. */\n makeGray(): void {\n if (this != iter) {\n this.remove();\n to.insert(this);\n } else {\n iter = iter.prev;\n }\n this.taggedNext = (this.taggedNext & ~Color.MASK) | Color.GRAY;\n }\n}\n\n/** Object colors. */\nnamespace Color {\n /** Object is unreachable (so far). */\n export var WHITE = 0;\n /** Object is reachable. */\n export var BLACK = 1;\n /** Object is reachable but its children have not yet been scanned. */\n export const GRAY = 2;\n\n /** Mask to obtain just the color bits. */\n export const MASK = 3;\n}\n\n/** Collector states. */\nconst enum State {\n /** Not yet initialized. */\n INIT = 0,\n /** Currently transitioning from SWEEP to MARK states. */\n IDLE = 1,\n /** Currently marking reachable objects. */\n MARK = 2,\n /** Currently sweeping unreachable objects. */\n SWEEP = 3\n}\n\n/** Current collector state. */\nvar state = State.INIT;\n\n// From and to spaces\n\nvar from: ObjectHeader;\nvar to: ObjectHeader;\nvar iter: ObjectHeader;\n\n/** Performs a single step according to the current state. */\nfunction gc_step(): void {\n var obj: ObjectHeader;\n switch (state) {\n case State.INIT: {\n from = changetype(allocate_memory(ObjectHeader.SIZE));\n from.taggedNext = changetype(from);\n from.prev = from;\n to = changetype(allocate_memory(ObjectHeader.SIZE));\n to.taggedNext = changetype(to);\n to.prev = to;\n iter = to;\n // fall-through\n }\n case State.IDLE: {\n state = State.MARK;\n break;\n }\n case State.MARK: {\n obj = iter.next;\n if (obj != to) {\n iter = obj;\n obj.makeBlack();\n obj.visitFn(obj);\n } else {\n obj = iter.next;\n if (obj == to) {\n let temp = from;\n from = to;\n to = temp;\n Color.WHITE ^= 1;\n Color.BLACK ^= 1;\n iter = from.next;\n state = State.SWEEP;\n }\n }\n break;\n }\n case State.SWEEP: {\n obj = iter;\n if (obj != to) {\n iter = obj.next;\n obj.releaseFn(obj);\n } else {\n to.taggedNext = changetype(to);\n to.prev = to;\n state = State.IDLE;\n }\n break;\n }\n }\n}\n\n/** Allocates a managed object. */\n@global\nfunction gc_allocate(\n size: usize,\n visitFn: (obj: ObjectHeader) => void,\n releaseFn: (obj: ObjectHeader) => void\n): usize {\n var obj = changetype(allocate_memory(ObjectHeader.SIZE + size));\n obj.makeWhite();\n obj.visitFn = visitFn;\n obj.releaseFn = releaseFn;\n from.insert(obj);\n return changetype(obj) + ObjectHeader.SIZE;\n}\n\n/** Visits a reachable object. Called from the visitFn functions. */\n@global\nfunction gc_visit(obj: ObjectHeader): void {\n if (state == State.SWEEP) return;\n if (obj.isWhite) {\n obj.makeGray();\n }\n}\n\n/** Registers a managed child object with its parent object. */\n@global\nfunction gc_register(parent: ObjectHeader, child: ObjectHeader): void {\n if (parent.isBlack && child.isWhite) {\n parent.makeGray();\n }\n}\n\n/** Iterates the root set. Provided by the compiler according to the program. */\n@global\ndeclare function gc_roots(): void;\n\n/** Performs a full garbage collection cycle. */\n@global\nfunction gc_collect(): void {\n // begin collecting if not yet collecting\n switch (state) {\n case State.INIT:\n case State.IDLE: gc_step();\n }\n // finish the cycle\n while (state != State.IDLE) {\n gc_step();\n }\n}\n\ndeclare function allocate_memory(size: usize): usize;\n',"(lib)/error":'export class Error {\n\n name: string = "Error";\n message: string;\n stack: string = ""; // TODO\n\n constructor(message: string = "") {\n this.message = message;\n }\n}\n\nexport class RangeError extends Error {\n name: string = "RangeError";\n}\n\nexport class TypeError extends Error {\n name: string = "TypeError";\n}\n',"(lib)/iterator":"// export abstract class Iterator {\n// abstract get done(): bool;\n// abstract next(): T;\n// }\n","(lib)/map":"export class Map {\n\n private __keys: K[] = [];\n private __values: V[] = [];\n\n // FIXME: not a proper map implementation, just a filler\n\n get size(): i32 {\n return this.__keys.length;\n }\n\n get(key: K): V | null {\n var keys = this.__keys;\n for (let i = 0, k = keys.length; i < k; ++i) {\n if (keys[i] == key) {\n return this.__values[i];\n }\n }\n return null;\n }\n\n has(key: K): bool {\n var keys = this.__keys;\n for (let i = 0, k = keys.length; i < k; ++i) {\n if (keys[i] == key) {\n return true;\n }\n }\n return false;\n }\n\n set(key: K, value: V): void {\n this.__keys.push(key);\n this.__values.push(value);\n }\n\n clear(): void {\n this.__keys.length = 0;\n this.__values.length = 0;\n }\n}\n","(lib)/memory":"function copy_memory(dest: usize, src: usize, n: usize): void {\n // based on musl's implementation of memcpy\n // not a future instruction and sufficiently covered by the upcoming move_memory intrinsic\n\n var w: u32, x: u32;\n\n // copy 1 byte each until src is aligned to 4 bytes\n while (n && (src & 3)) {\n store(dest++, load(src++));\n n--;\n }\n\n // if dst is aligned to 4 bytes as well, copy 4 bytes each\n if ((dest & 3) == 0) {\n while (n >= 16) {\n store(dest , load(src ));\n store(dest + 4, load(src + 4));\n store(dest + 8, load(src + 8));\n store(dest + 12, load(src + 12));\n src += 16; dest += 16; n -= 16;\n }\n if (n & 8) {\n store(dest , load(src ));\n store(dest + 4, load(src + 4));\n dest += 8; src += 8;\n }\n if (n & 4) {\n store(dest, load(src));\n dest += 4; src += 4;\n }\n if (n & 2) { // drop to 2 bytes each\n store(dest, load(src));\n dest += 2; src += 2;\n }\n if (n & 1) { // drop to 1 byte\n store(dest++, load(src++));\n }\n return;\n }\n\n // if dst is not aligned to 4 bytes, use alternating shifts to copy 4 bytes each\n // doing shifts if faster when copying enough bytes (here: 32 or more)\n if (n >= 32) {\n switch (dest & 3) {\n // known to be != 0\n case 1: {\n w = load(src);\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n n -= 3;\n while (n >= 17) {\n x = load(src + 1);\n store(dest, w >> 24 | x << 8);\n w = load(src + 5);\n store(dest + 4, x >> 24 | w << 8);\n x = load(src + 9);\n store(dest + 8, w >> 24 | x << 8);\n w = load(src + 13);\n store(dest + 12, x >> 24 | w << 8);\n src += 16; dest += 16; n -= 16;\n }\n break;\n }\n case 2: {\n w = load(src);\n store(dest++, load(src++));\n store(dest++, load(src++));\n n -= 2;\n while (n >= 18) {\n x = load(src + 2);\n store(dest, w >> 16 | x << 16);\n w = load(src + 6);\n store(dest + 4, x >> 16 | w << 16);\n x = load(src + 10);\n store(dest + 8, w >> 16 | x << 16);\n w = load(src + 14);\n store(dest + 12, x >> 16 | w << 16);\n src += 16; dest += 16; n -= 16;\n }\n break;\n }\n case 3: {\n w = load(src);\n store(dest++, load(src++));\n n -= 1;\n while (n >= 19) {\n x = load(src + 3);\n store(dest, w >> 8 | x << 24);\n w = load(src + 7);\n store(dest + 4, x >> 8 | w << 24);\n x = load(src + 11);\n store(dest + 8, w >> 8 | x << 24);\n w = load(src + 15);\n store(dest + 12, x >> 8 | w << 24);\n src += 16; dest += 16; n -= 16;\n }\n break;\n }\n }\n }\n\n // copy remaining bytes one by one\n if (n & 16) {\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n }\n if (n & 8) {\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n }\n if (n & 4) {\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n }\n if (n & 2) {\n store(dest++, load(src++));\n store(dest++, load(src++));\n }\n if (n & 1) {\n store(dest++, load(src++));\n }\n}\n\nexport function move_memory(dest: usize, src: usize, n: usize): void {\n // based on musl's implementation of memmove\n // becomes obsolete once https://github.com/WebAssembly/bulk-memory-operations lands\n\n if (dest == src) return;\n if (src + n <= dest || dest + n <= src) {\n copy_memory(dest, src, n);\n return;\n }\n if (dest < src) {\n if ((src & 7) == (dest & 7)) {\n while (dest & 7) {\n if (!n) return;\n --n;\n store(dest++, load(src++));\n }\n while (n >= 8) {\n store(dest, load(src));\n n -= 8;\n dest += 8;\n src += 8;\n }\n }\n while (n) {\n store(dest++, load(src++));\n --n;\n }\n } else {\n if ((src & 7) == (dest & 7)) {\n while ((dest + n) & 7) {\n if (!n) return;\n store(dest + --n, load(src + n));\n }\n while (n >= 8) {\n n -= 8;\n store(dest + n, load(src + n));\n }\n }\n while (n) {\n store(dest + --n, load(src + n));\n }\n }\n}\n\nexport function set_memory(dest: usize, c: u8, n: usize): void {\n // based on musl's implementation of memset\n // becomes obsolete once https://github.com/WebAssembly/bulk-memory-operations lands\n\n // fill head and tail with minimal branching\n if (!n) return;\n store(dest, c);\n store(dest + n - 1, c);\n if (n <= 2) return;\n\n store(dest + 1, c);\n store(dest + 2, c);\n store(dest + n - 2, c);\n store(dest + n - 3, c);\n if (n <= 6) return;\n store(dest + 3, c);\n store(dest + n - 4, c);\n if (n <= 8) return;\n\n // advance pointer to align it at 4-byte boundary\n var k: usize = -dest & 3;\n dest += k;\n n -= k;\n n &= -4;\n\n var c32: u32 = -1 / 255 * c;\n\n // fill head/tail up to 28 bytes each in preparation\n store(dest, c32);\n store(dest + n - 4, c32);\n if (n <= 8) return;\n store(dest + 4, c32);\n store(dest + 8, c32);\n store(dest + n - 12, c32);\n store(dest + n - 8, c32);\n if (n <= 24) return;\n store(dest + 12, c32);\n store(dest + 16, c32);\n store(dest + 20, c32);\n store(dest + 24, c32);\n store(dest + n - 28, c32);\n store(dest + n - 24, c32);\n store(dest + n - 20, c32);\n store(dest + n - 16, c32);\n\n // align to a multiple of 8\n k = 24 + (dest & 4);\n dest += k;\n n -= k;\n\n // copy 32 bytes each\n var c64: u64 = c32 | (c32 << 32);\n while (n >= 32) {\n store(dest, c64);\n store(dest + 8, c64);\n store(dest + 16, c64);\n store(dest + 24, c64);\n n -= 32;\n dest += 32;\n }\n}\n\nexport function compare_memory(vl: usize, vr: usize, n: usize): i32 {\n // based on musl's implementation of memcmp\n // provided because there's no proposed alternative\n if (vl == vr) return 0;\n while (n && load(vl) == load(vr)) {\n n--;\n vl++;\n vr++;\n }\n return n ? load(vl) - load(vr) : 0;\n}\n","(lib)/polyfills":"export function bswap(value: T): T {\n assert(sizeof() == 1 || sizeof() == 2 || sizeof() == 4 || sizeof() == 8);\n\n if (sizeof() == 2) {\n return bswap16(value);\n } else if (sizeof() == 4) {\n return (\n rotl(value & 0xFF00FF00, 8) |\n rotr(value & 0x00FF00FF, 8)\n );\n } else if (sizeof() == 8) {\n let a: u64 = (value >> 8) & 0x00FF00FF00FF00FF;\n let b: u64 = (value & 0x00FF00FF00FF00FF) << 8;\n let v: u64 = a | b;\n\n a = (v >> 16) & 0x0000FFFF0000FFFF;\n b = (v & 0x0000FFFF0000FFFF) << 16;\n\n return rotr(a | b, 32);\n }\n return value;\n}\n\nexport function bswap16(value: T): T {\n assert(sizeof() == 1 || sizeof() == 2 || sizeof() == 4);\n\n if (sizeof() == 2 || sizeof() == 4) {\n return (((value << 8) & 0xFF00) | ((value >> 8) & 0x00FF) | (value & 0xFFFF0000));\n }\n return value;\n}\n","(lib)/regexp":'export class RegExp {\n\n // @binding(CALL_NEW, [ STRING, STRING], OBJECT_HANDLE)\n constructor(pattern: string, flags: string = "") { throw new Error("unreachable"); }\n\n // @binding(CALL_THIS, [ STRING ], PASS_THRU)\n test(search: string): bool { throw new Error("unreachable"); }\n\n // @binding(CALL_THIS, [], STRING)\n toString(): string { throw new Error("unreachable"); }\n\n}\n',"(lib)/set":'// const prime1: u32 = 73;\n// const prime2: u32 = 5009;\n\nexport class Set {\n\n private __memory: usize;\n private __capacity: u32;\n private __size: u32;\n\n constructor() {\n this.__memory = 0;\n this.__capacity = this.__size = 0;\n }\n\n get size(): i32 {\n return this.__size;\n }\n\n // FIXME: not a proper set implementation, just a filler\n\n has(value: T): bool {\n assert(this != null);\n\n for (let index: usize = 0, limit: usize = this.__size; index < limit; ++index) {\n if (load(this.__memory + index * sizeof()) == value) {\n return true;\n }\n }\n return false;\n }\n\n add(value: T): Set {\n assert(this != null);\n\n if (this.__size >= this.__capacity) {\n let newCapacity = max(this.__capacity << 1, 8);\n let newMemory = allocate_memory(newCapacity * sizeof());\n if (this.__memory) {\n move_memory(newMemory, this.__memory, this.__capacity * sizeof());\n free_memory(this.__memory);\n }\n this.__capacity = newCapacity;\n this.__memory = newMemory;\n }\n store(this.__memory + this.__size * sizeof(), value);\n ++this.__size;\n return this;\n }\n\n delete(value: T): bool {\n assert(this != null);\n\n for (let index: usize = 0, limit: usize = this.__size; index < limit; ++index) {\n if (load(this.__memory + index * sizeof()) == value) {\n if (index + 1 < limit) {\n move_memory(\n this.__memory + index * sizeof(),\n this.__memory + (index + 1) * sizeof(),\n limit - index - 1\n );\n }\n --this.__size;\n return true;\n }\n }\n return false;\n }\n\n clear(): void {\n assert(this != null);\n\n this.__size = 0;\n }\n\n // TODO: think about iterators\n}\n\n// class SetIterator extends Iterator {\n\n// get done(): bool {\n// throw new Error("not implemented");\n// }\n\n// next(): T {\n// throw new Error("not implemented");\n// }\n// }\n',"(lib)/string":'// singleton empty string\nconst EMPTY: String = changetype("");\n\n// number of bytes preceeding string data\nconst HEAD: usize = 4;\n\nfunction allocate(length: i32): String {\n assert(length > 0); // 0 -> EMPTY\n var ptr = allocate_memory(HEAD + (length << 1));\n store(ptr, length);\n return changetype(ptr);\n}\n\nexport class String {\n\n readonly length: i32; // capped to [0, 0x7fffffff]\n\n @operator("[]")\n charAt(pos: i32): String {\n assert(this != null);\n\n if (pos >= this.length) {\n return EMPTY;\n }\n\n var out = allocate(1);\n store(\n changetype(out),\n load(\n changetype(this) + (pos << 1),\n HEAD\n ),\n HEAD\n );\n return out;\n }\n\n charCodeAt(pos: i32): i32 {\n assert(this != null);\n if (pos >= this.length) {\n return -1; // (NaN)\n }\n return load(\n changetype(this) + (pos << 1),\n HEAD\n );\n }\n\n codePointAt(pos: i32): i32 {\n assert(this != null);\n if (pos >= this.length) {\n return -1; // (undefined)\n }\n var first = load(\n changetype(this) + (pos << 1),\n HEAD\n );\n if (first < 0xD800 || first > 0xDBFF || pos + 1 == this.length) {\n return first;\n }\n var second = load(\n changetype(this) + ((pos + 1) << 1),\n HEAD\n );\n if (second < 0xDC00 || second > 0xDFFF) {\n return first;\n }\n return ((first - 0xD800) << 10) + (second - 0xDC00) + 0x10000;\n }\n\n @operator("+")\n private static __concat(left: String, right: String): String {\n if (left == null) {\n left = changetype("null");\n }\n return left.concat(right);\n }\n\n concat(other: String): String {\n assert(this != null);\n if (other == null) {\n other = changetype("null");\n }\n var thisLen: isize = this.length;\n var otherLen: isize = other.length;\n var outLen: usize = thisLen + otherLen;\n if (outLen == 0) {\n return EMPTY;\n }\n var out = allocate(outLen);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD,\n thisLen << 1\n );\n move_memory(\n changetype(out) + HEAD + (thisLen << 1),\n changetype(other) + HEAD,\n otherLen << 1\n );\n return out;\n }\n\n endsWith(searchString: String, endPosition: i32 = 0x7fffffff): bool {\n assert(this != null);\n if (searchString == null) {\n return false;\n }\n var end: isize = min(max(endPosition, 0), this.length);\n var searchLength: isize = searchString.length;\n var start: isize = end - searchLength;\n if (start < 0) {\n return false;\n }\n return !compare_memory(\n changetype(this) + HEAD + (start << 1),\n changetype(searchString) + HEAD,\n searchLength << 1\n );\n }\n\n @operator("==")\n private static __eq(left: String, right: String): bool {\n if (left == null) {\n return right == null;\n } else if (right == null) {\n return false;\n }\n var leftLength = left.length;\n if (leftLength != right.length) {\n return false;\n }\n return !compare_memory(\n changetype(left) + HEAD,\n changetype(right) + HEAD,\n (leftLength << 1)\n );\n }\n\n includes(searchString: String, position: i32 = 0): bool {\n return this.indexOf(searchString, position) != -1;\n }\n\n indexOf(searchString: String, position: i32 = 0): i32 {\n assert(this != null);\n if (searchString == null) {\n searchString = changetype("null");\n }\n var pos: isize = position;\n var len: isize = this.length;\n var start: isize = min(max(pos, 0), len);\n var searchLen: isize = searchString.length;\n\n // TODO: two-way, multiple char codes\n for (let k: usize = start; k + searchLen <= len; ++k) {\n if (!compare_memory(\n changetype(this) + HEAD + (k << 1),\n changetype(searchString) + HEAD,\n searchLen << 1)\n ) {\n return k;\n }\n }\n return -1;\n }\n\n startsWith(searchString: String, position: i32 = 0): bool {\n assert(this != null);\n if (searchString == null) {\n searchString = changetype("null");\n }\n var pos: isize = position;\n var len: isize = this.length;\n var start: isize = min(max(pos, 0), len);\n var searchLength: isize = searchString.length;\n if (searchLength + start > len) {\n return false;\n }\n return !compare_memory(\n changetype(this) + HEAD + (start << 1),\n changetype(searchString) + HEAD,\n searchLength << 1\n );\n }\n\n substr(start: i32, length: i32 = i32.MAX_VALUE): String {\n assert(this != null);\n var intStart: isize = start;\n var end: isize = length;\n var size: isize = this.length;\n if (intStart < 0) {\n intStart = max(size + intStart, 0);\n }\n var resultLength: isize = min(max(end, 0), size - intStart);\n if (resultLength <= 0) {\n return EMPTY;\n }\n var out = allocate(resultLength);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD + (intStart << 1),\n resultLength << 1\n );\n return out;\n }\n\n substring(start: i32, end: i32 = i32.MAX_VALUE): String {\n assert(this != null);\n var len = this.length;\n var finalStart = min(max(start, 0), len);\n var finalEnd = min(max(end, 0), len);\n var from = min(finalStart, finalEnd);\n var to = max(finalStart, finalEnd);\n len = to - from;\n if (!len) {\n return EMPTY;\n }\n if (!from && to == this.length) {\n return this;\n }\n var out = allocate(len);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD + (from << 1),\n len << 1\n );\n return out;\n }\n\n trim(): String {\n assert(this != null);\n var length: usize = this.length;\n while (\n length &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (length << 1), HEAD)\n )\n ) {\n --length;\n }\n var start: usize = 0;\n while (\n start < length &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (start << 1), HEAD)\n )\n ) {\n ++start, --length;\n }\n if (!length) {\n return EMPTY;\n }\n if (!start && length == this.length) {\n return this;\n }\n var out = allocate(length);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD + (start << 1),\n length << 1\n );\n return out;\n }\n\n trimLeft(): String {\n assert(this != null);\n var start: isize = 0;\n var len: isize = this.length;\n while (\n start < len &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (start << 1), HEAD)\n )\n ) {\n ++start;\n }\n if (!start) {\n return this;\n }\n var outLen = len - start;\n if (!outLen) {\n return EMPTY;\n }\n var out = allocate(outLen);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD + (start << 1),\n outLen << 1\n );\n return out;\n }\n\n trimRight(): String {\n assert(this != null);\n var len: isize = this.length;\n while (\n len > 0 &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (len << 1), HEAD)\n )\n ) {\n --len;\n }\n if (len <= 0) {\n return EMPTY;\n }\n if (len == this.length) {\n return this;\n }\n var out = allocate(len);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD,\n len << 1\n );\n return out;\n }\n}\n\nfunction isWhiteSpaceOrLineTerminator(c: u16): bool {\n switch (c) {\n case 10: // \n case 13: // \n case 8232: // \n case 8233: // \n case 9: // \n case 11: // \n case 12: // \n case 32: // \n case 160: // \n case 65279: { // \n return true;\n }\n default: return false;\n }\n}\n\nconst enum CharCode {\n PLUS = 0x2B,\n MINUS = 0x2D,\n DOT = 0x2E,\n _0 = 0x30,\n _1 = 0x31,\n _2 = 0x32,\n _3 = 0x33,\n _4 = 0x34,\n _5 = 0x35,\n _6 = 0x36,\n _7 = 0x37,\n _8 = 0x38,\n _9 = 0x39,\n A = 0x41,\n B = 0x42,\n E = 0x45,\n O = 0x4F,\n X = 0x58,\n Z = 0x5a,\n a = 0x61,\n b = 0x62,\n e = 0x65,\n o = 0x6F,\n x = 0x78,\n z = 0x7A\n}\n\nexport function parseInt(str: String, radix: i32 = 0): f64 {\n return parse(str, radix);\n}\n\nexport function parseI32(str: String, radix: i32 = 0): i32 {\n return parse(str, radix);\n}\n\nexport function parseI64(str: String, radix: i32 = 0): i64 {\n return parse(str, radix);\n}\n\nfunction parse(str: String, radix: i32 = 0): T {\n var len: i32 = str.length;\n if (!len) {\n return NaN;\n }\n var ptr = changetype(str) /* + HEAD -> offset */;\n var code = load(ptr, HEAD);\n\n // determine sign\n var sign: T;\n if (code == CharCode.MINUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEAD);\n sign = -1;\n } else if (code == CharCode.PLUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEAD);\n sign = 1;\n } else {\n sign = 1;\n }\n\n // determine radix\n if (!radix) {\n if (code == CharCode._0 && len > 2) {\n switch (load(ptr + 2, HEAD)) {\n case CharCode.B:\n case CharCode.b: {\n ptr += 4; len -= 2;\n radix = 2;\n break;\n }\n case CharCode.O:\n case CharCode.o: {\n ptr += 4; len -= 2;\n radix = 8;\n break;\n }\n case CharCode.X:\n case CharCode.x: {\n ptr += 4; len -= 2;\n radix = 16;\n break;\n }\n default: {\n radix = 10;\n }\n }\n } else radix = 10;\n } else if (radix < 2 || radix > 36) {\n return NaN;\n }\n\n // calculate value\n var num: T = 0;\n while (len--) {\n code = load(ptr, HEAD);\n if (code >= CharCode._0 && code <= CharCode._9) {\n code -= CharCode._0;\n } else if (code >= CharCode.A && code <= CharCode.Z) {\n code -= CharCode.A - 10;\n } else if (code >= CharCode.a && code <= CharCode.z) {\n code -= CharCode.a - 10;\n } else {\n break;\n }\n if (code >= radix) {\n break;\n }\n num = (num * radix) + code;\n ptr += 2;\n }\n return sign * num;\n}\n\nexport function parseFloat(str: String): f64 {\n var len: i32 = str.length;\n if (!len) {\n return NaN;\n }\n var ptr = changetype(str) /* + HEAD -> offset */;\n var code = load(ptr, HEAD);\n\n // determine sign\n var sign: f64;\n if (code == CharCode.MINUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEAD);\n sign = -1;\n } else if (code == CharCode.PLUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEAD);\n sign = 1;\n } else {\n sign = 1;\n }\n\n // calculate value\n var num: f64 = 0;\n while (len--) {\n code = load(ptr, HEAD);\n if (code == CharCode.DOT) {\n ptr += 2;\n let fac: f64 = 0.1; // precision :(\n while (len--) {\n code = load(ptr, HEAD);\n if (code == CharCode.E || code == CharCode.e) {\n assert(false); // TODO\n }\n code -= CharCode._0;\n if (code > 9) {\n break;\n }\n num += code * fac;\n fac *= 0.1;\n ptr += 2;\n }\n break;\n }\n code -= CharCode._0;\n if (code >= 10) {\n break;\n }\n num = (num * 10) + code;\n ptr += 2;\n }\n return sign * num;\n}\n'}):{},exports.definitionFiles=exports.isBundle?Object({assembly:'// Definitions for the "AssemblyScript" subset.\n\n// Types\n\n/** An 8-bit signed integer. */\ndeclare type i8 = number;\n/** A 16-bit signed integer. */\ndeclare type i16 = number;\n/** A 32-bit signed integer. */\ndeclare type i32 = number;\n/** A 64-bit signed integer. */\ndeclare type i64 = number;\n/** A 32-bit signed integer when targeting 32-bit WebAssembly or a 64-bit signed integer when targeting 64-bit WebAssembly. */\ndeclare type isize = number;\n/** An 8-bit unsigned integer. */\ndeclare type u8 = number;\n/** A 16-bit unsigned integer. */\ndeclare type u16 = number;\n/** A 32-bit unsigned integer. */\ndeclare type u32 = number;\n/** A 64-bit unsigned integer. */\ndeclare type u64 = number;\n/** A 32-bit unsigned integer when targeting 32-bit WebAssembly or a 64-bit unsigned integer when targeting 64-bit WebAssembly. */\ndeclare type usize = number;\n/** A 1-bit unsigned integer. */\ndeclare type bool = any; // sic\n/** A 32-bit float. */\ndeclare type f32 = number;\n/** A 64-bit float. */\ndeclare type f64 = number;\n\n/** Converts any other numeric value to an 8-bit signed integer. */\ndeclare function i8(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i8;\ndeclare namespace i8 {\n export const MIN_VALUE: i8;\n export const MAX_VALUE: i8;\n}\n/** Converts any other numeric value to a 16-bit signed integer. */\ndeclare function i16(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i8;\ndeclare namespace i16 {\n export const MIN_VALUE: i16;\n export const MAX_VALUE: i16;\n}\n/** Converts any other numeric value to a 32-bit signed integer. */\ndeclare function i32(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i32;\ndeclare namespace i32 {\n export const MIN_VALUE: i32;\n export const MAX_VALUE: i32;\n}\n/** Converts any other numeric value to a 64-bit signed integer. */\ndeclare function i64(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i64;\ndeclare namespace i64 {\n export const MIN_VALUE: i64;\n export const MAX_VALUE: i64;\n}\n/** Converts any other numeric value to a 32-bit (in WASM32) respectivel 64-bit (in WASM64) signed integer. */\ndeclare function isize(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): isize;\ndeclare namespace isize {\n export const MIN_VALUE: isize;\n export const MAX_VALUE: isize;\n}\n/** Converts any other numeric value to an 8-bit unsigned integer. */\ndeclare function u8(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i8;\ndeclare namespace u8 {\n export const MIN_VALUE: u8;\n export const MAX_VALUE: u8;\n}\n/** Converts any other numeric value to a 16-bit unsigned integer. */\ndeclare function u16(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i8;\ndeclare namespace u16 {\n export const MIN_VALUE: u16;\n export const MAX_VALUE: u16;\n}\n/** Converts any other numeric value to a 32-bit unsigned integer. */\ndeclare function u32(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i32;\ndeclare namespace u32 {\n export const MIN_VALUE: u32;\n export const MAX_VALUE: u32;\n}\n/** Converts any other numeric value to a 64-bit unsigned integer. */\ndeclare function u64(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i64;\ndeclare namespace u64 {\n export const MIN_VALUE: u64;\n export const MAX_VALUE: u64;\n}\n/** Converts any other numeric value to a 32-bit (in WASM32) respectivel 64-bit (in WASM64) unsigned integer. */\ndeclare function usize(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): isize;\ndeclare namespace usize {\n export const MIN_VALUE: usize;\n export const MAX_VALUE: usize;\n}\n/** Converts any other numeric value to a 1-bit unsigned integer. */\ndeclare function bool(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): bool;\ndeclare namespace bool {\n export const MIN_VALUE: bool;\n export const MAX_VALUE: bool;\n}\n/** Converts any other numeric value to a 32-bit float. */\ndeclare function f32(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): f32;\ndeclare namespace f32 {\n export const MIN_VALUE: f32;\n export const MAX_VALUE: f32;\n /** Smallest safely representable integer value. */\n export const MIN_SAFE_INTEGER: f32;\n /** Largest safely representable integer value. */\n export const MAX_SAFE_INTEGER: f32;\n /** Difference between 1 and the smallest representable value greater than 1. */\n export const EPSILON: f32;\n}\n/** Converts any other numeric value to a 64-bit float. */\ndeclare function f64(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): f64;\ndeclare namespace f64 {\n export const MIN_VALUE: f64;\n export const MAX_VALUE: f64;\n /** Smallest safely representable integer value. */\n export const MIN_SAFE_INTEGER: f64;\n /** Largest safely representable integer value. */\n export const MAX_SAFE_INTEGER: f64;\n /** Difference between 1 and the smallest representable value greater than 1. */\n export const EPSILON: f64;\n}\n\n// Built-ins\n\n/** Performs the sign-agnostic count leading zero bits operation on a 32-bit or 64-bit integer. All zero bits are considered leading if the value is zero. */\ndeclare function clz(value: T): T;\n/** Performs the sign-agnostic count tailing zero bits operation on a 32-bit or 64-bit integer. All zero bits are considered trailing if the value is zero. */\ndeclare function ctz(value: T): T;\n/** Performs the sign-agnostic count number of one bits operation on a 32-bit or 64-bit integer. */\ndeclare function popcnt(value: T): T;\n/** Performs the sign-agnostic rotate left operation on a 32-bit or 64-bit integer. */\ndeclare function rotl(value: T, shift: T): T;\n/** Performs the sign-agnostic rotate right operation on a 32-bit or 64-bit integer. */\ndeclare function rotr(value: T, shift: T): T;\n/** Computes the absolute value of an integer or float. */\ndeclare function abs(value: T): T;\n/** Determines the maximum of two integers or floats. If either operand is `NaN`, returns `NaN`. */\ndeclare function max(left: T, right: T): T;\n/** Determines the minimum of two integers or floats. If either operand is `NaN`, returns `NaN`. */\ndeclare function min(left: T, right: T): T;\n/** Performs the ceiling operation on a 32-bit or 64-bit float. */\ndeclare function ceil(value: T): T;\n/** Composes a 32-bit or 64-bit float from the magnitude of `x` and the sign of `y`. */\ndeclare function copysign(x: T, y: T): T;\n/** Performs the floor operation on a 32-bit or 64-bit float. */\ndeclare function floor(value: T): T;\n/** Rounds to the nearest integer tied to even of a 32-bit or 64-bit float. */\ndeclare function nearest(value: T): T;\n/** Reinterprets the bits of the specified value as type `T`. Valid reinterpretations are u32/i32 to/from f32 and u64/i64 to/from f64. */\ndeclare function reinterpret(value: number): T;\n/** Selects one of two pre-evaluated values depending on the condition. */\ndeclare function select(ifTrue: T, ifFalse: T, condition: bool): T;\n/** Calculates the square root of a 32-bit or 64-bit float. */\ndeclare function sqrt(value: T): T;\n/** Rounds to the nearest integer towards zero of a 32-bit or 64-bit float. */\ndeclare function trunc(value: T): T;\n/** Loads a value of the specified type from memory. Equivalent to dereferncing a pointer in other languages. */\ndeclare function load(ptr: usize, constantOffset?: usize): T;\n/** Stores a value of the specified type to memory. Equivalent to dereferencing a pointer in other languages when assigning a value. */\ndeclare function store(ptr: usize, value: any, constantOffset?: usize): void;\n/** Returns the current memory size in units of pages. One page is 64kb. */\ndeclare function current_memory(): i32;\n/** Grows linear memory by a given unsigned delta of pages. One page is 64kb. Returns the previous memory size in units of pages or `-1` on failure. */\ndeclare function grow_memory(value: i32): i32;\n/** Copies n bytes from the specified source to the specified destination in memory. These regions may overlap. */\ndeclare function move_memory(destination: usize, source: usize, n: usize): void;\n/** Sets n bytes beginning at the specified destination in memory to the specified byte value. */\ndeclare function set_memory(destination: usize, value: u8, count: usize): void;\n/** Compares two chunks of memory. Returns `0` if equal, otherwise the difference of the first differing bytes. */\ndeclare function compare_memory(vl: usize, vr: usize, n: usize): i32;\n/** Allocates a chunk of memory of the specified size and returns a pointer to it. */\ndeclare function allocate_memory(size: usize): usize;\n/** Disposes a chunk of memory by its pointer. */\ndeclare function free_memory(ptr: usize): void;\n/** Emits an unreachable operation that results in a runtime error when executed. Both a statement and an expression of any type. */\ndeclare function unreachable(): any; // sic\n\n/** [Polyfill] Performs the sign-agnostic reverse bytes **/\ndeclare function bswap(value: T): T;\n/** [Polyfill] Performs the sign-agnostic reverse bytes only for last 16-bit **/\ndeclare function bswap16(value: T): T;\n\n/** NaN (not a number) as a 32-bit or 64-bit float depending on context. */\ndeclare const NaN: f32 | f64;\n/** Positive infinity as a 32-bit or 64-bit float depending on context. */\ndeclare const Infinity: f32 | f64;\n/** Heap base offset. */\ndeclare const HEAP_BASE: usize;\n/** Determines the byte size of the specified core or class type. Compiles to a constant. */\ndeclare function sizeof(): usize;\n/** Changes the type of any value of `usize` kind to another one of `usize` kind. Useful for casting class instances to their pointer values and vice-versa. Beware that this is unsafe.*/\ndeclare function changetype(value: any): T;\n/** Tests if a 32-bit or 64-bit float is `NaN`. */\ndeclare function isNaN(value: T): bool;\n/** Tests if a 32-bit or 64-bit float is finite, that is not `NaN` or +/-`Infinity`. */\ndeclare function isFinite(value: T): bool;\n/** Traps if the specified value is not true-ish, otherwise returns the (non-nullable) value. */\ndeclare function assert(isTrueish: T, message?: string): T & object; // any better way to model `: T != null`?\n/** Parses an integer string to a 64-bit float. */\ndeclare function parseInt(str: string, radix?: i32): f64;\n/** Parses an integer string to a 32-bit integer. */\ndeclare function parseI32(str: string, radix?: i32): i32;\n/** Parses an integer string to a 64-bit integer. */\ndeclare function parseI64(str: string, radix?: i32): i64;\n/** Parses a string to a 64-bit float. */\ndeclare function parseFloat(str: string): f64;\n\n// Standard library (not yet implemented)\n\n/** Class representing a sequence of values of type `T`. */\ndeclare class Array {\n [key: number]: T;\n /** Current length of the array. */\n length: i32;\n /** Constructs a new array. */\n constructor(capacity?: i32);\n indexOf(searchElement: T, fromIndex?: i32): i32;\n lastIndexOf(searchElement: T, fromIndex?: i32): i32;\n push(element: T): void;\n pop(): T;\n shift(): T;\n unshift(element: T): i32;\n slice(from: i32, to?: i32): T[];\n splice(start: i32, deleteCount?: i32): void;\n reverse(): T[];\n}\n\n/** Class representing a C-like array of values of type `T` with limited capabilities. */\ndeclare class CArray {\n [key: number]: T;\n private constructor();\n}\n\n/** Class representing a sequence of characters. */\ndeclare class String {\n\n static fromCharCode(ls: i32, hs?: i32): string;\n static fromCharCodes(arr: u16[]): string;\n static fromCodePoint(cp: i32): string;\n static fromCodePoints(arr: i32[]): string;\n\n readonly length: u32;\n\n charAt(index: u32): string;\n charCodeAt(index: u32): u16;\n concat(other: string): string;\n endsWith(other: string): bool;\n indexOf(other: string): u32;\n includes(other: string): bool;\n startsWith(other: string): bool;\n substr(start: u32, length?: u32): string;\n substring(start: u32, end?: u32): string;\n trim(): string;\n trimLeft(): string;\n trimRight(): string;\n}\n\n/** Class for representing a runtime error. Base class of all errors. */\ndeclare class Error {\n\n /** Error name. */\n name: string;\n\n /** Message provided on construction. */\n message: string;\n\n /** Stack trace. */\n stack: string;\n\n /** Constructs a new error, optionally with a message. */\n constructor(message?: string);\n}\n\n/** Class for indicating an error when a value is not in the set or range of allowed values. */\ndeclare class RangeError extends Error { }\n\ninterface Boolean {}\ninterface Function {}\ninterface IArguments {}\ninterface Number {}\ninterface Object {}\ninterface RegExp {}\n\ndeclare class Set {\n readonly size: i32;\n has(value: T): bool;\n add(value: T): void;\n delete(value: T): bool;\n clear(): void;\n}\n\n// Internal decorators\n\n/** Annotates an element as a program global. */\ndeclare function global(target: Function, propertyKey: string, descriptor: any): void;\n\n/** Annotates a method as an operator overload. */\ndeclare function operator(token: string): (target: any, propertyKey: string, descriptor: any) => void;\n\n/** Annotates a class as being unmanaged with limited capabilities. */\ndeclare function unmanaged(target: Function): any;\n\n/** Annotates a class field with an explicit offset. */\ndeclare function offset(offset: usize): any;\n\n/** Annotates an element as begin built-in. */\ndeclare function builtin(target: Function): any;\n',portable:'// Definitions for the "portable AssemblyScript" subset.\n\n// Portable types\n\n// Note that semantic differences require additional explicit conversions for full compatibility.\n// For example, when casting an i32 to an u8, doing `(someI32 & 0xff)` will yield the same\n// result when compiling to WebAssembly or JS while `someI32` alone does nothing in JS.\n\n// Note that i64\'s are not portable (JS numbers are IEEE754 doubles with a maximum safe integer value\n// of 2^53-1) and instead require a compatibility layer to work in JS as well. See: src/util/i64.ts\n\ndeclare type i8 = number;\ndeclare type i16 = number;\ndeclare type i32 = number;\ndeclare type isize = number;\ndeclare type u8 = number;\ndeclare type u16 = number;\ndeclare type u32 = number;\ndeclare type bool = boolean;\ndeclare type usize = number;\ndeclare type f32 = number;\ndeclare type f64 = number;\n\n/** Converts any other numeric value to an 8-bit signed integer. */\ndeclare function i8(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i8;\ndeclare namespace i8 {\n export const MIN_VALUE: i8;\n export const MAX_VALUE: i8;\n}\n/** Converts any other numeric value to a 16-bit signed integer. */\ndeclare function i16(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i8;\ndeclare namespace i16 {\n export const MIN_VALUE: i16;\n export const MAX_VALUE: i16;\n}\n/** Converts any other numeric value to a 32-bit signed integer. */\ndeclare function i32(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i32;\ndeclare namespace i32 {\n export const MIN_VALUE: i32;\n export const MAX_VALUE: i32;\n}\n/** Converts any other numeric value to a 32-bit (in WASM32) respectivel 64-bit (in WASM64) signed integer. */\ndeclare function isize(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): isize;\ndeclare namespace isize {\n export const MIN_VALUE: isize;\n export const MAX_VALUE: isize;\n}\n/** Converts any other numeric value to an 8-bit unsigned integer. */\ndeclare function u8(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i8;\ndeclare namespace u8 {\n export const MIN_VALUE: u8;\n export const MAX_VALUE: u8;\n}\n/** Converts any other numeric value to a 16-bit unsigned integer. */\ndeclare function u16(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i8;\ndeclare namespace u16 {\n export const MIN_VALUE: u16;\n export const MAX_VALUE: u16;\n}\n/** Converts any other numeric value to a 32-bit unsigned integer. */\ndeclare function u32(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i32;\ndeclare namespace u32 {\n export const MIN_VALUE: u32;\n export const MAX_VALUE: u32;\n}\n/** Converts any other numeric value to a 32-bit (in WASM32) respectivel 64-bit (in WASM64) unsigned integer. */\ndeclare function usize(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): isize;\ndeclare namespace usize {\n export const MIN_VALUE: usize;\n export const MAX_VALUE: usize;\n}\n/** Converts any other numeric value to a 1-bit unsigned integer. */\ndeclare function bool(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): bool;\ndeclare namespace bool {\n export const MIN_VALUE: bool;\n export const MAX_VALUE: bool;\n}\n/** Converts any other numeric value to a 32-bit float. */\ndeclare function f32(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): f32;\ndeclare namespace f32 {\n /** Smallest safely representable integer value. */\n export const MIN_SAFE_INTEGER: f32;\n /** Largest safely representable integer value. */\n export const MAX_SAFE_INTEGER: f32;\n /** Difference between 1 and the smallest representable value greater than 1. */\n export const EPSILON: f32;\n}\n/** Converts any other numeric value to a 64-bit float. */\ndeclare function f64(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): f64;\ndeclare namespace f64 {\n /** Smallest safely representable integer value. */\n export const MIN_SAFE_INTEGER: f64;\n /** Largest safely representable integer value. */\n export const MAX_SAFE_INTEGER: f64;\n /** Difference between 1 and the smallest representable value greater than 1. */\n export const EPSILON: f64;\n}\n\n// Portable built-ins\n\n/** Performs the sign-agnostic count leading zero bits operation on a 32-bit integer. All zero bits are considered leading if the value is zero. */\ndeclare function clz(value: T): T;\n/** Computes the absolute value of an integer or float. */\ndeclare function abs(value: T): T;\n/** Determines the maximum of two integers or floats. If either operand is `NaN`, returns `NaN`. */\ndeclare function max(left: T, right: T): T;\n/** Determines the minimum of two integers or floats. If either operand is `NaN`, returns `NaN`. */\ndeclare function min(left: T, right: T): T;\n/** Performs the ceiling operation on a 32-bit or 64-bit float. */\ndeclare function ceil(value: T): T;\n/** Performs the floor operation on a 32-bit or 64-bit float. */\ndeclare function floor(value: T): T;\n/** Selects one of two pre-evaluated values depending on the condition. */\ndeclare function select(ifTrue: T, ifFalse: T, condition: bool): T;\n/** Calculates the square root of a 32-bit or 64-bit float. */\ndeclare function sqrt(value: T): T;\n/** Rounds to the nearest integer towards zero of a 32-bit or 64-bit float. */\ndeclare function trunc(value: T): T;\n/** Allocates a chunk of memory of the specified size and returns a pointer to it. */\ndeclare function allocate_memory(size: usize): usize;\n/** Disposes a chunk of memory by its pointer. */\ndeclare function free_memory(ptr: usize): void;\n/** Copies n bytes from the specified source to the specified destination in memory. These regions may overlap. */\ndeclare function move_memory(destination: usize, source: usize, n: usize): void;\n/** Loads a value of the specified type from memory. Type must be `u8`. */\ndeclare function load(ptr: usize, constantOffset?: usize): T;\n/** Stores a value of the specified type to memory. Type must be `u8`. */\ndeclare function store(ptr: usize, value: T, constantOffset?: usize): void;\n/** Emits an unreachable operation that results in a runtime error when executed. */\ndeclare function unreachable(): any; // sic\n\n/** [Polyfill] Performs the sign-agnostic reverse bytes **/\ndeclare function bswap(value: T): T;\n/** [Polyfill] Performs the sign-agnostic reverse bytes only for last 16-bit **/\ndeclare function bswap16(value: T): T;\n\n/** Changes the type of any value of `usize` kind to another one of `usize` kind. Useful for casting class instances to their pointer values and vice-versa. Beware that this is unsafe.*/\ndeclare function changetype(value: any): T;\n/** Traps if the specified value is not true-ish, otherwise returns the value. */\ndeclare function assert(isTrueish: T, message?: string): T & object; // any better way to model `: T != null`?\n/** Parses an integer string to a 64-bit float. */\ndeclare function parseInt(str: string, radix?: i32): f64;\n/** Parses an integer string to a 32-bit integer. */\ndeclare function parseI32(str: string, radix?: i32): i32;\n/** Parses a floating point string to a 64-bit float. */\ndeclare function parseFloat(str: string): f64;\n\n// Portable standard library\n// Everything marked @deprecated is a temporary filler. Do not use.\n\ndeclare const NaN: f32 | f64;\ndeclare const Infinity: f32 | f64;\n\ndeclare class Array {\n [key: number]: T;\n length: i32;\n constructor(capacity?: i32);\n indexOf(searchElement: T, fromIndex?: i32): i32;\n lastIndexOf(searchElement: T, fromIndex?: i32): i32;\n push(element: T): void;\n pop(): T;\n shift(): T;\n unshift(element: T): i32;\n slice(from: i32, to?: i32): T[];\n splice(start: i32, deleteCount?: i32): void;\n reverse(): T[];\n\n join(delim: string): string;\n}\n\ndeclare class Uint8Array extends Array {}\ndeclare class Uint16Array extends Array {}\ndeclare class Uint32Array extends Array {}\ndeclare class Int8Array extends Array {}\ndeclare class Int16Array extends Array {}\ndeclare class Int32Array extends Array {}\ndeclare class Float32Array extends Array {}\ndeclare class Float64Array extends Array {}\n\ndeclare class String {\n static fromCharCode(ls: i32, hs?: i32): string;\n static fromCharCodes(arr: u16[]): string;\n static fromCodePoint(cp: i32): string;\n static fromCodePoints(arr: i32[]): string;\n readonly length: i32;\n private constructor();\n indexOf(subject: string, position?: i32): i32;\n includes(other: string): bool;\n lastIndexOf(subject: string, position?: i32): i32;\n charAt(index: i32): string;\n charCodeAt(index: i32): i32;\n substring(from: i32, to?: i32): string;\n startsWith(subject: string): bool;\n endsWith(subject: string): bool;\n replace(search: string, replacement: string): string;\n toString(): string;\n}\n\ninterface Boolean {}\n\ndeclare class Number {\n private constructor();\n toString(radix?: i32): string;\n}\n\ninterface Object {}\n\ninterface Function {}\n\ninterface RegExp {}\n\ninterface IArguments {}\n\ndeclare class Error {\n constructor(message: string);\n message: string;\n stack: string | null;\n}\n\ndeclare class Symbol {\n private constructor();\n static readonly iterator: symbol;\n}\n\ndeclare class Set {\n constructor(entries?: T[]);\n has(value: T): bool;\n add(value: T): void;\n delete(value: T): bool;\n clear(): void;\n [Symbol.iterator](): Iterator;\n}\n\ndeclare class Map {\n constructor(entries?: [K, V][]);\n readonly size: i32;\n set(key: K, value: V): void;\n has(key: K): bool;\n get(key: K): V | null;\n clear(): void;\n entries(): Iterable<[K, V]>;\n keys(): Iterable;\n values(): Iterable;\n [Symbol.iterator](): Iterator<[K,V]>;\n}\n\ninterface Iterable {\n [Symbol.iterator](): Iterator;\n}\n\ninterface Iterator {}\n\ndeclare namespace console {\n /** @deprecated */\n function log(message: string): void;\n}\n'}):{},exports.main=function(e,n,t){"function"==typeof n?(t=n,n={}):n||(n={});const i=n.stdout||process.stdout,r=n.stderr||process.stderr,o=n.readFile||T,s=n.writeFile||z,a=n.listFiles||E,l=n.stats||createStats();if(!i)throw Error("'options.stdout' must be specified");if(!r)throw Error("'options.stderr' must be specified");if(!fs.readFileSync){if(o===T)throw Error("'options.readFile' must be specified");if(s===z)throw Error("'options.writeFile' must be specified");if(a===E)throw Error("'options.listFiles' must be specified")}const u=parseArguments(e);if(t||(t=function(e){var n=0;return e&&(r.write(e.stack+os.EOL),n=1),n}),u.version)return i.write("Version "+exports.version+(isDev?"-dev":"")+os.EOL),t(null);if(u.help||u._.length<1){const e=[];return Object.keys(exports.options).forEach(n=>{var t=exports.options[n],i=" ";for(i+="--"+n,t.aliases&&1===t.aliases[0].length&&(i+=", -"+t.aliases[0]);i.length<24;)i+=" ";Array.isArray(t.desc)?e.push(i+t.desc[0]+t.desc.slice(1).map(e=>{for(let n=0;n<24;++n)e=" "+e;return os.EOL+e}).join("")):e.push(i+t.desc)}),(u.help?i:r).write(["Version "+exports.version+(isDev?"-dev":""),"Syntax: asc [entryFile ...] [options]","","Examples: asc hello.ts"," asc hello.ts -b hello.wasm -t hello.wat"," asc hello1.ts hello2.ts -b -O > hello.wasm","","Options:"].concat(e).join(os.EOL)+os.EOL),t(null)}const c=u.baseDir?path.resolve(u.baseDir):process.cwd(),f=path.join(".","..","std","assembly"),h=u.noLib?[]:[f];u.lib&&("string"==typeof u.lib&&(u.lib=u.lib.split(",")),Array.prototype.push.apply(h,u.lib.map(trim)));var d=null;for(let e=0,n=u._.length;e{d=assemblyscript.parseFile(i,n,!0,d)});null!=(n=d.nextFile());){if(n.startsWith(exports.libraryPrefix)){for(let e=0,t=h.length;e{assemblyscript.parseFile(i,n,!1,d)})}if(checkDiagnostics(d,r))return t(Error("Parse error"))}var p=!1;u.noLib||Object.keys(exports.libraryFiles).forEach(e=>{e.lastIndexOf("/")>=exports.libraryPrefix.length||(l.parseCount++,l.parseTime+=measure(()=>{d=assemblyscript.parseFile(exports.libraryFiles[e],e+".ts",!1,d)}),p=!0)});for(let e=0,n=h.length;e{d=assemblyscript.parseFile(s,exports.libraryPrefix+r,!1,d)})}}const m=assemblyscript.createOptions();var g;if(assemblyscript.setTarget(m,0),assemblyscript.setNoTreeShaking(m,!!u.noTreeShaking),assemblyscript.setNoAssert(m,!!u.noAssert),assemblyscript.setNoMemory(m,!!u.noMemory),assemblyscript.setImportMemory(m,!!u.importMemory),assemblyscript.setMemoryBase(m,u.memoryBase>>>0),assemblyscript.setSourceMap(m,null!=u.sourceMap),l.compileCount++,(()=>{try{l.compileTime+=measure(()=>{g=assemblyscript.compile(d,m)})}catch(e){return t(e)}})(),checkDiagnostics(d,r))return g&&g.dispose(),t(Error("Compile error"));if(u.validate&&(l.validateCount++,l.validateTime+=measure(()=>{if(!g.validate())return g.dispose(),t(Error("Validate error"))})),"clamp"===u.trapMode)l.optimizeCount++,l.optimizeTime+=measure(()=>{g.runPasses(["trap-mode-clamp"])});else if("js"===u.trapMode)l.optimizeCount++,l.optimizeTime+=measure(()=>{g.runPasses(["trap-mode-js"])});else if("allow"!==u.trapMode)return g.dispose(),t(Error("Unsupported trap mode"));var b=-1,y=0,_=!u.noDebug;!1!==u.optimize&&("number"==typeof u.optimize?b=u.optimize:u[0]?b=0:u[1]?b=1:u[2]?b=2:u[3]?b=3:!0===u.optimize?(b=exports.defaultOptimizeLevel,y=exports.defaultShrinkLevel):b=0),u.s?y=1:u.z&&(y=2),"number"==typeof u.optimizeLevel&&(b=u.optimizeLevel),"number"==typeof u.shrinkLevel?y=u.shrinkLevel:"s"===u.shrinkLevel?y=1:"z"===u.shrinkLevel&&(y=2),g.setOptimizeLevel(b>0?b:0),g.setShrinkLevel(y),g.setDebugInfo(_);var v=[];if(u.runPasses&&("string"==typeof u.runPasses&&(u.runPasses=u.runPasses.split(",")),u.runPasses.length&&u.runPasses.forEach(e=>{v.indexOf(e)<0&&v.push(e)})),b>=0&&(l.optimizeCount++,l.optimizeTime+=measure(()=>{g.optimize()})),v.length&&(l.optimizeCount++,l.optimizeTime+=measure(()=>{g.runPasses(v.map(e=>e.trim()))})),!u.noEmit){let e=!1;if(null!=u.outFile&&(/\.was?t$/.test(u.outFile)&&null==u.textFile?u.textFile=u.outFile:/\.js$/.test(u.outFile)&&null==u.asmjsFile?u.asmjsFile=u.outFile:null==u.binaryFile&&(u.binaryFile=u.outFile)),null!=u.binaryFile){let n,i=null!=u.sourceMap?u.sourceMap.length?u.sourceMap:path.basename(u.binaryFile)+".map":null;if(l.emitCount++,l.emitTime+=measure(()=>{n=g.toBinary(i)}),u.binaryFile.length?s(path.join(c,u.binaryFile),n.output):(x(n.output),e=!0),null!=n.sourceMap)if(u.binaryFile.length){let e=JSON.parse(n.sourceMap);e.sourceRoot=exports.sourceMapRoot,e.sources.forEach((n,i)=>{let r=null;if(n.startsWith(exports.libraryPrefix))for(let e=0,t=h.length;e{n=g.toText()}),s(path.join(c,u.textFile),n)):e||(l.emitCount++,l.emitTime+=measure(()=>{n=g.toText()}),x(n),e=!0)}if(null!=u.asmjsFile){let n;u.asmjsFile.length?(l.emitCount++,l.emitTime+=measure(()=>{n=g.toAsmjs()}),s(path.join(c,u.asmjsFile),n)):e||(l.emitCount++,l.emitTime+=measure(()=>{n=g.toAsmjs()}),x(n),e=!0)}}return g.dispose(),u.measure&&printStats(l,r),t(null);function T(e){try{var n;return l.readCount++,l.readTime+=measure(()=>{n=fs.readFileSync(e,{encoding:"utf8"})}),n}catch(e){return null}}function z(e,n){try{return l.writeCount++,l.writeTime+=measure(()=>{"string"==typeof n?fs.writeFileSync(e,n,{encoding:"utf8"}):fs.writeFileSync(e,n)}),!0}catch(e){return!1}}function E(e){var n;try{return l.readTime+=measure(()=>{n=__webpack_require__(!function(){var e=new Error('Cannot find module "glob"');throw e.code="MODULE_NOT_FOUND",e}()).sync("*.ts",{cwd:e})}),n}catch(e){return[]}}function x(e){x.used||(l.writeCount++,x.used=!0),l.writeTime+=measure(()=>{"string"==typeof e?i.write(e,{encoding:"utf8"}):i.write(e)})}},exports.parseArguments=parseArguments,exports.checkDiagnostics=checkDiagnostics,exports.createStats=createStats,process.hrtime||(process.hrtime=__webpack_require__(3)),exports.measure=measure,exports.printStats=printStats,exports.createMemoryStream=createMemoryStream,exports.tscOptions={alwaysStrict:!0,noImplicitAny:!0,noImplicitReturns:!0,noImplicitThis:!0,noEmitOnError:!0,strictNullChecks:!0,experimentalDecorators:!0,target:"esnext",module:"commonjs",noLib:!0,types:[],allowJs:!1}}).call(this,__webpack_require__(0),__webpack_require__(12).Buffer)},function(e,n,t){e.exports=t(13)}])}); +!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(function(){try{return require("assemblyscript")}catch(e){}}()):"function"==typeof define&&define.amd?define(["assemblyscript"],n):"object"==typeof exports?exports.asc=n(function(){try{return require("assemblyscript")}catch(e){}}()):e.asc=n(e.assemblyscript)}("undefined"!=typeof self?self:this,function(__WEBPACK_EXTERNAL_MODULE__6__){return function(e){var n={};function t(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return e[i].call(r.exports,r,r.exports,t),r.l=!0,r.exports}return t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:i})},t.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="",t(t.s=14)}([function(e,n,t){var i,r;n.nextTick=function(e){setTimeout(e,0)},n.platform=n.arch=n.execPath=n.title="browser",n.pid=1,n.browser=!0,n.env={},n.argv=[],n.binding=function(e){throw new Error("No such module. (Possibly not yet loaded)")},r="/",n.cwd=function(){return r},n.chdir=function(e){i||(i=t(2)),r=i.resolve(e,r)},n.exit=n.kill=n.umask=n.dlopen=n.uptime=n.memoryUsage=n.uvCounters=function(){},n.features={}},function(e,n){var t;t=function(){return this}();try{t=t||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(t=window)}e.exports=t},function(e,n,t){(function(e){function t(e,n){for(var t=0,i=e.length-1;i>=0;i--){var r=e[i];"."===r?e.splice(i,1):".."===r?(e.splice(i,1),t++):t&&(e.splice(i,1),t--)}if(n)for(;t--;t)e.unshift("..");return e}var i=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,r=function(e){return i.exec(e).slice(1)};function o(e,n){if(e.filter)return e.filter(n);for(var t=[],i=0;i=-1&&!i;r--){var s=r>=0?arguments[r]:e.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(n=s+"/"+n,i="/"===s.charAt(0))}return n=t(o(n.split("/"),function(e){return!!e}),!i).join("/"),(i?"/":"")+n||"."},n.normalize=function(e){var i=n.isAbsolute(e),r="/"===s(e,-1);return(e=t(o(e.split("/"),function(e){return!!e}),!i).join("/"))||i||(e="."),e&&r&&(e+="/"),(i?"/":"")+e},n.isAbsolute=function(e){return"/"===e.charAt(0)},n.join=function(){var e=Array.prototype.slice.call(arguments,0);return n.normalize(o(e,function(e,n){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e}).join("/"))},n.relative=function(e,t){function i(e){for(var n=0;n=0&&""===e[t];t--);return n>t?[]:e.slice(n,t-n+1)}e=n.resolve(e).substr(1),t=n.resolve(t).substr(1);for(var r=i(e.split("/")),o=i(t.split("/")),s=Math.min(r.length,o.length),a=s,l=0;l>1,c=-7,f=t?r-1:0,h=t?-1:1,d=e[n+f];for(f+=h,o=d&(1<<-c)-1,d>>=-c,c+=a;c>0;o=256*o+e[n+f],f+=h,c-=8);for(s=o&(1<<-c)-1,o>>=-c,c+=i;c>0;s=256*s+e[n+f],f+=h,c-=8);if(0===o)o=1-u;else{if(o===l)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,i),o-=u}return(d?-1:1)*s*Math.pow(2,o-i)},n.write=function(e,n,t,i,r,o){var s,a,l,u=8*o-r-1,c=(1<>1,h=23===r?Math.pow(2,-24)-Math.pow(2,-77):0,d=i?0:o-1,p=i?1:-1,m=n<0||0===n&&1/n<0?1:0;for(n=Math.abs(n),isNaN(n)||n===1/0?(a=isNaN(n)?1:0,s=c):(s=Math.floor(Math.log(n)/Math.LN2),n*(l=Math.pow(2,-s))<1&&(s--,l*=2),(n+=s+f>=1?h/l:h*Math.pow(2,1-f))*l>=2&&(s++,l/=2),s+f>=c?(a=0,s=c):s+f>=1?(a=(n*l-1)*Math.pow(2,r),s+=f):(a=n*Math.pow(2,f-1)*Math.pow(2,r),s=0));r>=8;e[t+d]=255&a,d+=p,a/=256,r-=8);for(s=s<0;e[t+d]=255&s,d+=p,s/=256,u-=8);e[t+d-p]|=128*m}},function(e,n,t){"use strict";n.byteLength=function(e){return 3*e.length/4-u(e)},n.toByteArray=function(e){var n,t,i,s,a,l=e.length;s=u(e),a=new o(3*l/4-s),t=s>0?l-4:l;var c=0;for(n=0;n>16&255,a[c++]=i>>8&255,a[c++]=255&i;2===s?(i=r[e.charCodeAt(n)]<<2|r[e.charCodeAt(n+1)]>>4,a[c++]=255&i):1===s&&(i=r[e.charCodeAt(n)]<<10|r[e.charCodeAt(n+1)]<<4|r[e.charCodeAt(n+2)]>>2,a[c++]=i>>8&255,a[c++]=255&i);return a},n.fromByteArray=function(e){for(var n,t=e.length,r=t%3,o="",s=[],a=0,l=t-r;al?l:a+16383));1===r?(n=e[t-1],o+=i[n>>2],o+=i[n<<4&63],o+="=="):2===r&&(n=(e[t-2]<<8)+e[t-1],o+=i[n>>10],o+=i[n>>4&63],o+=i[n<<2&63],o+="=");return s.push(o),s.join("")};for(var i=[],r=[],o="undefined"!=typeof Uint8Array?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",a=0,l=s.length;a0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===e[n-2]?2:"="===e[n-1]?1:0}function c(e,n,t){for(var r,o,s=[],a=n;a>18&63]+i[o>>12&63]+i[o>>6&63]+i[63&o]);return s.join("")}r["-".charCodeAt(0)]=62,r["_".charCodeAt(0)]=63},function(e,n,t){"use strict";(function(e){var i=t(11),r=t(10),o=t(9);function s(){return l.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function a(e,n){if(s()=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|e}function p(e,n){if(l.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var t=e.length;if(0===t)return 0;for(var i=!1;;)switch(n){case"ascii":case"latin1":case"binary":return t;case"utf8":case"utf-8":case void 0:return D(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*t;case"hex":return t>>>1;case"base64":return j(e).length;default:if(i)return D(e).length;n=(""+n).toLowerCase(),i=!0}}function m(e,n,t){var i=e[n];e[n]=e[t],e[t]=i}function g(e,n,t,i,r){if(0===e.length)return-1;if("string"==typeof t?(i=t,t=0):t>2147483647?t=2147483647:t<-2147483648&&(t=-2147483648),t=+t,isNaN(t)&&(t=r?0:e.length-1),t<0&&(t=e.length+t),t>=e.length){if(r)return-1;t=e.length-1}else if(t<0){if(!r)return-1;t=0}if("string"==typeof n&&(n=l.from(n,i)),l.isBuffer(n))return 0===n.length?-1:b(e,n,t,i,r);if("number"==typeof n)return n&=255,l.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?r?Uint8Array.prototype.indexOf.call(e,n,t):Uint8Array.prototype.lastIndexOf.call(e,n,t):b(e,[n],t,i,r);throw new TypeError("val must be string, number or Buffer")}function b(e,n,t,i,r){var o,s=1,a=e.length,l=n.length;if(void 0!==i&&("ucs2"===(i=String(i).toLowerCase())||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(e.length<2||n.length<2)return-1;s=2,a/=2,l/=2,t/=2}function u(e,n){return 1===s?e[n]:e.readUInt16BE(n*s)}if(r){var c=-1;for(o=t;oa&&(t=a-l),o=t;o>=0;o--){for(var f=!0,h=0;hr&&(i=r):i=r;var o=n.length;if(o%2!=0)throw new TypeError("Invalid hex string");i>o/2&&(i=o/2);for(var s=0;s>8,r=t%256,o.push(r),o.push(i);return o}(n,e.length-t),e,t,i)}function x(e,n,t){return 0===n&&t===e.length?i.fromByteArray(e):i.fromByteArray(e.slice(n,t))}function w(e,n,t){t=Math.min(e.length,t);for(var i=[],r=n;r239?4:u>223?3:u>191?2:1;if(r+f<=t)switch(f){case 1:u<128&&(c=u);break;case 2:128==(192&(o=e[r+1]))&&(l=(31&u)<<6|63&o)>127&&(c=l);break;case 3:o=e[r+1],s=e[r+2],128==(192&o)&&128==(192&s)&&(l=(15&u)<<12|(63&o)<<6|63&s)>2047&&(l<55296||l>57343)&&(c=l);break;case 4:o=e[r+1],s=e[r+2],a=e[r+3],128==(192&o)&&128==(192&s)&&128==(192&a)&&(l=(15&u)<<18|(63&o)<<12|(63&s)<<6|63&a)>65535&&l<1114112&&(c=l)}null===c?(c=65533,f=1):c>65535&&(c-=65536,i.push(c>>>10&1023|55296),c=56320|1023&c),i.push(c),r+=f}return function(e){var n=e.length;if(n<=A)return String.fromCharCode.apply(String,e);var t="",i=0;for(;ithis.length)return"";if((void 0===t||t>this.length)&&(t=this.length),t<=0)return"";if((t>>>=0)<=(n>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return L(this,n,t);case"utf8":case"utf-8":return w(this,n,t);case"ascii":return S(this,n,t);case"latin1":case"binary":return k(this,n,t);case"base64":return x(this,n,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,n,t);default:if(i)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),i=!0}}.apply(this,arguments)},l.prototype.equals=function(e){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===l.compare(this,e)},l.prototype.inspect=function(){var e="",t=n.INSPECT_MAX_BYTES;return this.length>0&&(e=this.toString("hex",0,t).match(/.{2}/g).join(" "),this.length>t&&(e+=" ... ")),""},l.prototype.compare=function(e,n,t,i,r){if(!l.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===n&&(n=0),void 0===t&&(t=e?e.length:0),void 0===i&&(i=0),void 0===r&&(r=this.length),n<0||t>e.length||i<0||r>this.length)throw new RangeError("out of range index");if(i>=r&&n>=t)return 0;if(i>=r)return-1;if(n>=t)return 1;if(n>>>=0,t>>>=0,i>>>=0,r>>>=0,this===e)return 0;for(var o=r-i,s=t-n,a=Math.min(o,s),u=this.slice(i,r),c=e.slice(n,t),f=0;fr)&&(t=r),e.length>0&&(t<0||n<0)||n>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var o=!1;;)switch(i){case"hex":return y(this,e,n,t);case"utf8":case"utf-8":return _(this,e,n,t);case"ascii":return v(this,e,n,t);case"latin1":case"binary":return T(this,e,n,t);case"base64":return z(this,e,n,t);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,e,n,t);default:if(o)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),o=!0}},l.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var A=4096;function S(e,n,t){var i="";t=Math.min(e.length,t);for(var r=n;ri)&&(t=i);for(var r="",o=n;ot)throw new RangeError("Trying to access beyond buffer length")}function N(e,n,t,i,r,o){if(!l.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(n>r||ne.length)throw new RangeError("Index out of range")}function C(e,n,t,i){n<0&&(n=65535+n+1);for(var r=0,o=Math.min(e.length-t,2);r>>8*(i?r:1-r)}function O(e,n,t,i){n<0&&(n=4294967295+n+1);for(var r=0,o=Math.min(e.length-t,4);r>>8*(i?r:3-r)&255}function F(e,n,t,i,r,o){if(t+i>e.length)throw new RangeError("Index out of range");if(t<0)throw new RangeError("Index out of range")}function R(e,n,t,i,o){return o||F(e,0,t,4),r.write(e,n,t,i,23,4),t+4}function B(e,n,t,i,o){return o||F(e,0,t,8),r.write(e,n,t,i,52,8),t+8}l.prototype.slice=function(e,n){var t,i=this.length;if(e=~~e,n=void 0===n?i:~~n,e<0?(e+=i)<0&&(e=0):e>i&&(e=i),n<0?(n+=i)<0&&(n=0):n>i&&(n=i),n0&&(r*=256);)i+=this[e+--n]*r;return i},l.prototype.readUInt8=function(e,n){return n||M(e,1,this.length),this[e]},l.prototype.readUInt16LE=function(e,n){return n||M(e,2,this.length),this[e]|this[e+1]<<8},l.prototype.readUInt16BE=function(e,n){return n||M(e,2,this.length),this[e]<<8|this[e+1]},l.prototype.readUInt32LE=function(e,n){return n||M(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},l.prototype.readUInt32BE=function(e,n){return n||M(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},l.prototype.readIntLE=function(e,n,t){e|=0,n|=0,t||M(e,n,this.length);for(var i=this[e],r=1,o=0;++o=(r*=128)&&(i-=Math.pow(2,8*n)),i},l.prototype.readIntBE=function(e,n,t){e|=0,n|=0,t||M(e,n,this.length);for(var i=n,r=1,o=this[e+--i];i>0&&(r*=256);)o+=this[e+--i]*r;return o>=(r*=128)&&(o-=Math.pow(2,8*n)),o},l.prototype.readInt8=function(e,n){return n||M(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},l.prototype.readInt16LE=function(e,n){n||M(e,2,this.length);var t=this[e]|this[e+1]<<8;return 32768&t?4294901760|t:t},l.prototype.readInt16BE=function(e,n){n||M(e,2,this.length);var t=this[e+1]|this[e]<<8;return 32768&t?4294901760|t:t},l.prototype.readInt32LE=function(e,n){return n||M(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},l.prototype.readInt32BE=function(e,n){return n||M(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},l.prototype.readFloatLE=function(e,n){return n||M(e,4,this.length),r.read(this,e,!0,23,4)},l.prototype.readFloatBE=function(e,n){return n||M(e,4,this.length),r.read(this,e,!1,23,4)},l.prototype.readDoubleLE=function(e,n){return n||M(e,8,this.length),r.read(this,e,!0,52,8)},l.prototype.readDoubleBE=function(e,n){return n||M(e,8,this.length),r.read(this,e,!1,52,8)},l.prototype.writeUIntLE=function(e,n,t,i){(e=+e,n|=0,t|=0,i)||N(this,e,n,t,Math.pow(2,8*t)-1,0);var r=1,o=0;for(this[n]=255&e;++o=0&&(o*=256);)this[n+r]=e/o&255;return n+t},l.prototype.writeUInt8=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,1,255,0),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[n]=255&e,n+1},l.prototype.writeUInt16LE=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[n]=255&e,this[n+1]=e>>>8):C(this,e,n,!0),n+2},l.prototype.writeUInt16BE=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,2,65535,0),l.TYPED_ARRAY_SUPPORT?(this[n]=e>>>8,this[n+1]=255&e):C(this,e,n,!1),n+2},l.prototype.writeUInt32LE=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[n+3]=e>>>24,this[n+2]=e>>>16,this[n+1]=e>>>8,this[n]=255&e):O(this,e,n,!0),n+4},l.prototype.writeUInt32BE=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,4,4294967295,0),l.TYPED_ARRAY_SUPPORT?(this[n]=e>>>24,this[n+1]=e>>>16,this[n+2]=e>>>8,this[n+3]=255&e):O(this,e,n,!1),n+4},l.prototype.writeIntLE=function(e,n,t,i){if(e=+e,n|=0,!i){var r=Math.pow(2,8*t-1);N(this,e,n,t,r-1,-r)}var o=0,s=1,a=0;for(this[n]=255&e;++o>0)-a&255;return n+t},l.prototype.writeIntBE=function(e,n,t,i){if(e=+e,n|=0,!i){var r=Math.pow(2,8*t-1);N(this,e,n,t,r-1,-r)}var o=t-1,s=1,a=0;for(this[n+o]=255&e;--o>=0&&(s*=256);)e<0&&0===a&&0!==this[n+o+1]&&(a=1),this[n+o]=(e/s>>0)-a&255;return n+t},l.prototype.writeInt8=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,1,127,-128),l.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[n]=255&e,n+1},l.prototype.writeInt16LE=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[n]=255&e,this[n+1]=e>>>8):C(this,e,n,!0),n+2},l.prototype.writeInt16BE=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,2,32767,-32768),l.TYPED_ARRAY_SUPPORT?(this[n]=e>>>8,this[n+1]=255&e):C(this,e,n,!1),n+2},l.prototype.writeInt32LE=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,4,2147483647,-2147483648),l.TYPED_ARRAY_SUPPORT?(this[n]=255&e,this[n+1]=e>>>8,this[n+2]=e>>>16,this[n+3]=e>>>24):O(this,e,n,!0),n+4},l.prototype.writeInt32BE=function(e,n,t){return e=+e,n|=0,t||N(this,e,n,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),l.TYPED_ARRAY_SUPPORT?(this[n]=e>>>24,this[n+1]=e>>>16,this[n+2]=e>>>8,this[n+3]=255&e):O(this,e,n,!1),n+4},l.prototype.writeFloatLE=function(e,n,t){return R(this,e,n,!0,t)},l.prototype.writeFloatBE=function(e,n,t){return R(this,e,n,!1,t)},l.prototype.writeDoubleLE=function(e,n,t){return B(this,e,n,!0,t)},l.prototype.writeDoubleBE=function(e,n,t){return B(this,e,n,!1,t)},l.prototype.copy=function(e,n,t,i){if(t||(t=0),i||0===i||(i=this.length),n>=e.length&&(n=e.length),n||(n=0),i>0&&i=this.length)throw new RangeError("sourceStart out of bounds");if(i<0)throw new RangeError("sourceEnd out of bounds");i>this.length&&(i=this.length),e.length-n=0;--r)e[r+n]=this[r+t];else if(o<1e3||!l.TYPED_ARRAY_SUPPORT)for(r=0;r>>=0,t=void 0===t?this.length:t>>>0,e||(e=0),"number"==typeof e)for(o=n;o55295&&t<57344){if(!r){if(t>56319){(n-=3)>-1&&o.push(239,191,189);continue}if(s+1===i){(n-=3)>-1&&o.push(239,191,189);continue}r=t;continue}if(t<56320){(n-=3)>-1&&o.push(239,191,189),r=t;continue}t=65536+(r-55296<<10|t-56320)}else r&&(n-=3)>-1&&o.push(239,191,189);if(r=null,t<128){if((n-=1)<0)break;o.push(t)}else if(t<2048){if((n-=2)<0)break;o.push(t>>6|192,63&t|128)}else if(t<65536){if((n-=3)<0)break;o.push(t>>12|224,t>>6&63|128,63&t|128)}else{if(!(t<1114112))throw new Error("Invalid code point");if((n-=4)<0)break;o.push(t>>18|240,t>>12&63|128,t>>6&63|128,63&t|128)}}return o}function j(e){return i.toByteArray(function(e){if((e=function(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}(e).replace(U,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function H(e,n,t,i){for(var r=0;r=n.length||r>=e.length);++r)n[r+t]=e[r];return r}}).call(this,t(1))},function(module,exports,__webpack_require__){(function(process,Buffer){const fs=__webpack_require__(8),path=__webpack_require__(2),os=__webpack_require__(7);var assemblyscript,isDev;function parseArguments(e){const n={};return Object.keys(exports.options).forEach(e=>{const t=exports.options[e];t.aliases&&((n.alias||(n.alias={}))[e]=t.aliases),void 0!==t.default&&((n.default||(n.default={}))[e]=t.default),"string"===t.type?(n.string||(n.string=[])).push(e):"boolean"===t.type&&(n.boolean||(n.boolean=[])).push(e)}),__webpack_require__(4)(e,n)}function checkDiagnostics(e,n){for(var t,i=!1;null!=(t=assemblyscript.nextDiagnostic(e));)n.write(assemblyscript.formatDiagnostic(t,n.isTTY,!0)+os.EOL+os.EOL),assemblyscript.isError(t)&&(i=!0);return i}function createStats(){return{readTime:0,readCount:0,writeTime:0,writeCount:0,parseTime:0,parseCount:0,compileTime:0,compileCount:0,emitTime:0,emitCount:0,validateTime:0,validateCount:0,optimizeTime:0,optimizeCount:0}}function measure(e){const n=process.hrtime();e();const t=process.hrtime(n);return 1e9*t[0]+t[1]}function printStats(e,n){function t(e,n){return e?(e/1e6).toFixed(3)+" ms":"N/A"}(n||process.stdout).write(["I/O Read : "+t(e.readTime,e.readCount),"I/O Write : "+t(e.writeTime,e.writeCount),"Parse : "+t(e.parseTime,e.parseCount),"Compile : "+t(e.compileTime,e.compileCount),"Emit : "+t(e.emitTime,e.emitCount),"Validate : "+t(e.validateTime,e.validateCount),"Optimize : "+t(e.optimizeTime,e.optimizeCount)].join(os.EOL)+os.EOL)}function createMemoryStream(e){var n=[];return n.write=function(n){"string"==typeof n?this.push(Buffer.from(n,"utf8")):this.push(n),e&&e(n)},n.toBuffer=function(){return Buffer.concat(this)},n.toString=function(){return this.toBuffer().toString("utf8")},n}(()=>{try{assemblyscript=__webpack_require__(6),isDev=!1;try{__webpack_require__(!function(){var e=new Error('Cannot find module "source-map-support"');throw e.code="MODULE_NOT_FOUND",e}()).install()}catch(e){}}catch(e){try{__webpack_require__(!function(){var e=new Error('Cannot find module "ts-node"');throw e.code="MODULE_NOT_FOUND",e}()).register({project:path.join(".","..","src","tsconfig.json")}),__webpack_require__(!function(){var e=new Error('Cannot find module "../src/glue/js"');throw e.code="MODULE_NOT_FOUND",e}()),assemblyscript=__webpack_require__(!function(){var e=new Error('Cannot find module "../src"');throw e.code="MODULE_NOT_FOUND",e}()),isDev=!0}catch(e){assemblyscript=eval("require('./assemblyscript')"),isDev=!1}}})(),exports.isBundle=!0,exports.isDev=isDev,exports.version=exports.isBundle?"0.5.0":__webpack_require__(!function(){var e=new Error('Cannot find module "../package.json"');throw e.code="MODULE_NOT_FOUND",e}()).version,exports.options=__webpack_require__(5),exports.sourceMapRoot="assemblyscript:///",exports.libraryPrefix=assemblyscript.LIBRARY_PREFIX,exports.defaultOptimizeLevel=2,exports.defaultShrinkLevel=1,exports.libraryFiles=exports.isBundle?Object({"(lib)/allocator/arena":'/**\n * @file Arena Memory Allocator\n *\n * Provides a `reset_memory` function to reset the heap to its initial state. A user has to make\n * sure that there are no more references to cleared memory afterwards. Always aligns to 8 bytes.\n */\n\nimport { MASK as AL_MASK } from "./common/alignment";\n\nvar offset: usize = (HEAP_BASE + AL_MASK) & ~AL_MASK;\n\n@global\nexport function allocate_memory(size: usize): usize {\n if (!size) return 0;\n var ptr = offset;\n var newPtr = (ptr + size + AL_MASK) & ~AL_MASK;\n var pagesBefore = current_memory();\n if (newPtr > pagesBefore << 16) {\n let pagesNeeded = ((newPtr - ptr + 0xffff) & ~0xffff) >>> 16;\n let pagesWanted = max(pagesBefore, pagesNeeded); // double memory\n if (grow_memory(pagesWanted) < 0) {\n if (grow_memory(pagesNeeded) < 0) {\n unreachable(); // out of memory\n }\n }\n }\n offset = newPtr;\n return ptr;\n}\n\n@global\nexport function free_memory(ptr: usize): void {\n // nop\n}\n\n@global\nexport function reset_memory(): void {\n offset = (HEAP_BASE + AL_MASK) & ~AL_MASK;\n}\n',"(lib)/allocator/buddy":'/**\n * @file Buddy Memory Allocator\n */\n\n/*\n Copyright 2018 Evan Wallace\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the "Software"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n\n*/// see: https://github.com/evanw/buddy-malloc\n\n/*\n * This file implements a buddy memory allocator, which is an allocator that\n * allocates memory within a fixed linear address range. It spans the address\n * range with a binary tree that tracks free space. Both "malloc" and "free"\n * are O(log N) time where N is the maximum possible number of allocations.\n *\n * The "buddy" term comes from how the tree is used. When memory is allocated,\n * nodes in the tree are split recursively until a node of the appropriate size\n * is reached. Every split results in two child nodes, each of which is the\n * buddy of the other. When a node is freed, the node and its buddy can be\n * merged again if the buddy is also free. This makes the memory available\n * for larger allocations again.\n */\n\n/*\n * Every allocation needs an 8-byte header to store the allocation size while\n * staying 8-byte aligned. The address returned by "malloc" is the address\n * right after this header (i.e. the size occupies the 8 bytes before the\n * returned address).\n */\nconst HEADER_SIZE: usize = 8;\n\n/*\n * The minimum allocation size is 16 bytes because we have an 8-byte header and\n * we need to stay 8-byte aligned.\n */\nconst MIN_ALLOC_LOG2: usize = 4;\nconst MIN_ALLOC: usize = 1 << MIN_ALLOC_LOG2;\n\n/*\n * The maximum allocation size is currently set to 2gb. This is the total size\n * of the heap. It\'s technically also the maximum allocation size because the\n * heap could consist of a single allocation of this size. But of course real\n * heaps will have multiple allocations, so the real maximum allocation limit\n * is at most 1gb.\n */\nconst MAX_ALLOC_LOG2: usize = 30; // 31;\nconst MAX_ALLOC: usize = 1 << MAX_ALLOC_LOG2;\n\n/*\n * Allocations are done in powers of two starting from MIN_ALLOC and ending at\n * MAX_ALLOC inclusive. Each allocation size has a bucket that stores the free\n * list for that allocation size.\n *\n * Given a bucket index, the size of the allocations in that bucket can be\n * found with "(size_t)1 << (MAX_ALLOC_LOG2 - bucket)".\n */\nconst BUCKET_COUNT: usize = MAX_ALLOC_LOG2 - MIN_ALLOC_LOG2 + 1;\n\n/*\n * Free lists are stored as circular doubly-linked lists. Every possible\n * allocation size has an associated free list that is threaded through all\n * currently free blocks of that size. That means MIN_ALLOC must be at least\n * "sizeof(list_t)". MIN_ALLOC is currently 16 bytes, so this will be true for\n * both 32-bit and 64-bit.\n */\n@unmanaged\nclass List {\n prev: List;\n next: List;\n static readonly SIZE: usize = 2 * sizeof();\n}\n\n/*\n * Each bucket corresponds to a certain allocation size and stores a free list\n * for that size. The bucket at index 0 corresponds to an allocation size of\n * MAX_ALLOC (i.e. the whole address space).\n */\nvar BUCKETS_START: usize = HEAP_BASE;\nvar BUCKETS_END: usize = BUCKETS_START + BUCKET_COUNT * List.SIZE;\n\nfunction buckets$get(index: usize): List {\n assert(index < BUCKET_COUNT);\n return changetype(BUCKETS_START + index * List.SIZE);\n}\n\n/*\n * We could initialize the allocator by giving it one free block the size of\n * the entire address space. However, this would cause us to instantly reserve\n * half of the entire address space on the first allocation, since the first\n * split would store a free list entry at the start of the right child of the\n * root. Instead, we have the tree start out small and grow the size of the\n * tree as we use more memory. The size of the tree is tracked by this value.\n */\nvar bucket_limit: usize;\n\n/*\n * This array represents a linearized binary tree of bits. Every possible\n * allocation larger than MIN_ALLOC has a node in this tree (and therefore a\n * bit in this array).\n *\n * Given the index for a node, lineraized binary trees allow you to traverse to\n * the parent node or the child nodes just by doing simple arithmetic on the\n * index:\n *\n * - Move to parent: index = (index - 1) / 2;\n * - Move to left child: index = index * 2 + 1;\n * - Move to right child: index = index * 2 + 2;\n * - Move to sibling: index = ((index - 1) ^ 1) + 1;\n *\n * Each node in this tree can be in one of several states:\n *\n * - UNUSED (both children are UNUSED)\n * - SPLIT (one child is UNUSED and the other child isn\'t)\n * - USED (neither children are UNUSED)\n *\n * These states take two bits to store. However, it turns out we have enough\n * information to distinguish between UNUSED and USED from context, so we only\n * need to store SPLIT or not, which only takes a single bit.\n *\n * Note that we don\'t need to store any nodes for allocations of size MIN_ALLOC\n * since we only ever care about parent nodes.\n */\nconst SPLIT_COUNT: usize = (1 << (BUCKET_COUNT - 1)) / 8;\nvar NODE_IS_SPLIT_START: usize = BUCKETS_END;\nvar NODE_IS_SPLIT_END: usize = NODE_IS_SPLIT_START + SPLIT_COUNT * sizeof();\n\nfunction node_is_split$get(index: usize): i32 {\n assert(index < SPLIT_COUNT);\n return load(NODE_IS_SPLIT_START + index);\n}\n\nfunction node_is_split$set(index: usize, state: i32): void {\n assert(index < SPLIT_COUNT);\n store(NODE_IS_SPLIT_START + index, state);\n}\n\n/*\n * This is the starting address of the address range for this allocator. Every\n * returned allocation will be an offset of this pointer from 0 to MAX_ALLOC.\n */\nvar base_ptr: usize;\n\n/*\n * This is the maximum address that has ever been used by the allocator. It\'s\n * used to know when to call "brk" to request more memory from the kernel.\n */\nvar max_ptr: usize;\n\n/*\n * Make sure all addresses before "new_value" are valid and can be used. Memory\n * is allocated in a 2gb address range but that memory is not reserved up\n * front. It\'s only reserved when it\'s needed by calling this function. This\n * will return false if the memory could not be reserved.\n */\nfunction update_max_ptr(new_value: usize): i32 {\n if (new_value > max_ptr) {\n // if (brk(new_value)) {\n // return 0;\n // }\n let oldPages = current_memory();\n let newPages = (((new_value + 0xffff) & ~0xffff) >> 16);\n assert(newPages > oldPages);\n if (grow_memory(newPages - oldPages) < 0) {\n return 0;\n }\n // max_ptr = new_value;\n max_ptr = newPages << 16;\n }\n return 1;\n}\n\n/*\n * Initialize a list to empty. Because these are circular lists, an "empty"\n * list is an entry where both links point to itself. This makes insertion\n * and removal simpler because they don\'t need any branches.\n */\nfunction list_init(list: List): void {\n list.prev = list;\n list.next = list;\n}\n\n/*\n * Append the provided entry to the end of the list. This assumes the entry\n * isn\'t in a list already because it overwrites the linked list pointers.\n */\nfunction list_push(list: List, entry: List): void {\n var prev = list.prev;\n entry.prev = prev;\n entry.next = list;\n prev.next = entry;\n list.prev = entry;\n}\n\n/*\n * Remove the provided entry from whichever list it\'s currently in. This\n * assumes that the entry is in a list. You don\'t need to provide the list\n * because the lists are circular, so the list\'s pointers will automatically\n * be updated if the first or last entries are removed.\n */\nfunction list_remove(entry: List): void {\n var prev = entry.prev;\n var next = entry.next;\n prev.next = next;\n next.prev = prev;\n}\n\n/*\n * Remove and return the first entry in the list or NULL if the list is empty.\n */\nfunction list_pop(list: List): List | null {\n var back = list.prev;\n if (back == list) return null;\n list_remove(back);\n return back;\n}\n\n/*\n * This maps from the index of a node to the address of memory that node\n * represents. The bucket can be derived from the index using a loop but is\n * required to be provided here since having them means we can avoid the loop\n * and have this function return in constant time.\n */\nfunction ptr_for_node(index: usize, bucket: usize): usize {\n return base_ptr + ((index - (1 << bucket) + 1) << (MAX_ALLOC_LOG2 - bucket));\n}\n\n/*\n * This maps from an address of memory to the node that represents that\n * address. There are often many nodes that all map to the same address, so\n * the bucket is needed to uniquely identify a node.\n */\nfunction node_for_ptr(ptr: usize, bucket: usize): usize {\n return ((ptr - base_ptr) >> (MAX_ALLOC_LOG2 - bucket)) + (1 << bucket) - 1;\n}\n\n/*\n * Given the index of a node, this returns the "is split" flag of the parent.\n */\nfunction parent_is_split(index: usize): i32 {\n index = (index - 1) / 2;\n return (node_is_split$get(index / 8) >>> (index % 8)) & 1;\n}\n\n/*\n * Given the index of a node, this flips the "is split" flag of the parent.\n */\nfunction flip_parent_is_split(index: usize): void {\n index = (index - 1) / 2;\n var indexDiv8 = index / 8;\n node_is_split$set(indexDiv8,\n node_is_split$get(indexDiv8) ^ (1 << (index % 8))\n );\n}\n\n/*\n * Given the requested size passed to "malloc", this function returns the index\n * of the smallest bucket that can fit that size.\n */\nfunction bucket_for_request(request: usize): usize {\n var bucket = BUCKET_COUNT - 1;\n var size = MIN_ALLOC;\n\n while (size < request) {\n bucket--;\n size *= 2;\n }\n\n return bucket;\n}\n\n/*\n * The tree is always rooted at the current bucket limit. This call grows the\n * tree by repeatedly doubling it in size until the root lies at the provided\n * bucket index. Each doubling lowers the bucket limit by 1.\n */\nfunction lower_bucket_limit(bucket: usize): u32 {\n while (bucket < bucket_limit) {\n let root = node_for_ptr(base_ptr, bucket_limit);\n let right_child: usize;\n\n /*\n * If the parent isn\'t SPLIT, that means the node at the current bucket\n * limit is UNUSED and our address space is entirely free. In that case,\n * clear the root free list, increase the bucket limit, and add a single\n * block with the newly-expanded address space to the new root free list.\n */\n if (!parent_is_split(root)) {\n list_remove(changetype(base_ptr));\n list_init(buckets$get(--bucket_limit));\n list_push(buckets$get(bucket_limit), changetype(base_ptr));\n continue;\n }\n\n /*\n * Otherwise, the tree is currently in use. Create a parent node for the\n * current root node in the SPLIT state with a right child on the free\n * list. Make sure to reserve the memory for the free list entry before\n * writing to it. Note that we do not need to flip the "is split" flag for\n * our current parent because it\'s already on (we know because we just\n * checked it above).\n */\n right_child = ptr_for_node(root + 1, bucket_limit);\n if (!update_max_ptr(right_child + List.SIZE)) {\n return 0;\n }\n list_push(buckets$get(bucket_limit), changetype(right_child));\n list_init(buckets$get(--bucket_limit));\n\n /*\n * Set the grandparent\'s SPLIT flag so if we need to lower the bucket limit\n * again, we\'ll know that the new root node we just added is in use.\n */\n root = (root - 1) / 2;\n if (root != 0) {\n flip_parent_is_split(root);\n }\n }\n\n return 1;\n}\n\n@global\nexport function allocate_memory(request: usize): usize {\n var original_bucket: usize, bucket: usize;\n\n /*\n * Make sure it\'s possible for an allocation of this size to succeed. There\'s\n * a hard-coded limit on the maximum allocation size because of the way this\n * allocator works.\n */\n if (request + HEADER_SIZE > MAX_ALLOC) {\n return 0;\n }\n\n /*\n * Initialize our global state if this is the first call to "malloc". At the\n * beginning, the tree has a single node that represents the smallest\n * possible allocation size. More memory will be reserved later as needed.\n */\n if (base_ptr == 0) {\n // base_ptr = max_ptr = (uint8_t *)sbrk(0);\n base_ptr = (NODE_IS_SPLIT_END + 7) & ~7; // must be aligned\n max_ptr = current_memory() << 16; // must grow first\n bucket_limit = BUCKET_COUNT - 1;\n if (!update_max_ptr(base_ptr + List.SIZE)) {\n return 0;\n }\n list_init(buckets$get(BUCKET_COUNT - 1));\n list_push(buckets$get(BUCKET_COUNT - 1), changetype(base_ptr));\n }\n\n /*\n * Find the smallest bucket that will fit this request. This doesn\'t check\n * that there\'s space for the request yet.\n */\n bucket = bucket_for_request(request + HEADER_SIZE);\n original_bucket = bucket;\n\n /*\n * Search for a bucket with a non-empty free list that\'s as large or larger\n * than what we need. If there isn\'t an exact match, we\'ll need to split a\n * larger one to get a match.\n */\n while (bucket + 1 != 0) {\n let size: usize, bytes_needed: usize, i: usize;\n let ptr: usize;\n\n /*\n * We may need to grow the tree to be able to fit an allocation of this\n * size. Try to grow the tree and stop here if we can\'t.\n */\n if (!lower_bucket_limit(bucket)) {\n return 0;\n }\n\n /*\n * Try to pop a block off the free list for this bucket. If the free list\n * is empty, we\'re going to have to split a larger block instead.\n */\n ptr = changetype(list_pop(buckets$get(bucket)));\n if (!ptr) {\n /*\n * If we\'re not at the root of the tree or it\'s impossible to grow the\n * tree any more, continue on to the next bucket.\n */\n if (bucket != bucket_limit || bucket == 0) {\n bucket--;\n continue;\n }\n\n /*\n * Otherwise, grow the tree one more level and then pop a block off the\n * free list again. Since we know the root of the tree is used (because\n * the free list was empty), this will add a parent above this node in\n * the SPLIT state and then add the new right child node to the free list\n * for this bucket. Popping the free list will give us this right child.\n */\n if (!lower_bucket_limit(bucket - 1)) {\n return 0;\n }\n ptr = changetype(list_pop(buckets$get(bucket)));\n }\n\n /*\n * Try to expand the address space first before going any further. If we\n * have run out of space, put this block back on the free list and fail.\n */\n size = 1 << (MAX_ALLOC_LOG2 - bucket);\n bytes_needed = bucket < original_bucket ? size / 2 + List.SIZE : size;\n if (!update_max_ptr(ptr + bytes_needed)) {\n list_push(buckets$get(bucket), changetype(ptr));\n return 0;\n }\n\n /*\n * If we got a node off the free list, change the node from UNUSED to USED.\n * This involves flipping our parent\'s "is split" bit because that bit is\n * the exclusive-or of the UNUSED flags of both children, and our UNUSED\n * flag (which isn\'t ever stored explicitly) has just changed.\n *\n * Note that we shouldn\'t ever need to flip the "is split" bit of our\n * grandparent because we know our buddy is USED so it\'s impossible for our\n * grandparent to be UNUSED (if our buddy chunk was UNUSED, our parent\n * wouldn\'t ever have been split in the first place).\n */\n i = node_for_ptr(ptr, bucket);\n if (i != 0) {\n flip_parent_is_split(i);\n }\n\n /*\n * If the node we got is larger than we need, split it down to the correct\n * size and put the new unused child nodes on the free list in the\n * corresponding bucket. This is done by repeatedly moving to the left\n * child, splitting the parent, and then adding the right child to the free\n * list.\n */\n while (bucket < original_bucket) {\n i = i * 2 + 1;\n bucket++;\n flip_parent_is_split(i);\n list_push(\n buckets$get(bucket),\n changetype(ptr_for_node(i + 1, bucket))\n );\n }\n\n /*\n * Now that we have a memory address, write the block header (just the size\n * of the allocation) and return the address immediately after the header.\n */\n store(ptr, request);\n return ptr + HEADER_SIZE;\n }\n\n return 0;\n}\n\n@global\nexport function free_memory(ptr: usize): void {\n var bucket: usize, i: usize;\n\n /*\n * Ignore any attempts to free a NULL pointer.\n */\n if (!ptr) {\n return;\n }\n\n /*\n * We were given the address returned by "malloc" so get back to the actual\n * address of the node by subtracting off the size of the block header. Then\n * look up the index of the node corresponding to this address.\n */\n ptr = ptr - HEADER_SIZE;\n bucket = bucket_for_request(load(ptr) + HEADER_SIZE);\n i = node_for_ptr(ptr, bucket);\n\n /*\n * Traverse up to the root node, flipping USED blocks to UNUSED and merging\n * UNUSED buddies together into a single UNUSED parent.\n */\n while (i != 0) {\n /*\n * Change this node from UNUSED to USED. This involves flipping our\n * parent\'s "is split" bit because that bit is the exclusive-or of the\n * UNUSED flags of both children, and our UNUSED flag (which isn\'t ever\n * stored explicitly) has just changed.\n */\n flip_parent_is_split(i);\n\n /*\n * If the parent is now SPLIT, that means our buddy is USED, so don\'t merge\n * with it. Instead, stop the iteration here and add ourselves to the free\n * list for our bucket.\n *\n * Also stop here if we\'re at the current root node, even if that root node\n * is now UNUSED. Root nodes don\'t have a buddy so we can\'t merge with one.\n */\n if (parent_is_split(i) || bucket == bucket_limit) {\n break;\n }\n\n /*\n * If we get here, we know our buddy is UNUSED. In this case we should\n * merge with that buddy and continue traversing up to the root node. We\n * need to remove the buddy from its free list here but we don\'t need to\n * add the merged parent to its free list yet. That will be done once after\n * this loop is finished.\n */\n list_remove(changetype(ptr_for_node(((i - 1) ^ 1) + 1, bucket)));\n i = (i - 1) / 2;\n bucket--;\n }\n\n /*\n * Add ourselves to the free list for our bucket. We add to the back of the\n * list because "malloc" takes from the back of the list and we want a "free"\n * followed by a "malloc" of the same size to ideally use the same address\n * for better memory locality.\n */\n list_push(buckets$get(bucket), changetype(ptr_for_node(i, bucket)));\n}\n\n@global\nexport function reset_memory(): void {\n unreachable();\n}\n',"(lib)/allocator/common/alignment":"/** Number of alignment bits. */\nexport const BITS: u32 = 3;\n\n/** Number of possible alignment values. */\nexport const SIZE: usize = 1 << BITS;\n\n/** Mask to obtain just the alignment bits. */\nexport const MASK: usize = SIZE - 1;\n","(lib)/allocator/emscripten":"/**\n * @file Emscripten Memory Allocator\n *\n * Uses Emscripten's exported _malloc and _free implementations, i.e., when linking with\n * Emscripten-compiled programs that already provide these. Differs from 'system' in that their\n * names are prefixed with an underscore.\n */\n\ndeclare function _malloc(size: usize): usize;\ndeclare function _free(ptr: usize): void;\n\n@global\nexport function allocate_memory(size: usize): usize {\n return _malloc(size);\n}\n\n@global\nexport function free_memory(ptr: usize): void {\n _free(ptr);\n}\n\n@global\nexport function reset_memory(): void {\n unreachable();\n}\n","(lib)/allocator/system":"/**\n * @file System Memory Allocator\n *\n * Uses the environment's malloc and free implementations, i.e., when linking with other C-like\n * programs that already provide these.\n */\n\ndeclare function malloc(size: usize): usize;\ndeclare function free(ptr: usize): void;\n\n@global\nexport function allocate_memory(size: usize): usize {\n return malloc(size);\n}\n\n@global\nexport function free_memory(ptr: usize): void {\n free(ptr);\n}\n\n@global\nexport function reset_memory(): void {\n unreachable();\n}\n","(lib)/allocator/tlsf":"/**\n * @file Two-Level Segregate Fit Memory Allocator\n *\n * A general purpose dynamic memory allocator specifically designed to meet real-time requirements.\n * Always aligns to 8 bytes.\n */\n\n// ╒══════════════ Block size interpretation (32-bit) ═════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┼─┴─┴─┴─┴─╫─┴─┴─┤\n// │ | FL │ SB = SL + AL │ ◄─ usize\n// └───────────────────────────────────────────────┴─────────╨─────┘\n// FL: first level, SL: second level, AL: alignment, SB: small block\n\nimport {\n BITS as AL_BITS,\n SIZE as AL_SIZE,\n MASK as AL_MASK\n} from \"./common/alignment\";\n\nconst SL_BITS: u32 = 5;\nconst SL_SIZE: usize = 1 << SL_BITS;\n\nconst SB_BITS: usize = (SL_BITS + AL_BITS);\nconst SB_SIZE: usize = 1 << SB_BITS;\n\nconst FL_BITS: u32 = (sizeof() == sizeof()\n ? 30 // ^= up to 1GB per block\n : 32 // ^= up to 4GB per block\n) - SB_BITS;\n\n// ╒════════════════ Block structure layout (32-bit) ══════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┼─┼─┤\n// │ size │L│F│ ◄─┐ info\n// ╞═══════════════════════════════════════════════════════════╧═╧═╡ │ ┐\n// │ if free: ◄ prev │ ◄─┤ usize\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ if free: next ► │ ◄─┤\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ ... unused free space >= 0 ... │ │ = 0\n// ├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤ │\n// │ if free: jump ▲ │ ◄─┘\n// └───────────────────────────────────────────────────────────────┘ MIN SIZE ┘\n// F: FREE, L: LEFT_FREE\n\n/** Tag indicating that this block is free. */\nconst FREE: usize = 1 << 0;\n/** Tag indicating that this block's left block is free. */\nconst LEFT_FREE: usize = 1 << 1;\n/** Mask to obtain all tags. */\nconst TAGS: usize = FREE | LEFT_FREE;\n\n/** Block structure. */\n@unmanaged\nclass Block {\n\n /** Info field holding this block's size and tags. */\n info: usize;\n\n /** End offset of the {@link Block#info} field. User data starts here. */\n static readonly INFO: usize = (sizeof() + AL_MASK) & ~AL_MASK;\n\n /** Previous free block, if any. Only valid if free. */\n prev: Block | null;\n /** Next free block, if any. Only valid if free. */\n next: Block | null;\n\n /** Minimum size of a block, excluding {@link Block#info}. */\n static readonly MIN_SIZE: usize = (3 * sizeof() + AL_MASK) & ~AL_MASK;// prev + next + jump\n\n /** Maximum size of a used block, excluding {@link Block#info}. */\n static readonly MAX_SIZE: usize = 1 << (FL_BITS + SB_BITS);\n\n /** Gets this block's left (free) block in memory. */\n get left(): Block {\n assert(this.info & LEFT_FREE); // must be free to contain a jump\n return assert(\n load(changetype(this) - sizeof())\n ); // can't be null\n }\n\n /** Gets this block's right block in memory. */\n get right(): Block {\n assert(this.info & ~TAGS); // can't skip beyond the tail block\n return assert(\n changetype(\n changetype(this) + Block.INFO + (this.info & ~TAGS)\n )\n ); // can't be null\n }\n}\n\n// ╒════════════════ Root structure layout (32-bit) ═══════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┤ ┐\n// │ 0 | flMap S│ ◄────┐\n// ╞═══════════════════════════════════════════════════════════════╡ │\n// │ slMap[0] S │ ◄─┐ │\n// ├───────────────────────────────────────────────────────────────┤ │ │\n// │ slMap[1] │ ◄─┤ │\n// ├───────────────────────────────────────────────────────────────┤ u32 │\n// │ ... │ ◄─┤ │\n// ├───────────────────────────────────────────────────────────────┤ │ │\n// │ slMap[22] P │ ◄─┘ │\n// ╞═══════════════════════════════════════════════════════════════╡ usize\n// │ head[0] │ ◄────┤\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ ... │ ◄────┤\n// ├───────────────────────────────────────────────────────────────┤ │\n// │ head[736] │ ◄────┤\n// ╞═══════════════════════════════════════════════════════════════╡ │\n// │ tailRef │ ◄────┘\n// └───────────────────────────────────────────────────────────────┘ SIZE ┘\n// S: Small blocks map, P: Possibly padded if 64-bit\n\nassert((1 << SL_BITS) <= 32); // second level must fit into 32 bits\n\n/** Root structure. */\n@unmanaged\nclass Root {\n\n /** First level bitmap. */\n flMap: usize = 0;\n\n /** Start offset of second level maps. */\n private static readonly SL_START: usize = sizeof();\n\n // Using *one* SL map per *FL bit*\n\n /** Gets the second level map for the specified first level. */\n getSLMap(fl: usize): u32 {\n assert(fl < FL_BITS); // fl out of range\n return load(changetype(this) + fl * 4, Root.SL_START);\n }\n\n /** Sets the second level map for the specified first level. */\n setSLMap(fl: usize, value: u32): void {\n assert(fl < FL_BITS); // fl out of range\n store(changetype(this) + fl * 4, value, Root.SL_START);\n }\n\n /** End offset of second level maps. */\n private static readonly SL_END: usize = Root.SL_START + FL_BITS * 4;\n\n // Using *number bits per SL* heads per *FL bit*\n\n /** Start offset of FL/SL heads. */\n private static readonly HL_START: usize = (Root.SL_END + AL_MASK) & ~AL_MASK;\n\n /** Gets the head of the specified first and second level index. */\n getHead(fl: usize, sl: u32): Block | null {\n assert(fl < FL_BITS); // fl out of range\n assert(sl < SL_SIZE); // sl out of range\n return changetype(load(\n changetype(this) + (fl * SL_SIZE + sl) * sizeof()\n , Root.HL_START));\n }\n\n /** Sets the head of the specified first and second level index. */\n setHead(fl: usize, sl: u32, value: Block | null): void {\n assert(fl < FL_BITS); // fl out of range\n assert(sl < SL_SIZE); // sl out of range\n store(\n changetype(this) + (fl * SL_SIZE + sl) * sizeof()\n , changetype(value)\n , Root.HL_START);\n }\n\n /** End offset of FL/SL heads. */\n private static readonly HL_END: usize = (\n Root.HL_START + FL_BITS * SL_SIZE * sizeof()\n );\n\n get tailRef(): usize { return load(0, Root.HL_END); }\n set tailRef(value: usize) { store(0, value, Root.HL_END); }\n\n /** Total size of the {@link Root} structure. */\n static readonly SIZE: usize = Root.HL_END + sizeof();\n\n /** Inserts a previously used block back into the free list. */\n insert(block: Block): void {\n // check as much as possible here to prevent invalid free blocks\n assert(block); // cannot be null\n var blockInfo = block.info;\n assert(blockInfo & FREE); // must be free\n var size: usize;\n assert(\n (size = block.info & ~TAGS) >= Block.MIN_SIZE && size < Block.MAX_SIZE\n ); // must be valid, not necessary to compute yet if noAssert=true\n\n var right: Block = assert(block.right); // can't be null\n var rightInfo = right.info;\n\n // merge with right block if also free\n if (rightInfo & FREE) {\n this.remove(right);\n block.info = (blockInfo += Block.INFO + (rightInfo & ~TAGS));\n right = block.right;\n rightInfo = right.info;\n // jump is set below\n }\n\n // merge with left block if also free\n if (blockInfo & LEFT_FREE) {\n let left: Block = assert(block.left); // can't be null\n let leftInfo = left.info;\n assert(leftInfo & FREE); // must be free according to tags\n this.remove(left);\n left.info = (leftInfo += Block.INFO + (blockInfo & ~TAGS));\n block = left;\n blockInfo = leftInfo;\n // jump is set below\n }\n\n right.info = rightInfo | LEFT_FREE;\n this.setJump(block, right);\n // right is no longer used now, hence rightInfo is not synced\n\n size = blockInfo & ~TAGS;\n assert(size >= Block.MIN_SIZE && size < Block.MAX_SIZE); // must be valid\n\n // mapping_insert\n var fl: usize, sl: u32;\n if (size < SB_SIZE) {\n fl = 0;\n sl = (size / AL_SIZE);\n } else {\n fl = fls(size);\n sl = ((size >> (fl - SL_BITS)) ^ (1 << SL_BITS));\n fl -= SB_BITS - 1;\n }\n\n // perform insertion\n var head = this.getHead(fl, sl);\n block.prev = null;\n block.next = head;\n if (head) head.prev = block;\n this.setHead(fl, sl, block);\n\n // update first and second level maps\n this.flMap |= (1 << fl);\n this.setSLMap(fl, this.getSLMap(fl) | (1 << sl));\n }\n\n /**\n * Removes a free block from FL/SL maps. Does not alter left/jump because it\n * is likely that splitting is performed afterwards, invalidating any changes\n * again.\n */\n private remove(block: Block): void {\n var blockInfo = block.info;\n assert(blockInfo & FREE); // must be free\n var size = blockInfo & ~TAGS;\n assert(size >= Block.MIN_SIZE && size < Block.MAX_SIZE); // must be valid\n\n // mapping_insert\n var fl: usize, sl: u32;\n if (size < SB_SIZE) {\n fl = 0;\n sl = (size / AL_SIZE);\n } else {\n fl = fls(size);\n sl = ((size >> (fl - SL_BITS)) ^ (1 << SL_BITS));\n fl -= SB_BITS - 1;\n }\n\n // link previous and next free block\n var prev = block.prev;\n var next = block.next;\n if (prev) prev.next = next;\n if (next) next.prev = prev;\n\n // update head if we are removing it\n if (block == this.getHead(fl, sl)) {\n this.setHead(fl, sl, next);\n\n // clear second level map if head is empty now\n if (!next) {\n let slMap = this.getSLMap(fl);\n this.setSLMap(fl, slMap &= ~(1 << sl));\n\n // clear first level map if second level is empty now\n if (!slMap) this.flMap &= ~(1 << fl);\n }\n }\n }\n\n /** Searches for a free block of at least the specified size. */\n search(size: usize): Block | null {\n assert(size >= Block.MIN_SIZE && size < Block.MAX_SIZE);\n\n // mapping_search\n var fl: usize, sl: u32;\n if (size < SB_SIZE) {\n fl = 0;\n sl = (size / AL_SIZE);\n } else {\n // (*) size += (1 << (fls(size) - SL_BITS)) - 1;\n fl = fls(size);\n sl = ((size >> (fl - SL_BITS)) ^ (1 << SL_BITS));\n fl -= SB_BITS - 1;\n // (*) instead of rounding up, use next second level list for better fit\n if (sl < SL_SIZE - 1) ++sl;\n else ++fl, sl = 0;\n }\n\n // search second level\n var slMap = this.getSLMap(fl) & (~0 << sl);\n var head: Block | null;\n if (!slMap) {\n // search next larger first level\n let flMap = this.flMap & (~0 << (fl + 1));\n if (!flMap) {\n head = null;\n } else {\n fl = ffs(flMap);\n slMap = assert(this.getSLMap(fl)); // can't be zero if fl points here\n head = this.getHead(fl, ffs(slMap));\n }\n } else {\n head = this.getHead(fl, ffs(slMap));\n }\n return head;\n }\n\n /** Links a free left with its right block in memory. */\n private setJump(left: Block, right: Block): void {\n assert(left.info & FREE); // must be free\n assert(left.right == right); // right block must match\n assert(right.info & LEFT_FREE); // right block must be tagged as LEFT_FREE\n store(\n changetype(right) - sizeof()\n , left); // last word in left block's (free) data region\n }\n\n /**\n * Uses the specified free block, removing it from internal maps and\n * splitting it if possible, and returns its data pointer.\n */\n use(block: Block, size: usize): usize {\n var blockInfo = block.info;\n assert(blockInfo & FREE); // must be free so we can use it\n assert(size >= Block.MIN_SIZE && size < Block.MAX_SIZE); // must be valid\n assert(!(size & AL_MASK)); // size must be aligned so the new block is\n\n this.remove(block);\n\n // split if the block can hold another MIN_SIZE block\n var remaining = (blockInfo & ~TAGS) - size;\n if (remaining >= Block.INFO + Block.MIN_SIZE) {\n block.info = size | (blockInfo & LEFT_FREE); // also discards FREE\n\n let spare = changetype(\n changetype(block) + Block.INFO + size\n );\n spare.info = (remaining - Block.INFO) | FREE; // not LEFT_FREE\n this.insert(spare); // also sets jump\n\n // otherwise tag block as no longer FREE and right as no longer LEFT_FREE\n } else {\n block.info = blockInfo & ~FREE;\n let right: Block = assert(block.right); // can't be null (tail)\n right.info &= ~LEFT_FREE;\n }\n\n return changetype(block) + Block.INFO;\n }\n\n /** Adds more memory to the pool. */\n addMemory(start: usize, end: usize): bool {\n assert(start <= end);\n assert(!(start & AL_MASK)); // must be aligned\n assert(!(end & AL_MASK)); // must be aligned\n\n var tailRef = this.tailRef;\n var tailInfo: usize = 0;\n if (tailRef) {\n assert(start >= tailRef + sizeof()); // starts after tail\n\n // merge with current tail if adjacent\n if (start - Block.INFO == tailRef) {\n start -= Block.INFO;\n tailInfo = changetype(tailRef).info;\n }\n\n } else {\n assert(start >= changetype(this) + Root.SIZE); // starts after root\n }\n\n // check if size is large enough for a free block and the tail block\n var size = end - start;\n if (size < Block.INFO + Block.MIN_SIZE + Block.INFO) {\n return false;\n }\n\n // left size is total minus its own and the zero-length tail's header\n var leftSize = size - 2 * Block.INFO;\n var left = changetype(start);\n left.info = leftSize | FREE | (tailInfo & LEFT_FREE);\n left.prev = null;\n left.next = null;\n\n // tail is a zero-length used block\n var tail = changetype(start + size - Block.INFO);\n tail.info = 0 | LEFT_FREE;\n this.tailRef = changetype(tail);\n\n this.insert(left); // also merges with free left before tail / sets jump\n\n return true;\n }\n}\n\n/** Determines the first (LSB to MSB) set bit's index of a word. */\nfunction ffs(word: T): T {\n assert(word != 0); // word cannot be 0\n return ctz(word); // differs from ffs only for 0\n}\n\n/** Determines the last (LSB to MSB) set bit's index of a word. */\nfunction fls(word: T): T {\n assert(word != 0); // word cannot be 0\n const inv: T = (sizeof() << 3) - 1;\n return inv - clz(word);\n}\n\n/** Reference to the initialized {@link Root} structure, once initialized. */\nvar ROOT: Root = changetype(0);\n\n// External interface\n\n/** Allocates a chunk of memory. */\n@global\nexport function allocate_memory(size: usize): usize {\n\n // initialize if necessary\n var root = ROOT;\n if (!root) {\n let rootOffset = (HEAP_BASE + AL_MASK) & ~AL_MASK;\n ROOT = root = changetype(rootOffset);\n root.tailRef = 0;\n root.flMap = 0;\n for (let fl: usize = 0; fl < FL_BITS; ++fl) {\n root.setSLMap(fl, 0);\n for (let sl: u32 = 0; sl < SL_SIZE; ++sl) {\n root.setHead(fl, sl, null);\n }\n }\n root.addMemory((rootOffset + Root.SIZE + AL_MASK) & ~AL_MASK, current_memory() << 16);\n }\n\n // search for a suitable block\n var data: usize = 0;\n if (size && size < Block.MAX_SIZE) {\n size = max((size + AL_MASK) & ~AL_MASK, Block.MIN_SIZE);\n\n let block = root.search(size);\n if (!block) {\n\n // request more memory\n let pagesBefore = current_memory();\n let pagesNeeded = ((size + 0xffff) & ~0xffff) >>> 16;\n let pagesWanted = max(pagesBefore, pagesNeeded); // double memory\n if (grow_memory(pagesWanted) < 0) {\n if (grow_memory(pagesNeeded) < 0) {\n unreachable(); // out of memory\n }\n }\n let pagesAfter = current_memory();\n root.addMemory(pagesBefore << 16, pagesAfter << 16);\n block = assert(root.search(size)); // must be found now\n }\n\n assert((block.info & ~TAGS) >= size);\n data = root.use(block, size);\n }\n\n return data;\n}\n\n/** Frees the chunk of memory at the specified address. */\n@global\nexport function free_memory(data: usize): void {\n if (data) {\n let root = ROOT;\n if (root) {\n let block = changetype(data - Block.INFO);\n let blockInfo = block.info;\n assert(!(blockInfo & FREE)); // must be used\n block.info = blockInfo | FREE;\n root.insert(changetype(data - Block.INFO));\n }\n }\n}\n\n@global\nexport function reset_memory(): void {\n unreachable();\n}\n","(lib)/array":'export class Array {\n\n private __memory: usize;\n private __capacity: i32; // capped to [0, 0x7fffffff]\n private __length: i32; // capped to [0, __capacity]\n\n private __grow(newCapacity: i32): void {\n assert(newCapacity > this.__capacity);\n var newMemory = allocate_memory(newCapacity * sizeof());\n if (this.__memory) {\n move_memory(newMemory, this.__memory, this.__capacity * sizeof());\n free_memory(this.__memory);\n }\n this.__memory = newMemory;\n this.__capacity = newCapacity;\n }\n\n constructor(capacity: i32 = 0) {\n if (capacity < 0) {\n throw new RangeError("Invalid array length");\n }\n this.__memory = capacity\n ? allocate_memory(capacity * sizeof())\n : 0;\n this.__capacity = this.__length = capacity;\n }\n\n get length(): i32 {\n return this.__length;\n }\n\n set length(length: i32) {\n if (length < 0) {\n throw new RangeError("Invalid array length");\n }\n if (length > this.__capacity) {\n this.__grow(max(length, this.__capacity << 1));\n }\n this.__length = length;\n }\n\n @operator("[]")\n private __get(index: i32): T {\n if (index >= this.__capacity) {\n throw new Error("Index out of bounds"); // return changetype(0) ?\n }\n return load(this.__memory + index * sizeof());\n }\n\n @operator("[]=")\n private __set(index: i32, value: T): void {\n if (index < 0) {\n throw new Error("Index out of bounds");\n }\n if (index >= this.__capacity) {\n this.__grow(max(index + 1, this.__capacity << 1));\n }\n store(this.__memory + index * sizeof(), value);\n }\n\n indexOf(searchElement: T, fromIndex: i32 = 0): i32 {\n if (fromIndex < 0) {\n fromIndex = this.__length + fromIndex;\n }\n while (fromIndex < this.__length) {\n if (load(this.__memory + fromIndex * sizeof()) == searchElement) {\n return fromIndex;\n }\n ++fromIndex;\n }\n return -1;\n }\n\n lastIndexOf(searchElement: T, fromIndex: i32 = 0): i32 {\n if (fromIndex < 0) {\n fromIndex = this.__length + fromIndex;\n } else if (fromIndex >= this.__length) {\n fromIndex = this.__length - 1;\n }\n while (fromIndex >= 0) {\n if (load(this.__memory + fromIndex * sizeof()) == searchElement) {\n return fromIndex;\n }\n --fromIndex;\n }\n return -1;\n }\n\n push(element: T): i32 {\n if (this.__length == this.__capacity) {\n this.__grow(this.__capacity ? this.__capacity << 1 : 1);\n }\n store(this.__memory + this.__length * sizeof(), element);\n return ++this.__length;\n }\n\n pop(): T {\n if (this.__length < 1) {\n throw new RangeError("Array is empty"); // return changetype(0) ?\n }\n return load(this.__memory + --this.__length * sizeof());\n }\n\n shift(): T {\n if (this.__length < 1) {\n throw new RangeError("Array is empty"); // return changetype(0) ?\n }\n var element = load(this.__memory);\n move_memory(\n this.__memory,\n this.__memory + sizeof(),\n (this.__capacity - 1) * sizeof()\n );\n set_memory(\n this.__memory + (this.__capacity - 1) * sizeof(),\n 0,\n sizeof()\n );\n --this.__length;\n return element;\n }\n\n unshift(element: T): i32 {\n var oldCapacity = this.__capacity;\n if (this.__length == oldCapacity) {\n // inlined __grow (avoids moving twice)\n let newCapacity: i32 = oldCapacity ? oldCapacity << 1 : 1;\n assert(newCapacity > this.__capacity);\n let newMemory = allocate_memory(newCapacity * sizeof());\n if (this.__memory) {\n move_memory(\n newMemory + sizeof(),\n this.__memory,\n oldCapacity * sizeof()\n );\n free_memory(this.__memory);\n }\n this.__memory = newMemory;\n this.__capacity = newCapacity;\n } else {\n move_memory(\n this.__memory + sizeof(),\n this.__memory,\n oldCapacity * sizeof()\n );\n }\n store(this.__memory, element);\n return ++this.__length;\n }\n\n slice(begin: i32 = 0, end: i32 = i32.MAX_VALUE): Array {\n if (begin < 0) {\n begin = this.__length + begin;\n if (begin < 0) {\n begin = 0;\n }\n } else if (begin > this.__length) {\n begin = this.__length;\n }\n if (end < 0) {\n end = this.__length + end;\n } else if (end > this.__length) {\n end = this.__length;\n }\n if (end < begin) {\n end = begin;\n }\n var capacity = end - begin;\n assert(capacity >= 0);\n var sliced = new Array(capacity);\n if (capacity) {\n move_memory(\n sliced.__memory,\n this.__memory + begin * sizeof(),\n capacity * sizeof()\n );\n }\n return sliced;\n }\n\n splice(start: i32, deleteCount: i32 = i32.MAX_VALUE): void {\n if (deleteCount < 1) {\n return;\n }\n if (start < 0) {\n start = this.__length + start;\n if (start < 0) {\n start = 0;\n } else if (start >= this.__length) {\n return;\n }\n } else if (start >= this.__length) {\n return;\n }\n deleteCount = min(deleteCount, this.__length - start);\n move_memory(\n this.__memory + start * sizeof(),\n this.__memory + (start + deleteCount) * sizeof(),\n deleteCount * sizeof()\n );\n this.__length -= deleteCount;\n }\n\n reverse(): Array {\n for (let front: usize = 0, back: usize = this.__length - 1; front < back; ++front, --back) {\n let temp = load(this.__memory + front * sizeof());\n store(this.__memory + front * sizeof(), load(this.__memory + back * sizeof()));\n store(this.__memory + back * sizeof(), temp);\n }\n return this;\n }\n}\n\n@unmanaged\nexport class CArray {\n\n private constructor() {}\n\n @operator("[]")\n private __get(index: i32): T {\n if (index < 0) {\n throw new RangeError("Index out of range");\n }\n return load(changetype(this) + index * sizeof());\n }\n\n @operator("[]=")\n private __set(index: i32, value: T): void {\n if (index < 0) {\n throw new RangeError("Index out of range");\n }\n store(changetype(this) + index * sizeof(), value);\n }\n}\n',"(lib)/builtins":"@builtin\nexport declare const NaN: f64; // | f32\n\n@builtin\nexport declare const Infinity: f64; // | f32\n\n@builtin\nexport declare function isNaN(value: T): bool;\n\n@builtin\nexport declare function isFinite(value: T): bool;\n\n@builtin\nexport declare function clz(value: T): T;\n\n@builtin\nexport declare function ctz(value: T): T;\n\n@builtin\nexport declare function popcnt(value: T): T;\n\n@builtin\nexport declare function rotl(value: T, shift: T): T;\n\n@builtin\nexport declare function rotr(value: T, shift: T): T;\n\n@builtin\nexport declare function abs(value: T): T;\n\n@builtin\nexport declare function max(left: T, right: T): T;\n\n@builtin\nexport declare function min(left: T, right: T): T;\n\n@builtin\nexport declare function ceil(value: T): T;\n\n@builtin\nexport declare function floor(value: T): T;\n\n@builtin\nexport declare function copysign(left: T, right: T): T;\n\n@builtin\nexport declare function nearest(left: T, right: T): T;\n\n@builtin\nexport declare function reinterpret(value: void): T;\n\n@builtin\nexport declare function sqrt(value: T): T;\n\n@builtin\nexport declare function trunc(value: T): T;\n\n@builtin\nexport declare function load(offset: usize, constantOffset?: usize): T;\n\n@builtin\nexport declare function store(offset: usize, value: void, constantOffset?: usize): T;\n\n@builtin\nexport declare function sizeof(): usize;\n\n@builtin\nexport declare function select(ifTrue: T, ifFalse: T, condition: bool): T;\n\n@builtin\nexport declare function unreachable(): void;\n\n@builtin\nexport declare function current_memory(): i32;\n\n@builtin\nexport declare function grow_memory(pages: i32): i32;\n\n// @builtin\n// export declare function move_memory(dest: usize, src: usize: n: usize): void;\n\n// @builtin\n// export declare function set_memory(dest: usize, value: u32, n: usize): void;\n\n@builtin\nexport declare function changetype(value: void): T;\n\n@builtin\nexport declare function assert(isTrueish: T, message?: string): T;\n\n@builtin\nexport declare function abort(\n message?: string | null,\n fileName?: string | null,\n lineNumber?: u32,\n columnNumber?: u32\n): void;\n\n@builtin\ndeclare function i8(value: void): i8;\nnamespace i8 {\n export const MIN_VALUE: i8 = -128;\n export const MAX_VALUE: i8 = 127;\n}\nexport { i8 };\n\n@builtin\ndeclare function i16(value: void): i16;\nnamespace i16 {\n export const MIN_VALUE: i16 = -32768;\n export const MAX_VALUE: i16 = 32767;\n}\nexport { i16 };\n\n@builtin\ndeclare function i32(value: void): i32;\nnamespace i32 {\n export const MIN_VALUE: i32 = -2147483648;\n export const MAX_VALUE: i32 = 2147483647;\n}\nexport { i32 };\n\n@builtin\ndeclare function i64(value: void): i64;\nnamespace i64 {\n export const MIN_VALUE: i64 = -9223372036854775808;\n export const MAX_VALUE: i64 = 9223372036854775807;\n}\nexport { i64 };\n\n@builtin\ndeclare function isize(value: void): isize;\nnamespace isize {\n export const MIN_VALUE: isize = sizeof() == sizeof()\n ? -2147483648\n : -9223372036854775808;\n export const MAX_VALUE: isize = sizeof() == sizeof()\n ? 2147483647\n : 9223372036854775807;\n}\nexport { isize };\n\n@builtin\ndeclare function u8(value: void): u8;\nnamespace u8 {\n export const MIN_VALUE: u8 = 0;\n export const MAX_VALUE: u8 = 255;\n}\nexport { u8 };\n\n@builtin\ndeclare function u16(value: void): u16;\nnamespace u16 {\n export const MIN_VALUE: u16 = 0;\n export const MAX_VALUE: u16 = 65535;\n}\nexport { u16 };\n\n@builtin\ndeclare function u32(value: void): u32;\nnamespace u32 {\n export const MIN_VALUE: u32 = 0;\n export const MAX_VALUE: u32 = 4294967295;\n}\nexport { u32 };\n\n@builtin\ndeclare function u64(value: void): u64;\nnamespace u64 {\n export const MIN_VALUE: u64 = 0;\n export const MAX_VALUE: u64 = 18446744073709551615;\n}\nexport { u64 };\n\n@builtin\ndeclare function usize(value: void): usize;\nnamespace usize {\n export const MIN_VALUE: usize = 0;\n export const MAX_VALUE: usize = sizeof() == sizeof()\n ? 4294967295\n : 18446744073709551615;\n}\nexport { usize };\n\n@builtin\ndeclare function bool(value: void): bool;\nnamespace bool {\n export const MIN_VALUE: bool = false;\n export const MAX_VALUE: bool = true;\n}\nexport { bool };\n\n@builtin\ndeclare function f32(value: void): f32;\nnamespace f32 {\n export const MIN_VALUE: f32 = -3.40282347e+38;\n export const MAX_VALUE: f32 = 3.40282347e+38;\n export const MIN_SAFE_INTEGER: f32 = -16777215;\n export const MAX_SAFE_INTEGER: f32 = 16777215;\n export const EPSILON: f32 = 1.19209290e-07;\n}\nexport { f32 };\n\n@builtin\ndeclare function f64(value: void): f64;\nnamespace f64 {\n export const MIN_VALUE: f64 = -1.7976931348623157e+308;\n export const MAX_VALUE: f64 = 1.7976931348623157e+308;\n export const MIN_SAFE_INTEGER: f64 = -9007199254740991;\n export const MAX_SAFE_INTEGER: f64 = 9007199254740991;\n export const EPSILON: f64 = 2.2204460492503131e-16;\n}\nexport{ f64 };\n\n@builtin\nexport declare const HEAP_BASE: usize;\n\n@builtin\nexport declare function start(): void;\n","(lib)/collector/itcm":'/**\n * @file Incremental Tri-Color-Marking Garbage Collector\n */\n\n// TODO: Generations?\n\nimport { MASK as AL_MASK } from "../allocator/common/alignment";\n\n// ╒════════════════ Object header layout (32-bit) ════════════════╕\n// 3 2 1\n// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 bits\n// ├─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┼─┴─┤ ┐\n// │ next │ C │ ◄─┐ = nextWithColor\n// ├───────────────────────────────────────────────────────────┴───┤ │ usize\n// │ prev │ ◄─┘\n// ╞═══════════════════════════════════════════════════════════════╡ SIZE ┘\n// │ ... data ... │\n// └───────────────────────────────────────────────────────────────┘\n// C: color\n\n@unmanaged\nclass ObjectHeader {\n\n /** Pointer to the next object with additional tags stored in the alignment bits. */\n taggedNext: usize;\n\n /** Pointer to the previous object. */\n prev: ObjectHeader;\n\n /** Visitor function. */\n visitFn: (obj: ObjectHeader) => void;\n\n /** Release function. */\n releaseFn: (obj: ObjectHeader) => void;\n\n // NOTE that visitFn and releaseFn take 4 bytes each in memory. Storing both doesn\'t matter\n // because alignment must be retained at 8 bytes anyway.\n\n static readonly SIZE: usize = (2 * sizeof() + 2 * sizeof() + AL_MASK) & ~AL_MASK;\n\n /** Gets the pointer to the next object in the list. */\n get next(): ObjectHeader {\n return changetype(this.taggedNext & ~AL_MASK);\n }\n\n /** Sets the pointer to the next object in the list. */\n set next(obj: ObjectHeader) {\n this.taggedNext = changetype(obj) | (this.taggedNext & AL_MASK);\n }\n\n /** Inserts an object to this list. */\n insert(obj: ObjectHeader): void {\n var prev = this.prev;\n obj.next = this;\n obj.prev = prev;\n prev.next = obj;\n this.prev = obj;\n }\n\n /** Removes this object from its list. */\n remove(): void {\n var next = this.next;\n var prev = this.prev;\n next.prev = prev;\n prev.next = next;\n }\n\n /** Tests if this object is white, this is unreachable (so far). */\n get isWhite(): bool {\n return (this.taggedNext & Color.MASK) == Color.WHITE;\n }\n\n /** Marks this object as white, that is unreachable (so far). */\n makeWhite(): void {\n this.taggedNext = (this.taggedNext & ~Color.MASK) | Color.WHITE;\n }\n\n /** Tests if this object is black, that is reachable. */\n get isBlack(): bool {\n return (this.taggedNext & Color.MASK) == Color.BLACK;\n }\n\n /** Marks this object as black, that is reachable. */\n makeBlack(): void {\n this.taggedNext = (this.taggedNext & ~Color.MASK) | Color.BLACK;\n }\n\n /** Tests if this object is gray, that is reachable with unscanned children. */\n get isGray(): bool {\n return (this.taggedNext & Color.MASK) == Color.GRAY;\n }\n\n /** Marks this object as gray, that is reachable with unscanned children. */\n makeGray(): void {\n if (this != iter) {\n this.remove();\n to.insert(this);\n } else {\n iter = iter.prev;\n }\n this.taggedNext = (this.taggedNext & ~Color.MASK) | Color.GRAY;\n }\n}\n\n/** Object colors. */\nnamespace Color {\n /** Object is unreachable (so far). */\n export var WHITE = 0;\n /** Object is reachable. */\n export var BLACK = 1;\n /** Object is reachable but its children have not yet been scanned. */\n export const GRAY = 2;\n\n /** Mask to obtain just the color bits. */\n export const MASK = 3;\n}\n\n/** Collector states. */\nconst enum State {\n /** Not yet initialized. */\n INIT = 0,\n /** Currently transitioning from SWEEP to MARK states. */\n IDLE = 1,\n /** Currently marking reachable objects. */\n MARK = 2,\n /** Currently sweeping unreachable objects. */\n SWEEP = 3\n}\n\n/** Current collector state. */\nvar state = State.INIT;\n\n// From and to spaces\n\nvar from: ObjectHeader;\nvar to: ObjectHeader;\nvar iter: ObjectHeader;\n\n/** Performs a single step according to the current state. */\nfunction gc_step(): void {\n var obj: ObjectHeader;\n switch (state) {\n case State.INIT: {\n from = changetype(allocate_memory(ObjectHeader.SIZE));\n from.taggedNext = changetype(from);\n from.prev = from;\n to = changetype(allocate_memory(ObjectHeader.SIZE));\n to.taggedNext = changetype(to);\n to.prev = to;\n iter = to;\n // fall-through\n }\n case State.IDLE: {\n state = State.MARK;\n break;\n }\n case State.MARK: {\n obj = iter.next;\n if (obj != to) {\n iter = obj;\n obj.makeBlack();\n obj.visitFn(obj);\n } else {\n obj = iter.next;\n if (obj == to) {\n let temp = from;\n from = to;\n to = temp;\n Color.WHITE ^= 1;\n Color.BLACK ^= 1;\n iter = from.next;\n state = State.SWEEP;\n }\n }\n break;\n }\n case State.SWEEP: {\n obj = iter;\n if (obj != to) {\n iter = obj.next;\n obj.releaseFn(obj);\n } else {\n to.taggedNext = changetype(to);\n to.prev = to;\n state = State.IDLE;\n }\n break;\n }\n }\n}\n\n/** Allocates a managed object. */\n@global\nfunction gc_allocate(\n size: usize,\n visitFn: (obj: ObjectHeader) => void,\n releaseFn: (obj: ObjectHeader) => void\n): usize {\n var obj = changetype(allocate_memory(ObjectHeader.SIZE + size));\n obj.makeWhite();\n obj.visitFn = visitFn;\n obj.releaseFn = releaseFn;\n from.insert(obj);\n return changetype(obj) + ObjectHeader.SIZE;\n}\n\n/** Visits a reachable object. Called from the visitFn functions. */\n@global\nfunction gc_visit(obj: ObjectHeader): void {\n if (state == State.SWEEP) return;\n if (obj.isWhite) {\n obj.makeGray();\n }\n}\n\n/** Registers a managed child object with its parent object. */\n@global\nfunction gc_register(parent: ObjectHeader, child: ObjectHeader): void {\n if (parent.isBlack && child.isWhite) {\n parent.makeGray();\n }\n}\n\n/** Iterates the root set. Provided by the compiler according to the program. */\n@global\ndeclare function gc_roots(): void;\n\n/** Performs a full garbage collection cycle. */\n@global\nfunction gc_collect(): void {\n // begin collecting if not yet collecting\n switch (state) {\n case State.INIT:\n case State.IDLE: gc_step();\n }\n // finish the cycle\n while (state != State.IDLE) {\n gc_step();\n }\n}\n\ndeclare function allocate_memory(size: usize): usize;\n',"(lib)/error":'export class Error {\n\n name: string = "Error";\n message: string;\n stack: string = ""; // TODO\n\n constructor(message: string = "") {\n this.message = message;\n }\n}\n\nexport class RangeError extends Error {\n name: string = "RangeError";\n}\n\nexport class TypeError extends Error {\n name: string = "TypeError";\n}\n',"(lib)/iterator":"// export abstract class Iterator {\n// abstract get done(): bool;\n// abstract next(): T;\n// }\n","(lib)/map":"export class Map {\n\n private __keys: K[] = [];\n private __values: V[] = [];\n\n // FIXME: not a proper map implementation, just a filler\n\n get size(): i32 {\n return this.__keys.length;\n }\n\n get(key: K): V | null {\n var keys = this.__keys;\n for (let i = 0, k = keys.length; i < k; ++i) {\n if (keys[i] == key) {\n return this.__values[i];\n }\n }\n return null;\n }\n\n has(key: K): bool {\n var keys = this.__keys;\n for (let i = 0, k = keys.length; i < k; ++i) {\n if (keys[i] == key) {\n return true;\n }\n }\n return false;\n }\n\n set(key: K, value: V): void {\n this.__keys.push(key);\n this.__values.push(value);\n }\n\n clear(): void {\n this.__keys.length = 0;\n this.__values.length = 0;\n }\n}\n","(lib)/memory":"function copy_memory(dest: usize, src: usize, n: usize): void {\n // based on musl's implementation of memcpy\n // not a future instruction and sufficiently covered by the upcoming move_memory intrinsic\n\n var w: u32, x: u32;\n\n // copy 1 byte each until src is aligned to 4 bytes\n while (n && (src & 3)) {\n store(dest++, load(src++));\n n--;\n }\n\n // if dst is aligned to 4 bytes as well, copy 4 bytes each\n if ((dest & 3) == 0) {\n while (n >= 16) {\n store(dest , load(src ));\n store(dest + 4, load(src + 4));\n store(dest + 8, load(src + 8));\n store(dest + 12, load(src + 12));\n src += 16; dest += 16; n -= 16;\n }\n if (n & 8) {\n store(dest , load(src ));\n store(dest + 4, load(src + 4));\n dest += 8; src += 8;\n }\n if (n & 4) {\n store(dest, load(src));\n dest += 4; src += 4;\n }\n if (n & 2) { // drop to 2 bytes each\n store(dest, load(src));\n dest += 2; src += 2;\n }\n if (n & 1) { // drop to 1 byte\n store(dest++, load(src++));\n }\n return;\n }\n\n // if dst is not aligned to 4 bytes, use alternating shifts to copy 4 bytes each\n // doing shifts if faster when copying enough bytes (here: 32 or more)\n if (n >= 32) {\n switch (dest & 3) {\n // known to be != 0\n case 1: {\n w = load(src);\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n n -= 3;\n while (n >= 17) {\n x = load(src + 1);\n store(dest, w >> 24 | x << 8);\n w = load(src + 5);\n store(dest + 4, x >> 24 | w << 8);\n x = load(src + 9);\n store(dest + 8, w >> 24 | x << 8);\n w = load(src + 13);\n store(dest + 12, x >> 24 | w << 8);\n src += 16; dest += 16; n -= 16;\n }\n break;\n }\n case 2: {\n w = load(src);\n store(dest++, load(src++));\n store(dest++, load(src++));\n n -= 2;\n while (n >= 18) {\n x = load(src + 2);\n store(dest, w >> 16 | x << 16);\n w = load(src + 6);\n store(dest + 4, x >> 16 | w << 16);\n x = load(src + 10);\n store(dest + 8, w >> 16 | x << 16);\n w = load(src + 14);\n store(dest + 12, x >> 16 | w << 16);\n src += 16; dest += 16; n -= 16;\n }\n break;\n }\n case 3: {\n w = load(src);\n store(dest++, load(src++));\n n -= 1;\n while (n >= 19) {\n x = load(src + 3);\n store(dest, w >> 8 | x << 24);\n w = load(src + 7);\n store(dest + 4, x >> 8 | w << 24);\n x = load(src + 11);\n store(dest + 8, w >> 8 | x << 24);\n w = load(src + 15);\n store(dest + 12, x >> 8 | w << 24);\n src += 16; dest += 16; n -= 16;\n }\n break;\n }\n }\n }\n\n // copy remaining bytes one by one\n if (n & 16) {\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n }\n if (n & 8) {\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n }\n if (n & 4) {\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n store(dest++, load(src++));\n }\n if (n & 2) {\n store(dest++, load(src++));\n store(dest++, load(src++));\n }\n if (n & 1) {\n store(dest++, load(src++));\n }\n}\n\nexport function move_memory(dest: usize, src: usize, n: usize): void {\n // based on musl's implementation of memmove\n // becomes obsolete once https://github.com/WebAssembly/bulk-memory-operations lands\n\n if (dest == src) return;\n if (src + n <= dest || dest + n <= src) {\n copy_memory(dest, src, n);\n return;\n }\n if (dest < src) {\n if ((src & 7) == (dest & 7)) {\n while (dest & 7) {\n if (!n) return;\n --n;\n store(dest++, load(src++));\n }\n while (n >= 8) {\n store(dest, load(src));\n n -= 8;\n dest += 8;\n src += 8;\n }\n }\n while (n) {\n store(dest++, load(src++));\n --n;\n }\n } else {\n if ((src & 7) == (dest & 7)) {\n while ((dest + n) & 7) {\n if (!n) return;\n store(dest + --n, load(src + n));\n }\n while (n >= 8) {\n n -= 8;\n store(dest + n, load(src + n));\n }\n }\n while (n) {\n store(dest + --n, load(src + n));\n }\n }\n}\n\nexport function set_memory(dest: usize, c: u8, n: usize): void {\n // based on musl's implementation of memset\n // becomes obsolete once https://github.com/WebAssembly/bulk-memory-operations lands\n\n // fill head and tail with minimal branching\n if (!n) return;\n store(dest, c);\n store(dest + n - 1, c);\n if (n <= 2) return;\n\n store(dest + 1, c);\n store(dest + 2, c);\n store(dest + n - 2, c);\n store(dest + n - 3, c);\n if (n <= 6) return;\n store(dest + 3, c);\n store(dest + n - 4, c);\n if (n <= 8) return;\n\n // advance pointer to align it at 4-byte boundary\n var k: usize = -dest & 3;\n dest += k;\n n -= k;\n n &= -4;\n\n var c32: u32 = -1 / 255 * c;\n\n // fill head/tail up to 28 bytes each in preparation\n store(dest, c32);\n store(dest + n - 4, c32);\n if (n <= 8) return;\n store(dest + 4, c32);\n store(dest + 8, c32);\n store(dest + n - 12, c32);\n store(dest + n - 8, c32);\n if (n <= 24) return;\n store(dest + 12, c32);\n store(dest + 16, c32);\n store(dest + 20, c32);\n store(dest + 24, c32);\n store(dest + n - 28, c32);\n store(dest + n - 24, c32);\n store(dest + n - 20, c32);\n store(dest + n - 16, c32);\n\n // align to a multiple of 8\n k = 24 + (dest & 4);\n dest += k;\n n -= k;\n\n // copy 32 bytes each\n var c64: u64 = c32 | (c32 << 32);\n while (n >= 32) {\n store(dest, c64);\n store(dest + 8, c64);\n store(dest + 16, c64);\n store(dest + 24, c64);\n n -= 32;\n dest += 32;\n }\n}\n\nexport function compare_memory(vl: usize, vr: usize, n: usize): i32 {\n // based on musl's implementation of memcmp\n // provided because there's no proposed alternative\n if (vl == vr) return 0;\n while (n && load(vl) == load(vr)) {\n n--;\n vl++;\n vr++;\n }\n return n ? load(vl) - load(vr) : 0;\n}\n","(lib)/polyfills":"export function bswap(value: T): T {\n assert(sizeof() == 1 || sizeof() == 2 || sizeof() == 4 || sizeof() == 8);\n\n if (sizeof() == 2) {\n return bswap16(value);\n } else if (sizeof() == 4) {\n return (\n rotl(value & 0xFF00FF00, 8) |\n rotr(value & 0x00FF00FF, 8)\n );\n } else if (sizeof() == 8) {\n let a: u64 = (value >> 8) & 0x00FF00FF00FF00FF;\n let b: u64 = (value & 0x00FF00FF00FF00FF) << 8;\n let v: u64 = a | b;\n\n a = (v >> 16) & 0x0000FFFF0000FFFF;\n b = (v & 0x0000FFFF0000FFFF) << 16;\n\n return rotr(a | b, 32);\n }\n return value;\n}\n\nexport function bswap16(value: T): T {\n assert(sizeof() == 1 || sizeof() == 2 || sizeof() == 4);\n\n if (sizeof() == 2 || sizeof() == 4) {\n return (((value << 8) & 0xFF00) | ((value >> 8) & 0x00FF) | (value & 0xFFFF0000));\n }\n return value;\n}\n","(lib)/regexp":'export class RegExp {\n\n // @binding(CALL_NEW, [ STRING, STRING], OBJECT_HANDLE)\n constructor(pattern: string, flags: string = "") { throw new Error("unreachable"); }\n\n // @binding(CALL_THIS, [ STRING ], PASS_THRU)\n test(search: string): bool { throw new Error("unreachable"); }\n\n // @binding(CALL_THIS, [], STRING)\n toString(): string { throw new Error("unreachable"); }\n\n}\n',"(lib)/set":'// const prime1: u32 = 73;\n// const prime2: u32 = 5009;\n\nexport class Set {\n\n private __memory: usize;\n private __capacity: u32;\n private __size: u32;\n\n constructor() {\n this.__memory = 0;\n this.__capacity = this.__size = 0;\n }\n\n get size(): i32 {\n return this.__size;\n }\n\n // FIXME: not a proper set implementation, just a filler\n\n has(value: T): bool {\n assert(this != null);\n\n for (let index: usize = 0, limit: usize = this.__size; index < limit; ++index) {\n if (load(this.__memory + index * sizeof()) == value) {\n return true;\n }\n }\n return false;\n }\n\n add(value: T): Set {\n assert(this != null);\n\n if (this.__size >= this.__capacity) {\n let newCapacity = max(this.__capacity << 1, 8);\n let newMemory = allocate_memory(newCapacity * sizeof());\n if (this.__memory) {\n move_memory(newMemory, this.__memory, this.__capacity * sizeof());\n free_memory(this.__memory);\n }\n this.__capacity = newCapacity;\n this.__memory = newMemory;\n }\n store(this.__memory + this.__size * sizeof(), value);\n ++this.__size;\n return this;\n }\n\n delete(value: T): bool {\n assert(this != null);\n\n for (let index: usize = 0, limit: usize = this.__size; index < limit; ++index) {\n if (load(this.__memory + index * sizeof()) == value) {\n if (index + 1 < limit) {\n move_memory(\n this.__memory + index * sizeof(),\n this.__memory + (index + 1) * sizeof(),\n limit - index - 1\n );\n }\n --this.__size;\n return true;\n }\n }\n return false;\n }\n\n clear(): void {\n assert(this != null);\n\n this.__size = 0;\n }\n\n // TODO: think about iterators\n}\n\n// class SetIterator extends Iterator {\n\n// get done(): bool {\n// throw new Error("not implemented");\n// }\n\n// next(): T {\n// throw new Error("not implemented");\n// }\n// }\n',"(lib)/string":'// singleton empty string\nconst EMPTY: String = changetype("");\n\n// number of bytes preceeding string data\nconst HEAD: usize = 4;\n\nfunction allocate(length: i32): String {\n assert(length > 0); // 0 -> EMPTY\n var ptr = allocate_memory(HEAD + (length << 1));\n store(ptr, length);\n return changetype(ptr);\n}\n\nexport class String {\n\n readonly length: i32; // capped to [0, 0x7fffffff]\n\n @operator("[]")\n charAt(pos: i32): String {\n assert(this != null);\n\n if (pos >= this.length) {\n return EMPTY;\n }\n\n var out = allocate(1);\n store(\n changetype(out),\n load(\n changetype(this) + (pos << 1),\n HEAD\n ),\n HEAD\n );\n return out;\n }\n\n charCodeAt(pos: i32): i32 {\n assert(this != null);\n if (pos >= this.length) {\n return -1; // (NaN)\n }\n return load(\n changetype(this) + (pos << 1),\n HEAD\n );\n }\n\n codePointAt(pos: i32): i32 {\n assert(this != null);\n if (pos >= this.length) {\n return -1; // (undefined)\n }\n var first = load(\n changetype(this) + (pos << 1),\n HEAD\n );\n if (first < 0xD800 || first > 0xDBFF || pos + 1 == this.length) {\n return first;\n }\n var second = load(\n changetype(this) + ((pos + 1) << 1),\n HEAD\n );\n if (second < 0xDC00 || second > 0xDFFF) {\n return first;\n }\n return ((first - 0xD800) << 10) + (second - 0xDC00) + 0x10000;\n }\n\n @operator("+")\n private static __concat(left: String, right: String): String {\n if (left == null) {\n left = changetype("null");\n }\n return left.concat(right);\n }\n\n concat(other: String): String {\n assert(this != null);\n if (other == null) {\n other = changetype("null");\n }\n var thisLen: isize = this.length;\n var otherLen: isize = other.length;\n var outLen: usize = thisLen + otherLen;\n if (outLen == 0) {\n return EMPTY;\n }\n var out = allocate(outLen);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD,\n thisLen << 1\n );\n move_memory(\n changetype(out) + HEAD + (thisLen << 1),\n changetype(other) + HEAD,\n otherLen << 1\n );\n return out;\n }\n\n endsWith(searchString: String, endPosition: i32 = 0x7fffffff): bool {\n assert(this != null);\n if (searchString == null) {\n return false;\n }\n var end: isize = min(max(endPosition, 0), this.length);\n var searchLength: isize = searchString.length;\n var start: isize = end - searchLength;\n if (start < 0) {\n return false;\n }\n return !compare_memory(\n changetype(this) + HEAD + (start << 1),\n changetype(searchString) + HEAD,\n searchLength << 1\n );\n }\n\n @operator("==")\n private static __eq(left: String, right: String): bool {\n if (left == null) {\n return right == null;\n } else if (right == null) {\n return false;\n }\n var leftLength = left.length;\n if (leftLength != right.length) {\n return false;\n }\n return !compare_memory(\n changetype(left) + HEAD,\n changetype(right) + HEAD,\n (leftLength << 1)\n );\n }\n\n includes(searchString: String, position: i32 = 0): bool {\n return this.indexOf(searchString, position) != -1;\n }\n\n indexOf(searchString: String, position: i32 = 0): i32 {\n assert(this != null);\n if (searchString == null) {\n searchString = changetype("null");\n }\n var pos: isize = position;\n var len: isize = this.length;\n var start: isize = min(max(pos, 0), len);\n var searchLen: isize = searchString.length;\n\n // TODO: two-way, multiple char codes\n for (let k: usize = start; k + searchLen <= len; ++k) {\n if (!compare_memory(\n changetype(this) + HEAD + (k << 1),\n changetype(searchString) + HEAD,\n searchLen << 1)\n ) {\n return k;\n }\n }\n return -1;\n }\n\n startsWith(searchString: String, position: i32 = 0): bool {\n assert(this != null);\n if (searchString == null) {\n searchString = changetype("null");\n }\n var pos: isize = position;\n var len: isize = this.length;\n var start: isize = min(max(pos, 0), len);\n var searchLength: isize = searchString.length;\n if (searchLength + start > len) {\n return false;\n }\n return !compare_memory(\n changetype(this) + HEAD + (start << 1),\n changetype(searchString) + HEAD,\n searchLength << 1\n );\n }\n\n substr(start: i32, length: i32 = i32.MAX_VALUE): String {\n assert(this != null);\n var intStart: isize = start;\n var end: isize = length;\n var size: isize = this.length;\n if (intStart < 0) {\n intStart = max(size + intStart, 0);\n }\n var resultLength: isize = min(max(end, 0), size - intStart);\n if (resultLength <= 0) {\n return EMPTY;\n }\n var out = allocate(resultLength);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD + (intStart << 1),\n resultLength << 1\n );\n return out;\n }\n\n substring(start: i32, end: i32 = i32.MAX_VALUE): String {\n assert(this != null);\n var len = this.length;\n var finalStart = min(max(start, 0), len);\n var finalEnd = min(max(end, 0), len);\n var from = min(finalStart, finalEnd);\n var to = max(finalStart, finalEnd);\n len = to - from;\n if (!len) {\n return EMPTY;\n }\n if (!from && to == this.length) {\n return this;\n }\n var out = allocate(len);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD + (from << 1),\n len << 1\n );\n return out;\n }\n\n trim(): String {\n assert(this != null);\n var length: usize = this.length;\n while (\n length &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (length << 1), HEAD)\n )\n ) {\n --length;\n }\n var start: usize = 0;\n while (\n start < length &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (start << 1), HEAD)\n )\n ) {\n ++start, --length;\n }\n if (!length) {\n return EMPTY;\n }\n if (!start && length == this.length) {\n return this;\n }\n var out = allocate(length);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD + (start << 1),\n length << 1\n );\n return out;\n }\n\n trimLeft(): String {\n assert(this != null);\n var start: isize = 0;\n var len: isize = this.length;\n while (\n start < len &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (start << 1), HEAD)\n )\n ) {\n ++start;\n }\n if (!start) {\n return this;\n }\n var outLen = len - start;\n if (!outLen) {\n return EMPTY;\n }\n var out = allocate(outLen);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD + (start << 1),\n outLen << 1\n );\n return out;\n }\n\n trimRight(): String {\n assert(this != null);\n var len: isize = this.length;\n while (\n len > 0 &&\n isWhiteSpaceOrLineTerminator(\n load(changetype(this) + (len << 1), HEAD)\n )\n ) {\n --len;\n }\n if (len <= 0) {\n return EMPTY;\n }\n if (len == this.length) {\n return this;\n }\n var out = allocate(len);\n move_memory(\n changetype(out) + HEAD,\n changetype(this) + HEAD,\n len << 1\n );\n return out;\n }\n}\n\nfunction isWhiteSpaceOrLineTerminator(c: u16): bool {\n switch (c) {\n case 10: // \n case 13: // \n case 8232: // \n case 8233: // \n case 9: // \n case 11: // \n case 12: // \n case 32: // \n case 160: // \n case 65279: { // \n return true;\n }\n default: return false;\n }\n}\n\nconst enum CharCode {\n PLUS = 0x2B,\n MINUS = 0x2D,\n DOT = 0x2E,\n _0 = 0x30,\n _1 = 0x31,\n _2 = 0x32,\n _3 = 0x33,\n _4 = 0x34,\n _5 = 0x35,\n _6 = 0x36,\n _7 = 0x37,\n _8 = 0x38,\n _9 = 0x39,\n A = 0x41,\n B = 0x42,\n E = 0x45,\n O = 0x4F,\n X = 0x58,\n Z = 0x5a,\n a = 0x61,\n b = 0x62,\n e = 0x65,\n o = 0x6F,\n x = 0x78,\n z = 0x7A\n}\n\nexport function parseInt(str: String, radix: i32 = 0): f64 {\n return parse(str, radix);\n}\n\nexport function parseI32(str: String, radix: i32 = 0): i32 {\n return parse(str, radix);\n}\n\nexport function parseI64(str: String, radix: i32 = 0): i64 {\n return parse(str, radix);\n}\n\nfunction parse(str: String, radix: i32 = 0): T {\n var len: i32 = str.length;\n if (!len) {\n return NaN;\n }\n var ptr = changetype(str) /* + HEAD -> offset */;\n var code = load(ptr, HEAD);\n\n // determine sign\n var sign: T;\n if (code == CharCode.MINUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEAD);\n sign = -1;\n } else if (code == CharCode.PLUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEAD);\n sign = 1;\n } else {\n sign = 1;\n }\n\n // determine radix\n if (!radix) {\n if (code == CharCode._0 && len > 2) {\n switch (load(ptr + 2, HEAD)) {\n case CharCode.B:\n case CharCode.b: {\n ptr += 4; len -= 2;\n radix = 2;\n break;\n }\n case CharCode.O:\n case CharCode.o: {\n ptr += 4; len -= 2;\n radix = 8;\n break;\n }\n case CharCode.X:\n case CharCode.x: {\n ptr += 4; len -= 2;\n radix = 16;\n break;\n }\n default: {\n radix = 10;\n }\n }\n } else radix = 10;\n } else if (radix < 2 || radix > 36) {\n return NaN;\n }\n\n // calculate value\n var num: T = 0;\n while (len--) {\n code = load(ptr, HEAD);\n if (code >= CharCode._0 && code <= CharCode._9) {\n code -= CharCode._0;\n } else if (code >= CharCode.A && code <= CharCode.Z) {\n code -= CharCode.A - 10;\n } else if (code >= CharCode.a && code <= CharCode.z) {\n code -= CharCode.a - 10;\n } else {\n break;\n }\n if (code >= radix) {\n break;\n }\n num = (num * radix) + code;\n ptr += 2;\n }\n return sign * num;\n}\n\nexport function parseFloat(str: String): f64 {\n var len: i32 = str.length;\n if (!len) {\n return NaN;\n }\n var ptr = changetype(str) /* + HEAD -> offset */;\n var code = load(ptr, HEAD);\n\n // determine sign\n var sign: f64;\n if (code == CharCode.MINUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEAD);\n sign = -1;\n } else if (code == CharCode.PLUS) {\n if (!--len) {\n return NaN;\n }\n code = load(ptr += 2, HEAD);\n sign = 1;\n } else {\n sign = 1;\n }\n\n // calculate value\n var num: f64 = 0;\n while (len--) {\n code = load(ptr, HEAD);\n if (code == CharCode.DOT) {\n ptr += 2;\n let fac: f64 = 0.1; // precision :(\n while (len--) {\n code = load(ptr, HEAD);\n if (code == CharCode.E || code == CharCode.e) {\n assert(false); // TODO\n }\n code -= CharCode._0;\n if (code > 9) {\n break;\n }\n num += code * fac;\n fac *= 0.1;\n ptr += 2;\n }\n break;\n }\n code -= CharCode._0;\n if (code >= 10) {\n break;\n }\n num = (num * 10) + code;\n ptr += 2;\n }\n return sign * num;\n}\n'}):{},exports.definitionFiles=exports.isBundle?Object({assembly:'// Definitions for the "AssemblyScript" subset.\n\n// Types\n\n/** An 8-bit signed integer. */\ndeclare type i8 = number;\n/** A 16-bit signed integer. */\ndeclare type i16 = number;\n/** A 32-bit signed integer. */\ndeclare type i32 = number;\n/** A 64-bit signed integer. */\ndeclare type i64 = number;\n/** A 32-bit signed integer when targeting 32-bit WebAssembly or a 64-bit signed integer when targeting 64-bit WebAssembly. */\ndeclare type isize = number;\n/** An 8-bit unsigned integer. */\ndeclare type u8 = number;\n/** A 16-bit unsigned integer. */\ndeclare type u16 = number;\n/** A 32-bit unsigned integer. */\ndeclare type u32 = number;\n/** A 64-bit unsigned integer. */\ndeclare type u64 = number;\n/** A 32-bit unsigned integer when targeting 32-bit WebAssembly or a 64-bit unsigned integer when targeting 64-bit WebAssembly. */\ndeclare type usize = number;\n/** A 1-bit unsigned integer. */\ndeclare type bool = any; // sic\n/** A 32-bit float. */\ndeclare type f32 = number;\n/** A 64-bit float. */\ndeclare type f64 = number;\n\n/** Converts any other numeric value to an 8-bit signed integer. */\ndeclare function i8(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i8;\ndeclare namespace i8 {\n export const MIN_VALUE: i8;\n export const MAX_VALUE: i8;\n}\n/** Converts any other numeric value to a 16-bit signed integer. */\ndeclare function i16(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i8;\ndeclare namespace i16 {\n export const MIN_VALUE: i16;\n export const MAX_VALUE: i16;\n}\n/** Converts any other numeric value to a 32-bit signed integer. */\ndeclare function i32(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i32;\ndeclare namespace i32 {\n export const MIN_VALUE: i32;\n export const MAX_VALUE: i32;\n}\n/** Converts any other numeric value to a 64-bit signed integer. */\ndeclare function i64(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i64;\ndeclare namespace i64 {\n export const MIN_VALUE: i64;\n export const MAX_VALUE: i64;\n}\n/** Converts any other numeric value to a 32-bit (in WASM32) respectivel 64-bit (in WASM64) signed integer. */\ndeclare function isize(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): isize;\ndeclare namespace isize {\n export const MIN_VALUE: isize;\n export const MAX_VALUE: isize;\n}\n/** Converts any other numeric value to an 8-bit unsigned integer. */\ndeclare function u8(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i8;\ndeclare namespace u8 {\n export const MIN_VALUE: u8;\n export const MAX_VALUE: u8;\n}\n/** Converts any other numeric value to a 16-bit unsigned integer. */\ndeclare function u16(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i8;\ndeclare namespace u16 {\n export const MIN_VALUE: u16;\n export const MAX_VALUE: u16;\n}\n/** Converts any other numeric value to a 32-bit unsigned integer. */\ndeclare function u32(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i32;\ndeclare namespace u32 {\n export const MIN_VALUE: u32;\n export const MAX_VALUE: u32;\n}\n/** Converts any other numeric value to a 64-bit unsigned integer. */\ndeclare function u64(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): i64;\ndeclare namespace u64 {\n export const MIN_VALUE: u64;\n export const MAX_VALUE: u64;\n}\n/** Converts any other numeric value to a 32-bit (in WASM32) respectivel 64-bit (in WASM64) unsigned integer. */\ndeclare function usize(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): isize;\ndeclare namespace usize {\n export const MIN_VALUE: usize;\n export const MAX_VALUE: usize;\n}\n/** Converts any other numeric value to a 1-bit unsigned integer. */\ndeclare function bool(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): bool;\ndeclare namespace bool {\n export const MIN_VALUE: bool;\n export const MAX_VALUE: bool;\n}\n/** Converts any other numeric value to a 32-bit float. */\ndeclare function f32(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): f32;\ndeclare namespace f32 {\n export const MIN_VALUE: f32;\n export const MAX_VALUE: f32;\n /** Smallest safely representable integer value. */\n export const MIN_SAFE_INTEGER: f32;\n /** Largest safely representable integer value. */\n export const MAX_SAFE_INTEGER: f32;\n /** Difference between 1 and the smallest representable value greater than 1. */\n export const EPSILON: f32;\n}\n/** Converts any other numeric value to a 64-bit float. */\ndeclare function f64(value: i8 | i16 | i32 | i64 | isize | u8 | u16 | u32 | u64 | usize | bool | f32 | f64): f64;\ndeclare namespace f64 {\n export const MIN_VALUE: f64;\n export const MAX_VALUE: f64;\n /** Smallest safely representable integer value. */\n export const MIN_SAFE_INTEGER: f64;\n /** Largest safely representable integer value. */\n export const MAX_SAFE_INTEGER: f64;\n /** Difference between 1 and the smallest representable value greater than 1. */\n export const EPSILON: f64;\n}\n\n// Built-ins\n\n/** Performs the sign-agnostic count leading zero bits operation on a 32-bit or 64-bit integer. All zero bits are considered leading if the value is zero. */\ndeclare function clz(value: T): T;\n/** Performs the sign-agnostic count tailing zero bits operation on a 32-bit or 64-bit integer. All zero bits are considered trailing if the value is zero. */\ndeclare function ctz(value: T): T;\n/** Performs the sign-agnostic count number of one bits operation on a 32-bit or 64-bit integer. */\ndeclare function popcnt(value: T): T;\n/** Performs the sign-agnostic rotate left operation on a 32-bit or 64-bit integer. */\ndeclare function rotl(value: T, shift: T): T;\n/** Performs the sign-agnostic rotate right operation on a 32-bit or 64-bit integer. */\ndeclare function rotr(value: T, shift: T): T;\n/** Computes the absolute value of an integer or float. */\ndeclare function abs(value: T): T;\n/** Determines the maximum of two integers or floats. If either operand is `NaN`, returns `NaN`. */\ndeclare function max(left: T, right: T): T;\n/** Determines the minimum of two integers or floats. If either operand is `NaN`, returns `NaN`. */\ndeclare function min(left: T, right: T): T;\n/** Performs the ceiling operation on a 32-bit or 64-bit float. */\ndeclare function ceil(value: T): T;\n/** Composes a 32-bit or 64-bit float from the magnitude of `x` and the sign of `y`. */\ndeclare function copysign(x: T, y: T): T;\n/** Performs the floor operation on a 32-bit or 64-bit float. */\ndeclare function floor(value: T): T;\n/** Rounds to the nearest integer tied to even of a 32-bit or 64-bit float. */\ndeclare function nearest(value: T): T;\n/** Reinterprets the bits of the specified value as type `T`. Valid reinterpretations are u32/i32 to/from f32 and u64/i64 to/from f64. */\ndeclare function reinterpret(value: number): T;\n/** Selects one of two pre-evaluated values depending on the condition. */\ndeclare function select(ifTrue: T, ifFalse: T, condition: bool): T;\n/** Calculates the square root of a 32-bit or 64-bit float. */\ndeclare function sqrt(value: T): T;\n/** Rounds to the nearest integer towards zero of a 32-bit or 64-bit float. */\ndeclare function trunc(value: T): T;\n/** Loads a value of the specified type from memory. Equivalent to dereferncing a pointer in other languages. */\ndeclare function load(ptr: usize, constantOffset?: usize): T;\n/** Stores a value of the specified type to memory. Equivalent to dereferencing a pointer in other languages when assigning a value. */\ndeclare function store(ptr: usize, value: any, constantOffset?: usize): void;\n/** Returns the current memory size in units of pages. One page is 64kb. */\ndeclare function current_memory(): i32;\n/** Grows linear memory by a given unsigned delta of pages. One page is 64kb. Returns the previous memory size in units of pages or `-1` on failure. */\ndeclare function grow_memory(value: i32): i32;\n/** Copies n bytes from the specified source to the specified destination in memory. These regions may overlap. */\ndeclare function move_memory(destination: usize, source: usize, n: usize): void;\n/** Sets n bytes beginning at the specified destination in memory to the specified byte value. */\ndeclare function set_memory(destination: usize, value: u8, count: usize): void;\n/** Compares two chunks of memory. Returns `0` if equal, otherwise the difference of the first differing bytes. */\ndeclare function compare_memory(vl: usize, vr: usize, n: usize): i32;\n/** Allocates a chunk of memory of the specified size and returns a pointer to it. */\ndeclare function allocate_memory(size: usize): usize;\n/** Disposes a chunk of memory by its pointer. */\ndeclare function free_memory(ptr: usize): void;\n/** Emits an unreachable operation that results in a runtime error when executed. Both a statement and an expression of any type. */\ndeclare function unreachable(): any; // sic\n\n/** [Polyfill] Performs the sign-agnostic reverse bytes **/\ndeclare function bswap(value: T): T;\n/** [Polyfill] Performs the sign-agnostic reverse bytes only for last 16-bit **/\ndeclare function bswap16(value: T): T;\n\n/** NaN (not a number) as a 32-bit or 64-bit float depending on context. */\ndeclare const NaN: f32 | f64;\n/** Positive infinity as a 32-bit or 64-bit float depending on context. */\ndeclare const Infinity: f32 | f64;\n/** Heap base offset. */\ndeclare const HEAP_BASE: usize;\n/** Determines the byte size of the specified core or class type. Compiles to a constant. */\ndeclare function sizeof(): usize;\n/** Changes the type of any value of `usize` kind to another one of `usize` kind. Useful for casting class instances to their pointer values and vice-versa. Beware that this is unsafe.*/\ndeclare function changetype(value: any): T;\n/** Tests if a 32-bit or 64-bit float is `NaN`. */\ndeclare function isNaN(value: T): bool;\n/** Tests if a 32-bit or 64-bit float is finite, that is not `NaN` or +/-`Infinity`. */\ndeclare function isFinite(value: T): bool;\n/** Traps if the specified value is not true-ish, otherwise returns the (non-nullable) value. */\ndeclare function assert(isTrueish: T, message?: string): T & object; // any better way to model `: T != null`?\n/** Parses an integer string to a 64-bit float. */\ndeclare function parseInt(str: string, radix?: i32): f64;\n/** Parses an integer string to a 32-bit integer. */\ndeclare function parseI32(str: string, radix?: i32): i32;\n/** Parses an integer string to a 64-bit integer. */\ndeclare function parseI64(str: string, radix?: i32): i64;\n/** Parses a string to a 64-bit float. */\ndeclare function parseFloat(str: string): f64;\n\n// Standard library (not yet implemented)\n\n/** Class representing a sequence of values of type `T`. */\ndeclare class Array {\n [key: number]: T;\n /** Current length of the array. */\n length: i32;\n /** Constructs a new array. */\n constructor(capacity?: i32);\n indexOf(searchElement: T, fromIndex?: i32): i32;\n lastIndexOf(searchElement: T, fromIndex?: i32): i32;\n push(element: T): void;\n pop(): T;\n shift(): T;\n unshift(element: T): i32;\n slice(from: i32, to?: i32): T[];\n splice(start: i32, deleteCount?: i32): void;\n reverse(): T[];\n}\n\n/** Class representing a C-like array of values of type `T` with limited capabilities. */\ndeclare class CArray {\n [key: number]: T;\n private constructor();\n}\n\n/** Class representing a sequence of characters. */\ndeclare class String {\n\n static fromCharCode(ls: i32, hs?: i32): string;\n static fromCharCodes(arr: u16[]): string;\n static fromCodePoint(cp: i32): string;\n static fromCodePoints(arr: i32[]): string;\n\n readonly length: u32;\n\n charAt(index: u32): string;\n charCodeAt(index: u32): u16;\n concat(other: string): string;\n endsWith(other: string): bool;\n indexOf(other: string): u32;\n includes(other: string): bool;\n startsWith(other: string): bool;\n substr(start: u32, length?: u32): string;\n substring(start: u32, end?: u32): string;\n trim(): string;\n trimLeft(): string;\n trimRight(): string;\n}\n\n/** Class for representing a runtime error. Base class of all errors. */\ndeclare class Error {\n\n /** Error name. */\n name: string;\n\n /** Message provided on construction. */\n message: string;\n\n /** Stack trace. */\n stack: string;\n\n /** Constructs a new error, optionally with a message. */\n constructor(message?: string);\n}\n\n/** Class for indicating an error when a value is not in the set or range of allowed values. */\ndeclare class RangeError extends Error { }\n\ninterface Boolean {}\ninterface Function {}\ninterface IArguments {}\ninterface Number {}\ninterface Object {}\ninterface RegExp {}\n\ndeclare class Set {\n readonly size: i32;\n has(value: T): bool;\n add(value: T): void;\n delete(value: T): bool;\n clear(): void;\n}\n\n// Internal decorators\n\n/** Annotates an element as a program global. */\ndeclare function global(target: Function, propertyKey: string, descriptor: any): void;\n\n/** Annotates a method as an operator overload. */\ndeclare function operator(token: string): (target: any, propertyKey: string, descriptor: any) => void;\n\n/** Annotates a class as being unmanaged with limited capabilities. */\ndeclare function unmanaged(target: Function): any;\n\n/** Annotates a class field with an explicit offset. */\ndeclare function offset(offset: usize): any;\n\n/** Annotates an element as begin built-in. */\ndeclare function builtin(target: Function): any;\n',portable:'// Definitions for the "portable AssemblyScript" subset.\n\n// Portable types\n\n// Note that semantic differences require additional explicit conversions for full compatibility.\n// For example, when casting an i32 to an u8, doing `(someI32 & 0xff)` will yield the same\n// result when compiling to WebAssembly or JS while `someI32` alone does nothing in JS.\n\n// Note that i64\'s are not portable (JS numbers are IEEE754 doubles with a maximum safe integer value\n// of 2^53-1) and instead require a compatibility layer to work in JS as well. See: src/util/i64.ts\n\ndeclare type i8 = number;\ndeclare type i16 = number;\ndeclare type i32 = number;\ndeclare type isize = number;\ndeclare type u8 = number;\ndeclare type u16 = number;\ndeclare type u32 = number;\ndeclare type bool = boolean;\ndeclare type usize = number;\ndeclare type f32 = number;\ndeclare type f64 = number;\n\n/** Converts any other numeric value to an 8-bit signed integer. */\ndeclare function i8(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i8;\ndeclare namespace i8 {\n export const MIN_VALUE: i8;\n export const MAX_VALUE: i8;\n}\n/** Converts any other numeric value to a 16-bit signed integer. */\ndeclare function i16(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i8;\ndeclare namespace i16 {\n export const MIN_VALUE: i16;\n export const MAX_VALUE: i16;\n}\n/** Converts any other numeric value to a 32-bit signed integer. */\ndeclare function i32(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i32;\ndeclare namespace i32 {\n export const MIN_VALUE: i32;\n export const MAX_VALUE: i32;\n}\n/** Converts any other numeric value to a 32-bit (in WASM32) respectivel 64-bit (in WASM64) signed integer. */\ndeclare function isize(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): isize;\ndeclare namespace isize {\n export const MIN_VALUE: isize;\n export const MAX_VALUE: isize;\n}\n/** Converts any other numeric value to an 8-bit unsigned integer. */\ndeclare function u8(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i8;\ndeclare namespace u8 {\n export const MIN_VALUE: u8;\n export const MAX_VALUE: u8;\n}\n/** Converts any other numeric value to a 16-bit unsigned integer. */\ndeclare function u16(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i8;\ndeclare namespace u16 {\n export const MIN_VALUE: u16;\n export const MAX_VALUE: u16;\n}\n/** Converts any other numeric value to a 32-bit unsigned integer. */\ndeclare function u32(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): i32;\ndeclare namespace u32 {\n export const MIN_VALUE: u32;\n export const MAX_VALUE: u32;\n}\n/** Converts any other numeric value to a 32-bit (in WASM32) respectivel 64-bit (in WASM64) unsigned integer. */\ndeclare function usize(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): isize;\ndeclare namespace usize {\n export const MIN_VALUE: usize;\n export const MAX_VALUE: usize;\n}\n/** Converts any other numeric value to a 1-bit unsigned integer. */\ndeclare function bool(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): bool;\ndeclare namespace bool {\n export const MIN_VALUE: bool;\n export const MAX_VALUE: bool;\n}\n/** Converts any other numeric value to a 32-bit float. */\ndeclare function f32(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): f32;\ndeclare namespace f32 {\n /** Smallest safely representable integer value. */\n export const MIN_SAFE_INTEGER: f32;\n /** Largest safely representable integer value. */\n export const MAX_SAFE_INTEGER: f32;\n /** Difference between 1 and the smallest representable value greater than 1. */\n export const EPSILON: f32;\n}\n/** Converts any other numeric value to a 64-bit float. */\ndeclare function f64(value: i8 | i16 | i32 | isize | u8 | u16 | u32 | usize | bool | f32 | f64): f64;\ndeclare namespace f64 {\n /** Smallest safely representable integer value. */\n export const MIN_SAFE_INTEGER: f64;\n /** Largest safely representable integer value. */\n export const MAX_SAFE_INTEGER: f64;\n /** Difference between 1 and the smallest representable value greater than 1. */\n export const EPSILON: f64;\n}\n\n// Portable built-ins\n\n/** Performs the sign-agnostic count leading zero bits operation on a 32-bit integer. All zero bits are considered leading if the value is zero. */\ndeclare function clz(value: T): T;\n/** Computes the absolute value of an integer or float. */\ndeclare function abs(value: T): T;\n/** Determines the maximum of two integers or floats. If either operand is `NaN`, returns `NaN`. */\ndeclare function max(left: T, right: T): T;\n/** Determines the minimum of two integers or floats. If either operand is `NaN`, returns `NaN`. */\ndeclare function min(left: T, right: T): T;\n/** Performs the ceiling operation on a 32-bit or 64-bit float. */\ndeclare function ceil(value: T): T;\n/** Performs the floor operation on a 32-bit or 64-bit float. */\ndeclare function floor(value: T): T;\n/** Selects one of two pre-evaluated values depending on the condition. */\ndeclare function select(ifTrue: T, ifFalse: T, condition: bool): T;\n/** Calculates the square root of a 32-bit or 64-bit float. */\ndeclare function sqrt(value: T): T;\n/** Rounds to the nearest integer towards zero of a 32-bit or 64-bit float. */\ndeclare function trunc(value: T): T;\n/** Allocates a chunk of memory of the specified size and returns a pointer to it. */\ndeclare function allocate_memory(size: usize): usize;\n/** Disposes a chunk of memory by its pointer. */\ndeclare function free_memory(ptr: usize): void;\n/** Copies n bytes from the specified source to the specified destination in memory. These regions may overlap. */\ndeclare function move_memory(destination: usize, source: usize, n: usize): void;\n/** Loads a value of the specified type from memory. Type must be `u8`. */\ndeclare function load(ptr: usize, constantOffset?: usize): T;\n/** Stores a value of the specified type to memory. Type must be `u8`. */\ndeclare function store(ptr: usize, value: T, constantOffset?: usize): void;\n/** Emits an unreachable operation that results in a runtime error when executed. */\ndeclare function unreachable(): any; // sic\n\n/** [Polyfill] Performs the sign-agnostic reverse bytes **/\ndeclare function bswap(value: T): T;\n/** [Polyfill] Performs the sign-agnostic reverse bytes only for last 16-bit **/\ndeclare function bswap16(value: T): T;\n\n/** Changes the type of any value of `usize` kind to another one of `usize` kind. Useful for casting class instances to their pointer values and vice-versa. Beware that this is unsafe.*/\ndeclare function changetype(value: any): T;\n/** Traps if the specified value is not true-ish, otherwise returns the value. */\ndeclare function assert(isTrueish: T, message?: string): T & object; // any better way to model `: T != null`?\n/** Parses an integer string to a 64-bit float. */\ndeclare function parseInt(str: string, radix?: i32): f64;\n/** Parses an integer string to a 32-bit integer. */\ndeclare function parseI32(str: string, radix?: i32): i32;\n/** Parses a floating point string to a 64-bit float. */\ndeclare function parseFloat(str: string): f64;\n\n// Portable standard library\n// Everything marked @deprecated is a temporary filler. Do not use.\n\ndeclare const NaN: f32 | f64;\ndeclare const Infinity: f32 | f64;\n\ndeclare class Array {\n [key: number]: T;\n length: i32;\n constructor(capacity?: i32);\n indexOf(searchElement: T, fromIndex?: i32): i32;\n lastIndexOf(searchElement: T, fromIndex?: i32): i32;\n push(element: T): void;\n pop(): T;\n shift(): T;\n unshift(element: T): i32;\n slice(from: i32, to?: i32): T[];\n splice(start: i32, deleteCount?: i32): void;\n reverse(): T[];\n\n join(delim: string): string;\n}\n\ndeclare class Uint8Array extends Array {}\ndeclare class Uint16Array extends Array {}\ndeclare class Uint32Array extends Array {}\ndeclare class Int8Array extends Array {}\ndeclare class Int16Array extends Array {}\ndeclare class Int32Array extends Array {}\ndeclare class Float32Array extends Array {}\ndeclare class Float64Array extends Array {}\n\ndeclare class String {\n static fromCharCode(ls: i32, hs?: i32): string;\n static fromCharCodes(arr: u16[]): string;\n static fromCodePoint(cp: i32): string;\n static fromCodePoints(arr: i32[]): string;\n readonly length: i32;\n private constructor();\n indexOf(subject: string, position?: i32): i32;\n includes(other: string): bool;\n lastIndexOf(subject: string, position?: i32): i32;\n charAt(index: i32): string;\n charCodeAt(index: i32): i32;\n substring(from: i32, to?: i32): string;\n startsWith(subject: string): bool;\n endsWith(subject: string): bool;\n replace(search: string, replacement: string): string;\n toString(): string;\n}\n\ninterface Boolean {}\n\ndeclare class Number {\n private constructor();\n toString(radix?: i32): string;\n}\n\ninterface Object {}\n\ninterface Function {}\n\ninterface RegExp {}\n\ninterface IArguments {}\n\ndeclare class Error {\n constructor(message: string);\n message: string;\n stack: string | null;\n}\n\ndeclare class Symbol {\n private constructor();\n static readonly iterator: symbol;\n}\n\ndeclare class Set {\n constructor(entries?: T[]);\n has(value: T): bool;\n add(value: T): void;\n delete(value: T): bool;\n clear(): void;\n [Symbol.iterator](): Iterator;\n}\n\ndeclare class Map {\n constructor(entries?: [K, V][]);\n readonly size: i32;\n set(key: K, value: V): void;\n has(key: K): bool;\n get(key: K): V | null;\n clear(): void;\n entries(): Iterable<[K, V]>;\n keys(): Iterable;\n values(): Iterable;\n [Symbol.iterator](): Iterator<[K,V]>;\n}\n\ninterface Iterable {\n [Symbol.iterator](): Iterator;\n}\n\ninterface Iterator {}\n\ndeclare namespace console {\n /** @deprecated */\n function log(message: string): void;\n}\n'}):{},exports.main=function(e,n,t){"function"==typeof n?(t=n,n={}):n||(n={});const i=n.stdout||process.stdout,r=n.stderr||process.stderr,o=n.readFile||T,s=n.writeFile||z,a=n.listFiles||E,l=n.stats||createStats();if(!i)throw Error("'options.stdout' must be specified");if(!r)throw Error("'options.stderr' must be specified");if(!fs.readFileSync){if(o===T)throw Error("'options.readFile' must be specified");if(s===z)throw Error("'options.writeFile' must be specified");if(a===E)throw Error("'options.listFiles' must be specified")}const u=parseArguments(e);if(t||(t=function(e){var n=0;return e&&(r.write(e.stack+os.EOL),n=1),n}),u.version)return i.write("Version "+exports.version+(isDev?"-dev":"")+os.EOL),t(null);if(u.help||u._.length<1){const e=[];return Object.keys(exports.options).forEach(n=>{var t=exports.options[n],i=" ";for(i+="--"+n,t.aliases&&1===t.aliases[0].length&&(i+=", -"+t.aliases[0]);i.length<24;)i+=" ";Array.isArray(t.desc)?e.push(i+t.desc[0]+t.desc.slice(1).map(e=>{for(let n=0;n<24;++n)e=" "+e;return os.EOL+e}).join("")):e.push(i+t.desc)}),(u.help?i:r).write(["Version "+exports.version+(isDev?"-dev":""),"Syntax: asc [entryFile ...] [options]","","Examples: asc hello.ts"," asc hello.ts -b hello.wasm -t hello.wat"," asc hello1.ts hello2.ts -b -O > hello.wasm","","Options:"].concat(e).join(os.EOL)+os.EOL),t(null)}const c=u.baseDir?path.resolve(u.baseDir):process.cwd(),f=path.join(".","..","std","assembly"),h=u.noLib?[]:[f];u.lib&&("string"==typeof u.lib&&(u.lib=u.lib.split(",")),Array.prototype.push.apply(h,u.lib.map(trim)));var d=null;for(let e=0,n=u._.length;e{d=assemblyscript.parseFile(i,n,!0,d)});null!=(n=d.nextFile());){if(n.startsWith(exports.libraryPrefix)){for(let e=0,t=h.length;e{assemblyscript.parseFile(i,n,!1,d)})}if(checkDiagnostics(d,r))return t(Error("Parse error"))}var p=!1;u.noLib||Object.keys(exports.libraryFiles).forEach(e=>{e.lastIndexOf("/")>=exports.libraryPrefix.length||(l.parseCount++,l.parseTime+=measure(()=>{d=assemblyscript.parseFile(exports.libraryFiles[e],e+".ts",!1,d)}),p=!0)});for(let e=0,n=h.length;e{d=assemblyscript.parseFile(s,exports.libraryPrefix+r,!1,d)})}}const m=assemblyscript.createOptions();var g;if(assemblyscript.setTarget(m,0),assemblyscript.setNoTreeShaking(m,!!u.noTreeShaking),assemblyscript.setNoAssert(m,!!u.noAssert),assemblyscript.setNoMemory(m,!!u.noMemory),assemblyscript.setImportMemory(m,!!u.importMemory),assemblyscript.setMemoryBase(m,u.memoryBase>>>0),assemblyscript.setSourceMap(m,null!=u.sourceMap),l.compileCount++,(()=>{try{l.compileTime+=measure(()=>{g=assemblyscript.compile(d,m)})}catch(e){return t(e)}})(),checkDiagnostics(d,r))return g&&g.dispose(),t(Error("Compile error"));if(u.validate&&(l.validateCount++,l.validateTime+=measure(()=>{if(!g.validate())return g.dispose(),t(Error("Validate error"))})),"clamp"===u.trapMode)l.optimizeCount++,l.optimizeTime+=measure(()=>{g.runPasses(["trap-mode-clamp"])});else if("js"===u.trapMode)l.optimizeCount++,l.optimizeTime+=measure(()=>{g.runPasses(["trap-mode-js"])});else if("allow"!==u.trapMode)return g.dispose(),t(Error("Unsupported trap mode"));var b=-1,y=0,_=!u.noDebug;!1!==u.optimize&&("number"==typeof u.optimize?b=u.optimize:u[0]?b=0:u[1]?b=1:u[2]?b=2:u[3]?b=3:!0===u.optimize?(b=exports.defaultOptimizeLevel,y=exports.defaultShrinkLevel):b=0),u.s?y=1:u.z&&(y=2),"number"==typeof u.optimizeLevel&&(b=u.optimizeLevel),"number"==typeof u.shrinkLevel?y=u.shrinkLevel:"s"===u.shrinkLevel?y=1:"z"===u.shrinkLevel&&(y=2),g.setOptimizeLevel(b>0?b:0),g.setShrinkLevel(y),g.setDebugInfo(_);var v=[];if(u.runPasses&&("string"==typeof u.runPasses&&(u.runPasses=u.runPasses.split(",")),u.runPasses.length&&u.runPasses.forEach(e=>{v.indexOf(e)<0&&v.push(e)})),b>=0&&(l.optimizeCount++,l.optimizeTime+=measure(()=>{g.optimize()})),v.length&&(l.optimizeCount++,l.optimizeTime+=measure(()=>{g.runPasses(v.map(e=>e.trim()))})),!u.noEmit){let e=!1;if(null!=u.outFile&&(/\.was?t$/.test(u.outFile)&&null==u.textFile?u.textFile=u.outFile:/\.js$/.test(u.outFile)&&null==u.asmjsFile?u.asmjsFile=u.outFile:null==u.binaryFile&&(u.binaryFile=u.outFile)),null!=u.binaryFile){let n,i=null!=u.sourceMap?u.sourceMap.length?u.sourceMap:path.basename(u.binaryFile)+".map":null;if(l.emitCount++,l.emitTime+=measure(()=>{n=g.toBinary(i)}),u.binaryFile.length?s(path.join(c,u.binaryFile),n.output):(x(n.output),e=!0),null!=n.sourceMap)if(u.binaryFile.length){let e=JSON.parse(n.sourceMap);e.sourceRoot=exports.sourceMapRoot,e.sources.forEach((n,i)=>{let r=null;if(n.startsWith(exports.libraryPrefix))for(let e=0,t=h.length;e{n=g.toText()}),s(path.join(c,u.textFile),n)):e||(l.emitCount++,l.emitTime+=measure(()=>{n=g.toText()}),x(n),e=!0)}if(null!=u.asmjsFile){let n;u.asmjsFile.length?(l.emitCount++,l.emitTime+=measure(()=>{n=g.toAsmjs()}),s(path.join(c,u.asmjsFile),n)):e||(l.emitCount++,l.emitTime+=measure(()=>{n=g.toAsmjs()}),x(n),e=!0)}}return g.dispose(),u.measure&&printStats(l,r),t(null);function T(e){try{let n;return l.readCount++,l.readTime+=measure(()=>{n=fs.readFileSync(e,{encoding:"utf8"})}),n}catch(e){return null}}function z(e,n){try{return l.writeCount++,l.writeTime+=measure(()=>{"string"==typeof n?fs.writeFileSync(e,n,{encoding:"utf8"}):fs.writeFileSync(e,n)}),!0}catch(e){return!1}}function E(e){var n;try{return l.readTime+=measure(()=>{n=__webpack_require__(!function(){var e=new Error('Cannot find module "glob"');throw e.code="MODULE_NOT_FOUND",e}()).sync("*.ts",{cwd:e})}),n}catch(e){return[]}}function x(e){x.used||(l.writeCount++,x.used=!0),l.writeTime+=measure(()=>{"string"==typeof e?i.write(e,{encoding:"utf8"}):i.write(e)})}},exports.parseArguments=parseArguments,exports.checkDiagnostics=checkDiagnostics,exports.createStats=createStats,process.hrtime||(process.hrtime=__webpack_require__(3)),exports.measure=measure,exports.printStats=printStats,exports.createMemoryStream=createMemoryStream,exports.tscOptions={alwaysStrict:!0,noImplicitAny:!0,noImplicitReturns:!0,noImplicitThis:!0,noEmitOnError:!0,strictNullChecks:!0,experimentalDecorators:!0,target:"esnext",module:"commonjs",noLib:!0,types:[],allowJs:!1}}).call(this,__webpack_require__(0),__webpack_require__(12).Buffer)},function(e,n,t){e.exports=t(13)}])}); //# sourceMappingURL=asc.js.map \ No newline at end of file diff --git a/dist/asc.js.map b/dist/asc.js.map index 4fef56c9..3e832a6f 100644 --- a/dist/asc.js.map +++ b/dist/asc.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://asc/webpack/universalModuleDefinition","webpack://asc/webpack/bootstrap","webpack://asc/../node_modules/node-libs-browser/mock/process.js","webpack://asc/../node_modules/webpack/buildin/global.js","webpack://asc/../node_modules/path-browserify/index.js","webpack://asc/../node_modules/browser-process-hrtime/index.js","webpack://asc/../node_modules/minimist/index.js","webpack://asc/external \"assemblyscript\"","webpack://asc/../node_modules/os-browserify/browser.js","webpack://asc/../node_modules/isarray/index.js","webpack://asc/../node_modules/ieee754/index.js","webpack://asc/../node_modules/base64-js/index.js","webpack://asc/../node_modules/buffer/index.js","webpack://asc/./asc.js"],"names":["root","factory","exports","module","require","e","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__6__","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","path","cwd","nextTick","fn","setTimeout","platform","arch","execPath","title","pid","browser","env","argv","binding","Error","chdir","dir","resolve","exit","kill","umask","dlopen","uptime","memoryUsage","uvCounters","features","g","Function","eval","window","process","normalizeArray","parts","allowAboveRoot","up","length","last","splice","unshift","splitPathRe","splitPath","filename","exec","slice","filter","xs","f","res","push","resolvedPath","resolvedAbsolute","arguments","TypeError","charAt","split","join","normalize","isAbsolute","trailingSlash","substr","paths","Array","index","relative","from","to","trim","arr","start","end","fromParts","toParts","Math","min","samePartsLength","outputParts","concat","sep","delimiter","dirname","result","basename","ext","extname","str","len","global","hrtime","previousTimestamp","clocktime","performanceNow","performance","seconds","floor","nanoseconds","now","mozNow","msNow","oNow","webkitNow","Date","getTime","isNumber","x","test","args","opts","flags","bools","strings","unknownFn","allBools","Boolean","forEach","key","aliases","keys","alias","y","string","defaults","_","setArg","undefined","notFlags","val","arg","argDefined","Number","setKey","obj","isArray","aliasIsBoolean","some","indexOf","match","next","letters","broken","j","stopEarly","apply","code","endianness","hostname","location","loadavg","freemem","MAX_VALUE","totalmem","cpus","type","release","navigator","appVersion","networkInterfaces","getNetworkInterfaces","tmpdir","tmpDir","EOL","homedir","toString","read","buffer","offset","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","Infinity","pow","write","rt","abs","isNaN","log","LN2","byteLength","b64","placeHoldersCount","toByteArray","tmp","placeHolders","Arr","L","revLookup","charCodeAt","fromByteArray","uint8","extraBytes","output","len2","encodeChunk","lookup","Uint8Array","num","base64","ieee754","kMaxLength","Buffer","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","__proto__","encodingOrOffset","allocUnsafe","ArrayBuffer","array","byteOffset","fromArrayLike","fromArrayBuffer","encoding","isEncoding","actual","fromString","isBuffer","checked","copy","data","fromObject","assertSize","size","isView","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","swap","b","bidirectionalIndexOf","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","String","buf","readUInt16BE","foundIndex","found","hexWrite","remaining","strLen","parsed","parseInt","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","base64Slice","utf8Slice","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","subarray","typedArraySupport","poolSize","_augment","Symbol","species","fill","allocUnsafeSlow","_isBuffer","compare","a","list","pos","swap16","swap32","swap64","hexSlice","asciiSlice","latin1Slice","utf16leSlice","equals","inspect","max","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","ret","out","toHex","bytes","checkOffset","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","set","INVALID_BASE64_RE","leadSurrogate","replace","stringtrim","base64clean","src","dst","fs","os","assemblyscript","isDev","parseArguments","options","opt","default","boolean","checkDiagnostics","emitter","stderr","diagnostic","hasErrors","nextDiagnostic","formatDiagnostic","isTTY","isError","createStats","readTime","readCount","writeTime","writeCount","parseTime","parseCount","compileTime","compileCount","emitTime","emitCount","validateTime","validateCount","optimizeTime","optimizeCount","measure","times","printStats","stats","format","time","count","toFixed","stdout","createMemoryStream","stream","chunk","toBuffer","install","register","project","isBundle","version","sourceMapRoot","libraryPrefix","LIBRARY_PREFIX","defaultOptimizeLevel","defaultShrinkLevel","libraryFiles","(lib)/allocator/arena","(lib)/allocator/buddy","(lib)/allocator/common/alignment","(lib)/allocator/emscripten","(lib)/allocator/system","(lib)/allocator/tlsf","(lib)/array","(lib)/builtins","(lib)/collector/itcm","(lib)/error","(lib)/iterator","(lib)/map","(lib)/memory","(lib)/polyfills","(lib)/regexp","(lib)/set","(lib)/string","definitionFiles","assembly","portable","main","callback","readFile","readFileNode","writeFile","writeFileNode","listFiles","listFilesNode","readFileSync","err","stack","help","option","text","desc","map","line","baseDir","stdLibDir","libDirs","noLib","lib","parser","k","sourcePath","sourceText","parseFile","nextFile","startsWith","substring","hasBundledLibrary","libPath","libDir","libFiles","libText","compilerOptions","createOptions","setTarget","setNoTreeShaking","noTreeShaking","setNoAssert","setNoMemory","noMemory","setImportMemory","importMemory","setMemoryBase","memoryBase","setSourceMap","sourceMap","compile","dispose","validate","trapMode","runPasses","optimizeLevel","shrinkLevel","debugInfo","noDebug","optimize","setOptimizeLevel","setShrinkLevel","setDebugInfo","pass","noEmit","hasStdout","outFile","textFile","asmjsFile","binaryFile","binary","sourceMapURL","toBinary","writeStdout","JSON","parse","sourceRoot","sources","sourceContents","stringify","toText","asm","toAsmjs","contents","writeFileSync","files","sync","used","tscOptions","alwaysStrict","noImplicitAny","noImplicitReturns","noImplicitThis","noEmitOnError","strictNullChecks","experimentalDecorators","types","allowJs"],"mappings":"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","file":"asc.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory((function webpackLoadOptionalExternalModule() { try { return require(\"assemblyscript\"); } catch(e) {} }()));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"assemblyscript\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"asc\"] = factory((function webpackLoadOptionalExternalModule() { try { return require(\"assemblyscript\"); } catch(e) {} }()));\n\telse\n\t\troot[\"asc\"] = factory(root[\"assemblyscript\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__6__) {\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 = 14);\n","exports.nextTick = function nextTick(fn) {\n\tsetTimeout(fn, 0);\n};\n\nexports.platform = exports.arch = \nexports.execPath = exports.title = 'browser';\nexports.pid = 1;\nexports.browser = true;\nexports.env = {};\nexports.argv = [];\n\nexports.binding = function (name) {\n\tthrow new Error('No such module. (Possibly not yet loaded)')\n};\n\n(function () {\n var cwd = '/';\n var path;\n exports.cwd = function () { return cwd };\n exports.chdir = function (dir) {\n if (!path) path = require('path');\n cwd = path.resolve(dir, cwd);\n };\n})();\n\nexports.exit = exports.kill = \nexports.umask = exports.dlopen = \nexports.uptime = exports.memoryUsage = \nexports.uvCounters = function() {};\nexports.features = {};\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","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n var result = splitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n var f = splitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nexports.extname = function(path) {\n return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","module.exports = process.hrtime || hrtime\n\n// polyfil for window.performance.now\nvar performance = global.performance || {}\nvar performanceNow =\n performance.now ||\n performance.mozNow ||\n performance.msNow ||\n performance.oNow ||\n performance.webkitNow ||\n function(){ return (new Date()).getTime() }\n\n// generate timestamp or delta\n// see http://nodejs.org/api/process.html#process_process_hrtime\nfunction hrtime(previousTimestamp){\n var clocktime = performanceNow.call(performance)*1e-3\n var seconds = Math.floor(clocktime)\n var nanoseconds = Math.floor((clocktime%1)*1e9)\n if (previousTimestamp) {\n seconds = seconds - previousTimestamp[0]\n nanoseconds = nanoseconds - previousTimestamp[1]\n if (nanoseconds<0) {\n seconds--\n nanoseconds += 1e9\n }\n }\n return [seconds,nanoseconds]\n}","module.exports = function (args, opts) {\n if (!opts) opts = {};\n \n var flags = { bools : {}, strings : {}, unknownFn: null };\n\n if (typeof opts['unknown'] === 'function') {\n flags.unknownFn = opts['unknown'];\n }\n\n if (typeof opts['boolean'] === 'boolean' && opts['boolean']) {\n flags.allBools = true;\n } else {\n [].concat(opts['boolean']).filter(Boolean).forEach(function (key) {\n flags.bools[key] = true;\n });\n }\n \n var aliases = {};\n Object.keys(opts.alias || {}).forEach(function (key) {\n aliases[key] = [].concat(opts.alias[key]);\n aliases[key].forEach(function (x) {\n aliases[x] = [key].concat(aliases[key].filter(function (y) {\n return x !== y;\n }));\n });\n });\n\n [].concat(opts.string).filter(Boolean).forEach(function (key) {\n flags.strings[key] = true;\n if (aliases[key]) {\n flags.strings[aliases[key]] = true;\n }\n });\n\n var defaults = opts['default'] || {};\n \n var argv = { _ : [] };\n Object.keys(flags.bools).forEach(function (key) {\n setArg(key, defaults[key] === undefined ? false : defaults[key]);\n });\n \n var notFlags = [];\n\n if (args.indexOf('--') !== -1) {\n notFlags = args.slice(args.indexOf('--')+1);\n args = args.slice(0, args.indexOf('--'));\n }\n\n function argDefined(key, arg) {\n return (flags.allBools && /^--[^=]+$/.test(arg)) ||\n flags.strings[key] || flags.bools[key] || aliases[key];\n }\n\n function setArg (key, val, arg) {\n if (arg && flags.unknownFn && !argDefined(key, arg)) {\n if (flags.unknownFn(arg) === false) return;\n }\n\n var value = !flags.strings[key] && isNumber(val)\n ? Number(val) : val\n ;\n setKey(argv, key.split('.'), value);\n \n (aliases[key] || []).forEach(function (x) {\n setKey(argv, x.split('.'), value);\n });\n }\n\n function setKey (obj, keys, value) {\n var o = obj;\n keys.slice(0,-1).forEach(function (key) {\n if (o[key] === undefined) o[key] = {};\n o = o[key];\n });\n\n var key = keys[keys.length - 1];\n if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') {\n o[key] = value;\n }\n else if (Array.isArray(o[key])) {\n o[key].push(value);\n }\n else {\n o[key] = [ o[key], value ];\n }\n }\n \n function aliasIsBoolean(key) {\n return aliases[key].some(function (x) {\n return flags.bools[x];\n });\n }\n\n for (var i = 0; i < args.length; i++) {\n var arg = args[i];\n \n if (/^--.+=/.test(arg)) {\n // Using [\\s\\S] instead of . because js doesn't support the\n // 'dotall' regex modifier. See:\n // http://stackoverflow.com/a/1068308/13216\n var m = arg.match(/^--([^=]+)=([\\s\\S]*)$/);\n var key = m[1];\n var value = m[2];\n if (flags.bools[key]) {\n value = value !== 'false';\n }\n setArg(key, value, arg);\n }\n else if (/^--no-.+/.test(arg)) {\n var key = arg.match(/^--no-(.+)/)[1];\n setArg(key, false, arg);\n }\n else if (/^--.+/.test(arg)) {\n var key = arg.match(/^--(.+)/)[1];\n var next = args[i + 1];\n if (next !== undefined && !/^-/.test(next)\n && !flags.bools[key]\n && !flags.allBools\n && (aliases[key] ? !aliasIsBoolean(key) : true)) {\n setArg(key, next, arg);\n i++;\n }\n else if (/^(true|false)$/.test(next)) {\n setArg(key, next === 'true', arg);\n i++;\n }\n else {\n setArg(key, flags.strings[key] ? '' : true, arg);\n }\n }\n else if (/^-[^-]+/.test(arg)) {\n var letters = arg.slice(1,-1).split('');\n \n var broken = false;\n for (var j = 0; j < letters.length; j++) {\n var next = arg.slice(j+2);\n \n if (next === '-') {\n setArg(letters[j], next, arg)\n continue;\n }\n \n if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) {\n setArg(letters[j], next.split('=')[1], arg);\n broken = true;\n break;\n }\n \n if (/[A-Za-z]/.test(letters[j])\n && /-?\\d+(\\.\\d*)?(e-?\\d+)?$/.test(next)) {\n setArg(letters[j], next, arg);\n broken = true;\n break;\n }\n \n if (letters[j+1] && letters[j+1].match(/\\W/)) {\n setArg(letters[j], arg.slice(j+2), arg);\n broken = true;\n break;\n }\n else {\n setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg);\n }\n }\n \n var key = arg.slice(-1)[0];\n if (!broken && key !== '-') {\n if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1])\n && !flags.bools[key]\n && (aliases[key] ? !aliasIsBoolean(key) : true)) {\n setArg(key, args[i+1], arg);\n i++;\n }\n else if (args[i+1] && /true|false/.test(args[i+1])) {\n setArg(key, args[i+1] === 'true', arg);\n i++;\n }\n else {\n setArg(key, flags.strings[key] ? '' : true, arg);\n }\n }\n }\n else {\n if (!flags.unknownFn || flags.unknownFn(arg) !== false) {\n argv._.push(\n flags.strings['_'] || !isNumber(arg) ? arg : Number(arg)\n );\n }\n if (opts.stopEarly) {\n argv._.push.apply(argv._, args.slice(i + 1));\n break;\n }\n }\n }\n \n Object.keys(defaults).forEach(function (key) {\n if (!hasKey(argv, key.split('.'))) {\n setKey(argv, key.split('.'), defaults[key]);\n \n (aliases[key] || []).forEach(function (x) {\n setKey(argv, x.split('.'), defaults[key]);\n });\n }\n });\n \n if (opts['--']) {\n argv['--'] = new Array();\n notFlags.forEach(function(key) {\n argv['--'].push(key);\n });\n }\n else {\n notFlags.forEach(function(key) {\n argv._.push(key);\n });\n }\n\n return argv;\n};\n\nfunction hasKey (obj, keys) {\n var o = obj;\n keys.slice(0,-1).forEach(function (key) {\n o = (o[key] || {});\n });\n\n var key = keys[keys.length - 1];\n return key in o;\n}\n\nfunction isNumber (x) {\n if (typeof x === 'number') return true;\n if (/^0x[0-9a-f]+$/i.test(x)) return true;\n return /^[-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(e[-+]?\\d+)?$/.test(x);\n}\n\n","if(typeof __WEBPACK_EXTERNAL_MODULE__6__ === 'undefined') {var e = new Error(\"Cannot find module \\\"assemblyscript\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__6__;","exports.endianness = function () { return 'LE' };\n\nexports.hostname = function () {\n if (typeof location !== 'undefined') {\n return location.hostname\n }\n else return '';\n};\n\nexports.loadavg = function () { return [] };\n\nexports.uptime = function () { return 0 };\n\nexports.freemem = function () {\n return Number.MAX_VALUE;\n};\n\nexports.totalmem = function () {\n return Number.MAX_VALUE;\n};\n\nexports.cpus = function () { return [] };\n\nexports.type = function () { return 'Browser' };\n\nexports.release = function () {\n if (typeof navigator !== 'undefined') {\n return navigator.appVersion;\n }\n return '';\n};\n\nexports.networkInterfaces\n= exports.getNetworkInterfaces\n= function () { return {} };\n\nexports.arch = function () { return 'javascript' };\n\nexports.platform = function () { return 'browser' };\n\nexports.tmpdir = exports.tmpDir = function () {\n return '/tmp';\n};\n\nexports.EOL = '\\n';\n\nexports.homedir = function () {\n\treturn '/'\n};\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction placeHoldersCount (b64) {\n var len = b64.length\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n}\n\nfunction byteLength (b64) {\n // base64 is 4/3 + up to two characters of the original data\n return (b64.length * 3 / 4) - placeHoldersCount(b64)\n}\n\nfunction toByteArray (b64) {\n var i, l, tmp, placeHolders, arr\n var len = b64.length\n placeHolders = placeHoldersCount(b64)\n\n arr = new Arr((len * 3 / 4) - placeHolders)\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0; i < l; i += 4) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp >> 16) & 0xFF\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xFF\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp = ((uint8[i] << 16) & 0xFF0000) + ((uint8[i + 1] << 8) & 0xFF00) + (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var output = ''\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n output += lookup[tmp >> 2]\n output += lookup[(tmp << 4) & 0x3F]\n output += '=='\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n output += lookup[tmp >> 10]\n output += lookup[(tmp >> 4) & 0x3F]\n output += lookup[(tmp << 2) & 0x3F]\n output += '='\n }\n\n parts.push(output)\n\n return parts.join('')\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","/**\r\n * @file Compiler frontend for node.js\r\n *\r\n * Uses the low-level API exported from src/index.ts so it works with the compiler compiled to\r\n * JavaScript as well as the compiler compiled to WebAssembly (eventually). Runs the sources\r\n * directly through ts-node if distribution files are not present (indicated by a `-dev` version).\r\n *\r\n * Can also be packaged as a bundle suitable for in-browser use with the standard library injected\r\n * in the build step. See dist/asc.js for the bundle and webpack.config.js for building details.\r\n */\r\n\r\nconst fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst os = require(\"os\");\r\n\r\n// Use distribution files if present, otherwise run the sources directly\r\nvar assemblyscript, isDev;\r\n(() => {\r\n try {\r\n assemblyscript = require(\"../dist/assemblyscript.js\");\r\n isDev = false;\r\n try { require(\"source-map-support\").install(); } catch (e) {/* optional */}\r\n } catch (e) {\r\n try {\r\n require(\"ts-node\").register({ project: path.join(__dirname, \"..\", \"src\", \"tsconfig.json\") });\r\n require(\"../src/glue/js\");\r\n assemblyscript = require(\"../src\");\r\n isDev = true;\r\n } catch (e) {\r\n // last resort: same directory CommonJS\r\n assemblyscript = eval(\"require('./assemblyscript')\");\r\n isDev = false;\r\n }\r\n }\r\n})();\r\n\r\n/** Whether this is a webpack bundle or not. */\r\nexports.isBundle = typeof BUNDLE_VERSION === \"string\";\r\n\r\n/** Whether asc runs the sources directly or not. */\r\nexports.isDev = isDev;\r\n\r\n/** AssemblyScript veresion. */\r\nexports.version = exports.isBundle ? BUNDLE_VERSION : require(\"../package.json\").version;\r\n\r\n/** Available options. */\r\nexports.options = require(\"./asc.json\");\r\n\r\n/** Common root used in source maps. */\r\nexports.sourceMapRoot = \"assemblyscript:///\";\r\n\r\n/** Prefix used for library files. */\r\nexports.libraryPrefix = assemblyscript.LIBRARY_PREFIX;\r\n\r\n/** Default Binaryen optimization level. */\r\nexports.defaultOptimizeLevel = 2;\r\n\r\n/** Default Binaryen shrink level. */\r\nexports.defaultShrinkLevel = 1;\r\n\r\n/** Bundled library files, if any. */\r\nexports.libraryFiles = exports.isBundle ? BUNDLE_LIBRARY : {};\r\n\r\n/** Bundled definition files, if any. */\r\nexports.definitionFiles = exports.isBundle ? BUNDLE_DEFINITIONS : {};\r\n\r\n/** Runs the command line utility using the specified arguments array. */\r\nexports.main = function main(argv, options, callback) {\r\n if (typeof options === \"function\") {\r\n callback = options;\r\n options = {};\r\n } else if (!options) {\r\n options = {};\r\n }\r\n\r\n const stdout = options.stdout || process.stdout;\r\n const stderr = options.stderr || process.stderr;\r\n const readFile = options.readFile || readFileNode;\r\n const writeFile = options.writeFile || writeFileNode;\r\n const listFiles = options.listFiles || listFilesNode;\r\n const stats = options.stats || createStats();\r\n\r\n // All of the above must be specified in browser environments\r\n if (!stdout) throw Error(\"'options.stdout' must be specified\");\r\n if (!stderr) throw Error(\"'options.stderr' must be specified\");\r\n if (!fs.readFileSync) {\r\n if (readFile === readFileNode) throw Error(\"'options.readFile' must be specified\");\r\n if (writeFile === writeFileNode) throw Error(\"'options.writeFile' must be specified\");\r\n if (listFiles === listFilesNode) throw Error(\"'options.listFiles' must be specified\");\r\n }\r\n\r\n const args = parseArguments(argv);\r\n const indent = 24;\r\n\r\n // Use default callback if none is provided\r\n if (!callback) callback = function defaultCallback(err) {\r\n var code = 0;\r\n if (err) {\r\n stderr.write(err.stack + os.EOL);\r\n code = 1;\r\n }\r\n return code;\r\n };\r\n\r\n // Just print the version if requested\r\n if (args.version) {\r\n stdout.write(\"Version \" + exports.version + (isDev ? \"-dev\" : \"\") + os.EOL);\r\n return callback(null);\r\n }\r\n // Print the help message if requested or no source files are provided\r\n if (args.help || args._.length < 1) {\r\n const opts = [];\r\n Object.keys(exports.options).forEach(name => {\r\n var option = exports.options[name];\r\n var text = \" \";\r\n text += \"--\" + name;\r\n if (option.aliases && option.aliases[0].length === 1) {\r\n text += \", -\" + option.aliases[0];\r\n }\r\n while (text.length < indent) {\r\n text += \" \";\r\n }\r\n if (Array.isArray(option.desc)) {\r\n opts.push(text + option.desc[0] + option.desc.slice(1).map(line => {\r\n for (let i = 0; i < indent; ++i) {\r\n line = \" \" + line;\r\n }\r\n return os.EOL + line;\r\n }).join(\"\"));\r\n } else {\r\n opts.push(text + option.desc);\r\n }\r\n });\r\n\r\n (args.help ? stdout : stderr).write([\r\n \"Version \" + exports.version + (isDev ? \"-dev\" : \"\"),\r\n \"Syntax: asc [entryFile ...] [options]\",\r\n \"\",\r\n \"Examples: asc hello.ts\",\r\n \" asc hello.ts -b hello.wasm -t hello.wat\",\r\n \" asc hello1.ts hello2.ts -b -O > hello.wasm\",\r\n \"\",\r\n \"Options:\"\r\n ].concat(opts).join(os.EOL) + os.EOL);\r\n return callback(null);\r\n }\r\n\r\n // Set up base directory\r\n const baseDir = args.baseDir ? path.resolve(args.baseDir) : process.cwd();\r\n\r\n // Include standard library if --noLib isn't set\r\n const stdLibDir = path.join(__dirname, \"..\", \"std\", \"assembly\");\r\n const libDirs = args.noLib ? [] : [ stdLibDir ];\r\n\r\n // Include custom library components (with or without stdlib)\r\n if (args.lib) {\r\n if (typeof args.lib === \"string\") {\r\n args.lib = args.lib.split(\",\");\r\n }\r\n Array.prototype.push.apply(libDirs, args.lib.map(trim));\r\n }\r\n\r\n // Begin parsing\r\n var parser = null;\r\n\r\n // Include entry files\r\n for (let i = 0, k = args._.length; i < k; ++i) {\r\n const filename = args._[i];\r\n\r\n let sourcePath = filename.replace(/\\\\/g, \"/\").replace(/(\\.ts|\\/)$/, \"\");\r\n\r\n // Try entryPath.ts, then entryPath/index.ts\r\n let sourceText = readFile(path.join(baseDir, sourcePath) + \".ts\");\r\n if (sourceText === null) {\r\n sourceText = readFile(path.join(baseDir, sourcePath, \"index.ts\"));\r\n if (sourceText === null) {\r\n return callback(Error(\"Entry file '\" + sourcePath + \".ts' not found.\"));\r\n } else {\r\n sourcePath += \"/index.ts\";\r\n }\r\n } else {\r\n sourcePath += \".ts\";\r\n }\r\n\r\n stats.parseCount++;\r\n stats.parseTime += measure(() => {\r\n parser = assemblyscript.parseFile(sourceText, sourcePath, true, parser);\r\n });\r\n\r\n while ((sourcePath = parser.nextFile()) != null) {\r\n let found = false;\r\n\r\n // Load library file if explicitly requested\r\n if (sourcePath.startsWith(exports.libraryPrefix)) {\r\n for (let i = 0, k = libDirs.length; i < k; ++i) {\r\n if (exports.libraryFiles.hasOwnProperty(sourcePath)) {\r\n sourceText = exports.libraryFiles[sourcePath];\r\n } else {\r\n sourceText = readFile(path.join(\r\n libDirs[i],\r\n sourcePath.substring(exports.libraryPrefix.length) + \".ts\")\r\n );\r\n if (sourceText !== null) {\r\n sourcePath += \".ts\";\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Otherwise try nextFile.ts, nextFile/index.ts, (lib)/nextFile.ts\r\n } else {\r\n sourceText = readFile(path.join(baseDir, sourcePath + \".ts\"));\r\n if (sourceText === null) {\r\n sourceText = readFile(path.join(baseDir, sourcePath, \"index.ts\"));\r\n if (sourceText === null) {\r\n for (let i = 0, k = libDirs.length; i < k; ++i) {\r\n const dir = libDirs[i];\r\n const key = exports.libraryPrefix + sourcePath;\r\n if (exports.libraryFiles.hasOwnProperty(key)) {\r\n sourceText = exports.libraryFiles[key];\r\n } else {\r\n sourceText = readFile(path.join(dir, sourcePath + \".ts\"));\r\n if (sourceText !== null) {\r\n sourcePath = exports.libraryPrefix + sourcePath + \".ts\";\r\n break;\r\n }\r\n }\r\n }\r\n if (sourceText === null) {\r\n return callback(\r\n Error(\"Import file '\" + sourcePath + \".ts' not found.\")\r\n );\r\n }\r\n } else {\r\n sourcePath += \"/index.ts\";\r\n }\r\n } else {\r\n sourcePath += \".ts\";\r\n }\r\n }\r\n stats.parseCount++;\r\n stats.parseTime += measure(() => {\r\n assemblyscript.parseFile(sourceText, sourcePath, false, parser);\r\n });\r\n }\r\n if (checkDiagnostics(parser, stderr)) {\r\n return callback(Error(\"Parse error\"));\r\n }\r\n }\r\n\r\n // Include (other) library components\r\n var hasBundledLibrary = false;\r\n if (!args.noLib)\r\n Object.keys(exports.libraryFiles).forEach(libPath => {\r\n if (libPath.lastIndexOf(\"/\") >= exports.libraryPrefix.length) return;\r\n stats.parseCount++;\r\n stats.parseTime += measure(() => {\r\n parser = assemblyscript.parseFile(\r\n exports.libraryFiles[libPath],\r\n libPath + \".ts\",\r\n false,\r\n parser\r\n );\r\n });\r\n hasBundledLibrary = true;\r\n });\r\n for (let i = 0, k = libDirs.length; i < k; ++i) {\r\n if (i === 0 && hasBundledLibrary) continue;\r\n let libDir = libDirs[i];\r\n let libFiles = listFiles(libDir);\r\n for (let j = 0, l = libFiles.length; j < l; ++j) {\r\n let libPath = libFiles[j];\r\n let libText = readFile(path.join(libDir, libPath));\r\n if (libText === null) {\r\n return callback(Error(\"Library file '\" + libPath + \"' not found.\"));\r\n }\r\n stats.parseCount++;\r\n stats.parseTime += measure(() => {\r\n parser = assemblyscript.parseFile(\r\n libText,\r\n exports.libraryPrefix + libPath,\r\n false,\r\n parser\r\n );\r\n });\r\n }\r\n }\r\n\r\n // Begin compilation\r\n const compilerOptions = assemblyscript.createOptions();\r\n assemblyscript.setTarget(compilerOptions, 0);\r\n assemblyscript.setNoTreeShaking(compilerOptions, !!args.noTreeShaking);\r\n assemblyscript.setNoAssert(compilerOptions, !!args.noAssert);\r\n assemblyscript.setNoMemory(compilerOptions, !!args.noMemory);\r\n assemblyscript.setImportMemory(compilerOptions, !!args.importMemory);\r\n assemblyscript.setMemoryBase(compilerOptions, args.memoryBase >>> 0);\r\n assemblyscript.setSourceMap(compilerOptions, args.sourceMap != null);\r\n\r\n var module;\r\n stats.compileCount++;\r\n (() => {\r\n try {\r\n stats.compileTime += measure(() => {\r\n module = assemblyscript.compile(parser, compilerOptions);\r\n });\r\n } catch (e) {\r\n return callback(e);\r\n }\r\n })();\r\n if (checkDiagnostics(parser, stderr)) {\r\n if (module) module.dispose();\r\n return callback(Error(\"Compile error\"));\r\n }\r\n\r\n // Validate the module if requested\r\n if (args.validate) {\r\n stats.validateCount++;\r\n stats.validateTime += measure(() => {\r\n if (!module.validate()) {\r\n module.dispose();\r\n return callback(Error(\"Validate error\"));\r\n }\r\n });\r\n }\r\n\r\n // Set Binaryen-specific options\r\n if (args.trapMode === \"clamp\") {\r\n stats.optimizeCount++;\r\n stats.optimizeTime += measure(() => {\r\n module.runPasses([ \"trap-mode-clamp\" ]);\r\n });\r\n } else if (args.trapMode === \"js\") {\r\n stats.optimizeCount++;\r\n stats.optimizeTime += measure(() => {\r\n module.runPasses([ \"trap-mode-js\" ]);\r\n });\r\n } else if (args.trapMode !== \"allow\") {\r\n module.dispose();\r\n return callback(Error(\"Unsupported trap mode\"));\r\n }\r\n\r\n var optimizeLevel = -1;\r\n var shrinkLevel = 0;\r\n var debugInfo = !args.noDebug;\r\n\r\n if (args.optimize !== false) {\r\n if (typeof args.optimize === \"number\") {\r\n optimizeLevel = args.optimize;\r\n } else if (args[\"0\"]) {\r\n optimizeLevel = 0;\r\n } else if (args[\"1\"]) {\r\n optimizeLevel = 1;\r\n } else if (args[\"2\"]) {\r\n optimizeLevel = 2;\r\n } else if (args[\"3\"]) {\r\n optimizeLevel = 3;\r\n } else if (args.optimize === true) {\r\n optimizeLevel = exports.defaultOptimizeLevel;\r\n shrinkLevel = exports.defaultShrinkLevel;\r\n } else\r\n optimizeLevel = 0;\r\n }\r\n\r\n if (args[\"s\"]) {\r\n shrinkLevel = 1;\r\n } else if (args[\"z\"]) {\r\n shrinkLevel = 2;\r\n }\r\n\r\n if (typeof args.optimizeLevel === \"number\") {\r\n optimizeLevel = args.optimizeLevel;\r\n }\r\n\r\n if (typeof args.shrinkLevel === \"number\") {\r\n shrinkLevel = args.shrinkLevel;\r\n } else if (args.shrinkLevel === \"s\") {\r\n shrinkLevel = 1;\r\n } else if (args.shrinkLevel === \"z\") {\r\n shrinkLevel = 2;\r\n }\r\n\r\n module.setOptimizeLevel(optimizeLevel > 0 ? optimizeLevel : 0);\r\n module.setShrinkLevel(shrinkLevel);\r\n module.setDebugInfo(debugInfo);\r\n\r\n var runPasses = [];\r\n if (args.runPasses) {\r\n if (typeof args.runPasses === \"string\") {\r\n args.runPasses = args.runPasses.split(\",\");\r\n }\r\n if (args.runPasses.length) {\r\n args.runPasses.forEach(pass => {\r\n if (runPasses.indexOf(pass) < 0)\r\n runPasses.push(pass);\r\n });\r\n }\r\n }\r\n\r\n // Optimize the module if requested\r\n if (optimizeLevel >= 0) {\r\n stats.optimizeCount++;\r\n stats.optimizeTime += measure(() => {\r\n module.optimize();\r\n });\r\n }\r\n\r\n // Run additional passes if requested\r\n if (runPasses.length) {\r\n stats.optimizeCount++;\r\n stats.optimizeTime += measure(() => {\r\n module.runPasses(runPasses.map(pass => pass.trim()));\r\n });\r\n }\r\n\r\n // Prepare output\r\n if (!args.noEmit) {\r\n let hasStdout = false;\r\n\r\n if (args.outFile != null) {\r\n if (/\\.was?t$/.test(args.outFile) && args.textFile == null) {\r\n args.textFile = args.outFile;\r\n } else if (/\\.js$/.test(args.outFile) && args.asmjsFile == null) {\r\n args.asmjsFile = args.outFile;\r\n } else if (args.binaryFile == null) {\r\n args.binaryFile = args.outFile;\r\n }\r\n }\r\n\r\n // Write binary\r\n if (args.binaryFile != null) {\r\n let sourceMapURL = args.sourceMap != null\r\n ? args.sourceMap.length\r\n ? args.sourceMap\r\n : path.basename(args.binaryFile) + \".map\"\r\n : null;\r\n\r\n let binary;\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n binary = module.toBinary(sourceMapURL)\r\n });\r\n\r\n if (args.binaryFile.length) {\r\n writeFile(path.join(baseDir, args.binaryFile), binary.output);\r\n } else {\r\n writeStdout(binary.output);\r\n hasStdout = true;\r\n }\r\n\r\n // Post-process source map\r\n if (binary.sourceMap != null) {\r\n if (args.binaryFile.length) {\r\n let sourceMap = JSON.parse(binary.sourceMap);\r\n sourceMap.sourceRoot = exports.sourceMapRoot;\r\n sourceMap.sources.forEach((name, index) => {\r\n let text = null;\r\n if (name.startsWith(exports.libraryPrefix)) {\r\n for (let i = 0, k = libDirs.length; i < k; ++i) {\r\n text = readFile(path.join(\r\n libDirs[i],\r\n name.substring(exports.libraryPrefix.length))\r\n );\r\n if (text !== null) break;\r\n }\r\n } else {\r\n text = readFile(path.join(baseDir, name));\r\n }\r\n if (text === null) {\r\n return callback(Error(\"Source file '\" + name + \"' not found.\"));\r\n }\r\n if (!sourceMap.sourceContents) sourceMap.sourceContents = [];\r\n sourceMap.sourceContents[index] = text;\r\n });\r\n writeFile(path.join(\r\n baseDir,\r\n path.dirname(args.binaryFile),\r\n path.basename(sourceMapURL)\r\n ), JSON.stringify(sourceMap));\r\n } else {\r\n stderr.write(\"Skipped source map (stdout already occupied)\" + os.EOL);\r\n }\r\n }\r\n }\r\n\r\n // Write text\r\n if (\r\n args.textFile != null || (\r\n args.binaryFile == null &&\r\n args.asmjsFile == null\r\n )\r\n ) {\r\n let text;\r\n if (args.textFile && args.textFile.length) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n text = module.toText();\r\n });\r\n writeFile(path.join(baseDir, args.textFile), text);\r\n } else if (!hasStdout) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n text = module.toText()\r\n });\r\n writeStdout(text);\r\n hasStdout = true;\r\n }\r\n }\r\n\r\n // Write asm.js\r\n if (args.asmjsFile != null) {\r\n let asm;\r\n if (args.asmjsFile.length) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n asm = module.toAsmjs();\r\n });\r\n writeFile(path.join(baseDir, args.asmjsFile), asm);\r\n } else if (!hasStdout) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n asm = module.toAsmjs();\r\n });\r\n writeStdout(asm);\r\n hasStdout = true;\r\n }\r\n }\r\n }\r\n\r\n module.dispose();\r\n if (args.measure) {\r\n printStats(stats, stderr);\r\n }\r\n return callback(null);\r\n\r\n function readFileNode(filename) {\r\n try {\r\n var text;\r\n stats.readCount++;\r\n stats.readTime += measure(() => {\r\n text = fs.readFileSync(filename, { encoding: \"utf8\" });\r\n });\r\n return text;\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n function writeFileNode(filename, contents) {\r\n try {\r\n stats.writeCount++;\r\n stats.writeTime += measure(() => {\r\n if (typeof contents === \"string\") {\r\n fs.writeFileSync(filename, contents, { encoding: \"utf8\" } );\r\n } else {\r\n fs.writeFileSync(filename, contents);\r\n }\r\n });\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n function listFilesNode(dirname) {\r\n var files;\r\n try {\r\n stats.readTime += measure(() => {\r\n files = require(\"glob\").sync(\"*.ts\", { cwd: dirname });\r\n });\r\n return files;\r\n } catch (e) {\r\n return [];\r\n }\r\n }\r\n\r\n function writeStdout(contents) {\r\n if (!writeStdout.used) {\r\n stats.writeCount++;\r\n writeStdout.used = true;\r\n }\r\n stats.writeTime += measure(() => {\r\n if (typeof contents === \"string\") {\r\n stdout.write(contents, { encoding: \"utf8\" });\r\n } else {\r\n stdout.write(contents);\r\n }\r\n });\r\n }\r\n}\r\n\r\n/** Parses the specified command line arguments. */\r\nfunction parseArguments(argv) {\r\n const opts = {};\r\n Object.keys(exports.options).forEach(key => {\r\n const opt = exports.options[key];\r\n if (opt.aliases) {\r\n (opts.alias || (opts.alias = {}))[key] = opt.aliases;\r\n }\r\n if (opt.default !== undefined) {\r\n (opts.default || (opts.default = {}))[key] = opt.default;\r\n }\r\n if (opt.type === \"string\") {\r\n (opts.string || (opts.string = [])).push(key);\r\n } else if (opt.type === \"boolean\") {\r\n (opts.boolean || (opts.boolean = [])).push(key);\r\n }\r\n });\r\n return require(\"minimist\")(argv, opts);\r\n}\r\n\r\nexports.parseArguments = parseArguments;\r\n\r\n/** Checks diagnostics emitted so far for errors. */\r\nfunction checkDiagnostics(emitter, stderr) {\r\n var diagnostic;\r\n var hasErrors = false;\r\n while ((diagnostic = assemblyscript.nextDiagnostic(emitter)) != null) {\r\n stderr.write(\r\n assemblyscript.formatDiagnostic(diagnostic, stderr.isTTY, true) +\r\n os.EOL + os.EOL\r\n );\r\n if (assemblyscript.isError(diagnostic)) hasErrors = true;\r\n }\r\n return hasErrors;\r\n}\r\n\r\nexports.checkDiagnostics = checkDiagnostics;\r\n\r\n/** Creates an empty set of stats. */\r\nfunction createStats() {\r\n return {\r\n readTime: 0,\r\n readCount: 0,\r\n writeTime: 0,\r\n writeCount: 0,\r\n parseTime: 0,\r\n parseCount: 0,\r\n compileTime: 0,\r\n compileCount: 0,\r\n emitTime: 0,\r\n emitCount: 0,\r\n validateTime: 0,\r\n validateCount: 0,\r\n optimizeTime: 0,\r\n optimizeCount: 0\r\n };\r\n}\r\n\r\nexports.createStats = createStats;\r\n\r\nif (!process.hrtime) process.hrtime = require(\"browser-process-hrtime\");\r\n\r\n/** Measures the execution time of the specified function. */\r\nfunction measure(fn) {\r\n const start = process.hrtime();\r\n fn();\r\n const times = process.hrtime(start);\r\n return times[0] * 1e9 + times[1];\r\n}\r\n\r\nexports.measure = measure;\r\n\r\n/** Formats and prints out the contents of a set of stats. */\r\nfunction printStats(stats, output) {\r\n function format(time, count) {\r\n return time ? (time / 1e6).toFixed(3) + \" ms\" : \"N/A\";\r\n }\r\n (output || process.stdout).write([\r\n \"I/O Read : \" + format(stats.readTime, stats.readCount),\r\n \"I/O Write : \" + format(stats.writeTime, stats.writeCount),\r\n \"Parse : \" + format(stats.parseTime, stats.parseCount),\r\n \"Compile : \" + format(stats.compileTime, stats.compileCount),\r\n \"Emit : \" + format(stats.emitTime, stats.emitCount),\r\n \"Validate : \" + format(stats.validateTime, stats.validateCount),\r\n \"Optimize : \" + format(stats.optimizeTime, stats.optimizeCount)\r\n ].join(os.EOL) + os.EOL);\r\n}\r\n\r\nexports.printStats = printStats;\r\n\r\n/** Creates a memory stream that can be used in place of stdout/stderr. */\r\nfunction createMemoryStream(fn) {\r\n var stream = [];\r\n stream.write = function(chunk) {\r\n if (typeof chunk === \"string\") {\r\n this.push(Buffer.from(chunk, \"utf8\"));\r\n } else {\r\n this.push(chunk);\r\n }\r\n if (fn) fn(chunk);\r\n };\r\n stream.toBuffer = function() {\r\n return Buffer.concat(this);\r\n };\r\n stream.toString = function() {\r\n return this.toBuffer().toString(\"utf8\");\r\n };\r\n return stream;\r\n}\r\n\r\nexports.createMemoryStream = createMemoryStream;\r\n\r\n/** Compatible TypeScript compiler options. */\r\nexports.tscOptions = {\r\n alwaysStrict: true,\r\n noImplicitAny: true,\r\n noImplicitReturns: true,\r\n noImplicitThis: true,\r\n noEmitOnError: true,\r\n strictNullChecks: true,\r\n experimentalDecorators: true,\r\n target: \"esnext\",\r\n module: \"commonjs\",\r\n noLib: true,\r\n types: [],\r\n allowJs: false\r\n};\r\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://asc/webpack/universalModuleDefinition","webpack://asc/webpack/bootstrap","webpack://asc/../node_modules/node-libs-browser/mock/process.js","webpack://asc/../node_modules/webpack/buildin/global.js","webpack://asc/../node_modules/path-browserify/index.js","webpack://asc/../node_modules/browser-process-hrtime/index.js","webpack://asc/../node_modules/minimist/index.js","webpack://asc/external \"assemblyscript\"","webpack://asc/../node_modules/os-browserify/browser.js","webpack://asc/../node_modules/isarray/index.js","webpack://asc/../node_modules/ieee754/index.js","webpack://asc/../node_modules/base64-js/index.js","webpack://asc/../node_modules/buffer/index.js","webpack://asc/./asc.js"],"names":["root","factory","exports","module","require","e","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__6__","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","path","cwd","nextTick","fn","setTimeout","platform","arch","execPath","title","pid","browser","env","argv","binding","Error","chdir","dir","resolve","exit","kill","umask","dlopen","uptime","memoryUsage","uvCounters","features","g","Function","eval","window","process","normalizeArray","parts","allowAboveRoot","up","length","last","splice","unshift","splitPathRe","splitPath","filename","exec","slice","filter","xs","f","res","push","resolvedPath","resolvedAbsolute","arguments","TypeError","charAt","split","join","normalize","isAbsolute","trailingSlash","substr","paths","Array","index","relative","from","to","trim","arr","start","end","fromParts","toParts","Math","min","samePartsLength","outputParts","concat","sep","delimiter","dirname","result","basename","ext","extname","str","len","global","hrtime","previousTimestamp","clocktime","performanceNow","performance","seconds","floor","nanoseconds","now","mozNow","msNow","oNow","webkitNow","Date","getTime","isNumber","x","test","args","opts","flags","bools","strings","unknownFn","allBools","Boolean","forEach","key","aliases","keys","alias","y","string","defaults","_","setArg","undefined","notFlags","val","arg","argDefined","Number","setKey","obj","isArray","aliasIsBoolean","some","indexOf","match","next","letters","broken","j","stopEarly","apply","code","endianness","hostname","location","loadavg","freemem","MAX_VALUE","totalmem","cpus","type","release","navigator","appVersion","networkInterfaces","getNetworkInterfaces","tmpdir","tmpDir","EOL","homedir","toString","read","buffer","offset","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","Infinity","pow","write","rt","abs","isNaN","log","LN2","byteLength","b64","placeHoldersCount","toByteArray","tmp","placeHolders","Arr","L","revLookup","charCodeAt","fromByteArray","uint8","extraBytes","output","len2","encodeChunk","lookup","Uint8Array","num","base64","ieee754","kMaxLength","Buffer","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","__proto__","encodingOrOffset","allocUnsafe","ArrayBuffer","array","byteOffset","fromArrayLike","fromArrayBuffer","encoding","isEncoding","actual","fromString","isBuffer","checked","copy","data","fromObject","assertSize","size","isView","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","swap","b","bidirectionalIndexOf","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","String","buf","readUInt16BE","foundIndex","found","hexWrite","remaining","strLen","parsed","parseInt","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","base64Slice","utf8Slice","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","subarray","typedArraySupport","poolSize","_augment","Symbol","species","fill","allocUnsafeSlow","_isBuffer","compare","a","list","pos","swap16","swap32","swap64","hexSlice","asciiSlice","latin1Slice","utf16leSlice","equals","inspect","max","target","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","ret","out","toHex","bytes","checkOffset","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","set","INVALID_BASE64_RE","leadSurrogate","replace","stringtrim","base64clean","src","dst","fs","os","assemblyscript","isDev","parseArguments","options","opt","default","boolean","checkDiagnostics","emitter","stderr","diagnostic","hasErrors","nextDiagnostic","formatDiagnostic","isTTY","isError","createStats","readTime","readCount","writeTime","writeCount","parseTime","parseCount","compileTime","compileCount","emitTime","emitCount","validateTime","validateCount","optimizeTime","optimizeCount","measure","times","printStats","stats","format","time","count","toFixed","stdout","createMemoryStream","stream","chunk","toBuffer","install","register","project","isBundle","version","sourceMapRoot","libraryPrefix","LIBRARY_PREFIX","defaultOptimizeLevel","defaultShrinkLevel","libraryFiles","(lib)/allocator/arena","(lib)/allocator/buddy","(lib)/allocator/common/alignment","(lib)/allocator/emscripten","(lib)/allocator/system","(lib)/allocator/tlsf","(lib)/array","(lib)/builtins","(lib)/collector/itcm","(lib)/error","(lib)/iterator","(lib)/map","(lib)/memory","(lib)/polyfills","(lib)/regexp","(lib)/set","(lib)/string","definitionFiles","assembly","portable","main","callback","readFile","readFileNode","writeFile","writeFileNode","listFiles","listFilesNode","readFileSync","err","stack","help","option","text","desc","map","line","baseDir","stdLibDir","libDirs","noLib","lib","parser","k","sourcePath","sourceText","parseFile","nextFile","startsWith","substring","hasBundledLibrary","libPath","libDir","libFiles","libText","compilerOptions","createOptions","setTarget","setNoTreeShaking","noTreeShaking","setNoAssert","setNoMemory","noMemory","setImportMemory","importMemory","setMemoryBase","memoryBase","setSourceMap","sourceMap","compile","dispose","validate","trapMode","runPasses","optimizeLevel","shrinkLevel","debugInfo","noDebug","optimize","setOptimizeLevel","setShrinkLevel","setDebugInfo","pass","noEmit","hasStdout","outFile","textFile","asmjsFile","binaryFile","binary","sourceMapURL","toBinary","writeStdout","JSON","parse","sourceRoot","sources","sourceContents","stringify","toText","asm","toAsmjs","contents","writeFileSync","files","sync","used","tscOptions","alwaysStrict","noImplicitAny","noImplicitReturns","noImplicitThis","noEmitOnError","strictNullChecks","experimentalDecorators","types","allowJs"],"mappings":"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","file":"asc.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory((function webpackLoadOptionalExternalModule() { try { return require(\"assemblyscript\"); } catch(e) {} }()));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"assemblyscript\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"asc\"] = factory((function webpackLoadOptionalExternalModule() { try { return require(\"assemblyscript\"); } catch(e) {} }()));\n\telse\n\t\troot[\"asc\"] = factory(root[\"assemblyscript\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__6__) {\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 = 14);\n","exports.nextTick = function nextTick(fn) {\n\tsetTimeout(fn, 0);\n};\n\nexports.platform = exports.arch = \nexports.execPath = exports.title = 'browser';\nexports.pid = 1;\nexports.browser = true;\nexports.env = {};\nexports.argv = [];\n\nexports.binding = function (name) {\n\tthrow new Error('No such module. (Possibly not yet loaded)')\n};\n\n(function () {\n var cwd = '/';\n var path;\n exports.cwd = function () { return cwd };\n exports.chdir = function (dir) {\n if (!path) path = require('path');\n cwd = path.resolve(dir, cwd);\n };\n})();\n\nexports.exit = exports.kill = \nexports.umask = exports.dlopen = \nexports.uptime = exports.memoryUsage = \nexports.uvCounters = function() {};\nexports.features = {};\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","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = parts.length - 1; i >= 0; i--) {\n var last = parts[i];\n if (last === '.') {\n parts.splice(i, 1);\n } else if (last === '..') {\n parts.splice(i, 1);\n up++;\n } else if (up) {\n parts.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (allowAboveRoot) {\n for (; up--; up) {\n parts.unshift('..');\n }\n }\n\n return parts;\n}\n\n// Split a filename into [root, dir, basename, ext], unix version\n// 'root' is just a slash, or nothing.\nvar splitPathRe =\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\nvar splitPath = function(filename) {\n return splitPathRe.exec(filename).slice(1);\n};\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n var resolvedPath = '',\n resolvedAbsolute = false;\n\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n var path = (i >= 0) ? arguments[i] : process.cwd();\n\n // Skip empty and invalid entries\n if (typeof path !== 'string') {\n throw new TypeError('Arguments to path.resolve must be strings');\n } else if (!path) {\n continue;\n }\n\n resolvedPath = path + '/' + resolvedPath;\n resolvedAbsolute = path.charAt(0) === '/';\n }\n\n // At this point the path should be resolved to a full absolute path, but\n // handle relative paths to be safe (might happen when process.cwd() fails)\n\n // Normalize the path\n resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n return !!p;\n }), !resolvedAbsolute).join('/');\n\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n var isAbsolute = exports.isAbsolute(path),\n trailingSlash = substr(path, -1) === '/';\n\n // Normalize the path\n path = normalizeArray(filter(path.split('/'), function(p) {\n return !!p;\n }), !isAbsolute).join('/');\n\n if (!path && !isAbsolute) {\n path = '.';\n }\n if (path && trailingSlash) {\n path += '/';\n }\n\n return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n var paths = Array.prototype.slice.call(arguments, 0);\n return exports.normalize(filter(paths, function(p, index) {\n if (typeof p !== 'string') {\n throw new TypeError('Arguments to path.join must be strings');\n }\n return p;\n }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n from = exports.resolve(from).substr(1);\n to = exports.resolve(to).substr(1);\n\n function trim(arr) {\n var start = 0;\n for (; start < arr.length; start++) {\n if (arr[start] !== '') break;\n }\n\n var end = arr.length - 1;\n for (; end >= 0; end--) {\n if (arr[end] !== '') break;\n }\n\n if (start > end) return [];\n return arr.slice(start, end - start + 1);\n }\n\n var fromParts = trim(from.split('/'));\n var toParts = trim(to.split('/'));\n\n var length = Math.min(fromParts.length, toParts.length);\n var samePartsLength = length;\n for (var i = 0; i < length; i++) {\n if (fromParts[i] !== toParts[i]) {\n samePartsLength = i;\n break;\n }\n }\n\n var outputParts = [];\n for (var i = samePartsLength; i < fromParts.length; i++) {\n outputParts.push('..');\n }\n\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function(path) {\n var result = splitPath(path),\n root = result[0],\n dir = result[1];\n\n if (!root && !dir) {\n // No dirname whatsoever\n return '.';\n }\n\n if (dir) {\n // It has a dirname, strip trailing slash\n dir = dir.substr(0, dir.length - 1);\n }\n\n return root + dir;\n};\n\n\nexports.basename = function(path, ext) {\n var f = splitPath(path)[2];\n // TODO: make this comparison case-insensitive on windows?\n if (ext && f.substr(-1 * ext.length) === ext) {\n f = f.substr(0, f.length - ext.length);\n }\n return f;\n};\n\n\nexports.extname = function(path) {\n return splitPath(path)[3];\n};\n\nfunction filter (xs, f) {\n if (xs.filter) return xs.filter(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n if (f(xs[i], i, xs)) res.push(xs[i]);\n }\n return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n ? function (str, start, len) { return str.substr(start, len) }\n : function (str, start, len) {\n if (start < 0) start = str.length + start;\n return str.substr(start, len);\n }\n;\n","module.exports = process.hrtime || hrtime\n\n// polyfil for window.performance.now\nvar performance = global.performance || {}\nvar performanceNow =\n performance.now ||\n performance.mozNow ||\n performance.msNow ||\n performance.oNow ||\n performance.webkitNow ||\n function(){ return (new Date()).getTime() }\n\n// generate timestamp or delta\n// see http://nodejs.org/api/process.html#process_process_hrtime\nfunction hrtime(previousTimestamp){\n var clocktime = performanceNow.call(performance)*1e-3\n var seconds = Math.floor(clocktime)\n var nanoseconds = Math.floor((clocktime%1)*1e9)\n if (previousTimestamp) {\n seconds = seconds - previousTimestamp[0]\n nanoseconds = nanoseconds - previousTimestamp[1]\n if (nanoseconds<0) {\n seconds--\n nanoseconds += 1e9\n }\n }\n return [seconds,nanoseconds]\n}","module.exports = function (args, opts) {\n if (!opts) opts = {};\n \n var flags = { bools : {}, strings : {}, unknownFn: null };\n\n if (typeof opts['unknown'] === 'function') {\n flags.unknownFn = opts['unknown'];\n }\n\n if (typeof opts['boolean'] === 'boolean' && opts['boolean']) {\n flags.allBools = true;\n } else {\n [].concat(opts['boolean']).filter(Boolean).forEach(function (key) {\n flags.bools[key] = true;\n });\n }\n \n var aliases = {};\n Object.keys(opts.alias || {}).forEach(function (key) {\n aliases[key] = [].concat(opts.alias[key]);\n aliases[key].forEach(function (x) {\n aliases[x] = [key].concat(aliases[key].filter(function (y) {\n return x !== y;\n }));\n });\n });\n\n [].concat(opts.string).filter(Boolean).forEach(function (key) {\n flags.strings[key] = true;\n if (aliases[key]) {\n flags.strings[aliases[key]] = true;\n }\n });\n\n var defaults = opts['default'] || {};\n \n var argv = { _ : [] };\n Object.keys(flags.bools).forEach(function (key) {\n setArg(key, defaults[key] === undefined ? false : defaults[key]);\n });\n \n var notFlags = [];\n\n if (args.indexOf('--') !== -1) {\n notFlags = args.slice(args.indexOf('--')+1);\n args = args.slice(0, args.indexOf('--'));\n }\n\n function argDefined(key, arg) {\n return (flags.allBools && /^--[^=]+$/.test(arg)) ||\n flags.strings[key] || flags.bools[key] || aliases[key];\n }\n\n function setArg (key, val, arg) {\n if (arg && flags.unknownFn && !argDefined(key, arg)) {\n if (flags.unknownFn(arg) === false) return;\n }\n\n var value = !flags.strings[key] && isNumber(val)\n ? Number(val) : val\n ;\n setKey(argv, key.split('.'), value);\n \n (aliases[key] || []).forEach(function (x) {\n setKey(argv, x.split('.'), value);\n });\n }\n\n function setKey (obj, keys, value) {\n var o = obj;\n keys.slice(0,-1).forEach(function (key) {\n if (o[key] === undefined) o[key] = {};\n o = o[key];\n });\n\n var key = keys[keys.length - 1];\n if (o[key] === undefined || flags.bools[key] || typeof o[key] === 'boolean') {\n o[key] = value;\n }\n else if (Array.isArray(o[key])) {\n o[key].push(value);\n }\n else {\n o[key] = [ o[key], value ];\n }\n }\n \n function aliasIsBoolean(key) {\n return aliases[key].some(function (x) {\n return flags.bools[x];\n });\n }\n\n for (var i = 0; i < args.length; i++) {\n var arg = args[i];\n \n if (/^--.+=/.test(arg)) {\n // Using [\\s\\S] instead of . because js doesn't support the\n // 'dotall' regex modifier. See:\n // http://stackoverflow.com/a/1068308/13216\n var m = arg.match(/^--([^=]+)=([\\s\\S]*)$/);\n var key = m[1];\n var value = m[2];\n if (flags.bools[key]) {\n value = value !== 'false';\n }\n setArg(key, value, arg);\n }\n else if (/^--no-.+/.test(arg)) {\n var key = arg.match(/^--no-(.+)/)[1];\n setArg(key, false, arg);\n }\n else if (/^--.+/.test(arg)) {\n var key = arg.match(/^--(.+)/)[1];\n var next = args[i + 1];\n if (next !== undefined && !/^-/.test(next)\n && !flags.bools[key]\n && !flags.allBools\n && (aliases[key] ? !aliasIsBoolean(key) : true)) {\n setArg(key, next, arg);\n i++;\n }\n else if (/^(true|false)$/.test(next)) {\n setArg(key, next === 'true', arg);\n i++;\n }\n else {\n setArg(key, flags.strings[key] ? '' : true, arg);\n }\n }\n else if (/^-[^-]+/.test(arg)) {\n var letters = arg.slice(1,-1).split('');\n \n var broken = false;\n for (var j = 0; j < letters.length; j++) {\n var next = arg.slice(j+2);\n \n if (next === '-') {\n setArg(letters[j], next, arg)\n continue;\n }\n \n if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) {\n setArg(letters[j], next.split('=')[1], arg);\n broken = true;\n break;\n }\n \n if (/[A-Za-z]/.test(letters[j])\n && /-?\\d+(\\.\\d*)?(e-?\\d+)?$/.test(next)) {\n setArg(letters[j], next, arg);\n broken = true;\n break;\n }\n \n if (letters[j+1] && letters[j+1].match(/\\W/)) {\n setArg(letters[j], arg.slice(j+2), arg);\n broken = true;\n break;\n }\n else {\n setArg(letters[j], flags.strings[letters[j]] ? '' : true, arg);\n }\n }\n \n var key = arg.slice(-1)[0];\n if (!broken && key !== '-') {\n if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1])\n && !flags.bools[key]\n && (aliases[key] ? !aliasIsBoolean(key) : true)) {\n setArg(key, args[i+1], arg);\n i++;\n }\n else if (args[i+1] && /true|false/.test(args[i+1])) {\n setArg(key, args[i+1] === 'true', arg);\n i++;\n }\n else {\n setArg(key, flags.strings[key] ? '' : true, arg);\n }\n }\n }\n else {\n if (!flags.unknownFn || flags.unknownFn(arg) !== false) {\n argv._.push(\n flags.strings['_'] || !isNumber(arg) ? arg : Number(arg)\n );\n }\n if (opts.stopEarly) {\n argv._.push.apply(argv._, args.slice(i + 1));\n break;\n }\n }\n }\n \n Object.keys(defaults).forEach(function (key) {\n if (!hasKey(argv, key.split('.'))) {\n setKey(argv, key.split('.'), defaults[key]);\n \n (aliases[key] || []).forEach(function (x) {\n setKey(argv, x.split('.'), defaults[key]);\n });\n }\n });\n \n if (opts['--']) {\n argv['--'] = new Array();\n notFlags.forEach(function(key) {\n argv['--'].push(key);\n });\n }\n else {\n notFlags.forEach(function(key) {\n argv._.push(key);\n });\n }\n\n return argv;\n};\n\nfunction hasKey (obj, keys) {\n var o = obj;\n keys.slice(0,-1).forEach(function (key) {\n o = (o[key] || {});\n });\n\n var key = keys[keys.length - 1];\n return key in o;\n}\n\nfunction isNumber (x) {\n if (typeof x === 'number') return true;\n if (/^0x[0-9a-f]+$/i.test(x)) return true;\n return /^[-+]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(e[-+]?\\d+)?$/.test(x);\n}\n\n","if(typeof __WEBPACK_EXTERNAL_MODULE__6__ === 'undefined') {var e = new Error(\"Cannot find module \\\"assemblyscript\\\"\"); e.code = 'MODULE_NOT_FOUND'; throw e;}\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__6__;","exports.endianness = function () { return 'LE' };\n\nexports.hostname = function () {\n if (typeof location !== 'undefined') {\n return location.hostname\n }\n else return '';\n};\n\nexports.loadavg = function () { return [] };\n\nexports.uptime = function () { return 0 };\n\nexports.freemem = function () {\n return Number.MAX_VALUE;\n};\n\nexports.totalmem = function () {\n return Number.MAX_VALUE;\n};\n\nexports.cpus = function () { return [] };\n\nexports.type = function () { return 'Browser' };\n\nexports.release = function () {\n if (typeof navigator !== 'undefined') {\n return navigator.appVersion;\n }\n return '';\n};\n\nexports.networkInterfaces\n= exports.getNetworkInterfaces\n= function () { return {} };\n\nexports.arch = function () { return 'javascript' };\n\nexports.platform = function () { return 'browser' };\n\nexports.tmpdir = exports.tmpDir = function () {\n return '/tmp';\n};\n\nexports.EOL = '\\n';\n\nexports.homedir = function () {\n\treturn '/'\n};\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction placeHoldersCount (b64) {\n var len = b64.length\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n}\n\nfunction byteLength (b64) {\n // base64 is 4/3 + up to two characters of the original data\n return (b64.length * 3 / 4) - placeHoldersCount(b64)\n}\n\nfunction toByteArray (b64) {\n var i, l, tmp, placeHolders, arr\n var len = b64.length\n placeHolders = placeHoldersCount(b64)\n\n arr = new Arr((len * 3 / 4) - placeHolders)\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0; i < l; i += 4) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp >> 16) & 0xFF\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xFF\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp = ((uint8[i] << 16) & 0xFF0000) + ((uint8[i + 1] << 8) & 0xFF00) + (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var output = ''\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n output += lookup[tmp >> 2]\n output += lookup[(tmp << 4) & 0x3F]\n output += '=='\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n output += lookup[tmp >> 10]\n output += lookup[(tmp >> 4) & 0x3F]\n output += lookup[(tmp << 2) & 0x3F]\n output += '='\n }\n\n parts.push(output)\n\n return parts.join('')\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","/**\r\n * @file Compiler frontend for node.js\r\n *\r\n * Uses the low-level API exported from src/index.ts so it works with the compiler compiled to\r\n * JavaScript as well as the compiler compiled to WebAssembly (eventually). Runs the sources\r\n * directly through ts-node if distribution files are not present (indicated by a `-dev` version).\r\n *\r\n * Can also be packaged as a bundle suitable for in-browser use with the standard library injected\r\n * in the build step. See dist/asc.js for the bundle and webpack.config.js for building details.\r\n */\r\n\r\nconst fs = require(\"fs\");\r\nconst path = require(\"path\");\r\nconst os = require(\"os\");\r\n\r\n// Use distribution files if present, otherwise run the sources directly\r\nvar assemblyscript, isDev;\r\n(() => {\r\n try {\r\n assemblyscript = require(\"../dist/assemblyscript.js\");\r\n isDev = false;\r\n try { require(\"source-map-support\").install(); } catch (e) {/* optional */}\r\n } catch (e) {\r\n try {\r\n require(\"ts-node\").register({ project: path.join(__dirname, \"..\", \"src\", \"tsconfig.json\") });\r\n require(\"../src/glue/js\");\r\n assemblyscript = require(\"../src\");\r\n isDev = true;\r\n } catch (e) {\r\n // last resort: same directory CommonJS\r\n assemblyscript = eval(\"require('./assemblyscript')\");\r\n isDev = false;\r\n }\r\n }\r\n})();\r\n\r\n/** Whether this is a webpack bundle or not. */\r\nexports.isBundle = typeof BUNDLE_VERSION === \"string\";\r\n\r\n/** Whether asc runs the sources directly or not. */\r\nexports.isDev = isDev;\r\n\r\n/** AssemblyScript veresion. */\r\nexports.version = exports.isBundle ? BUNDLE_VERSION : require(\"../package.json\").version;\r\n\r\n/** Available options. */\r\nexports.options = require(\"./asc.json\");\r\n\r\n/** Common root used in source maps. */\r\nexports.sourceMapRoot = \"assemblyscript:///\";\r\n\r\n/** Prefix used for library files. */\r\nexports.libraryPrefix = assemblyscript.LIBRARY_PREFIX;\r\n\r\n/** Default Binaryen optimization level. */\r\nexports.defaultOptimizeLevel = 2;\r\n\r\n/** Default Binaryen shrink level. */\r\nexports.defaultShrinkLevel = 1;\r\n\r\n/** Bundled library files, if any. */\r\nexports.libraryFiles = exports.isBundle ? BUNDLE_LIBRARY : {};\r\n\r\n/** Bundled definition files, if any. */\r\nexports.definitionFiles = exports.isBundle ? BUNDLE_DEFINITIONS : {};\r\n\r\n/** Runs the command line utility using the specified arguments array. */\r\nexports.main = function main(argv, options, callback) {\r\n if (typeof options === \"function\") {\r\n callback = options;\r\n options = {};\r\n } else if (!options) {\r\n options = {};\r\n }\r\n\r\n const stdout = options.stdout || process.stdout;\r\n const stderr = options.stderr || process.stderr;\r\n const readFile = options.readFile || readFileNode;\r\n const writeFile = options.writeFile || writeFileNode;\r\n const listFiles = options.listFiles || listFilesNode;\r\n const stats = options.stats || createStats();\r\n\r\n // All of the above must be specified in browser environments\r\n if (!stdout) throw Error(\"'options.stdout' must be specified\");\r\n if (!stderr) throw Error(\"'options.stderr' must be specified\");\r\n if (!fs.readFileSync) {\r\n if (readFile === readFileNode) throw Error(\"'options.readFile' must be specified\");\r\n if (writeFile === writeFileNode) throw Error(\"'options.writeFile' must be specified\");\r\n if (listFiles === listFilesNode) throw Error(\"'options.listFiles' must be specified\");\r\n }\r\n\r\n const args = parseArguments(argv);\r\n const indent = 24;\r\n\r\n // Use default callback if none is provided\r\n if (!callback) callback = function defaultCallback(err) {\r\n var code = 0;\r\n if (err) {\r\n stderr.write(err.stack + os.EOL);\r\n code = 1;\r\n }\r\n return code;\r\n };\r\n\r\n // Just print the version if requested\r\n if (args.version) {\r\n stdout.write(\"Version \" + exports.version + (isDev ? \"-dev\" : \"\") + os.EOL);\r\n return callback(null);\r\n }\r\n // Print the help message if requested or no source files are provided\r\n if (args.help || args._.length < 1) {\r\n const opts = [];\r\n Object.keys(exports.options).forEach(name => {\r\n var option = exports.options[name];\r\n var text = \" \";\r\n text += \"--\" + name;\r\n if (option.aliases && option.aliases[0].length === 1) {\r\n text += \", -\" + option.aliases[0];\r\n }\r\n while (text.length < indent) {\r\n text += \" \";\r\n }\r\n if (Array.isArray(option.desc)) {\r\n opts.push(text + option.desc[0] + option.desc.slice(1).map(line => {\r\n for (let i = 0; i < indent; ++i) {\r\n line = \" \" + line;\r\n }\r\n return os.EOL + line;\r\n }).join(\"\"));\r\n } else {\r\n opts.push(text + option.desc);\r\n }\r\n });\r\n\r\n (args.help ? stdout : stderr).write([\r\n \"Version \" + exports.version + (isDev ? \"-dev\" : \"\"),\r\n \"Syntax: asc [entryFile ...] [options]\",\r\n \"\",\r\n \"Examples: asc hello.ts\",\r\n \" asc hello.ts -b hello.wasm -t hello.wat\",\r\n \" asc hello1.ts hello2.ts -b -O > hello.wasm\",\r\n \"\",\r\n \"Options:\"\r\n ].concat(opts).join(os.EOL) + os.EOL);\r\n return callback(null);\r\n }\r\n\r\n // Set up base directory\r\n const baseDir = args.baseDir ? path.resolve(args.baseDir) : process.cwd();\r\n\r\n // Include standard library if --noLib isn't set\r\n const stdLibDir = path.join(__dirname, \"..\", \"std\", \"assembly\");\r\n const libDirs = args.noLib ? [] : [ stdLibDir ];\r\n\r\n // Include custom library components (with or without stdlib)\r\n if (args.lib) {\r\n if (typeof args.lib === \"string\") {\r\n args.lib = args.lib.split(\",\");\r\n }\r\n Array.prototype.push.apply(libDirs, args.lib.map(trim));\r\n }\r\n\r\n // Begin parsing\r\n var parser = null;\r\n\r\n // Include entry files\r\n for (let i = 0, k = args._.length; i < k; ++i) {\r\n const filename = args._[i];\r\n\r\n let sourcePath = filename.replace(/\\\\/g, \"/\").replace(/(\\.ts|\\/)$/, \"\");\r\n\r\n // Try entryPath.ts, then entryPath/index.ts\r\n let sourceText = readFile(path.join(baseDir, sourcePath) + \".ts\");\r\n if (sourceText === null) {\r\n sourceText = readFile(path.join(baseDir, sourcePath, \"index.ts\"));\r\n if (sourceText === null) {\r\n return callback(Error(\"Entry file '\" + sourcePath + \".ts' not found.\"));\r\n } else {\r\n sourcePath += \"/index.ts\";\r\n }\r\n } else {\r\n sourcePath += \".ts\";\r\n }\r\n\r\n stats.parseCount++;\r\n stats.parseTime += measure(() => {\r\n parser = assemblyscript.parseFile(sourceText, sourcePath, true, parser);\r\n });\r\n\r\n while ((sourcePath = parser.nextFile()) != null) {\r\n let found = false;\r\n\r\n // Load library file if explicitly requested\r\n if (sourcePath.startsWith(exports.libraryPrefix)) {\r\n for (let i = 0, k = libDirs.length; i < k; ++i) {\r\n if (exports.libraryFiles.hasOwnProperty(sourcePath)) {\r\n sourceText = exports.libraryFiles[sourcePath];\r\n } else {\r\n sourceText = readFile(path.join(\r\n libDirs[i],\r\n sourcePath.substring(exports.libraryPrefix.length) + \".ts\")\r\n );\r\n if (sourceText !== null) {\r\n sourcePath += \".ts\";\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Otherwise try nextFile.ts, nextFile/index.ts, (lib)/nextFile.ts\r\n } else {\r\n sourceText = readFile(path.join(baseDir, sourcePath + \".ts\"));\r\n if (sourceText === null) {\r\n sourceText = readFile(path.join(baseDir, sourcePath, \"index.ts\"));\r\n if (sourceText === null) {\r\n for (let i = 0, k = libDirs.length; i < k; ++i) {\r\n const dir = libDirs[i];\r\n const key = exports.libraryPrefix + sourcePath;\r\n if (exports.libraryFiles.hasOwnProperty(key)) {\r\n sourceText = exports.libraryFiles[key];\r\n } else {\r\n sourceText = readFile(path.join(dir, sourcePath + \".ts\"));\r\n if (sourceText !== null) {\r\n sourcePath = exports.libraryPrefix + sourcePath + \".ts\";\r\n break;\r\n }\r\n }\r\n }\r\n if (sourceText === null) {\r\n return callback(\r\n Error(\"Import file '\" + sourcePath + \".ts' not found.\")\r\n );\r\n }\r\n } else {\r\n sourcePath += \"/index.ts\";\r\n }\r\n } else {\r\n sourcePath += \".ts\";\r\n }\r\n }\r\n stats.parseCount++;\r\n stats.parseTime += measure(() => {\r\n assemblyscript.parseFile(sourceText, sourcePath, false, parser);\r\n });\r\n }\r\n if (checkDiagnostics(parser, stderr)) {\r\n return callback(Error(\"Parse error\"));\r\n }\r\n }\r\n\r\n // Include (other) library components\r\n var hasBundledLibrary = false;\r\n if (!args.noLib)\r\n Object.keys(exports.libraryFiles).forEach(libPath => {\r\n if (libPath.lastIndexOf(\"/\") >= exports.libraryPrefix.length) return;\r\n stats.parseCount++;\r\n stats.parseTime += measure(() => {\r\n parser = assemblyscript.parseFile(\r\n exports.libraryFiles[libPath],\r\n libPath + \".ts\",\r\n false,\r\n parser\r\n );\r\n });\r\n hasBundledLibrary = true;\r\n });\r\n for (let i = 0, k = libDirs.length; i < k; ++i) {\r\n if (i === 0 && hasBundledLibrary) continue;\r\n let libDir = libDirs[i];\r\n let libFiles = listFiles(libDir);\r\n for (let j = 0, l = libFiles.length; j < l; ++j) {\r\n let libPath = libFiles[j];\r\n let libText = readFile(path.join(libDir, libPath));\r\n if (libText === null) {\r\n return callback(Error(\"Library file '\" + libPath + \"' not found.\"));\r\n }\r\n stats.parseCount++;\r\n stats.parseTime += measure(() => {\r\n parser = assemblyscript.parseFile(\r\n libText,\r\n exports.libraryPrefix + libPath,\r\n false,\r\n parser\r\n );\r\n });\r\n }\r\n }\r\n\r\n // Begin compilation\r\n const compilerOptions = assemblyscript.createOptions();\r\n assemblyscript.setTarget(compilerOptions, 0);\r\n assemblyscript.setNoTreeShaking(compilerOptions, !!args.noTreeShaking);\r\n assemblyscript.setNoAssert(compilerOptions, !!args.noAssert);\r\n assemblyscript.setNoMemory(compilerOptions, !!args.noMemory);\r\n assemblyscript.setImportMemory(compilerOptions, !!args.importMemory);\r\n assemblyscript.setMemoryBase(compilerOptions, args.memoryBase >>> 0);\r\n assemblyscript.setSourceMap(compilerOptions, args.sourceMap != null);\r\n\r\n var module;\r\n stats.compileCount++;\r\n (() => {\r\n try {\r\n stats.compileTime += measure(() => {\r\n module = assemblyscript.compile(parser, compilerOptions);\r\n });\r\n } catch (e) {\r\n return callback(e);\r\n }\r\n })();\r\n if (checkDiagnostics(parser, stderr)) {\r\n if (module) module.dispose();\r\n return callback(Error(\"Compile error\"));\r\n }\r\n\r\n // Validate the module if requested\r\n if (args.validate) {\r\n stats.validateCount++;\r\n stats.validateTime += measure(() => {\r\n if (!module.validate()) {\r\n module.dispose();\r\n return callback(Error(\"Validate error\"));\r\n }\r\n });\r\n }\r\n\r\n // Set Binaryen-specific options\r\n if (args.trapMode === \"clamp\") {\r\n stats.optimizeCount++;\r\n stats.optimizeTime += measure(() => {\r\n module.runPasses([ \"trap-mode-clamp\" ]);\r\n });\r\n } else if (args.trapMode === \"js\") {\r\n stats.optimizeCount++;\r\n stats.optimizeTime += measure(() => {\r\n module.runPasses([ \"trap-mode-js\" ]);\r\n });\r\n } else if (args.trapMode !== \"allow\") {\r\n module.dispose();\r\n return callback(Error(\"Unsupported trap mode\"));\r\n }\r\n\r\n var optimizeLevel = -1;\r\n var shrinkLevel = 0;\r\n var debugInfo = !args.noDebug;\r\n\r\n if (args.optimize !== false) {\r\n if (typeof args.optimize === \"number\") {\r\n optimizeLevel = args.optimize;\r\n } else if (args[\"0\"]) {\r\n optimizeLevel = 0;\r\n } else if (args[\"1\"]) {\r\n optimizeLevel = 1;\r\n } else if (args[\"2\"]) {\r\n optimizeLevel = 2;\r\n } else if (args[\"3\"]) {\r\n optimizeLevel = 3;\r\n } else if (args.optimize === true) {\r\n optimizeLevel = exports.defaultOptimizeLevel;\r\n shrinkLevel = exports.defaultShrinkLevel;\r\n } else\r\n optimizeLevel = 0;\r\n }\r\n\r\n if (args[\"s\"]) {\r\n shrinkLevel = 1;\r\n } else if (args[\"z\"]) {\r\n shrinkLevel = 2;\r\n }\r\n\r\n if (typeof args.optimizeLevel === \"number\") {\r\n optimizeLevel = args.optimizeLevel;\r\n }\r\n\r\n if (typeof args.shrinkLevel === \"number\") {\r\n shrinkLevel = args.shrinkLevel;\r\n } else if (args.shrinkLevel === \"s\") {\r\n shrinkLevel = 1;\r\n } else if (args.shrinkLevel === \"z\") {\r\n shrinkLevel = 2;\r\n }\r\n\r\n module.setOptimizeLevel(optimizeLevel > 0 ? optimizeLevel : 0);\r\n module.setShrinkLevel(shrinkLevel);\r\n module.setDebugInfo(debugInfo);\r\n\r\n var runPasses = [];\r\n if (args.runPasses) {\r\n if (typeof args.runPasses === \"string\") {\r\n args.runPasses = args.runPasses.split(\",\");\r\n }\r\n if (args.runPasses.length) {\r\n args.runPasses.forEach(pass => {\r\n if (runPasses.indexOf(pass) < 0)\r\n runPasses.push(pass);\r\n });\r\n }\r\n }\r\n\r\n // Optimize the module if requested\r\n if (optimizeLevel >= 0) {\r\n stats.optimizeCount++;\r\n stats.optimizeTime += measure(() => {\r\n module.optimize();\r\n });\r\n }\r\n\r\n // Run additional passes if requested\r\n if (runPasses.length) {\r\n stats.optimizeCount++;\r\n stats.optimizeTime += measure(() => {\r\n module.runPasses(runPasses.map(pass => pass.trim()));\r\n });\r\n }\r\n\r\n // Prepare output\r\n if (!args.noEmit) {\r\n let hasStdout = false;\r\n\r\n if (args.outFile != null) {\r\n if (/\\.was?t$/.test(args.outFile) && args.textFile == null) {\r\n args.textFile = args.outFile;\r\n } else if (/\\.js$/.test(args.outFile) && args.asmjsFile == null) {\r\n args.asmjsFile = args.outFile;\r\n } else if (args.binaryFile == null) {\r\n args.binaryFile = args.outFile;\r\n }\r\n }\r\n\r\n // Write binary\r\n if (args.binaryFile != null) {\r\n let sourceMapURL = args.sourceMap != null\r\n ? args.sourceMap.length\r\n ? args.sourceMap\r\n : path.basename(args.binaryFile) + \".map\"\r\n : null;\r\n\r\n let binary;\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n binary = module.toBinary(sourceMapURL)\r\n });\r\n\r\n if (args.binaryFile.length) {\r\n writeFile(path.join(baseDir, args.binaryFile), binary.output);\r\n } else {\r\n writeStdout(binary.output);\r\n hasStdout = true;\r\n }\r\n\r\n // Post-process source map\r\n if (binary.sourceMap != null) {\r\n if (args.binaryFile.length) {\r\n let sourceMap = JSON.parse(binary.sourceMap);\r\n sourceMap.sourceRoot = exports.sourceMapRoot;\r\n sourceMap.sources.forEach((name, index) => {\r\n let text = null;\r\n if (name.startsWith(exports.libraryPrefix)) {\r\n for (let i = 0, k = libDirs.length; i < k; ++i) {\r\n text = readFile(path.join(\r\n libDirs[i],\r\n name.substring(exports.libraryPrefix.length))\r\n );\r\n if (text !== null) break;\r\n }\r\n } else {\r\n text = readFile(path.join(baseDir, name));\r\n }\r\n if (text === null) {\r\n return callback(Error(\"Source file '\" + name + \"' not found.\"));\r\n }\r\n if (!sourceMap.sourceContents) sourceMap.sourceContents = [];\r\n sourceMap.sourceContents[index] = text;\r\n });\r\n writeFile(path.join(\r\n baseDir,\r\n path.dirname(args.binaryFile),\r\n path.basename(sourceMapURL)\r\n ), JSON.stringify(sourceMap));\r\n } else {\r\n stderr.write(\"Skipped source map (stdout already occupied)\" + os.EOL);\r\n }\r\n }\r\n }\r\n\r\n // Write text\r\n if (\r\n args.textFile != null || (\r\n args.binaryFile == null &&\r\n args.asmjsFile == null\r\n )\r\n ) {\r\n let text;\r\n if (args.textFile && args.textFile.length) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n text = module.toText();\r\n });\r\n writeFile(path.join(baseDir, args.textFile), text);\r\n } else if (!hasStdout) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n text = module.toText()\r\n });\r\n writeStdout(text);\r\n hasStdout = true;\r\n }\r\n }\r\n\r\n // Write asm.js\r\n if (args.asmjsFile != null) {\r\n let asm;\r\n if (args.asmjsFile.length) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n asm = module.toAsmjs();\r\n });\r\n writeFile(path.join(baseDir, args.asmjsFile), asm);\r\n } else if (!hasStdout) {\r\n stats.emitCount++;\r\n stats.emitTime += measure(() => {\r\n asm = module.toAsmjs();\r\n });\r\n writeStdout(asm);\r\n hasStdout = true;\r\n }\r\n }\r\n }\r\n\r\n module.dispose();\r\n if (args.measure) {\r\n printStats(stats, stderr);\r\n }\r\n return callback(null);\r\n\r\n function readFileNode(filename) {\r\n try {\r\n let text;\r\n stats.readCount++;\r\n stats.readTime += measure(() => {\r\n text = fs.readFileSync(filename, { encoding: \"utf8\" });\r\n });\r\n return text;\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n function writeFileNode(filename, contents) {\r\n try {\r\n stats.writeCount++;\r\n stats.writeTime += measure(() => {\r\n if (typeof contents === \"string\") {\r\n fs.writeFileSync(filename, contents, { encoding: \"utf8\" } );\r\n } else {\r\n fs.writeFileSync(filename, contents);\r\n }\r\n });\r\n return true;\r\n } catch (e) {\r\n return false;\r\n }\r\n }\r\n\r\n function listFilesNode(dirname) {\r\n var files;\r\n try {\r\n stats.readTime += measure(() => {\r\n files = require(\"glob\").sync(\"*.ts\", { cwd: dirname });\r\n });\r\n return files;\r\n } catch (e) {\r\n return [];\r\n }\r\n }\r\n\r\n function writeStdout(contents) {\r\n if (!writeStdout.used) {\r\n stats.writeCount++;\r\n writeStdout.used = true;\r\n }\r\n stats.writeTime += measure(() => {\r\n if (typeof contents === \"string\") {\r\n stdout.write(contents, { encoding: \"utf8\" });\r\n } else {\r\n stdout.write(contents);\r\n }\r\n });\r\n }\r\n}\r\n\r\n/** Parses the specified command line arguments. */\r\nfunction parseArguments(argv) {\r\n const opts = {};\r\n Object.keys(exports.options).forEach(key => {\r\n const opt = exports.options[key];\r\n if (opt.aliases) {\r\n (opts.alias || (opts.alias = {}))[key] = opt.aliases;\r\n }\r\n if (opt.default !== undefined) {\r\n (opts.default || (opts.default = {}))[key] = opt.default;\r\n }\r\n if (opt.type === \"string\") {\r\n (opts.string || (opts.string = [])).push(key);\r\n } else if (opt.type === \"boolean\") {\r\n (opts.boolean || (opts.boolean = [])).push(key);\r\n }\r\n });\r\n return require(\"minimist\")(argv, opts);\r\n}\r\n\r\nexports.parseArguments = parseArguments;\r\n\r\n/** Checks diagnostics emitted so far for errors. */\r\nfunction checkDiagnostics(emitter, stderr) {\r\n var diagnostic;\r\n var hasErrors = false;\r\n while ((diagnostic = assemblyscript.nextDiagnostic(emitter)) != null) {\r\n stderr.write(\r\n assemblyscript.formatDiagnostic(diagnostic, stderr.isTTY, true) +\r\n os.EOL + os.EOL\r\n );\r\n if (assemblyscript.isError(diagnostic)) hasErrors = true;\r\n }\r\n return hasErrors;\r\n}\r\n\r\nexports.checkDiagnostics = checkDiagnostics;\r\n\r\n/** Creates an empty set of stats. */\r\nfunction createStats() {\r\n return {\r\n readTime: 0,\r\n readCount: 0,\r\n writeTime: 0,\r\n writeCount: 0,\r\n parseTime: 0,\r\n parseCount: 0,\r\n compileTime: 0,\r\n compileCount: 0,\r\n emitTime: 0,\r\n emitCount: 0,\r\n validateTime: 0,\r\n validateCount: 0,\r\n optimizeTime: 0,\r\n optimizeCount: 0\r\n };\r\n}\r\n\r\nexports.createStats = createStats;\r\n\r\nif (!process.hrtime) process.hrtime = require(\"browser-process-hrtime\");\r\n\r\n/** Measures the execution time of the specified function. */\r\nfunction measure(fn) {\r\n const start = process.hrtime();\r\n fn();\r\n const times = process.hrtime(start);\r\n return times[0] * 1e9 + times[1];\r\n}\r\n\r\nexports.measure = measure;\r\n\r\n/** Formats and prints out the contents of a set of stats. */\r\nfunction printStats(stats, output) {\r\n function format(time, count) {\r\n return time ? (time / 1e6).toFixed(3) + \" ms\" : \"N/A\";\r\n }\r\n (output || process.stdout).write([\r\n \"I/O Read : \" + format(stats.readTime, stats.readCount),\r\n \"I/O Write : \" + format(stats.writeTime, stats.writeCount),\r\n \"Parse : \" + format(stats.parseTime, stats.parseCount),\r\n \"Compile : \" + format(stats.compileTime, stats.compileCount),\r\n \"Emit : \" + format(stats.emitTime, stats.emitCount),\r\n \"Validate : \" + format(stats.validateTime, stats.validateCount),\r\n \"Optimize : \" + format(stats.optimizeTime, stats.optimizeCount)\r\n ].join(os.EOL) + os.EOL);\r\n}\r\n\r\nexports.printStats = printStats;\r\n\r\n/** Creates a memory stream that can be used in place of stdout/stderr. */\r\nfunction createMemoryStream(fn) {\r\n var stream = [];\r\n stream.write = function(chunk) {\r\n if (typeof chunk === \"string\") {\r\n this.push(Buffer.from(chunk, \"utf8\"));\r\n } else {\r\n this.push(chunk);\r\n }\r\n if (fn) fn(chunk);\r\n };\r\n stream.toBuffer = function() {\r\n return Buffer.concat(this);\r\n };\r\n stream.toString = function() {\r\n return this.toBuffer().toString(\"utf8\");\r\n };\r\n return stream;\r\n}\r\n\r\nexports.createMemoryStream = createMemoryStream;\r\n\r\n/** Compatible TypeScript compiler options. */\r\nexports.tscOptions = {\r\n alwaysStrict: true,\r\n noImplicitAny: true,\r\n noImplicitReturns: true,\r\n noImplicitThis: true,\r\n noEmitOnError: true,\r\n strictNullChecks: true,\r\n experimentalDecorators: true,\r\n target: \"esnext\",\r\n module: \"commonjs\",\r\n noLib: true,\r\n types: [],\r\n allowJs: false\r\n};\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/assemblyscript.js.map b/dist/assemblyscript.js.map index beee0211..03a6dfcd 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 ) {\r\n var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range);\r\n this.diagnostics.push(message);\r\n // console.log(formatDiagnosticMessage(message, true, true) + \"\\n\"); // temporary\r\n // console.log(new Error(\"stack\").stack);\r\n }\r\n\r\n error(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.ERROR, range, arg0, arg1, arg2);\r\n }\r\n\r\n info(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.INFO, range, arg0, arg1, arg2);\r\n }\r\n\r\n warning(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.WARNING, range, arg0, arg1, arg2);\r\n }\r\n}\r\n","import {\r\n Target\r\n} from \"./compiler\";\r\n\r\nexport type ModuleRef = usize;\r\nexport type FunctionTypeRef = usize;\r\nexport type FunctionRef = usize;\r\nexport type ExpressionRef = usize;\r\nexport type GlobalRef = usize;\r\nexport type ImportRef = usize;\r\nexport type ExportRef = usize;\r\nexport type Index = u32;\r\n\r\nexport enum NativeType {\r\n None = _BinaryenTypeNone(),\r\n I32 = _BinaryenTypeInt32(),\r\n I64 = _BinaryenTypeInt64(),\r\n F32 = _BinaryenTypeFloat32(),\r\n F64 = _BinaryenTypeFloat64(),\r\n Unreachable = _BinaryenTypeUnreachable(),\r\n Auto = _BinaryenTypeAuto()\r\n}\r\n\r\nexport enum ExpressionId {\r\n Invalid = _BinaryenInvalidId(),\r\n Block = _BinaryenBlockId(),\r\n If = _BinaryenIfId(),\r\n Loop = _BinaryenLoopId(),\r\n Break = _BinaryenBreakId(),\r\n Switch = _BinaryenSwitchId(),\r\n Call = _BinaryenCallId(),\r\n CallImport = _BinaryenCallImportId(),\r\n CallIndirect = _BinaryenCallIndirectId(),\r\n GetLocal = _BinaryenGetLocalId(),\r\n SetLocal = _BinaryenSetLocalId(),\r\n GetGlobal = _BinaryenGetGlobalId(),\r\n SetGlobal = _BinaryenSetGlobalId(),\r\n Load = _BinaryenLoadId(),\r\n Store = _BinaryenStoreId(),\r\n Const = _BinaryenConstId(),\r\n Unary = _BinaryenUnaryId(),\r\n Binary = _BinaryenBinaryId(),\r\n Select = _BinaryenSelectId(),\r\n Drop = _BinaryenDropId(),\r\n Return = _BinaryenReturnId(),\r\n Host = _BinaryenHostId(),\r\n Nop = _BinaryenNopId(),\r\n Unreachable = _BinaryenUnreachableId(),\r\n AtomicCmpxchg = _BinaryenAtomicCmpxchgId(),\r\n AtomicRMW = _BinaryenAtomicRMWId(),\r\n AtomicWait = _BinaryenAtomicWaitId(),\r\n AtomicWake = _BinaryenAtomicWakeId()\r\n}\r\n\r\nexport enum UnaryOp {\r\n ClzI32 = _BinaryenClzInt32(),\r\n CtzI32 = _BinaryenCtzInt32(),\r\n PopcntI32 = _BinaryenPopcntInt32(),\r\n NegF32 = _BinaryenNegFloat32(),\r\n AbsF32 = _BinaryenAbsFloat32(),\r\n CeilF32 = _BinaryenCeilFloat32(),\r\n FloorF32 = _BinaryenFloorFloat32(),\r\n TruncF32 = _BinaryenTruncFloat32(),\r\n NearestF32 = _BinaryenNearestFloat32(),\r\n SqrtF32 = _BinaryenSqrtFloat32(),\r\n EqzI32 = _BinaryenEqZInt32(),\r\n ClzI64 = _BinaryenClzInt64(),\r\n CtzI64 = _BinaryenCtzInt64(),\r\n PopcntI64 = _BinaryenPopcntInt64(),\r\n NegF64 = _BinaryenNegFloat64(),\r\n AbsF64 = _BinaryenAbsFloat64(),\r\n CeilF64 = _BinaryenCeilFloat64(),\r\n FloorF64 = _BinaryenFloorFloat64(),\r\n TruncF64 = _BinaryenTruncFloat64(),\r\n NearestF64 = _BinaryenNearestFloat64(),\r\n SqrtF64 = _BinaryenSqrtFloat64(),\r\n EqzI64 = _BinaryenEqZInt64(),\r\n ExtendI32 = _BinaryenExtendSInt32(),\r\n ExtendU32 = _BinaryenExtendUInt32(),\r\n WrapI64 = _BinaryenWrapInt64(),\r\n TruncF32ToI32 = _BinaryenTruncSFloat32ToInt32(),\r\n TruncF32ToI64 = _BinaryenTruncSFloat32ToInt64(),\r\n TruncF32ToU32 = _BinaryenTruncUFloat32ToInt32(),\r\n TruncF32ToU64 = _BinaryenTruncUFloat32ToInt64(),\r\n TruncF64ToI32 = _BinaryenTruncSFloat64ToInt32(),\r\n TruncF64ToI64 = _BinaryenTruncSFloat64ToInt64(),\r\n TruncF64ToU32 = _BinaryenTruncUFloat64ToInt32(),\r\n TruncF64ToU64 = _BinaryenTruncUFloat64ToInt64(),\r\n ReinterpretF32 = _BinaryenReinterpretFloat32(),\r\n ReinterpretF64 = _BinaryenReinterpretFloat64(),\r\n ConvertI32ToF32 = _BinaryenConvertSInt32ToFloat32(),\r\n ConvertI32ToF64 = _BinaryenConvertSInt32ToFloat64(),\r\n ConvertU32ToF32 = _BinaryenConvertUInt32ToFloat32(),\r\n ConvertU32ToF64 = _BinaryenConvertUInt32ToFloat64(),\r\n ConvertI64ToF32 = _BinaryenConvertSInt64ToFloat32(),\r\n ConvertI64ToF64 = _BinaryenConvertSInt64ToFloat64(),\r\n ConvertU64ToF32 = _BinaryenConvertUInt64ToFloat32(),\r\n ConvertU64ToF64 = _BinaryenConvertUInt64ToFloat64(),\r\n PromoteF32 = _BinaryenPromoteFloat32(),\r\n DemoteF64 = _BinaryenDemoteFloat64(),\r\n ReinterpretI32 = _BinaryenReinterpretInt32(),\r\n ReinterpretI64 = _BinaryenReinterpretInt64()\r\n\r\n // see: https://github.com/WebAssembly/threads/blob/master/proposals/threads/Overview.md#new-sign-extending-operators\r\n // ExtendI8ToI32 =_BinaryenExtendS8Int32()\r\n // ExtendI16ToI32 = _BinaryenExtendS16Int32()\r\n // ExtendI8ToI64 = _BinaryenExtendS8Int64() // operand is I64\r\n // ExtendI16ToI64 = _BinaryenExtendS16Int64()\r\n // ExtendI32ToI64 = _BinaryenExtendS32Int64()\r\n\r\n // see: https://github.com/WebAssembly/nontrapping-float-to-int-conversions\r\n // TruncF32ToI32Sat\r\n // TruncF32ToU32Sat\r\n // TruncF64ToI32Sat\r\n // TruncF64ToU32Sat\r\n // TruncF32ToI64Sat\r\n // TruncF32ToU64Sat\r\n // TruncF64ToI64Sat\r\n // TruncF64ToU64Sat\r\n}\r\n\r\nexport enum BinaryOp {\r\n AddI32 = _BinaryenAddInt32(),\r\n SubI32 = _BinaryenSubInt32(),\r\n MulI32 = _BinaryenMulInt32(),\r\n DivI32 = _BinaryenDivSInt32(),\r\n DivU32 = _BinaryenDivUInt32(),\r\n RemI32 = _BinaryenRemSInt32(),\r\n RemU32 = _BinaryenRemUInt32(),\r\n AndI32 = _BinaryenAndInt32(),\r\n OrI32 = _BinaryenOrInt32(),\r\n XorI32 = _BinaryenXorInt32(),\r\n ShlI32 = _BinaryenShlInt32(),\r\n ShrU32 = _BinaryenShrUInt32(),\r\n ShrI32 = _BinaryenShrSInt32(),\r\n RotlI32 = _BinaryenRotLInt32(),\r\n RotrI32 = _BinaryenRotRInt32(),\r\n EqI32 = _BinaryenEqInt32(),\r\n NeI32 = _BinaryenNeInt32(),\r\n LtI32 = _BinaryenLtSInt32(),\r\n LtU32 = _BinaryenLtUInt32(),\r\n LeI32 = _BinaryenLeSInt32(),\r\n LeU32 = _BinaryenLeUInt32(),\r\n GtI32 = _BinaryenGtSInt32(),\r\n GtU32 = _BinaryenGtUInt32(),\r\n GeI32 = _BinaryenGeSInt32(),\r\n GeU32 = _BinaryenGeUInt32(),\r\n AddI64 = _BinaryenAddInt64(),\r\n SubI64 = _BinaryenSubInt64(),\r\n MulI64 = _BinaryenMulInt64(),\r\n DivI64 = _BinaryenDivSInt64(),\r\n DivU64 = _BinaryenDivUInt64(),\r\n RemI64 = _BinaryenRemSInt64(),\r\n RemU64 = _BinaryenRemUInt64(),\r\n AndI64 = _BinaryenAndInt64(),\r\n OrI64 = _BinaryenOrInt64(),\r\n XorI64 = _BinaryenXorInt64(),\r\n ShlI64 = _BinaryenShlInt64(),\r\n ShrU64 = _BinaryenShrUInt64(),\r\n ShrI64 = _BinaryenShrSInt64(),\r\n RotlI64 = _BinaryenRotLInt64(),\r\n RotrI64 = _BinaryenRotRInt64(),\r\n EqI64 = _BinaryenEqInt64(),\r\n NeI64 = _BinaryenNeInt64(),\r\n LtI64 = _BinaryenLtSInt64(),\r\n LtU64 = _BinaryenLtUInt64(),\r\n LeI64 = _BinaryenLeSInt64(),\r\n LeU64 = _BinaryenLeUInt64(),\r\n GtI64 = _BinaryenGtSInt64(),\r\n GtU64 = _BinaryenGtUInt64(),\r\n GeI64 = _BinaryenGeSInt64(),\r\n GeU64 = _BinaryenGeUInt64(),\r\n AddF32 = _BinaryenAddFloat32(),\r\n SubF32 = _BinaryenSubFloat32(),\r\n MulF32 = _BinaryenMulFloat32(),\r\n DivF32 = _BinaryenDivFloat32(),\r\n CopysignF32 = _BinaryenCopySignFloat32(),\r\n MinF32 = _BinaryenMinFloat32(),\r\n MaxF32 = _BinaryenMaxFloat32(),\r\n EqF32 = _BinaryenEqFloat32(),\r\n NeF32 = _BinaryenNeFloat32(),\r\n LtF32 = _BinaryenLtFloat32(),\r\n LeF32 = _BinaryenLeFloat32(),\r\n GtF32 = _BinaryenGtFloat32(),\r\n GeF32 = _BinaryenGeFloat32(),\r\n AddF64 = _BinaryenAddFloat64(),\r\n SubF64 = _BinaryenSubFloat64(),\r\n MulF64 = _BinaryenMulFloat64(),\r\n DivF64 = _BinaryenDivFloat64(),\r\n CopysignF64 = _BinaryenCopySignFloat64(),\r\n MinF64 = _BinaryenMinFloat64(),\r\n MaxF64 = _BinaryenMaxFloat64(),\r\n EqF64 = _BinaryenEqFloat64(),\r\n NeF64 = _BinaryenNeFloat64(),\r\n LtF64 = _BinaryenLtFloat64(),\r\n LeF64 = _BinaryenLeFloat64(),\r\n GtF64 = _BinaryenGtFloat64(),\r\n GeF64 = _BinaryenGeFloat64()\r\n}\r\n\r\nexport enum HostOp {\r\n PageSize = _BinaryenPageSize(),\r\n CurrentMemory = _BinaryenCurrentMemory(),\r\n GrowMemory = _BinaryenGrowMemory(),\r\n HasFeature = _BinaryenHasFeature(),\r\n\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n // MoveMemory\r\n // SetMemory\r\n}\r\n\r\nexport enum AtomicRMWOp {\r\n Add = _BinaryenAtomicRMWAdd(),\r\n Sub = _BinaryenAtomicRMWSub(),\r\n And = _BinaryenAtomicRMWAnd(),\r\n Or = _BinaryenAtomicRMWOr(),\r\n Xor = _BinaryenAtomicRMWXor(),\r\n Xchg = _BinaryenAtomicRMWXchg()\r\n}\r\n\r\nexport class MemorySegment {\r\n\r\n buffer: Uint8Array;\r\n offset: I64;\r\n\r\n static create(buffer: Uint8Array, offset: I64) {\r\n var segment = new MemorySegment();\r\n segment.buffer = buffer;\r\n segment.offset = offset;\r\n return segment;\r\n }\r\n}\r\n\r\nexport class Module {\r\n\r\n ref: ModuleRef;\r\n out: usize;\r\n\r\n static readonly MAX_MEMORY_WASM32: Index = 0xffff;\r\n // TODO: static readonly MAX_MEMORY_WASM64\r\n\r\n static create(): Module {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleCreate();\r\n module.out = allocate_memory(16);\r\n return module;\r\n }\r\n\r\n static createFrom(buffer: Uint8Array): Module {\r\n var cArr = allocU8Array(buffer);\r\n try {\r\n 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 ) {\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 ) {\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(expression: Expression, contextualType: Type, wrapSmallIntegers: bool = true) {\r\n return this.compileExpression(\r\n expression,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n wrapSmallIntegers\r\n );\r\n }\r\n\r\n precomputeExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind = ConversionKind.IMPLICIT\r\n ): ExpressionRef {\r\n return this.precomputeExpressionRef(this.compileExpression(expression, contextualType, conversionKind));\r\n }\r\n\r\n precomputeExpressionRef(expr: ExpressionRef): ExpressionRef {\r\n var nativeType = this.currentType.toNativeType();\r\n var typeRef = this.module.getFunctionTypeBySignature(nativeType, 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) {\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","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":"CAAA,SAAAA,EAAAC,GACA,iBAAAC,SAAA,iBAAAC,OACAA,OAAAD,QAAAD,EAAAG,QAAA,aACA,mBAAAC,eAAAC,IACAD,QAAA,YAAAJ,GACA,iBAAAC,QACAA,QAAA,eAAAD,EAAAG,QAAA,aAEAJ,EAAA,eAAAC,EAAAD,EAAA,UARA,CASC,oBAAAO,UAAAC,KAAA,SAAAC,GACD,mBCTA,IAAAC,KAGA,SAAAC,EAAAC,GAGA,GAAAF,EAAAE,GACA,OAAAF,EAAAE,GAAAV,QAGA,IAAAC,EAAAO,EAAAE,IACAC,EAAAD,EACAE,GAAA,EACAZ,YAUA,OANAa,EAAAH,GAAAI,KAAAb,EAAAD,QAAAC,IAAAD,QAAAS,GAGAR,EAAAW,GAAA,EAGAX,EAAAD,QA2CA,OAtCAS,EAAAM,EAAAF,EAGAJ,EAAAO,EAAAR,EAGAC,EAAAQ,EAAA,SAAAjB,EAAAkB,EAAAC,GACAV,EAAAW,EAAApB,EAAAkB,IACAG,OAAAC,eAAAtB,EAAAkB,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAV,EAAAiB,EAAA,SAAA1B,GACAqB,OAAAC,eAAAtB,EAAA,cAAiD2B,OAAA,KAIjDlB,EAAAmB,EAAA,SAAA3B,GACA,IAAAkB,EAAAlB,KAAA4B,WACA,WAA2B,OAAA5B,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAQ,EAAAQ,EAAAE,EAAA,IAAAA,GACAA,GAIAV,EAAAW,EAAA,SAAAU,EAAAC,GAAsD,OAAAV,OAAAW,UAAAC,eAAAnB,KAAAgB,EAAAC,IAGtDtB,EAAAyB,EAAA,GAIAzB,IAAA0B,EAAA,oFC/DA,IAcYC,EAdZC,EAAA5B,EAAA,IAKA6B,EAAA7B,EAAA,GAIA8B,EAAA9B,EAAA,IAWA,SAAA+B,EAA2CC,GACzC,OAAQA,GACN,KAAKL,EAAmBM,KAAM,MAAO,OACrC,KAAKN,EAAmBO,QAAS,MAAO,UACxC,KAAKP,EAAmBQ,MAAO,MAAO,QACtC,QAAS,MAAO,IAflB5C,EAAA6C,eAAAN,EAAAM,eACA7C,EAAA8C,uBAAAP,EAAAO,uBAGF,SAAYV,GACVA,IAAA,eACAA,IAAA,qBACAA,IAAA,iBAHF,CAAYA,EAAApC,EAAAoC,qBAAApC,EAAAoC,wBAMZpC,EAAAwC,6BASA,IAAMO,EAAoB,QACpBC,EAAsB,QACtBC,EAAmB,QACnBC,EAAqB,OAE3B,SAAAC,EAA0CV,GACxC,OAAQA,GACN,KAAKL,EAAmBM,KAAM,OAAOK,EACrC,KAAKX,EAAmBO,QAAS,OAAOK,EACxC,KAAKZ,EAAmBQ,MAAO,OAAOK,EACtC,QAAS,MAAO,IALpBjD,EAAAmD,4BASA,IAAAC,EAAA,WAOE,SAAAA,EAAYC,EAAWZ,EAA8Ba,GAFrDhD,KAAAiD,MAAsB,KAGpBjD,KAAK+C,KAAOA,EACZ/C,KAAKmC,SAAWA,EAChBnC,KAAKgD,QAAUA,EAsEnB,OAnESF,EAAAI,OAAP,SACEH,EACAZ,EACAgB,EACAC,EACAC,QAFA,IAAAF,MAAA,WACA,IAAAC,MAAA,WACA,IAAAC,MAAA,MAEA,IAAIL,EAAUjB,EAAAS,uBAAuBO,GAIrC,OAHY,MAARI,IAAcH,EAAUA,EAAQM,QAAQ,MAAOH,IACvC,MAARC,IAAcJ,EAAUA,EAAQM,QAAQ,MAAOF,IACvC,MAARC,IAAcL,EAAUA,EAAQM,QAAQ,MAAOD,IAC5C,IAAIP,EAAkBC,EAAMZ,EAAUa,IAGxCF,EAAAS,WAAP,SACER,EACAI,EACAC,GAEA,YAHA,IAAAD,MAAA,WACA,IAAAC,MAAA,MAEON,EAAkBI,OAAOH,EAAMjB,EAAmBM,KAAMe,EAAMC,IAGhEN,EAAAU,cAAP,SACET,EACAI,EACAC,GAEA,YAHA,IAAAD,MAAA,WACA,IAAAC,MAAA,MAEON,EAAkBI,OAAOH,EAAMjB,EAAmBO,QAASc,EAAMC,IAGnEN,EAAAW,YAAP,SACEV,EACAI,EACAC,GAEA,YAHA,IAAAD,MAAA,WACA,IAAAC,MAAA,MAEON,EAAkBI,OAAOH,EAAMjB,EAAmBQ,MAAOa,EAAMC,IAGxEN,EAAApB,UAAAgC,UAAA,SAAUT,GAER,OADAjD,KAAKiD,MAAQA,EACNjD,MAGT8C,EAAApB,UAAAiC,SAAA,WACE,OAAI3D,KAAKiD,MAELf,EAA2BlC,KAAKmC,UAChC,IACAnC,KAAK+C,KAAKY,SAAS,IACnB,MACA3D,KAAKgD,QACL,QACAhD,KAAKiD,MAAMW,OAAOC,eAClB,MACA7D,KAAKiD,MAAMa,MAAMH,SAAS,IAC1B,IACA3D,KAAKiD,MAAMc,IAAIJ,SAAS,IAI1BzB,EAA2BlC,KAAKmC,UAChC,IACAnC,KAAK+C,KAAKY,SAAS,IACnB,KACA3D,KAAKgD,SAGXF,EAhFA,GA0HA,SAAAkB,EAAwCf,EAAcgB,QAAA,IAAAA,OAAA,GAKpD,IAJA,IAAIC,EAAOjB,EAAMW,OAAOM,KACpBC,EAAMD,EAAKE,OACXN,EAAQb,EAAMa,MACdC,EAAMd,EAAMc,IACTD,EAAQ,IAAM9B,EAAAqC,YAAYH,EAAKI,WAAWR,EAAQ,KACvDA,IAEF,KAAOC,EAAMI,IAAQnC,EAAAqC,YAAYH,EAAKI,WAAWP,KAC/CA,IAOF,IALA,IAAIQ,GACF,MACAL,EAAKM,UAAUV,EAAOC,GACtB,OAEKD,EAAQb,EAAMa,OACnBS,EAAGE,KAAK,KACRX,IAGF,GADIG,GAAWM,EAAGE,KAAK9B,GACnBM,EAAMa,OAASb,EAAMc,IACvBQ,EAAGE,KAAK,UAER,KAAOX,IAAUb,EAAMc,KACrBQ,EAAGE,KAAK,KAIZ,OADIR,GAAWM,EAAGE,KAAK7B,GAChB2B,EAAGG,KAAK,IAvJJhF,EAAAoD,oBAkFbpD,EAAAiF,wBAAA,SACE3B,EACAiB,EACAW,QADA,IAAAX,OAAA,QACA,IAAAW,OAAA,GAGA,IAAIC,EAAU,GACV7B,EAAQC,OAAS2B,IACnBC,EAAUb,EAAwBhB,EAAQC,MAAOgB,IAInD,IAAIM,KAUJ,GATIN,GAAWM,EAAGE,KAAK5B,EAA0BG,EAAQb,WACzDoC,EAAGE,KAAKvC,EAA2Bc,EAAQb,WACvC8B,GAAWM,EAAGE,KAAK7B,GACvB2B,EAAGE,KAAKzB,EAAQD,KAAO,IAAO,MAAQ,OACtCwB,EAAGE,KAAKzB,EAAQD,KAAKY,SAAS,KAC9BY,EAAGE,KAAK,MACRF,EAAGE,KAAKzB,EAAQA,SAGZA,EAAQC,MAAO,CACjB,IAAIA,EAAQD,EAAQC,MAChB2B,IACFL,EAAGE,KAAK,MACRF,EAAGE,KAAKI,IAEVN,EAAGE,KAAK,MACRF,EAAGE,KAAK,QACRF,EAAGE,KAAKxB,EAAMW,OAAOC,gBACrBU,EAAGE,KAAK,KACRF,EAAGE,KAAKxB,EAAM6B,KAAKnB,SAAS,KAC5BY,EAAGE,KAAK,KACRF,EAAGE,KAAKxB,EAAM8B,OAAOpB,SAAS,KAC9BY,EAAGE,KAAK,KAEV,OAAOF,EAAGG,KAAK,KAGjBhF,EAAAsE,0BAgCA,IAAAgB,EAAA,WAKE,SAAAA,EAAYC,QAAA,IAAAA,MAAA,MACVjF,KAAKiF,YAAcA,GAAiD,IAAIC,MA8C5E,OA3CEF,EAAAtD,UAAAyD,eAAA,SACEpC,EACAZ,EACAc,EACAE,EACAC,EACAC,QAFA,IAAAF,MAAA,WACA,IAAAC,MAAA,WACA,IAAAC,MAAA,MAEA,IAAIL,EAAUF,EAAkBI,OAAOH,EAAMZ,EAAUgB,EAAMC,EAAMC,GAAMK,UAAUT,GACnFjD,KAAKiF,YAAYR,KAAKzB,IAKxBgC,EAAAtD,UAAA0D,MAAA,SACErC,EACAE,EACAE,EACAC,EACAC,QAFA,IAAAF,MAAA,WACA,IAAAC,MAAA,WACA,IAAAC,MAAA,MAEArD,KAAKmF,eAAepC,EAAMjB,EAAmBQ,MAAOW,EAAOE,EAAMC,EAAMC,IAGzE2B,EAAAtD,UAAA2D,KAAA,SACEtC,EACAE,EACAE,EACAC,EACAC,QAFA,IAAAF,MAAA,WACA,IAAAC,MAAA,WACA,IAAAC,MAAA,MAEArD,KAAKmF,eAAepC,EAAMjB,EAAmBM,KAAMa,EAAOE,EAAMC,EAAMC,IAGxE2B,EAAAtD,UAAA4D,QAAA,SACEvC,EACAE,EACAE,EACAC,EACAC,QAFA,IAAAF,MAAA,WACA,IAAAC,MAAA,WACA,IAAAC,MAAA,MAEArD,KAAKmF,eAAepC,EAAMjB,EAAmBO,QAASY,EAAOE,EAAMC,EAAMC,IAE7E2B,EApDA,GAAsBtF,EAAAsF,mGCzMtB,IAaYO,EAUAC,EAvBZC,EAAAtF,EAAA,IAaA,SAAYoF,GACVA,IAAA,KAAOG,qBAAmB,OAC1BH,IAAA,IAAMI,sBAAoB,MAC1BJ,IAAA,IAAMK,sBAAoB,MAC1BL,IAAA,IAAMM,wBAAsB,MAC5BN,IAAA,IAAOO,wBAAsB,MAC7BP,IAAA,YAAcQ,4BAA0B,cACxCR,IAAA,KAAOS,qBAAmB,OAP5B,CAAYT,EAAA7F,EAAA6F,aAAA7F,EAAA6F,gBAUZ,SAAYC,GACVA,IAAA,QAAUS,sBAAoB,UAC9BT,IAAA,MAAQU,oBAAkB,QAC1BV,IAAA,GAAKW,iBAAe,KACpBX,IAAA,KAAOY,mBAAiB,OACxBZ,IAAA,MAAQa,oBAAkB,QAC1Bb,IAAA,OAASc,qBAAmB,SAC5Bd,IAAA,KAAOe,mBAAiB,OACxBf,IAAA,WAAagB,yBAAuB,aACpChB,IAAA,aAAeiB,2BAAyB,eACxCjB,IAAA,SAAWkB,uBAAqB,WAChClB,IAAA,SAAWmB,uBAAqB,WAChCnB,IAAA,UAAYoB,wBAAsB,YAClCpB,IAAA,UAAYqB,wBAAsB,YAClCrB,IAAA,KAAOsB,mBAAiB,OACxBtB,IAAA,MAAQuB,oBAAkB,QAC1BvB,IAAA,MAAQwB,oBAAkB,QAC1BxB,IAAA,MAAQyB,oBAAkB,QAC1BzB,IAAA,OAAS0B,qBAAmB,SAC5B1B,IAAA,OAAS2B,qBAAmB,SAC5B3B,IAAA,KAAO4B,mBAAiB,OACxB5B,IAAA,OAAS6B,qBAAmB,SAC5B7B,IAAA,KAAO8B,mBAAiB,OACxB9B,IAAA,IAAM+B,kBAAgB,MACtB/B,IAAA,YAAcgC,0BAAwB,cACtChC,IAAA,cAAgBiC,4BAA0B,gBAC1CjC,IAAA,UAAYkC,wBAAsB,YAClClC,IAAA,WAAamC,yBAAuB,aACpCnC,IAAA,WAAaoC,yBAAuB,aA5BtC,CAAYpC,EAAA9F,EAAA8F,eAAA9F,EAAA8F,kBA+BZ,SAAYqC,GACVA,IAAA,OAASC,qBAAmB,SAC5BD,IAAA,OAASE,qBAAmB,SAC5BF,IAAA,UAAYG,wBAAsB,YAClCH,IAAA,OAASI,uBAAqB,SAC9BJ,IAAA,OAASK,uBAAqB,SAC9BL,IAAA,QAAUM,wBAAsB,UAChCN,IAAA,SAAWO,yBAAuB,WAClCP,IAAA,SAAWQ,yBAAuB,WAClCR,IAAA,WAAaS,2BAAyB,aACtCT,IAAA,QAAUU,wBAAsB,UAChCV,IAAA,OAASW,qBAAmB,SAC5BX,IAAA,OAASY,qBAAmB,SAC5BZ,IAAA,OAASa,qBAAmB,SAC5Bb,IAAA,UAAYc,wBAAsB,YAClCd,IAAA,OAASe,uBAAqB,SAC9Bf,IAAA,OAASgB,uBAAqB,SAC9BhB,IAAA,QAAUiB,wBAAsB,UAChCjB,IAAA,SAAWkB,yBAAuB,WAClClB,IAAA,SAAWmB,yBAAuB,WAClCnB,IAAA,WAAaoB,2BAAyB,aACtCpB,IAAA,QAAUqB,wBAAsB,UAChCrB,IAAA,OAASsB,qBAAmB,SAC5BtB,IAAA,UAAYuB,yBAAuB,YACnCvB,IAAA,UAAYwB,yBAAuB,YACnCxB,IAAA,QAAUyB,sBAAoB,UAC9BzB,IAAA,cAAgB0B,iCAA+B,gBAC/C1B,IAAA,cAAgB2B,iCAA+B,gBAC/C3B,IAAA,cAAgB4B,iCAA+B,gBAC/C5B,IAAA,cAAgB6B,iCAA+B,gBAC/C7B,IAAA,cAAgB8B,iCAA+B,gBAC/C9B,IAAA,cAAgB+B,iCAA+B,gBAC/C/B,IAAA,cAAgBgC,iCAA+B,gBAC/ChC,IAAA,cAAgBiC,iCAA+B,gBAC/CjC,IAAA,eAAiBkC,+BAA6B,iBAC9ClC,IAAA,eAAiBmC,+BAA6B,iBAC9CnC,IAAA,gBAAkBoC,mCAAiC,kBACnDpC,IAAA,gBAAkBqC,mCAAiC,kBACnDrC,IAAA,gBAAkBsC,mCAAiC,kBACnDtC,IAAA,gBAAkBuC,mCAAiC,kBACnDvC,IAAA,gBAAkBwC,mCAAiC,kBACnDxC,IAAA,gBAAkByC,mCAAiC,kBACnDzC,IAAA,gBAAkB0C,mCAAiC,kBACnD1C,IAAA,gBAAkB2C,mCAAiC,kBACnD3C,IAAA,WAAa4C,2BAAyB,aACtC5C,IAAA,UAAY6C,0BAAwB,YACpC7C,IAAA,eAAiB8C,6BAA2B,iBAC5C9C,IAAA,eAAiB+C,6BAA2B,iBA/C9C,CAAYlL,EAAAmI,UAAAnI,EAAAmI,aAmEZ,SAAYgD,GACVA,IAAA,OAASC,qBAAmB,SAC5BD,IAAA,OAASE,qBAAmB,SAC5BF,IAAA,OAASG,qBAAmB,SAC5BH,IAAA,OAASI,sBAAoB,SAC7BJ,IAAA,OAASK,sBAAoB,SAC7BL,IAAA,OAASM,sBAAoB,SAC7BN,IAAA,OAASO,sBAAoB,SAC7BP,IAAA,OAASQ,qBAAmB,SAC5BR,IAAA,MAAQS,oBAAkB,QAC1BT,IAAA,OAASU,qBAAmB,SAC5BV,IAAA,OAASW,qBAAmB,SAC5BX,IAAA,OAASY,sBAAoB,SAC7BZ,IAAA,OAASa,sBAAoB,SAC7Bb,IAAA,QAAUc,sBAAoB,UAC9Bd,IAAA,QAAUe,sBAAoB,UAC9Bf,IAAA,MAAQgB,oBAAkB,QAC1BhB,IAAA,MAAQiB,oBAAkB,QAC1BjB,IAAA,MAAQkB,qBAAmB,QAC3BlB,IAAA,MAAQmB,qBAAmB,QAC3BnB,IAAA,MAAQoB,qBAAmB,QAC3BpB,IAAA,MAAQqB,qBAAmB,QAC3BrB,IAAA,MAAQsB,qBAAmB,QAC3BtB,IAAA,MAAQuB,qBAAmB,QAC3BvB,IAAA,MAAQwB,qBAAmB,QAC3BxB,IAAA,MAAQyB,qBAAmB,QAC3BzB,IAAA,OAAS0B,qBAAmB,SAC5B1B,IAAA,OAAS2B,qBAAmB,SAC5B3B,IAAA,OAAS4B,qBAAmB,SAC5B5B,IAAA,OAAS6B,sBAAoB,SAC7B7B,IAAA,OAAS8B,sBAAoB,SAC7B9B,IAAA,OAAS+B,sBAAoB,SAC7B/B,IAAA,OAASgC,sBAAoB,SAC7BhC,IAAA,OAASiC,qBAAmB,SAC5BjC,IAAA,MAAQkC,oBAAkB,QAC1BlC,IAAA,OAASmC,qBAAmB,SAC5BnC,IAAA,OAASoC,qBAAmB,SAC5BpC,IAAA,OAASqC,sBAAoB,SAC7BrC,IAAA,OAASsC,sBAAoB,SAC7BtC,IAAA,QAAUuC,sBAAoB,UAC9BvC,IAAA,QAAUwC,sBAAoB,UAC9BxC,IAAA,MAAQyC,oBAAkB,QAC1BzC,IAAA,MAAQ0C,oBAAkB,QAC1B1C,IAAA,MAAQ2C,qBAAmB,QAC3B3C,IAAA,MAAQ4C,qBAAmB,QAC3B5C,IAAA,MAAQ6C,qBAAmB,QAC3B7C,IAAA,MAAQ8C,qBAAmB,QAC3B9C,IAAA,MAAQ+C,qBAAmB,QAC3B/C,IAAA,MAAQgD,qBAAmB,QAC3BhD,IAAA,MAAQiD,qBAAmB,QAC3BjD,IAAA,MAAQkD,qBAAmB,QAC3BlD,IAAA,OAASmD,uBAAqB,SAC9BnD,IAAA,OAASoD,uBAAqB,SAC9BpD,IAAA,OAASqD,uBAAqB,SAC9BrD,IAAA,OAASsD,uBAAqB,SAC9BtD,IAAA,YAAcuD,4BAA0B,cACxCvD,IAAA,OAASwD,uBAAqB,SAC9BxD,IAAA,OAASyD,uBAAqB,SAC9BzD,IAAA,MAAQ0D,sBAAoB,QAC5B1D,IAAA,MAAQ2D,sBAAoB,QAC5B3D,IAAA,MAAQ4D,sBAAoB,QAC5B5D,IAAA,MAAQ6D,sBAAoB,QAC5B7D,IAAA,MAAQ8D,sBAAoB,QAC5B9D,IAAA,MAAQ+D,sBAAoB,QAC5B/D,IAAA,OAASgE,uBAAqB,SAC9BhE,IAAA,OAASiE,uBAAqB,SAC9BjE,IAAA,OAASkE,uBAAqB,SAC9BlE,IAAA,OAASmE,uBAAqB,SAC9BnE,IAAA,YAAcoE,4BAA0B,cACxCpE,IAAA,OAASqE,uBAAqB,SAC9BrE,IAAA,OAASsE,uBAAqB,SAC9BtE,IAAA,MAAQuE,sBAAoB,QAC5BvE,IAAA,MAAQwE,sBAAoB,QAC5BxE,IAAA,MAAQyE,sBAAoB,QAC5BzE,IAAA,MAAQ0E,sBAAoB,QAC5B1E,IAAA,MAAQ2E,sBAAoB,QAC5B3E,IAAA,MAAQ4E,sBAAoB,QA5E9B,CAAY/P,EAAAmL,WAAAnL,EAAAmL,cA+EZ,SAAY6E,GACVA,IAAA,SAAWC,qBAAmB,WAC9BD,IAAA,cAAgBE,0BAAwB,gBACxCF,IAAA,WAAaG,uBAAqB,aAClCH,IAAA,WAAaI,uBAAqB,aAJpC,CAAYpQ,EAAAgQ,SAAAhQ,EAAAgQ,YAWZ,SAAYK,GACVA,IAAA,IAAMC,yBAAuB,MAC7BD,IAAA,IAAME,yBAAuB,MAC7BF,IAAA,IAAMG,yBAAuB,MAC7BH,IAAA,GAAKI,wBAAsB,KAC3BJ,IAAA,IAAMK,yBAAuB,MAC7BL,IAAA,KAAOM,0BAAwB,OANjC,CAAY3Q,EAAAqQ,cAAArQ,EAAAqQ,iBASZ,IAAAO,EAAA,oBAAAA,KAWA,OANSA,EAAApN,OAAP,SAAcqN,EAAoBC,GAChC,IAAIC,EAAU,IAAIH,EAGlB,OAFAG,EAAQF,OAASA,EACjBE,EAAQD,OAASA,EACVC,GAEXH,EAXA,GAAa5Q,EAAA4Q,gBAab,IAAAI,EAAA,WA2BE,SAAAA,KAgxBF,OAnyBSA,EAAAxN,OAAP,WACE,IAAIvD,EAAS,IAAI+Q,EAGjB,OAFA/Q,EAAOgR,IAAMC,wBACbjR,EAAOkR,IAAMC,gBAAgB,IACtBnR,GAGF+Q,EAAAK,WAAP,SAAkBR,GAChB,IAAIS,EAAOC,EAAaV,GACxB,IACE,IAAI5Q,EAAS,IAAI+Q,EAGjB,OAFA/Q,EAAOgR,IAAMO,oBAAoBF,EAAMT,EAAOnM,QAC9CzE,EAAOkR,IAAMC,gBAAgB,IACtBnR,UAEPwR,YAAYC,WAAkBJ,MAQlCN,EAAAhP,UAAA2P,gBAAA,SACEzQ,EACA0Q,EACAC,GAEA,IAAIC,EAAOC,EAAY7Q,GACnBoQ,EAAOU,EAAcH,GACzB,IACE,OAAOI,yBAAyB3R,KAAK2Q,IAAKa,EAAMF,EAAQN,EAAMO,EAAaA,EAAWnN,OAAS,WAE/F+M,YAAYH,GACZG,YAAYK,KAIhBd,EAAAhP,UAAAkQ,2BAAA,SACEN,EACAC,GAEA,IAAIP,EAAOU,EAAcH,GACzB,IACE,OAAOM,oCAAoC7R,KAAK2Q,IAAKW,EAAQN,EAAMO,EAAaA,EAAWnN,OAAS,WAEpG+M,YAAYH,KAMhBN,EAAAhP,UAAAoQ,UAAA,SAAUzQ,GACR,IAAIwP,EAAM7Q,KAAK6Q,IAEf,OADAkB,sBAAsBlB,EAAKxP,GACpB2Q,eAAehS,KAAK2Q,IAAKE,IAGlCH,EAAAhP,UAAAuQ,UAAA,SAAUC,EAAeC,QAAA,IAAAA,MAAA,GACvB,IAAItB,EAAM7Q,KAAK6Q,IAEf,OADAuB,sBAAsBvB,EAAKqB,EAAUC,GAC9BH,eAAehS,KAAK2Q,IAAKE,IAGlCH,EAAAhP,UAAA2Q,UAAA,SAAUhR,GACR,IAAIwP,EAAM7Q,KAAK6Q,IAEf,OADAyB,wBAAwBzB,EAAKxP,GACtB2Q,eAAehS,KAAK2Q,IAAKE,IAGlCH,EAAAhP,UAAA6Q,UAAA,SAAUlR,GACR,IAAIwP,EAAM7Q,KAAK6Q,IAEf,OADA2B,wBAAwB3B,EAAKxP,GACtB2Q,eAAehS,KAAK2Q,IAAKE,IAKlCH,EAAAhP,UAAA+Q,YAAA,SACEC,EACAC,GAEA,OAAOC,eAAe5S,KAAK2Q,IAAK+B,EAAIC,IAGtCjC,EAAAhP,UAAAmR,aAAA,SACEH,EACAI,EACAC,GAEA,OAAOC,gBAAgBhT,KAAK2Q,IAAK+B,EAAII,EAAMC,IAG7CrC,EAAAhP,UAAAuR,WAAA,SACEP,EACA9R,EACAsS,QADA,IAAAtS,MAAA,WACA,IAAAsS,MAAA,MAEA,IAAI1B,EAAOC,EAAY7Q,GACnBoQ,EAAOU,EAAcwB,GACzB,IACE,OAAOC,cAAcnT,KAAK2Q,IAAK+B,EAAIlB,EAAMR,EAAMkC,EAA6BA,EAAU9O,OAAS,WAE/F+M,YAAYH,GACZG,YAAYK,KAIhBd,EAAAhP,UAAA0R,eAAA,SACEC,EACAC,GAEA,OAAOC,kBAAkBvT,KAAK2Q,IAAK0C,EAAOC,IAG5C5C,EAAAhP,UAAA8R,eAAA,SACEH,EACAhS,GAEA,OAAOoS,kBAAkBzT,KAAK2Q,IAAK0C,EAAOhS,IAG5CqP,EAAAhP,UAAAgS,gBAAA,SACE9S,EACA0S,GAEA,IAAI9B,EAAOC,EAAY7Q,GACvB,IACE,OAAO+S,mBAAmB3T,KAAK2Q,IAAKa,EAAM8B,WAE1CnC,YAAYK,KAIhBd,EAAAhP,UAAAkS,WAAA,SACEC,EACAC,EACAC,EACAT,EACA9C,GAEA,YAFA,IAAAA,MAAA,GAEOwD,cAAchU,KAAK2Q,IAAKkD,EAAOC,EAAS,EAAI,EAAGtD,EAA6BqD,EAAOP,EAAMS,IAGlGrD,EAAAhP,UAAAuS,YAAA,SACEJ,EACAE,EACA1S,EACAiS,EACA9C,GAEA,YAFA,IAAAA,MAAA,GAEO0D,eAAelU,KAAK2Q,IAAKkD,EAAOrD,EAA6BqD,EAAOE,EAAK1S,EAAOiS,IAGzF5C,EAAAhP,UAAAyS,iBAAA,SACEN,EACAE,EACAT,EACA9C,GAEA,YAFA,IAAAA,MAAA,GAEO4D,oBAAoBpU,KAAK2Q,IAAKkD,EAAOrD,EAAQ8C,EAAMS,IAG5DrD,EAAAhP,UAAA2S,kBAAA,SACER,EACAE,EACA1S,EACAiS,EACA9C,GAEA,YAFA,IAAAA,MAAA,GAEO8D,qBAAqBtU,KAAK2Q,IAAKkD,EAAOrD,EAAQuD,EAAK1S,EAAOiS,IAGnE5C,EAAAhP,UAAA6S,gBAAA,SACE7B,EACAmB,EACArD,EACAuD,EACA1S,EACAiS,GAEA,OAAOkB,mBAAmBxU,KAAK2Q,IAAK+B,EAAImB,EAAOrD,EAAQuD,EAAK1S,EAAOiS,IAGrE5C,EAAAhP,UAAA+S,oBAAA,SACEZ,EACArD,EACAuD,EACAW,EACAC,EACArB,GAEA,OAAOsB,uBAAuB5U,KAAK2Q,IAAKkD,EAAOrD,EAAQuD,EAAKW,EAAUC,EAAarB,IAGrF5C,EAAAhP,UAAAmT,iBAAA,SACEd,EACAW,EACAI,EACAC,GAEA,OAAOC,oBAAoBhV,KAAK2Q,IAAKoD,EAAKW,EAAUI,EAASC,IAG/DrE,EAAAhP,UAAAuT,iBAAA,SACElB,EACAmB,GAEA,OAAOC,oBAAoBnV,KAAK2Q,IAAKoD,EAAKmB,IAK5CxE,EAAAhP,UAAA0T,eAAA,SACE/B,EACAhS,GAEA,OAAOgU,kBAAkBrV,KAAK2Q,IAAK0C,EAAOhS,IAG5CqP,EAAAhP,UAAA4T,gBAAA,SACE1U,EACAS,GAEA,IAAImQ,EAAOC,EAAY7Q,GACvB,IACE,OAAO2U,mBAAmBvV,KAAK2Q,IAAKa,EAAMnQ,WAE1C8P,YAAYK,KAIhBd,EAAAhP,UAAA8T,YAAA,SACEC,EACAC,EACApC,QAAA,IAAAA,MAAmB/N,EAAWoQ,MAE9B,IAAInE,EAAOC,EAAYgE,GACnBzE,EAAOU,EAAcgE,GACzB,IACE,OAAOE,eAAe5V,KAAK2Q,IAAKa,EAAMR,EAAM0E,EAAStR,OAAQkP,WAE7DnC,YAAYH,GACZG,YAAYK,KAIhBd,EAAAhP,UAAAmU,YAAA,SACEJ,EACAK,EACAzU,QADA,IAAAyU,MAAA,QACA,IAAAzU,MAAA,GAEA,IAAImQ,EAAOC,EAAYgE,GACvB,IACE,OAAOM,eAAe/V,KAAK2Q,IAAKa,EAAMsE,EAAWzU,WAEjD8P,YAAYK,KAIhBd,EAAAhP,UAAAsU,WAAA,SACEC,GAEA,OAAOC,cAAclW,KAAK2Q,IAAKsF,IAGjCvF,EAAAhP,UAAAyU,WAAA,SACEV,EACAW,GAEA,IAAI5E,EAAOC,EAAYgE,GACvB,IACE,OAAOY,cAAcrW,KAAK2Q,IAAKa,EAAM4E,WAErCjF,YAAYK,KAIhBd,EAAAhP,UAAA4U,SAAA,SACER,EACAS,EACAC,GAEA,YAFA,IAAAA,MAAA,GAEOC,YAAYzW,KAAK2Q,IAAKmF,EAAWS,EAAQC,IAGlD9F,EAAAhP,UAAAgV,UAAA,WACE,OAAOC,aAAa3W,KAAK2Q,MAG3BD,EAAAhP,UAAAkV,aAAA,SACEX,GAEA,YAFA,IAAAA,MAAA,GAEOY,gBAAgB7W,KAAK2Q,IAAKsF,IAGnCvF,EAAAhP,UAAAoV,aAAA,SACEP,EACAC,EACAV,GAEA,OAAOiB,gBAAgB/W,KAAK2Q,IAAKmF,EAAWS,EAAQC,IAGtD9F,EAAAhP,UAAAsV,aAAA,SACEC,EACAC,EACApB,EACAzU,QAAA,IAAAA,MAAA,GAIA,IAFA,IAAI8V,EAAWF,EAAM7S,OACjBgT,EAAO,IAAIlS,MAAaiS,GACnB9W,EAAI,EAAGA,EAAI8W,IAAY9W,EAC9B+W,EAAK/W,GAAKoR,EAAYwF,EAAM5W,IAE9B,IAAI2Q,EAAOU,EAAc0F,GACrB5F,EAAOC,EAAYyF,GACvB,IACE,OAAOG,gBAAgBrX,KAAK2Q,IAAKK,EAAMmG,EAAU3F,EAAMsE,EAAWzU,WAElE8P,YAAYK,GACZL,YAAYH,GACZ,IAAS3Q,EAAI8W,EAAW,EAAG9W,GAAK,IAAKA,EAAG8Q,YAAYiG,EAAK/W,MAI7DqQ,EAAAhP,UAAA4V,WAAA,SACEC,EACArE,EACAsE,GAEA,IAAIhG,EAAOC,EAAY8F,GACnBvG,EAAOU,EAAcwB,GACzB,IACE,OAAOuE,cAAczX,KAAK2Q,IAAKa,EAAMR,EAAMkC,GAAYA,EAAS9O,QAAU,EAAGoT,WAE7ErG,YAAYH,GACZG,YAAYK,KAIhBd,EAAAhP,UAAAgW,iBAAA,SACEH,EACArE,EACAsE,GAEA,IAAIhG,EAAOC,EAAY8F,GACnBvG,EAAOU,EAAcwB,GACzB,IACE,OAAOyE,oBAAoB3X,KAAK2Q,IAAKa,EAAMR,EAAMkC,GAAYA,EAAS9O,QAAU,EAAGoT,WAEnFrG,YAAYH,GACZG,YAAYK,KAIhBd,EAAAhP,UAAAkW,mBAAA,SACEvE,EACAH,EACA2E,GAEA,IAAI7G,EAAOU,EAAcwB,GACrB1B,EAAOC,EAAYoG,GACvB,IACE,OAAOC,sBAAsB9X,KAAK2Q,IAAK0C,EAAOrC,EAAMkC,GAAYA,EAAS9O,QAAU,EAAGoN,WAEtFL,YAAYK,GACZL,YAAYH,KAIhBN,EAAAhP,UAAAqW,kBAAA,WACE,OAAOC,qBAAqBhY,KAAK2Q,MAKnCD,EAAAhP,UAAAuW,UAAA,SACErX,EACA0S,EACA4E,EACAC,GAEA,IAAI3G,EAAOC,EAAY7Q,GACvB,IACE,OAAOwX,mBAAmBpY,KAAK2Q,IAAKa,EAAM8B,EAAM4E,EAAU,EAAI,EAAGC,WAEjEhH,YAAYK,KAIhBd,EAAAhP,UAAA2W,YAAA,SACEzX,EACA0S,EACAgF,EACAlC,GAEA,IAAI5E,EAAOC,EAAY7Q,GACnBoQ,EAAOU,EAAc4G,GACzB,IACE,OAAOC,qBAAqBvY,KAAK2Q,IAAKa,EAAM8B,EAAMtC,EAAMsH,EAAWA,EAASlU,OAAS,EAAGgS,WAExFjF,YAAYH,GACZG,YAAYK,KAIhBd,EAAAhP,UAAA8W,eAAA,SAAe5X,GACb,IAAI4Q,EAAOC,EAAY7Q,GACvB,IACE6X,wBAAwBzY,KAAK2Q,IAAKa,WAElCL,YAAYK,KAIhBd,EAAAhP,UAAAgX,kBAAA,SACEC,EACAC,GAEA,IAAIC,EAAQpH,EAAYkH,GACpBG,EAAQrH,EAAYmH,GACxB,IACE,OAAOG,2BAA2B/Y,KAAK2Q,IAAKkI,EAAOC,WAEnD3H,YAAY2H,GACZ3H,YAAY0H,KAIhBnI,EAAAhP,UAAAsX,eAAA,SACEL,EACAC,GAEA,IAAIC,EAAQpH,EAAYkH,GACpBG,EAAQrH,EAAYmH,GACxB,IACE,OAAOK,wBAAwBjZ,KAAK2Q,IAAKkI,EAAOC,WAEhD3H,YAAY2H,GACZ3H,YAAY0H,KAIhBnI,EAAAhP,UAAAwX,gBAAA,SACEP,EACAC,GAEA,IAAIC,EAAQpH,EAAYkH,GACpBG,EAAQrH,EAAYmH,GACxB,IACE,OAAOO,yBAAyBnZ,KAAK2Q,IAAKkI,EAAOC,WAEjD3H,YAAY2H,GACZ3H,YAAY0H,KAIhBnI,EAAAhP,UAAA0X,gBAAA,SACET,EACAC,GAEA,IAAIC,EAAQpH,EAAYkH,GACpBG,EAAQrH,EAAYmH,GACxB,IACE,OAAOS,yBAAyBrZ,KAAK2Q,IAAKkI,EAAOC,WAEjD3H,YAAY2H,GACZ3H,YAAY0H,KAIhBnI,EAAAhP,UAAA4X,aAAA,SAAaV,GACX,IAAIpH,EAAOC,EAAYmH,GACvB,IACEW,sBAAsBvZ,KAAK2Q,IAAKa,WAEhCL,YAAYK,KAIhBd,EAAAhP,UAAA8X,kBAAA,SACEb,EACAc,EACAC,EACAC,GAEA,IAAId,EAAQpH,EAAYkH,GACpBG,EAAQrH,EAAYgI,GACpBG,EAAQnI,EAAYiI,GACxB,IACE,OAAOG,2BAA2B7Z,KAAK2Q,IAAKkI,EAAOC,EAAOc,EAAOD,WAEjExI,YAAYyI,GACZzI,YAAY2H,GACZ3H,YAAY0H,KAIhBnI,EAAAhP,UAAAoY,eAAA,SACEnB,EACAc,EACAC,GAEA,IAAIb,EAAQpH,EAAYkH,GACpBG,EAAQrH,EAAYgI,GACpBG,EAAQnI,EAAYiI,GACxB,IACE,OAAOK,wBAAwB/Z,KAAK2Q,IAAKkI,EAAOC,EAAOc,WAEvDzI,YAAYyI,GACZzI,YAAY2H,GACZ3H,YAAY0H,KAIhBnI,EAAAhP,UAAAsY,gBAAA,SACErB,EACAc,EACAC,GAEA,IAAIb,EAAQpH,EAAYkH,GACpBG,EAAQrH,EAAYgI,GACpBG,EAAQnI,EAAYiI,GACxB,IACE,OAAOO,yBAAyBja,KAAK2Q,IAAKkI,EAAOC,EAAOc,WAExDzI,YAAYyI,GACZzI,YAAY2H,GACZ3H,YAAY0H,KAIhBnI,EAAAhP,UAAAwY,gBAAA,SACEvB,EACAc,EACAC,EACAS,GAEA,IAAItB,EAAQpH,EAAYkH,GACpBG,EAAQrH,EAAYgI,GACpBG,EAAQnI,EAAYiI,GACxB,IACE,OAAOU,yBAAyBpa,KAAK2Q,IAAKkI,EAAOC,EAAOc,EAAOO,WAE/DhJ,YAAYyI,GACZzI,YAAY2H,GACZ3H,YAAY0H,KAIhBnI,EAAAhP,UAAA2Y,aAAA,SAAa1B,GACX,IAAInH,EAAOC,EAAYkH,GACvB,IACE2B,sBAAsBta,KAAK2Q,IAAKa,WAEhCL,YAAYK,KAIhBd,EAAAhP,UAAA6Y,UAAA,SACEC,EACAC,EACAC,EACAnD,EACAoD,QAAA,IAAAA,MAAA,MAOA,IALA,IAAInJ,EAAOC,EAAYkJ,GACnBC,EAAIF,EAAStW,OACbyW,EAAO,IAAI3V,MAAa0V,GACxBE,EAAO,IAAI5V,MAAqB0V,GAChCG,EAAO,IAAI7V,MAAa0V,GACnBva,EAAI,EAAGA,EAAIua,IAAKva,EAAG,CAC1B,IAAIkQ,EAASmK,EAASra,GAAGkQ,OACrBC,EAASkK,EAASra,GAAGmQ,OACzBqK,EAAKxa,GAAK4Q,EAAaV,GACvBuK,EAAKza,GAAKkX,GAAU9R,EAAAuV,OAAOC,OACvBjb,KAAKiS,UAAUiJ,QAAQ1K,GAAS2K,SAAS3K,IACzCxQ,KAAK8R,UAAUoJ,QAAQ1K,IAC3BuK,EAAK1a,GAAKkQ,EAAOnM,OAEnB,IAAIgX,EAAQ1J,EAAcmJ,GACtBQ,EAAQ3J,EAAcoJ,GACtBQ,EAAQ5J,EAAcqJ,GAC1B,IACEQ,mBAAmBvb,KAAK2Q,IAAK6J,EAASC,EAASjJ,EAAM4J,EAAOC,EAAOC,EAAOV,WAE1EzJ,YAAYmK,GACZnK,YAAYkK,GACZlK,YAAYiK,GACZ,IAAS/a,EAAIua,EAAI,EAAGva,GAAK,IAAKA,EAAG8Q,YAAY0J,EAAKxa,IAClD8Q,YAAYK,KAIhBd,EAAAhP,UAAA8Z,iBAAA,SAAiBC,GACf,IAAIzK,EAAOU,EAAc+J,GACzB,IACEC,0BAA0B1b,KAAK2Q,IAAKK,EAAMyK,EAAMrX,gBAEhD+M,YAAYH,KAIhBN,EAAAhP,UAAAia,SAAA,SAASC,GACPC,kBAAkB7b,KAAK2Q,IAAKiL,IAG9BlL,EAAAhP,UAAAoa,iBAAA,SAAiBC,QAAA,IAAAA,MAAA,GACfC,0BAA0BD,IAG5BrL,EAAAhP,UAAAua,eAAA,SAAeF,QAAA,IAAAA,MAAA,GACbG,wBAAwBH,IAG1BrL,EAAAhP,UAAAya,aAAA,SAAaC,QAAA,IAAAA,OAAA,GACXC,sBAAsBD,IAGxB1L,EAAAhP,UAAA4a,SAAA,SAASV,QAAA,IAAAA,MAAA,GACHA,EACFW,0BAA0BX,EAAM5b,KAAK2Q,KAErC6L,wBAAwBxc,KAAK2Q,MAIjCD,EAAAhP,UAAA+a,UAAA,SAAUC,EAAkBd,QAAA,IAAAA,MAAA,GAG1B,IAFA,IAAIzE,EAAWuF,EAAOtY,OAClB6S,EAAQ,IAAI/R,MAAaiS,GACpB9W,EAAI,EAAGA,EAAI8W,IAAY9W,EAC9B4W,EAAM5W,GAAKoR,EAAYiL,EAAOrc,IAEhC,IAAI2Q,EAAOU,EAAcuF,GACzB,IACM2E,EACFe,2BAA2Bf,EAAM5b,KAAK2Q,IAAKK,EAAMmG,GAEjDyF,yBAAyB5c,KAAK2Q,IAAKK,EAAMmG,WAG3ChG,YAAYH,GACZ,IAAS3Q,EAAI8W,EAAU9W,GAAK,IAAKA,EAC/B8Q,YAAY8F,EAAM5W,MAKxBqQ,EAAAhP,UAAAmb,SAAA,WACE,OAA4C,GAArCC,wBAAwB9c,KAAK2Q,MAGtCD,EAAAhP,UAAAqb,UAAA,WACEC,yBAAyBhd,KAAK2Q,MAGhCD,EAAAhP,UAAAub,SAAA,SAASC,GACP,IAAIrM,EAAM7Q,KAAK6Q,IACXW,EAAOC,EAAYyL,GACnBC,EAAmB,EACnBC,EAAsB,EAC1B,IACEC,gCAAgCxM,EAAK7Q,KAAK2Q,IAAKa,GAC/C2L,EAAYG,EAAQzM,GACpB,IAAI0M,EAAcD,EAAQzM,EAAM,GAChCuM,EAAeE,EAAQzM,EAAM,GAC7B,IAAI2M,EAAM,IAAIC,EAGd,OAFAD,EAAIE,OAASC,EAAWR,EAAWI,GACnCC,EAAII,UAAYC,EAAWT,GACpBI,UAEHhM,GAAML,YAAYK,GAClB2L,GAAWhM,YAAYgM,GACvBC,GAAcjM,YAAYiM,KAIlC1M,EAAAhP,UAAAoc,OAAA,WACE,MAAM,IAAIC,MAAM,oBAGlBrN,EAAAhP,UAAAsc,QAAA,WACE,MAAM,IAAID,MAAM,oBAGlBrN,EAAAhP,UAAAuc,QAAA,WACOje,KAAK2Q,MACVuN,uBAAuBle,KAAK2Q,KAC5BQ,YAAYnR,KAAK6Q,OAGnBH,EAAAhP,UAAAyc,eAAA,WACE,OAAOC,EAASlb,OAAOlD,OAGzB0Q,EAAAhP,UAAA2c,gBAAA,SAAgB1L,EACd2L,EACAC,GAEA,QAHA,IAAAD,OAAA,QACA,IAAAC,MAAgBC,IAAIC,WAEhBF,EAAW,EAAG,OAAO,EAGzB,IAAIG,EACAC,EAEJ,OALAJ,GAAY,EAKJK,yBAAyBjM,IAC/B,KAAKnN,EAAaqZ,MAChB,OAAQC,2BAA2BnM,IACjC,KAAKpN,EAAWwZ,IACd,OAAO/e,KAAK8R,UAAUkN,0BAA0BrM,IAElD,KAAKpN,EAAW0Z,IACd,OAAOjf,KAAKiS,UACViN,6BAA6BvM,GAC7BwM,8BAA8BxM,IAGlC,KAAKpN,EAAW6Z,IACd,OAAOpf,KAAKqS,UAAUgN,0BAA0B1M,IAElD,KAAKpN,EAAW+Z,IACd,OAAOtf,KAAKuS,UAAUgN,0BAA0B5M,IAElD,QACE,MAAM,IAAIoL,MAAM,0BAItB,KAAKvY,EAAaga,SAChB,OAAOjM,kBAAkBvT,KAAK2Q,IAC5B8O,0BAA0B9M,GAC1BmM,2BAA2BnM,IAG/B,KAAKnN,EAAaka,UAChB,IAAIC,EAAaC,0BAA0BjN,GAC3C,IAAKgN,EAAY,MACjB,OAAOhM,mBAAmB3T,KAAK2Q,IAAKgP,EAAYb,2BAA2BnM,IAE7E,KAAKnN,EAAaqa,KAChB,KAAMnB,EAAU1e,KAAKqe,gBAAgByB,oBAAoBnN,GAAO2L,EAAeC,IAC7E,MAEF,OAAOwB,sBAAsBpN,GACzByB,oBAAoBpU,KAAK2Q,IACvBqP,sBAAsBrN,GACtBsN,uBAAuBtN,GACvBmM,2BAA2BnM,GAC3B+L,GAEF1K,cAAchU,KAAK2Q,IACjBqP,sBAAsBrN,GACtBuN,sBAAsBvN,GAAQ,EAAI,EAClCsN,uBAAuBtN,GACtBwN,sBAAsBxN,GACtBmM,2BAA2BnM,GAC3B+L,GAGT,KAAKlZ,EAAa4a,MAChB,KAAM1B,EAAU1e,KAAKqe,gBAAgBgC,uBAAuB1N,GAAO2L,EAAeC,IAChF,MAEF,OAAO3L,eAAe5S,KAAK2Q,IAAK2P,oBAAoB3N,GAAO+L,GAE7D,KAAKlZ,EAAaiY,OAChB,KAAMiB,EAAU1e,KAAKqe,gBAAgBkC,uBAAuB5N,GAAO2L,EAAeC,IAChF,MAEF,KAAMI,EAAU3e,KAAKqe,gBAAgBmC,wBAAwB7N,GAAO2L,EAAeC,IACjF,MAEF,OAAOvL,gBAAgBhT,KAAK2Q,IAAK8P,qBAAqB9N,GAAO+L,EAASC,GAG1E,OAAO,GAKTjO,EAAAhP,UAAAgf,iBAAA,SAAiB9f,GACf,IAAI4Q,EAAOC,EAAY7Q,GACvB,IACE,OAAO+f,oCAAoC3gB,KAAK2Q,IAAKa,WAErDL,YAAYK,KAIhBd,EAAAhP,UAAAkf,iBAAA,SAAiBvN,GACf,OAAOwK,EAAWgD,oCAAoC7gB,KAAK2Q,IAAK0C,KAGlE3C,EAAAhP,UAAAof,iBAAA,SACElF,EACAjJ,EACAoO,EACAC,EACAC,GAEAC,kCAAkCtF,EAAMjJ,EAAMoO,EAAWC,EAAYC,IApyBvDvQ,EAAAyQ,kBAA2B,MAsyB7CzQ,EA3yBA,GAAahR,EAAAgR,SA6yBb,IAAA0N,EAAA,WAmBE,SAAAA,KA0BF,OAxCSA,EAAAlb,OAAP,SAAcvD,GACZ,IAAIyhB,EAAW,IAAIhD,EAGjB,OAFFgD,EAASzhB,OAASA,EAClByhB,EAASzQ,IAAM0Q,kBACND,GAGJhD,EAAAkD,WAAP,SAAkB3hB,GAChB,IAAIyhB,EAAW,IAAIhD,EAGnB,OAFAgD,EAASzhB,OAASA,EAClByhB,EAASzQ,IAAM,EACRyQ,GAKThD,EAAA1c,UAAA6f,SAAA,SAASxe,GACP,OAAOye,kBAAkBxhB,KAAK2Q,IAAK5N,IAGrCqb,EAAA1c,UAAA+f,UAAA,SAAUC,EAAwBC,EAAsB7L,EAA8B/S,QAA9B,IAAA+S,MAAA,QAA8B,IAAA/S,MAAA,GACpF6e,mBAAmBF,EAAMC,EAAI7L,EAAW/S,IAG1Cqb,EAAA1c,UAAAmgB,mBAAA,SAAmB9e,EAAqB+S,GACtC,OAAOgM,4BAA4B9hB,KAAK2Q,IAAK5N,EAAM+S,IAGrDsI,EAAA1c,UAAAqgB,mBAAA,SAAmBL,EAAwBC,EAAsBK,EAAgBjf,QAAA,IAAAA,MAAA,GAC/E,IAAIiO,EAAOU,EAAcsQ,GACzB,IACEC,4BAA4BP,EAAMC,EAAI3Q,EAAMgR,EAAQ5d,OAAQrB,WAE5DoO,YAAYH,KAIhBoN,EAAA1c,UAAAwgB,iBAAA,SAAiBC,EAAyBC,GACxC,OAAOC,0BAA0BriB,KAAK2Q,IAAKwR,EAAOC,EAAapiB,KAAKL,OAAOgR,MAE/EyN,EA7CA,GAkDA,SAAAnN,EAAsBqR,GACpB,IAAKA,EAAK,OAAO,EAIjB,IAHA,IAAIC,EAAYD,EAAIle,OAChB2P,EAAMjD,gBAAgByR,GACtBC,EAAMzO,EACD1T,EAAI,EAAGA,EAAIkiB,IAAaliB,EAC/BoiB,MAAUD,IAAOF,EAAIjiB,IAEvB,OAAO0T,EAGT,SAAArC,EAAuBgR,GACrB,IAAKA,EAAM,OAAO,EAGlB,IAFA,IAAI3O,EAAMjD,gBAAgB4R,EAAKte,QAAU,GACrCoe,EAAMzO,EACD1T,EAAI,EAAGua,EAAI8H,EAAKte,OAAQ/D,EAAIua,IAAKva,EAAG,CAC3C,IAAIsiB,EAAMD,EAAKriB,GAEfoiB,MAAUD,EAAyB,IAAdG,GACrBF,MAAUD,EAAM,EAAKG,GAAS,EAAK,KACnCF,MAAUD,EAAM,EAAKG,GAAQ,GAAM,KACnCF,MAAUD,EAAM,EAAKG,IAAQ,IAC7BH,GAAO,EAET,OAAOzO,EA2BT,SAAAtC,EAAqBmR,GACnB,GAAW,MAAPA,EAAa,OAAO,EAGxB,IAFA,IAAI7O,EAAMjD,gBA1BZ,SAA0B8R,GAExB,IADA,IAAIze,EAAM,EACD9D,EAAI,EAAGua,EAAIgI,EAAIxe,OAAQ/D,EAAIua,IAAKva,EAAG,CAC1C,IAAIwiB,EAAID,EAAIte,WAAWjE,GACnBwiB,GAAK,OAAUA,GAAK,OAAUxiB,EAAI,EAAIua,IACxCiI,EAAI,QAAgB,KAAJA,IAAc,IAA6B,KAAtBD,EAAIte,aAAajE,IAEpDwiB,GAAK,MACL1e,EAEFA,GADS0e,GAAK,KACP,EACEA,GAAK,MACP,EACEA,GAAK,QACP,EACEA,GAAK,SACP,EAEA,EAGX,OAAO1e,EAKmB2e,CAAiBF,GAAO,GAC9CJ,EAAMzO,EACD1T,EAAI,EAAGua,EAAIgI,EAAIxe,OAAQ/D,EAAIua,IAAKva,EAAG,CAC1C,IAAIwiB,EAAID,EAAIte,WAAWjE,GACnBwiB,GAAK,OAAUA,GAAK,OAAUxiB,EAAI,EAAIua,IACxCiI,EAAI,QAAgB,KAAJA,IAAc,IAA6B,KAAtBD,EAAIte,aAAajE,IAEpDwiB,GAAK,IACPJ,MAAUD,IAAOK,GACRA,GAAK,MACdJ,MAAUD,IAAQ,IAASK,IAAM,GACjCJ,MAAUD,IAAQ,IAAqB,GAAZK,IAClBA,GAAK,OACdJ,MAAUD,IAAQ,IAASK,IAAM,IACjCJ,MAAUD,IAAQ,IAASK,IAAO,EAAK,IACvCJ,MAAUD,IAAQ,IAAqB,GAAZK,IAClBA,GAAK,SACdJ,MAAUD,IAAQ,IAASK,IAAM,IACjCJ,MAAUD,IAAQ,IAASK,IAAM,GAAM,IACvCJ,MAAUD,IAAQ,IAASK,IAAO,EAAK,IACvCJ,MAAUD,IAAQ,IAAqB,GAAZK,IAClBA,GAAK,UACdJ,MAAUD,IAAQ,IAASK,IAAM,IACjCJ,MAAUD,IAAQ,IAASK,IAAM,GAAM,IACvCJ,MAAUD,IAAQ,IAASK,IAAM,GAAM,IACvCJ,MAAUD,IAAQ,IAASK,IAAO,EAAK,IACvCJ,MAAUD,IAAQ,IAAqB,GAAZK,KAE3BJ,MAAUD,IAAQ,IAASK,IAAM,IACjCJ,MAAUD,IAAQ,IAASK,IAAM,GAAM,IACvCJ,MAAUD,IAAQ,IAASK,IAAM,GAAM,IACvCJ,MAAUD,IAAQ,IAASK,IAAM,GAAM,IACvCJ,MAAUD,IAAQ,IAASK,IAAO,EAAK,IACvCJ,MAAUD,IAAQ,IAAqB,GAAZK,IAI/B,OADAJ,MAAUD,EAAK,GACRzO,EAGT,SAAAuJ,EAAwBvJ,GACtB,OACGgP,KAAShP,GACTgP,KAAShP,EAAM,IAAO,EACtBgP,KAAShP,EAAM,IAAM,GACrBgP,KAAShP,EAAM,IAAM,GAI1B,SAAA4J,EAA2B5J,EAAY3P,GAErC,IADA,IAAIoZ,EAAM,IAAIwF,WAAW5e,GAChB/D,EAAW,EAAGA,EAAI+D,IAAU/D,EACnCmd,EAAInd,GAAK0iB,KAAShP,EAAM1T,GAE1B,OAAOmd,EAGT,SAAAK,EAA2B9J,GACzB,IAAKA,EAAK,OAAO,KAKjB,IAJA,IAEIkP,EACAC,EAASC,EAASC,EAASC,EAH3BC,EAAM,IAAIpe,MAIP+d,EAAKF,KAAShP,MACR,IAALkP,GAINC,EAAuB,GAAlBH,KAAShP,KACK,MAAT,IAALkP,IAILE,EAAuB,GAAlBJ,KAAShP,KACK,MAAT,IAALkP,GACHA,GAAY,GAALA,IAAY,GAAOC,GAAM,EAAKC,GAErCC,EAAuB,GAAlBL,KAAShP,KACK,MAAT,IAALkP,GACHA,GAAY,EAALA,IAAW,GAAOC,GAAM,GAAOC,GAAM,EAAKC,GAEjDC,EAAuB,GAAlBN,KAAShP,KAEZkP,EADiB,MAAT,IAALA,IACS,EAALA,IAAW,GAAOC,GAAM,GAAOC,GAAM,GAAOC,GAAM,EAAKC,GAGlD,EAALJ,IAAW,GAAOC,GAAM,GAAOC,GAAM,GAAOC,GAAM,GAAOC,GAAM,EAD/C,GAAlBN,KAAShP,QAflBuP,EAAI7e,MAAY,GAALwe,IAAY,EAAKC,IAL5BI,EAAI7e,KAAKwe,GAkCb,OAAOM,OAAOC,eAAeF,GA1MlB5jB,EAAA0e,WA+Ib1e,EAAA4d,UASA5d,EAAAie,aAQAje,EAAAme,aA8CA,IAAAJ,EAAA,WAKA,OALA,43BChuCA,IAAAgG,EAAAtjB,EAAA,GAMAujB,EAAAvjB,EAAA,GAOAwjB,EAAAxjB,EAAA,GAiDAyjB,EAAAzjB,EAAA,GAOaT,EAAAmkB,eAAiB,IAEjBnkB,EAAAokB,aAAe,KAEfpkB,EAAAqkB,cAAgB,OAEhBrkB,EAAAskB,cAAgB,OAEhBtkB,EAAAukB,mBAAqB,IAErBvkB,EAAAwkB,iBAAmB,IAEnBxkB,EAAAykB,cAAgB,QAEhBzkB,EAAA0kB,eAAiB1kB,EAAAykB,cAAgBzkB,EAAAmkB,eAG9C,IAAAQ,EAAA,WAIA,OAJA,gBAOAC,EAAA,WAKA,OALA,gBAQAC,EAAA,WAGA,OAHA,gBAKMC,EAAa,IAAIC,IAGvBC,EAAA,SAAAC,GAkBE,SAAAD,EAAYzf,QAAA,IAAAA,MAAA,MAAZ,IAAA2f,EACED,EAAAnkB,KAAAR,KAAMiF,IAAYjF,YAdpB4kB,EAAAC,kBAAyB,EAIzBD,EAAAE,SAAgC,IAAIL,IAEpCG,EAAAG,MAA0BP,EAE1BI,EAAAI,YAAqC,IAAIP,IAEzCG,EAAAllB,QAA+B,IAAI+kB,IAKjCG,EAAKK,aAkoDT,OAtpD6BC,EAAAR,EAAAC,GAwB3BD,EAAAhjB,UAAAyjB,WAAA,SAAWC,GACTplB,KAAKolB,QAAUA,EACfplB,KAAK+kB,MAAQ,IAAIN,MACd,KAAMf,EAAA2B,KAAKC,KACX,MAAO5B,EAAA2B,KAAKE,MACZ,MAAO7B,EAAA2B,KAAK7G,MACZ,MAAOkF,EAAA2B,KAAKG,MACZ,QAASJ,EAAQK,YACjB,KAAM/B,EAAA2B,KAAKK,KACX,MAAOhC,EAAA2B,KAAKM,MACZ,MAAOjC,EAAA2B,KAAKO,MACZ,MAAOlC,EAAA2B,KAAKQ,MACZ,QAAST,EAAQU,YACjB,OAAQpC,EAAA2B,KAAKU,OACb,MAAOrC,EAAA2B,KAAKW,MACZ,MAAOtC,EAAA2B,KAAKY,MACZ,OAAQvC,EAAA2B,KAAKa,OACb,SAAUxC,EAAA2B,KAAKY,MACf,UAAWvC,EAAA2B,KAAKU,QAQnB,IALA,QAAII,EAAgB,IAAI1B,IACpB2B,EAAgB,IAAIlhB,MACpBmhB,EAAuB,IAAInhB,MAGtB7E,EAAI,EAAGua,EAAI5a,KAAKilB,QAAQ7gB,OAAQ/D,EAAIua,IAAKva,EAGhD,IAFA,IACIimB,EADStmB,KAAKilB,QAAQ5kB,GACFimB,WACfC,EAAI,EAAGjmB,EAAIgmB,EAAWliB,OAAQmiB,EAAIjmB,IAAKimB,EAAG,CACjD,IAAIC,EAAYF,EAAWC,GAC3B,OAAQC,EAAUC,MAChB,KAAK9C,EAAA+C,SAASC,iBACZ3mB,KAAK4mB,gBAAkCJ,EAAWH,GAClD,MAEF,KAAK1C,EAAA+C,SAASG,gBACZ7mB,KAAK8mB,eAAgCN,GACrC,MAEF,KAAK7C,EAAA+C,SAASK,OACZ/mB,KAAKgnB,kBAAmCR,EAAWL,GACnD,MAEF,KAAKxC,EAAA+C,SAASO,oBACZjnB,KAAKknB,mBAAwCV,GAC7C,MAEF,KAAK7C,EAAA+C,SAASS,OACZnnB,KAAKonB,kBAAmCZ,EAAWL,EAAeC,GAClE,MAEF,KAAKzC,EAAA+C,SAASW,qBACZrnB,KAAKsnB,oBAA0Cd,GAC/C,MAEF,KAAK7C,EAAA+C,SAASa,qBACZvnB,KAAKwnB,oBAA0ChB,EAAWH,GAC1D,MAEF,KAAK1C,EAAA+C,SAASe,gBACZznB,KAAK0nB,oBAAqClB,GAC1C,MAEF,KAAK7C,EAAA+C,SAASiB,SACZ3nB,KAAK4nB,oBAAuCpB,IAQpD,IAASnmB,EAAI,EAAGA,EAAI+lB,EAAchiB,QAAS,CACzC,IAAIyjB,EAAezB,EAAc/lB,IAC7BynB,EAAU9nB,KAAK+nB,iBAAiBF,EAAaG,eAAgB7B,KAE/DnmB,KAAK8kB,SAASmD,IAAIJ,EAAalP,aAAcmP,GAC7C1B,EAAc8B,OAAO7nB,EAAG,KAEpBynB,EAAU9nB,KAAK+nB,iBAAiBF,EAAaM,kBAAmBhC,KAClEnmB,KAAK8kB,SAASmD,IAAIJ,EAAalP,aAAcmP,GAC7C1B,EAAc8B,OAAO7nB,EAAG,KAExBL,KAAKoF,MACHqe,EAAAlhB,eAAe6lB,kCACfP,EAAaQ,YAAYplB,MACP4kB,EAAaQ,YAAYC,OAAQC,KAAKlnB,MACxDwmB,EAAaQ,YAAYzP,aAAa1U,QAEtC7D,OAMR,IAAuC,IAAAmoB,EAAAC,EAAAtC,GAAauC,EAAAF,EAAAG,QAAAD,EAAAE,KAAAF,EAAAF,EAAAG,OAAA,CAA3C,IAAAE,EAAAC,EAAAJ,EAAArnB,MAAA,GAACsZ,EAAAkO,EAAA,GAAYE,EAAAF,EAAA,GAChBG,EAAqCD,EACrCjB,OAAO,EACX,EAAG,CACD,IAAIkB,EAAcC,WAkBX,EAGFnB,EAAU9nB,KAAK8kB,SAAS3jB,IAAI6nB,EAAchB,mBAE1CF,EAAU9nB,KAAK8kB,SAAS3jB,IAAI6nB,EAAcE,OAAOtoB,KAAKsD,OAEvDlE,KAAKmpB,yBACHxO,EACAmN,EACAkB,EAAcE,OAAOtQ,cAGvB5Y,KAAKoF,MACHqe,EAAAlhB,eAAe6mB,mBACfL,EAAaG,OAAOjmB,MAAO8lB,EAAaG,OAAOtoB,KAAKsD,MAGxD,MAnCA,GAAI4jB,EAAU9nB,KAAKN,QAAQyB,IAAI6nB,EAAchB,gBAAiB,CAC5DhoB,KAAKmpB,yBACHxO,EACAmN,EACAkB,EAAcE,OAAOtQ,cAEvB,OAEFoQ,EAAgB7C,EAAchlB,IAAI6nB,EAAchB,kBAE9ChoB,KAAKoF,MACHqe,EAAAlhB,eAAe6lB,kCACfW,EAAaG,OAAOtQ,aAAa3V,MACW8lB,EAAaG,OAAOZ,OAAQC,KAAMlnB,MAC9E0nB,EAAaG,OAAOtQ,aAAa1U,YAuBhC8kB,qGAIX,IAAS3oB,EAAI,EAAGua,EAAIyL,EAAqBjiB,OAAQ/D,EAAIua,IAAKva,EAAG,CAC3D,IAAIgpB,EAAqBhD,EAAqBhmB,GAAGgoB,YAC7CiB,EAAcC,OAAOF,EAAmBG,aACxCC,EAAWzpB,KAAK0pB,kBAAkBJ,EAAY1oB,KAAM,MACxD,GAAI6oB,EAAU,CACZ,GAAIA,EAAS3B,QAAQrB,MAAQkD,EAAYC,gBAAiB,CACxD5pB,KAAKoF,MACHqe,EAAAlhB,eAAesnB,sCACfP,EAAYrmB,OAEd,SAEFojB,EAAqBhmB,GAAGypB,cACNL,EAAS3B,WAOzBpD,EAAAhjB,UAAAqmB,iBAAR,SACEC,EACA7B,GAGA,IADA,IAAI2B,IACD,CACD,GAAIA,EAAU9nB,KAAKN,QAAQyB,IAAI6mB,GAAiB,OAAOF,EACvD,IAAIiB,EAAe5C,EAAchlB,IAAI6mB,GACrC,IAAKe,EAAc,OAAO,KAC1B,IAAIA,EAAaE,WAIjB,OAAOjpB,KAAK8kB,SAAS3jB,IAAI4nB,EAAaf,gBAHpCA,EAAiBe,EAAaf,iBAO5BtD,EAAAhjB,UAAAqoB,wBAAR,SACEjC,EACAO,GAEA,IAAI2B,EAAkBrG,EAAAsG,aAAa,UAAW5B,EAAY6B,YACtDF,GAAWlC,EAAQG,IAAIkC,EAAaC,UAEtCzG,EAAAsG,aAAa,SAAU5B,EAAY6B,aAEjC7B,EAAYplB,MAAMW,OAAOymB,WACzBvC,EAAQwC,GAAGH,EAAaI,YAEtBhB,OAAOlB,EAAYC,QAAQ7B,MAAQ9C,EAAA+C,SAAS8D,QAEpCnC,EAAYC,OAAQ7B,MAAQ9C,EAAA+C,SAASiB,UAC3C4B,OAAclB,EAAYC,OAAQA,QAAQ7B,MAAQ9C,EAAA+C,SAAS8D,WAIjE1C,EAAQG,IAAIkC,EAAaM,QACrBzqB,KAAK8kB,SAAS4F,IAAIrC,EAAYznB,KAAKsD,MACrClE,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO6kB,EAAQnP,eAGlC3Y,KAAK8kB,SAASmD,IAAII,EAAYznB,KAAKsD,KAAM4jB,GACzC9nB,KAAKN,QAAQuoB,IAAII,EAAYznB,KAAKsD,KAAM4jB,GACpCkC,IACFlC,EAAQnP,aAAe0P,EAAYznB,KAAKsD,SAMxCwgB,EAAAhjB,UAAAklB,gBAAR,SACEyB,EACAhC,EACAuE,QAAA,IAAAA,MAAA,MAEA,IAAIjS,EAAe0P,EAAYwC,sBAC/B,GAAI7qB,KAAK8kB,SAAS4F,IAAI/R,GACpB3Y,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO0V,OAH5B,CAOA,IAAIjX,EAAY,IAAIopB,EAClB9qB,KACAqoB,EAAYznB,KAAKsD,KACjByU,EACA0P,GAOF,GALA3mB,EAAUkpB,UAAYA,EACtB5qB,KAAK8kB,SAASmD,IAAItP,EAAcjX,GAEhC1B,KAAK+pB,wBAAwBroB,EAAW2mB,GAEpC1E,EAAAsG,aAAa,YAAa5B,EAAY6B,YACxCxoB,EAAUqpB,aAAc,EACpB1C,EAAY2C,iBAAmB3C,EAAY2C,gBAAgB5mB,QAC7DpE,KAAKoF,MACHqe,EAAAlhB,eAAe0oB,oCACftH,EAAAuH,MAAMxmB,KACJ2jB,EAAYznB,KAAKqC,MACjBolB,EAAY2C,gBAAgB3C,EAAY2C,gBAAgB5mB,OAAS,GAAGnB,aAIrE,GAAIolB,EAAY2C,gBAAgB5mB,OACrC,MAAM,IAAI2Z,MAAM,mBASlB,GALIsK,EAAYmB,aACdnD,EAAqB5hB,KAAK/C,GAIxBkpB,EAAW,CACb,GAAIA,EAAUO,SACZ,GAAIP,EAAUO,QAAQT,IAAIrC,EAAYznB,KAAKsD,MAKzC,YAJAlE,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO0V,QAK5BiS,EAAUO,QAAU,IAAI1G,IAE1BmG,EAAUO,QAAQlD,IAAII,EAAYznB,KAAKsD,KAAMxC,QAGxC,GAAIA,EAAU4oB,GAAGH,EAAaI,UAAW,CAC9C,GAAIvqB,KAAKN,QAAQgrB,IAAI/R,GAKnB,YAJA3Y,KAAKoF,MACHqe,EAAAlhB,eAAe6oB,4DACf/C,EAAYznB,KAAKqC,MAAO0V,GAI5B3Y,KAAKN,QAAQuoB,IAAItP,EAAcjX,GAKjC,IADA,IAAI2pB,EAAqBhD,EAAY8C,QAC5B9qB,EAAI,EAAGua,EAAIyQ,EAAmBjnB,OAAQ/D,EAAIua,IAAKva,EAAG,CACzD,IAAIirB,EAAoBD,EAAmBhrB,GAC3C,OAAQirB,EAAkB7E,MACxB,KAAK9C,EAAA+C,SAAS6E,iBACZvrB,KAAKwrB,gBAAkCF,EAAmB5pB,GAC1D,MAEF,KAAKiiB,EAAA+C,SAAS+E,kBACZ,IAAIC,EAAW/H,EAAAgI,YACbhI,EAAAiI,aAAaC,IACbP,EAAkBQ,WAGlBJ,GACA/H,EAAAgI,YAAYhI,EAAAiI,aAAaG,IAAKT,EAAkBQ,WAEhD9rB,KAAKgsB,mBACgBV,EACnB5pB,EACAgqB,GAGF1rB,KAAKisB,iBACgBX,EACnB5pB,GAGJ,MAEF,QACE,MAAM,IAAIqc,MAAM,0BAMtB,GACErc,EAAU4oB,GAAGH,EAAaM,SACD,UAAzBpC,EAAYznB,KAAKsD,KAEjB,GAAKlE,KAAK+kB,MAAM2F,IAAI,UAIlB1qB,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAOolB,EAAY6D,8BANT,CAC7B,IAAIC,EAAWzqB,EAAU0qB,QAAQ,MAC7BD,GAAUnsB,KAAK+kB,MAAMkD,IAAI,SAAUkE,EAAS7Y,SAU9CoR,EAAAhjB,UAAA8pB,gBAAR,SACEnD,EACAgE,GAEA,IAAIzrB,EAAOynB,EAAYznB,KAAKsD,KACxByU,EAAe0P,EAAYwC,sBAG/B,GAAIlH,EAAAgI,YAAYhI,EAAAiI,aAAaU,OAAQjE,EAAYyD,WAAY,CAC3D,GAAI9rB,KAAK8kB,SAAS4F,IAAI/R,GAKpB,YAJA3Y,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO0V,GAI5B,GAAI0T,EAAelB,SACjB,GAAIkB,EAAelB,QAAQT,IAAI9pB,GAK7B,YAJAZ,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO0V,QAK5B0T,EAAelB,QAAU,IAAI1G,IAE/B,IAAI8H,EAAc,IAAIC,EACpBxsB,KAAMY,EAAM+X,EAAc0P,EAAa3E,EAAA2B,KAAKa,MAE9CmG,EAAelB,QAAQlD,IAAIrnB,EAAM2rB,GACjCvsB,KAAK8kB,SAASmD,IAAItP,EAAc4T,OAG3B,CACL,GAAIF,EAAeI,iBACjB,GAAIJ,EAAeI,gBAAgB/B,IAAI9pB,GAKrC,YAJAZ,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO0V,QAK5B0T,EAAeI,gBAAkB,IAAIhI,IAEvC,IAAIiI,EAAgB,IAAIC,EACtBN,EACAzrB,EAAM+X,EACN0P,GAEFgE,EAAeI,gBAAgBxE,IAAIrnB,EAAM8rB,KAIrChI,EAAAhjB,UAAAuqB,iBAAR,SACE5D,EACAgE,GAEA,IAAIzrB,EAAOynB,EAAYznB,KAAKsD,KACxByU,EAAe0P,EAAYwC,sBAC3BnpB,EAAsC,KAG1C,GAAIiiB,EAAAgI,YAAYhI,EAAAiI,aAAaU,OAAQjE,EAAYyD,WAAY,CAG3D,GAFAvC,OAAOlB,EAAYznB,KAAK6lB,MAAQ9C,EAAA+C,SAASkG,aAErC5sB,KAAK8kB,SAAS4F,IAAI/R,GAKpB,YAJA3Y,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBAAwBtC,EAAYznB,KAAKqC,MACxD0V,GAIJ,GAAI0T,EAAelB,SACjB,GAAIkB,EAAelB,QAAQT,IAAI9pB,GAK7B,YAJAZ,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO0V,QAK5B0T,EAAelB,QAAU,IAAI1G,IAE/B/iB,EAAY,IAAImrB,EACd7sB,KACAY,EAAM+X,EACN0P,EACA,MAEFgE,EAAelB,QAAQlD,IAAIrnB,EAAMc,GACjC1B,KAAK8kB,SAASmD,IAAItP,EAAcjX,OAG3B,CACL,GAAI2qB,EAAeI,iBACjB,GAAIJ,EAAeI,gBAAgB/B,IAAI9pB,GAKrC,YAJAZ,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO0V,QAK5B0T,EAAeI,gBAAkB,IAAIhI,IAEvC/iB,EAAY,IAAImrB,EACd7sB,KACAY,EAAM+X,EACN0P,EACAgE,GAKEhE,EAAYznB,KAAK6lB,MAAQ9C,EAAA+C,SAASkG,YAChCP,EAAeS,qBACjB9sB,KAAKoF,MACHqe,EAAAlhB,eAAewqB,qDACf1E,EAAYznB,KAAKqC,QAGnBvB,EAAUumB,IAAIkC,EAAayC,aAC3BP,EAAeS,qBAAuBprB,GAGxC2qB,EAAeI,gBAAgBxE,IAAIrnB,EAAMc,GAI7C1B,KAAKgtB,eAAe3E,EAAY6B,WAAYxoB,EAAW2qB,IAGjD3H,EAAAhjB,UAAAsrB,eAAR,SACE9C,EACAxoB,EACA2qB,GAMA,GAAInC,EACF,IAAK,IAAI7pB,EAAI,EAAGua,EAAIsP,EAAW9lB,OAAQ/D,EAAIua,IAAKva,EAAG,CACjD,IAAI4sB,EAAY/C,EAAW7pB,GAC3B,GAA2B,GAAvB4sB,EAAUC,cAAyC,CACrD,IAAKxrB,EAAW,CACd1B,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACfF,EAAUhqB,OAEZ,SAEF,IAAImqB,EAAUH,EAAUI,WAAaJ,EAAUI,UAAUjpB,QAAU,EACnE,GAAe,GAAXgpB,EAAc,CAChB,IAAIE,EAA0BL,EAAUI,UAAW,GACnD,GACEC,EAAS7G,MAAQ9C,EAAA+C,SAAS6G,SACe,GAArBD,EAAUE,YAE9B,OAAkCF,EAAUjsB,OAC1C,IAAK,KACHgrB,EAAeoB,aAAe/rB,EAAUgsB,WACxC,MAEF,IAAK,MACHrB,EAAesB,aAAejsB,EAAUgsB,WACxC,MAEF,IAAK,IACHrB,EAAeuB,SAAWlsB,EAAUgsB,WACpC,MAEF,IAAK,KACHrB,EAAewB,SAAWnsB,EAAUgsB,WACpC,MAEF,QACE1tB,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACfG,EAASrqB,YAKfjD,KAAKoF,MACHqe,EAAAlhB,eAAeurB,wBACfR,EAASrqB,YAIbjD,KAAKoF,MACHqe,EAAAlhB,eAAewrB,+BACfd,EAAUhqB,MAAO,IAAKmqB,EAAQzpB,SAAS,SAGX,GAAvBspB,EAAUC,eAEnBltB,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACfF,EAAUhqB,SAOZyhB,EAAAhjB,UAAAsqB,mBAAR,SACE3D,EACAgE,EACAX,GAEA,IAAIsC,EAAe3F,EAAYznB,KAAKsD,KAChC+pB,EAAuB5F,EAAYwC,sBAEnCqD,EAAkBluB,KAAK8kB,SAAS3jB,IAAI8sB,GACxC,GAAIC,GACF,GACEA,EAAgBzH,MAAQkD,EAAYwE,WACnCzC,EACcwC,EAAiBE,gBACjBF,EAAiBG,iBAOhC,YAJAruB,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAOgrB,QAK5BC,EAAkB,IAAII,EACpBtuB,KACAguB,EAAcC,EACd5B,GAIJ,IAAIzrB,GAAQ8qB,EAAWhsB,EAAAqkB,cAAgBrkB,EAAAskB,eAAiBgK,EAGxD,GAAIrK,EAAAgI,YAAYhI,EAAAiI,aAAaU,OAAQjE,EAAYyD,WAAY,CAC3D,IAAIyC,EAAalC,EAAe1T,aAAejZ,EAAAwkB,iBAAmBtjB,EAClE,GAAIZ,KAAK8kB,SAAS4F,IAAI6D,GAKpB,YAJAvuB,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAOsrB,GAI5B,IAAIC,EAAkB,IAAI3B,EACxB7sB,KACAY,EAAM2tB,EACNlG,EACA,MAEEqD,EACSwC,EAAiBE,gBAAkBI,EAEnCN,EAAiBG,gBAAkBG,EAE3CnC,EAAelB,UAClBkB,EAAelB,QAAU,IAAI1G,KAE/B4H,EAAelB,QAAQlD,IAAI+F,EAAcE,GACzCluB,KAAK8kB,SAASmD,IAAIgG,EAAsBC,OAGnC,CACL,IAAIO,EAAepC,EAAe1T,aAAejZ,EAAAukB,mBAAqBrjB,EACtE,GAAIyrB,EAAeI,iBACjB,GAAIJ,EAAeI,gBAAgB/B,IAAI9pB,GAKrC,YAJAZ,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAOgrB,QAK5B5B,EAAeI,gBAAkB,IAAIhI,IAEvC,IAAIiK,EAAoB,IAAI7B,EAC1B7sB,KACAY,EAAM6tB,EACNpG,EACAgE,GAEEX,EACSwC,EAAiBE,gBAAkBM,EAEnCR,EAAiBG,gBAAkBK,EAEhDrC,EAAeI,gBAAgBxE,IAAIrnB,EAAMstB,GACzCluB,KAAK8kB,SAASmD,IAAIgG,EAAsBC,KAIpCxJ,EAAAhjB,UAAAolB,eAAR,SACEuB,EACAuC,QAAA,IAAAA,MAAA,MAEA,IAAIjS,EAAe0P,EAAYwC,sBAC/B,GAAI7qB,KAAK8kB,SAAS4F,IAAI/R,GACpB3Y,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO0V,OAH5B,CAOA,IAAIgW,EAAM,IAAIC,EAAK5uB,KAAMqoB,EAAYznB,KAAKsD,KAAMyU,EAAc0P,GAM9D,GALAsG,EAAI/D,UAAYA,EAChB5qB,KAAK8kB,SAASmD,IAAItP,EAAcgW,GAEhC3uB,KAAK+pB,wBAAwB4E,EAAKtG,GAE9BuC,EAAW,CACb,GAAIA,EAAUO,SACZ,GAAIP,EAAUO,QAAQT,IAAIrC,EAAYznB,KAAKsD,MAKzC,YAJAlE,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO0V,QAK5BiS,EAAUO,QAAU,IAAI1G,IAE1BmG,EAAUO,QAAQlD,IAAII,EAAYznB,KAAKsD,KAAMyqB,QACxC,GAAIA,EAAIrE,GAAGH,EAAaI,UAAW,CACxC,GAAIvqB,KAAKN,QAAQgrB,IAAI/R,GAKnB,YAJA3Y,KAAKoF,MACHqe,EAAAlhB,eAAe6oB,4DACf/C,EAAYznB,KAAKqC,MAAO0V,GAI5B3Y,KAAKN,QAAQuoB,IAAItP,EAAcgW,GAIjC,IADA,IAAIE,EAASxG,EAAYwG,OAChBxuB,EAAI,EAAGua,EAAIiU,EAAOzqB,OAAQ/D,EAAIua,IAAKva,EAC1CL,KAAK8uB,oBAAoBD,EAAOxuB,GAAIsuB,KAIhCjK,EAAAhjB,UAAAotB,oBAAR,SACEzG,EACAsG,GAEA,IAAI/tB,EAAOynB,EAAYznB,KAAKsD,KACxByU,EAAe0P,EAAYwC,sBAC/B,GAAI8D,EAAIxD,SACN,GAAIwD,EAAIxD,QAAQT,IAAI9pB,GAKlB,YAJAZ,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO0V,QAK5BgW,EAAIxD,QAAU,IAAI1G,IAEpB,IAAIpjB,EAAQ,IAAI0tB,EAAUJ,EAAK3uB,KAAMY,EAAM+X,EAAc0P,GACzDsG,EAAIxD,QAAQlD,IAAIrnB,EAAMS,IAGhBqjB,EAAAhjB,UAAAslB,kBAAR,SACER,EACAL,GAGA,IADA,IAAIgF,EAAU3E,EAAU2E,QACf9qB,EAAI,EAAGua,EAAIuQ,EAAQ/mB,OAAQ/D,EAAIua,IAAKva,EAC3CL,KAAKgvB,iBAAiB7D,EAAQ9qB,GAAImmB,EAAUyI,aAAc9I,IAItDzB,EAAAhjB,UAAAynB,yBAAR,SACEvoB,EACAknB,EACAoH,GAEAlvB,KAAKN,QAAQuoB,IAAIrnB,EAAMknB,GACnBoH,EAAWjsB,MAAMW,OAAOymB,YACtBrqB,KAAK8kB,SAAS4F,IAAIwE,EAAWhrB,MAC/BlE,KAAKoF,MACHqe,EAAAlhB,eAAe6oB,4DACf8D,EAAWjsB,MAAOisB,EAAWhrB,OAG/B4jB,EAAQnP,aAAeuW,EAAWhrB,KAClClE,KAAK8kB,SAASmD,IAAIiH,EAAWhrB,KAAM4jB,MAKjCpD,EAAAhjB,UAAAstB,iBAAR,SACE9F,EACA+F,EACA9I,GAEA,IAQI6B,EACAmH,EACApG,EAVAnQ,EAAesQ,EAAOjmB,MAAMW,OAAOqrB,aAAevvB,EAAAmkB,eAAiBqF,EAAOtQ,aAAa1U,KAC3F,GAAIlE,KAAKN,QAAQgrB,IAAI9R,GACnB5Y,KAAKoF,MACHqe,EAAAlhB,eAAe6oB,4DACflC,EAAOtQ,aAAa3V,MAAO2V,QAS/B,GAAoB,MAAhBqW,EAAsB,CAIxB,GAHAjH,EAAiBkB,EAAOjmB,MAAMW,OAAOqrB,aAAevvB,EAAAmkB,eAAiBqF,EAAOtoB,KAAKsD,KAG7EirB,EAAoBnvB,KAAK8kB,SAAS3jB,IAAI6mB,GAMxC,YALAhoB,KAAKmpB,yBACHvQ,EACAuW,EACAjG,EAAOtQ,cAMX,GAAIuN,EAAcuE,IAAI9R,GAKpB,YAJA5Y,KAAKoF,MACHqe,EAAAlhB,eAAe6oB,4DACflC,EAAOtQ,aAAa3V,MAAO2V,IAI/BmQ,EAAe,IAAI1E,GACN4E,YAAa,EAC1BF,EAAaf,eAAiBA,EAC9Be,EAAaG,OAASA,EACtB/C,EAAc8B,IAAIrP,EAAcmQ,OAG3B,CAKL,GAJAf,EAAiBiH,EAAevvB,EAAAmkB,eAAiBqF,EAAOtoB,KAAKsD,KAG7DirB,EAAoBnvB,KAAK8kB,SAAS3jB,IAAI6mB,GAOpC,YALAhoB,KAAKmpB,yBACHvQ,EACAuW,EACAjG,EAAOtQ,cAOX,IADA,IAAIwW,EAAO,IAAIC,IACRtG,EAAe5C,EAAchlB,IAAI6mB,IAAiB,CACvD,IAAIe,EAAaE,WAaV,CAEL,GADAkG,EAAoBnvB,KAAK8kB,SAAS3jB,IAAI4nB,EAAaf,gBAOjD,YALAhoB,KAAKmpB,yBACHvQ,EACAuW,EACAjG,EAAOtQ,cAIX,MArBA,GADAuW,EAAoBnvB,KAAKN,QAAQyB,IAAI4nB,EAAaf,gBAOhD,YALAhoB,KAAKmpB,yBACHvQ,EACAuW,EACAjG,EAAOtQ,cAKX,GADAoP,EAAiBe,EAAaf,eAC1BoH,EAAK1E,IAAI3B,GAAe,MAC5BqG,EAAKE,IAAIvG,GAgBb,GAAI5C,EAAcuE,IAAI9R,GAKpB,YAJA5Y,KAAKoF,MACHqe,EAAAlhB,eAAe6oB,4DACflC,EAAOtQ,aAAa3V,MAAO2V,IAI/BmQ,EAAe,IAAI1E,GACN4E,YAAa,EAC1BF,EAAaf,eAAiBA,EAC9Be,EAAaG,OAASA,EACtB/C,EAAc8B,IAAIrP,EAAcmQ,KAI5BrE,EAAAhjB,UAAAwlB,mBAAR,SACEmB,EACAuC,QAAA,IAAAA,MAAA,MAEA,IAAIjS,EAAe0P,EAAYwC,sBAC/B,GAAI7qB,KAAK8kB,SAAS4F,IAAI/R,GACpB3Y,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO0V,OAH5B,CAOA,IAAIjX,EAAY,IAAImrB,EAClB7sB,KACAqoB,EAAYznB,KAAKsD,KAAMyU,EACvB0P,EACA,MAOF,GALA3mB,EAAUkpB,UAAYA,EACtB5qB,KAAK8kB,SAASmD,IAAItP,EAAcjX,GAEhC1B,KAAK+pB,wBAAwBroB,EAAW2mB,GAEpCuC,EAAW,CACb,GAAIA,EAAUO,SACZ,GAAIP,EAAUO,QAAQT,IAAIrC,EAAYznB,KAAKsD,MAKzC,YAJAlE,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO0V,QAK5BiS,EAAUO,QAAU,IAAI1G,IAE1BmG,EAAUO,QAAQlD,IAAII,EAAYznB,KAAKsD,KAAMxC,QACxC,GAAIA,EAAU4oB,GAAGH,EAAaI,UAAW,CAC9C,GAAIvqB,KAAKN,QAAQgrB,IAAI/R,GAKnB,YAJA3Y,KAAKoF,MACHqe,EAAAlhB,eAAe6oB,4DACf/C,EAAYznB,KAAKqC,MAAO0V,GAI5B3Y,KAAKN,QAAQuoB,IAAItP,EAAcjX,MAI3BgjB,EAAAhjB,UAAA0lB,kBAAR,SACEZ,EACAL,EACAC,GAEA,IAAImJ,EAAe/I,EAAU+I,aAC7B,GAAIA,EACF,IAAK,IAAIlvB,EAAI,EAAGua,EAAI2U,EAAanrB,OAAQ/D,EAAIua,IAAKva,EAChDL,KAAKwvB,iBACHD,EAAalvB,GACbmmB,EAAUyI,aACV9I,EAAeC,QAGd,GAAII,EAAUiJ,cAAe,CAClC,IAAI9W,EACF6N,EAAUvjB,MAAMW,OAAOqrB,aACvBvvB,EAAAmkB,eACA2C,EAAUiJ,cAAcvrB,KAE1B,GAAIlE,KAAK8kB,SAAS4F,IAAI/R,GAMpB,YALA3Y,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACfnE,EAAUiJ,cAAcxsB,MACxB0V,GAIJ3Y,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACf3G,EAAUvjB,SAKRyhB,EAAAhjB,UAAA8tB,iBAAR,SACEnH,EACA4G,EACA9I,EACAC,GAEA,IAAIzN,EAAe0P,EAAYwC,sBAC/B,GAAI7qB,KAAK8kB,SAAS4F,IAAI/R,GACpB3Y,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO0V,OAH5B,CAQA,IAGImP,EAHAE,EAAiBiH,EAAevvB,EAAAmkB,eAAiBwE,EAAYzP,aAAa1U,KAI9E,GAAI4jB,EAAU9nB,KAAKN,QAAQyB,IAAI6mB,GAC7BhoB,KAAK8kB,SAASmD,IAAItP,EAAcmP,OADlC,CAMA,IAAI4H,EAAYhwB,EAAAmkB,eAAiB,QAC7BgE,EAAe,IAAIvD,EACvBuD,EAAalP,aAAeA,EACxBsW,EAAaU,SAASD,IACxB7H,EAAaG,eAAiBA,EAC9BH,EAAaM,kBACX8G,EAAazqB,UAAU,EAAGyqB,EAAa7qB,OAASsrB,EAAUtrB,OAAS,GACnEikB,EAAYzP,aAAa1U,OAG3B2jB,EAAaG,eAAiBA,EAC9BH,EAAaM,kBACX8G,EACAS,EACAhwB,EAAAmkB,eACAwE,EAAYzP,aAAa1U,MAG7B2jB,EAAaQ,YAAcA,EAC3BjC,EAAc3hB,KAAKojB,MAGbnD,EAAAhjB,UAAA4lB,oBAAR,SAA4Be,EAAmCuC,QAAA,IAAAA,MAAA,MAC7D,IAAIjS,EAAe0P,EAAYwC,sBAC/B,GAAI7qB,KAAK8kB,SAAS4F,IAAI/R,GACpB3Y,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO0V,OAH5B,CAOA,IAAIjX,EAAY,IAAIkuB,EAAmB5vB,KAAMqoB,EAAYznB,KAAKsD,KAAMyU,EAAc0P,GAMlF,GALA3mB,EAAUkpB,UAAYA,EACtB5qB,KAAK8kB,SAASmD,IAAItP,EAAcjX,GAEhC1B,KAAK+pB,wBAAwBroB,EAAW2mB,GAEpCuC,EAAW,CACb,GAAIA,EAAUO,SACZ,GAAIP,EAAUO,QAAQT,IAAIhpB,EAAUiX,cAKlC,YAJA3Y,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO0V,QAK5BiS,EAAUO,QAAU,IAAI1G,IAE1BmG,EAAUO,QAAQlD,IAAIvmB,EAAUiX,aAAcjX,QACzC,GAAIA,EAAU4oB,GAAGH,EAAaI,UAAW,CAC9C,GAAIvqB,KAAKN,QAAQgrB,IAAI/R,GAKnB,YAJA3Y,KAAKoF,MACHqe,EAAAlhB,eAAe6oB,4DACf/C,EAAYznB,KAAKqC,MAAO0V,GAI5B3Y,KAAKN,QAAQuoB,IAAItP,EAAcjX,GAIjC,IADA,IAAI2pB,EAAqBhD,EAAY8C,QAC5B9qB,EAAI,EAAGua,EAAIyQ,EAAmBjnB,OAAQ/D,EAAIua,IAAKva,EAAG,CACzD,IAAIirB,EAAoBD,EAAmBhrB,GAC3C,OAAQirB,EAAkB7E,MAExB,KAAK9C,EAAA+C,SAAS6E,iBACZvrB,KAAKwrB,gBAAkCF,EAAmB5pB,GAC1D,MAEF,KAAKiiB,EAAA+C,SAAS+E,kBACZ,IAAIC,EAAW/H,EAAAgI,YAAYhI,EAAAiI,aAAaC,IAAKP,EAAkBQ,WAC3DJ,GAAY/H,EAAAgI,YAAYhI,EAAAiI,aAAaG,IAAKT,EAAkBQ,WAC9D9rB,KAAKgsB,mBAAsCV,EAAmB5pB,EAAWgqB,GAEzE1rB,KAAKisB,iBAAoCX,EAAmB5pB,GAE9D,MAEF,QACE,MAAM,IAAIqc,MAAM,iCAMhB2G,EAAAhjB,UAAA8lB,oBAAR,SACEa,EACAwH,EACAC,QAAA,IAAAA,MAAA,MAEA,IAAInX,EAAe0P,EAAYwC,sBAE3BD,EAAY5qB,KAAK8kB,SAAS3jB,IAAIwX,GAQlC,GAPKiS,KACHA,EAAY,IAAImF,EAAU/vB,KAAMqoB,EAAYznB,KAAKsD,KAAMyU,EAAc0P,IAC3DuC,UAAYkF,EACtB9vB,KAAK8kB,SAASmD,IAAItP,EAAciS,GAChC5qB,KAAK+pB,wBAAwBa,EAAWvC,IAGtCyH,EAAiB,CACnB,GAAIA,EAAgB3E,SAClB,GAAI2E,EAAgB3E,QAAQT,IAAIrC,EAAYznB,KAAKsD,MAK/C,YAJAlE,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO0V,QAK5BmX,EAAgB3E,QAAU,IAAI1G,IAEhCqL,EAAgB3E,QAAQlD,IAAII,EAAYznB,KAAKsD,KAAM0mB,QAC9C,GAAIA,EAAUN,GAAGH,EAAaI,UAAW,CAC9C,GAAIvqB,KAAKN,QAAQgrB,IAAI/R,GAKnB,YAJA3Y,KAAKoF,MACHqe,EAAAlhB,eAAe6oB,4DACf/C,EAAYznB,KAAKqC,MAAO0V,GAI5B3Y,KAAKN,QAAQuoB,IAAItP,EAAciS,GAIjC,IADA,IAAIO,EAAU9C,EAAY8C,QACjB9qB,EAAI,EAAGua,EAAIuQ,EAAQ/mB,OAAQ/D,EAAIua,IAAKva,EAC3C,OAAQ8qB,EAAQ9qB,GAAGomB,MACjB,KAAK9C,EAAA+C,SAASC,iBACZ3mB,KAAK4mB,gBAAkCuE,EAAQ9qB,GAAIwvB,EAAwBjF,GAC3E,MAEF,KAAKjH,EAAA+C,SAASG,gBACZ7mB,KAAK8mB,eAAgCqE,EAAQ9qB,GAAIuqB,GACjD,MAEF,KAAKjH,EAAA+C,SAASO,oBACZjnB,KAAKknB,mBAAwCiE,EAAQ9qB,GAAIuqB,GACzD,MAEF,KAAKjH,EAAA+C,SAASW,qBACZrnB,KAAKsnB,oBAA0C6D,EAAQ9qB,GAAIuqB,GAC3D,MAEF,KAAKjH,EAAA+C,SAASa,qBACZvnB,KAAKwnB,oBAA0C2D,EAAQ9qB,GAAIwvB,EAAwBjF,GACnF,MAEF,KAAKjH,EAAA+C,SAASe,gBAGZznB,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACfhC,EAAQ9qB,GAAG4C,OAEb,MAEF,KAAK0gB,EAAA+C,SAASiB,SACZ3nB,KAAK4nB,oBAAuCuD,EAAQ9qB,GAAIuqB,GACxD,MAEF,QACE,MAAM,IAAI7M,MAAM,+BAMhB2G,EAAAhjB,UAAAgmB,oBAAR,SAA4BW,EAA8BuC,QAAA,IAAAA,MAAA,MAGxD,IAAIhqB,EAAOynB,EAAYznB,KAAKsD,KAC5B,GAAIlE,KAAK+kB,MAAM2F,IAAI9pB,IAASZ,KAAKglB,YAAY0F,IAAI9pB,GAC/CZ,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAOrC,OAH5B,CAOA,IAAIovB,EAAQ,IAAIzL,EAChByL,EAAMC,eAAiB5H,EAAY4H,eACnCD,EAAM1c,KAAO+U,EAAY/U,KACzBtT,KAAKglB,YAAYiD,IAAIrnB,EAAMovB,KAGrBtL,EAAAhjB,UAAAkmB,oBAAR,SAA4BpB,EAA8BoE,QAAA,IAAAA,MAAA,MAExD,IADA,IAAI2E,EAAe/I,EAAU+I,aACpBlvB,EAAI,EAAGua,EAAI2U,EAAanrB,OAAQ/D,EAAIua,IAAKva,EAAG,CACnD,IAAIgoB,EAAckH,EAAalvB,GAC3BsY,EAAe0P,EAAYwC,sBAC/B,GAAI7qB,KAAK8kB,SAAS4F,IAAI/R,GACpB3Y,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO0V,OAH5B,CAQA,IAAIuX,EAAS,IAAI1D,EACfxsB,KACAqoB,EAAYznB,KAAKsD,KACjByU,EACA0P,EACA3E,EAAA2B,KAAKa,MAOP,GALAgK,EAAOtF,UAAYA,EACnB5qB,KAAK8kB,SAASmD,IAAItP,EAAcuX,GAEhClwB,KAAK+pB,wBAAwBmG,EAAQ7H,GAEjCuC,EAAW,CACb,GAAIA,EAAUO,SACZ,GAAIP,EAAUO,QAAQT,IAAIrC,EAAYznB,KAAKsD,MAAO,CAChDlE,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO0V,GAE1B,eAGFiS,EAAUO,QAAU,IAAI1G,IAE1BmG,EAAUO,QAAQlD,IAAII,EAAYznB,KAAKsD,KAAMgsB,QACpCA,EAAO5F,GAAGH,EAAaI,YAC5BvqB,KAAKN,QAAQgrB,IAAI/R,GACnB3Y,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAO0V,GAG1B3Y,KAAKN,QAAQuoB,IAAItP,EAAcuX,OAOvCxL,EAAAhjB,UAAAyuB,iBAAA,SACEC,EACAC,EACAC,QADA,IAAAD,MAAA,WACA,IAAAC,OAAA,GAEA,IAAIC,EAAmBH,EAAKG,iBACxBC,EAAwB,KAC5B,GAAID,KACFC,EAAWxwB,KAAKywB,YACdF,EACAF,EACAC,IAEa,OAAO,KAQxB,IANA,IAAII,EAAqBN,EAAKO,eAC1BC,EAAgBF,EAAmBtsB,OACnCusB,EAAiB,IAAIzrB,MAAY0rB,GACjCC,EAAiB,IAAI3rB,MAAc0rB,GACnCE,EAAqB,EACrBC,GAAU,EACL1wB,EAAI,EAAGA,EAAIuwB,IAAiBvwB,EAAG,CACtC,IAAI2wB,EAAoBN,EAAmBrwB,GAC3C,OAAQ2wB,EAAkBC,eACxB,KAAKtN,EAAAuN,cAAcC,QACjBL,EAAqBzwB,EAAI,EACzB,MAEF,KAAKsjB,EAAAuN,cAAcE,KACjB7H,OAAOlpB,GAAKuwB,GACZG,GAAU,EAId,IAAIM,EAAgBrxB,KAAKywB,YACvBlH,OAAOyH,EAAkB1d,MACzB+c,EACAC,GAEF,IAAKe,EAAe,OAAO,KAC3BV,EAAetwB,GAAKgxB,EACpBR,EAAexwB,GAAK2wB,EAAkBpwB,KAAKsD,KAE7C,IACIsT,EADA8Z,EAAiBlB,EAAK5Y,WAE1B,GAAI8Z,GAMF,KALA9Z,EAAaxX,KAAKywB,YAChBa,EACAjB,EACAC,IAEe,OAAO,UAExB9Y,EAAakM,EAAA2B,KAAKa,KAEpB,IAAIqL,EAAY,IAAI7N,EAAA8N,UAAUb,EAAgBnZ,EAAYgZ,GAI1D,OAHAe,EAAUV,eAAiBA,EAC3BU,EAAUT,mBAAqBA,EAC/BS,EAAUR,QAAUA,EACbQ,GAIT7M,EAAAhjB,UAAA+uB,YAAA,SACEL,EACAC,EACAC,GAEA,QAHA,IAAAD,MAAA,WACA,IAAAC,OAAA,GAEIF,EAAK3J,MAAQ9C,EAAA+C,SAAS+K,UAAW,CACnC,IAAIF,EAAYvxB,KAAKmwB,iBAAgCC,EAAMC,EAAyBC,GACpF,OAAKiB,EACE7N,EAAA2B,KAAKO,IAAI8L,WAAWH,GADJ,KAGzB,IAKIzJ,EALA6J,EAAqBvB,EACrB1C,EAAaiE,EAAS/wB,KAAKsD,KAC3Byb,EAAa+N,EACbkE,EAAYD,EAAS1uB,MAAMW,OAAOqrB,aAAevvB,EAAAmkB,eAAiB6J,EAKtE,IAAK5F,EAAU9nB,KAAK8kB,SAAS3jB,IAAIywB,MAAgB9J,EAAU9nB,KAAK8kB,SAAS3jB,IAAIwe,IAC3E,OAAQmI,EAAQrB,MACd,KAAKkD,EAAYC,gBACf,IAAIuC,EAA4BrE,EAAS+J,0BACvCF,EAASG,cACTzB,EACA,MAEF,OAAOlE,EAAWA,EAAS7Y,KAAO,KAMxC,IA6BIA,EA7BA0c,EAAQhwB,KAAKglB,YAAY7jB,IAAIusB,GACjC,GAAIsC,EAAO,OAAOhwB,KAAKywB,YAAYT,EAAM1c,KAAM+c,EAAyBC,GAGxE,GAAIqB,EAASG,cAAe,CAG1B,IAFA,IAAIlX,EAAI+W,EAASG,cAAc1tB,OAC3BmN,EAAa,IAAIrM,MAAY0V,GACxBva,EAAI,EAAGA,EAAIua,IAAKva,EAAG,CAC1B,IAAI0xB,EAAY/xB,KAAKywB,YACnBkB,EAASG,cAAczxB,GACvBgwB,EACAC,GAEF,IAAKyB,EAAW,OAAO,KACvBxgB,EAAWlR,GAAK0xB,EAGlB,GAAInX,EAAG,CACL,IAAIoX,EAActO,EAAAuO,cAAc1gB,GAC5BygB,EAAY5tB,SACdwtB,GAAa,IAAMI,EAAc,IACjCrS,GAAc,IAAMqS,EAAc,UAE/B,GAAI3B,EAAyB,CAClC,IAAI6B,EAAkB7B,EAAwBlvB,IAAIwe,GAClD,GAAIuS,EAAiB,OAAOA,GAOhC,OAAK5e,EAAOtT,KAAK+kB,MAAM5jB,IAAIywB,MAAgBte,EAAOtT,KAAK+kB,MAAM5jB,IAAIwe,IACxDrM,GAGLgd,GACFtwB,KAAKoF,MACHqe,EAAAlhB,eAAe6mB,mBACfuI,EAAS/wB,KAAKqC,MAAO0c,GAGlB,OAIT+E,EAAAhjB,UAAAywB,qBAAA,SACElC,EACAmC,EACA/B,EACAgC,QADA,IAAAhC,MAAA,WACA,IAAAgC,MAAA,MAEA,IAAIC,EAAiBrC,EAAe7rB,OAChCmuB,EAAgBH,EAAoBA,EAAkBhuB,OAAS,EACnE,GAAIkuB,GAAkBC,EAgBpB,OAfIA,EACFvyB,KAAKoF,MACHqe,EAAAlhB,eAAeiwB,oCACf7O,EAAAuH,MAAMxmB,KACS0tB,EAAmB,GAAGnvB,MACtBmvB,EAAmBG,EAAgB,GAAGtvB,OAErDqvB,EAAe3uB,SAAS,IAAK4uB,EAAc5uB,SAAS,KAE7C0uB,GACTryB,KAAKoF,MACHqe,EAAAlhB,eAAeiwB,oCACfH,EAAsBpvB,MAAMwvB,MAAOH,EAAe3uB,SAAS,IAAK,KAG7D,KAGT,IADA,IAAImuB,EAAgB,IAAI5sB,MAAYotB,GAC3BjyB,EAAI,EAAGA,EAAIiyB,IAAkBjyB,EAAG,CACvC,IAAIiT,EAAOtT,KAAKywB,YACD2B,EAAmB/xB,GAChCgwB,GACA,GAEF,IAAK/c,EAAM,OAAO,KAElBwe,EAAczxB,GAAKiT,EAErB,OAAOwe,GAITpN,EAAAhjB,UAAAgoB,kBAAA,SACEwF,EACAwD,EACAC,QAAA,IAAAA,MAAA,MAEA,IAEI7K,EACA8C,EAHAhqB,EAAOsuB,EAAWhrB,KAMtB,GAAIyuB,GAEF,GACEA,EAAexH,UACdrD,EAAU6K,EAAexH,QAAQhqB,IAAIP,KACtCknB,EAAQrB,MAAQkD,EAAYiJ,UAG5B,OADKC,IAAiBA,EAAkB,IAAIC,GACrCD,EAAgB5K,IAAIH,QAGxB,GAAI4K,EAAoB,CAG7B,GAAI5K,EAAU4K,EAAmBK,KAAKC,eAAepyB,GAEnD,OADKiyB,IAAiBA,EAAkB,IAAIC,GACrCD,EAAgB5K,IAAIH,GAI7B,GAAI8C,EAAY8H,EAAmBhxB,UAAUkpB,UAC3C,GACE,GAAI9C,EAAU9nB,KAAK8kB,SAAS3jB,IAAIypB,EAAUjS,aAAejZ,EAAAwkB,iBAAmBtjB,GAE1E,OADKiyB,IAAiBA,EAAkB,IAAIC,GACrCD,EAAgB5K,IAAIH,SAEtB8C,EAAYA,EAAUA,WAKnC,OAAI9C,EAAU9nB,KAAK8kB,SAAS3jB,IAAI+tB,EAAWjsB,MAAMW,OAAOqrB,aAAevvB,EAAAmkB,eAAiBjjB,KACjFiyB,IAAiBA,EAAkB,IAAIC,GACrCD,EAAgB5K,IAAIH,KAIzBA,EAAU9nB,KAAK8kB,SAAS3jB,IAAIP,KACzBiyB,IAAiBA,EAAkB,IAAIC,GACrCD,EAAgB5K,IAAIH,KAG7B9nB,KAAKoF,MACHqe,EAAAlhB,eAAe6mB,mBACf8F,EAAWjsB,MAAOrC,GAEb,OAIT8jB,EAAAhjB,UAAAuxB,sBAAA,SACEC,EACAR,GAGA,IAAIS,EAAmBD,EAAejd,WAKtC,KAJA4c,EAAkB7yB,KAAKozB,kBACrBD,EACAT,IAEoB,OAAO,KAC7B,IAIIW,EACAnK,EALA3R,EAASsb,EAAgB/K,QAGzBkG,EAAekF,EAAezxB,SAASyC,KAK3C,OAAQqT,EAAOkP,MACb,KAAKkD,EAAYc,OACjB,KAAKd,EAAY2J,MACjB,KAAK3J,EAAY4J,MACf,KAAMF,EAAmC9b,EAAQjE,MAAMkgB,UAKrD,OAJAxzB,KAAKoF,MACHqe,EAAAlhB,eAAekxB,oCACfP,EAAezxB,SAASwB,MAAO+qB,EAAcqF,EAAW1vB,YAEnD,KAET4T,EAAgB8b,EAAWG,UAC3B,MAEF,KAAK7J,EAAYwE,SACf,IAAIttB,EAAS0oB,OAAkBhS,EAAQ6W,iBAAiBhC,UACxD,IAAKvrB,EAAQ,OAAO,KACpB,KAAMwyB,EAAaxyB,EAAO0wB,UAAU/Z,YAAYgc,UAK9C,OAJAxzB,KAAKoF,MACHqe,EAAAlhB,eAAekxB,oCACfP,EAAezxB,SAASwB,MAAO+qB,EAAcqF,EAAW1vB,YAEnD,KAET4T,EAAgB8b,EAAWG,UAM/B,OAAQjc,EAAOkP,MACb,KAAKkD,EAAYC,gBACjB,KAAKD,EAAY+J,MACf,OAAG,CACD,GAAInc,EAAO4T,UAAYjC,EAAS3R,EAAO4T,QAAQhqB,IAAI6sB,IACjD,OAAO6E,EAAgB5K,IAAIiB,GAAQyK,WAAWpc,EAAQ4b,GAGxD,GAAI5b,EAAOkP,MAAQkD,EAAYC,gBAAiB,CAC9C,IAAqBrS,EAAQuS,cAG3B,MAFAvS,EAA0CA,EAAQuS,kBAK/C,IAAIvS,EAAOkP,MAAQkD,EAAY+J,MAOpC,MANA,IAAYnc,EAAQqc,KAGlB,MAFArc,EAAwBA,EAAQqc,MAQtC,MAEF,QACE,GAAIrc,EAAO4T,UAAYjC,EAAS3R,EAAO4T,QAAQhqB,IAAI6sB,IACjD,OAAO6E,EAAgB5K,IAAIiB,GAAQyK,WAAWpc,EAAQ4b,GAS5D,OAJAnzB,KAAKoF,MACHqe,EAAAlhB,eAAekxB,oCACfP,EAAezxB,SAASwB,MAAO+qB,EAAczW,EAAOoB,cAE/C,MAGT+L,EAAAhjB,UAAAmyB,qBAAA,SACEC,EACApB,GAGA,IAAIS,EAAmBW,EAAc7d,WAKrC,KAJA4c,EAAkB7yB,KAAKozB,kBACrBD,EACAT,IAEoB,OAAO,KAC7B,IAAInb,EAASsb,EAAgB/K,QAC7B,OAAQvQ,EAAOkP,MACb,KAAKkD,EAAYc,OACjB,KAAKd,EAAY2J,MACjB,KAAK3J,EAAY4J,MACf,IAAIjgB,EAA6BiE,EAAQjE,KACzC,GAAIA,EAAKkgB,UAAW,CAClB,IAAIO,GAAkBxc,EAASjE,EAAKkgB,WAAW9xB,UAAU+rB,aACrDuG,OAAU,EACd,GACoB,MAAlBD,GACAxc,EAAO4T,UACN6I,EAAazc,EAAO4T,QAAQhqB,IAAI4yB,KACjCC,EAAWvN,MAAQkD,EAAYsK,mBAE/B,OAAOpB,EAAgB5K,IAAI+L,GAAYL,WAAWrgB,EAAKkgB,UAAWL,IAU1E,OAJAnzB,KAAKoF,MACHqe,EAAAlhB,eAAe2xB,qCACff,EAAiBlwB,MAAOsU,EAAOoB,cAE1B,MAGT+L,EAAAhjB,UAAA0xB,kBAAA,SACEnd,EACAyc,GAEA,KAAOzc,EAAWwQ,MAAQ9C,EAAA+C,SAASyN,eACjCle,EAAuCA,EAAYA,WAErD,OAAQA,EAAWwQ,MACjB,KAAK9C,EAAA+C,SAAS0N,UACZ,IAAI9gB,EAAOtT,KAAKywB,YAAkCxa,EAAYoe,QAC9D,GAAI/gB,EAEF,GADIkgB,EAAYlgB,EAAKkgB,UAGnB,OADKX,IAAiBA,EAAkB,IAAIC,GACrCD,EAAgB5K,IAAIuL,GAG/B,OAAO,KAET,KAAK7P,EAAA+C,SAAS4N,OACZ,MAAM,IAAIvW,MAAM,mBAElB,KAAK4F,EAAA+C,SAAS6N,KAEZ,OADIf,EAAYd,EAAmB8B,mBAE5B3B,IAAiBA,EAAkB,IAAIC,GACrCD,EAAgB5K,IAAIuL,KAE7BxzB,KAAKoF,MACHqe,EAAAlhB,eAAekyB,+CACfxe,EAAWhT,OAEN,MAET,KAAK0gB,EAAA+C,SAASgO,MAEZ,OADIlB,EAAYd,EAAmB8B,oBACjBhB,EAAYA,EAAUI,OACjCf,IAAiBA,EAAkB,IAAIC,GACrCD,EAAgB5K,IAAIuL,KAE7BxzB,KAAKoF,MACHqe,EAAAlhB,eAAeoyB,iDACf1e,EAAWhT,OAEN,MAET,KAAK0gB,EAAA+C,SAASkO,WACZ,OAAO50B,KAAK0pB,kBAAwCzT,EAAYyc,GAElE,KAAK/O,EAAA+C,SAASmO,eACZ,OAAO70B,KAAKizB,sBACgBhd,EAC1Byc,GAGJ,KAAK/O,EAAA+C,SAASoO,cACZ,OAAO90B,KAAK6zB,qBACe5d,EACzByc,GAGJ,KAAK/O,EAAA+C,SAASqO,KACZ,IAAItL,EAAWzpB,KAAKozB,kBACDnd,EAAYA,WAC7Byc,GAEF,GAAIjJ,EAAU,CACZ,IAAI3B,EAAU2B,EAAS3B,QACvB,GAAIA,GAAWA,EAAQrB,MAAQkD,EAAYsK,mBAAoB,CAC7D,IAAI9H,EAA+BrE,EAAS+J,0BACzB5b,EAAY6b,cAC7B,KACA7b,GAEF,GAAIkW,EAAU,CACZ,IACIqH,EADAhc,EAAa2U,EAASoF,UAAU/Z,WAEpC,GADIgc,EAAYhc,EAAWgc,UAGzB,OADKX,IAAiBA,EAAkB,IAAIC,GACrCD,EAAgB5K,IAAIuL,GAE3B,IAAIjC,EAAY/Z,EAAWmC,aAC3B,GAAI4X,EAAW,CACb,IAAIyD,EAAiBzD,EAAU0D,qBAM/B,OALKD,IACHA,EAAiB,IAAIE,EAAel1B,KAAMuxB,GAC1CA,EAAU0D,qBAAuBD,GAE9BnC,IAAiBA,EAAkB,IAAIC,GACrCD,EAAgB5K,IAAI+M,OAazC,OAJAh1B,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEN,MAEXyhB,EAtpDA,CAA6BjB,EAAAze,mBAAhBtF,EAAAglB,UAypDb,IAmCImO,EAGQlJ,EAkCAQ,EAxEZ2I,EAAA,oBAAAA,KAgCA,OAtBEA,EAAApxB,UAAAumB,IAAA,SAAIH,GAIF,OAHA9nB,KAAKuX,OAAS,KACdvX,KAAKmzB,iBAAmB,KACxBnzB,KAAK8nB,QAAUA,EACR9nB,MAIT8yB,EAAApxB,UAAAiyB,WAAA,SAAWpc,EAAiB4b,GAG1B,OAFAnzB,KAAKuX,OAASA,EACdvX,KAAKmzB,iBAAmBA,EACjBnzB,MAITe,OAAAC,eAAI8xB,EAAApxB,UAAA,wBAAJ,WACE,OACiB,MAAf1B,KAAKuX,QACLvX,KAAKuX,OAAOkP,MAAQkD,EAAY+J,OACP,MAAzB1zB,KAAKmzB,kDAGXL,EAhCA,GAAapzB,EAAAozB,kBAsCb,SAAYnJ,GAEVA,IAAA,mBAEAA,IAAA,iBAEAA,IAAA,eAEAA,IAAA,yBAEAA,IAAA,2CAEAA,IAAA,uBAEAA,IAAA,qCAEAA,IAAA,qCAEAA,IAAA,iBAEAA,IAAA,6CAEAA,IAAA,0BAEAA,IAAA,sCAEAA,IAAA,kBAEAA,IAAA,wBAEAA,IAAA,0BA9BF,CAAYA,EAAAjqB,EAAAiqB,cAAAjqB,EAAAiqB,iBAkCZ,SAAYQ,GAEVA,IAAA,eAEAA,IAAA,uBAEAA,IAAA,uBAEAA,IAAA,uBAEAA,IAAA,qBAEAA,IAAA,wBAEAA,IAAA,sBAEAA,IAAA,wBAEAA,IAAA,uBAEAA,IAAA,yBAEAA,IAAA,qBAEAA,IAAA,sBAEAA,IAAA,sBAEAA,IAAA,0BAEAA,IAAA,sBAEAA,IAAA,6BAEAA,IAAA,yBAEAA,IAAA,2BAEAA,IAAA,kCAEAA,IAAA,8BAEAA,IAAA,wBAEAA,IAAA,uBA5CF,CAAYA,EAAAzqB,EAAAyqB,eAAAzqB,EAAAyqB,kBAgDZ,IAAAgL,EAAA,WAkBE,SAAAA,EAAsBC,EAAkB1H,EAAoB/U,GAP5D3Y,KAAAq1B,MAAsBlL,EAAamL,KAEnCt1B,KAAAmrB,QAAsC,KAEtCnrB,KAAA4qB,UAA4B,KAI1B5qB,KAAKo1B,QAAUA,EACfp1B,KAAK0tB,WAAaA,EAClB1tB,KAAK2Y,aAAeA,EAQxB,OAJEwc,EAAAzzB,UAAA4oB,GAAA,SAAGiL,GAA4B,OAAQv1B,KAAKq1B,MAAQE,IAASA,GAG7DJ,EAAAzzB,UAAAumB,IAAA,SAAIsN,GAA4Bv1B,KAAKq1B,OAASE,GAChDJ,EA7BA,GAAsBz1B,EAAAy1B,UAgCtB,IAAApF,EAAA,SAAApL,GASE,SAAAoL,EACEqF,EACA1H,EACA/U,EACA0P,GAJF,IAAAzD,EAMED,EAAAnkB,KAAAR,KAAMo1B,EAAS1H,EAAY/U,IAAa3Y,KAZ1C4kB,EAAA6B,KAAOkD,EAAY6L,UAajB5Q,EAAKyD,YAAcA,EACnB,IAAIyD,EAAYzD,EAAYyD,UAC5B,GAAIA,EACF,IAAK,IAAIzrB,EAAI,EAAGua,EAAIkR,EAAU1nB,OAAQ/D,EAAIua,IAAKva,EAC7C,OAAQyrB,EAAUzrB,GAAGo1B,cACnB,KAAK9R,EAAAiI,aAAazE,OAChBvC,EAAKqD,IAAIkC,EAAauL,UACtB,MAEF,KAAK/R,EAAAiI,aAAa7E,OAChBnC,EAAKqD,IAAIkC,EAAaI,UACtB,MAEF,KAAK5G,EAAAiI,aAAa+J,QAChB/Q,EAAKqD,IAAIkC,EAAayL,UACtB,MAEF,QAAS,MAAM,IAAI7X,MAAM,gCAKnC,OAtC+BmH,EAAA6K,EAAApL,GAsC/BoL,EAtCA,CAA+BoF,GAAlBz1B,EAAAqwB,YAyCb,IAAAnB,EAAA,SAAAjK,GAQE,SAAAiK,EACEwG,EACA1H,EACA/U,EACA0P,GAJF,IAAAzD,EAMED,EAAAnkB,KAAAR,KAAMo1B,EAAS1H,EAAY/U,IAAa3Y,KAZ1C4kB,EAAA6B,KAAOkD,EAAYkM,KAajBjR,EAAKyD,YAAcA,EACnB,IAAIyD,EAAYzD,EAAYyD,UAC5B,GAAIA,EACF,IAAK,IAAIzrB,EAAI,EAAGua,EAAIkR,EAAU1nB,OAAQ/D,EAAIua,IAAKva,EAC7C,OAAQyrB,EAAUzrB,GAAGo1B,cACnB,KAAK9R,EAAAiI,aAAa7E,OAChBnC,EAAKqD,IAAIkC,EAAaI,UACtB,MAEF,KAAK5G,EAAAiI,aAAazE,OAChBvC,EAAKqD,IAAIkC,EAAauL,UACtB,MAEF,KAAK/R,EAAAiI,aAAa+J,QAChB/Q,EAAKqD,IAAIkC,EAAayL,UACtB,MAEF,KAAKjS,EAAAiI,aAAakK,MAChBlR,EAAKqD,IAAIkC,EAAa4L,UACtB,MAEF,QAAS,MAAM,IAAIhY,MAAM,gCAKnC,OAzC0BmH,EAAA0J,EAAAjK,GAyC1BiK,EAzCA,CAA0BuG,GAAbz1B,EAAAkvB,OA4Cb,IAAAG,EAAA,SAAApK,GAWE,SAAAoK,EACEJ,EACAyG,EACA1H,EACA/U,EACA0P,GALF,IAAAzD,EAOED,EAAAnkB,KAAAR,KAAMo1B,EAAS1H,EAAY/U,IAAa3Y,YAhB1C4kB,EAAA6B,KAAOkD,EAAYiJ,UAOnBhO,EAAAoR,cAAqB,EAUnBpR,EAAKqR,KAAOtH,EACZ/J,EAAKyD,YAAcA,IAEvB,OAtB+BnD,EAAA6J,EAAApK,GAsB/BoK,EAtBA,CAA+BoG,GAAlBz1B,EAAAqvB,YAwBb,SAAkBmH,GAChBA,IAAA,eACAA,IAAA,qBACAA,IAAA,iBAHF,CAAkBx2B,EAAAw2B,oBAAAx2B,EAAAw2B,uBAMlB,IAAAC,EAAA,SAAAxR,GAAA,SAAAwR,IAAA,IAAAvR,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YASE4kB,EAAAyR,kBAAiB,IAmBnB,OA5ByCnR,EAAAiR,EAAAxR,GAevCwR,EAAAz0B,UAAA40B,yBAAA,SAAyBC,EAASC,GAIhC,OAHAx2B,KAAKq2B,kBAAiB,EACtBr2B,KAAKy2B,qBAAuBC,QAAQH,EAAIC,GACxCx2B,KAAKioB,IAAIkC,EAAa4L,SAAW5L,EAAawM,SACvC32B,MAGTm2B,EAAAz0B,UAAAk1B,uBAAA,SAAuBv1B,GAIrB,OAHArB,KAAKq2B,kBAAiB,EACtBr2B,KAAK62B,mBAAqBx1B,EAC1BrB,KAAKioB,IAAIkC,EAAa4L,SAAW5L,EAAawM,SACvC32B,MAEXm2B,EA5BA,CAAyChB,GAA5Bz1B,EAAAy2B,sBA+Bb,IAAA3J,EAAA,SAAA7H,GAIE,SAAA6H,EACE4I,EACA1H,EACA/U,EACA0P,EACA/U,GALF,IAAAsR,EAOED,EAAAnkB,KAAAR,KAAMo1B,EAAS1H,EAAY/U,IAAa3Y,KAT1C4kB,EAAA6B,KAAOkD,EAAYc,OAUjB7F,EAAKyD,YAAcA,EACnB,IAAIyD,EAAYzD,EAAYyD,UAC5B,GAAIA,EACF,IAAK,IAAIzrB,EAAI,EAAGua,EAAIkR,EAAU1nB,OAAQ/D,EAAIua,IAAKva,EAC7C,OAAQyrB,EAAUzrB,GAAGo1B,cACnB,KAAK9R,EAAAiI,aAAazE,OAChBvC,EAAKqD,IAAIkC,EAAauL,UACtB,MAEF,KAAK/R,EAAAiI,aAAa7E,OAChBnC,EAAKqD,IAAIkC,EAAaI,UACtB,MAEF,KAAK5G,EAAAiI,aAAakK,MAChBlR,EAAKqD,IAAIkC,EAAa4L,UACtB,MAEF,KAAKpS,EAAAiI,aAAakL,IAChBlS,EAAKqD,IAAIkC,EAAa4M,QACtB,MAEF,KAAKpT,EAAAiI,aAAa+J,QAChB/Q,EAAKqD,IAAIkC,EAAayL,UACtB,MAEF,KAAKjS,EAAAiI,aAAaoL,SAChBpS,EAAKqD,IAAIrD,EAAKyD,YAAYlQ,YACtBgS,EAAa4L,SAAW5L,EAAa6M,SACrC7M,EAAa6M,UAEjB,MAEF,KAAKrT,EAAAiI,aAAaqL,OAClB,KAAKtT,EAAAiI,aAAasL,QAClB,KAAKvT,EAAAiI,aAAauL,UAClB,KAAKxT,EAAAiI,aAAaU,OAAQ,MAC1B,QAAS,MAAM,IAAIvO,MAAM,8BAI/B6G,EAAKtR,KAAOA,IAEhB,OAtD4B4R,EAAAsH,EAAA7H,GAsD5B6H,EAtDA,CAA4B2J,GAAfz2B,EAAA8sB,SAyDb,IAAA4K,EAAA,WAiBA,OALE,SAAYx2B,EAAc0S,EAAY6E,QAAA,IAAAA,MAAA,MACpCnY,KAAKY,KAAOA,EACZZ,KAAKsT,KAAOA,EACZtT,KAAKmY,YAAcA,GAfvB,GAAazY,EAAA03B,YAoBb,IAAAC,EAAA,SAAA1S,GAOE,SAAA0S,EAAYjC,EAAkB1H,EAAoBra,EAAYC,GAA9D,IAAAsR,EACED,EAAAnkB,KAAAR,KAAMo1B,EAAS1H,EAAYA,IAAW1tB,YANxC4kB,EAAA6B,KAAOkD,EAAY2J,MAOjB1O,EAAKvR,MAAQA,EACbuR,EAAKtR,KAAOA,IAEhB,OAZ2B4R,EAAAmS,EAAA1S,GAY3B0S,EAZA,CAA2BlB,GAAdz2B,EAAA23B,QAeb,IAAAxK,EAAA,SAAAlI,GAcE,SAAAkI,EACEuI,EACA1H,EACA/U,EACA0P,EACAgE,QAAA,IAAAA,MAAA,MALF,IAAAzH,EAOED,EAAAnkB,KAAAR,KAAMo1B,EAAS1H,EAAY/U,IAAa3Y,KAnB1C4kB,EAAA6B,KAAOkD,EAAYsK,mBAOnBrP,EAAA0S,UAAkC,IAAI7S,IAEtCG,EAAA2S,mBAAoC,KAWlC3S,EAAKyD,YAAcA,EACnB,IAAIyD,EAAYzD,EAAYyD,UAC5B,GAAIA,EACF,IAAK,IAAIzrB,EAAI,EAAGua,EAAIkR,EAAU1nB,OAAQ/D,EAAIua,IAAKva,EAC7C,OAAQyrB,EAAUzrB,GAAGo1B,cACnB,KAAK9R,EAAAiI,aAAazE,OAChBvC,EAAKqD,IAAIkC,EAAauL,UACtB,MAEF,KAAK/R,EAAAiI,aAAa7E,OAChBnC,EAAKqD,IAAIkC,EAAaI,UACtB,MAEF,KAAK5G,EAAAiI,aAAa+J,QAChB/Q,EAAKqD,IAAIkC,EAAayL,UACtB,MAEF,KAAKjS,EAAAiI,aAAaC,IAChBjH,EAAKqD,IAAIkC,EAAaqN,QACtB,MAEF,KAAK7T,EAAAiI,aAAaG,IAChBnH,EAAKqD,IAAIkC,EAAasN,QACtB,MAEF,KAAK9T,EAAAiI,aAAaU,OAClB,KAAK3I,EAAAiI,aAAa8L,SAClB,KAAK/T,EAAAiI,aAAasL,QAClB,KAAKvT,EAAAiI,aAAauL,UAClB,KAAKxT,EAAAiI,aAAaqL,OAAQ,MAC1B,QAAS,MAAM,IAAIlZ,MAAM,8BAI3B6G,EAAKyD,YAAYsP,WACnB/S,EAAKqD,IAAIkC,EAAayN,UAEpBhT,EAAKyH,eAAiBA,IACxBzH,EAAKqD,IAAIkC,EAAa0N,YAiL5B,OA7OuC3S,EAAA2H,EAAAlI,GAiErCkI,EAAAnrB,UAAA0qB,QAAA,SACE0L,EACAzH,QADA,IAAAyH,MAAA,WACA,IAAAzH,MAAA,MAEA,IAAI2B,EAAc8F,EAAwBpU,EAAAuO,cAAc6F,GAAyB,GAC7E3L,EAAWnsB,KAAKs3B,UAAUn2B,IAAI6wB,GAClC,GAAI7F,EAAU,OAAOA,EAErB,IAAI9D,EAAcroB,KAAKqoB,YACnB0P,EAAa/3B,KAAKsqB,GAAGH,EAAa0N,UAGlCG,EAAyB3H,EAE7B,GADAA,EAA0B,IAAI5L,IAC1BuT,MACF,IAA2C,IAAAC,EAAAxP,EAAAuP,GAAsBE,EAAAD,EAAAtP,QAAAuP,EAAAtP,KAAAsP,EAAAD,EAAAtP,OAAA,CAAxD,IAAAE,EAAAC,EAAAoP,EAAA72B,MAAA,GAAC82B,EAAAtP,EAAA,GAAeuP,EAAAvP,EAAA,GACvBwH,EAAwBpI,IACtBkQ,EACAC,qGAMN,IAAIb,EAAqBv3B,KAAKu3B,mBAC9B,GAAIA,EAAoB,CACtB,IACIc,EADoC9O,OAAOvpB,KAAKqsB,gBAAiBhE,YAC1B4H,eACvCqI,EAAyBD,EAAoBj0B,OACjDmlB,OAAO+O,GAA0Bf,EAAmBnzB,QACpD,IAAK,IAAI/D,EAAI,EAAGA,EAAIi4B,IAA0Bj4B,EAC5CgwB,EAAwBpI,IACtBoQ,EAAoBh4B,GAAGO,KAAKsD,KAC5BqzB,EAAmBl3B,SAIvBkpB,QAAQgO,GAIV,IAEIgB,EAFAC,EAAgBnQ,EAAYkJ,UAC5BkH,EAAyBpQ,EAAY4H,eAEzC,GAAI6H,IAA0BS,EAA2BT,EAAsB1zB,QAAS,CACtFmlB,OAAOkP,GAA0BF,GAA4BE,EAAuBr0B,QACpF,IAAS/D,EAAI,EAAGA,EAAIk4B,IAA4Bl4B,EAC9CgwB,EAAwBpI,IACAwQ,EAAwBp4B,GAAGO,KAAKsD,KACtD4zB,EAAsBz3B,SAI1BkpB,QAAQkP,GAA2D,GAAjCA,EAAuBr0B,QAI3D,IAAIs0B,EAA8B,KAC9BlI,EAAwB,KAC5B,GAAIuH,EAAY,CAGd,KADAW,EADqBnP,OAAOvpB,KAAKqsB,gBACFD,QAAQmL,EAAoBlH,IACvC,OAAO,KAC3BG,EAAWkI,EAAcplB,UAEzBiW,QAAQvpB,KAAKqsB,gBAIf,IAiBI7U,EAjBAmhB,EAAsBH,EAAc7H,eACpCiI,EAA0BD,EAAoBv0B,OAC9CusB,EAAiB,IAAIzrB,MAAY0zB,GACjC/H,EAAiB,IAAI3rB,MAAc0zB,GACnC9H,EAAqB,EACzB,IAASzwB,EAAI,EAAGA,EAAIu4B,IAA2Bv4B,EAAG,CAChD,IAAIw4B,EAAuBF,EAAoBt4B,GAC3Cw4B,EAAqB5H,eAAiBtN,EAAAuN,cAAcC,UACtDL,EAAqBzwB,EAAI,GAE3B,IAAIsxB,EAAWpI,OAAOsP,EAAqBvlB,MACvC+d,EAAgBrxB,KAAKo1B,QAAQ3E,YAAYkB,EAAUtB,GAAyB,GAChF,IAAKgB,EAAe,OAAO,KAC3BV,EAAetwB,GAAKgxB,EACpBR,EAAexwB,GAAKw4B,EAAqBj4B,KAAKsD,KAIhD,GAAIlE,KAAKsqB,GAAGH,EAAasN,SAAWz3B,KAAKsqB,GAAGH,EAAayC,aACvDpV,EAAakM,EAAA2B,KAAKa,SACb,CACDyL,EAAWpI,OAAOiP,EAAchhB,YAApC,IACIlE,EAAOtT,KAAKo1B,QAAQ3E,YAAYkB,EAAUtB,GAAyB,GACvE,IAAK/c,EAAM,OAAO,KAClBkE,EAAalE,EAGf,IAAIie,EAAY,IAAI7N,EAAA8N,UAAUb,EAAgBnZ,EAAYgZ,GAC1De,EAAUV,eAAiBA,EAC3BU,EAAUT,mBAAqBA,EAE/B,QAAInY,EAAe3Y,KAAK2Y,aAKxB,OAJIqZ,EAAY5tB,SAAQuU,GAAgB,IAAMqZ,EAAc,MAC5D7F,EAAW,IAAI2M,EAAS94B,KAAM2Y,EAAc4Y,EAAWmH,IAC9CrI,wBAA0BA,EACnCrwB,KAAKs3B,UAAUrP,IAAI+J,EAAa7F,GACzBA,GAITU,EAAAnrB,UAAAq3B,eAAA,SAAexB,GACb,IAAKv3B,KAAKqsB,eACR,MAAM,IAAItO,MAAM,yEAElB,GAAIwZ,GAAsBA,EAAmBnzB,OAAQ,CACnD,IAAI40B,EAAmB,IAAInM,EACzB7sB,KAAKo1B,QACLp1B,KAAK0tB,WACL1tB,KAAK2Y,aACL3Y,KAAKqoB,YACLroB,KAAKqsB,gBAIP,OAFA2M,EAAiB3D,MAAQr1B,KAAKq1B,MAC9B2D,EAAiBzB,mBAAqBA,EAC/ByB,EAET,OAAOh5B,MAIT6sB,EAAAnrB,UAAAmwB,0BAAA,SACEO,EACA/B,EACA4I,GAEA,IAAIC,EAAuC,KAC3C,OAAIl5B,KAAKsqB,GAAGH,EAAayN,WACvBrO,OAA4B,MAArB6I,GAAyD,GAA5BA,EAAkBhuB,QACtD80B,EAAwBl5B,KAAKo1B,QAAQjD,qBACnC5I,OAAOvpB,KAAKqoB,YAAY4H,gBACxBmC,EACA/B,EACA4I,IAIGj5B,KAAKosB,QAAQ8M,EAAuB7I,GAFN,MAMvCxD,EAAAnrB,UAAAy3B,4BAAA,SACE/G,EACA/B,GAEA9G,OAAOvpB,KAAKsqB,GAAGH,EAAaC,UAC5B,IAAI8O,EAAuC,KAC3C,GAAI9G,EAAmB,CACrB,IAAIxX,EAAIwX,EAAkBhuB,OAC1B80B,EAAwB,IAAIh0B,MAAY0V,GACxC,IAAK,IAAIva,EAAI,EAAGA,EAAIua,IAAKva,EAAG,CAC1B,IAAI+4B,EAAep5B,KAAKo1B,QAAQ3E,YAC9B2B,EAAkB/xB,GAClBgwB,GACA,GAEF,IAAK+I,EAAc,OAAO,KAC1BF,EAAsB74B,GAAK+4B,GAG/B,OAAOF,GAGTrM,EAAAnrB,UAAAiC,SAAA,WAAqB,OAAO3D,KAAK0tB,YACnCb,EA7OA,CAAuCsI,GAA1Bz1B,EAAAmtB,oBAgPb,IAAAiM,EAAA,SAAAnU,GAiCE,SAAAmU,EACEp3B,EACAiX,EACA4Y,EACAiD,QAAA,IAAAA,MAAA,MAJF,QAAA5P,EAMED,EAAAnkB,KAAAR,KAAM0B,EAAU0zB,QAAS1zB,EAAUgsB,WAAY/U,IAAa3Y,KAK5D,GA1CF4kB,EAAA6B,KAAOkD,EAAY0P,SASnBzU,EAAA0U,OAA4B,IAAI7U,IAEhCG,EAAA2U,oBAEA3U,EAAA4U,aAA8B,KAM9B5U,EAAA6U,eAAiC,KAEjC7U,EAAAjU,IAAmB,EAEnBiU,EAAA8U,oBAA2B,EAE3B9U,EAAA+U,WAA8B,KAEtB/U,EAAAgV,YAAmB,EACnBhV,EAAAiV,WAA2B,KA6E3BjV,EAAAkV,SAA2B,KAC3BlV,EAAAmV,SAA2B,KAC3BnV,EAAAoV,SAA2B,KAC3BpV,EAAAqV,SAA2B,KAtEjCrV,EAAKljB,UAAYA,EACjBkjB,EAAK2M,UAAYA,EACjB3M,EAAK4P,iBAAmBA,EACxB5P,EAAKyQ,MAAQ3zB,EAAU2zB,OACjB3zB,EAAU4oB,GAAGH,EAAaC,WAAY1oB,EAAU4oB,GAAGH,EAAayL,UAAY,CAChF,IAAIsE,EAAa,EACjB,GAAI1F,GAWF,GAVAjL,OAAO3E,EAAK0F,GAAGH,EAAa0N,WAC5BjT,EAAK0U,OAAOrR,IACV,OACA,IAAIoP,EACF31B,EAAU0zB,QACV,OACA8E,IACA3Q,OAAOgI,EAAUf,YAGjBgE,EAAiBnE,wBAAyB,CACvCzL,EAAKyL,0BACRzL,EAAKyL,wBAA0B,IAAI5L,SAErC,IAA2C,IAAAoE,EAAAJ,EAAA+L,EAAiBnE,yBAAuB8J,EAAAtR,EAAAF,QAAAwR,EAAAvR,KAAAuR,EAAAtR,EAAAF,OAAA,CAA1E,IAAAyR,EAAAtR,EAAAqR,EAAA94B,MAAA,GAAC82B,EAAAiC,EAAA,GAAehC,EAAAgC,EAAA,GACvBxV,EAAKyL,wBAAwBpI,IAAIkQ,EAAeC,4GAIpD7O,QAAQ3E,EAAK0F,GAAGH,EAAa0N,WAG/B,IADA,IAAIlH,EAAiBY,EAAUZ,eACtBtwB,EAAI,EAAGua,EAAI+V,EAAevsB,OAAQ/D,EAAIua,IAAKva,EAAG,CACrD,IAAIgxB,EAAgBV,EAAetwB,GAC/Bg6B,EAAgB9I,EAAU+I,iBAAiBj6B,GAC/CukB,EAAK0U,OAAOrR,IACVoS,EACA,IAAIhD,EACF31B,EAAU0zB,QACViF,EACAH,IACA7I,YAKRzM,EAAKmO,KAAOwH,EAAKr3B,OAAO0hB,KAuK5B,OA1P8BM,EAAA4T,EAAAnU,GAuF5BmU,EAAAp3B,UAAA84B,SAAA,SAASlnB,EAAY1S,QAAA,IAAAA,MAAA,MAEnB,IAAIs5B,EAAal6B,KAAKuxB,UAAUZ,eAAevsB,OAASpE,KAAKu5B,iBAAiBn1B,OAC1EpE,KAAKsqB,GAAGH,EAAa0N,aAAaqC,EACtC,IAAIO,EAAQ,IAAIpD,EACdr3B,KAAK0B,UAAU0zB,QACfx0B,GAEI,OAASs5B,EAAWv2B,SAAS,IACjCu2B,EACA5mB,GAEF,GAAI1S,EAAM,CACR,GAAIZ,KAAKs5B,OAAO5O,IAAI9pB,GAAO,MAAM,IAAImd,MAAM,wBAC3C/d,KAAKs5B,OAAOrR,IAAIrnB,EAAM65B,GAGxB,OADAz6B,KAAKu5B,iBAAiB90B,KAAK6O,GACpBmnB,GAST3B,EAAAp3B,UAAAg5B,aAAA,SAAapnB,GACX,IAAIqnB,EACJ,OAAQrnB,EAAKsnB,gBACX,KAAKhX,EAAAre,WAAWwZ,IACd4b,EAAQ36B,KAAK85B,SACb,MAEF,KAAKlW,EAAAre,WAAW0Z,IACd0b,EAAQ36B,KAAK+5B,SACb,MAEF,KAAKnW,EAAAre,WAAW6Z,IACdub,EAAQ36B,KAAKg6B,SACb,MAEF,KAAKpW,EAAAre,WAAW+Z,IACdqb,EAAQ36B,KAAKi6B,SACb,MAEF,QAAS,MAAM,IAAIlc,MAAM,0BAE3B,GAAI4c,GAASA,EAAMv2B,OAAQ,CACzB,IAAIoZ,EAAMmd,EAAME,MAEhB,OADArd,EAAIlK,KAAOA,EACJkK,EAET,OAAOxd,KAAKw6B,SAASlnB,IAIvBwlB,EAAAp3B,UAAAo5B,cAAA,SAAcL,GACZ,IAAIE,EAEJ,OADApR,OAAqB,MAAdkR,EAAMnnB,MACEmnB,EAAMnnB,KAAMsnB,gBACzB,KAAKhX,EAAAre,WAAWwZ,IACd4b,EAAQ36B,KAAK85B,WAAa95B,KAAK85B,aAC/B,MAEF,KAAKlW,EAAAre,WAAW0Z,IACd0b,EAAQ36B,KAAK+5B,WAAa/5B,KAAK+5B,aAC/B,MAEF,KAAKnW,EAAAre,WAAW6Z,IACdub,EAAQ36B,KAAKg6B,WAAah6B,KAAKg6B,aAC/B,MAEF,KAAKpW,EAAAre,WAAW+Z,IACdqb,EAAQ36B,KAAKi6B,WAAaj6B,KAAKi6B,aAC/B,MAEF,QAAS,MAAM,IAAIlc,MAAM,0BAE3B4c,EAAMl2B,KAAKg2B,IAIb3B,EAAAp3B,UAAAq5B,oBAAA,SAAoBznB,GAClB,IAAIqnB,EACJ,OAAQrnB,EAAKsnB,gBACX,KAAKhX,EAAAre,WAAWwZ,IACd4b,EAAQ36B,KAAK85B,WAAa95B,KAAK85B,aAC/B,MAEF,KAAKlW,EAAAre,WAAW0Z,IACd0b,EAAQ36B,KAAK+5B,WAAa/5B,KAAK+5B,aAC/B,MAEF,KAAKnW,EAAAre,WAAW6Z,IACdub,EAAQ36B,KAAKg6B,WAAah6B,KAAKg6B,aAC/B,MAEF,KAAKpW,EAAAre,WAAW+Z,IACdqb,EAAQ36B,KAAKi6B,WAAaj6B,KAAKi6B,aAC/B,MAEF,QAAS,MAAM,IAAIlc,MAAM,0BAE3B,GAAI4c,EAAMv2B,OAAS,EACjB,OAAOu2B,EAAMA,EAAMv2B,OAAS,GAE9B,IAAIq2B,EAAez6B,KAAKw6B,SAASlnB,GAEjC,OADAqnB,EAAMl2B,KAAKg2B,GACJA,GAIT3B,EAAAp3B,UAAAs5B,kBAAA,WACE,IAAIC,EAAKj7B,KAAK45B,cAMd,OALK55B,KAAK65B,WAGR75B,KAAK65B,WAAWp1B,KAAKw2B,GAFrBj7B,KAAK65B,YAAeoB,GAIfj7B,KAAKw5B,aAAeyB,EAAGt3B,SAAS,KAIzCm1B,EAAAp3B,UAAAw5B,kBAAA,WACE3R,OAA0B,MAAnBvpB,KAAK65B,YACZ,IAAIz1B,EAAiBpE,KAAK65B,WAAYz1B,OACtCmlB,OAAOnlB,EAAS,GACRpE,KAAK65B,WAAYgB,MACrBz2B,EAAS,EACXpE,KAAKw5B,aAAuBx5B,KAAK65B,WAAYz1B,EAAS,GAAGT,SAAS,KAElE3D,KAAKw5B,aAAe,KACpBx5B,KAAK65B,WAAa,OAKtBf,EAAAp3B,UAAAy5B,SAAA,SAASx7B,EAAgBgR,GAMvB,GALA3Q,KAAK2Q,IAAMA,EACX4Y,QAAQvpB,KAAK65B,aAAe75B,KAAK65B,WAAWz1B,QAC5CpE,KAAK65B,WAAa,KAClB75B,KAAKw5B,aAAe,KACpBx5B,KAAK85B,SAAW95B,KAAK+5B,SAAW/5B,KAAKg6B,SAAWh6B,KAAKi6B,SAAW,KAC5Dj6B,KAAKo1B,QAAQhQ,QAAQxH,UAAW,CAClC,IAAI6b,EAAiBz5B,KAAKy5B,eAC1B,GAAIA,EACF,IAAK,IAAIp5B,EAAI,EAAGua,EAAI6e,EAAer1B,OAAQ/D,EAAIua,IAAKva,EAAG,CACrD,IAAI+6B,EAAgB3B,EAAep5B,GACnCV,EAAOmhB,iBACLnQ,EACAyqB,EAAcC,aACdD,EAAcx3B,OAAO03B,eACrBF,EAAct2B,KACds2B,EAAcr2B,SAKtB/E,KAAKy5B,eAAiB,MAIxBX,EAAAp3B,UAAAiC,SAAA,WAAqB,OAAO3D,KAAK0B,UAAUgsB,YAC7CoL,EA1PA,CAA8B3D,GAAjBz1B,EAAAo5B,WA6Pb,IAAA5D,EAAA,SAAAvQ,GAUE,SAAAuQ,EAAYE,EAAkB7D,GAA9B,IAAA3M,EACED,EAAAnkB,KAAAR,KAAMo1B,EAAS,GAAI,KAAGp1B,KATxB4kB,EAAA6B,KAAOkD,EAAY4R,gBAUjB,IAAI7N,EAAa6D,EAAUiK,2BAC3B5W,EAAK8I,WAAaA,EAClB9I,EAAKjM,aAAe+U,EACpB9I,EAAK2M,UAAYA,EACjB3M,EAAKtR,KAAOoQ,EAAA2B,KAAKO,IAAI8L,WAAWH,KAEpC,OAlBoCrM,EAAAgQ,EAAAvQ,GAkBpCuQ,EAlBA,CAAoCC,GAAvBz1B,EAAAw1B,iBAqBb,IAAAvI,EAAA,SAAAhI,GAUE,SAAAgI,EACEN,EACAqB,EACA/U,EACA0P,GAJF,IAAAzD,EAMED,EAAAnkB,KAAAR,KAAMqsB,EAAe+I,QAAS1H,EAAY/U,IAAa3Y,KAdzD4kB,EAAA6B,KAAOkD,EAAY8R,gBAejB7W,EAAKyH,eAAiBA,EACtBzH,EAAKyD,YAAcA,EACnB,IAAIyD,EAAYzD,EAAYyD,UAC5B,GAAIA,EACF,IAAK,IAAIzrB,EAAI,EAAGua,EAAIkR,EAAU1nB,OAAQ/D,EAAIua,IAAKva,EAC7C,OAAQyrB,EAAUzrB,GAAGo1B,cACnB,KAAK9R,EAAAiI,aAAa7E,OAChBnC,EAAKqD,IAAIkC,EAAaI,UACtB,MAEF,KAAK5G,EAAAiI,aAAaoL,SAChBpS,EAAKqD,IAAIkC,EAAa6M,UACtB,MAEF,KAAKrT,EAAAiI,aAAasL,QAClB,KAAKvT,EAAAiI,aAAauL,UAClB,KAAKxT,EAAAiI,aAAaqL,OAClB,KAAKtT,EAAAiI,aAAaU,OAAQ,MAC1B,QAAS,MAAM,IAAIvO,MAAM,gCAiBnC,OApDoCmH,EAAAyH,EAAAhI,GA0ClC5jB,OAAAC,eAAI2rB,EAAAjrB,UAAA,kBAAJ,WACE,OAA+C,IAAvC1B,KAAKq1B,MAAQlL,EAAa6M,eAEpC,SAAe1M,GACTA,EACFtqB,KAAKq1B,OAASlL,EAAa6M,SAE3Bh3B,KAAKq1B,QAAUlL,EAAa6M,0CAGlCrK,EApDA,CAAoCwI,GAAvBz1B,EAAAitB,iBAuDb,IAAA+O,EAAA,SAAA/W,GAUE,SAAA+W,EAAYh6B,EAA2BiX,EAAsBrF,GAA7D,IAAAsR,EACED,EAAAnkB,KAAAR,KAAM0B,EAAU0zB,QAAS1zB,EAAUgsB,WAAY/U,IAAa3Y,YAT9D4kB,EAAA6B,KAAOkD,EAAY4J,MAKnB3O,EAAA+W,cAAqB,EAKnB/W,EAAKljB,UAAYA,EACjBkjB,EAAKyQ,MAAQ3zB,EAAU2zB,MACvBzQ,EAAKtR,KAAOA,IAEhB,OAhB2B4R,EAAAwW,EAAA/W,GAgB3B+W,EAhBA,CAA2BvF,GAAdz2B,EAAAg8B,QAmBb,IAAApN,EAAA,SAAA3J,GAYE,SAAA2J,EACE8G,EACA1H,EACA/U,EACA2P,GAJF,IAAA1D,EAMED,EAAAnkB,KAAAR,KAAMo1B,EAAS1H,EAAY/U,IAAa3Y,YAhB1C4kB,EAAA6B,KAAOkD,EAAYwE,SAKnBvJ,EAAAwJ,gBAA4C,KAE5CxJ,EAAAyJ,gBAA4C,KAU1CzJ,EAAK0D,OAASA,IAElB,OArB8BpD,EAAAoJ,EAAA3J,GAqB9B2J,EArBA,CAA8B6G,GAAjBz1B,EAAA4uB,WAwBb,IAAAxD,EAAA,SAAAnG,GAwBE,SAAAmG,EACEsK,EACA1H,EACA/U,EACA0P,GAJF,IAAAzD,EAMED,EAAAnkB,KAAAR,KAAMo1B,EAAS1H,EAAY/U,IAAa3Y,KA5B1C4kB,EAAA6B,KAAOkD,EAAYC,gBAKnBhF,EAAA0S,UAA+B,IAAI7S,IAEnCG,EAAA6H,gBAA8C,KAE9C7H,EAAAkF,cAAuC,KAEvClF,EAAAkI,qBAAiD,KAGjDlI,EAAA6I,aAA8B,KAE9B7I,EAAA+I,aAA8B,KAE9B/I,EAAAgJ,SAA0B,KAE1BhJ,EAAAiJ,SAA0B,KASxBjJ,EAAKyD,YAAcA,EACnB,IAAIyD,EAAYzD,EAAYyD,UAC5B,GAAIA,EACF,IAAK,IAAIzrB,EAAI,EAAGua,EAAIkR,EAAU1nB,OAAQ/D,EAAIua,IAAKva,EAC7C,OAAQyrB,EAAUzrB,GAAGo1B,cACnB,KAAK9R,EAAAiI,aAAazE,OAChBvC,EAAKqD,IAAIkC,EAAauL,UACtB,MAEF,KAAK/R,EAAAiI,aAAa7E,OAChBnC,EAAKqD,IAAIkC,EAAaI,UACtB,MAEF,KAAK5G,EAAAiI,aAAa+J,QAChB/Q,EAAKqD,IAAIkC,EAAayL,UACtB,MAEF,QAAS,MAAM,IAAI7X,MAAM,8BAI3BsK,EAAY4H,eAAe7rB,QAC7BwgB,EAAKqD,IAAIkC,EAAayN,WAgM5B,OArPoC1S,EAAA4F,EAAAnG,GA0DlC5jB,OAAAC,eAAI8pB,EAAAppB,UAAA,mBAAJ,WACE,OAAgD,IAAxC1B,KAAKq1B,MAAQlL,EAAayR,gBAEpC,SAAgBtR,GACVA,EACFtqB,KAAKq1B,OAASlL,EAAayR,UAE3B57B,KAAKq1B,QAAUlL,EAAayR,2CAKhC9Q,EAAAppB,UAAA0qB,QAAA,SACE0F,EACAzB,QAAA,IAAAA,MAAA,MAEA,IAAI2B,EAAcF,EAAgBpO,EAAAuO,cAAcH,GAAiB,GAC7D3F,EAAWnsB,KAAKs3B,UAAUn2B,IAAI6wB,GAClC,GAAI7F,EAAU,OAAOA,EAGrB,IAAI6L,EAAyB3H,EAE7B,GADAA,EAA0B,IAAI5L,IAC1BuT,MACF,IAA2C,IAAA6D,EAAApT,EAAAuP,GAAsB8D,EAAAD,EAAAlT,QAAAmT,EAAAlT,KAAAkT,EAAAD,EAAAlT,OAAA,CAAxD,IAAAE,EAAAC,EAAAgT,EAAAz6B,MAAA,GAAC82B,EAAAtP,EAAA,GAAeuP,EAAAvP,EAAA,GACvBwH,EAAwBpI,IAAIkQ,EAAeC,qGAI/C,IAsBI/3B,EAAQua,EAtBRyN,EAAcroB,KAAKqoB,YACnB0T,EAA0B,KAC9B,GAAI1T,EAAYmB,YAAa,CAC3B,IAAIwS,EAAgBh8B,KAAKo1B,QAAQ3E,YAAYpI,EAAYmB,YAAa,MACtE,IAAKwS,EAAe,OAAO,KAC3B,KAAMD,EAAYC,EAAcxI,WAK9B,OAJAxzB,KAAKo1B,QAAQhwB,MACXqe,EAAAlhB,eAAesnB,sCACfxB,EAAYmB,YAAYvmB,OAEnB,KAET,GAAI84B,EAAUr6B,UAAUqpB,aAAe/qB,KAAK+qB,YAK1C,OAJA/qB,KAAKo1B,QAAQhwB,MACXqe,EAAAlhB,eAAe05B,6CACftY,EAAAuH,MAAMxmB,KAAK2jB,EAAYznB,KAAKqC,MAAOolB,EAAYmB,YAAYvmB,QAEtD,KAMX,GAAI6uB,EAAe,CACjB,IAAKlX,EAAIkX,EAAc1tB,SAAWikB,EAAY4H,eAAe7rB,OAC3D,MAAM,IAAI2Z,MAAM,gCAElB,IAAK1d,EAAI,EAAGA,EAAIua,IAAKva,EACnBgwB,EAAwBpI,IAAII,EAAY4H,eAAe5vB,GAAGO,KAAKsD,KAAM4tB,EAAczxB,SAEhF,GAAIgoB,EAAY4H,eAAe7rB,OACpC,MAAM,IAAI2Z,MAAM,gCAGlB,IAAIpF,EAAe3Y,KAAK2Y,aACpBqZ,EAAY5tB,SACduU,GAAgB,IAAMqZ,EAAc,MAEtC7F,EAAW,IAAI+P,EAAMl8B,KAAM2Y,EAAcmZ,EAAeiK,IAC/C1L,wBAA0BA,EACnCrwB,KAAKs3B,UAAUrP,IAAI+J,EAAa7F,GAEhC,gBAAIwP,EAAoB,EACxB,GAAII,IACFJ,EAAeI,EAAUI,oBACrBJ,EAAU5Q,SAAS,CAChBgB,EAAShB,UAASgB,EAAShB,QAAU,IAAI1G,SAC9C,IAA4B,IAAA2V,EAAA3R,EAAAsT,EAAU5Q,QAAQ0D,UAAQuN,EAAAhC,EAAAzR,QAAAyT,EAAAxT,KAAAwT,EAAAhC,EAAAzR,OAAA,CAAjD,IAAI0T,EAAeD,EAAA/6B,MACtB8qB,EAAShB,QAAQlD,IAAIoU,EAAgB3O,WAAY2O,sGAKvD,GAAIr8B,KAAK8sB,qBAAsB,CAC7B,IAAIwP,EAAqBt8B,KAAK8sB,qBAAqBiM,eAAejH,GAC9DwK,IACFnQ,EAASoQ,oBAAsBD,EAAmBlQ,WAKtD,GAAIpsB,KAAKysB,oBACP,IAAmB,IAAA+P,EAAA/T,EAAAzoB,KAAKysB,gBAAgBoC,UAAQ4N,EAAAD,EAAA7T,QAAA8T,EAAA7T,KAAA6T,EAAAD,EAAA7T,OAAA,CAA3C,IAAIO,EAAMuT,EAAAp7B,MACb,OAAQ6nB,EAAOzC,MACb,KAAKkD,EAAY8R,gBACVtP,EAAShB,UAASgB,EAAShB,QAAU,IAAI1G,KAC9C,IAAIiY,EAAoCxT,EAAQb,YAChD,IAAKqU,EAAiBppB,KACpB,MAAM,IAAIyK,MAAM,iBAElB,IAAI4e,EAAY38B,KAAKo1B,QAAQ3E,YAC3BiM,EAAiBppB,KACjB6Y,EAASkE,yBAEX,GAAIsM,EAAW,CACb,IAAIC,EAAgB,IAAIlB,EAAsBxS,EAAyBA,EAAQvQ,aAAcgkB,GAC7F,OAAQA,EAAUE,UAChB,KAAK,EAAG,MACR,KAAK,EACgB,EAAflB,KAAoBA,EACxB,MAEF,KAAK,EACgB,EAAfA,IAAkBA,EAAoC,GAAL,EAAfA,IACtC,MAEF,KAAK,EACgB,EAAfA,IAAkBA,EAAoC,GAAL,EAAfA,IACtC,MAEF,QAASpS,QAAO,GAElBqT,EAAcjB,aAAeA,EAC7BA,GAAgBgB,EAAUE,SAC1B1Q,EAAShB,QAAQlD,IAAIiB,EAAOwE,WAAYkP,GAE1C,MAEF,KAAKjT,EAAYsK,mBACV9H,EAAShB,UAASgB,EAAShB,QAAU,IAAI1G,KAC9C,IAAIqY,EAAsC5T,EAAQ6P,eAAejH,GAC7DgL,GACF3Q,EAAShB,QAAQlD,IAAIiB,EAAOwE,WAAYoP,GAE1C,MAEF,KAAKnT,EAAYwE,SACVhC,EAAShB,UAASgB,EAAShB,QAAU,IAAI1G,KAC9C8E,OAAkBL,EAAQkF,iBAC1B,IAAI2O,EAAmB,IAAIzO,EAAStuB,KAAKo1B,QAASlM,EAAOwE,WAAYxE,EAAOvQ,aAAc3Y,MAC1F+8B,EAAiB3O,gBACgBlF,EAAQkF,gBAAiB2K,eACtDjH,GAGW5I,EAAQmF,kBACrB0O,EAAiB1O,gBACgBnF,EAAQmF,gBAAiB0K,eACtDjH,IAIN3F,EAAShB,QAAQlD,IAAIiB,EAAOwE,WAAYqP,GACxC,MAEF,QAAS,MAAM,IAAIhf,MAAM,+HAK/B,OADAoO,EAASgQ,oBAAsBR,EACxBxP,GAITrB,EAAAppB,UAAAmwB,0BAAA,SACEO,EACA/B,EACAgC,GAEA,IAAI6G,EAAuC,KAC3C,GAAIl5B,KAAKsqB,GAAGH,EAAayN,UAQvB,GAPArO,OAA4B,MAArB6I,GAAyD,GAA5BA,EAAkBhuB,UACtD80B,EAAwBl5B,KAAKo1B,QAAQjD,qBACnCnyB,KAAKqoB,YAAY4H,eACjBmC,EACA/B,EACAgC,IAE0B,OAAO,UAEnC9I,OAA4B,MAArB6I,IAA8BA,EAAkBhuB,QAEzD,OAAOpE,KAAKosB,QAAQ8M,EAAuB7I,IAG7CvF,EAAAppB,UAAAiC,SAAA,WACE,OAAO3D,KAAK0tB,YAEhB5C,EArPA,CAAoCqK,GAAvBz1B,EAAAorB,iBAwPb,IAAAoR,EAAA,SAAAvX,GAoBE,SAAAuX,EACEx6B,EACAiX,EACAmZ,EACA8B,QADA,IAAA9B,MAAA,WACA,IAAA8B,MAAA,MAJF,IAAAhP,EAMED,EAAAnkB,KAAAR,KAAM0B,EAAU0zB,QAAS1zB,EAAUgsB,WAAY/U,IAAa3Y,KAQ5D,GAhCF4kB,EAAA6B,KAAOkD,EAAY+J,MAWnB9O,EAAAyL,wBAAmD,KAEnDzL,EAAAuX,oBAA2B,EAE3BvX,EAAA2X,oBAAuC,KAUrC3X,EAAKljB,UAAYA,EACjBkjB,EAAKyQ,MAAQ3zB,EAAU2zB,MACvBzQ,EAAKkN,cAAgBA,EACrBlN,EAAKtR,KAAO5R,EAAU0zB,QAAQhQ,QAAQU,UAAUkX,QAAQpY,GACxDA,EAAKgP,KAAOA,EAGRA,GACEA,EAAKvD,wBAAyB,CAC3BzL,EAAKyL,0BAAyBzL,EAAKyL,wBAA0B,IAAI5L,SACtE,IAAiC,IAAAoE,EAAAJ,EAAAmL,EAAKvD,yBAAuB8J,EAAAtR,EAAAF,QAAAwR,EAAAvR,KAAAuR,EAAAtR,EAAAF,OAAA,CAApD,IAAAyR,EAAAtR,EAAAqR,EAAA94B,MAAA,GAAC47B,EAAA7C,EAAA,GAAU8C,EAAA9C,EAAA,GAClBxV,EAAKyL,wBAAwBpI,IAAIgV,EAAUC,sGAMjD,IACI78B,EAAQua,MADRyN,EAAczD,EAAKljB,UAAU2mB,YAEjC,GAAIA,EAAa,CACf,IAAI4H,EAAiB5H,EAAY4H,eACjC,GAAI6B,EAAe,CACjB,IAAKlX,EAAIkX,EAAc1tB,SAAW6rB,EAAe7rB,OAC/C,MAAM,IAAI2Z,MAAM,gCAElB,GAAInD,EAEF,IADKgK,EAAKyL,0BAAyBzL,EAAKyL,wBAA0B,IAAI5L,KACjEpkB,EAAI,EAAGA,EAAIua,IAAKva,EACnBukB,EAAKyL,wBAAwBpI,IAAIgI,EAAe5vB,GAAGO,KAAKsD,KAAM4tB,EAAczxB,SAG3E,GAAI4vB,EAAe7rB,OACxB,MAAM,IAAI2Z,MAAM,yCAmBxB,OA9E2BmH,EAAAgX,EAAAvX,GAiEzBuX,EAAAx6B,UAAAy7B,eAAA,SAAe5lB,GACb,IAAI6lB,EAAwBp9B,KAC5B,GACE,GAAIo9B,GAAW7lB,EACb,OAAO,QAEF6lB,EAAUA,EAAQxJ,MAC3B,OAAO,GAGTsI,EAAAx6B,UAAAiC,SAAA,WACE,OAAO3D,KAAK0B,UAAUgsB,YAE1BwO,EA9EA,CAA2B/G,GAAdz1B,EAAAw8B,QAiFb,IAAAtM,EAAA,SAAAjL,GAQE,SAAAiL,EACEwF,EACA1H,EACA/U,EACA0P,GAJF,IAAAzD,EAMED,EAAAnkB,KAAAR,KAAMo1B,EAAS1H,EAAY/U,EAAc0P,IAAYroB,YAZvD4kB,EAAA6B,KAAOkD,EAAY0T,sBAcrB,OAhBwCnY,EAAA0K,EAAAjL,GAgBxCiL,EAhBA,CAAwC9E,GAA3BprB,EAAAkwB,qBAmBb,IAAA0N,EAAA,SAAA3Y,GAUE,SAAA2Y,EACE57B,EACAiX,EACAmZ,EACA8B,QADA,IAAA9B,eACA,IAAA8B,MAAA,MAJF,IAAAhP,EAMED,EAAAnkB,KAAAR,KAAM0B,EAAWiX,EAAcmZ,EAAe8B,IAAK5zB,YAdrD4kB,EAAA6B,KAAOkD,EAAY4T,YAgBrB,OAlB+BrY,EAAAoY,EAAA3Y,GAkB/B2Y,EAlBA,CAA+BpB,GAAlBx8B,EAAA49B,YAqBb,SAAkBE,GAEhBA,IAAA,eAEAA,IAAA,qBAEAA,IAAA,qCAEAA,IAAA,qCAEAA,IAAA,2CAVF,CAAkB99B,EAAA89B,YAAA99B,EAAA89B,eAclB,IAAAjD,EAAA,WA0BE,SAAAA,IAbAv6B,KAAAy9B,aAAyC,KA2F3C,OAxFSlD,EAAAr3B,OAAP,SAAcw6B,GACZ,IAAIC,EAAa,IAAIpD,EAMrB,OALAoD,EAAWrV,OAAS,KACpBqV,EAAWtI,MAAK,EAChBsI,EAAWD,gBAAkBA,EAC7BC,EAAWC,cAAgB,KAC3BD,EAAWE,WAAa,KACjBF,GAMTpD,EAAA74B,UAAA4oB,GAAA,SAAGiL,GAAyB,OAAQv1B,KAAKq1B,MAAQE,IAASA,GAG1DgF,EAAA74B,UAAAumB,IAAA,SAAIsN,GAAyBv1B,KAAKq1B,OAASE,GAG3CgF,EAAA74B,UAAAo8B,mBAAA,WACE,IAAIC,EAAa,IAAIxD,EAMrB,OALAwD,EAAWzV,OAAStoB,KACpB+9B,EAAW1I,MAAQr1B,KAAKq1B,MACxB0I,EAAWL,gBAAkB19B,KAAK09B,gBAClCK,EAAWH,cAAgB59B,KAAK49B,cAChCG,EAAWF,WAAa79B,KAAK69B,WACtBE,GAITxD,EAAA74B,UAAAs8B,mBAAA,WACE,QAAI1V,EAASiB,OAAOvpB,KAAKsoB,QAGzB,GAAItoB,KAAKy9B,aAAc,KACrB,IAAwB,IAAA5U,EAAAJ,EAAAzoB,KAAKy9B,aAAa5O,UAAQsL,EAAAtR,EAAAF,QAAAwR,EAAAvR,KAAAuR,EAAAtR,EAAAF,OAAA,CAA7C,IAAIsV,EAAW9D,EAAA94B,MAClBrB,KAAK09B,gBAAgB5C,cAAcmD,qGAErCj+B,KAAKy9B,aAAe,KActB,OAVIz9B,KAAKsqB,GAAE,IACThC,EAAOL,IAAG,GAERjoB,KAAKsqB,GAAE,IAA+BhC,EAAOuV,YAAc79B,KAAK69B,YAClEvV,EAAOL,IAAG,GAERjoB,KAAKsqB,GAAE,IAAkChC,EAAOsV,eAAiB59B,KAAK49B,eACxEtV,EAAOL,IAAG,GAGLK,GAITiS,EAAA74B,UAAAw8B,eAAA,SAAet9B,EAAc0S,EAAY2lB,GACvC,IAAIgF,EAAcj+B,KAAK09B,gBAAgBhD,aAAapnB,GACpD,GAAKtT,KAAKy9B,cACL,GAAIz9B,KAAKy9B,aAAa/S,IAAI9pB,GAK7B,YAJAZ,KAAK09B,gBAAgBtI,QAAQhwB,MAC3Bqe,EAAAlhB,eAAeooB,uBACfsO,EAAWh2B,YAJSjD,KAAKy9B,aAAe,IAAIhZ,IAQhDzkB,KAAKy9B,aAAaxV,IAAIrnB,EAAMq9B,IAI9B1D,EAAA74B,UAAAsxB,eAAA,SAAepyB,GACb,IAAI65B,EACA2C,EAAuBp9B,KAC3B,GACE,GAAIo9B,EAAQK,eAAiBhD,EAAQ2C,EAAQK,aAAat8B,IAAIP,IAC5D,OAAO65B,QAEF2C,EAAUA,EAAQ9U,QAC3B,OAAOtoB,KAAK09B,gBAAgBpE,OAAOn4B,IAAIP,IAIzC25B,EAAA74B,UAAAy5B,SAAA,WAIE,OAHA5R,OAAsB,MAAfvpB,KAAKsoB,OAAgB,mCAC5BtoB,KAAK49B,cAAgB,KACrB59B,KAAK69B,WAAa,KACX79B,KAAKsqB,GAAE,IAElBiQ,EAxGA,GAAa76B,EAAA66B,wYC/lGb,IAsBY4D,EAtBZ1a,EAAAtjB,EAAA,GAUA6B,EAAA7B,EAAA,IAYA,SAAYg+B,GAKVA,IAAA,uBACAA,IAAA,WACAA,IAAA,iBACAA,IAAA,iBACAA,IAAA,iBACAA,IAAA,eACAA,IAAA,iBACAA,IAAA,iBACAA,IAAA,iBACAA,IAAA,uBACAA,IAAA,8BACAA,IAAA,wBACAA,IAAA,sBACAA,IAAA,sBACAA,IAAA,oBACAA,IAAA,YACAA,IAAA,gBACAA,IAAA,gBACAA,IAAA,oBACAA,IAAA,sBACAA,IAAA,kBACAA,IAAA,sBACAA,IAAA,cACAA,IAAA,gBACAA,IAAA,wBACAA,IAAA,cACAA,IAAA,YACAA,IAAA,4BACAA,IAAA,oBACAA,IAAA,YACAA,IAAA,4BACAA,IAAA,0BACAA,IAAA,YACAA,IAAA,kBACAA,IAAA,cACAA,IAAA,oBACAA,IAAA,0BACAA,IAAA,cACAA,IAAA,gBACAA,IAAA,YACAA,IAAA,sBACAA,IAAA,sBACAA,IAAA,0BACAA,IAAA,oBACAA,IAAA,wBACAA,IAAA,oBACAA,IAAA,cACAA,IAAA,oBACAA,IAAA,kBACAA,IAAA,oBACAA,IAAA,gBACAA,IAAA,kBACAA,IAAA,gBACAA,IAAA,cACAA,IAAA,gBACAA,IAAA,oBACAA,IAAA,cACAA,IAAA,gBACAA,IAAA,kBACAA,IAAA,gBACAA,IAAA,kBAIAA,IAAA,0BACAA,IAAA,4BACAA,IAAA,0BACAA,IAAA,4BACAA,IAAA,8BACAA,IAAA,gCACAA,IAAA,cACAA,IAAA,8BACAA,IAAA,0BACAA,IAAA,kBACAA,IAAA,wBACAA,IAAA,8BACAA,IAAA,sCACAA,IAAA,4CACAA,IAAA,kCACAA,IAAA,4CACAA,IAAA,gDACAA,IAAA,0DACAA,IAAA,4CACAA,IAAA,gBACAA,IAAA,kBACAA,IAAA,0CACAA,IAAA,wBACAA,IAAA,kBACAA,IAAA,sBACAA,IAAA,0BACAA,IAAA,8BACAA,IAAA,0CACAA,IAAA,sDACAA,IAAA,8EACAA,IAAA,0BACAA,IAAA,cACAA,IAAA,kBACAA,IAAA,8BACAA,IAAA,kBACAA,IAAA,8CACAA,IAAA,sBACAA,IAAA,wBACAA,IAAA,kBACAA,IAAA,qBACAA,IAAA,+BACAA,IAAA,iCACAA,IAAA,uCACAA,IAAA,yDACAA,IAAA,iCACAA,IAAA,qCACAA,IAAA,yDACAA,IAAA,qEACAA,IAAA,6FACAA,IAAA,yCACAA,IAAA,6BACAA,IAAA,iCACAA,IAAA,aAIAA,IAAA,6BACAA,IAAA,mCACAA,IAAA,qCACAA,IAAA,iCAIAA,IAAA,uBACAA,IAAA,2BArIF,CAAYA,EAAAz+B,EAAAy+B,QAAAz+B,EAAAy+B,WAwIZ,SAAiBA,GAECA,EAAAC,YAAhB,SAA4Bl6B,GAC1B,OAAQA,GACN,IAAK,WAAY,OAAOi6B,EAAMzG,SAC9B,IAAK,KAAM,OAAOyG,EAAME,GACxB,IAAK,QAAS,OAAOF,EAAMG,MAC3B,IAAK,QAAS,OAAOH,EAAMI,MAC3B,IAAK,QAAS,OAAOJ,EAAMK,MAC3B,IAAK,OAAQ,OAAOL,EAAMM,KAC1B,IAAK,QAAS,OAAON,EAAMO,MAC3B,IAAK,QAAS,OAAOP,EAAMzK,MAC3B,IAAK,WAAY,OAAOyK,EAAMQ,SAC9B,IAAK,QAAS,OAAOR,EAAMrI,MAC3B,IAAK,cAAe,OAAOqI,EAAMvR,YACjC,IAAK,WAAY,OAAOuR,EAAMS,SAC9B,IAAK,UAAW,OAAOT,EAAMxI,QAC7B,IAAK,UAAW,OAAOwI,EAAMhN,QAC7B,IAAK,SAAU,OAAOgN,EAAMU,OAC5B,IAAK,KAAM,OAAOV,EAAMW,GACxB,IAAK,OAAQ,OAAOX,EAAMY,KAC1B,IAAK,OAAQ,OAAOZ,EAAMtI,KAC1B,IAAK,SAAU,OAAOsI,EAAMpX,OAC5B,IAAK,UAAW,OAAOoX,EAAMa,QAC7B,IAAK,QAAS,OAAOb,EAAMc,MAC3B,IAAK,UAAW,OAAOd,EAAMe,QAC7B,IAAK,MAAO,OAAOf,EAAMgB,IACzB,IAAK,OAAQ,OAAOhB,EAAMiB,KAC1B,IAAK,WAAY,OAAOjB,EAAM9E,SAC9B,IAAK,MAAO,OAAO8E,EAAMtS,IACzB,IAAK,KAAM,OAAOsS,EAAMkB,GACxB,IAAK,aAAc,OAAOlB,EAAMmB,WAChC,IAAK,SAAU,OAAOnB,EAAMhX,OAC5B,IAAK,KAAM,OAAOgX,EAAMoB,GACxB,IAAK,aAAc,OAAOpB,EAAMqB,WAChC,IAAK,YAAa,OAAOrB,EAAMZ,UAC/B,IAAK,KAAM,OAAOY,EAAMsB,GACxB,IAAK,QAAS,OAAOtB,EAAMuB,MAC3B,IAAK,MAAO,OAAOvB,EAAMrH,IACzB,IAAK,SAAU,OAAOqH,EAAMwB,OAC5B,IAAK,YAAa,OAAOxB,EAAM3I,UAC/B,IAAK,MAAO,OAAO2I,EAAMyB,IACzB,IAAK,OAAQ,OAAOzB,EAAM0B,KAC1B,IAAK,KAAM,OAAO1B,EAAM2B,GACxB,IAAK,UAAW,OAAO3B,EAAM4B,QAC7B,IAAK,UAAW,OAAO5B,EAAMjH,QAC7B,IAAK,YAAa,OAAOiH,EAAMhH,UAC/B,IAAK,SAAU,OAAOgH,EAAMlH,OAC5B,IAAK,WAAY,OAAOkH,EAAMnH,SAC9B,IAAK,SAAU,OAAOmH,EAAM6B,OAC5B,IAAK,MAAO,OAAO7B,EAAMpS,IACzB,IAAK,SAAU,OAAOoS,EAAM7R,OAC5B,IAAK,QAAS,OAAO6R,EAAMzJ,MAC3B,IAAK,SAAU,OAAOyJ,EAAM8B,OAC5B,IAAK,OAAQ,OAAO9B,EAAM5J,KAC1B,IAAK,QAAS,OAAO4J,EAAM+B,MAC3B,IAAK,OAAQ,OAAO/B,EAAMgC,KAC1B,IAAK,MAAO,OAAOhC,EAAMiC,IACzB,IAAK,OAAQ,OAAOjC,EAAMkC,KAC1B,IAAK,SAAU,OAAOlC,EAAMmC,OAC5B,IAAK,MAAO,OAAOnC,EAAMoC,IACzB,IAAK,OAAQ,OAAOpC,EAAMqC,KAC1B,IAAK,QAAS,OAAOrC,EAAMsC,MAC3B,IAAK,OAAQ,OAAOtC,EAAMuC,KAC1B,IAAK,QAAS,OAAOvC,EAAMwC,MAC3B,QAAS,OAAOxC,EAAMyC,UAIVzC,EAAA0C,iBAAhB,SAAiCC,GAC/B,OAAQA,GACN,KAAK3C,EAAMzG,SACX,KAAKyG,EAAME,GACX,KAAKF,EAAMvR,YACX,KAAKuR,EAAMxI,QACX,KAAKwI,EAAMU,OACX,KAAKV,EAAMiB,KACX,KAAKjB,EAAMtS,IACX,KAAKsS,EAAMsB,GACX,KAAKtB,EAAMuB,MACX,KAAKvB,EAAMwB,OACX,KAAKxB,EAAM3I,UACX,KAAK2I,EAAMnH,SACX,KAAKmH,EAAMpS,IACX,KAAKoS,EAAMkC,KAAM,OAAO,EACxB,QAAS,OAAO,IAIJlC,EAAA4C,iBAAhB,SAAiCD,GAC/B,OAAQA,GACN,KAAK3C,EAAMU,OAAQ,MAAO,SAC1B,KAAKV,EAAMoB,GAAI,MAAO,KACtB,KAAKpB,EAAMqB,WAAY,MAAO,aAC9B,KAAKrB,EAAMyB,IAAK,MAAO,MACvB,KAAKzB,EAAMmC,OAAQ,MAAO,SAC1B,KAAKnC,EAAMqC,KAAM,MAAO,OACxB,KAAKrC,EAAMwC,MAAO,MAAO,QACzB,KAAKxC,EAAM6C,YAAa,MAAO,MAC/B,KAAK7C,EAAM8C,MAAO,MAAO,IACzB,KAAK9C,EAAM+C,SAAU,MAAO,IAC5B,KAAK/C,EAAMgD,YAAa,MAAO,IAC/B,KAAKhD,EAAMiD,gBAAiB,MAAO,KACnC,KAAKjD,EAAMkD,mBAAoB,MAAO,KACtC,KAAKlD,EAAMmD,cAAe,MAAO,KACjC,KAAKnD,EAAMoD,mBAAoB,MAAO,KACtC,KAAKpD,EAAMqD,qBAAsB,MAAO,MACxC,KAAKrD,EAAMsD,0BAA2B,MAAO,MAC7C,KAAKtD,EAAMuD,KAAM,MAAO,IACxB,KAAKvD,EAAMwD,MAAO,MAAO,IACzB,KAAKxD,EAAMyD,kBAAmB,MAAO,KACrC,KAAKzD,EAAM0D,SAAU,MAAO,IAC5B,KAAK1D,EAAM2D,MAAO,MAAO,IACzB,KAAK3D,EAAM4D,QAAS,MAAO,IAC3B,KAAK5D,EAAM6D,UAAW,MAAO,KAC7B,KAAK7D,EAAM8D,YAAa,MAAO,KAC/B,KAAK9D,EAAM+D,kBAAmB,MAAO,KACrC,KAAK/D,EAAMgE,wBAAyB,MAAO,KAC3C,KAAKhE,EAAMiE,oCAAqC,MAAO,MACvD,KAAKjE,EAAMkE,UAAW,MAAO,IAC7B,KAAKlE,EAAMmE,IAAK,MAAO,IACvB,KAAKnE,EAAMoE,MAAO,MAAO,IACzB,KAAKpE,EAAMqE,YAAa,MAAO,IAC/B,KAAKrE,EAAMsE,MAAO,MAAO,IACzB,KAAKtE,EAAMuE,oBAAqB,MAAO,KACvC,KAAKvE,EAAMwE,QAAS,MAAO,KAC3B,KAAKxE,EAAMyE,OAAQ,MAAO,IAC1B,KAAKzE,EAAM0E,YAAa,MAAO,KAC/B,KAAK1E,EAAM2E,aAAc,MAAO,KAChC,KAAK3E,EAAM4E,gBAAiB,MAAO,KACnC,KAAK5E,EAAM6E,yBAA0B,MAAO,MAC5C,KAAK7E,EAAM8E,aAAc,MAAO,KAChC,KAAK9E,EAAM+E,eAAgB,MAAO,KAClC,KAAK/E,EAAMgF,yBAA0B,MAAO,MAC5C,KAAKhF,EAAMiF,+BAAgC,MAAO,MAClD,KAAKjF,EAAMkF,2CAA4C,MAAO,OAC9D,KAAKlF,EAAMmF,iBAAkB,MAAO,KACpC,KAAKnF,EAAMoF,WAAY,MAAO,KAC9B,KAAKpF,EAAMqF,aAAc,MAAO,KAChC,QAEE,OADAja,QAAO,GACA,KA7If,CAAiB4U,EAAAz+B,EAAAy+B,QAAAz+B,EAAAy+B,WAmJjB,IAAAjT,EAAA,WAUE,SAAAA,EAAYtnB,EAAgBE,EAAYC,GAgDxC/D,KAAAq7B,aAAsB,EA/CpBr7B,KAAK4D,OAASA,EACd5D,KAAK8D,MAAQA,EACb9D,KAAK+D,IAAMA,EA8Cf,OA3CSmnB,EAAAxmB,KAAP,SAAY++B,EAAUC,GACpB,GAAID,EAAE7/B,QAAU8/B,EAAE9/B,OAAQ,MAAM,IAAIma,MAAM,mBAC1C,OAAO,IAAImN,EAAMuY,EAAE7/B,OACjB6/B,EAAE3/B,MAAQ4/B,EAAE5/B,MAAQ2/B,EAAE3/B,MAAQ4/B,EAAE5/B,MAChC2/B,EAAE1/B,IAAM2/B,EAAE3/B,IAAM0/B,EAAE1/B,IAAM2/B,EAAE3/B,MAI9BhD,OAAAC,eAAIkqB,EAAAxpB,UAAA,eAAJ,WACE,OAAO,IAAIwpB,EAAMlrB,KAAK4D,OAAQ5D,KAAK8D,MAAO9D,KAAK8D,wCAEjD/C,OAAAC,eAAIkqB,EAAAxpB,UAAA,aAAJ,WACE,OAAO,IAAIwpB,EAAMlrB,KAAK4D,OAAQ5D,KAAK+D,IAAK/D,KAAK+D,sCAG/ChD,OAAAC,eAAIkqB,EAAAxpB,UAAA,YAAJ,WAIE,IAHA,IAAIwC,EAAOlE,KAAK4D,OAAOM,KACnBy/B,EAAM3jC,KAAK8D,MACXgB,EAAO,EACJ6+B,KAAQ,GACW,IAApBz/B,EAAKI,WAAWq/B,IAClB7+B,IAGJ,OAAOA,mCAGT/D,OAAAC,eAAIkqB,EAAAxpB,UAAA,cAAJ,WAIE,IAHA,IAAIwC,EAAOlE,KAAK4D,OAAOM,KACnBy/B,EAAM3jC,KAAK8D,MACXiB,EAAS,EACN4+B,KAAQ,GACW,IAApBz/B,EAAKI,WAAWq/B,IACpB5+B,IAEF,OAAOA,mCAGTmmB,EAAAxpB,UAAAiC,SAAA,WACE,OAAO3D,KAAK4D,OAAOM,KAAKM,UAAUxE,KAAK8D,MAAO9D,KAAK+D,MAIvDmnB,EA3DA,GAAaxrB,EAAAwrB,QA+Db,IAAA0Y,EAAA,SAAAjf,GAYE,SAAAif,EAAYhgC,EAAgBqB,QAAA,IAAAA,MAAA,MAA5B,IAAA2f,EACED,EAAAnkB,KAAAR,KAAMiF,IAAYjF,KAVpB4kB,EAAA7gB,IAAW,EAEX6gB,EAAA+e,IAAW,EACX/e,EAAAkc,OAAgB,EAChBlc,EAAAif,SAAgB,EAEhBjf,EAAAkf,WAAoB,EACpBlf,EAAAmf,oBAA2B,EAIzBnf,EAAKhhB,OAASA,EACdghB,EAAK+e,IAAM,EACX/e,EAAK7gB,IAAMH,EAAOM,KAAKE,OACvBwgB,EAAK3f,YAAcA,GAA4B,IAAIC,MAEnD,IAAIhB,EAAON,EAAOM,KAWlB,GAPE0gB,EAAK+e,IAAM/e,EAAK7gB,KACS,OAAzBG,EAAKI,WAAWsgB,EAAK+e,QAEnB/e,EAAK+e,IAKP/e,EAAK+e,IAAM,EAAI/e,EAAK7gB,KACK,IAAzBG,EAAKI,WAAWsgB,EAAK+e,MACQ,IAA7Bz/B,EAAKI,WAAWsgB,EAAK+e,IAAM,GAG3B,IADA/e,EAAK+e,KAAO,EAEV/e,EAAK+e,IAAM/e,EAAK7gB,KACS,IAAzBG,EAAKI,WAAWsgB,EAAK+e,QAEnB/e,EAAK+e,aAo7Bf,OA59B+Bze,EAAA0e,EAAAjf,GA8C7Bif,EAAAliC,UAAAinB,KAAA,SAAKqb,GAEH,YAFG,IAAAA,OAAA,GACHhkC,KAAK8jC,WAAa,EACX9jC,KAAK8gC,MAAQ9gC,KAAKikC,WAAWD,IAG9BJ,EAAAliC,UAAAuiC,WAAR,SAAmBD,EAAgCE,QAAhC,IAAAF,OAAA,QAAgC,IAAAE,MAAsB1lB,IAAIC,WAE3E,IADA,IAAIva,EAAOlE,KAAK4D,OAAOM,KAChBlE,KAAK2jC,IAAM3jC,KAAK+D,KAAK,CAC1B/D,KAAK6jC,SAAW7jC,KAAK2jC,IACrB,IAAIjjC,EAAIwD,EAAKI,WAAWtE,KAAK2jC,KAC7B,OAAQjjC,GACN,UAEMV,KAAK2jC,IAAM3jC,KAAK+D,KACO,IAAzBG,EAAKI,WAAWtE,KAAK2jC,QAEnB3jC,KAAK2jC,IAET,MAEF,QACA,OACA,QACA,QACA,UACI3jC,KAAK2jC,IACP,MAEF,QAEE,QADE3jC,KAAK2jC,IAELO,EAAiB,GAAKlkC,KAAK2jC,IAAM3jC,KAAK+D,KACb,IAAzBG,EAAKI,WAAWtE,KAAK2jC,QAEnB3jC,KAAK2jC,IAELO,EAAiB,GAAKlkC,KAAK2jC,IAAM3jC,KAAK+D,KACb,IAAzBG,EAAKI,WAAWtE,KAAK2jC,QAEnB3jC,KAAK2jC,IACAxF,EAAMsD,2BAERtD,EAAMoD,oBAERpD,EAAMqE,YAEf,QACA,QACA,QACE,OAAOrE,EAAMgG,cAEf,QAEE,QADEnkC,KAAK2jC,IAELO,EAAiB,GAAKlkC,KAAK2jC,IAAM3jC,KAAK+D,KACb,IAAzBG,EAAKI,WAAWtE,KAAK2jC,QAEnB3jC,KAAK2jC,IACAxF,EAAM+E,gBAER/E,EAAM4D,QAEf,QAEE,KADE/hC,KAAK2jC,IACHO,EAAiB,GAAKlkC,KAAK2jC,IAAM3jC,KAAK+D,IAAK,CAC7C,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK2jC,KAEvB,QADE3jC,KAAK2jC,IACAxF,EAAMuE,oBAEf,GAA6B,IAAzBx+B,EAAKI,WAAWtE,KAAK2jC,KAEvB,QADE3jC,KAAK2jC,IACAxF,EAAMmF,iBAGjB,OAAOnF,EAAMkE,UAEf,QAEE,QADEriC,KAAK2jC,IACAxF,EAAMiG,UAEf,QAEE,QADEpkC,KAAK2jC,IACAxF,EAAMkG,WAEf,QAEE,KADErkC,KAAK2jC,IACHO,EAAiB,GAAKlkC,KAAK2jC,IAAM3jC,KAAK+D,IAAK,CAC7C,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK2jC,KAEvB,QADE3jC,KAAK2jC,IACAxF,EAAM4E,gBAEf,GAA6B,IAAzB7+B,EAAKI,WAAWtE,KAAK2jC,KAEvB,QADE3jC,KAAK2jC,IAELO,EAAiB,GAAKlkC,KAAK2jC,IAAM3jC,KAAK+D,KACb,IAAzBG,EAAKI,WAAWtE,KAAK2jC,QAEnB3jC,KAAK2jC,IACAxF,EAAM6E,0BAER7E,EAAMyD,kBAGjB,OAAOzD,EAAM0D,SAEf,QAEE,KADE7hC,KAAK2jC,IACHO,EAAiB,GAAKlkC,KAAK2jC,IAAM3jC,KAAK+D,IAAK,CAC7C,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK2jC,KAEvB,QADE3jC,KAAK2jC,IACAxF,EAAM6D,UAEf,GAA6B,IAAzB99B,EAAKI,WAAWtE,KAAK2jC,KAEvB,QADE3jC,KAAK2jC,IACAxF,EAAM0E,YAGjB,OAAO1E,EAAMuD,KAEf,QAEE,QADE1hC,KAAK2jC,IACAxF,EAAM8C,MAEf,QAEE,KADEjhC,KAAK2jC,IACHO,EAAiB,GAAKlkC,KAAK2jC,IAAM3jC,KAAK+D,IAAK,CAC7C,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK2jC,KAEvB,QADE3jC,KAAK2jC,IACAxF,EAAM8D,YAEf,GAA6B,IAAzB/9B,EAAKI,WAAWtE,KAAK2jC,KAEvB,QADE3jC,KAAK2jC,IACAxF,EAAM2E,aAGjB,OAAO3E,EAAMwD,MAEf,QAEE,KADE3hC,KAAK2jC,IACHO,EAAiB,GAAKlkC,KAAK2jC,IAAM3jC,KAAK+D,IAAK,CAC7C,GAAI/B,EAAAsiC,eAAepgC,EAAKI,WAAWtE,KAAK2jC,MAEtC,QADE3jC,KAAK2jC,IACAxF,EAAMoG,aAEf,GACEL,EAAiB,GAAKlkC,KAAK2jC,IAAM,EAAI3jC,KAAK+D,KACjB,IAAzBG,EAAKI,WAAWtE,KAAK2jC,MACQ,IAA7Bz/B,EAAKI,WAAWtE,KAAK2jC,IAAM,GAG3B,OADA3jC,KAAK2jC,KAAO,EACLxF,EAAM6C,YAGjB,OAAO7C,EAAMqG,IAEf,QAEE,KADExkC,KAAK2jC,IACHO,EAAiB,GAAKlkC,KAAK2jC,IAAM3jC,KAAK+D,IAAK,CAC7C,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK2jC,KAAwB,CAO/C,OAAS3jC,KAAK2jC,IAAM3jC,KAAK+D,MACnB/B,EAAAqC,YAAYH,EAAKI,WAAWtE,KAAK2jC,QAEvC,SAEF,GAA6B,IAAzBz/B,EAAKI,WAAWtE,KAAK2jC,KAA2B,CAElD,IADA,IAAIc,GAAS,IACJzkC,KAAK2jC,IAAM3jC,KAAK+D,KAEvB,GACG,KAFHrD,EAAIwD,EAAKI,WAAWtE,KAAK2jC,OAGvB3jC,KAAK2jC,IAAM,EAAI3jC,KAAK+D,KACS,IAA7BG,EAAKI,WAAWtE,KAAK2jC,IAAM,GAC3B,CACA3jC,KAAK2jC,KAAO,EACZc,GAAS,EACT,MAGCA,GACHzkC,KAAKoF,MACHqe,EAAAlhB,eAAemiC,YACf1kC,KAAKiD,MAAMjD,KAAK2jC,KAAM,MAG1B,SAEF,GAA6B,IAAzBz/B,EAAKI,WAAWtE,KAAK2jC,KAEvB,QADE3jC,KAAK2jC,IACAxF,EAAM8E,aAGjB,OAAO9E,EAAM2D,MAEf,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACE,OAAO9hC,KAAK2kC,cACRxG,EAAMyG,eACNzG,EAAMoG,aAEZ,QAEE,QADEvkC,KAAK2jC,IACAxF,EAAM0G,MAEf,QAEE,QADE7kC,KAAK2jC,IACAxF,EAAM2G,UAEf,QAEE,KADE9kC,KAAK2jC,IACHO,EAAiB,GAAKlkC,KAAK2jC,IAAM3jC,KAAK+D,IAAK,CAC7C,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK2jC,KAEvB,QADE3jC,KAAK2jC,IAELO,EAAiB,GACjBlkC,KAAK2jC,IAAM3jC,KAAK+D,KACS,IAAzBG,EAAKI,WAAWtE,KAAK2jC,QAEnB3jC,KAAK2jC,IACAxF,EAAMgF,0BAERhF,EAAM+D,kBAEf,GAA6B,IAAzBh+B,EAAKI,WAAWtE,KAAK2jC,KAEvB,QADE3jC,KAAK2jC,IACAxF,EAAMiD,gBAGjB,OAAOjD,EAAM+C,SAEf,QAEE,KADElhC,KAAK2jC,IACHO,EAAiB,GAAKlkC,KAAK2jC,IAAM3jC,KAAK+D,IAAK,CAC7C,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK2jC,KAEvB,QADE3jC,KAAK2jC,IAELO,EAAiB,GACjBlkC,KAAK2jC,IAAM3jC,KAAK+D,KACS,IAAzBG,EAAKI,WAAWtE,KAAK2jC,QAEnB3jC,KAAK2jC,IACAxF,EAAMqD,sBAERrD,EAAMmD,cAEf,GAA6B,IAAzBp9B,EAAKI,WAAWtE,KAAK2jC,KAEvB,QADE3jC,KAAK2jC,IACAxF,EAAM4G,mBAGjB,OAAO5G,EAAMyE,OAEf,QAEE,KADE5iC,KAAK2jC,IACHO,EAAiB,GAAKlkC,KAAK2jC,IAAM3jC,KAAK+D,IAAK,CAC7C,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK2jC,KAA8B,CAErD,KADE3jC,KAAK2jC,IACHO,EAAiB,GAAKlkC,KAAK2jC,IAAM3jC,KAAK+D,IAAK,CAC7C,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK2jC,KAEvB,QADE3jC,KAAK2jC,IAELO,EAAiB,GAAKlkC,KAAK2jC,IAAM3jC,KAAK+D,KACb,IAAzBG,EAAKI,WAAWtE,KAAK2jC,QAEnB3jC,KAAK2jC,IACAxF,EAAMkF,4CAERlF,EAAMiE,oCAEf,GAA6B,IAAzBl+B,EAAKI,WAAWtE,KAAK2jC,KAEvB,QADE3jC,KAAK2jC,IACAxF,EAAMiF,+BAGjB,OAAOjF,EAAMgE,wBAEf,GAA6B,IAAzBj+B,EAAKI,WAAWtE,KAAK2jC,KAEvB,QADE3jC,KAAK2jC,IACAxF,EAAMkD,mBAGjB,OAAOlD,EAAMgD,YAEf,QAEE,QADEnhC,KAAK2jC,IACAxF,EAAM6G,SAEf,QAEE,QADEhlC,KAAK2jC,IACAxF,EAAM8G,YAEf,QAEE,QADEjlC,KAAK2jC,IACAxF,EAAM+G,aAEf,QAEE,QADEllC,KAAK2jC,IAELO,EAAiB,GAAKlkC,KAAK2jC,IAAM3jC,KAAK+D,KACb,IAAzBG,EAAKI,WAAWtE,KAAK2jC,QAEnB3jC,KAAK2jC,IACAxF,EAAMqF,cAERrF,EAAMoE,MAEf,SAEE,QADEviC,KAAK2jC,IACAxF,EAAMgH,UAEf,SAEE,KADEnlC,KAAK2jC,IACHO,EAAiB,GAAKlkC,KAAK2jC,IAAM3jC,KAAK+D,IAAK,CAC7C,GAA6B,KAAzBG,EAAKI,WAAWtE,KAAK2jC,KAEvB,QADE3jC,KAAK2jC,IACAxF,EAAMwE,QAEf,GAA6B,IAAzBz+B,EAAKI,WAAWtE,KAAK2jC,KAEvB,QADE3jC,KAAK2jC,IACAxF,EAAMoF,WAGjB,OAAOpF,EAAMmE,IAEf,SAEE,QADEtiC,KAAK2jC,IACAxF,EAAMiH,WAEf,SAEE,QADEplC,KAAK2jC,IACAxF,EAAMsE,MAEf,QAEE,QADEziC,KAAK2jC,IACAxF,EAAMkH,GAEf,QACE,GAAIrjC,EAAAsjC,kBAAkB5kC,GAAI,CACxB,GAAIsB,EAAAujC,mBAAmB7kC,GAAI,CAEzB,IADA,IAAI8kC,EAAYxlC,KAAK2jC,MAEjB3jC,KAAK2jC,IAAM3jC,KAAK+D,KAClB/B,EAAAyjC,iBAAiB/kC,EAAIwD,EAAKI,WAAWtE,KAAK2jC,OAE1C,IAAK3hC,EAAAujC,mBAAmB7kC,GAEtB,OADAV,KAAK2jC,IAAM6B,EACJrH,EAAMvJ,WAGjB,IAAI8Q,EAAcxhC,EAAKM,UAAUghC,EAAWxlC,KAAK2jC,KAC7CgC,EAAexH,EAAMC,YAAYsH,GACrC,KACEC,GAAgBxH,EAAMyC,SACpBoD,GAAoB7F,EAAM0C,iBAAiB8E,IAE7C,OAAOA,EAET3lC,KAAK2jC,IAAM6B,EAEb,OAAOrH,EAAMvJ,WACR,GAAI5yB,EAAA4jC,aAAallC,GAAI,GACxBV,KAAK2jC,IACP,MAOF,OALA3jC,KAAKoF,MACHqe,EAAAlhB,eAAesjC,kBACf7lC,KAAKiD,MAAMjD,KAAK2jC,IAAK3jC,KAAK2jC,IAAM,MAEhC3jC,KAAK2jC,IACAxF,EAAMyC,SAInB,OAAOzC,EAAM2H,WAGflC,EAAAliC,UAAAqkC,KAAA,SACEC,EACAhC,EACAiC,QAFA,IAAAD,OAAA,QACA,IAAAhC,OAAA,QACA,IAAAiC,MAAyBznB,IAAIC,WAE7B,IAAIva,EAAOlE,KAAK4D,OAAOM,KACvB,GAAIlE,KAAK8jC,UAAY,EAAG,CACtB,IAAI0B,EAAYxlC,KAAK2jC,IACjBuC,EAAclmC,KAAK8gC,MACnBqF,EAAiBnmC,KAAK6jC,SAE1B,GADA7jC,KAAK8jC,UAAY9jC,KAAKikC,WAAWD,EAAkBiC,GAC/CD,EAEF,IADAhmC,KAAK+jC,oBAAqB,IACjB/jC,KAAK6jC,SAAW2B,GACvB,GAAIxjC,EAAAqC,YAAYH,EAAKI,WAAWtE,KAAK6jC,WAAY,CAC/C7jC,KAAK+jC,oBAAqB,EAC1B,MAIN/jC,KAAK2jC,IAAM6B,EACXxlC,KAAK8gC,MAAQoF,EACblmC,KAAK6jC,SAAWsC,EAElB,OAAOnmC,KAAK8jC,WAGdF,EAAAliC,UAAA0kC,KAAA,SAAKtF,GACH,IAAI0E,EAAYxlC,KAAK2jC,IACjBuC,EAAclmC,KAAK8gC,MACnBqF,EAAiBnmC,KAAK6jC,SACtBoC,EAAoBznB,IAAIC,UAC5B,OAAQqiB,GACN,KAAK3C,EAAMgD,YACT8E,EAAoB,EAKxB,OADAjmC,KAAK8gC,MAAQ9gC,KAAKikC,WAAWnD,GAAS3C,EAAMvJ,WAAYqR,GACpDjmC,KAAK8gC,OAASA,GAChB9gC,KAAK8jC,WAAa,GACX,IAEP9jC,KAAK2jC,IAAM6B,EACXxlC,KAAK8gC,MAAQoF,EACblmC,KAAK6jC,SAAWsC,GACT,IAeXvC,EAAAliC,UAAA2kC,KAAA,WACE,IAAIC,EAUJ,OATIC,GACFD,EAAQC,EACRA,EAAgB,MAEhBD,EAAQ,IAAIE,EAEdF,EAAM3C,IAAM3jC,KAAK2jC,IACjB2C,EAAMxF,MAAQ9gC,KAAK8gC,MACnBwF,EAAMzC,SAAW7jC,KAAK6jC,SACfyC,GAGT1C,EAAAliC,UAAA+kC,QAAA,SAAQH,GACNC,EAAgBD,GAGlB1C,EAAAliC,UAAAglC,MAAA,SAAMJ,GACJtmC,KAAK2jC,IAAM2C,EAAM3C,IACjB3jC,KAAK8gC,MAAQwF,EAAMxF,MACnB9gC,KAAK6jC,SAAWyC,EAAMzC,SACtB7jC,KAAK8jC,WAAa,EAClByC,EAAgBD,GAGlB1C,EAAAliC,UAAAuB,MAAA,SAAMa,EAAiBC,GAOrB,YAPI,IAAAD,OAAc,QAAG,IAAAC,OAAY,GAC7BD,EAAQ,GACVA,EAAQ9D,KAAK6jC,SACb9/B,EAAM/D,KAAK2jC,KACF5/B,EAAM,IACfA,EAAMD,GAED,IAAIonB,EAAMlrB,KAAK4D,OAAQE,EAAOC,IAGvC6/B,EAAAliC,UAAAilC,eAAA,WAGE,IAFA,IAAIziC,EAAOlE,KAAK4D,OAAOM,KACnBJ,EAAQ9D,KAAK2jC,MAEb3jC,KAAK2jC,IAAM3jC,KAAK+D,KAClB/B,EAAAyjC,iBAAiBvhC,EAAKI,WAAWtE,KAAK2jC,QAExC,OAAOz/B,EAAKM,UAAUV,EAAO9D,KAAK2jC,MAGpCC,EAAAliC,UAAAmc,WAAA,WAKE,IAJA,IAAI3Z,EAAOlE,KAAK4D,OAAOM,KACnB0iC,EAAQ1iC,EAAKI,WAAWtE,KAAK2jC,OAC7B7/B,EAAQ9D,KAAK2jC,IACbryB,EAAS,KACA,CACX,GAAItR,KAAK2jC,KAAO3jC,KAAK+D,IAAK,CACxBuN,GAAUpN,EAAKM,UAAUV,EAAO9D,KAAK2jC,KACrC3jC,KAAKoF,MACHqe,EAAAlhB,eAAeskC,4BACf7mC,KAAKiD,MAAMa,EAAQ,EAAG9D,KAAK+D,MAE7B,MAEF,IAAIrD,EAAIwD,EAAKI,WAAWtE,KAAK2jC,KAC7B,GAAIjjC,GAAKkmC,EAAO,CACdt1B,GAAUpN,EAAKM,UAAUV,EAAO9D,KAAK2jC,OACrC,MAEF,GAAK,IAADjjC,EAAJ,CAMA,GAAIsB,EAAAqC,YAAY3D,GAAI,CAClB4Q,GAAUpN,EAAKM,UAAUV,EAAO9D,KAAK2jC,KACrC3jC,KAAKoF,MACHqe,EAAAlhB,eAAeskC,4BACf7mC,KAAKiD,MAAMa,EAAQ,EAAG9D,KAAK2jC,MAE7B,QAEA3jC,KAAK2jC,SAbLryB,GAAUpN,EAAKM,UAAUV,EAAO9D,KAAK2jC,KACrCryB,GAAUtR,KAAK8mC,qBACfhjC,EAAQ9D,KAAK2jC,IAajB,OAAOryB,GAGTsyB,EAAAliC,UAAAolC,mBAAA,WACE,KAAM9mC,KAAK2jC,KAAO3jC,KAAK+D,IAKrB,OAJA/D,KAAKoF,MACHqe,EAAAlhB,eAAewkC,uBACf/mC,KAAKiD,MAAMjD,KAAK+D,MAEX,GAGT,IAAIG,EAAOlE,KAAK4D,OAAOM,KACnBxD,EAAIwD,EAAKI,WAAWtE,KAAK2jC,OAC7B,OAAQjjC,GACN,QAAkB,MAAO,KACzB,QAAiB,MAAO,KACxB,SAAiB,MAAO,KACxB,SAAiB,MAAO,KACxB,SAAiB,MAAO,KACxB,SAAiB,MAAO,KACxB,SAAiB,MAAO,KACxB,QAA2B,MAAO,IAClC,QAA2B,MAAO,IAClC,SACE,OACEV,KAAK2jC,IAAM3jC,KAAK+D,KACS,KAAzBG,EAAKI,WAAWtE,KAAK2jC,QAEnB3jC,KAAK2jC,IACA3jC,KAAKgnC,6BAEPhnC,KAAKinC,oBAEd,QAEIjnC,KAAK2jC,IAAM3jC,KAAK+D,KACS,IAAzBG,EAAKI,WAAWtE,KAAK2jC,QAEnB3jC,KAAK2jC,IAIX,QACA,UACA,UAAkC,MAAO,GACzC,QAAS,OAAOpgB,OAAO2jB,aAAaxmC,KAIxCkjC,EAAAliC,UAAAylC,kBAAA,WAIE,IAHA,IAAIjjC,EAAOlE,KAAK4D,OAAOM,KACnBJ,EAAQ9D,KAAK2jC,IACbyD,GAAU,IACD,CACX,GAAIpnC,KAAK2jC,KAAO3jC,KAAK+D,IAAK,CACxB/D,KAAKoF,MACHqe,EAAAlhB,eAAe8kC,wCACfrnC,KAAKiD,MAAMa,EAAO9D,KAAK+D,MAEzB,MAEF,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK2jC,KAAzB,CAKA,IAAIjjC,EAAIwD,EAAKI,WAAWtE,KAAK2jC,KAC7B,GAAK,IAADjjC,IAAwB0mC,EAAS,MACrC,GAAIplC,EAAAqC,YAAY3D,GAAI,CAClBV,KAAKoF,MACHqe,EAAAlhB,eAAe8kC,wCACfrnC,KAAKiD,MAAMa,EAAO9D,KAAK2jC,MAEzB,QAEA3jC,KAAK2jC,IACPyD,GAAU,QAdNpnC,KAAK2jC,IACPyD,GAAU,EAed,OAAOljC,EAAKM,UAAUV,EAAO9D,KAAK2jC,MAGpCC,EAAAliC,UAAA4lC,gBAAA,WAIE,IAHA,IAAIpjC,EAAOlE,KAAK4D,OAAOM,KACnBJ,EAAQ9D,KAAK2jC,IACbtO,EAAQ,EACLr1B,KAAK2jC,IAAM3jC,KAAK+D,KAAK,CAC1B,IAAIrD,EAASwD,EAAKI,WAAWtE,KAAK2jC,KAClC,IAAK3hC,EAAAyjC,iBAAiB/kC,GAAI,MAI1B,SAHEV,KAAK2jC,IAGCjjC,GACN,SACE20B,GAAiB,EAARA,GAAa,EAAI,EAC1B,MAEF,SACEA,GAAiB,EAARA,GAAa,EAAI,EAC1B,MAEF,SACEA,GAAiB,EAARA,GAAa,EAAI,EAC1B,MAEF,QACEA,GAAS,GAWf,OANc,GAAVA,GACFr1B,KAAKoF,MACHqe,EAAAlhB,eAAeglC,iCACfvnC,KAAKiD,MAAMa,EAAO9D,KAAK2jC,MAGpBz/B,EAAKM,UAAUV,EAAO9D,KAAK2jC,MAGpCC,EAAAliC,UAAAijC,YAAA,WACE,IAAIzgC,EAAOlE,KAAK4D,OAAOM,KACvB,GAA6B,IAAzBA,EAAKI,WAAWtE,KAAK2jC,MAAuB3jC,KAAK2jC,IAAM,EAAI3jC,KAAK+D,IAClE,OAAQG,EAAKI,WAAWtE,KAAK2jC,IAAM,IACjC,QACA,SACA,QACA,QACA,QACA,SAAiB,OAAO,EAI5B,IADA,IAAIA,EAAM3jC,KAAK2jC,IACRA,EAAM3jC,KAAK+D,KAAK,CACrB,IAAIrD,EAAIwD,EAAKI,WAAWq/B,GACxB,GAAK,IAADjjC,GAAsB,IAADA,GAAoB,KAADA,EAC1C,OAAO,EAET,GAAIA,EAAC,IAAkBA,EAAC,GAAgB,MACxCijC,IAEF,OAAO,GAGTC,EAAAliC,UAAA8lC,YAAA,WACE,IAAItjC,EAAOlE,KAAK4D,OAAOM,KACvB,GAA6B,IAAzBA,EAAKI,WAAWtE,KAAK2jC,MAAuB3jC,KAAK2jC,IAAM,EAAI3jC,KAAK+D,IAAK,CACvE,OAAQG,EAAKI,WAAWtE,KAAK2jC,IAAM,IACjC,QACA,SAEE,OADA3jC,KAAK2jC,KAAO,EACL3jC,KAAKynC,iBAEd,QACA,QAEE,OADAznC,KAAK2jC,KAAO,EACL3jC,KAAK0nC,oBAEd,QACA,SAEE,OADA1nC,KAAK2jC,KAAO,EACL3jC,KAAK2nC,mBAGhB,GAAI3lC,EAAA4lC,aAAa1jC,EAAKI,WAAWtE,KAAK2jC,IAAM,IAAK,CAC/C,IAAI7/B,EAAQ9D,KAAK2jC,MACf3jC,KAAK2jC,IACP,IAAItiC,EAAQrB,KAAK2nC,mBAKjB,OAJA3nC,KAAKoF,MACHqe,EAAAlhB,eAAeslC,8CACf7nC,KAAKiD,MAAMa,EAAO9D,KAAK2jC,MAElBtiC,GAGX,OAAOrB,KAAK8nC,sBAGdlE,EAAAliC,UAAA+lC,eAAA,WAKE,IAJA,IAAIvjC,EAAOlE,KAAK4D,OAAOM,KACnBJ,EAAQ9D,KAAK2jC,IACbtiC,EAAQq1B,QAAQ,EAAG,GACnBqR,EAASrR,QAAQ,GAAI,GAClB12B,KAAK2jC,IAAM3jC,KAAK+D,KAAK,CAC1B,IAAIrD,EAAIwD,EAAKI,WAAWtE,KAAK2jC,KAC7B,GAAIjjC,GAAC,IAAmBA,GAAC,GAEvBW,EAAQ2mC,QACNC,QAAQ5mC,EAAO0mC,GACfrR,QAAQh2B,EAAC,GAAgB,SAErB,GAAIA,GAAC,IAAkBA,GAAC,GAE9BW,EAAQ2mC,QACNC,QAAQ5mC,EAAO0mC,GACfrR,QAAQ,GAAKh2B,EAAC,GAAe,QAE1B,MAAIA,GAAC,IAAkBA,GAAC,KAO7B,MALAW,EAAQ2mC,QACNC,QAAQ5mC,EAAO0mC,GACfrR,QAAQ,GAAKh2B,EAAC,GAAe,MAK/BV,KAAK2jC,IAQT,OANI3jC,KAAK2jC,KAAO7/B,GACd9D,KAAKoF,MACHqe,EAAAlhB,eAAe2lC,2BACfloC,KAAKiD,MAAMa,IAGRzC,GAGTuiC,EAAAliC,UAAAomC,mBAAA,WAKE,IAJA,IAAI5jC,EAAOlE,KAAK4D,OAAOM,KACnBJ,EAAQ9D,KAAK2jC,IACbtiC,EAAQq1B,QAAQ,EAAG,GACnByR,EAASzR,QAAQ,GAAI,GAClB12B,KAAK2jC,IAAM3jC,KAAK+D,KAAK,CAC1B,IAAIrD,EAAIwD,EAAKI,WAAWtE,KAAK2jC,KAC7B,KAAIjjC,GAAC,IAAmBA,GAAC,IAOvB,MALAW,EAAQ2mC,QACNC,QAAQ5mC,EAAO8mC,GACfzR,QAAQh2B,EAAC,GAAgB,MAK3BV,KAAK2jC,IAQT,OANI3jC,KAAK2jC,KAAO7/B,GACd9D,KAAKoF,MACHqe,EAAAlhB,eAAe6lC,eACfpoC,KAAKiD,MAAMa,IAGRzC,GAGTuiC,EAAAliC,UAAAimC,iBAAA,WAKE,IAJA,IAAIzjC,EAAOlE,KAAK4D,OAAOM,KACnBJ,EAAQ9D,KAAK2jC,IACbtiC,EAAQq1B,QAAQ,EAAG,GACnB2R,EAAQ3R,QAAQ,EAAG,GAChB12B,KAAK2jC,IAAM3jC,KAAK+D,KAAK,CAC1B,IAAIrD,EAAIwD,EAAKI,WAAWtE,KAAK2jC,KAC7B,KAAIjjC,GAAC,IAAmBA,GAAC,IAOvB,MALAW,EAAQ2mC,QACNC,QAAQ5mC,EAAOgnC,GACf3R,QAAQh2B,EAAC,GAAgB,MAK3BV,KAAK2jC,IAQT,OANI3jC,KAAK2jC,KAAO7/B,GACd9D,KAAKoF,MACHqe,EAAAlhB,eAAe+lC,qBACftoC,KAAKiD,MAAMa,IAGRzC,GAGTuiC,EAAAliC,UAAAgmC,kBAAA,WAME,IALA,IAAIxjC,EAAOlE,KAAK4D,OAAOM,KACnBJ,EAAQ9D,KAAK2jC,IACbtiC,EAAQq1B,QAAQ,EAAG,GACnB6R,EAAQ7R,QAAQ,EAAG,GACnB8R,EAAQ9R,QAAQ,EAAG,GAChB12B,KAAK2jC,IAAM3jC,KAAK+D,KAAK,CAC1B,IAAIrD,EAAIwD,EAAKI,WAAWtE,KAAK2jC,KAC7B,GAAK,IAADjjC,EAEFW,EAAQ4mC,QACN5mC,EACAknC,OAEG,IAAK,IAAD7nC,EAOT,MALAW,EAAQ2mC,QACNC,QAAQ5mC,EAAOknC,GACfC,KAKFxoC,KAAK2jC,IAQT,OANI3jC,KAAK2jC,KAAO7/B,GACd9D,KAAKoF,MACHqe,EAAAlhB,eAAekmC,sBACfzoC,KAAKiD,MAAMa,IAGRzC,GAGTuiC,EAAAliC,UAAAgnC,UAAA,WAGE,IAFA,IAAI5kC,EAAQ9D,KAAK2jC,IACbz/B,EAAOlE,KAAK4D,OAAOM,KAChBlE,KAAK2jC,IAAM3jC,KAAK+D,KAAO/B,EAAAsiC,eAAepgC,EAAKI,WAAWtE,KAAK2jC,SAC9D3jC,KAAK2jC,IAET,GAAI3jC,KAAK2jC,IAAM3jC,KAAK+D,KAAgC,IAAzBG,EAAKI,WAAWtE,KAAK2jC,KAE9C,MADE3jC,KAAK2jC,IACA3jC,KAAK2jC,IAAM3jC,KAAK+D,KAAO/B,EAAAsiC,eAAepgC,EAAKI,WAAWtE,KAAK2jC,SAC9D3jC,KAAK2jC,IAGX,GAAI3jC,KAAK2jC,IAAM3jC,KAAK+D,IAAK,CACvB,IAAIrD,EAAIwD,EAAKI,WAAWtE,KAAK2jC,KAC7B,GAAK,IAADjjC,GAAoB,KAADA,EAUrB,MARIV,KAAK2jC,IAAM3jC,KAAK+D,MACS,IAAzBG,EAAKI,WAAWtE,KAAK2jC,MACI,IAAzBz/B,EAAKI,WAAWtE,KAAK2jC,OAEvB3hC,EAAAsiC,eAAepgC,EAAKI,WAAWtE,KAAK2jC,IAAM,OAExC3jC,KAAK2jC,IAEF3jC,KAAK2jC,IAAM3jC,KAAK+D,KAAO/B,EAAAsiC,eAAepgC,EAAKI,WAAWtE,KAAK2jC,SAC9D3jC,KAAK2jC,IAIb,OAAOgF,WAAWzkC,EAAKM,UAAUV,EAAO9D,KAAK2jC,OAG/CC,EAAAliC,UAAAulC,kBAAA,WAIE,IAHA,IAAI2B,EAAS,EACTvnC,EAAQ,EACR6C,EAAOlE,KAAK4D,OAAOM,KAChBlE,KAAK2jC,IAAM3jC,KAAK+D,KAAK,CAC1B,IAAIrD,EAAIwD,EAAKI,WAAWtE,KAAK2jC,OAC7B,GAAIjjC,GAAC,IAAmBA,GAAC,GACvBW,EAAgB,GAARA,EAAaX,EAAC,QACjB,GAAIA,GAAC,IAAkBA,GAAC,GAC7BW,EAAgB,GAARA,EAAa,GAAKX,EAAC,OACtB,MAAIA,GAAC,IAAkBA,GAAC,KAO7B,OAJAV,KAAKoF,MACHqe,EAAAlhB,eAAe2lC,2BACfloC,KAAKiD,MAAMjD,KAAK2jC,IAAM,EAAG3jC,KAAK2jC,MAEzB,GANPtiC,EAAgB,GAARA,EAAa,GAAKX,EAAC,GAQ7B,GAAgB,KAAVkoC,EAAa,MAErB,OAAIA,GACF5oC,KAAKoF,MACHqe,EAAAlhB,eAAewkC,uBACf/mC,KAAKiD,MAAMjD,KAAK2jC,MAEX,IAEFpgB,OAAO2jB,aAAa7lC,IAGrBuiC,EAAAliC,UAAAslC,0BAAR,WACE,IAAIljC,EAAQ9D,KAAK2jC,IACbtiC,EAAQrB,KAAKynC,iBACboB,EAAU3tB,QAAQ7Z,GAClBynC,GAAU,EAEdvf,QAAQpO,SAAS9Z,IACbwnC,EAAU,UACZ7oC,KAAKoF,MACHqe,EAAAlhB,eAAewmC,4EACf/oC,KAAKiD,MAAMa,EAAO9D,KAAK2jC,MAEzBmF,GAAU,GAGZ,IAAI5kC,EAAOlE,KAAK4D,OAAOM,KAiBvB,OAhBIlE,KAAK2jC,KAAO3jC,KAAK+D,KACnB/D,KAAKoF,MACHqe,EAAAlhB,eAAewkC,uBACf/mC,KAAKiD,MAAMa,EAAO9D,KAAK+D,MAEzB+kC,GAAU,GACwB,KAAzB5kC,EAAKI,WAAWtE,KAAK2jC,OAC5B3jC,KAAK2jC,KAEP3jC,KAAKoF,MACHqe,EAAAlhB,eAAeymC,qCACfhpC,KAAKiD,MAAMa,EAAO9D,KAAK2jC,MAEzBmF,GAAU,GAGRA,EAAgB,GACbD,EAAU,MACbtlB,OAAO2jB,aAAa2B,GACpBtlB,OAAO2jB,aAC2B,QAA/B2B,EAAU,OAAS,KAAO,IAC1BA,EAAU,OAAS,KAAY,QAIxCjF,EAAAliC,UAAAunC,OAAA,aAEFrF,EA59BA,CAA+BngB,EAAAze,mBAAlBtF,EAAAkkC,YA+9Bb,IAAA4C,EAAA,WAOA,OAPA,gBAAa9mC,EAAA8mC,QAUb,IAAID,EAA8B,sYC72ClC,IAAA2C,EAAA/oC,EAAA,GAMAgpC,EAAAhpC,EAAA,GAWST,EAAAy+B,MAVPgL,EAAAhL,MAUcz+B,EAAAwrB,MARdie,EAAAje,MAGF,IAQYxE,EARZ0iB,EAAAjpC,EAAA,IAQA,SAAYumB,GAEVA,IAAA,mBAGAA,IAAA,eACAA,IAAA,iCACAA,IAAA,yBACAA,IAAA,yBAGAA,IAAA,2BACAA,IAAA,yBACAA,IAAA,mBACAA,IAAA,eACAA,IAAA,iBACAA,IAAA,kCACAA,IAAA,kBACAA,IAAA,wBACAA,IAAA,kCACAA,IAAA,sBACAA,IAAA,cACAA,IAAA,gBACAA,IAAA,kCACAA,IAAA,oCACAA,IAAA,sBACAA,IAAA,kBACAA,IAAA,gBACAA,IAAA,gBACAA,IAAA,8BACAA,IAAA,gCACAA,IAAA,8BAGAA,IAAA,kBACAA,IAAA,kBACAA,IAAA,wBACAA,IAAA,YACAA,IAAA,kBACAA,IAAA,oBACAA,IAAA,gCACAA,IAAA,4BACAA,IAAA,cACAA,IAAA,YACAA,IAAA,oBACAA,IAAA,oBACAA,IAAA,oBACAA,IAAA,kBACAA,IAAA,cACAA,IAAA,wBACAA,IAAA,gBACAA,IAAA,kBAGAA,IAAA,wCACAA,IAAA,sCACAA,IAAA,gDACAA,IAAA,wCACAA,IAAA,8CACAA,IAAA,0CACAA,IAAA,gDACAA,IAAA,0CACAA,IAAA,gDACAA,IAAA,sCACAA,IAAA,8CAGAA,IAAA,0BACAA,IAAA,wBACAA,IAAA,gCACAA,IAAA,4BAtEF,CAAYA,EAAAhnB,EAAAgnB,WAAAhnB,EAAAgnB,cA0EZ,IAAA2iB,EAAA,oBAAAA,IAOErpC,KAAAsoB,OAAsB,KAw2BxB,OAp2BS+gB,EAAAC,WAAP,SACE1oC,EACAkxB,EACAyX,EACAtmC,GAEA,IAAIqQ,EAAO,IAAIk2B,EAKf,OAJAl2B,EAAKrQ,MAAQA,EACbqQ,EAAK1S,KAAOA,EAAMA,EAAK0nB,OAAShV,EAChCA,EAAKwe,cAAgBA,EAAmBA,GAAe2X,GAAU3X,EAAexe,GAChFA,EAAKi2B,WAAaA,EACXj2B,GAGF+1B,EAAAK,kBAAP,SACEzmC,GAEA,OAAOomC,EAAKC,WACVD,EAAKM,2BAA2B,GAAI1mC,GACpC,MACA,EACAA,IAIGomC,EAAAO,oBAAP,SACEhpC,EACA4oB,EACAvmB,GAEA,IAAI4mC,EAAO,IAAIC,EAIf,OAHAD,EAAK5mC,MAAQA,EACb4mC,EAAKjpC,KAAOA,EAAMA,EAAK0nB,OAASuhB,EAChCA,EAAKrgB,YAAcA,EAAiBA,IAAaA,EAAYlB,OAASuhB,GAC/DA,GAGFR,EAAAU,gBAAP,SACEnpC,EACA0S,EACA6E,EACAsO,EACAxjB,GAEA,IAAI4mC,EAAO,IAAIG,EAMf,OALAH,EAAK5mC,MAAQA,EACb4mC,EAAKjpC,KAAOA,EAAMA,EAAK0nB,OAASuhB,EAChCA,EAAKv2B,KAAOA,EAAUA,IAAMA,EAAKgV,OAASuhB,GAC1CA,EAAK1xB,YAAcA,EAAiBA,IAAaA,EAAYmQ,OAASuhB,GACtEA,EAAK5Y,cAAgBxK,EACdojB,GAGFR,EAAAY,gBAAP,SACEC,EACA1yB,EACA+Y,EACAgZ,EACAtmC,GAEA,IAAIknC,EAAM,IAAIC,EAMd,OALAD,EAAIlnC,MAAQA,EACZknC,EAAIxZ,eAAiBuZ,EAAYT,GAAUS,EAAYC,GACvDA,EAAI3yB,WAAaA,EAAYA,EAAW8Q,OAAS6hB,EACjDA,EAAI5Z,iBAAmBA,EAAsBA,IAAkBA,EAAiBjI,OAAS6hB,GACzFA,EAAIZ,WAAaA,EACVY,GAKFd,EAAAgB,gBAAP,SACEp0B,EACAq0B,EACArnC,GAEA,IAAIsnC,EAAO,IAAIC,EAIf,GAHAD,EAAKtnC,MAAQA,EACbsnC,EAAK3pC,KAAOqV,EAAYA,EAAWqS,OAASiiB,EAC5CA,EAAKld,UAAYid,EAAUA,GAAMb,GAAUa,EAAMC,GAC7Ct0B,EAAWwQ,MAAQC,EAASkO,WAC9B,OAA+B3e,EAAY/R,MACzC,IAAK,SACHqmC,EAAKrd,cAAa,EAClB,MAEF,IAAK,WACHqd,EAAKrd,cAAa,EAClB,MAEF,IAAK,YACHqd,EAAKrd,cAAa,EAClB,MAEF,IAAK,SACHqd,EAAKrd,cAAa,EAClB,MAEF,QACEqd,EAAKrd,cAAa,OAKtBqd,EAAKrd,cAAa,EAEpB,OAAOqd,GAGFlB,EAAAoB,eAAP,SAAsBhkB,EAAoBxjB,GACxC,IAAI4mC,EAAO,IAAIa,EAGf,OAFAb,EAAK5mC,MAAQA,EACb4mC,EAAKpU,aAAehP,EACbojB,GAKFR,EAAAM,2BAAP,SACE/oC,EACAqC,GAEA,IAAI0P,EAAO,IAAIg4B,EAGf,OAFAh4B,EAAK1P,MAAQA,EACb0P,EAAKzO,KAAOtD,EACL+R,GAGF02B,EAAAuB,gCAAP,SACE3nC,GAEA,IAAI0P,EAAO,IAAIg4B,EAGf,OAFAh4B,EAAK1P,MAAQA,EACb0P,EAAKzO,KAAO,GACLyO,GAGF02B,EAAAwB,6BAAP,SACE/lB,EACA7hB,GAEA,IAAI0P,EAAO,IAAIm4B,EAGf,OAFAn4B,EAAK1P,MAAQA,EACb0P,EAAKo4B,mBAAqBjmB,EAumD9B,SAA4BkmB,EAAwB1iB,GAClD,IAAK,IAAIjoB,EAAI,EAAGua,EAAIowB,EAAM5mC,OAAQ/D,EAAIua,IAAKva,EAAG,CAC5C,IAAI+vB,EAAO4a,EAAM3qC,GACb+vB,IAAMA,EAAK9H,OAASA,IA1mDY2iB,CAAmBnmB,EAAUnS,GAC1DA,GAGF02B,EAAA6B,0BAAP,SACEC,EACAl1B,EACAoe,EACApxB,GAEA,IAAI0P,EAAO,IAAIy4B,EAKf,OAJAz4B,EAAK1P,MAAQA,EACb0P,EAAKw4B,cAAgBA,EACrBx4B,EAAKsD,WAAaA,EAAYA,EAAWqS,OAAS3V,EAClDA,EAAK0hB,OAASA,EAAQA,EAAO/L,OAAS3V,EAC/BA,GAGF02B,EAAAgC,uBAAP,SACEC,EACAx4B,EACAC,EACA9P,GAEA,IAAI0P,EAAO,IAAI44B,EAKf,OAJA54B,EAAK1P,MAAQA,EACb0P,EAAK24B,SAAWA,EAChB34B,EAAKG,KAAOA,EAAMA,EAAKwV,OAAS3V,EAChCA,EAAKI,MAAQA,EAAOA,EAAMuV,OAAS3V,EAC5BA,GAGF02B,EAAAmC,qBAAP,SACEv1B,EACAw1B,EACAnB,EACArnC,GAEA,IAAI0P,EAAO,IAAI+4B,EAKf,OAJA/4B,EAAK1P,MAAQA,EACb0P,EAAKsD,WAAaA,EAAYA,EAAWqS,OAAS3V,EAClDA,EAAKmf,cAAgB2Z,EAAcA,GAAUhC,GAAUgC,EAAU94B,GACjEA,EAAK0a,UAAYid,EAAMb,GAAUa,EAAM33B,GAChCA,GAGF02B,EAAAsC,sBAAP,SACEC,EACA3oC,GAEA,IAAI0P,EAAO,IAAIk5B,EAGf,OAFAl5B,EAAK1P,MAAQA,EACb0P,EAAKi5B,YAAcA,EAAanC,GAAUmC,EAAaj5B,GAChDA,GAGF02B,EAAAyC,4BAAP,SACE7oC,GAEA,IAAI0P,EAAO,IAAIo5B,EAEf,OADAp5B,EAAK1P,MAAQA,EACN0P,GAGF02B,EAAA2C,8BAAP,SACE/1B,EACA6R,EACA7kB,GAEA,IAAI0P,EAAO,IAAIs5B,EAIf,OAHAt5B,EAAK1P,MAAQA,EACb0P,EAAKsD,WAAaA,EAAYA,EAAWqS,OAAS3V,EAClDA,EAAKu5B,kBAAoBpkB,EAASA,EAAQQ,OAAS3V,EAC5CA,GAGF02B,EAAA8C,sBAAP,SACElpC,GAEA,IAAI0P,EAAO,IAAIy5B,EAEf,OADAz5B,EAAK1P,MAAQA,EACN0P,GAGF02B,EAAAgD,6BAAP,SACEhrC,EACA4B,GAEA,IAAI0P,EAAO,IAAI25B,EAGf,OAFA35B,EAAK1P,MAAQA,EACb0P,EAAKtR,MAAQA,EACNsR,GAGF02B,EAAAkD,yBAAP,SACElkB,EACAmkB,QAAA,IAAAA,OAAA,GAEA,IAAI75B,EAAO65B,EACP,IAAIC,EACJ,IAAIC,EAGR,OAFA/5B,EAAK1P,MAAQolB,EAAYplB,MACzB0P,EAAK0V,YAAcA,EACZ1V,GAGF02B,EAAAsD,+BAAP,SACEtrC,EACA4B,GAEA,IAAI0P,EAAO,IAAIi6B,EAGf,OAFAj6B,EAAK1P,MAAQA,EACb0P,EAAKtR,MAAQA,EACNsR,GAGF02B,EAAAwD,oBAAP,SACE52B,EACAw1B,EACAnB,EACArnC,GAEA,IAAI0P,EAAO,IAAIm6B,EAKf,OAJAn6B,EAAK1P,MAAQA,EACb0P,EAAKsD,WAAaA,EAAYA,EAAWqS,OAAS3V,EAClDA,EAAKmf,cAAgB2Z,EAAcA,GAAUhC,GAAUgC,EAAU94B,GACjEA,EAAK0a,UAAYid,EAAMb,GAAUa,EAAM33B,GAChCA,GAGF02B,EAAA0D,qBAAP,SACE9pC,GAEA,IAAI0P,EAAO,IAAIq6B,EAEf,OADAr6B,EAAK1P,MAAQA,EACN0P,GAGF02B,EAAA4D,8BAAP,SACEh3B,EACAhT,GAEA,IAAI0P,EAAO,IAAIu6B,EAGf,OAFAv6B,EAAK1P,MAAQA,EACb0P,EAAKsD,WAAaA,EAAYA,EAAWqS,OAAS3V,EAC3CA,GAGF02B,EAAA8D,+BAAP,SACEl3B,EACAxU,EACAwB,GAEA,IAAI0P,EAAO,IAAIy6B,EAIf,OAHAz6B,EAAK1P,MAAQA,EACb0P,EAAKsD,WAAaA,EAAYA,EAAWqS,OAAS3V,EAClDA,EAAKlR,SAAWA,EAAUA,EAAS6mB,OAAS3V,EACrCA,GAGF02B,EAAAgE,8BAAP,SACEC,EACAjY,EACApyB,GAEA,IAAI0P,EAAO,IAAI46B,EAIf,OAHA56B,EAAK1P,MAAQA,EACb0P,EAAK26B,QAAUA,EACf36B,EAAK66B,aAAenY,EACb1iB,GAGF02B,EAAAoE,wBAAP,SACE33B,EACA43B,EACAC,EACA1qC,GAEA,IAAI0P,EAAO,IAAIi7B,EAKf,OAJAj7B,EAAK1P,MAAQA,EACb0P,EAAKmD,UAAYA,EAAWA,EAAUwS,OAAS3V,EAC/CA,EAAK+6B,OAASA,EAAQA,EAAOplB,OAAS3V,EACtCA,EAAKg7B,OAASA,EAAQA,EAAOrlB,OAAS3V,EAC/BA,GAGF02B,EAAAwE,8BAAP,SACExsC,EACA4B,GAEA,IAAI0P,EAAO,IAAIm7B,EAGf,OAFAn7B,EAAK1P,MAAQA,EACb0P,EAAKtR,MAAQA,EACNsR,GAGF02B,EAAA0E,sBAAP,SACE9qC,GAEA,IAAI0P,EAAO,IAAIq7B,EAEf,OADAr7B,EAAK1P,MAAQA,EACN0P,GAGF02B,EAAA4E,qBAAP,SACEhrC,GAEA,IAAI0P,EAAO,IAAIu7B,EAEf,OADAv7B,EAAK1P,MAAQA,EACN0P,GAGF02B,EAAA8E,qBAAP,SACElrC,GAEA,IAAI0P,EAAO,IAAIy7B,EAEf,OADAz7B,EAAK1P,MAAQA,EACN0P,GAGF02B,EAAAgF,6BAAP,SACE/C,EACAgD,EACArrC,GAEA,IAAI0P,EAAO,IAAI47B,EAIf,OAHA57B,EAAK1P,MAAQA,EACb0P,EAAK24B,SAAWA,EAChB34B,EAAK27B,QAAUA,EAASA,EAAQhmB,OAAS3V,EAClCA,GAGF02B,EAAAmF,4BAAP,SACElD,EACAgD,EACArrC,GAEA,IAAI0P,EAAO,IAAI87B,EAIf,OAHA97B,EAAK1P,MAAQA,EACb0P,EAAK24B,SAAWA,EAChB34B,EAAK27B,QAAUA,EAASA,EAAQhmB,OAAS3V,EAClCA,GAKF02B,EAAAqF,qBAAP,SACEpoB,EACArjB,GAEA,IAAIsnC,EAAO,IAAIoE,EAGf,OAFApE,EAAKtnC,MAAQA,EACbsnC,EAAKjkB,WAAaA,EAAYmjB,GAAUnjB,EAAYikB,GAC7CA,GAGFlB,EAAAuF,qBAAP,SACEn5B,EACAxS,GAEA,IAAIsnC,EAAO,IAAIsE,EAGf,OAFAtE,EAAKtnC,MAAQA,EACbsnC,EAAK90B,MAAQA,EAAWA,IAAOA,EAAM6S,OAASiiB,GACvCA,GAGFlB,EAAAyF,uBAAP,SACE5f,EACAe,EACAzG,EACAwB,EACAG,EACAW,EACA5B,EACAjnB,GAEA,IAAIsnC,EAAO,IAAIwE,EASf,OARAxE,EAAKtnC,MAAQA,EACbsnC,EAAK3pC,KAAOsuB,EAAYA,EAAW5G,OAASiiB,EAC5CA,EAAKta,eAAiBA,EAAgBwZ,GAAUxZ,EAAgBsa,GAChEA,EAAK/gB,YAAcA,EAAiBA,IAAaA,EAAYlB,OAASiiB,GACtEA,EAAKvf,gBAAkBA,EAAiBye,GAAUze,EAAiBuf,GACnEA,EAAKpf,QAAUA,EAASse,GAAUte,EAASof,GAC3CA,EAAKze,UAAYA,EAAeA,GAAW2d,GAAU3d,EAAWye,GAChEA,EAAKrgB,WAAaA,EAAgBA,GAAYuf,GAAUvf,EAAYqgB,GAC7DA,GAGFlB,EAAA2F,wBAAP,SACEv5B,EACAxS,GAEA,IAAIsnC,EAAO,IAAI0E,GAGf,OAFA1E,EAAKtnC,MAAQA,EACbsnC,EAAK90B,MAAQA,EAAWA,IAAOA,EAAM6S,OAASiiB,GACvCA,GAGFlB,EAAA6F,kBAAP,SACE1oB,EACA1Q,EACA7S,GAEA,IAAIsnC,EAAO,IAAI4E,GAIf,OAHA5E,EAAKtnC,MAAQA,EACbsnC,EAAK/jB,UAAYA,EAAWA,EAAU8B,OAASiiB,EAC/CA,EAAKz0B,UAAYA,EAAWA,EAAUwS,OAASiiB,EACxCA,GAGFlB,EAAA+F,qBAAP,SACEnsC,GAEA,IAAIsnC,EAAO,IAAI8E,GAEf,OADA9E,EAAKtnC,MAAQA,EACNsnC,GAGFlB,EAAAiG,sBAAP,SACE1uC,EACAuqB,EACAW,EACA5B,EACAjnB,GAEA,IAAIsnC,EAAO,IAAIgF,GAMf,OALAhF,EAAKtnC,MAAQA,EACbsnC,EAAK3pC,KAAOA,EAAMA,EAAK0nB,OAASiiB,EAChCA,EAAK1b,OAAS1D,EAASse,GAAUte,EAASof,GAC1CA,EAAKze,UAAYA,EAAeA,GAAW2d,GAAU3d,EAAWye,GAChEA,EAAKrgB,WAAaA,EAAgBA,GAAYuf,GAAUvf,EAAYqgB,GAC7DA,GAGFlB,EAAAmG,2BAAP,SACE5uC,EACAS,EACA4B,GAEA,IAAIsnC,EAAO,IAAIkF,GAIf,OAHAlF,EAAKtnC,MAAQA,EACbsnC,EAAK3pC,KAAOA,EAAMA,EAAK0nB,OAASiiB,EAChCA,EAAKlpC,MAAQA,EAAWA,IAAOA,EAAMinB,OAASiiB,GACvCA,GAGFlB,EAAAqG,sBAAP,SACEvkB,EACA5C,EACAuD,EACA7oB,GAEA,IAAIsnC,EAAO,IAAIoF,GAIf,GAHApF,EAAKtnC,MAAQA,EACbsnC,EAAKpf,QAAUA,EAASse,GAAUte,EAASof,GAC3CA,EAAKhiB,KAAOA,EACRA,EAAM,CACR,IAAI1kB,EAAiBulC,EAAAwG,UAAcrnB,EAAKlnB,OACpCknB,EAAKlnB,MAAMwuC,WAAW,KACxBtF,EAAK1mC,eAAiBulC,EAAAhd,QACpBvoB,EACAZ,EAAMW,OAAOC,gBAGf0mC,EAAK1mC,eAAiBA,EAExB0mC,EAAKtb,aAAe6gB,GAAmBvF,EAAK1mC,qBAE5C0mC,EAAK1mC,eAAiB,KACtB0mC,EAAKtb,aAAe,KAGtB,OADAsb,EAAKze,UAAYA,EAAeA,GAAW2d,GAAU3d,EAAWye,GACzDA,GAGFlB,EAAA0G,4BAAP,SACEnvC,EACAgY,EACA3V,GAEA,IAAIsnC,EAAO,IAAIyF,GAIf,OAHAzF,EAAKtnC,MAAQA,EACbsnC,EAAK3pC,KAAOA,EAAMA,EAAK0nB,OAASiiB,EAChCA,EAAK3xB,aAAeA,EAAcA,EAAa0P,OAASiiB,EACjDA,GAGFlB,EAAA4G,mBAAP,SACErvC,EACAgY,EACA3V,GAEA,IAAI4mC,EAAO,IAAIqG,GASf,OARArG,EAAK5mC,MAAQA,EACb4mC,EAAKjpC,KAAOA,EAAMA,EAAK0nB,OAASuhB,EAC3BjxB,EAGHA,EAAa0P,OAASuhB,EAFtBjxB,EAAehY,EAIjBipC,EAAKjxB,aAAeA,EACbixB,GAGFR,EAAA8G,0BAAP,SACEl6B,GAEA,IAAIs0B,EAAO,IAAI6F,GAGf,OAFA7F,EAAKtnC,MAAQgT,EAAWhT,MACxBsnC,EAAKt0B,WAAaA,EAAYA,EAAWqS,OAASiiB,EAC3CA,GAGFlB,EAAAgH,kBAAP,SACEv6B,EACAS,EACAC,EACAvT,GAEA,IAAIsnC,EAAO,IAAI+F,GAKf,OAJA/F,EAAKtnC,MAAQA,EACbsnC,EAAKz0B,UAAYA,EAAWA,EAAUwS,OAASiiB,EAC/CA,EAAKh0B,OAASA,EAAQA,EAAO+R,OAASiiB,EACtCA,EAAK/zB,QAAUA,EAAaA,IAASA,EAAQ8R,OAASiiB,GAC/CA,GAGFlB,EAAAkH,sBAAP,SACEC,EACAjoB,EACAtlB,GAEA,IAAIsnC,EAAO,IAAIkG,GACflG,EAAKtnC,MAAQA,EACbsnC,EAAKhb,aAAeihB,EAAWA,GAAO/G,GAAU+G,EAAOjG,GACvDA,EAAK9a,cAAgB,KACrB8a,EAAKhiB,KAAOA,EACZ,IAAI1kB,EAAiBulC,EAAAwG,UAAcrnB,EAAKlnB,OAUxC,OATIknB,EAAKlnB,MAAMwuC,WAAW,KACxBtF,EAAK1mC,eAAiBulC,EAAAhd,QACpBvoB,EACAZ,EAAMW,OAAOC,gBAGf0mC,EAAK1mC,eAAiBA,EAExB0mC,EAAKtb,aAAe6gB,GAAmBvF,EAAK1mC,gBACrC0mC,GAGFlB,EAAAqH,kCAAP,SACExhB,EACA3G,EACAtlB,GAEA,IAAIsnC,EAAO,IAAIkG,GAUf,OATAlG,EAAKtnC,MAAQA,EACbsnC,EAAKhb,aAAe,KACpBgb,EAAK9a,cAAgBP,EACrBqb,EAAKhiB,KAAOA,EACZgiB,EAAK1mC,eAAiBulC,EAAAhd,QACpBgd,EAAAwG,UAAcrnB,EAAKlnB,OACnB4B,EAAMW,OAAOC,gBAEf0mC,EAAKtb,aAAe6gB,GAAmBvF,EAAK1mC,gBACrC0mC,GAGFlB,EAAAsH,wBAAP,SACE/3B,EACAhY,EACAqC,GAEA,IAAI4mC,EAAO,IAAI+G,GASf,OARA/G,EAAK5mC,MAAQA,EACb4mC,EAAKjxB,aAAeA,EAAcA,EAAa0P,OAASuhB,EACnDjpC,EAGHA,EAAK0nB,OAASuhB,EAFdjpC,EAAOgY,EAITixB,EAAKjpC,KAAOA,EACLipC,GAGFR,EAAAwH,2BAAP,SACEjwC,EACA4oB,EACA2B,EACAW,EACA7oB,GAEA,IAAIsnC,EAAO,IAAIuG,GAMf,OALAvG,EAAKtnC,MAAQA,EACbsnC,EAAK3pC,KAAOA,EAAMA,EAAK0nB,OAASiiB,EAChCA,EAAK/gB,YAAcA,EAAiBA,IAAaA,EAAYlB,OAASiiB,GACtEA,EAAKpf,QAAUA,EAASse,GAAUte,EAASof,GAC3CA,EAAKze,UAAYA,EAAeA,GAAW2d,GAAU3d,EAAWye,GACzDA,GAGFlB,EAAA0H,uBAAP,SACEnwC,EACA0S,EACA6E,EACA2T,EACA5B,EACAjnB,GAEA,IAAIsnC,EAAO,IAAIyG,GAOf,OANAzG,EAAKtnC,MAAQA,EACbsnC,EAAK3pC,KAAOA,EAAMA,EAAK0nB,OAASiiB,EAChCA,EAAKj3B,KAAOA,EAAUA,IAAMA,EAAKgV,OAASiiB,GAC1CA,EAAKpyB,YAAcA,EAAiBA,IAAaA,EAAYmQ,OAASiiB,GACtEA,EAAKze,UAAYA,EAAeA,GAAW2d,GAAU3d,EAAWye,GAChEA,EAAKrgB,WAAaA,EAAgBA,GAAYuf,GAAUvf,EAAYqgB,GAC7DA,GAGFlB,EAAA4H,mBAAP,SACE94B,EACArC,EACAo7B,EACA1qB,EACAvjB,GAEA,IAAIsnC,EAAO,IAAI4G,GAMf,OALA5G,EAAKtnC,MAAQA,EACbsnC,EAAKpyB,YAAcA,EAAiBA,IAAaA,EAAYmQ,OAASiiB,GACtEA,EAAKz0B,UAAYA,EAAeA,IAAWA,EAAUwS,OAASiiB,GAC9DA,EAAK2G,YAAcA,EAAiBA,IAAaA,EAAY5oB,OAASiiB,GACtEA,EAAK/jB,UAAYA,EAAWA,EAAU8B,OAASiiB,EACxCA,GAGFlB,EAAA+H,0BAAP,SACExwC,EACAqvB,EACAsB,EACAnb,EACA0V,EACA5B,EACAjnB,GAEA,IAAIsnC,EAAO,IAAI8G,GAQf,OAPA9G,EAAKtnC,MAAQA,EACbsnC,EAAK3pC,KAAOA,EAAMA,EAAK0nB,OAASiiB,EAChCA,EAAKta,eAAiBA,EAAoBA,GAAgBwZ,GAAUxZ,EAAgBsa,GACpFA,EAAKhZ,UAAYA,EAAWA,EAAUjJ,OAASiiB,EAC/CA,EAAKn0B,KAAOA,EAAUA,IAAMA,EAAKkS,OAASiiB,GAC1CA,EAAKze,UAAYA,EAAeA,GAAW2d,GAAU3d,EAAWye,GAChEA,EAAKrgB,WAAaA,EAAgBA,GAAYuf,GAAUvf,EAAYqgB,GAC7DA,GAGFlB,EAAAiI,wBAAP,SACE1wC,EACAqvB,EACAsB,EACAnb,EACA0V,EACA5B,EACAjnB,GAEA,IAAIsnC,EAAO,IAAIgH,GAQf,OAPAhH,EAAKtnC,MAAQA,EACbsnC,EAAK3pC,KAAOA,EAAMA,EAAK0nB,OAASiiB,EAChCA,EAAKta,eAAiBA,EAAoBA,GAAgBwZ,GAAUxZ,EAAgBsa,GACpFA,EAAKhZ,UAAYA,EAAWA,EAAUjJ,OAASiiB,EAC/CA,EAAKn0B,KAAOA,EAAUA,IAAMA,EAAKkS,OAASiiB,GAC1CA,EAAKze,UAAYA,EAAeA,GAAW2d,GAAU3d,EAAWye,GAChEA,EAAKrgB,WAAaA,EAAgBA,GAAYuf,GAAUvf,EAAYqgB,GAC7DA,GAGFlB,EAAAmI,2BAAP,SACE5wC,EACAuqB,EACAW,EACA5B,EACAjnB,GAEA,IAAIsnC,EAAO,IAAIkH,GAMf,OALAlH,EAAKtnC,MAAQA,EACbsnC,EAAK3pC,KAAOA,EAAMA,EAAK0nB,OAASiiB,EAChCA,EAAKpf,QAAUA,EAASse,GAAUte,EAASof,GAC3CA,EAAKze,UAAYA,EAAeA,GAAW2d,GAAU3d,EAAWye,GAChEA,EAAKrgB,WAAaA,EAAgBA,GAAYuf,GAAUvf,EAAYqgB,GAC7DA,GAGFlB,EAAAqI,sBAAP,SACErwC,EACA4B,GAEA,IAAIsnC,EAAO,IAAIoH,GAGf,OAFApH,EAAKtnC,MAAQA,EACbsnC,EAAKlpC,MAAQA,EAAWA,IAAOA,EAAMinB,OAASiiB,GACvCA,GAGFlB,EAAAuI,sBAAP,SACE97B,EACA+7B,EACA5uC,GAEA,IAAIsnC,EAAO,IAAIuH,GAIf,OAHAvH,EAAKtnC,MAAQA,EACbsnC,EAAKz0B,UAAYA,EAAWA,EAAUwS,OAASiiB,EAC/CA,EAAKsH,MAAQA,EAAOpI,GAAUoI,EAAOtH,GAC9BA,GAGFlB,EAAA0I,iBAAP,SACEt8B,EACA6Q,EACArjB,GAEA,IAAI4mC,EAAO,IAAImI,GAIf,OAHAnI,EAAK5mC,MAAQA,EACb4mC,EAAKp0B,MAAQA,EAAWA,IAAOA,EAAM6S,OAASuhB,GAC9CA,EAAKvjB,WAAaA,EAAYmjB,GAAUnjB,EAAYujB,GAC7CA,GAGFR,EAAA4I,qBAAP,SACE5wC,EACA4B,GAEA,IAAIsnC,EAAO,IAAI2H,GAGf,OAFA3H,EAAKtnC,MAAQA,EACbsnC,EAAKlpC,MAAQA,EAAOA,EAAMinB,OAASiiB,EAC5BA,GAGFlB,EAAA8I,mBAAP,SACE7rB,EACA8rB,EACAC,EACAC,EACArvC,GAEA,IAAIsnC,EAAO,IAAIgI,GASf,OARAhI,EAAKtnC,MAAQA,EACbsnC,EAAKjkB,WAAaA,EAAYmjB,GAAUnjB,EAAYikB,GACpDA,EAAK6H,cAAgBA,EACjBA,IAAeA,EAAc9pB,OAASiiB,GAC1CA,EAAK8H,gBAAkBA,EACnBA,GAAiB5I,GAAU4I,EAAiB9H,GAChDA,EAAK+H,kBAAoBA,EACrBA,GAAmB7I,GAAU6I,EAAmB/H,GAC7CA,GAGFlB,EAAAmJ,sBAAP,SACE5xC,EACAqvB,EACAD,EACAlE,EACA5B,EACAjnB,GAEA,IAAIsnC,EAAO,IAAIkI,GAOf,OANAlI,EAAKtnC,MAAQA,EACbsnC,EAAK3pC,KAAOA,EAAMA,EAAK0nB,OAASiiB,EAChCA,EAAKta,eAAiBA,EAAoBA,GAAgBwZ,GAAUxZ,EAAgBsa,GACpFA,EAAKj3B,KAAO0c,EAAOA,EAAM1H,OAASiiB,EAClCA,EAAKze,UAAYA,EAAeA,GAAW2d,GAAU3d,EAAWye,GAChEA,EAAKrgB,WAAaA,EAAgBA,GAAYuf,GAAUvf,EAAYqgB,GAC7DA,GAGFlB,EAAAqJ,wBAAP,SACEnjB,EACAzD,EACA5B,EACAjnB,GAEA,IAAIsnC,EAAO,IAAIoI,GAKf,OAJApI,EAAKtnC,MAAQA,EACbsnC,EAAKhb,aAAeA,EAAcka,GAAUla,EAAcgb,GAC1DA,EAAKze,UAAYA,EAAeA,GAAW2d,GAAU3d,EAAWye,GAChEA,EAAKrgB,WAAaA,EAAgBA,GAAYuf,GAAUvf,EAAYqgB,GAC7DA,GAGFlB,EAAAuJ,0BAAP,SACEhyC,EACA0S,EACA6E,EACA2T,EACA5B,EACAjnB,GAEA,IAAI4mC,EAAO,IAAIgJ,GAOf,OANAhJ,EAAK5mC,MAAQA,EACb4mC,EAAKjpC,KAAOA,EAAMA,EAAK0nB,OAASuhB,EAChCA,EAAKv2B,KAAOA,EAAUA,IAAMA,EAAKgV,OAASuhB,GAC1CA,EAAK1xB,YAAcA,EAAiBA,IAAaA,EAAYmQ,OAASuhB,GACtEA,EAAK/d,UAAYA,EACjB+d,EAAK3f,WAAaA,EACX2f,GAGFR,EAAAyJ,oBAAP,SACE78B,EACAhT,GAEA,IAAIsnC,EAAO,IAAIwI,GAGf,OAFAxI,EAAKtnC,MAAQA,EACbsnC,EAAKt0B,WAAaA,EACXs0B,GAGFlB,EAAA2J,qBAAP,SACEl9B,EACA0Q,EACAvjB,GAEA,IAAIsnC,EAAO,IAAI0I,GAIf,OAHA1I,EAAKtnC,MAAQA,EACbsnC,EAAKz0B,UAAYA,EAAWA,EAAUwS,OAASiiB,EAC/CA,EAAK/jB,UAAYA,EAAWA,EAAU8B,OAASiiB,EACxCA,GAEXlB,EA/2BA,GAAsB3pC,EAAA2pC,OAm3BtB,IAAA6J,EAAA,SAAAvuB,GAAA,SAAAuuB,mDAKA,OAL6ChuB,EAAAguB,EAAAvuB,GAK7CuuB,EALA,CAA6C7J,GAAvB3pC,EAAAwzC,iBAQtB,IAAA1J,EAAA,SAAA7kB,GAAA,SAAA6kB,IAAA,IAAA5kB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS2Z,OAMlB,OAP8Bnb,EAAAskB,EAAA7kB,GAO9B6kB,EAPA,CAA8B0J,GAAjBxzC,EAAA8pC,WAUb,IAAAM,EAAA,SAAAnlB,GAAA,SAAAmlB,IAAA,IAAAllB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASysB,gBAMlB,OAPuCjuB,EAAA4kB,EAAAnlB,GAOvCmlB,EAPA,CAAuCT,GAA1B3pC,EAAAoqC,oBAUb,SAAY5Y,GAEVA,IAAA,qBAEAA,IAAA,uBAEAA,IAAA,eANF,CAAYxxB,EAAAwxB,gBAAAxxB,EAAAwxB,mBAUZ,IAAA8Y,EAAA,SAAArlB,GAAA,SAAAqlB,IAAA,IAAAplB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS0sB,YAUlB,OAXmCluB,EAAA8kB,EAAArlB,GAWnCqlB,EAXA,CAAmCX,GAAtB3pC,EAAAsqC,gBAcb,IAAAI,EAAA,SAAAzlB,GAAA,SAAAylB,IAAA,IAAAxlB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS+K,YAQlB,OATmCvM,EAAAklB,EAAAzlB,GASnCylB,EATA,CAAmC8I,GAAtBxzC,EAAA0qC,gBAcb,SAAkBiJ,GAChBA,IAAA,mBACAA,IAAA,mBACAA,IAAA,uBACAA,IAAA,yBACAA,IAAA,mBALF,CAAkB3zC,EAAA2zC,gBAAA3zC,EAAA2zC,mBASlB,IAYYznB,EAZZ4e,EAAA,SAAA7lB,GAAA,SAAA6lB,IAAA,IAAA5lB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS4sB,YAQlB,OATmCpuB,EAAAslB,EAAA7lB,GASnC6lB,EATA,CAAmCnB,GAAtB3pC,EAAA8qC,gBAYb,SAAY5e,GACVA,IAAA,iBACAA,IAAA,iBACAA,IAAA,aACAA,IAAA,qBACAA,IAAA,mBACAA,IAAA,mBACAA,IAAA,mBACAA,IAAA,uBACAA,IAAA,mBACAA,IAAA,qBACAA,IAAA,0BACAA,IAAA,wBACAA,IAAA,cACAA,IAAA,cAdF,CAAYA,EAAAlsB,EAAAksB,eAAAlsB,EAAAksB,kBAkBZ,IAAA8e,EAAA,SAAA/lB,GAAA,SAAA+lB,IAAA,IAAA9lB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS6sB,WAIlB,OALkCruB,EAAAwlB,EAAA/lB,GAKlC+lB,EALA,CAAkCrB,GAArB3pC,EAAAgrC,eAUb,IAAA8I,EAAA,SAAA7uB,GAAA,SAAA6uB,mDAAgD,OAAPtuB,EAAAsuB,EAAA7uB,GAAO6uB,EAAhD,CAAyCnK,GAAnB3pC,EAAA8zC,aAGtB,IAAA7I,EAAA,SAAAhmB,GAAA,SAAAgmB,IAAA,IAAA/lB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASkO,aAIlB,OAL0C1P,EAAAylB,EAAAhmB,GAK1CgmB,EALA,CAA0C6I,GAA7B9zC,EAAAirC,uBAQb,SAAkB8I,GAChBA,IAAA,iBACAA,IAAA,qBACAA,IAAA,mBACAA,IAAA,mBACAA,IAAA,iBACAA,IAAA,mBANF,CAAkB/zC,EAAA+zC,cAAA/zC,EAAA+zC,iBAUlB,IAAAC,EAAA,SAAA/uB,GAAA,SAAA+uB,IAAA,IAAA9uB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS6G,UAIlB,OALgDrI,EAAAwuB,EAAA/uB,GAKhD+uB,EALA,CAAgDF,GAA1B9zC,EAAAg0C,oBAQtB,IAAA5I,EAAA,SAAAnmB,GAAA,SAAAmmB,IAAA,IAAAlmB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA4I,YAAW,IAIb,OAL4CtI,EAAA4lB,EAAAnmB,GAK5CmmB,EALA,CAA4C4I,GAA/Bh0C,EAAAorC,yBAQb,SAAkB6I,GAChBA,IAAA,mBACAA,IAAA,WAFF,CAAkBj0C,EAAAi0C,gBAAAj0C,EAAAi0C,mBAMlB,IAAAvI,EAAA,SAAAzmB,GAAA,SAAAymB,IAAA,IAAAxmB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS0N,YAQlB,OATyClP,EAAAkmB,EAAAzmB,GASzCymB,EATA,CAAyCoI,GAA5B9zC,EAAA0rC,sBAYb,IAAAG,EAAA,SAAA5mB,GAAA,SAAA4mB,IAAA,IAAA3mB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS4N,SAQlB,OATsCpP,EAAAqmB,EAAA5mB,GAStC4mB,EATA,CAAsCiI,GAAzB9zC,EAAA6rC,mBAYb,IAAAG,EAAA,SAAA/mB,GAAA,SAAA+mB,IAAA,IAAA9mB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASqO,OAQlB,OAToC7P,EAAAwmB,EAAA/mB,GASpC+mB,EATA,CAAoC8H,GAAvB9zC,EAAAgsC,iBAYb,IAAAG,EAAA,SAAAlnB,GAAA,SAAAknB,IAAA,IAAAjnB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASua,QAIlB,OALqC/b,EAAA2mB,EAAAlnB,GAKrCknB,EALA,CAAqC2H,GAAxB9zC,EAAAmsC,kBAQb,IAAAE,EAAA,SAAApnB,GAAA,SAAAonB,IAAA,IAAAnnB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASkG,YAChBhI,EAAA1gB,KAAO,gBACT,OAH2CghB,EAAA6mB,EAAApnB,GAG3ConB,EAHA,CAA2CpB,GAA9BjrC,EAAAqsC,wBAMb,IAAAE,EAAA,SAAAtnB,GAAA,SAAAsnB,IAAA,IAAArnB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASoO,gBAMlB,OAP6C5P,EAAA+mB,EAAAtnB,GAO7CsnB,EAPA,CAA6CuH,GAAhC9zC,EAAAusC,0BAUb,IAAAK,EAAA,SAAA3nB,GAAA,SAAA2nB,IAAA,IAAA1nB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA4I,YAAW,IAIb,OAL4CtI,EAAAonB,EAAA3nB,GAK5C2nB,EALA,CAA4CoH,GAA/Bh0C,EAAA4sC,yBAQb,IAAAI,EAAA,SAAA/nB,GAAA,SAAA+nB,IAAA,IAAA9nB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS2S,WAIlB,OALwCnU,EAAAwnB,EAAA/nB,GAKxC+nB,EALA,CAAwC8G,GAA3B9zC,EAAAgtC,qBAQb,IAAAD,EAAA,SAAA9nB,GAAA,SAAA8nB,IAAA,IAAA7nB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASktB,gBAClB,OAF6C1uB,EAAAunB,EAAA9nB,GAE7C8nB,EAFA,CAA6CC,GAAhChtC,EAAA+sC,0BAKb,IAAAG,EAAA,SAAAjoB,GAAA,SAAAioB,IAAA,IAAAhoB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA4I,YAAW,IAIb,OAL8CtI,EAAA0nB,EAAAjoB,GAK9CioB,EALA,CAA8C8G,GAAjCh0C,EAAAktC,2BAQb,IAAAE,EAAA,SAAAnoB,GAAA,SAAAmoB,IAAA,IAAAloB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASkZ,MAClB,OAFmC1a,EAAA4nB,EAAAnoB,GAEnCmoB,EAFA,CAAmCpB,GAAtBhsC,EAAAotC,gBAKb,IAAAE,EAAA,SAAAroB,GAAA,SAAAqoB,IAAA,IAAApoB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASmZ,KAChBjb,EAAA1gB,KAAO,SACT,OAHoCghB,EAAA8nB,EAAAroB,GAGpCqoB,EAHA,CAAoCrC,GAAvBjrC,EAAAstC,iBAMb,IAAAE,EAAA,SAAAvoB,GAAA,SAAAuoB,IAAA,IAAAtoB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASyN,gBAIlB,OAL6CjP,EAAAgoB,EAAAvoB,GAK7CuoB,EALA,CAA6CsG,GAAhC9zC,EAAAwtC,0BAQb,IAAAE,EAAA,SAAAzoB,GAAA,SAAAyoB,IAAA,IAAAxoB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASmO,iBAMlB,OAP8C3P,EAAAkoB,EAAAzoB,GAO9CyoB,EAPA,CAA8CoG,GAAjC9zC,EAAA0tC,2BAUb,IAAAG,EAAA,SAAA5oB,GAAA,SAAA4oB,IAAA,IAAA3oB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA4I,YAAW,IAMb,OAP6CtI,EAAAqoB,EAAA5oB,GAO7C4oB,EAPA,CAA6CmG,GAAhCh0C,EAAA6tC,0BAUb,IAAAK,EAAA,SAAAjpB,GAAA,SAAAipB,IAAA,IAAAhpB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASmtB,UAQlB,OATuC3uB,EAAA0oB,EAAAjpB,GASvCipB,EATA,CAAuC4F,GAA1B9zC,EAAAkuC,oBAYb,IAAAE,EAAA,SAAAnpB,GAAA,SAAAmpB,IAAA,IAAAlpB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA4I,YAAW,IAIb,OAL6CtI,EAAA4oB,EAAAnpB,GAK7CmpB,EALA,CAA6C4F,GAAhCh0C,EAAAouC,0BAQb,IAAAE,EAAA,SAAArpB,GAAA,SAAAqpB,IAAA,IAAAppB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASgO,MAChB9P,EAAA1gB,KAAO,UACT,OAHqCghB,EAAA8oB,EAAArpB,GAGrCqpB,EAHA,CAAqCrD,GAAxBjrC,EAAAsuC,kBAMb,IAAAE,EAAA,SAAAvpB,GAAA,SAAAupB,IAAA,IAAAtpB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS6N,KAChB3P,EAAA1gB,KAAO,SACT,OAHoCghB,EAAAgpB,EAAAvpB,GAGpCupB,EAHA,CAAoCvD,GAAvBjrC,EAAAwuC,iBAMb,IAAAE,EAAA,SAAAzpB,GAAA,SAAAypB,IAAA,IAAAxpB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASyZ,KAChBvb,EAAA1gB,KAAO,SACT,OAHoCghB,EAAAkpB,EAAAzpB,GAGpCypB,EAHA,CAAoCzD,GAAvBjrC,EAAA0uC,iBAMb,IAAAhC,EAAA,SAAAznB,GAAA,SAAAynB,IAAA,IAAAxnB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASuY,MAChBra,EAAA1gB,KAAO,UACT,OAHqCghB,EAAAknB,EAAAznB,GAGrCynB,EAHA,CAAqCzB,GAAxBjrC,EAAA0sC,kBAMb,IAAA0H,EAAA,SAAAnvB,GAAA,SAAAmvB,mDAMA,OAN8C5uB,EAAA4uB,EAAAnvB,GAM9CmvB,EANA,CAA8CN,GAAxB9zC,EAAAo0C,kBAStB,IAAAvF,EAAA,SAAA5pB,GAAA,SAAA4pB,IAAA,IAAA3pB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASqtB,eAClB,OAF4C7uB,EAAAqpB,EAAA5pB,GAE5C4pB,EAFA,CAA4CuF,GAA/Bp0C,EAAA6uC,yBAKb,IAAAE,EAAA,SAAA9pB,GAAA,SAAA8pB,IAAA,IAAA7pB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASstB,cAClB,OAF2C9uB,EAAAupB,EAAA9pB,GAE3C8pB,EAFA,CAA2CqF,GAA9Bp0C,EAAA+uC,wBAOb,IAGYwF,EAHZC,EAAA,SAAAvvB,GAAA,SAAAuvB,mDAA+C,OAAPhvB,EAAAgvB,EAAAvvB,GAAOuvB,EAA/C,CAAwC7K,GAAlB3pC,EAAAw0C,YAGtB,SAAYD,GAEVA,IAAA,qBAEAA,IAAA,iBAEAA,IAAA,qBANF,CAAYA,EAAAv0C,EAAAu0C,aAAAv0C,EAAAu0C,gBAUZ,IAAAE,EAAA,SAAAxvB,GAoBE,SAAAwvB,EAAYtwC,EAAwBK,EAAcuiB,GAAlD,IAAA7B,EACED,EAAAnkB,KAAAR,OAAOA,YApBT4kB,EAAA6B,KAAOC,EAAS8D,OAChB5F,EAAA0D,OAAS,KAaT1D,EAAAwvB,UAA8B,KAE9BxvB,EAAA0W,gBAAuB,EAKrB1W,EAAKyvB,WAAa5tB,EAClB7B,EAAK/gB,eAAiBA,EACtB+gB,EAAKqK,aAAe6gB,GAAmBlrB,EAAK/gB,gBAC5C+gB,EAAK0B,WAAa,IAAIphB,MACtB0f,EAAK3hB,MAAQ,IAAIkmC,EAAAje,MAAMtG,EAAM,EAAG1gB,EAAKE,QACrCwgB,EAAK1gB,KAAOA,IAOhB,OAlC4BghB,EAAAivB,EAAAxvB,GA+B1B5jB,OAAAC,eAAImzC,EAAAzyC,UAAA,eAAJ,WAAsB,OAAO1B,KAAKq0C,YAAcJ,EAAWK,uCAE3DvzC,OAAAC,eAAImzC,EAAAzyC,UAAA,iBAAJ,WAAwB,OAAO1B,KAAKq0C,YAAcJ,EAAWM,yCAC/DJ,EAlCA,CAA4B9K,GAAf3pC,EAAAy0C,SAqCb,IAAAK,EAAA,SAAA7vB,GAAA,SAAA6vB,IAAA,IAAA5vB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YAOE4kB,EAAAsF,WAAqC,KAE3BtF,EAAA6vB,+BAAgD,KAChD7vB,EAAA8vB,4BAA6C,OAiEzD,OA3EmDxvB,EAAAsvB,EAAA7vB,GAajD5jB,OAAAC,eAAIwzC,EAAA9yC,UAAA,gCAAJ,WAIE,OAHK1B,KAAKy0C,iCACRz0C,KAAKy0C,+BAAiCE,GAAmB30C,MAAM,IAE1DA,KAAKy0C,gEAId1zC,OAAAC,eAAIwzC,EAAA9yC,UAAA,6BAAJ,WAIE,OAHK1B,KAAK00C,8BACR10C,KAAK00C,4BAA8BC,GAAmB30C,MAAM,IAEvDA,KAAK00C,6DAId3zC,OAAAC,eAAIwzC,EAAA9yC,UAAA,kBAAJ,WACE,IAAI4mB,EAAStoB,KAAKsoB,OAClB,QAAKA,MAGDA,EAAO7B,MAAQC,EAASiB,YAAcW,EAASA,EAAOA,UAGnDA,EAAO7B,MAAQC,EAAS8D,yCAIjCzpB,OAAAC,eAAIwzC,EAAA9yC,UAAA,wBAAJ,WACE,IAAI4mB,EAAStoB,KAAKsoB,OAClB,SAAKA,GAAWA,EAAO7B,MAAQC,EAASiB,YAAcW,EAASA,EAAOA,WAGlEA,EAAO7B,MAAQC,EAASa,qBAExBoE,GAAYC,EAAa7E,OAAQ/mB,KAAK8rB,YACfxD,EAAQssB,iBAG/BtsB,EAAO7B,MAAQC,EAASC,iBAExBgF,GAAYC,EAAaU,OAAQtsB,KAAK8rB,YACnBxD,EAAQssB,iBAI7BtsB,EAAO7B,MAAQC,EAAS8D,QACxBmB,GAAYC,EAAa7E,OAAQ/mB,KAAK8rB,6CAK1C0oB,EAAA9yC,UAAAmzC,oBAAA,SAAoB3rB,GAIlB,OACEA,EAAOtoB,KAAKsD,MAAQglB,EAAOtQ,aAAa1U,MACxClE,KAAKiD,MAAMW,QAAUslB,EAAOjmB,MAAMW,SACjC5D,KAAK40C,kBAGZJ,EA3EA,CAAmDN,GAA7Bx0C,EAAA80C,uBA8EtB,IAAAM,EAAA,SAAAnwB,GAAA,SAAAmwB,mDAMA,OAN+D5vB,EAAA4vB,EAAAnwB,GAM/DmwB,EANA,CAA+DN,GAAzC90C,EAAAo1C,mCAStB,IAAAnG,EAAA,SAAAhqB,GAAA,SAAAgqB,IAAA,IAAA/pB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASquB,QAIlB,OALoC7vB,EAAAypB,EAAAhqB,GAKpCgqB,EALA,CAAoCuF,GAAvBx0C,EAAAivC,iBAQb,IAAAE,EAAA,SAAAlqB,GAAA,SAAAkqB,IAAA,IAAAjqB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS8X,QAIlB,OALoCtZ,EAAA2pB,EAAAlqB,GAKpCkqB,EALA,CAAoCqF,GAAvBx0C,EAAAmvC,iBAQb,IAAAE,EAAA,SAAApqB,GAAA,SAAAoqB,IAAA,IAAAnqB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASC,mBAelB,OAhBsCzB,EAAA6pB,EAAApqB,GAYpC5jB,OAAAC,eAAI+tC,EAAArtC,UAAA,iBAAJ,WACE,IAAIuuB,EAAiBjwB,KAAKiwB,eAC1B,OAAyB,MAAlBA,GAA0BA,EAAe7rB,OAAS,mCAE7D2qC,EAhBA,CAAsCyF,GAAzB90C,EAAAqvC,mBAmBb,IAAAE,GAAA,SAAAtqB,GAAA,SAAAsqB,IAAA,IAAArqB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASiY,WAIlB,OALuCzZ,EAAA+pB,EAAAtqB,GAKvCsqB,EALA,CAAuCiF,GAA1Bx0C,EAAAuvC,qBAQb,IAAAE,GAAA,SAAAxqB,GAAA,SAAAwqB,IAAA,IAAAvqB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASoY,KAMlB,OAPiC5Z,EAAAiqB,EAAAxqB,GAOjCwqB,EAPA,CAAiC+E,GAApBx0C,EAAAyvC,eAUb,IAAAE,GAAA,SAAA1qB,GAAA,SAAA0qB,IAAA,IAAAzqB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASsuB,QAClB,OAFoC9vB,EAAAmqB,EAAA1qB,GAEpC0qB,EAFA,CAAoC6E,GAAvBx0C,EAAA2vC,kBAKb,IAAAE,GAAA,SAAA5qB,GAAA,SAAA4qB,IAAA,IAAA3qB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASG,kBAIlB,OALqC3B,EAAAqqB,EAAA5qB,GAKrC4qB,EALA,CAAqCiF,GAAxB90C,EAAA6vC,mBAQb,IAAAE,GAAA,SAAA9qB,GAAA,SAAA8qB,IAAA,IAAA7qB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASuuB,qBAChBrwB,EAAAkH,UAAY,OAKd,OAP0C5G,EAAAuqB,EAAA9qB,GAO1C8qB,EAPA,CAA0C+E,GAA7B90C,EAAA+vC,wBAUb,IAAAO,GAAA,SAAArrB,GAAA,SAAAqrB,IAAA,IAAAprB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASwuB,eAMlB,OAP2ChwB,EAAA8qB,EAAArrB,GAO3CqrB,EAPA,CAA2C3G,GAA9B3pC,EAAAswC,yBAUb,IAAAE,GAAA,SAAAvrB,GAAA,SAAAurB,IAAA,IAAAtrB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASyuB,eAMlB,OAPkCjwB,EAAAgrB,EAAAvrB,GAOlCurB,EAPA,CAAkC7G,GAArB3pC,EAAAwwC,gBAUb,IAAAP,GAAA,SAAAhrB,GAAA,SAAAgrB,IAAA,IAAA/qB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASK,SAYlB,OAbqC7B,EAAAyqB,EAAAhrB,GAarCgrB,EAbA,CAAqCuE,GAAxBx0C,EAAAiwC,mBAgBb,IAAAS,GAAA,SAAAzrB,GAAA,SAAAyrB,IAAA,IAAAxrB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS0uB,aAIlB,OALyClwB,EAAAkrB,EAAAzrB,GAKzCyrB,EALA,CAAyC8D,GAA5Bx0C,EAAA0wC,uBAQb,IAAAY,GAAA,SAAArsB,GAAA,SAAAqsB,IAAA,IAAApsB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS6E,mBAClB,OAFsCrG,EAAA8rB,EAAArsB,GAEtCqsB,EAFA,CAAsC8D,GAAzBp1C,EAAAsxC,oBAKb,IAAAG,GAAA,SAAAxsB,GAAA,SAAAwsB,IAAA,IAAAvsB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASyY,MAalB,OAdkCja,EAAAisB,EAAAxsB,GAclCwsB,EAdA,CAAkC+C,GAArBx0C,EAAAyxC,gBAiBb,IAAAE,GAAA,SAAA1sB,GAAA,SAAA0sB,IAAA,IAAAzsB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASO,sBAalB,OAdyC/B,EAAAmsB,EAAA1sB,GAUvC5jB,OAAAC,eAAIqwC,EAAA3vC,UAAA,iBAAJ,WACE,IAAIuuB,EAAiBjwB,KAAKiwB,eAC1B,OAAyB,MAAlBA,GAA0BA,EAAe7rB,OAAS,mCAE7DitC,EAdA,CAAyCmD,GAA5B90C,EAAA2xC,uBAiBb,IAAAf,GAAA,SAAA3rB,GAAA,SAAA2rB,IAAA,IAAA1rB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS2Y,KAQlB,OATiCna,EAAAorB,EAAA3rB,GASjC2rB,EATA,CAAiC4D,GAApBx0C,EAAA4wC,eAYb,IAAAM,GAAA,SAAAjsB,GAAA,SAAAisB,IAAA,IAAAhsB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS2uB,kBAChBzwB,EAAAkH,UAAY,OAId,OANuC5G,EAAA0rB,EAAAjsB,GAMvCisB,EANA,CAAuC4D,GAA1B90C,EAAAkxC,qBASb,IAAAH,GAAA,SAAA9rB,GAAA,SAAA8rB,IAAA,IAAA7rB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASS,SAYlB,OAbqCjC,EAAAurB,EAAA9rB,GAarC8rB,EAbA,CAAqCyD,GAAxBx0C,EAAA+wC,mBAgBb,IAAAK,GAAA,SAAAnsB,GAAA,SAAAmsB,IAAA,IAAAlsB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASW,uBAClB,OAF0CnC,EAAA4rB,EAAAnsB,GAE1CmsB,EAFA,CAA0C/B,GAA7BrvC,EAAAoxC,wBAKb,IAAAS,GAAA,SAAA5sB,GAAA,SAAA4sB,IAAA,IAAA3sB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS+E,oBAClB,OAFuCvG,EAAAqsB,EAAA5sB,GAEvC4sB,EAFA,CAAuCF,IAA1B3xC,EAAA6xC,qBAKb,IAAAE,GAAA,SAAA9sB,GAAA,SAAA8sB,IAAA,IAAA7sB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASa,uBAIlB,OAL0CrC,EAAAusB,EAAA9sB,GAK1C8sB,EALA,CAA0C+C,GAA7B90C,EAAA+xC,wBAQb,IAAAE,GAAA,SAAAhtB,GAAA,SAAAgtB,IAAA,IAAA/sB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASsZ,SAIlB,OALqC9a,EAAAysB,EAAAhtB,GAKrCgtB,EALA,CAAqCuC,GAAxBx0C,EAAAiyC,mBAQb,IAAAK,GAAA,SAAArtB,GAAA,SAAAqtB,IAAA,IAAAptB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS4uB,aAMlB,OAPgCpwB,EAAA8sB,EAAArtB,GAOhCqtB,EAPA,CAAgC3I,GAAnB3pC,EAAAsyC,cAUb,IAAAF,GAAA,SAAAntB,GAAA,SAAAmtB,IAAA,IAAAltB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASuZ,SAMlB,OAPqC/a,EAAA4sB,EAAAntB,GAOrCmtB,EAPA,CAAqCoC,GAAxBx0C,EAAAoyC,mBAUb,IAAAI,GAAA,SAAAvtB,GAAA,SAAAutB,IAAA,IAAAttB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASwZ,QAIlB,OALoChb,EAAAgtB,EAAAvtB,GAKpCutB,EALA,CAAoCgC,GAAvBx0C,EAAAwyC,kBAQb,IAAAK,GAAA,SAAA5tB,GAAA,SAAA4tB,IAAA,IAAA3tB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS0Z,MAUlB,OAXkClb,EAAAqtB,EAAA5tB,GAWlC4tB,EAXA,CAAkC2B,GAArBx0C,EAAA6yC,gBAcb,IAAAE,GAAA,SAAA9tB,GAAA,SAAA8tB,IAAA,IAAA7tB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASe,kBAMlB,OAPqCvC,EAAAutB,EAAA9tB,GAOrC8tB,EAPA,CAAqC+B,GAAxB90C,EAAA+yC,mBAUb,IAAAI,GAAA,SAAAluB,GAAA,SAAAkuB,IAAA,IAAAjuB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS6uB,sBAIlB,OALyCrwB,EAAA2tB,EAAAluB,GAKzCkuB,EALA,CAAyCiC,GAA5Bp1C,EAAAmzC,uBAQb,IAAAF,GAAA,SAAAhuB,GAAA,SAAAguB,IAAA,IAAA/tB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAASiB,WAQlB,OATuCzC,EAAAytB,EAAAhuB,GASvCguB,EATA,CAAuCuB,GAA1Bx0C,EAAAizC,qBAYb,IAAAI,GAAA,SAAApuB,GAAA,SAAAouB,IAAA,IAAAnuB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS8Z,OAIlB,OALmCtb,EAAA6tB,EAAApuB,GAKnCouB,EALA,CAAmCmB,GAAtBx0C,EAAAqzC,iBAQb,IAAAE,GAAA,SAAAtuB,GAAA,SAAAsuB,IAAA,IAAAruB,EAAA,OAAAD,KAAAyR,MAAAp2B,KAAAqtB,YAAArtB,YACE4kB,EAAA6B,KAAOC,EAAS+Z,QAMlB,OAPoCvb,EAAA+tB,EAAAtuB,GAOpCsuB,EAPA,CAAoCiB,GAAvBx0C,EAAAuzC,kBAUb,IAAIuC,GAA2C,KAO/C,SAAAC,KACE,IAAIj4B,EAQJ,OAPyB,MAArBg4B,IACFh4B,EAAMg4B,GACNA,GAAoB,MAEpBh4B,KAEFA,EAAIpZ,OAAS,EACNoZ,EAaT,SAAAk4B,GAA4BjvB,EAAoBqF,GAC9C,GAAIA,EACF,IAAK,IAAIzrB,EAAI,EAAGua,EAAIkR,EAAU1nB,OAAQ/D,EAAIua,IAAKva,EAC7C,GAAIyrB,EAAUzrB,GAAGo1B,cAAgBhP,EAC/B,OAAOqF,EAAUzrB,GAIvB,OAAO,KAIT,SAAAsrB,GAA4BlF,EAAoBqF,GAC9C,OAAuC,MAAhC4pB,GAAYjvB,EAAMqF,GAI3B,SAAA6pB,GAAkC/0C,EAAcspB,GAC9C,GAAIA,EACF,IAAK,IAAI7pB,EAAI,EAAGua,EAAIsP,EAAW9lB,OAAQ/D,EAAIua,IAAKva,EAAG,CACjD,IAAI4sB,EAAY/C,EAAW7pB,GACvB4V,EAAagX,EAAUrsB,KAC3B,GAAIqV,EAAWwQ,MAAQC,EAASkO,YAAqC3e,EAAY/R,MAAQtD,EACvF,OAAOqsB,EAIb,OAAO,KAST,SAAA0nB,GAAmCtsB,EAAmCutB,QAAA,IAAAA,OAAA,GACpE,IAAIh1C,EAAOynB,EAAYznB,KAAKsD,KACxBokB,EAASD,EAAYC,OACzB,OAAKA,IAEHD,EAAY5B,MAAQC,EAAS6uB,qBAC7BjtB,EAAO7B,MAAQC,EAASiB,WAElBW,EAASA,EAAOA,SAEpBA,EAAO7B,MAAQC,EAASC,iBACnBguB,GAAqCrsB,EAAQstB,IAClDjqB,GAAYC,EAAaU,OAAQjE,EAAYyD,WACzCod,EAAAhlB,iBACAglB,EAAAjlB,oBACFrjB,EAGJ0nB,EAAO7B,MAAQC,EAASa,sBACxBe,EAAO7B,MAAQC,EAASG,gBAEjB8tB,GAAyCrsB,EAAQstB,GACjD1M,EAAAhlB,iBAAmBtjB,EAErBg1C,EACHh1C,EACAynB,EAAYplB,MAAMW,OAAOqrB,aAAeia,EAAArlB,eAAiBjjB,EAvBzCA,EA2BtB,SAAAkvC,GAAmCvnB,GAEjC,OADIA,EAAKoH,SAAS,SAAQpH,EAAOA,EAAK/jB,UAAU,EAAG+jB,EAAKnkB,OAAS,IAC1DmkB,EAMT,SAAAkhB,GAAmBuB,EAAe1iB,GAChC,IAAK,IAAIjoB,EAAI,EAAGua,EAAIowB,EAAM5mC,OAAQ/D,EAAIua,IAAKva,EACzC2qC,EAAM3qC,GAAGioB,OAASA,EAvGtB5oB,EAAAm2C,qBAAA,SAAqC/pB,GACnC0pB,GAAoB1pB,GAItBpsB,EAAA+1C,mBAeA/1C,EAAAo2C,YAAA,SAA4BC,EAAwBjqB,GAGlD,OAFiB,MAAbA,IAAmBA,EAAY2pB,MACnC3pB,EAAUrnB,KAAKsxC,GACRjqB,GAITpsB,EAAAg2C,eAYAh2C,EAAAisB,eAKAjsB,EAAAi2C,qBAcAj2C,EAAAuqB,aAAA,SAA6BrpB,EAAcspB,GACzC,OAA8C,MAAvCyrB,GAAkB/0C,EAAMspB,IAIjCxqB,EAAAi1C,sBA8BAj1C,EAAAowC,qGC30DA,IAAAlsB,EAAAzjB,EAAA,IAOA,SAAkB61C,GAGhBA,IAAA,WACAA,IAAA,aACAA,IAAA,aACAA,IAAA,aACAA,IAAA,iBAGAA,IAAA,WACAA,IAAA,aACAA,IAAA,aACAA,IAAA,aACAA,IAAA,iBACAA,IAAA,gBAGAA,IAAA,cACAA,IAAA,cAGAA,IAAA,gBAtBF,CAAkBt2C,EAAAs2C,WAAAt2C,EAAAs2C,cA0BlB,SAAkBC,GAChBA,IAAA,eAEAA,IAAA,mBAEAA,IAAA,uBAEAA,IAAA,qBAEAA,IAAA,iBAEAA,IAAA,gBAEAA,IAAA,kBAEAA,IAAA,gBAEAA,IAAA,mBAEAA,IAAA,2BAEAA,IAAA,yBArBF,CAAkBv2C,EAAAu2C,YAAAv2C,EAAAu2C,eAyBlB,IAAA5wB,EAAA,WAoBE,SAAAA,EAAYoB,EAAgB4O,EAAkB6gB,GAL9Cl2C,KAAAm2C,aAA4B,KAM1Bn2C,KAAKymB,KAAOA,EACZzmB,KAAKq1B,MAAQA,EACbr1B,KAAKk2C,KAAOA,EACZl2C,KAAK68B,SAAgBuZ,KAAeF,EAAO,GAC3Cl2C,KAAKwzB,UAAY,KACjBxzB,KAAKq2C,gBAAkBr2C,KAwU3B,OApUEqlB,EAAA3jB,UAAA40C,yBAAA,SAAyBjjB,GACvB,OAAOA,EAAW6iB,KAAOl2C,KAAKk2C,MAIhC7wB,EAAA3jB,UAAA60C,wBAAA,SAAwBljB,GACtB,OAAO,IAAQA,EAAW6iB,KAAOl2C,KAAKk2C,MAIxC7wB,EAAA3jB,UAAA4oB,GAAA,SAAG+K,GACD,OAAQr1B,KAAKq1B,MAAQA,IAAUA,GAIjCt0B,OAAAC,eAAIqkB,EAAA3jB,UAAA,eAAJ,WAAsB,OAAyB,MAAlB1B,KAAKwzB,2CAElCzyB,OAAAC,eAAIqkB,EAAA3jB,UAAA,kBAAJ,WAAyB,OAA4B,MAArB1B,KAAK2Z,8CAErC5Y,OAAAC,eAAIqkB,EAAA3jB,UAAA,mBAAJ,WAA0B,OAAyB,MAAlB1B,KAAKwzB,WAA0C,MAArBxzB,KAAK2Z,8CAGhE0L,EAAA3jB,UAAAs7B,QAAA,SAAQxJ,GACNjK,OAAgB,GAATvpB,KAAKymB,OAA2BzmB,KAAKwzB,WAC5C,IAAIhW,EAAM,IAAI6H,EAAKrlB,KAAKymB,MAAmB,IAAbzmB,KAAKq1B,MAAwB,IAAwBr1B,KAAKk2C,MAExF,OADA14B,EAAIgW,UAAYA,EACThW,GAIT6H,EAAA3jB,UAAAgwB,WAAA,SAAW/X,GACT4P,OAAgB,GAATvpB,KAAKymB,OAAyBzmB,KAAK2Z,cAC1C,IAAI6D,EAAM,IAAI6H,EAAKrlB,KAAKymB,MAAmB,IAAbzmB,KAAKq1B,MAAwB,IAAwBr1B,KAAKk2C,MAExF,OADA14B,EAAI7D,aAAeA,EACZ6D,GAIT6H,EAAA3jB,UAAA80C,WAAA,WAQE,OAPAjtB,OAAOvpB,KAAKy2C,aACPz2C,KAAKm2C,eACR5sB,QAAQvpB,KAAKsqB,GAAE,MACftqB,KAAKm2C,aAAe,IAAI9wB,EAAKrlB,KAAKymB,KAAgB,IAAVzmB,KAAKq1B,MAA4Br1B,KAAKk2C,MAC9El2C,KAAKm2C,aAAa3iB,UAAYxzB,KAAKwzB,UACnCxzB,KAAKm2C,aAAax8B,aAAe3Z,KAAK2Z,cAEjC3Z,KAAKm2C,cAId9wB,EAAA3jB,UAAAy7B,eAAA,SAAe5lB,EAAcm/B,GAC3B,IAAIC,EACAC,EACAlZ,EACAmZ,EACJ,QAL2B,IAAAH,OAAA,GAKvB12C,KAAKy2C,aACP,GAAIl/B,EAAOk/B,YACT,GAAIE,EAAe32C,KAAKwzB,WACtB,GAAIojB,EAAcr/B,EAAOic,UACvB,OAAOmjB,EAAaxZ,eAAeyZ,QAEhC,IAAIlZ,EAAkB19B,KAAK2Z,gBAC5Bk9B,EAAiBt/B,EAAOoC,cAC1B,OAAO+jB,EAAgBP,eAAe0Z,QAIvC,IAAKt/B,EAAOk/B,YACjB,GAAIz2C,KAAKsqB,GAAE,GACT,GAAI/S,EAAO+S,GAAE,IACX,IAAKosB,GAAyB12C,KAAKsqB,GAAE,IAAsB/S,EAAO+S,GAAE,GAClE,OAAOtqB,KAAKk2C,MAAQ3+B,EAAO2+B,SAExB,IAAe,IAAX3+B,EAAOkP,KAChB,OAAOzmB,KAAKk2C,MAAQ,GACf,GAAe,IAAX3+B,EAAOkP,KAChB,OAAOzmB,KAAKk2C,MAAQ,QAEjB,GAAIl2C,KAAKsqB,GAAE,IACZ/S,EAAO+S,GAAE,GACX,OAAOtqB,KAAKk2C,MAAQ3+B,EAAO2+B,KAIjC,OAAO,GAIF7wB,EAAAyxB,iBAAP,SAAwBhkC,EAAYC,EAAa2jC,GAC/C,OAAI3jC,EAAMoqB,eAAerqB,EAAM4jC,GACtB5jC,EACEA,EAAKqqB,eAAepqB,EAAO2jC,GAC7B3jC,EAEF,MAITsS,EAAA3jB,UAAAiC,SAAA,SAASozC,GACP,YADO,IAAAA,OAAA,GACC/2C,KAAKymB,MACX,OAAkB,MAAO,KACzB,OAAmB,MAAO,MAC1B,OAAmB,MAAO,MAC1B,OAAmB,MAAO,MAC1B,OAAqB,MAAO,QAC5B,OAAkB,MAAO,KACzB,OAAmB,MAAO,MAC1B,OACE,OAAOswB,IAAa/2C,KAAK2Z,aACrB,MACA3Z,KAAK2Z,aAAahW,UAAS,GAEjC,OAAmB,MAAO,MAC1B,OACE,OAAOozC,IAAa/2C,KAAKwzB,UACrB,QACAxzB,KAAKwzB,UAAU7vB,WAErB,QAAoB,MAAO,OAC3B,QAAmB,MAAO,MAC1B,QAAmB,MAAO,MAC1B,QAAoB,MAAO,OAC3B,QAEE,OADA4lB,QAAO,GACA,KAQblE,EAAA3jB,UAAAk5B,aAAA,WACE,OAAQ56B,KAAKymB,MACX,QAAS,OAAO7C,EAAAre,WAAWwZ,IAC3B,OACA,OAAmB,OAAO6E,EAAAre,WAAW0Z,IACrC,OACA,OAAqB,OAAoB,IAAbjf,KAAKk2C,KAAatyB,EAAAre,WAAW0Z,IAAM2E,EAAAre,WAAWwZ,IAC1E,QAAmB,OAAO6E,EAAAre,WAAW6Z,IACrC,QAAmB,OAAOwE,EAAAre,WAAW+Z,IACrC,QAAqB,OAAOsE,EAAAre,WAAWoQ,OAK3C0P,EAAA3jB,UAAAs1C,aAAA,SAAar3C,GACX,OAAQK,KAAKymB,MACX,QAAoB8C,QAAO,GAC3B,QAAS,OAAO5pB,EAAOmS,UAAU,GACjC,OACA,OAAqB,GAAiB,IAAb9R,KAAKk2C,KAAY,OAAOv2C,EAAOmS,UAAU,GAClE,OACA,OAAmB,OAAOnS,EAAOsS,UAAU,GAC3C,QAAmB,OAAOtS,EAAO0S,UAAU,GAC3C,QAAmB,OAAO1S,EAAO4S,UAAU,KAK/C8S,EAAA3jB,UAAAu1C,YAAA,SAAYt3C,GACV,OAAQK,KAAKymB,MACX,QAAoB8C,QAAO,GAC3B,QAAS,OAAO5pB,EAAOmS,UAAU,GACjC,OACA,OAAqB,GAAiB,IAAb9R,KAAKk2C,KAAY,OAAOv2C,EAAOmS,UAAU,GAClE,OACA,OAAmB,OAAOnS,EAAOsS,UAAU,GAC3C,QAAmB,OAAOtS,EAAO0S,UAAU,GAC3C,QAAmB,OAAO1S,EAAO4S,UAAU,KAK/C8S,EAAA3jB,UAAAw1C,eAAA,SAAev3C,GACb,OAAQK,KAAKymB,MACX,QAAoB8C,QAAO,GAC3B,QAAS,OAAO5pB,EAAOmS,WAAW,GAClC,OACA,OAAqB,GAAiB,IAAb9R,KAAKk2C,KAAY,OAAOv2C,EAAOmS,WAAW,GACnE,OACA,OAAmB,OAAOnS,EAAOsS,WAAW,GAAI,GAChD,QAAmB,OAAOtS,EAAO0S,WAAW,GAC5C,QAAmB,OAAO1S,EAAO4S,WAAW,KAKhD8S,EAAA3jB,UAAA85B,kBAAA,WACE,OAAQx7B,KAAKymB,MACX,QAAS,MAAO,IAChB,OACA,OAAmB,MAAO,IAC1B,OACA,OAAqB,OAAoB,IAAbzmB,KAAKk2C,KAAa,IAAM,IACpD,QAAmB,MAAO,IAC1B,QAAmB,MAAO,IAC1B,QAAoB,MAAO,MAOf7wB,EAAAC,GAAY,IAAID,EAAI,EAClC,IAGmB,GAILA,EAAAE,IAAY,IAAIF,EAAI,EAClC,IAGkB,IAIJA,EAAA7G,IAAY,IAAI6G,EAAI,EAClC,IAEkB,IAIJA,EAAAG,IAAY,IAAIH,EAAI,EAClC,IAGkB,IAIJA,EAAA8xB,QAAgB,IAAI9xB,EAAI,EACtC,IAGkB,IAIJA,EAAA+xB,QAAgB,IAAI/xB,EAAI,EACtC,IAIkB,IAIJA,EAAAK,GAAW,IAAIL,EAAI,EACjC,IAGmB,GAILA,EAAAM,IAAY,IAAIN,EAAI,EAClC,IAGkB,IAIJA,EAAAO,IAAY,IAAIP,EAAI,EAClC,IAEkB,IAIJA,EAAAQ,IAAY,IAAIR,EAAI,EAClC,IAGkB,IAIJA,EAAAgyB,QAAgB,IAAIhyB,EAAI,EACtC,IAGkB,IAIJA,EAAAiyB,QAAgB,IAAIjyB,EAAI,EACtC,IAIkB,IAIJA,EAAAU,KAAa,IAAIV,EAAI,GACnC,IAGmB,GAILA,EAAAW,IAAY,IAAIX,EAAI,GAClC,IAEkB,IAIJA,EAAAY,IAAY,IAAIZ,EAAI,GAClC,IAGkB,IAIJA,EAAAa,KAAa,IAAIb,EAAI,KAAgC,GACvEA,EAlWA,GAAa3lB,EAAA2lB,OAqWb3lB,EAAA63C,mBAAA,SAAmCxyB,GAGjC,IAFA,IAAIyyB,EAAWzyB,EAAM3gB,OACjBoZ,EAAM,IAAItY,MAAkBsyC,GACvBn3C,EAAI,EAAGA,EAAIm3C,IAAYn3C,EAC9Bmd,EAAInd,GAAK0kB,EAAM1kB,GAAGu6B,eAEpB,OAAOpd,GAIT9d,EAAAuyB,cAAA,SAA8BlN,GAC5B,IAAIyyB,EAAWzyB,EAAM3gB,OACrB,IAAKozC,EAAU,MAAO,GAEtB,IADA,IAAIjzC,EAAK,IAAIW,MAAcsyC,GAClBn3C,EAAI,EAAGA,EAAIm3C,IAAYn3C,EAC9BkE,EAAGlE,GAAK0kB,EAAM1kB,GAAGsD,WAEnB,OAAOY,EAAGG,KAAK,OAIjB,IAAA8sB,EAAA,WAiBE,SAAAA,EACEb,EACAnZ,EACAgZ,QAFA,IAAAG,MAAA,WACA,IAAAnZ,MAAA,WACA,IAAAgZ,MAAA,MALFxwB,KAAAi1B,qBAA8C,KAO5Cj1B,KAAK2wB,eAAiBA,MACtB3wB,KAAK6wB,eAAiB,KACtB7wB,KAAK8wB,mBAAqB,EAC1B9wB,KAAKwX,WAAaA,GAA0B6N,EAAKa,KACjDlmB,KAAKwwB,SAAWA,EAChBxwB,KAAK+wB,SAAU,EAwGnB,OApGES,EAAA9vB,UAAA44B,iBAAA,SAAiBjnB,GACf,OAAOrT,KAAK6wB,gBAAkB7wB,KAAK6wB,eAAezsB,OAASiP,EACvDrT,KAAK6wB,eAAexd,GACpBokC,EAAwBpkC,IAI9Bme,EAAA9vB,UAAAy7B,eAAA,SAAe5lB,GAIb,IAAImgC,EAAe13C,KAAKwwB,SACpBmnB,EAAiBpgC,EAAOiZ,SAC5B,GAAIknB,GACF,IAAMC,IAAkBD,EAAava,eAAewa,GAClD,OAAO,OAEJ,GAAIA,EACT,OAAO,EAIT,GAAI33C,KAAK+wB,SAAWxZ,EAAOwZ,QACzB,OAAO,EAIT,IAAI6mB,EAAqB53C,KAAK2wB,eAC1BknB,EAAuBtgC,EAAOoZ,eAC9BC,EAAgBgnB,EAAmBxzC,OACvC,GAAIwsB,GAAiBinB,EAAqBzzC,OACxC,OAAO,EAET,IAAK,IAAI/D,EAAI,EAAGA,EAAIuwB,IAAiBvwB,EAAG,CACtC,IAAIy3C,EAAoBF,EAAmBv3C,GACvC03C,EAAsBF,EAAqBx3C,GAC/C,IAAKy3C,EAAkB3a,eAAe4a,GACpC,OAAO,EAKX,OAAO/3C,KAAKwX,WAAW2lB,eAAe5lB,EAAOC,aAI/Cga,EAAA9vB,UAAA85B,kBAAA,WACE,IAAIj3B,KACAisB,EAAWxwB,KAAKwwB,SAChBA,GACFjsB,EAAGE,KAAK+rB,EAASgL,qBAGnB,IADA,IAAI7K,EAAiB3wB,KAAK2wB,eACjBtwB,EAAI,EAAGua,EAAI+V,EAAevsB,OAAQ/D,EAAIua,IAAKva,EAClDkE,EAAGE,KAAKksB,EAAetwB,GAAGm7B,qBAG5B,OADAj3B,EAAGE,KAAKzE,KAAKwX,WAAWgkB,qBACjBj3B,EAAGG,KAAK,KAIjB8sB,EAAA9vB,UAAAiC,SAAA,SAASq0C,QAAA,IAAAA,OAAA,GACP,IAAIzzC,EAAK,IAAIW,MACbX,EAAGE,KAAK,KACR,IAAI4O,EAAQ,EACRmd,EAAWxwB,KAAKwwB,SAChBA,GACEwnB,IACFzzC,EAAGE,KAAK,UACRF,EAAGE,KAAK+rB,EAAS7sB,YACjB0P,EAAQ,GAGZ,IAAI62B,EAAalqC,KAAK2wB,eAClBC,EAAgBsZ,EAAW9lC,OAC/B,GAAIwsB,EAKF,IAJA,IAAI3Z,EAAQjX,KAAK6wB,eACb1Z,EAAWF,EAAQA,EAAM7S,OAAS,EAClC6zC,EAAgBj4C,KAAK8wB,mBACrBonB,EAAYl4C,KAAK+wB,QAAUH,EAAgB,GAAK,EAC3CvwB,EAAI,EAAGA,EAAIuwB,IAAiBvwB,IAAKgT,EACpCA,GAAO9O,EAAGE,KAAK,MACfpE,GAAK63C,GAAW3zC,EAAGE,KAAK,OACxBpE,EAAI8W,EACN5S,EAAGE,KAAgBwS,EAAO5W,IAE1BkE,EAAGE,KAAKgzC,EAAwBp3C,IAE9BA,GAAK43C,GAAiB53C,GAAK63C,EAC7B3zC,EAAGE,KAAK,OAERF,EAAGE,KAAK,MAEVF,EAAGE,KAAKylC,EAAW7pC,GAAGsD,YAK1B,OAFAY,EAAGE,KAAK,SACRF,EAAGE,KAAKzE,KAAKwX,WAAW7T,YACjBY,EAAGG,KAAK,KAEnB8sB,EAnIA,GAAa9xB,EAAA8xB,YAwIb,IAAI2mB,EAA+C,KAGnD,SAAAV,EAAwCpkC,GACjC8kC,IAA6BA,MAClC,IAAK,IAAI93C,EAAI83C,EAA4B/zC,OAAQ/D,EAAIgT,IAAShT,EAC5D83C,EAA4B1zC,KAAK,OAASpE,EAAEsD,SAAS,KAEvD,OAAOw0C,EAA4B9kC,GALrC3T,EAAA+3C,ylBCpkBA,IAuHYz8B,EAvHZo9B,EAAAj4C,EAAA,IAMAsjB,EAAAtjB,EAAA,GAKAyjB,EAAAzjB,EAAA,GAYA+oC,EAAA/oC,EAAA,GAyBAgpC,EAAAhpC,EAAA,GAIAwjB,EAAAxjB,EAAA,GAyDAujB,EAAAvjB,EAAA,IAUA,SAAY6a,GAEVA,IAAA,mBAEAA,IAAA,mBAJF,CAAYA,EAAAtb,EAAAsb,SAAAtb,EAAAsb,YAQZ,IAAAq9B,EAAA,oBAAAA,IAGEr4C,KAAAuX,OAAiByD,EAAOs9B,OAExBt4C,KAAAu4C,eAAsB,EAEtBv4C,KAAAw4C,UAAiB,EAEjBx4C,KAAAy4C,UAAiB,EAEjBz4C,KAAA04C,cAAqB,EAErB14C,KAAA24C,WAAkB,EAElB34C,KAAA44C,aAAuB,kBAEvB54C,KAAA64C,SAAmB,cAEnB74C,KAAA4d,WAAkB,EAqBpB,OAlBE7c,OAAAC,eAAIq3C,EAAA32C,UAAA,gBAAJ,WACE,OAAO1B,KAAKuX,QAAUyD,EAAOC,wCAI/Bla,OAAAC,eAAIq3C,EAAA32C,UAAA,iBAAJ,WACE,OAAO1B,KAAKuX,QAAUyD,EAAOC,OAASyI,EAAA2B,KAAKiyB,QAAU5zB,EAAA2B,KAAKgyB,yCAI5Dt2C,OAAAC,eAAIq3C,EAAA32C,UAAA,iBAAJ,WACE,OAAO1B,KAAKuX,QAAUyD,EAAOC,OAASyI,EAAA2B,KAAK+xB,QAAU1zB,EAAA2B,KAAK8xB,yCAI5Dp2C,OAAAC,eAAIq3C,EAAA32C,UAAA,sBAAJ,WACE,OAAO1B,KAAKuX,QAAUyD,EAAOC,OAAS2I,EAAAre,WAAW0Z,IAAM2E,EAAAre,WAAWwZ,qCAEtEs5B,EAxCA,GAAa34C,EAAA24C,UA2Cb,SAAkBS,GAEhBA,IAAA,eAEAA,IAAA,uBAEAA,IAAA,uBANF,CAAkBp5C,EAAAo5C,iBAAAp5C,EAAAo5C,oBAUlB,IAAAC,EAAA,SAAAp0B,GAwCE,SAAAo0B,EAAY3jB,EAAkBhQ,QAAA,IAAAA,MAAA,MAA9B,IAAAR,EACED,EAAAnkB,KAAAR,KAAMo1B,EAAQnwB,cAAYjF,YA7B5B4kB,EAAAo0B,qBAKAp0B,EAAAq0B,YAA2B,KAE3Br0B,EAAAs0B,YAAoBx1B,EAAA2B,KAAKa,KAKzBtB,EAAAu0B,eAAkC,IAAIj0C,MAEtC0f,EAAAw0B,eAA4C,IAAI30B,IAGhDG,EAAAy0B,cAA4B,IAAIn0C,MAGhC0f,EAAA00B,MAAqB,IAAIjqB,IAUvBzK,EAAKwQ,QAAUA,EACVhQ,IAASA,EAAU,IAAIizB,GAC5BzzB,EAAKQ,QAAUA,EACfR,EAAK+W,aAAejF,QAClB6iB,IAAIn0B,EAAQuzB,WAAYvzB,EAAQU,UAAU+W,WAE5CjY,EAAKjlB,OAASikB,EAAAlT,OAAOxN,WA0+JzB,OA1hK8BgiB,EAAA6zB,EAAAp0B,GAmCrBo0B,EAAAS,QAAP,SAAepkB,EAAkBhQ,GAC/B,YAD+B,IAAAA,MAAA,MACxB,IAAI2zB,EAAS3jB,EAAShQ,GAASo0B,WAgBxCT,EAAAr3C,UAAA83C,QAAA,WACE,IAAIp0B,EAAUplB,KAAKolB,QACfzlB,EAASK,KAAKL,OACdy1B,EAAUp1B,KAAKo1B,QAGnBA,EAAQjQ,WAAWC,GAGnB,IAAIq0B,EAAyBlwB,OAAO6L,EAAQtQ,SAAS3jB,IAAI,UACzDooB,OAAOkwB,EAAuBhzB,MAAQyiB,EAAAvf,YAAYsK,oBAClD,IAAIylB,EAAwB,IAAIxQ,EAAApQ,SACX2gB,EACnBA,EAAuB9gC,aACvB,IAAI+K,EAAA8N,aAAc9N,EAAA2B,KAAKa,OAEzBwzB,EAAsBzxB,IAAIihB,EAAA/e,aAAawvB,OACvC35C,KAAK45C,cAAgBF,EACrB15C,KAAK09B,gBAAkBgc,EAIvB,IADA,IAAIz0B,EAAUmQ,EAAQnQ,QACb5kB,EAAI,EAAGua,EAAIqK,EAAQ7gB,OAAQ/D,EAAIua,IAAKva,EACvC4kB,EAAQ5kB,GAAGw5C,SACb75C,KAAK85C,cAAc70B,EAAQ5kB,IAK/B,IAAI24C,EAAoBh5C,KAAKg5C,kBAC7B,GAAIA,EAAkB50C,OAAQ,CAC5B,IACI21C,EADAC,EAAUh6C,KAAKi6C,mBAAmBP,EAAsBnoB,WAE5D5xB,EAAOgc,SACLo+B,EAAUp6C,EAAO0Y,YACfqhC,EAAsB/gC,aACtBqhC,EACAt2B,EAAA6zB,mBAAmBmC,EAAsBngB,kBACzC55B,EAAO6V,YAAY,KAAMwjC,KAG7BU,EAAsBve,SAASx7B,EAAQo6C,GAIzC,IAAK30B,EAAQqzB,SAAU,CACrB,IAAI9c,EAAe37B,KAAK27B,aACxBA,EAAeue,UAAUve,EAAcvW,EAAQU,UAAU+W,UACzD78B,KAAK27B,aAAeA,EAChBvW,EAAQ+0B,SACVx6C,EAAOsY,UACL,YACA2L,EAAAre,WAAW0Z,KACX,EACAtf,EAAOsS,UAAUiJ,QAAQygB,GAAexgB,SAASwgB,KAGnDh8B,EAAOsY,UACL,YACA2L,EAAAre,WAAWwZ,KACX,EACApf,EAAOmS,UAAUoJ,QAAQygB,KAK7B,IAAIye,EAAQC,UAAUH,UAAUve,EAAc,OAAUjF,QAAQ,GAAI,IACpE/2B,EAAO4a,UACLW,QAAQk/B,GACRx2B,EAAAlT,OAAOyQ,kBACPnhB,KAAKm5C,eACL/zB,EAAQ7N,OACR,UAKA6N,EAAQszB,cACV/4C,EAAOqa,gBAAgB,IAAK,MAAO,UAIrC,IAAIq/B,EAAgBr5C,KAAKq5C,cACrBiB,EAAoBjB,EAAcj1C,OACtC,GAAIk2C,EAAmB,CACrB,IAAIC,EAAU,IAAIr1C,MAAmBo1C,GACrC,IAASj6C,EAAI,EAAGA,EAAIi6C,IAAqBj6C,EACvCk6C,EAAQl6C,GAAKg5C,EAAch5C,GAAGsQ,IAEhChR,EAAO6b,iBAAiB++B,GAG1B,OAAO56C,GAKTo5C,EAAAr3C,UAAA84C,oBAAA,SAAoBC,EAAwCxhB,GAM1D,IALA,IAGIr1B,EAHAqhB,EAAUjlB,KAAKo1B,QAAQnQ,QAIvBvQ,EAAW+lC,EAAiC,MACvCp6C,EAAI,EAAGua,EAAIqK,EAAQ7gB,OAAQ/D,EAAIua,IAAKva,EAE3C,IADAuD,EAASqhB,EAAQ5kB,IACNwD,gBAAkB6Q,EAE3B,YADA1U,KAAK85C,cAAcl2C,GAMvB8Q,EAAW+lC,EAAiC,YAC5C,IAASp6C,EAAI,EAAGua,EAAIqK,EAAQ7gB,OAAQ/D,EAAIua,IAAKva,EAE3C,IADAuD,EAASqhB,EAAQ5kB,IACNwD,gBAAkB6Q,EAE3B,YADA1U,KAAK85C,cAAcl2C,GAMvB8Q,EAAWw0B,EAAA9kB,eAAiBq2B,EAAiC,MAC7D,IAASp6C,EAAI,EAAGua,EAAIqK,EAAQ7gB,OAAQ/D,EAAIua,IAAKva,EAE3C,IADAuD,EAASqhB,EAAQ5kB,IACNwD,gBAAkB6Q,EAE3B,YADA1U,KAAK85C,cAAcl2C,GAKvB5D,KAAKoF,MACHqe,EAAAlhB,eAAem4C,iBACfzhB,EAAWh2B,MAAOw3C,IAItB1B,EAAAr3C,UAAAo4C,cAAA,SAAcl2C,GACZ,IAAI01C,EAAQt5C,KAAKs5C,MACbz1C,EAAiBD,EAAOC,eAC5B,IAAIy1C,EAAM5uB,IAAI7mB,GAAd,CACAy1C,EAAMhqB,IAAIzrB,GAOV,IAJA,IAAI00C,EAAgBv4C,KAAKolB,QAAQmzB,cAC7BsB,EAAUj2C,EAAOi2C,QACjBb,EAAoBh5C,KAAKg5C,kBACzB1yB,EAAa1iB,EAAO0iB,WACfjmB,EAAI,EAAGua,EAAI0L,EAAWliB,OAAQ/D,EAAIua,IAAKva,EAAG,CACjD,IAAImmB,EAAYF,EAAWjmB,GAC3B,OAAQmmB,EAAUC,MAChB,KAAK9C,EAAA+C,SAASC,iBACZ,IAAIg0B,EAAqCn0B,GAGrC+xB,GACCsB,GAAWl2B,EAAAgI,YAAYhI,EAAAiI,aAAa7E,OAAQ4zB,EAAiB7uB,cAE/D6uB,EAAiBhjB,WAElB33B,KAAK46C,wBAAwBD,MAE/B,MAEF,KAAKh3B,EAAA+C,SAASG,gBACZ,IAAIg0B,EAAmCr0B,GAErC+xB,GACCsB,GAAWl2B,EAAAgI,YAAYhI,EAAAiI,aAAa7E,OAAQ8zB,EAAgB/uB,aAE7D9rB,KAAK86C,uBAAuBD,GAE9B,MAEF,KAAKl3B,EAAA+C,SAASO,oBACZ,IAAI8zB,EAA2Cv0B,GAG3C+xB,GACCsB,GAAWl2B,EAAAgI,YAAYhI,EAAAiI,aAAa7E,OAAQg0B,EAAoBjvB,cAElEivB,EAAoBpjB,WAErB33B,KAAKg7C,2BAA2BD,MAElC,MAEF,KAAKp3B,EAAA+C,SAASS,OACZ,IAAI8zB,EAAmCz0B,EACvCxmB,KAAKw6C,oBACHS,EAAgBp3C,eAChBo3C,EAAgB1yB,MAElB,MAEF,KAAK5E,EAAA+C,SAASa,qBACZ,IAAI2zB,EAA8C10B,GAEhD+xB,GACCsB,GAAWl2B,EAAAgI,YAAYhI,EAAAiI,aAAa7E,OAAQm0B,EAAqBpvB,aAElE9rB,KAAKm7C,4BAA4BD,GAEnC,MAEF,KAAKv3B,EAAA+C,SAASiB,SACZ,IAAIyzB,EAAep7C,KAAKq7C,yBAA4C70B,GAChE40B,GAAcpC,EAAkBv0C,KAAK22C,GACzC,MAEF,KAAKz3B,EAAA+C,SAASK,OACZ,IAAIu0B,EAAmC90B,EACD,MAAlC80B,EAAgBz3C,gBAClB7D,KAAKw6C,oBACHc,EAAgBz3C,eACSy3C,EAAgB/yB,OAGzCgwB,GAAiBsB,IACnB75C,KAAKu7C,uBAAuBD,GAE9B,MAEF,QACE,IAAIE,EAAmBx7C,KAAK09B,gBAC5B19B,KAAK09B,gBAAkB19B,KAAK45C,cAC5B55C,KAAKg5C,kBAAkBv0C,KAAKzE,KAAKy7C,iBAAiBj1B,IAClDxmB,KAAK09B,gBAAkB8d,MAS/BzC,EAAAr3C,UAAAg6C,yBAAA,SAAyBrzB,GAEvB,IAAIP,EAAUyB,OAAOvpB,KAAKo1B,QAAQtQ,SAAS3jB,IAAIknB,EAAYwC,wBAE3D,OADAtB,OAAOzB,EAAQrB,MAAQyiB,EAAAvf,YAAYc,QAC9BzqB,KAAK27C,cAAsB7zB,GACjBA,EADkC,MAInDixB,EAAAr3C,UAAAi6C,cAAA,SAAcC,GACZ,GAAIA,EAAOtxB,GAAG4e,EAAA/e,aAAa0xB,WAAaD,EAAOtxB,GAAG4e,EAAA/e,aAAaC,SAAU,OAAO,EAChFwxB,EAAO3zB,IAAIihB,EAAA/e,aAAa0xB,UAExB,IAAIxzB,EAAcuzB,EAAOvzB,YACrByzB,EAA0B,EAE9B,GAAIF,EAAOtoC,MAAQoQ,EAAA2B,KAAKa,KAGtB,GAAImC,EAAY/U,KAAM,CACpB,IAAI8lB,EAAep5B,KAAKo1B,QAAQ3E,YAAYpI,EAAY/U,MACxD,IAAK8lB,EAAc,OAAO,EAC1B,GAAIA,GAAgB1V,EAAA2B,KAAKa,KAKvB,OAJAlmB,KAAKoF,MACHqe,EAAAlhB,eAAew5C,cACf1zB,EAAY/U,KAAKrQ,QAEZ,EAET24C,EAAOtoC,KAAO8lB,MAGT,KAAI/Q,EAAYlQ,YAqBrB,OAJAnY,KAAKoF,MACHqe,EAAAlhB,eAAew5C,cACf1zB,EAAYznB,KAAKqC,MAAMwvB,QAElB,EAfP,GALAqpB,EAAW97C,KAAKg8C,kBACd3zB,EAAYlQ,YACZuL,EAAA2B,KAAKa,KAAI,GAGPlmB,KAAKk5C,aAAex1B,EAAA2B,KAAKa,KAK3B,OAJAlmB,KAAKoF,MACHqe,EAAAlhB,eAAe05C,mCACf5zB,EAAYlQ,YAAYlV,MAAOjD,KAAKk5C,YAAYv1C,WAAY,WAEvD,EAETi4C,EAAOtoC,KAAOtT,KAAKk5C,YAYvB,IAAIgD,EAAaN,EAAOtoC,KAAKsnB,eAG7B,GAAIghB,EAAOtxB,GAAG4e,EAAA/e,aAAayL,UAGzB,OAAIgmB,EAAOtxB,GAAG4e,EAAA/e,aAAa4L,WACzB/1B,KAAKL,OAAOua,gBACV0hC,EAAOjjC,aACPijC,EAAOhxB,UACHgxB,EAAOhxB,UAAU8C,WACjB,MACJkuB,EAAOluB,WACPwuB,GAEFN,EAAO3zB,IAAIihB,EAAA/e,aAAa0xB,WACjB,IAIP77C,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACf9E,EAAYplB,QAGT,GAKT,IAAIk5C,GAAoB,EAGpBP,EAAOtxB,GAAG4e,EAAA/e,aAAawM,SACzBmlB,EAAW97C,KAAKo8C,sBAAsBR,EAAQA,EAAOtoC,MAAM,GAKvD+U,EAAYlQ,aACT2jC,IACHA,EAAW97C,KAAKg8C,kBAAkB3zB,EAAYlQ,YAAayjC,EAAOtoC,OAIhEsL,yBAAyBk9B,IAAal4B,EAAApe,aAAaqZ,QAGjD+8B,EAAOtxB,GAAG4e,EAAA/e,aAAa4L,WACzB+lB,EAAW97C,KAAKq8C,wBAAwBP,GACpCl9B,yBAAyBk9B,IAAal4B,EAAApe,aAAaqZ,QACrD7e,KAAKsF,QACHme,EAAAlhB,eAAe+5C,4DACfj0B,EAAYplB,OAEdk5C,GAAoB,IAGtBA,GAAoB,IAMxBL,EAAWF,EAAOtoC,KAAK0jC,aAAah3C,KAAKL,QAI7C,IAAIgZ,EAAeijC,EAAOjjC,aAE1B,GAAIwjC,EACFn8C,KAAKL,OAAOsY,UAAUU,EAAcujC,GAAY,EAAMN,EAAOtoC,KAAK0jC,aAAah3C,KAAKL,SACpFK,KAAKg5C,kBAAkBv0C,KAAKzE,KAAKL,OAAO2V,gBAAgBqD,EAAcmjC,SAItE,GAAIF,EAAOtxB,GAAG4e,EAAA/e,aAAa4L,UAAW,CAEpC,OADejX,2BAA2Bg9B,IAExC,KAAKl4B,EAAAre,WAAWwZ,IACd68B,EAAOvlB,kBAAiB,EACxBulB,EAAOnlB,qBAAuBC,QAAQ1X,0BAA0B88B,GAAW,GAC3E,MAEF,KAAKl4B,EAAAre,WAAW0Z,IACd28B,EAAOvlB,kBAAiB,EACxBulB,EAAOnlB,qBAAuBC,QAC5BxX,6BAA6B48B,GAC7B38B,8BAA8B28B,IAEhC,MAEF,KAAKl4B,EAAAre,WAAW6Z,IACdw8B,EAAOvlB,kBAAiB,EACxBulB,EAAO/kB,mBAAqBxX,0BAA0By8B,GACtD,MAEF,KAAKl4B,EAAAre,WAAW+Z,IACds8B,EAAOvlB,kBAAiB,EACxBulB,EAAO/kB,mBAAqBtX,0BAA0Bu8B,GACtD,MAEF,QACE,MAAM,IAAI/9B,MAAM,0BAGpB69B,EAAO3zB,IAAIihB,EAAA/e,aAAawM,SACpBtO,EAAYk0B,YACdv8C,KAAKL,OAAOsY,UAAUU,EAAcujC,GAAY,EAAOJ,GAErDzzB,EAAYplB,MAAMW,OAAOi2C,SAAWxxB,EAAYusB,kBAClD50C,KAAKL,OAAOyZ,gBAAgBwiC,EAAOjjC,aAAc0P,EAAY6D,+BAI/DlsB,KAAKL,OAAOsY,UAAUU,EAAcujC,GAAaN,EAAOtxB,GAAG4e,EAAA/e,aAAa4L,UAAW+lB,GAGvF,OAAO,GAKT/C,EAAAr3C,UAAAo5C,uBAAA,SAAuBzyB,GACrB,IAAIP,EAAUyB,OAAOvpB,KAAKo1B,QAAQtQ,SAAS3jB,IAAIknB,EAAYwC,wBAE3D,OADAtB,OAAOzB,EAAQrB,MAAQyiB,EAAAvf,YAAYkM,MAC9B71B,KAAKw8C,YAAkB10B,GACfA,EADgC,MAI/CixB,EAAAr3C,UAAA86C,YAAA,SAAY10B,GACV,GAAIA,EAAQwC,GAAG4e,EAAA/e,aAAa0xB,UAAW,OAAO,EAC9C/zB,EAAQG,IAAIihB,EAAA/e,aAAa0xB,UAEzB77C,KAAKi5C,YAAcnxB,EACnB,QAAI20B,EAAkC,KACtC,GAAI30B,EAAQqD,YACV,IAAmB,IAAAtC,EAAAJ,EAAAX,EAAQqD,QAAQ0D,UAAQsL,EAAAtR,EAAAF,QAAAwR,EAAAvR,KAAAuR,EAAAtR,EAAAF,OAAA,CAAtC,IAAIO,EAAMiR,EAAA94B,MACb,GAAI6nB,EAAOzC,MAAQyiB,EAAAvf,YAAYiJ,UAA/B,CACA,IAAI8pB,GAAc,EACd/5B,EAAiBuG,EACjByzB,EAAmBh6B,EAAI0F,YAE3B,GADA1F,EAAIsF,IAAIihB,EAAA/e,aAAa0xB,UACjBl5B,EAAI2H,GAAG4e,EAAA/e,aAAawM,SAClB7O,EAAQO,YAAYusB,kBACtB50C,KAAKL,OAAOsY,UACV0K,EAAIhK,aACJiL,EAAAre,WAAWwZ,KACX,EACA/e,KAAKL,OAAOmS,UAAU6Q,EAAIqT,oBAGzB,CACL,IAAI8lB,OAAQ,EAiCZ,GAhCIa,EAAiBt7C,OACnBy6C,EAAW97C,KAAKg8C,kBAA8BW,EAAiBt7C,MAAOqiB,EAAA2B,KAAK7G,KACvEI,yBAAyBk9B,IAAal4B,EAAApe,aAAaqZ,QACrDi9B,EAAW97C,KAAKq8C,wBAAwBP,GACpCl9B,yBAAyBk9B,IAAal4B,EAAApe,aAAaqZ,QACjDiJ,EAAQwC,GAAG4e,EAAA/e,aAAa4L,WAC1B/1B,KAAKsF,QACHme,EAAAlhB,eAAe+5C,4DACfK,EAAiB15C,OAGrBy5C,GAAc,KAGQ,MAAjBD,EACTX,EAAW97C,KAAKL,OAAOmS,UAAU,GACxB2qC,EAAcnyB,GAAG4e,EAAA/e,aAAawM,SACvCmlB,EAAW97C,KAAKL,OAAOmS,UAAU2qC,EAAczmB,cAAgB,IAG/D8lB,EAAW97C,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS+xC,OAC3C58C,KAAKL,OAAO+T,gBAAgB+oC,EAAc9jC,aAAciL,EAAAre,WAAWwZ,KACnE/e,KAAKL,OAAOmS,UAAU,IAEpBgW,EAAQwC,GAAG4e,EAAA/e,aAAa4L,WAC1B/1B,KAAKsF,QACHme,EAAAlhB,eAAe+5C,4DACfK,EAAiB15C,OAGrBy5C,GAAc,GAEZA,EACF18C,KAAKL,OAAOsY,UACV0K,EAAIhK,aACJiL,EAAAre,WAAWwZ,KACX,EACA/e,KAAKL,OAAOmS,UAAU,IAExB9R,KAAKg5C,kBAAkBv0C,KAAKzE,KAAKL,OAAO2V,gBAAgBqN,EAAIhK,aAAcmjC,QACrE,CAEL,GADA97C,KAAKL,OAAOsY,UAAU0K,EAAIhK,aAAciL,EAAAre,WAAWwZ,KAAK,EAAO+8B,GAC3Dh9B,2BAA2Bg9B,IAAal4B,EAAAre,WAAWwZ,IAIrD,MAAM,IAAIhB,MAAM,gBAHhB4E,EAAIqT,cAAgBhX,0BAA0B88B,GAC9Cn5B,EAAIsF,IAAIihB,EAAA/e,aAAawM,UAM3B8lB,EAA2B95B,EAGvBmF,EAAQO,YAAYplB,MAAMW,OAAOi2C,SAAW/xB,EAAQO,YAAYusB,mBAC9D1rB,EAAOoB,GAAG4e,EAAA/e,aAAawM,SACzB32B,KAAKL,OAAOyZ,gBAAgB8P,EAAOvQ,aAAcuQ,EAAOvQ,cAC/CgkC,GACT38C,KAAKsF,QACHme,EAAAlhB,eAAes6C,+BACfF,EAAiB15C,2GAO3B,OADAjD,KAAKi5C,YAAc,MACZ,GAMTF,EAAAr3C,UAAAs5C,2BAAA,SACE3yB,EACAyJ,EACAzB,QAAA,IAAAA,MAAA,MAEA,IAAIvI,EAAUyB,OAAOvpB,KAAKo1B,QAAQtQ,SAAS3jB,IAAIknB,EAAYwC,wBAE3D,OADAtB,OAAOzB,EAAQrB,MAAQyiB,EAAAvf,YAAYsK,oBAC5Bj0B,KAAK88C,kCACSh1B,EACnBgK,EACAzB,EACoBvI,EAASO,YAAYznB,OAK7Cm4C,EAAAr3C,UAAAo7C,kCAAA,SACEp7C,EACAowB,EACAzB,EACA4I,GAEA,IAAI9M,EAAWzqB,EAAUmwB,0BACvBC,EACAzB,EACA4I,GAEF,OAAM9M,GAAYnsB,KAAK+8C,gBAAgB5wB,GAChCA,EADmD,MAKpD4sB,EAAAr3C,UAAAu4C,mBAAR,SAA2B1oB,GACzB,IAGIhgB,EAFAqf,EADaW,EAAUZ,eACIvsB,OAC3BosB,EAAWe,EAAUf,SAErBnd,EAAQ,EACRmd,IACFjf,EAAa,IAAIrM,MAAM,EAAI0rB,IAChB,GAAKJ,EAASoK,eACzBvnB,EAAQ,GAER9B,EAAa,IAAIrM,MAAM0rB,GAEzB,IAAK,IAAIvwB,EAAI,EAAGA,EAAIuwB,IAAiBvwB,IAAKgT,EACxC9B,EAAW8B,GAASke,EAAUZ,eAAetwB,GAAGu6B,eAElD,IAAIoiB,EAAazrB,EAAU/Z,WAAWojB,eAClCof,EAAUh6C,KAAKL,OAAOiS,2BAA2BorC,EAAYzrC,GAIjE,OAHKyoC,IACHA,EAAUh6C,KAAKL,OAAO0R,gBAAgBkgB,EAAUiK,oBAAqBwhB,EAAYzrC,IAE5EyoC,GAITjB,EAAAr3C,UAAAq7C,gBAAA,SAAgB5wB,GACd,GAAIA,EAAS7B,GAAG4e,EAAA/e,aAAa0xB,UAAW,OAAO,EAC/CtyB,QAAQ4C,EAAS7B,GAAG4e,EAAA/e,aAAaC,UAAmC,SAAvB+B,EAASuB,YACtDvB,EAASlE,IAAIihB,EAAA/e,aAAa0xB,UAG1B,IAkBIlrC,EAlBA0X,EAAc8D,EAASzqB,UAAU2mB,YACjCjS,EAAOiS,EAAYjS,KACnBA,EACE+V,EAAS7B,GAAG4e,EAAA/e,aAAayL,WAC3B51B,KAAKoF,MACHqe,EAAAlhB,eAAe06C,yDACf50B,EAAYznB,KAAKqC,OAIhBkpB,EAAS7B,GAAG4e,EAAA/e,aAAayL,WAC5B51B,KAAKoF,MACHqe,EAAAlhB,eAAe26C,gFACf70B,EAAYznB,KAAKqC,OAMvB,IAAI+2C,EAAUh6C,KAAKi6C,mBAAmB9tB,EAASoF,WAC/C,GAAInb,EAAM,CAGR,IAAIolC,EAAmBx7C,KAAK09B,gBAC5B19B,KAAK09B,gBAAkBvR,EACvB,IAAIoe,EAAOvqC,KAAKy7C,iBAAiBrlC,GAG7B+mC,EAAoBn9C,KAAK09B,gBAAgB3K,KAAKoI,WACjChP,EAASoF,UAAU/Z,YAClBkM,EAAA2B,KAAKa,MAASi3B,GAC9Bn9C,KAAKoF,MACHqe,EAAAlhB,eAAe66C,+DACf7zB,OAAOlB,EAAYkJ,UAAU/Z,WAAY,wBAAwBvU,OAGrEjD,KAAK09B,gBAAkB8d,EAGvB7qC,EAAM3Q,KAAKL,OAAO0Y,YAChB8T,EAASxT,aACTqhC,EACAt2B,EAAA6zB,mBAAmBprB,EAASoN,kBAC5BgR,OAGG,CACLpe,EAASlE,IAAIihB,EAAA/e,aAAauL,UAG1B,IAAI9K,EAAYuB,EAASzqB,UAAUkpB,UACnCja,EAAM3Q,KAAKL,OAAO6Z,kBAChB2S,EAASxT,aACTiS,EACIA,EAAU8C,WACV,MACJvB,EAASuB,WACTssB,GAUJ,OALI3xB,EAAYplB,MAAMW,OAAOi2C,SAAWxxB,EAAYusB,kBAClD50C,KAAKL,OAAO+Y,kBAAkByT,EAASxT,aAAc0P,EAAYznB,KAAKsD,MAGxEioB,EAASgP,SAASn7B,KAAKL,OAAQgR,IACxB,GAKTooC,EAAAr3C,UAAAy5C,4BAAA,SAA4B9yB,GAG1B,IAFA,IAAI8C,EAAU9C,EAAY8C,QACtBotB,EAAgBv4C,KAAKolB,QAAQmzB,cACxBl4C,EAAI,EAAGua,EAAIuQ,EAAQ/mB,OAAQ/D,EAAIua,IAAKva,EAAG,CAC9C,IAAI6oB,EAASiC,EAAQ9qB,GACrB,OAAQ6oB,EAAOzC,MACb,KAAK9C,EAAA+C,SAASC,kBAGR4xB,IACA50B,EAAAgI,YAAYhI,EAAAiI,aAAa7E,OAA2BmC,EAAQ4C,YACrC5C,EAAQ+G,eAAe7rB,QAEhDpE,KAAK46C,wBAA0C1xB,MAEjD,MAEF,KAAKvF,EAAA+C,SAASW,sBAGRkxB,IACA50B,EAAAgI,YAAYhI,EAAAiI,aAAa7E,OAA+BmC,EAAQ4C,YACrC5C,EAAQ+G,eAAe7rB,QAEpDpE,KAAKq9C,4BAAkDn0B,MAEzD,MAEF,KAAKvF,EAAA+C,SAASG,iBAEV0xB,GACA50B,EAAAgI,YAAYhI,EAAAiI,aAAa7E,OAA0BmC,EAAQ4C,aAE3D9rB,KAAK86C,uBAAwC5xB,GAE/C,MAEF,KAAKvF,EAAA+C,SAASO,qBAGRsxB,IACA50B,EAAAgI,YAAYhI,EAAAiI,aAAa7E,OAA8BmC,EAAQ4C,YAE1C5C,EAAQyO,WAE/B33B,KAAKg7C,2BAAgD9xB,MAEvD,MAEF,KAAKvF,EAAA+C,SAASa,sBAEVgxB,GACA50B,EAAAgI,YAAYhI,EAAAiI,aAAa7E,OAA+BmC,EAAQ4C,aAEhE9rB,KAAKm7C,4BAAkDjyB,GAEzD,MAEF,KAAKvF,EAAA+C,SAASiB,SACZ,GACE4wB,GACA50B,EAAAgI,YAAYhI,EAAAiI,aAAa7E,OAA4BmC,EAAQ4C,WAC7D,CACA,IAAIsvB,EAAep7C,KAAKq7C,yBAA4CnyB,GAAQ,GACxEkyB,GAAcp7C,KAAKg5C,kBAAkBv0C,KAAK22C,GAEhD,MAEF,QACE,MAAM,IAAIr9B,MAAM,gCAMxBg7B,EAAAr3C,UAAA47C,iBAAA,SAAiBC,GACf,GAAKA,EAAGpyB,QAAR,CAEA,QAAIotB,EAAgBv4C,KAAKolB,QAAQmzB,kBACjC,IAAoB,IAAA1vB,EAAAJ,EAAA80B,EAAGpyB,QAAQ0D,UAAQsL,EAAAtR,EAAAF,QAAAwR,EAAAvR,KAAAuR,EAAAtR,EAAAF,OAAA,CAAlC,IAAIb,EAAOqS,EAAA94B,MACd,OAAQymB,EAAQrB,MACd,KAAKyiB,EAAAvf,YAAYC,iBAGX2uB,IACiBzwB,EAASwC,GAAG4e,EAAA/e,aAAaI,WACrBzC,EAASwC,GAAG4e,EAAA/e,aAAayN,UAEhD53B,KAAKw9C,+BAA+C11B,MAEtD,MAEF,KAAKohB,EAAAvf,YAAYkM,KACf71B,KAAKw8C,YAAkB10B,GACvB,MAEF,KAAKohB,EAAAvf,YAAYsK,oBAGXskB,IAAqCzwB,EAASwC,GAAG4e,EAAA/e,aAAaI,WACtCzC,EAASwC,GAAG4e,EAAA/e,aAAayN,UAEnD53B,KAAK88C,kCACgBh1B,KAEnB,KACoBA,EAASO,YAAYznB,MAG7C,MAEF,KAAKsoC,EAAAvf,YAAYc,OACfzqB,KAAK27C,cAAsB7zB,GAC3B,MAEF,KAAKohB,EAAAvf,YAAY6L,UACfx1B,KAAKs9C,iBAA4Bx1B,yGASzCixB,EAAAr3C,UAAA65C,uBAAA,SAAuB/0B,GAErB,IADA,IAAI2E,EAAU3E,EAAU2E,QACf9qB,EAAI,EAAGua,EAAIuQ,EAAQ/mB,OAAQ/D,EAAIua,IAAKva,EAAG,CAC9C,IAAI6oB,EAASiC,EAAQ9qB,GACjBo9C,EACFj3B,EAAUvjB,MAAMW,OAAOqrB,aACvBia,EAAArlB,eACAqF,EAAOtQ,aAAa1U,KAElB4jB,EAAU9nB,KAAKo1B,QAAQ11B,QAAQyB,IAAIs8C,GACvC,GAAK31B,EAEL,OAAQA,EAAQrB,MACd,KAAKyiB,EAAAvf,YAAYC,gBACO9B,EAASwC,GAAG4e,EAAA/e,aAAayN,UAC7C53B,KAAKw9C,+BAA+C11B,MAEtD,MAEF,KAAKohB,EAAAvf,YAAYkM,KACf71B,KAAKw8C,YAAkB10B,GACvB,MAEF,KAAKohB,EAAAvf,YAAYsK,mBACf,IACuBnM,EAASwC,GAAG4e,EAAA/e,aAAayN,UAC9CpR,EAAUvjB,MAAMW,OAAOi2C,QACvB,CACA,IAAI6D,EAAmB19C,KAAK88C,kCACPh1B,KAEnB,KACoBA,EAASO,YAAYznB,MAE3C,GAAI88C,EAAkB,CACpB,IAAI3C,EAAsB2C,EAAiBh8C,UAAU2mB,YACjD0yB,GAAuBA,EAAoBlG,oBAAoB3rB,IACjElpB,KAAKL,OAAO+Y,kBAAkBglC,EAAiB/kC,aAAcuQ,EAAOtQ,aAAa1U,OAIvF,MAEF,KAAKglC,EAAAvf,YAAYc,OACf,GAAIzqB,KAAK27C,cAAsB7zB,IAAYtB,EAAUvjB,MAAMW,OAAOi2C,QAAS,CACzE,IAAI8D,EAA6B71B,EAASO,YACtCs1B,GAAqBA,EAAkB9I,oBAAoB3rB,KAChDpB,EAASwC,GAAG4e,EAAA/e,aAAawM,SACpC32B,KAAKL,OAAOyZ,gBAAgB0O,EAAQnP,aAAcuQ,EAAOtQ,aAAa1U,MAEtElE,KAAKsF,QACHme,EAAAlhB,eAAes6C,+BACf3zB,EAAOjmB,QAKf,MAEF,KAAKimC,EAAAvf,YAAY6L,UACfx1B,KAAKs9C,iBAA4Bx1B,MASzCixB,EAAAr3C,UAAAk5C,wBAAA,SACEvyB,EACAyJ,EACAzB,EACAgC,QADA,IAAAhC,MAAA,WACA,IAAAgC,MAAA,MAEA,IAAIvK,EAAU9nB,KAAKo1B,QAAQtQ,SAAS3jB,IAAIknB,EAAYwC,uBACpD,IAAK/C,GAAWA,EAAQrB,MAAQyiB,EAAAvf,YAAYC,gBAC1C,MAAM,IAAI7L,MAAM,kBAElB/d,KAAKw9C,+BACa11B,EAChBgK,EACAzB,EACAgC,IAIJ0mB,EAAAr3C,UAAA87C,+BAAA,SACE97C,EACAowB,EACAzB,EACAgC,QADA,IAAAhC,MAAA,WACA,IAAAgC,MAAA,MAEA,IAAIlG,EAAWzqB,EAAUmwB,0BACvBC,EACAzB,EACAgC,GAEGlG,GACLnsB,KAAK49C,aAAazxB,IAGpB4sB,EAAAr3C,UAAAk8C,aAAA,SAAazxB,GACX,QAAIA,EAAS7B,GAAG4e,EAAA/e,aAAa0xB,YAC7B1vB,EAASlE,IAAIihB,EAAA/e,aAAa0xB,WACnB,IAGT9C,EAAAr3C,UAAA27C,4BAAA,SACEh1B,EACAyJ,EACAzB,EACAgC,GAEA,WAHA,IAAAhC,MAAA,WACA,IAAAgC,MAAA,MAEM,IAAItU,MAAM,oBAMlBg7B,EAAAr3C,UAAAm8C,iBAAA,SAAiBttC,EAAoButC,QAAA,IAAAA,MAAA,GACnC,IAAIniB,EAAeue,UAAUl6C,KAAK27B,aAAcmiB,GAC5CrtC,EAAUmT,EAAAtT,cAAcpN,OAAOqN,EAAQorB,GAG3C,OAFA37B,KAAKm5C,eAAe10C,KAAKgM,GACzBzQ,KAAK27B,aAAeqM,QAAQrM,EAAcjF,QAAQnmB,EAAOnM,OAAQ,IAC1DqM,GAMTsoC,EAAAr3C,UAAAq8C,yBAAA,SAAyBniC,GAEvB,GADA2N,OAAO3N,EAAK0O,GAAG4e,EAAA/e,aAAa0xB,WACxBjgC,EAAK8d,oBAAsB,EAC7B,OAAO9d,EAAK8d,mBAEd,IAAIrmB,EAAQrT,KAAKq5C,cAAcj1C,OAG/B,OAFApE,KAAKq5C,cAAc50C,KAAKmX,GACxBA,EAAK8d,mBAAqBrmB,EACnBA,GAKT0lC,EAAAr3C,UAAA+5C,iBAAA,SAAiBj1B,GACf,IAAI7T,EACJ,OAAQ6T,EAAUC,MAChB,KAAK9C,EAAA+C,SAASquB,MACZpiC,EAAO3S,KAAKg+C,sBAAsCx3B,GAClD,MAEF,KAAK7C,EAAA+C,SAAS8X,MACZ7rB,EAAO3S,KAAKi+C,sBAAsCz3B,GAClD,MAEF,KAAK7C,EAAA+C,SAASiY,SACZhsB,EAAO3S,KAAKk+C,yBAA4C13B,GACxD,MAEF,KAAK7C,EAAA+C,SAASoY,GACZnsB,EAAO3S,KAAKm+C,mBAAgC33B,GAC5C,MAEF,KAAK7C,EAAA+C,SAASsuB,MACZriC,EAAO3S,KAAKo+C,sBAAsC53B,GAClD,MAEF,KAAK7C,EAAA+C,SAAS0uB,WACZziC,EAAO3S,KAAKq+C,2BAAgD73B,GAC5D,MAEF,KAAK7C,EAAA+C,SAASyY,IACZxsB,EAAO3S,KAAKs+C,oBAAkC93B,GAC9C,MAEF,KAAK7C,EAAA+C,SAAS2Y,GACZ1sB,EAAO3S,KAAKu+C,mBAAgC/3B,GAC5C,MAEF,KAAK7C,EAAA+C,SAASsZ,OACZrtB,EAAO3S,KAAKw+C,uBAAwCh4B,GACpD,MAEF,KAAK7C,EAAA+C,SAASuZ,OACZttB,EAAO3S,KAAKy+C,uBAAwCj4B,GACpD,MAEF,KAAK7C,EAAA+C,SAASwZ,MACZvtB,EAAO3S,KAAK0+C,sBAAsCl4B,GAClD,MAEF,KAAK7C,EAAA+C,SAAS0Z,IACZztB,EAAO3S,KAAK2+C,oBAAkCn4B,GAC9C,MAEF,KAAK7C,EAAA+C,SAASiB,UACZhV,EAAO3S,KAAKq7C,yBAA4C70B,MAC7C7T,EAAO3S,KAAKL,OAAO+W,aAC9B,MAEF,KAAKiN,EAAA+C,SAAS8Z,KACZ7tB,EAAO3S,KAAK4+C,qBAAoCp4B,GAChD,MAEF,KAAK7C,EAAA+C,SAAS+Z,MACZ9tB,EAAO3S,KAAK6+C,sBAAsCr4B,GAClD,MAEF,KAAK7C,EAAA+C,SAASe,gBAGZ,GAAIznB,KAAK09B,iBAAmB19B,KAAK45C,cAC/B,OAAO55C,KAAKL,OAAO+W,YAIvB,QACE,MAAM,IAAIqH,MAAM,sBAIpB,OADA/d,KAAK8+C,iBAAiBnsC,EAAM6T,EAAUvjB,OAC/B0P,GAGTomC,EAAAr3C,UAAAq9C,kBAAA,SAAkBz4B,GAGhB,IAFA,IAAI04B,EAAgB14B,EAAWliB,OAC3B66C,EAAQ,IAAI/5C,MAAqB85C,GAC5B3+C,EAAI,EAAGA,EAAI2+C,IAAiB3+C,EACnC4+C,EAAM5+C,GAAKL,KAAKy7C,iBAAiBn1B,EAAWjmB,IAE9C,OAAO4+C,GAGTlG,EAAAr3C,UAAAs8C,sBAAA,SAAsBx3B,GACpB,IAAIF,EAAaE,EAAUF,WAO3BtmB,KAAK09B,gBAAgB3K,KAAO/yB,KAAK09B,gBAAgB3K,KAAK+K,qBAEtD,IAAIyM,EAAOvqC,KAAKL,OAAO6V,YAAY,KAAMxV,KAAK++C,kBAAkBz4B,GAAa1C,EAAAre,WAAWoQ,MACpFupC,EAAcl/C,KAAK09B,gBAAgB3K,KAAKzI,GAAE,GAO9C,OAJAtqB,KAAK09B,gBAAgB3K,KAAO/yB,KAAK09B,gBAAgB3K,KAAKiL,qBAClDkhB,GACFl/C,KAAK09B,gBAAgB3K,KAAK9K,IAAG,GAExBsiB,GAGTwO,EAAAr3C,UAAAu8C,sBAAA,SAAsBz3B,GACpB,GAAIA,EAAU/Q,MAKZ,OAJAzV,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACf3G,EAAU/Q,MAAMxS,OAEXjD,KAAKL,OAAOoY,oBAErB,IAAI8lB,EAAa79B,KAAK09B,gBAAgB3K,KAAK8K,WAC3C,OAAkB,MAAdA,GACF79B,KAAKoF,MACHqe,EAAAlhB,eAAe48C,qFACf34B,EAAUvjB,OAELjD,KAAKL,OAAOoY,sBAErB/X,KAAK09B,gBAAgB3K,KAAK9K,IAAG,GACtBjoB,KAAKL,OAAOkW,YAAYgoB,KAGjCkb,EAAAr3C,UAAAw8C,yBAAA,SAAyB13B,GACvB,GAAIA,EAAU/Q,MAKZ,OAJAzV,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACf3G,EAAU/Q,MAAMxS,OAEXjD,KAAKL,OAAOoY,oBAGrB,IAAI6lB,EAAgB59B,KAAK09B,gBAAgB3K,KAAK6K,cAC9C,OAAqB,MAAjBA,GACF59B,KAAKoF,MACHqe,EAAAlhB,eAAe68C,8EACf54B,EAAUvjB,OAELjD,KAAKL,OAAOoY,sBAErB/X,KAAK09B,gBAAgB3K,KAAK9K,IAAG,GACtBjoB,KAAKL,OAAOkW,YAAY+nB,KAGjCmb,EAAAr3C,UAAAy8C,mBAAA,SAAmB33B,GAIjB,IAAI/Q,EAAQzV,KAAK09B,gBAAgB1C,oBAC7BqkB,EAAqBr/C,KAAK09B,gBAAgB3K,KAAK8K,WAC/CyhB,EAAwBt/C,KAAK09B,gBAAgB3K,KAAK6K,cAClDC,EAAa79B,KAAK09B,gBAAgB3K,KAAK8K,WAAa,SAAWpoB,EAC/DmoB,EAAgB59B,KAAK09B,gBAAgB3K,KAAK6K,cAAgB,YAAcnoB,EAExEW,EAAOpW,KAAKy7C,iBAAiBj1B,EAAUA,WAG3CxmB,KAAK09B,gBAAgB3K,KAAK8K,WAAawhB,EACvCr/C,KAAK09B,gBAAgB3K,KAAK6K,cAAgB0hB,EAE1C,IAAIxpC,EAAYypC,EACdv/C,KAAKg8C,kBAAkBx1B,EAAU1Q,UAAW4N,EAAA2B,KAAK7G,IAAG,GACpDxe,KAAKk5C,YACLl5C,KAAKL,QAKP,OAFAK,KAAK09B,gBAAgBxC,oBAEdl7B,KAAKL,OAAO6V,YAAYqoB,GAC7B79B,KAAKL,OAAOwW,WAAWynB,EACrB59B,KAAKL,OAAO6V,YAAY,MACtBY,EACApW,KAAKL,OAAOkW,YAAY+nB,EAAe9nB,IACtC8N,EAAAre,WAAWoQ,QACfiO,EAAAre,WAAWoQ,OAGhBojC,EAAAr3C,UAAA08C,sBAAA,SAAsB53B,GACpB,OAAOxmB,KAAKL,OAAO+W,aAGrBqiC,EAAAr3C,UAAA28C,2BAAA,SAA2B73B,GACzB,IAAI7T,EAAO3S,KAAKg8C,kBAAkBx1B,EAAUvQ,WAAYyN,EAAA2B,KAAKa,KAAI,GAKjE,OAJIlmB,KAAKk5C,aAAex1B,EAAA2B,KAAKa,OAC3BvT,EAAO3S,KAAKL,OAAOqW,WAAWrD,GAC9B3S,KAAKk5C,YAAcx1B,EAAA2B,KAAKa,MAEnBvT,GAGTomC,EAAAr3C,UAAA48C,oBAAA,SAAoB93B,GAIlB,IAAI3hB,EAAU7E,KAAK09B,gBAAgB1C,oBACnCh7B,KAAK09B,gBAAgB3K,KAAO/yB,KAAK09B,gBAAgB3K,KAAK+K,qBACtD,IAAID,EAAa79B,KAAK09B,gBAAgB3K,KAAK8K,WAAa,SAAWh5B,EAC/D+4B,EAAgB59B,KAAK09B,gBAAgB3K,KAAK6K,cAAgB,YAAc/4B,EAGxEsT,EAAcqO,EAAUrO,YACxBnY,KAAKy7C,iBAA4Bj1B,EAAUrO,aAC3CnY,KAAKL,OAAO+W,YACZZ,EAAY0Q,EAAU1Q,UACtB9V,KAAKg8C,kBAA8Bx1B,EAAU1Q,UAAW4N,EAAA2B,KAAK7G,KAC7Dxe,KAAKL,OAAOmS,UAAU,GACtBo/B,EAAc1qB,EAAU0qB,YACxBlxC,KAAKg8C,kBAA8Bx1B,EAAU0qB,YAAaxtB,EAAA2B,KAAKa,MAC/DlmB,KAAKL,OAAO+W,YACZN,EAAOpW,KAAKy7C,iBAAiBj1B,EAAUA,WACvCg5B,GAAiBh5B,EAAU1Q,WAAa9V,KAAK09B,gBAAgB3K,KAAKzI,GAAE,GAIxEtqB,KAAK09B,gBAAgB3K,KAAO/yB,KAAK09B,gBAAgB3K,KAAKiL,qBACtDh+B,KAAK09B,gBAAgBxC,oBAErB,IAAIvoB,EAAO3S,KAAKL,OAAO6V,YAAYqoB,GACjC1lB,EACAnY,KAAKL,OAAOwW,WAAWynB,EAAe59B,KAAKL,OAAO6V,YAAY,MAC5DxV,KAAKL,OAAO2W,SAASR,EAAW9V,KAAKL,OAAO6V,YAAY,MACtDY,EACA86B,EACAlxC,KAAKL,OAAOkW,YAAY+nB,IACvBha,EAAAre,WAAWoQ,QACbiO,EAAAre,WAAWoQ,QACbiO,EAAAre,WAAWoQ,MAUd,OAPI6pC,IACFx/C,KAAK09B,gBAAgB3K,KAAK9K,IAAG,GAC7BtV,EAAO3S,KAAKL,OAAO6V,YAAY,MAC7B7C,EACA3S,KAAKL,OAAOoY,uBAGTpF,GAGTomC,EAAAr3C,UAAA68C,mBAAA,SAAmB/3B,GAGjB,IAAI1Q,EAAYypC,EACdv/C,KAAKg8C,kBAAkBx1B,EAAU1Q,UAAW4N,EAAA2B,KAAK7G,IAAG,GACpDxe,KAAKk5C,YACLl5C,KAAKL,QAIPK,KAAK09B,gBAAgB3K,KAAO/yB,KAAK09B,gBAAgB3K,KAAK+K,qBACtD,IAAIvnB,EAASvW,KAAKy7C,iBAAiBj1B,EAAUjQ,QACzCkpC,EAAgBz/C,KAAK09B,gBAAgB3K,KAAKzI,GAAE,GAChDtqB,KAAK09B,gBAAgB3K,KAAO/yB,KAAK09B,gBAAgB3K,KAAKiL,qBAEtD,IAAIxnB,EAAyB,EACzBkpC,GAAiB,EAUrB,OATIl5B,EAAUhQ,UACZxW,KAAK09B,gBAAgB3K,KAAO/yB,KAAK09B,gBAAgB3K,KAAK+K,qBACtDtnB,EAAUxW,KAAKy7C,iBAAiBj1B,EAAUhQ,SAC1CkpC,EAAiB1/C,KAAK09B,gBAAgB3K,KAAKzI,GAAE,GAC7CtqB,KAAK09B,gBAAgB3K,KAAO/yB,KAAK09B,gBAAgB3K,KAAKiL,sBAEpDyhB,GAAiBC,GACnB1/C,KAAK09B,gBAAgB3K,KAAK9K,IAAG,GAExBjoB,KAAKL,OAAO2W,SAASR,EAAWS,EAAQC,IAGjDuiC,EAAAr3C,UAAA88C,uBAAA,SAAuBh4B,GACrB,IAAIvQ,EAA4B,EAWhC,OAVIuQ,EAAUnlB,QACZ4U,EAAajW,KAAKg8C,kBAChBx1B,EAAUnlB,MACVrB,KAAK09B,gBAAgBnM,UAAU/Z,aAKnCxX,KAAK09B,gBAAgB3K,KAAK9K,IAAG,GAEtBjoB,KAAKL,OAAOiX,aAAaX,IAGlC8iC,EAAAr3C,UAAA+8C,uBAAA,SAAuBj4B,GAGrB,IAAI3hB,EAAU7E,KAAK09B,gBAAgB1C,oBAG/B2kB,EAAY3/C,KAAK09B,gBAAgBhD,aAAahX,EAAA2B,KAAKO,KACnDg6B,EAAWp5B,EAAUqrB,MAAMztC,OAG3By7C,EAAS,IAAI36C,MAAqB,EAAI06C,GAC1CC,EAAO,GAAK7/C,KAAKL,OAAOyV,eACtBuqC,EAAUtsC,MACVrT,KAAKg8C,kBAAkBx1B,EAAU1Q,UAAW4N,EAAA2B,KAAKO,MAMnD,IAFA,IAAIk6B,EAAa,EACbC,GAAgB,EACX1/C,EAAI,EAAGA,EAAIu/C,IAAYv/C,EAAG,EAC7B2/C,EAAQx5B,EAAUqrB,MAAMxxC,IAClBoV,MACRoqC,EAAOC,KAAgB9/C,KAAKL,OAAOkW,YAAY,OAASxV,EAAEsD,SAAS,IAAM,IAAMkB,EAC7E7E,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASo1C,MAChCjgD,KAAKL,OAAOyT,eAAeusC,EAAUtsC,MAAOuQ,EAAAre,WAAWwZ,KACvD/e,KAAKg8C,kBAAkBgE,EAAMvqC,MAAOiO,EAAA2B,KAAK7G,OAI7CuhC,EAAe1/C,EAInBL,KAAK09B,gBAAgB5C,cAAc6kB,GAGnCE,EAAOC,GAAc9/C,KAAKL,OAAOkW,aAAakqC,GAAgB,EACxD,OAASA,EAAap8C,SAAS,IAC/B,SACA,IAAMkB,GAGZ,IAAIq7C,EAAelgD,KAAKL,OAAO6V,YAAY,SAAW3Q,EAASg7C,EAAQj8B,EAAAre,WAAWoQ,MAC9E6pC,GAAgB,EACpB,IAASn/C,EAAI,EAAGA,EAAIu/C,IAAYv/C,EAAG,CACjC,IAAI2/C,EACA1/C,GADA0/C,EAAQx5B,EAAUqrB,MAAMxxC,IACdimB,WAAWliB,OACrBgS,EAAO,IAAIlR,MAAqB,EAAI5E,GACxC8V,EAAK,GAAK8pC,EAGVlgD,KAAK09B,gBAAgB3K,KAAO/yB,KAAK09B,gBAAgB3K,KAAK+K,qBAKtD,IAJA,IAAID,EAAa79B,KAAK09B,gBAAgB3K,KAAK8K,WAAa,SAAWh5B,EAE/Ds7C,EAAe9/C,GAAKu/C,EAAW,EAC/BQ,EAAaD,EAA4B,QAAU9/C,EAAI,GAAGsD,SAAS,IAAM,IAAMkB,EAAnDg5B,EACvBtX,EAAI,EAAGA,EAAIjmB,IAAKimB,EACvBnQ,EAAKmQ,EAAI,GAAKvmB,KAAKy7C,iBAAiBuE,EAAM15B,WAAWC,IAEjD45B,GAAgBngD,KAAK09B,gBAAgB3K,KAAKzI,GAAE,KAChDk1B,GAAgB,GAIlBx/C,KAAK09B,gBAAgB3K,KAAO/yB,KAAK09B,gBAAgB3K,KAAKiL,qBAEtDkiB,EAAelgD,KAAKL,OAAO6V,YAAY4qC,EAAWhqC,EAAMwN,EAAAre,WAAWoQ,MASrE,OAPA3V,KAAK09B,gBAAgBxC,oBAGjB6kB,GAAgB,GAAKP,GACvBx/C,KAAK09B,gBAAgB3K,KAAK9K,IAAG,GAGxBi4B,GAGTnH,EAAAr3C,UAAAg9C,sBAAA,SAAsBl4B,GASpB,OANAxmB,KAAK09B,gBAAgB3K,KAAK9K,IAAG,GAG7BjoB,KAAK09B,gBAAgB3K,KAAK9K,IAAG,GAGtBjoB,KAAKL,OAAOoY,qBAGrBghC,EAAAr3C,UAAAi9C,oBAAA,SAAoBn4B,GAClB,MAAM,IAAIzI,MAAM,oBASlBg7B,EAAAr3C,UAAA25C,yBAAA,SAAyB70B,EAA8B65B,QAAA,IAAAA,OAAA,GACrD,IAAI9wB,EAAe/I,EAAU+I,aACzB+wB,EAAkB/wB,EAAanrB,OAGnC,GAAIi8C,GACFrgD,KAAK09B,iBAAmB19B,KAAK45C,eAC7BpzB,EAAU8B,QAAU9B,EAAU8B,OAAO7B,MAAQ9C,EAAA+C,SAAS8D,OACrD,CAMD,IAAK,IAAInqB,EAAI,EAAGA,EAAIigD,IAAmBjgD,EACrCL,KAAK07C,yBAAyBnsB,EAAalvB,IAE7C,OAAO,EAIT,IAAIkgD,EAAe,IAAIr7C,MACvB,IAAS7E,EAAI,EAAGA,EAAIigD,IAAmBjgD,EAAG,CACxC,IAAIgoB,EAAckH,EAAalvB,GAC3BO,EAAOynB,EAAYznB,KAAKsD,KACxBoP,EAAoB,KACpBktC,EAAsB,EAC1B,GAAIn4B,EAAY/U,KAAM,CAKpB,KAJAA,EAAOtT,KAAKo1B,QAAQ3E,YAClBpI,EAAY/U,KACZtT,KAAK09B,gBAAgBrN,0BAEZ,SACPhI,EAAYlQ,cACdqoC,EAAOxgD,KAAKg8C,kBAAkB3zB,EAAYlQ,YAAa7E,QAEpD,KAAI+U,EAAYlQ,YAchB,CACLnY,KAAKoF,MACHqe,EAAAlhB,eAAew5C,cACf1zB,EAAYznB,KAAKqC,MAAMwvB,OAEzB,SAbA,GALA+tB,EAAOxgD,KAAKg8C,kBACV3zB,EAAYlQ,YACZuL,EAAA2B,KAAKa,KAAI,GAGPlmB,KAAKk5C,aAAex1B,EAAA2B,KAAKa,KAAM,CACjClmB,KAAKoF,MACHqe,EAAAlhB,eAAe05C,mCACf5zB,EAAYplB,MAAOjD,KAAKk5C,YAAYv1C,WAAY,UAElD,SAEF2P,EAAOtT,KAAKk5C,YAQd,GAAIv1B,EAAAgI,YAAYhI,EAAAiI,aAAakK,MAAOzN,EAAYyD,WAC9C,GAAI00B,EAAM,CAER,GADAA,EAAOxgD,KAAKq8C,wBAAwBmE,GAChC5hC,yBAAyB4hC,IAAS58B,EAAApe,aAAaqZ,MAAO,CACxD,IAAI4b,EAAQ,IAAIyO,EAAA7R,MAAMr3B,KAAKo1B,QAASx0B,GAAO,EAAG0S,GAC9C,OAAQwL,2BAA2B0hC,IACjC,KAAK58B,EAAAre,WAAWwZ,IACd0b,EAAQA,EAAMnE,yBAAyBtX,0BAA0BwhC,GAAO,GACxE,MAEF,KAAK58B,EAAAre,WAAW0Z,IACdwb,EAAQA,EAAMnE,yBACZpX,6BAA6BshC,GAC7BrhC,8BAA8BqhC,IAEhC,MAEF,KAAK58B,EAAAre,WAAW6Z,IACdqb,EAAQA,EAAM7D,uBAA4BvX,0BAA0BmhC,IACpE,MAEF,KAAK58B,EAAAre,WAAW+Z,IACdmb,EAAQA,EAAM7D,uBAAuBrX,0BAA0BihC,IAC/D,MAEF,QACE,MAAM,IAAIziC,MAAM,0BAIpB,IAAI0f,EAAez9B,KAAK09B,gBAAgB3K,KAAK0K,aAC7C,GAAKA,GACA,GAAIA,EAAa/S,IAAI9pB,GAKxB,OAJAZ,KAAKoF,MACHqe,EAAAlhB,eAAeooB,uBACftC,EAAYznB,KAAKqC,MAAOrC,GAEnB,OANU68B,EAAez9B,KAAK09B,gBAAgB3K,KAAK0K,aAAe,IAAIhZ,IAS/E,OADAgZ,EAAaxV,IAAIrnB,EAAM65B,GAChB,EAEPz6B,KAAKsF,QACHme,EAAAlhB,eAAe+5C,4DACfj0B,EAAYplB,YAIhBjD,KAAKoF,MACHqe,EAAAlhB,eAAek+C,wCACfp4B,EAAYplB,OAId0gB,EAAAgI,YAAYhI,EAAAiI,aAAakL,IAAKzO,EAAYyD,WAC5C9rB,KAAK09B,gBAAgB3K,KAAKmL,eAAet9B,EAAM0S,EAAM+U,EAAYznB,MAEjEZ,KAAK09B,gBAAgBlD,SAASlnB,EAAM1S,GAElC4/C,GACFD,EAAa97C,KAAKzE,KAAK0gD,2BAA2Br4B,EAAYznB,KAAM4/C,IAGxE,OAAOD,EAAan8C,OACO,GAAvBm8C,EAAan8C,OACXm8C,EAAa,GACbvgD,KAAKL,OAAO6V,YAAY,KAAM+qC,EAAc38B,EAAAre,WAAWoQ,MACzD,GAGNojC,EAAAr3C,UAAAk9C,qBAAA,SAAqBp4B,GACnB,OAAOxmB,KAAKg8C,kBAAkBx1B,EAAUvQ,WAAYyN,EAAA2B,KAAKa,KAAI,GAA2B,IAG1F6yB,EAAAr3C,UAAAm9C,sBAAA,SAAsBr4B,GAGpB,IAAI1Q,EAAYypC,EACdv/C,KAAKg8C,kBAAkBx1B,EAAU1Q,UAAW4N,EAAA2B,KAAK7G,IAAG,GACpDxe,KAAKk5C,YACLl5C,KAAKL,QAIH8V,EAAQzV,KAAK09B,gBAAgB1C,oBACjCh7B,KAAK09B,gBAAgB3K,KAAO/yB,KAAK09B,gBAAgB3K,KAAK+K,qBACtD,IAAID,EAAa79B,KAAK09B,gBAAgB3K,KAAK8K,WAAa,SAAWpoB,EAC/DmoB,EAAgB59B,KAAK09B,gBAAgB3K,KAAK6K,cAAgB,YAAcnoB,EAExEW,EAAOpW,KAAKy7C,iBAAiBj1B,EAAUA,WAK3CxmB,KAAK09B,gBAAgB3K,KAAO/yB,KAAK09B,gBAAgB3K,KAAKiL,qBACtDh+B,KAAK09B,gBAAgBxC,oBAErB,IAAIvoB,EAAO3S,KAAKL,OAAO6V,YAAYqoB,GACjC79B,KAAKL,OAAOwW,WAAWynB,EACrB59B,KAAKL,OAAO2W,SAASR,EAAW9V,KAAKL,OAAO6V,YAAY,MACtDY,EACApW,KAAKL,OAAOkW,YAAY+nB,IACvBha,EAAAre,WAAWoQ,SAEfiO,EAAAre,WAAWoQ,MASd,OAAOhD,GAUTomC,EAAAr3C,UAAA06C,sBAAA,SACEt0B,EACA64B,EACAC,GAGA,OADAr3B,OAAOzB,EAAQwC,GAAG4e,EAAA/e,aAAawM,WAE5BiqB,GACD94B,EAAQxU,KAAKgX,GAAE,IACfq2B,EAAer2B,GAAE,IACjBxC,EAAQxU,KAAK4iC,KAAOyK,EAAezK,MAC9Bl2C,KAAKk5C,YAAcyH,GAAgBl6B,MACnCzmB,KAAKk5C,YAAcpxB,EAAQxU,MAAMmT,MAEtC,OACA,OACE,IAAIo6B,EAAQ/4B,EAAQxU,KAAKgjC,yBAAyB5yB,EAAA2B,KAAK7G,KACvD,OAAOxe,KAAKL,OAAOmS,UACQ,GAAzBgW,EAAQuO,kBACJnb,QAAQ4M,EAAQ2O,uBAAyBoqB,GAASA,EAClD,GAGR,OACA,OACA,QACE,IAAIC,EAAOh5B,EAAQxU,KAAKijC,wBAAwB7yB,EAAA2B,KAAK7G,KACrD,OAAOxe,KAAKL,OAAOmS,UACQ,GAAzBgW,EAAQuO,kBACJnb,QAAQ4M,EAAQ2O,sBAAwBqqB,EACxC,GAGR,OACA,OACE,OAAO9gD,KAAKL,OAAOmS,UACQ,GAAzBgW,EAAQuO,kBACJnb,QAAQ4M,EAAQ2O,sBAChB,GAGR,OACA,OACE,IAAK3O,EAAQsN,QAAQhQ,QAAQ+0B,SAC3B,OAAOn6C,KAAKL,OAAOmS,UACQ,GAAzBgW,EAAQuO,kBACJnb,QAAQ4M,EAAQ2O,sBAChB,GAKV,OACA,OACE,OAAgC,GAAzB3O,EAAQuO,kBACXr2B,KAAKL,OAAOsS,UACViJ,QAAQ4M,EAAQ2O,sBAChBtb,SAAS2M,EAAQ2O,uBAEnBz2B,KAAKL,OAAOsS,UAAU,GAE5B,QACE,OAAOjS,KAAKL,OAAO0S,UAAgCyV,EAAS+O,oBAE9D,QACE,OAAO72B,KAAKL,OAAO4S,UAAgCuV,EAAS+O,oBAE9D,QACE,MAAM,IAAI9Y,MAAM,4BAKtBg7B,EAAAr3C,UAAAs6C,kBAAA,SACE/lC,EACA0qC,EACAI,EACAC,GAIA,IAAIruC,EACJ,YANA,IAAAouC,MAAA,QACA,IAAAC,OAAA,GAEAhhD,KAAKk5C,YAAcyH,EAGX1qC,EAAWwQ,MACjB,KAAK9C,EAAA+C,SAAS0N,UACZzhB,EAAO3S,KAAKihD,2BAAgDhrC,EAAY0qC,GACxE,MAEF,KAAKh9B,EAAA+C,SAAS4N,OACZ3hB,EAAO3S,KAAKkhD,wBAA0CjrC,EAAY0qC,EAAgBK,GAClF,MAEF,KAAKr9B,EAAA+C,SAASqO,KACZpiB,EAAO3S,KAAKmhD,sBAAsClrC,EAAY0qC,GAC9D,MAEF,KAAKh9B,EAAA+C,SAASua,MACZtuB,EAAO3S,KAAKohD,uBAAwCnrC,EAAY0qC,GAChE,MAEF,KAAKh9B,EAAA+C,SAASoO,cACZniB,EAAO3S,KAAKqhD,+BAAwDprC,EAAY0qC,GAChF,MAEF,KAAKh9B,EAAA+C,SAAS2S,SACd,KAAK1V,EAAA+C,SAASktB,cACZjhC,EAAO3S,KAAKshD,0BAA8CrrC,EAAY0qC,GACtE,MAEF,KAAKh9B,EAAA+C,SAASkO,WACd,KAAKjR,EAAA+C,SAASuY,MACd,KAAKtb,EAAA+C,SAASmZ,KACd,KAAKlc,EAAA+C,SAAS6N,KACd,KAAK5Q,EAAA+C,SAASyZ,KACZxtB,EAAO3S,KAAKuhD,4BACYtrC,EACtB0qC,EACc,GAAdI,GAEF,MAEF,KAAKp9B,EAAA+C,SAAS6G,QACZ5a,EAAO3S,KAAKwhD,yBAA4CvrC,EAAY0qC,GACpE,MAEF,KAAKh9B,EAAA+C,SAASkZ,IACZjtB,EAAO3S,KAAKyhD,qBAAoCxrC,EAAY0qC,GAC5D,MAEF,KAAKh9B,EAAA+C,SAASyN,cACZxhB,EAAO3S,KAAK0hD,+BACezrC,EACzB0qC,EACAK,GAEF,MAEF,KAAKr9B,EAAA+C,SAASmO,eACZliB,EAAO3S,KAAK2hD,gCACgB1rC,EAC1B0qC,EACc,GAAdI,GAEF,MAEF,KAAKp9B,EAAA+C,SAASmtB,QACZlhC,EAAO3S,KAAK4hD,yBAA4C3rC,EAAY0qC,GACpE,MAEF,KAAKh9B,EAAA+C,SAASqtB,aACZphC,EAAO3S,KAAK6hD,8BAAsD5rC,EAAY0qC,GAC9E,MAEF,KAAKh9B,EAAA+C,SAASstB,YACZrhC,EAAO3S,KAAK8hD,6BAAoD7rC,EAAY0qC,EAAgBK,GAC5F,MAEF,QACE,MAAM,IAAIjjC,MAAM,uBAUpB,OANkB,GAAdgjC,GAAyC/gD,KAAKk5C,aAAeyH,IAC/DhuC,EAAO3S,KAAK+hD,kBAAkBpvC,EAAM3S,KAAKk5C,YAAayH,EAAgBI,EAAgB9qC,GACtFjW,KAAKk5C,YAAcyH,GAGrB3gD,KAAK8+C,iBAAiBnsC,EAAMsD,EAAWhT,OAChC0P,GAGTomC,EAAAr3C,UAAAsgD,4BAAA,SAA4B/rC,EAAwB0qC,EAAsBK,GACxE,YADwE,IAAAA,OAAA,GACjEhhD,KAAKg8C,kBACV/lC,EACA0qC,GAAkBj9B,EAAA2B,KAAKa,KACnBxC,EAAA2B,KAAK7G,IACLmiC,EAAc,EAElBK,IAIJjI,EAAAr3C,UAAAugD,qBAAA,SACEhsC,EACA0qC,EACAI,GAEA,YAFA,IAAAA,MAAA,GAEO/gD,KAAKq8C,wBAAwBr8C,KAAKg8C,kBAAkB/lC,EAAY0qC,EAAgBI,KAGzFhI,EAAAr3C,UAAA26C,wBAAA,SAAwB1pC,GACtB,IAAIupC,EAAal8C,KAAKk5C,YAAYte,eAC9Bof,EAAUh6C,KAAKL,OAAOiS,2BAA2BsqC,EAAY,MAE5DlC,IACHA,EAAUh6C,KAAKL,OAAO0R,gBAAgBrR,KAAKk5C,YAAY1d,oBAAqB0gB,EAAY,OAG1F,IAAInC,EAAU/5C,KAAKL,OAAO0Y,YAAY,eAAgB2hC,EAAS,KAAMrnC,GACrE3S,KAAKL,OAAO8c,WAAY,cAAgBs9B,GACxC,IAAIv8B,EAAM0kC,yBAAyBnI,GAMnC,OALA/5C,KAAKL,OAAO6Y,eAAe,gBAKpBgF,GAGTu7B,EAAAr3C,UAAAqgD,kBAAA,SACEpvC,EACAwvC,EACA9tB,EACA0sB,EACA9nB,GAEA,OAAkB,GAAd8nB,GACFx3B,QAAO,EAAO,0BACP5W,GAIQ,IAAbwvC,EAAS17B,MACXzmB,KAAKoF,MACHqe,EAAAlhB,eAAe05C,mCACfhjB,EAAWh2B,MAAOk/C,EAASx+C,WAAY0wB,EAAO1wB,YAEzC3D,KAAKL,OAAOoY,qBAIN,IAAXsc,EAAO5N,KACFzmB,KAAKL,OAAOqW,WAAWrD,IAGd,GAAdouC,GAA8CoB,EAAShlB,eAAe9I,IACxEr0B,KAAKoF,MACHqe,EAAAlhB,eAAe6/C,sDACfnpB,EAAWh2B,MAAOk/C,EAASx+C,WAAY0wB,EAAO1wB,YAI9Cw+C,EAAS73B,GAAE,GAGT+J,EAAO/J,GAAE,GACM,IAAb63B,EAAS17B,KAGI,IAAX4N,EAAO5N,OACT9T,EAAO3S,KAAKL,OAAO8S,YAAYmR,EAAA/b,QAAQw6C,WAAY1vC,IAMjC,IAAX0hB,EAAO5N,OAChB9T,EAAO3S,KAAKL,OAAO8S,YAAYmR,EAAA/b,QAAQy6C,UAAW3vC,IAM3C0hB,EAAO/J,GAAE,GAGD,IAAb63B,EAAS17B,KACP4N,EAAO/J,GAAE,GACP+J,EAAO/J,GAAE,IACX3X,EAAO3S,KAAKL,OAAO8S,YAAYmR,EAAA/b,QAAQ06C,cAAe5vC,IAEtDA,EAAO3S,KAAKL,OAAO8S,YAAYmR,EAAA/b,QAAQ26C,cAAe7vC,GAClD0hB,EAAO/J,GAAE,MACX3X,EAAO8vC,EAAqB9vC,EAAM0hB,EAAQr0B,KAAKL,UAI/C00B,EAAO/J,GAAE,IACX3X,EAAO3S,KAAKL,OAAO8S,YAAYmR,EAAA/b,QAAQ66C,cAAe/vC,IAEtDA,EAAO3S,KAAKL,OAAO8S,YAAYmR,EAAA/b,QAAQ86C,cAAehwC,GAClD0hB,EAAO/J,GAAE,MACX3X,EAAO8vC,EAAqB9vC,EAAM0hB,EAAQr0B,KAAKL,UAOjD00B,EAAO/J,GAAE,GACP+J,EAAO/J,GAAE,IACX3X,EAAO3S,KAAKL,OAAO8S,YAAYmR,EAAA/b,QAAQ+6C,cAAejwC,IAEtDA,EAAO3S,KAAKL,OAAO8S,YAAYmR,EAAA/b,QAAQg7C,cAAelwC,GAClD0hB,EAAO/J,GAAE,MACX3X,EAAO8vC,EAAqB9vC,EAAM0hB,EAAQr0B,KAAKL,UAI/C00B,EAAO/J,GAAE,IACX3X,EAAO3S,KAAKL,OAAO8S,YAAYmR,EAAA/b,QAAQi7C,cAAenwC,IAEtDA,EAAO3S,KAAKL,OAAO8S,YAAYmR,EAAA/b,QAAQk7C,cAAepwC,GAClD0hB,EAAO/J,GAAE,MACX3X,EAAO8vC,EAAqB9vC,EAAM0hB,EAAQr0B,KAAKL,WAQvD4pB,OAAmB,GAAZ8K,EAAOgB,MAAyB,sBACvC1iB,EAAO3S,KAAKL,OAAOqW,WAAWrD,IAIvBwvC,EAAS73B,GAAE,IAAuB+J,EAAO/J,GAAE,GAKhD3X,EAFW,IAAX0hB,EAAO5N,KACL07B,EAAS73B,GAAE,IACNtqB,KAAKL,OAAO8S,YACjB0vC,EAAS73B,GAAE,GACP1G,EAAA/b,QAAQm7C,gBACRp/B,EAAA/b,QAAQo7C,gBACZtwC,GAGK3S,KAAKL,OAAO8S,YACjB0vC,EAAS73B,GAAE,GACP1G,EAAA/b,QAAQq7C,gBACRt/B,EAAA/b,QAAQs7C,gBACZxwC,GAMAwvC,EAAS73B,GAAE,IACNtqB,KAAKL,OAAO8S,YACjB0vC,EAAS73B,GAAE,GACP1G,EAAA/b,QAAQu7C,gBACRx/B,EAAA/b,QAAQw7C,gBACZ1wC,GAGK3S,KAAKL,OAAO8S,YACjB0vC,EAAS73B,GAAE,GACP1G,EAAA/b,QAAQy7C,gBACR1/B,EAAA/b,QAAQ07C,gBACZ5wC,GAOFwvC,EAAS73B,GAAE,IAGR+J,EAAO/J,GAAE,MACZ3X,EAAO3S,KAAKL,OAAO8S,YAAYmR,EAAA/b,QAAQ27C,QAAS7wC,GAC5C0hB,EAAO/J,GAAE,MACX3X,EAAO8vC,EAAqB9vC,EAAM0hB,EAAQr0B,KAAKL,UAK1C00B,EAAO/J,GAAE,IAClB3X,EAAO3S,KAAKL,OAAO8S,YAAY4hB,EAAO/J,GAAE,GAAqB1G,EAAA/b,QAAQ47C,UAAY7/B,EAAA/b,QAAQ67C,UAAW/wC,GAIpG0hB,EAAO/J,GAAE,MAEP63B,EAASjM,KAAO7hB,EAAO6hB,MAErBiM,EAASjM,MAAQ7hB,EAAO6hB,MACxBiM,EAAS73B,GAAE,IAAsB+J,EAAO/J,GAAE,MAI9C3X,EAAO8vC,EAAqB9vC,EAAM0hB,EAAQr0B,KAAKL,SAMnDK,KAAKk5C,YAAc7kB,EACZ1hB,IAGTomC,EAAAr3C,UAAAu/C,2BAAA,SAA2BhrC,EAAiC0qC,GAC1D,IAAItsB,EAASr0B,KAAKo1B,QAAQ3E,YACxBxa,EAAWoe,OACXr0B,KAAK09B,gBAAgBrN,yBAEvB,OAAKgE,EACEr0B,KAAKg8C,kBAAkB/lC,EAAWA,WAAYoe,EAAM,GADvCr0B,KAAKL,OAAOoY,qBAIlCghC,EAAAr3C,UAAAw/C,wBAAA,SACEjrC,EACA0qC,EACAK,GAGA,IAAIluC,EACA6wC,EACA5wC,EACA6wC,EACAC,EAEA/tC,EACAnD,OAVJ,IAAAquC,OAAA,GAWA,IAAI8C,GAAW,EACXC,GAAoB,EACpBpE,EAA0B,KAE9B,OAAQ1pC,EAAWq1B,UACjB,KAAKnC,EAAAhL,MAAM+C,SAKT,GAJApuB,EAAO9S,KAAKgiD,4BAA4B/rC,EAAWnD,KAAM6tC,GACzDgD,EAAW3jD,KAAKk5C,YAChBnmC,EAAQ/S,KAAKgiD,4BAA4B/rC,EAAWlD,MAAO4wC,GAC3DC,EAAY5jD,KAAKk5C,cACb2K,EAAangC,EAAA2B,KAAKyxB,iBAAiB6M,EAAUC,GAAW,IAS1D,OALA5jD,KAAKoF,MACHqe,EAAAlhB,eAAeyhD,8CACf/tC,EAAWhT,MAAO,IAAK0gD,EAAShgD,WAAYigD,EAAUjgD,YAExD3D,KAAKk5C,YAAcyH,EACZ3gD,KAAKL,OAAOoY,oBAErB,OAVEjF,EAAO9S,KAAK+hD,kBAAkBjvC,EAAM6wC,EAAUE,EAAU,EAA2B5tC,EAAWnD,MAC9FC,EAAQ/S,KAAK+hD,kBAAkBhvC,EAAO6wC,EAAWC,EAAU,EAA2B5tC,EAAWlD,OAS3F8wC,EAAWp9B,MACjB,OACA,OACA,OACE9T,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASo5C,MAAOnxC,EAAMC,GACtD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASq5C,MAAOpxC,EAAMC,GACtD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASq5C,MACTtgC,EAAA/Y,SAASo5C,MACbnxC,EACAC,GAEF,MAEF,OACA,OACA,OACA,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASs5C,MAAOrxC,EAAMC,GACtD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASu5C,MACTxgC,EAAA/Y,SAASs5C,MACbrxC,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASu5C,MAAOtxC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASw5C,MAAOvxC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASy5C,MAAOxxC,EAAMC,GACtD,MAEF,QAKE,MAJA/S,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,0BAGpB/d,KAAKk5C,YAAcx1B,EAAA2B,KAAKU,KACxB,MAEF,KAAKojB,EAAAhL,MAAMgD,YAKT,GAJAruB,EAAO9S,KAAKgiD,4BAA4B/rC,EAAWnD,KAAM6tC,GACzDgD,EAAW3jD,KAAKk5C,YAChBnmC,EAAQ/S,KAAKgiD,4BAA4B/rC,EAAWlD,MAAO4wC,GAC3DC,EAAY5jD,KAAKk5C,cACb2K,EAAangC,EAAA2B,KAAKyxB,iBAAiB6M,EAAUC,GAAW,IAS1D,OALA5jD,KAAKoF,MACHqe,EAAAlhB,eAAeyhD,8CACf/tC,EAAWhT,MAAO,IAAK0gD,EAAShgD,WAAYigD,EAAUjgD,YAExD3D,KAAKk5C,YAAcyH,EACZ3gD,KAAKL,OAAOoY,oBAErB,OAVEjF,EAAO9S,KAAK+hD,kBAAkBjvC,EAAM6wC,EAAUE,EAAU,EAA2B5tC,EAAWnD,MAC9FC,EAAQ/S,KAAK+hD,kBAAkBhvC,EAAO6wC,EAAWC,EAAU,EAA2B5tC,EAAWlD,OAS3F8wC,EAAWp9B,MACjB,OACA,OACA,OACE9T,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS05C,MAAOzxC,EAAMC,GACtD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAAS25C,MACT5gC,EAAA/Y,SAAS05C,MACbzxC,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS25C,MAAO1xC,EAAMC,GACtD,MAEF,OACA,OACA,OACA,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS45C,MAAO3xC,EAAMC,GACtD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAAS65C,MACT9gC,EAAA/Y,SAAS45C,MACb3xC,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS65C,MAAO5xC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS85C,MAAO7xC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS+5C,MAAO9xC,EAAMC,GACtD,MAEF,QAKE,MAJA/S,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,0BAGpB/d,KAAKk5C,YAAcx1B,EAAA2B,KAAKU,KACxB,MAEF,KAAKojB,EAAAhL,MAAMiD,gBAKT,GAJAtuB,EAAO9S,KAAKgiD,4BAA4B/rC,EAAWnD,KAAM6tC,GACzDgD,EAAW3jD,KAAKk5C,YAChBnmC,EAAQ/S,KAAKgiD,4BAA4B/rC,EAAWlD,MAAO4wC,GAC3DC,EAAY5jD,KAAKk5C,cACb2K,EAAangC,EAAA2B,KAAKyxB,iBAAiB6M,EAAUC,GAAW,IAS1D,OALA5jD,KAAKoF,MACHqe,EAAAlhB,eAAeyhD,8CACf/tC,EAAWhT,MAAO,KAAM0gD,EAAShgD,WAAYigD,EAAUjgD,YAEzD3D,KAAKk5C,YAAcyH,EACZ3gD,KAAKL,OAAOoY,oBAErB,OAVEjF,EAAO9S,KAAK+hD,kBAAkBjvC,EAAM6wC,EAAUE,EAAU,EAA2B5tC,EAAWnD,MAC9FC,EAAQ/S,KAAK+hD,kBAAkBhvC,EAAO6wC,EAAWC,EAAU,EAA2B5tC,EAAWlD,OAS3F8wC,EAAWp9B,MACjB,OACA,OACA,OACE9T,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASg6C,MAAO/xC,EAAMC,GACtD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASi6C,MACTlhC,EAAA/Y,SAASg6C,MACb/xC,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASi6C,MAAOhyC,EAAMC,GACtD,MAEF,OACA,OACA,OACA,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASk6C,MAAOjyC,EAAMC,GACtD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASm6C,MACTphC,EAAA/Y,SAASk6C,MACbjyC,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASm6C,MAAOlyC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASo6C,MAAOnyC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASq6C,MAAOpyC,EAAMC,GACtD,MAEF,QAKE,MAJA/S,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,0BAGpB/d,KAAKk5C,YAAcx1B,EAAA2B,KAAKU,KACxB,MAEF,KAAKojB,EAAAhL,MAAMkD,mBAKT,GAJAvuB,EAAO9S,KAAKgiD,4BAA4B/rC,EAAWnD,KAAM6tC,GACzDgD,EAAW3jD,KAAKk5C,YAChBnmC,EAAQ/S,KAAKgiD,4BAA4B/rC,EAAWlD,MAAO4wC,GAC3DC,EAAY5jD,KAAKk5C,cACb2K,EAAangC,EAAA2B,KAAKyxB,iBAAiB6M,EAAUC,GAAW,IAS1D,OALA5jD,KAAKoF,MACHqe,EAAAlhB,eAAeyhD,8CACf/tC,EAAWhT,MAAO,KAAM0gD,EAAShgD,WAAYigD,EAAUjgD,YAEzD3D,KAAKk5C,YAAcyH,EACZ3gD,KAAKL,OAAOoY,oBAErB,OAVEjF,EAAO9S,KAAK+hD,kBAAkBjvC,EAAM6wC,EAAUE,EAAU,EAA2B5tC,EAAWnD,MAC9FC,EAAQ/S,KAAK+hD,kBAAkBhvC,EAAO6wC,EAAWC,EAAU,EAA2B5tC,EAAWlD,OAS3F8wC,EAAWp9B,MACjB,OACA,OACA,OACE9T,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASs6C,MAAOryC,EAAMC,GACtD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASu6C,MACTxhC,EAAA/Y,SAASs6C,MACbryC,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASu6C,MAAOtyC,EAAMC,GACtD,MAEF,OACA,OACA,OACA,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASw6C,MAAOvyC,EAAMC,GACtD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASy6C,MACT1hC,EAAA/Y,SAASw6C,MACbvyC,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASy6C,MAAOxyC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS06C,MAAOzyC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS26C,MAAO1yC,EAAMC,GACtD,MAEF,QAKE,MAJA/S,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,0BAGpB/d,KAAKk5C,YAAcx1B,EAAA2B,KAAKU,KACxB,MAGF,KAAKojB,EAAAhL,MAAMqD,qBAEX,KAAK2H,EAAAhL,MAAMmD,cAUT,GAJAxuB,EAAO9S,KAAKgiD,4BAA4B/rC,EAAWnD,KAAM6tC,GACzDgD,EAAW3jD,KAAKk5C,YAChBnmC,EAAQ/S,KAAKgiD,4BAA4B/rC,EAAWlD,MAAO4wC,GAC3DC,EAAY5jD,KAAKk5C,cACb2K,EAAangC,EAAA2B,KAAKyxB,iBAAiB6M,EAAUC,GAAW,IAS1D,OALA5jD,KAAKoF,MACHqe,EAAAlhB,eAAeyhD,8CACf/tC,EAAWhT,MAAOkmC,EAAAhL,MAAM4C,iBAAiB9qB,EAAWq1B,UAAWqY,EAAShgD,WAAYigD,EAAUjgD,YAEhG3D,KAAKk5C,YAAcyH,EACZ3gD,KAAKL,OAAOoY,oBAErB,OAVEjF,EAAO9S,KAAK+hD,kBAAkBjvC,EAAM6wC,EAAUE,EAAU,EAA2B5tC,EAAWnD,MAC9FC,EAAQ/S,KAAK+hD,kBAAkBhvC,EAAO6wC,EAAWC,EAAU,EAA2B5tC,EAAWlD,OAS3F8wC,EAAWp9B,MACjB,OACA,OACA,OACA,OACA,OACA,OACA,QACE9T,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASo1C,MAAOntC,EAAMC,GACtD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAAS46C,MACT7hC,EAAA/Y,SAASo1C,MACbntC,EACAC,GAEF,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS46C,MAAO3yC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS66C,MAAO5yC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS86C,MAAO7yC,EAAMC,GACtD,MAEF,QAKE,MAJA/S,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,0BAGpB/d,KAAKk5C,YAAcx1B,EAAA2B,KAAKU,KACxB,MAEF,KAAKojB,EAAAhL,MAAMsD,0BAEX,KAAK0H,EAAAhL,MAAMoD,mBAKT,GAJAzuB,EAAO9S,KAAKgiD,4BAA4B/rC,EAAWnD,KAAM6tC,GACzDgD,EAAW3jD,KAAKk5C,YAChBnmC,EAAQ/S,KAAKgiD,4BAA4B/rC,EAAWlD,MAAO4wC,GAC3DC,EAAY5jD,KAAKk5C,cACb2K,EAAangC,EAAA2B,KAAKyxB,iBAAiB6M,EAAUC,GAAW,IAS1D,OALA5jD,KAAKoF,MACHqe,EAAAlhB,eAAeyhD,8CACf/tC,EAAWhT,MAAOkmC,EAAAhL,MAAM4C,iBAAiB9qB,EAAWq1B,UAAWqY,EAAShgD,WAAYigD,EAAUjgD,YAEhG3D,KAAKk5C,YAAcyH,EACZ3gD,KAAKL,OAAOoY,oBAErB,OAVEjF,EAAO9S,KAAK+hD,kBAAkBjvC,EAAM6wC,EAAUE,EAAU,EAA2B5tC,EAAWnD,MAC9FC,EAAQ/S,KAAK+hD,kBAAkBhvC,EAAO6wC,EAAWC,EAAU,EAA2B5tC,EAAWlD,OAS3F8wC,EAAWp9B,MACjB,OACA,OACA,OACA,OACA,OACA,OACA,QACE9T,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS+6C,MAAO9yC,EAAMC,GACtD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASg7C,MACTjiC,EAAA/Y,SAAS+6C,MACb9yC,EACAC,GAEF,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASg7C,MAAO/yC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASi7C,MAAOhzC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASk7C,MAAOjzC,EAAMC,GACtD,MAEF,QAKE,MAJA/S,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,0BAGpB/d,KAAKk5C,YAAcx1B,EAAA2B,KAAKU,KACxB,MAEF,KAAKojB,EAAAhL,MAAMyE,OACT,OAAO5iC,KAAKgmD,kBAAkB/vC,EAAWnD,KAAMmD,EAAWlD,MAAO4tC,GAEnE,KAAKxX,EAAAhL,MAAM0E,YAAaihB,GAAW,EACnC,KAAK3a,EAAAhL,MAAMuD,KAMT,GALA5uB,EAAO9S,KAAKgiD,4BACV/rC,EAAWnD,KACX6tC,GACA,GAEEmD,EACF/wC,EAAQ/S,KAAKg8C,kBACX/lC,EAAWlD,MACX/S,KAAKk5C,YAAW,GAEhB,OAEG,CAQL,GAPAyK,EAAW3jD,KAAKk5C,YAChBnmC,EAAQ/S,KAAKgiD,4BACX/rC,EAAWlD,MACX4wC,GACA,GAEFC,EAAY5jD,KAAKk5C,cACb2K,EAAangC,EAAA2B,KAAKyxB,iBAAiB6M,EAAUC,GAAW,IAS1D,OALA5jD,KAAKoF,MACHqe,EAAAlhB,eAAeyhD,8CACf/tC,EAAWhT,MAAO,IAAK0gD,EAAShgD,WAAYigD,EAAUjgD,YAExD3D,KAAKk5C,YAAcyH,EACZ3gD,KAAKL,OAAOoY,oBARnBjF,EAAO9S,KAAK+hD,kBAAkBjvC,EAAM6wC,EAAUE,EAAU,EAA2B5tC,EAAWnD,MAC9FC,EAAQ/S,KAAK+hD,kBAAkBhvC,EAAO6wC,EAAWC,EAAU,EAA2B5tC,EAAWlD,OAUrG,OAAQ/S,KAAKk5C,YAAYzyB,MACvB,OACA,OACA,OACA,OACA,QAAoBs9B,GAAoB,EACxC,OACA,OACEpxC,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS+xC,OAAQ9pC,EAAMC,GACvD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASo7C,OACTriC,EAAA/Y,SAAS+xC,OACb9pC,EACAC,GAEF,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASo7C,OAAQnzC,EAAMC,GACvD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASq7C,OAAQpzC,EAAMC,GACvD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASs7C,OAAQrzC,EAAMC,GACvD,MAEF,QACE,MAAM,IAAIgL,MAAM,0BAGpB,MAEF,KAAKorB,EAAAhL,MAAM2E,aAAcghB,GAAW,EACpC,KAAK3a,EAAAhL,MAAMwD,MAMT,GALA7uB,EAAO9S,KAAKgiD,4BACV/rC,EAAWnD,KACX6tC,GACA,GAEEmD,EACF/wC,EAAQ/S,KAAKg8C,kBACX/lC,EAAWlD,MACX/S,KAAKk5C,YAAW,GAEhB,OAEG,CAQL,GAPAyK,EAAW3jD,KAAKk5C,YAChBnmC,EAAQ/S,KAAKgiD,4BACX/rC,EAAWlD,MACX4wC,GACA,GAEFC,EAAY5jD,KAAKk5C,cACb2K,EAAangC,EAAA2B,KAAKyxB,iBAAiB6M,EAAUC,GAAW,IAS1D,OALA5jD,KAAKoF,MACHqe,EAAAlhB,eAAeyhD,8CACf/tC,EAAWhT,MAAO,IAAK0gD,EAAShgD,WAAYigD,EAAUjgD,YAExD3D,KAAKk5C,YAAcyH,EACZ3gD,KAAKL,OAAOoY,oBARnBjF,EAAO9S,KAAK+hD,kBAAkBjvC,EAAM6wC,EAAUE,EAAU,EAA2B5tC,EAAWnD,MAC9FC,EAAQ/S,KAAK+hD,kBAAkBhvC,EAAO6wC,EAAWC,EAAU,EAA2B5tC,EAAWlD,OAUrG,OAAQ/S,KAAKk5C,YAAYzyB,MACvB,OACA,OACA,OACA,OACA,QAAoBs9B,GAAoB,EACxC,OACA,OACEpxC,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASu7C,OAAQtzC,EAAMC,GACvD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASw7C,OACTziC,EAAA/Y,SAASu7C,OACbtzC,EACAC,GAEF,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASw7C,OAAQvzC,EAAMC,GACvD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASy7C,OAAQxzC,EAAMC,GACvD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS07C,OAAQzzC,EAAMC,GACvD,MAEF,QAKE,MAJA/S,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,0BAGpB,MAEF,KAAKorB,EAAAhL,MAAM4E,gBAAiB+gB,GAAW,EACvC,KAAK3a,EAAAhL,MAAM0D,SAMT,GALA/uB,EAAO9S,KAAKgiD,4BACV/rC,EAAWnD,KACX6tC,GACA,GAEEmD,EACF/wC,EAAQ/S,KAAKg8C,kBACX/lC,EAAWlD,MACX/S,KAAKk5C,YAAW,GAEhB,OAEG,CAQL,GAPAyK,EAAW3jD,KAAKk5C,YAChBnmC,EAAQ/S,KAAKgiD,4BACX/rC,EAAWlD,MACX4wC,GACA,GAEFC,EAAY5jD,KAAKk5C,cACb2K,EAAangC,EAAA2B,KAAKyxB,iBAAiB6M,EAAUC,GAAW,IAS1D,OALA5jD,KAAKoF,MACHqe,EAAAlhB,eAAeyhD,8CACf/tC,EAAWhT,MAAO,IAAK0gD,EAAShgD,WAAYigD,EAAUjgD,YAExD3D,KAAKk5C,YAAcyH,EACZ3gD,KAAKL,OAAOoY,oBARnBjF,EAAO9S,KAAK+hD,kBAAkBjvC,EAAM6wC,EAAUE,EAAU,EAA2B5tC,EAAWnD,MAC9FC,EAAQ/S,KAAK+hD,kBAAkBhvC,EAAO6wC,EAAWC,EAAU,EAA2B5tC,EAAWlD,OAUrG,OAAQ/S,KAAKk5C,YAAYzyB,MACvB,OACA,OACA,OACA,OACA,QAAoBs9B,GAAoB,EACxC,OACA,OACEpxC,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS27C,OAAQ1zC,EAAMC,GACvD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAAS47C,OACT7iC,EAAA/Y,SAAS27C,OACb1zC,EACAC,GAEF,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS47C,OAAQ3zC,EAAMC,GACvD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS67C,OAAQ5zC,EAAMC,GACvD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS87C,OAAQ7zC,EAAMC,GACvD,MAEF,QAKE,MAJA/S,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,0BAGpB,MAEF,KAAKorB,EAAAhL,MAAM8E,aAAc6gB,GAAW,EACpC,KAAK3a,EAAAhL,MAAM2D,MAMT,GALAhvB,EAAO9S,KAAKgiD,4BACV/rC,EAAWnD,KACX6tC,GACA,GAEEmD,EACF/wC,EAAQ/S,KAAKg8C,kBACX/lC,EAAWlD,MACX/S,KAAKk5C,YAAW,GAEhB,OAEG,CAQL,GAPAyK,EAAW3jD,KAAKk5C,YAChBnmC,EAAQ/S,KAAKgiD,4BACX/rC,EAAWlD,MACX4wC,GACA,GAEFC,EAAY5jD,KAAKk5C,cACb2K,EAAangC,EAAA2B,KAAKyxB,iBAAiB6M,EAAUC,GAAW,IAS1D,OALA5jD,KAAKoF,MACHqe,EAAAlhB,eAAeyhD,8CACf/tC,EAAWhT,MAAO,IAAK0gD,EAAShgD,WAAYigD,EAAUjgD,YAExD3D,KAAKk5C,YAAcyH,EACZ3gD,KAAKL,OAAOoY,oBARnBjF,EAAO9S,KAAK+hD,kBAAkBjvC,EAAM6wC,EAAUE,EAAU,EAA2B5tC,EAAWnD,MAC9FC,EAAQ/S,KAAK+hD,kBAAkBhvC,EAAO6wC,EAAWC,EAAU,EAA2B5tC,EAAWlD,OAUrG,OAAQ/S,KAAKk5C,YAAYzyB,MACvB,OACA,OAAmBs9B,GAAoB,EACvC,OACEpxC,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS+7C,OAAQ9zC,EAAMC,GACvD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASg8C,OACTjjC,EAAA/Y,SAAS+7C,OACb9zC,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASg8C,OAAQ/zC,EAAMC,GACvD,MAEF,OACA,OACA,QAAoBgxC,GAAoB,EACxC,OACEpxC,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASi8C,OAAQh0C,EAAMC,GACvD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASk8C,OACTnjC,EAAA/Y,SAASi8C,OACbh0C,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASk8C,OAAQj0C,EAAMC,GACvD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASm8C,OAAQl0C,EAAMC,GACvD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASo8C,OAAQn0C,EAAMC,GACvD,MAEF,QAKE,MAJA/S,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,0BAGpB,MAEF,KAAKorB,EAAAhL,MAAM+E,eAAgB4gB,GAAW,EACtC,KAAK3a,EAAAhL,MAAM4D,QAMT,GALAjvB,EAAO9S,KAAKgiD,4BACV/rC,EAAWnD,KACX6tC,GACA,GAEEmD,EACF/wC,EAAQ/S,KAAKg8C,kBACX/lC,EAAWlD,MACX/S,KAAKk5C,YAAW,GAEhB,OAEG,CAQL,GAPAyK,EAAW3jD,KAAKk5C,YAChBnmC,EAAQ/S,KAAKgiD,4BACX/rC,EAAWlD,MACX4wC,GACA,GAEFC,EAAY5jD,KAAKk5C,cACb2K,EAAangC,EAAA2B,KAAKyxB,iBAAiB6M,EAAUC,GAAW,IAS1D,OALA5jD,KAAKoF,MACHqe,EAAAlhB,eAAeyhD,8CACf/tC,EAAWhT,MAAO,IAAK0gD,EAAShgD,WAAYigD,EAAUjgD,YAExD3D,KAAKk5C,YAAcyH,EACZ3gD,KAAKL,OAAOoY,oBARnBjF,EAAO9S,KAAK+hD,kBAAkBjvC,EAAM6wC,EAAUE,EAAU,EAA2B5tC,EAAWnD,MAC9FC,EAAQ/S,KAAK+hD,kBAAkBhvC,EAAO6wC,EAAWC,EAAU,EAA2B5tC,EAAWlD,OAUrG,OAAQ/S,KAAKk5C,YAAYzyB,MACvB,OACA,OACA,OACE9T,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASq8C,OAAQp0C,EAAMC,GACvD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASs8C,OACTvjC,EAAA/Y,SAASq8C,OACbp0C,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASs8C,OAAQr0C,EAAMC,GACvD,MAEF,OACA,OACA,OACA,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASu8C,OAAQt0C,EAAMC,GACvD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASw8C,OACTzjC,EAAA/Y,SAASu8C,OACbt0C,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASw8C,OAAQv0C,EAAMC,GACvD,MAEF,QACA,QAEE/S,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEb0P,EAAO3S,KAAKL,OAAOoY,oBACnB,MAEF,QAKE,MAJA/X,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,0BAGpB,MAEF,KAAKorB,EAAAhL,MAAMgF,yBAA0B2gB,GAAW,EAChD,KAAK3a,EAAAhL,MAAM+D,kBAYT,OAXApvB,EAAO9S,KAAKgiD,4BACV/rC,EAAWnD,KACX6tC,GACA,GAEF5tC,EAAQ/S,KAAKg8C,kBACX/lC,EAAWlD,MACX/S,KAAKk5C,YAAW,GAEhB,GAEMl5C,KAAKk5C,YAAYzyB,MACvB,OACA,OACA,OACA,OACA,QAAoBs9B,GAAoB,EACxC,QACEpxC,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASy8C,OAAQx0C,EAAMC,GACvD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS08C,OAAQz0C,EAAMC,GACvD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAAS08C,OACT3jC,EAAA/Y,SAASy8C,OACbx0C,EACAC,GAEF,MAEF,QACA,QAKE,OAJA/S,KAAKoF,MACHqe,EAAAlhB,eAAeilD,2CACfvxC,EAAWhT,MAAOkmC,EAAAhL,MAAM4C,iBAAiB9qB,EAAWq1B,UAAWtrC,KAAKk5C,YAAYv1C,YAE3E3D,KAAKL,OAAOoY,oBAErB,QAKE,MAJA/X,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,0BAGpB,MAEF,KAAKorB,EAAAhL,MAAMiF,+BAAgC0gB,GAAW,EACtD,KAAK3a,EAAAhL,MAAMgE,wBAYT,OAXArvB,EAAO9S,KAAKgiD,4BACV/rC,EAAWnD,KACX6tC,GACA,GAEF5tC,EAAQ/S,KAAKg8C,kBACX/lC,EAAWlD,MACX/S,KAAKk5C,YAAW,GAEhB,GAEMl5C,KAAKk5C,YAAYzyB,MACvB,QAEE9T,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS48C,OAAQ30C,EAAMC,GACvD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS68C,OAAQ50C,EAAMC,GACvD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAAS68C,OACT9jC,EAAA/Y,SAAS48C,OACb30C,EACAC,GAEF,MAEF,OACA,OACA,QACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS88C,OAAQ70C,EAAMC,GACvD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS+8C,OAAQ90C,EAAMC,GACvD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAAS+8C,OACThkC,EAAA/Y,SAAS88C,OACb70C,EACAC,GAEF,MAEF,QACA,QAKE,OAJA/S,KAAKoF,MACHqe,EAAAlhB,eAAeilD,2CACfvxC,EAAWhT,MAAOkmC,EAAAhL,MAAM4C,iBAAiB9qB,EAAWq1B,UAAWtrC,KAAKk5C,YAAYv1C,YAE3E3D,KAAKL,OAAOoY,oBAErB,QAKE,MAJA/X,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,0BAGpB,MAEF,KAAKorB,EAAAhL,MAAMkF,2CAA4CygB,GAAW,EAClE,KAAK3a,EAAAhL,MAAMiE,oCAYT,OAXAtvB,EAAO9S,KAAKgiD,4BACV/rC,EAAWnD,KACX6tC,GACA,GAEF5tC,EAAQ/S,KAAKg8C,kBACX/lC,EAAWlD,MACX/S,KAAKk5C,YAAW,GAEhB,GAEMl5C,KAAKk5C,YAAYzyB,MACvB,OACA,OAAmBs9B,GAAoB,EACvC,QAEEpxC,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS88C,OAAQ70C,EAAMC,GACvD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS+8C,OAAQ90C,EAAMC,GACvD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAAS+8C,OACThkC,EAAA/Y,SAAS88C,OACb70C,EACAC,GAEF,MAEF,QAKE,MAJA/S,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,0BAGpB,MAEF,KAAKorB,EAAAhL,MAAMmF,iBAAkBwgB,GAAW,EACxC,KAAK3a,EAAAhL,MAAMkE,UAMT,GALAvvB,EAAO9S,KAAKgiD,4BACV/rC,EAAWnD,KACX6tC,GACA,GAEEmD,EACF/wC,EAAQ/S,KAAKg8C,kBACX/lC,EAAWlD,MACX/S,KAAKk5C,YAAW,GAEhB,OAEG,CAQL,GAPAyK,EAAW3jD,KAAKk5C,YAChBnmC,EAAQ/S,KAAKgiD,4BACX/rC,EAAWlD,MACX4wC,GACA,GAEFC,EAAY5jD,KAAKk5C,cACb2K,EAAangC,EAAA2B,KAAKyxB,iBAAiB6M,EAAUC,GAAW,IAS1D,OALA5jD,KAAKoF,MACHqe,EAAAlhB,eAAeyhD,8CACf/tC,EAAWhT,MAAO,IAAK0gD,EAAShgD,WAAYigD,EAAUjgD,YAExD3D,KAAKk5C,YAAcyH,EACZ3gD,KAAKL,OAAOoY,oBARnBjF,EAAO9S,KAAK+hD,kBAAkBjvC,EAAM6wC,EAAUE,EAAU,EAA2B5tC,EAAWnD,MAC9FC,EAAQ/S,KAAK+hD,kBAAkBhvC,EAAO6wC,EAAWC,EAAU,EAA2B5tC,EAAWlD,OAUrG,OAAQ/S,KAAKk5C,YAAYzyB,MACvB,OACA,OACA,OACA,OACA,QAAoBs9B,GAAoB,EACxC,QACEpxC,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASg9C,OAAQ/0C,EAAMC,GACvD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASi9C,OAAQh1C,EAAMC,GACvD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASi9C,OACTlkC,EAAA/Y,SAASg9C,OACb/0C,EACAC,GAEF,MAEF,QAKE,MAJA/S,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,0BAGpB,MAEF,KAAKorB,EAAAhL,MAAMoF,WAAYugB,GAAW,EAClC,KAAK3a,EAAAhL,MAAMmE,IAMT,GALAxvB,EAAO9S,KAAKgiD,4BACV/rC,EAAWnD,KACX6tC,GACA,GAEEmD,EACF/wC,EAAQ/S,KAAKg8C,kBACX/lC,EAAWlD,MACX/S,KAAKk5C,YAAW,GAEhB,OAEG,CAQL,GAPAyK,EAAW3jD,KAAKk5C,YAChBnmC,EAAQ/S,KAAKgiD,4BACX/rC,EAAWlD,MACX4wC,GACA,GAEFC,EAAY5jD,KAAKk5C,cACb2K,EAAangC,EAAA2B,KAAKyxB,iBAAiB6M,EAAUC,GAAW,IAS1D,OALA5jD,KAAKoF,MACHqe,EAAAlhB,eAAeyhD,8CACf/tC,EAAWhT,MAAO,IAAK0gD,EAAShgD,WAAYigD,EAAUjgD,YAExD3D,KAAKk5C,YAAcyH,EACZ3gD,KAAKL,OAAOoY,oBARnBjF,EAAO9S,KAAK+hD,kBAAkBjvC,EAAM6wC,EAAUE,EAAU,EAA2B5tC,EAAWnD,MAC9FC,EAAQ/S,KAAK+hD,kBAAkBhvC,EAAO6wC,EAAWC,EAAU,EAA2B5tC,EAAWlD,OAUrG,OAAQ/S,KAAKk5C,YAAYzyB,MACvB,OACA,OACA,OACA,OACA,QAAoBs9B,GAAoB,EACxC,QACEpxC,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASk9C,MAAOj1C,EAAMC,GACtD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASm9C,MAAOl1C,EAAMC,GACtD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASm9C,MACTpkC,EAAA/Y,SAASk9C,MACbj1C,EACAC,GAEF,MAEF,QAKE,MAJA/S,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,0BAGpB,MAEF,KAAKorB,EAAAhL,MAAMqF,aAAcsgB,GAAW,EACpC,KAAK3a,EAAAhL,MAAMoE,MAMT,GALAzvB,EAAO9S,KAAKgiD,4BACV/rC,EAAWnD,KACX6tC,GACA,GAEEmD,EACF/wC,EAAQ/S,KAAKg8C,kBACX/lC,EAAWlD,MACX/S,KAAKk5C,YAAW,GAEhB,OAEG,CAQL,GAPAyK,EAAW3jD,KAAKk5C,YAChBnmC,EAAQ/S,KAAKgiD,4BACX/rC,EAAWlD,MACX4wC,GACA,GAEFC,EAAY5jD,KAAKk5C,cACb2K,EAAangC,EAAA2B,KAAKyxB,iBAAiB6M,EAAUC,GAAW,IAS1D,OALA5jD,KAAKoF,MACHqe,EAAAlhB,eAAeyhD,8CACf/tC,EAAWhT,MAAO,IAAK0gD,EAAShgD,WAAYigD,EAAUjgD,YAExD3D,KAAKk5C,YAAcyH,EACZ3gD,KAAKL,OAAOoY,oBARnBjF,EAAO9S,KAAK+hD,kBAAkBjvC,EAAM6wC,EAAUE,EAAU,EAA2B5tC,EAAWnD,MAC9FC,EAAQ/S,KAAK+hD,kBAAkBhvC,EAAO6wC,EAAWC,EAAU,EAA2B5tC,EAAWlD,OAUrG,OAAQ/S,KAAKk5C,YAAYzyB,MACvB,OACA,OACA,OACA,OACA,QAAoBs9B,GAAoB,EACxC,QACEpxC,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASo9C,OAAQn1C,EAAMC,GACvD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASq9C,OAAQp1C,EAAMC,GACvD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASq9C,OACTtkC,EAAA/Y,SAASo9C,OACbn1C,EACAC,GAEF,MAEF,QAKE,MAJA/S,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,0BAGpB,MAKF,KAAKorB,EAAAhL,MAAMuE,oBACT5vB,EAAO9S,KAAKgiD,4BACV/rC,EAAWnD,KACX6tC,GAEF5tC,EAAQ/S,KAAKg8C,kBACX/lC,EAAWlD,MACX/S,KAAKk5C,YAAW,GAEhB,IAIFvmC,EAAO3S,KAAKL,OAAO0e,gBAAgBvL,GAAM,EAAM,MAI7C6sC,EAAY3/C,KAAK09B,gBAAgB3C,oBAAoB/6B,KAAKk5C,aAC1DpmC,EAAO9S,KAAKL,OAAO6T,eAAemsC,EAAUtsC,MAAOP,IAGrDixC,EAAoB/jD,KAAKk5C,YAAY5uB,GAAG,IACxCxU,EAAYypC,EAAczsC,EAAM9S,KAAKk5C,YAAal5C,KAAKL,QAIrDgT,EADEA,EACK3S,KAAKL,OAAO2W,SACjBR,EACA/C,EACAJ,GAMK3S,KAAKL,OAAO2W,SACjBR,EACA/C,EACA/S,KAAKL,OAAOyT,eACVmW,OAAOo2B,EAAW,yBAAyBtsC,MAC3CrT,KAAKk5C,YAAYte,iBAIvB,MAEF,KAAKuO,EAAAhL,MAAMwE,QACT7vB,EAAO9S,KAAKgiD,4BACV/rC,EAAWnD,KACX6tC,GAEF5tC,EAAQ/S,KAAKg8C,kBACX/lC,EAAWlD,MACX/S,KAAKk5C,YAAW,GAEhB,IAIFvmC,EAAO3S,KAAKL,OAAO0e,gBAAgBvL,GAAM,EAAM,MAI7C6sC,EAAY3/C,KAAK09B,gBAAgB3C,oBAAoB/6B,KAAKk5C,aAC1DpmC,EAAO9S,KAAKL,OAAO6T,eAAemsC,EAAUtsC,MAAOP,IAGrDixC,EAAoB/jD,KAAKk5C,YAAY5uB,GAAG,IACxCxU,EAAYypC,EAAczsC,EAAM9S,KAAKk5C,YAAal5C,KAAKL,QAIrDgT,EADEA,EACK3S,KAAKL,OAAO2W,SACjBR,EACAnD,EACAI,GAMK/S,KAAKL,OAAO2W,SACjBR,EACA9V,KAAKL,OAAOyT,eACVmW,OAAOo2B,EAAW,yBAAyBtsC,MAC3CrT,KAAKk5C,YAAYte,gBAEnB7nB,GAGJ,MAEF,QAKE,MAJA/S,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,mBAOpB,OAJIgmC,GAAqB/C,IACvBz3B,OAAOvpB,KAAKk5C,YAAY5uB,GAAG,IAAsC,+BACjE3X,EAAO8vC,EAAqB9vC,EAAM3S,KAAKk5C,YAAal5C,KAAKL,SAEpDmkD,EACH9jD,KAAK0gD,2BAA2BzqC,EAAWnD,KAAMH,EAAMguC,GAAkBj9B,EAAA2B,KAAKa,MAC9EvT,GAGNomC,EAAAr3C,UAAAskD,kBAAA,SAAkB/vC,EAAwBkyC,EAA6BxH,GACrE,IAAIl3B,EAAWzpB,KAAKo1B,QAAQhC,kBAAkBnd,EAAYjW,KAAK09B,iBAC/D,IAAKjU,EAAU,OAAOzpB,KAAKL,OAAOoY,oBAGlC,IACIqwC,EADAtgC,EAAU2B,EAAS3B,QAEvB,OAAQA,EAAQrB,MACd,KAAKyiB,EAAAvf,YAAYc,OACf,IAAKzqB,KAAK27C,cAAsB7zB,GAC9B,OAAO9nB,KAAKL,OAAOoY,oBAErBwR,OAAgBzB,EAASxU,MAAQoQ,EAAA2B,KAAKa,KAAM,0BAG9C,KAAKgjB,EAAAvf,YAAY2J,MACjB,KAAK4V,EAAAvf,YAAY4J,MACf60B,EAAoCtgC,EAASxU,KAC7C,MAEF,KAAK41B,EAAAvf,YAAYwE,SACf,IAAIzsB,EAAuBomB,EAASuG,gBACpC,GAAI3sB,EAAW,CACb,IAAIyqB,EAAWzqB,EAAU0qB,UACzB,IAAKD,EAAU,OAAOnsB,KAAKL,OAAOoY,oBAClC,IAAIwZ,EAAYpF,EAASoF,UACzBhI,OAA0C,GAAnCgI,EAAUZ,eAAevsB,QAChCgkD,EAAc72B,EAAUZ,eAAe,GACvC,MAMF,OAJA3wB,KAAKoF,MACHqe,EAAAlhB,eAAe8lD,oEACfpyC,EAAWhT,MAAkB6kB,EAASnP,cAEjC3Y,KAAKL,OAAOoY,oBAErB,KAAKmxB,EAAAvf,YAAYsK,mBACf,GAAIhe,EAAWwQ,MAAQ9C,EAAA+C,SAASoO,eAC1BrL,EAASlS,QAAUkS,EAASlS,OAAOkP,MAAQyiB,EAAAvf,YAAY+J,MAAO,CAChE,GAAI5L,EAAQ4F,YAAsBjE,EAASlS,OAAQ7V,UAAU+rB,aAW3D,OAJAztB,KAAKoF,MACHqe,EAAAlhB,eAAe2xB,qCACfje,EAAWhT,MAAewmB,EAASlS,OAAQ5T,YAEtC3D,KAAKL,OAAOoY,oBAVnB,IAAIuwC,EAAyCxgC,EAASsE,QAAQ,MAC9D,GAAIk8B,EAAoB,CACtBF,EAAcE,EAAmB/2B,UAAU/Z,WAC3C,OAaV,QAKE,OAJAxX,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAENjD,KAAKL,OAAOoY,oBAKvB,IAAIwwC,EAAYvoD,KAAKg8C,kBAAkBmM,EAAiBC,GACxD,OAAOpoD,KAAK0gD,2BACVzqC,EACAsyC,EACA5H,GAAkBj9B,EAAA2B,KAAKa,OAI3B6yB,EAAAr3C,UAAAg/C,2BAAA,SACEzqC,EACAuyC,EACAC,QAAA,IAAAA,OAAA,GAEA,IAAIh/B,EAAWzpB,KAAKo1B,QAAQhC,kBAAkBnd,EAAYjW,KAAK09B,iBAC/D,IAAKjU,EAAU,OAAOzpB,KAAKL,OAAOoY,oBAElC,IAAI+P,EAAU2B,EAAS3B,QACvB,OAAQA,EAAQrB,MACd,KAAKyiB,EAAAvf,YAAY2J,MAEf,OADAtzB,KAAKk5C,YAAcuP,EAAc3gC,EAASxU,KAAOoQ,EAAA2B,KAAKa,KAC1C4B,EAASwC,GAAG4e,EAAA/e,aAAa4L,WACnC/1B,KAAKoF,MACHqe,EAAAlhB,eAAe8lD,oEACfpyC,EAAWhT,MAAe6kB,EAASnP,cAE9B3Y,KAAKL,OAAOoY,qBAEd0wC,EACHzoD,KAAKL,OAAO6T,eAAuBsU,EAASzU,MAAOm1C,GACnDxoD,KAAKL,OAAOyV,eAAuB0S,EAASzU,MAAOm1C,GAEzD,KAAKtf,EAAAvf,YAAYc,OACf,IAAKzqB,KAAK27C,cAAsB7zB,GAAU,OAAO9nB,KAAKL,OAAOoY,oBAG7D,GAFAwR,OAAgBzB,EAASxU,MAAQoQ,EAAA2B,KAAKa,KAAM,0BAC5ClmB,KAAKk5C,YAAcuP,EAAe3gC,EAASxU,KAAOoQ,EAAA2B,KAAKa,KAC3C4B,EAASwC,GAAG4e,EAAA/e,aAAa4L,UAMnC,OALA/1B,KAAKoF,MACHqe,EAAAlhB,eAAe8lD,oEACfpyC,EAAWhT,MACH6kB,EAASnP,cAEZ3Y,KAAKL,OAAOoY,oBAErB,GAAI0wC,EAAK,CACP,IAAIvM,EAAsBp0B,EAASxU,KAAKsnB,eACxC,OAAO56B,KAAKL,OAAO6V,YAAY,MAC7BxV,KAAKL,OAAO2V,gBAAyBwS,EAASnP,aAAc6vC,GAC5DxoD,KAAKL,OAAO+T,gBAAyBoU,EAASnP,aAAcujC,IAC3DA,GAEH,OAAOl8C,KAAKL,OAAO2V,gBAAyBwS,EAASnP,aAAc6vC,GAGvE,KAAKtf,EAAAvf,YAAY4J,MACf,GAAYzL,EAASpmB,UAAUgnD,WAK7B,OAJA1oD,KAAKoF,MACHqe,EAAAlhB,eAAe8lD,oEACfpyC,EAAWhT,MAAe6kB,EAASnP,cAE9B3Y,KAAKL,OAAOoY,oBAErBwR,OAAOE,EAASk/B,kBAChB,IAAIC,EAAa5oD,KAAKg8C,kBACRvyB,EAAS0J,iBACb1J,EAASlS,OAAQjE,MAE3BtT,KAAKk5C,YAAcuP,EAAc3gC,EAASxU,KAAOoQ,EAAA2B,KAAKa,KAClDg2B,EAAqBp0B,EAASxU,KAAKsnB,eACvC,GAAI6tB,EAAK,CACP,IAAI9I,EAAY3/C,KAAK09B,gBAAgB3C,oBAA4BjT,EAASxU,MAE1E,OAAOtT,KAAKL,OAAO6V,YAAY,MAC7BxV,KAAKL,OAAOyV,eAAeuqC,EAAUtsC,MAAOm1C,GAC5CxoD,KAAKL,OAAOsU,YACF6T,EAASxU,KAAK4iC,MAAQ,EAC9B0S,EACA5oD,KAAKL,OAAOyT,eAAeusC,EAAUtsC,MAAO6oC,GAC5CA,EACQp0B,EAAS6T,cAEnB37B,KAAKL,OAAOyT,eAAeusC,EAAUtsC,MAAO6oC,IAC3CA,GAEH,OAAOl8C,KAAKL,OAAOsU,YACT6T,EAASxU,KAAK4iC,MAAQ,EAC9B0S,EACAJ,EACAtM,EACQp0B,EAAS6T,cAIvB,KAAKuN,EAAAvf,YAAYwE,SACf,IAAIE,EAA6BvG,EAASuG,gBAC1C,GAAIA,EAAiB,CAEnB,KADIw6B,EAAiBx6B,EAAgBjC,WAChB,OAAOpsB,KAAKL,OAAOoY,oBAGxC,IAAK0wC,EAAK,CACR,GAAII,EAAev+B,GAAG4e,EAAA/e,aAAa0N,UAAW,CAC5CtO,OAAOE,EAASk/B,kBAChB,IAAIG,EAAU9oD,KAAKg8C,kBACLvyB,EAAS0J,iBACb1J,EAASlS,OAAQjE,MAE3B,OAAOtT,KAAK+oD,eAAeF,GAAkBC,EAASN,IAEtD,OAAOxoD,KAAK+oD,eAAeF,GAAkBL,IAKjD,IAAIp6B,EAA6BtG,EAASsG,gBAG1C,GAFA7E,OAA0B,MAAnB6E,KACH46B,EAAqC56B,EAAiBhC,WACrC,OAAOpsB,KAAKL,OAAOoY,oBACxC,IAAIP,EAAawxC,EAAez3B,UAAU/Z,WAC1C,GAAIqxC,EAAev+B,GAAG4e,EAAA/e,aAAa0N,UAAW,CAC5CtO,OAAOE,EAASk/B,kBACZG,EAAU9oD,KAAKg8C,kBACLvyB,EAAS0J,iBACb1J,EAASlS,OAAQjE,MAEvBqsC,EAAY3/C,KAAK09B,gBAAgB3C,oBAAoBvjB,GACzD,OAAOxX,KAAKL,OAAO6V,YAAY,MAC7BxV,KAAK+oD,eAAeF,GAClB7oD,KAAKL,OAAO6T,eAAemsC,EAAUtsC,MAAOy1C,GAC5CN,IAEFxoD,KAAK+oD,eAAeC,GAClBhpD,KAAKL,OAAOyT,eAAeusC,EAAUtsC,MAAOmE,EAAWojB,mBAExDpjB,EAAWojB,gBAGd,OAAO56B,KAAKL,OAAO6V,YAAY,MAC7BxV,KAAK+oD,eAAeF,GAAkBL,IACtCxoD,KAAK+oD,eAAeC,IACnBxxC,EAAWojB,gBAQlB,OALE56B,KAAKoF,MACHqe,EAAAlhB,eAAe8lD,oEACfpyC,EAAWhT,MAAkB6kB,EAASnP,cAGnC3Y,KAAKL,OAAOoY,oBAErB,KAAKmxB,EAAAvf,YAAYsK,mBACf,GAAIhe,EAAWwQ,MAAQ9C,EAAA+C,SAASoO,cAAe,CAE7C,IAAIk0B,EACJ,GAFAz/B,OAAOE,EAASk/B,oBACZK,EAAqClhC,EAASsE,WAC7B,OAAOpsB,KAAKL,OAAOoY,oBAExC,IAAIkxC,EAAyBx/B,EAASlS,OAAQ7V,UAAUisB,aACpDu7B,OAAU,EACd,GACoB,MAAlBD,GACQx/B,EAASlS,OAAQ4T,UACxB+9B,EAA2Cz/B,EAASlS,OAAQ4T,QAAShqB,IAAI8nD,KAC1EC,EAAWziC,MAAQyiB,EAAAvf,YAAYsK,mBAC/B,CACA,IAAI40B,EACJ,KADIA,EAAqCK,EAAY98B,WAChC,OAAOpsB,KAAKL,OAAOoY,oBACxC,IAAIsb,EAAqB5J,EAASlS,OAAQjE,KAKtC61C,GAJAP,EAAa5oD,KAAKg8C,kBACRvyB,EAAS0J,iBACrBE,GAEgBrzB,KAAKg8C,kBACK/lC,EAAYi2B,kBACtCxoB,EAAA2B,KAAK7G,MAEP,GAAIiqC,EAAK,CACP,IAAIW,EAAkBppD,KAAK09B,gBAAgBhD,aAAarH,GACpDg2B,EAAmBrpD,KAAK09B,gBAAgB3C,oBAAoB/6B,KAAKk5C,aACjE1hC,EAAawxC,EAAez3B,UAAU/Z,WAE1C,OADAxX,KAAK09B,gBAAgB5C,cAAcsuB,GAC5BppD,KAAKL,OAAO6V,YAAY,MAC7BxV,KAAK+oD,eAAeF,GAClB7oD,KAAKL,OAAO6T,eAAe41C,EAAgB/1C,MAAOu1C,GAClD5oD,KAAKL,OAAO6T,eAAe61C,EAAiBh2C,MAAO81C,GACnDX,IAEFxoD,KAAK+oD,eAAeC,GAClBhpD,KAAKL,OAAOyT,eAAeg2C,EAAgB/1C,MAAO+1C,EAAgB91C,KAAKsnB,gBACvE56B,KAAKL,OAAOyT,eAAei2C,EAAiBh2C,MAAOg2C,EAAiB/1C,KAAKsnB,mBAE1EpjB,EAAWojB,gBAEd,OAAO56B,KAAK+oD,eAAeF,GACzBD,EACAO,EACAX,IAQJ,OAJAxoD,KAAKoF,MACHqe,EAAAlhB,eAAe+mD,+CACfrzC,EAAWhT,MAAewmB,EAASlS,OAAQoB,cAEtC3Y,KAAKL,OAAOoY,qBAU3B,OAJA/X,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAENjD,KAAKL,OAAOoY,qBAGrBghC,EAAAr3C,UAAAy/C,sBAAA,SAAsBlrC,EAA4B0qC,GAChD,IAAIl3B,EAAWzpB,KAAKo1B,QAAQhC,kBAAkBnd,EAAWA,WAAYjW,KAAK09B,iBAC1E,IAAKjU,EAAU,OAAOzpB,KAAKL,OAAOoY,oBAElC,IACIwZ,EACAg4B,EAFAzhC,EAAU2B,EAAS3B,QAGvB,OAAQA,EAAQrB,MAGd,KAAKyiB,EAAAvf,YAAYsK,mBACf,IAAIvyB,EAA+BomB,EAGnC,GAAIpmB,EAAU4oB,GAAG4e,EAAA/e,aAAaC,SAAU,CACtC,IAAIzX,EAAOylC,EAAAoR,YACTxpD,KACA0B,EACAA,EAAUy3B,4BACRljB,EAAW6b,cACX9xB,KAAK09B,gBAAgBrN,yBAEvBpa,EAAWoX,UACXszB,EACA1qC,GAEF,OAAKtD,IACH3S,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAENjD,KAAKL,OAAOoY,qBAMrB,IAAIoU,EAAWzqB,EAAUmwB,0BACvB5b,EAAW6b,cACX9xB,KAAK09B,gBAAgBrN,wBACrBpa,GAEF,IAAKkW,EAAU,OAAOnsB,KAAKL,OAAOoY,oBAClC,IAAI+wC,EAAyB,EAC7B,GAAI38B,EAAS7B,GAAG4e,EAAA/e,aAAa0N,WAM3B,GALAtO,OAAOE,EAASk/B,oBAChBG,EAAU9oD,KAAKg8C,kBACDvyB,EAAS0J,iBACb1J,EAASlS,OAAQjE,OAEb,OAAOtT,KAAKL,OAAOoY,yBAEjCwR,QAAQE,EAASk/B,kBAEnB,OAAO3oD,KAAKypD,kBAAkBt9B,EAAUlW,EAAWoX,UAAWpX,EAAY6yC,GAK9E,KAAK5f,EAAAvf,YAAY2J,MACf,GAAI/B,EAAoBzJ,EAASxU,KAAKqG,aAAc,CAClD4vC,EAAWvpD,KAAKL,OAAOyT,eAAuB0U,EAASzU,MAAOuQ,EAAAre,WAAWwZ,KACzE,MAMA,OAJA/e,KAAKoF,MACHqe,EAAAlhB,eAAemnD,uGACfzzC,EAAWhT,MAAe6kB,EAASxU,KAAK3P,YAEnC3D,KAAKL,OAAOoY,oBAGvB,KAAKmxB,EAAAvf,YAAYc,OACf,GAAI8G,EAAqBzJ,EAASxU,KAAKqG,aAAc,CACnD4vC,EAAWvpD,KAAKL,OAAO+T,gBAAyBoU,EAASnP,aAAuBmP,EAASxU,KAAKsnB,gBAC9F,MAMA,OAJA56B,KAAKoF,MACHqe,EAAAlhB,eAAemnD,uGACfzzC,EAAWhT,MAAgB6kB,EAASxU,KAAK3P,YAEpC3D,KAAKL,OAAOoY,oBAGvB,KAAKmxB,EAAAvf,YAAY4J,MACf,IAAIjgB,EAAewU,EAASxU,KAC5B,GAAIie,EAAYje,EAAKqG,aAAc,CACjC,IAAIivC,EAAa5oD,KAAKg8C,kBAAkBzyB,OAAOE,EAAS0J,kBAAmB7f,GAC3Ei2C,EAAWvpD,KAAKL,OAAOiU,WACrB,GACA,EACAg1C,EACAhlC,EAAAre,WAAWwZ,IACH+I,EAAS6T,cAEnB,MAMA,OAJA37B,KAAKoF,MACHqe,EAAAlhB,eAAemnD,uGACfzzC,EAAWhT,MAAe6kB,EAASxU,KAAK3P,YAEnC3D,KAAKL,OAAOoY,oBAGvB,KAAKmxB,EAAAvf,YAAY4R,gBACfhK,EAA6BzJ,EAASyJ,UACtCg4B,EAAWvpD,KAAKg8C,kBAAkB/lC,EAAWA,WAA6B6R,EAASxU,MACnF,MAEF,KAAK41B,EAAAvf,YAAYwE,SAGjB,QAKE,OAJAnuB,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAENjD,KAAKL,OAAOoY,oBAGvB,OAAO/X,KAAK2pD,oBACVp4B,EACAg4B,EACAtzC,EAAWoX,UACXpX,IAQJ8iC,EAAAr3C,UAAAkoD,mBAAA,SACEr4B,EACAs4B,EACAC,EACA7wB,GAKA,GAAI6wB,IAAwB,MADbv4B,EAAUf,UAMvB,OAJAxwB,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACf8L,EAAWh2B,QAEN,EAIT,IAAI8tB,EAAUQ,EAAUR,QACxB,GAAIA,EAKF,OAJA/wB,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACf8L,EAAWh2B,QAEN,EAGT,IAAI8mD,EAAUx4B,EAAUT,mBACpBrW,EAAU8W,EAAUZ,eAAevsB,OAGvC,OAAIylD,EAAeE,GACjB/pD,KAAKoF,MACH2kD,EAAUtvC,EACNgJ,EAAAlhB,eAAeynD,wCACfvmC,EAAAlhB,eAAewrB,+BACnBkL,EAAWh2B,MAAO8mD,EAAQpmD,WAAYkmD,EAAalmD,aAE9C,KAILkmD,EAAepvC,IAAYsW,KAC7B/wB,KAAKoF,MACHqe,EAAAlhB,eAAewrB,+BACfkL,EAAWh2B,MAAOwX,EAAQ9W,WAAYkmD,EAAalmD,aAE9C,IAOXo1C,EAAAr3C,UAAA+nD,kBAAA,SACEt9B,EACA89B,EACAhxB,EACA6vB,QAAA,IAAAA,MAAA,GAEA,IAAIe,EAAeI,EAAoB7lD,OACnCmtB,EAAYpF,EAASoF,UAEzB,IAAKvxB,KAAK4pD,mBACRr4B,EACAs4B,EACW,GAAXf,EACA7vB,GAEA,OAAOj5B,KAAKL,OAAOoY,oBAGrB,IAAImyC,EAAuBpB,EAAUe,EAAe,EAAIA,EACpD32C,EAAW,IAAIhO,MAAqBglD,GACpC72C,EAAQ,EACRy1C,IACF51C,EAAS,GAAK41C,EACdz1C,EAAQ,GAGV,IADA,IAAIsd,EAAiBY,EAAUZ,eACtBtwB,EAAI,EAAGA,EAAIwpD,IAAgBxpD,IAAKgT,EACvCH,EAASG,GAASrT,KAAKg8C,kBACrBiO,EAAoB5pD,GACpBswB,EAAetwB,IAInB,OADAkpB,OAAOlW,GAAS62C,GACTlqD,KAAK+oD,eAAe58B,EAAUjZ,IAIvC6lC,EAAAr3C,UAAAyoD,iBAAA,SAAiBC,GACf,IAAIzwB,EAAaywB,EAASzwB,WAC1B,GAAIA,EAAY,OAAOA,EAEvB,IAAI0wB,EAAoBD,EAAS74B,UAC7B+4B,EAAeF,EAASzxC,aACxB4xC,EAAyBF,EAAkB15B,eAC3C65B,EAAgCJ,EAAS1oD,UAAU2mB,YAAYkJ,UAAUZ,eACzE85B,EAAmBJ,EAAkB7yC,WACrCkzC,EAAiBL,EAAkB75B,SACnCuH,EAAaqyB,EAAS9/B,GAAG4e,EAAA/e,aAAa0N,UAGtC8yB,EAAeN,EAAkBv5B,mBACjC85B,EAAcD,EACdE,EAAeN,EAAuBnmD,OACtC0mD,EAAcD,EACd9yB,MACA6yB,IACAE,GAEJ,IAAIC,EAAcD,EAAcF,EAChCrhC,OAAOwhC,GAEP,IAAIC,EAAoB,IAAI9lD,MAAqB0lD,GAC7CK,EAAe,EAGflzB,IACFizB,EAAkB,GAAKhrD,KAAKL,OAAOyT,eAAe,EAAGpT,KAAKolB,QAAQ8lC,gBAClED,EAAe,GAIjB,IAAK,IAAI5qD,EAAI,EAAGA,EAAIsqD,IAAgBtqD,IAAK4qD,EAAc,CACrD,IAAI55B,EAAgBk5B,EAAuBlqD,GAC3C2qD,EAAkBC,GAAgBjrD,KAAKL,OAAOyT,eAAe63C,EAAc55B,EAAcuJ,gBAE3FrR,OAAO0hC,GAAgBL,GAGvB,IAAIO,EAA2B,IAAIjmD,MAAY2lD,EAAe,GAC9D,IAASxqD,EAAI,EAAGA,EAAIwqD,IAAgBxqD,EAClC8qD,EAAyB9qD,GAAKkqD,EAAuBlqD,GAEvD8qD,EAAyBN,GAAgBnnC,EAAA2B,KAAK7G,IAG9C,IAAI4sC,EAAsB,IAAI1nC,EAAA8N,UAAU25B,EAA0BV,EAAkBC,GAChFW,EAAiBf,EAAe,cACpCc,EAAoBt6B,mBAAqB+5B,EAAe,GACxDlxB,EAAa,IAAIuP,EAAApQ,SAASsxB,EAAS1oD,UAAW2pD,EAAgBD,EAAqBhB,EAAS51B,mBACjFa,MAAQ+0B,EAAS/0B,MAAQ6T,EAAA/e,aAAa0xB,SACjDuO,EAASzwB,WAAaA,EAItB,IAAI6hB,EAAmBx7C,KAAK09B,gBAC5B19B,KAAK09B,gBAAkB/D,EAGvB,IAAIxiB,EAAW4zC,EAAc,EACzB9zC,EAAQ,IAAI/R,MAAciS,GAC9B,IAAS9W,EAAI,EAAGA,EAAI8W,IAAY9W,EAAG,CACjC,IAAIoV,EAAQ,KAAOpV,EAAEsD,WACrBsT,EAAM5W,GAAKoV,EAEb,IAAIW,EAAOpW,KAAKL,OAAO6V,YAAYyB,EAAM,IACvCjX,KAAKL,OAAO6V,YAAY,aACtBxV,KAAKL,OAAOqX,aAAaC,EAAO,YAC9BjX,KAAKL,OAAOyT,eAAe03C,EAAalnC,EAAAre,WAAWwZ,QAGvD/e,KAAKL,OAAOoY,sBAEd,IAAS1X,EAAI,EAAGA,EAAI0qD,IAAe1qD,IAAK4qD,EAAc,CACpD,IAAI33C,EAAOi3C,EAAuBI,EAAetqD,GACjD+V,EAAOpW,KAAKL,OAAO6V,YAAYyB,EAAM5W,EAAI,IACvC+V,EACApW,KAAKL,OAAOyV,eAAe61C,EACzBjrD,KAAKg8C,kBACHzyB,OAAOihC,EAA8BG,EAAetqD,GAAG8X,aACvD7E,MAIN03C,EAAkBC,GAAgBjrD,KAAKL,OAAOyT,eAAe63C,EAAc33C,EAAKsnB,gBAElF56B,KAAK09B,gBAAkB8d,EACvBjyB,OAAO0hC,GAAgBH,GAEvB,IAAI9Q,EAAUh6C,KAAKi6C,mBAAmBmR,GAClCrR,EAAU/5C,KAAKL,OAAO0Y,YAAYgzC,EAAgBrR,EAASt2B,EAAA6zB,mBAAmB5d,EAAWJ,kBAC3Fv5B,KAAKL,OAAO6V,YAAY,MACtBY,EACApW,KAAKL,OAAO2X,WACVgzC,EACAU,EACAP,EAAiB7vB,iBAElB6vB,EAAiB7vB,iBAGtB,OADAjB,EAAWwB,SAASn7B,KAAKL,OAAQo6C,GAC1BpgB,GAITof,EAAAr3C,UAAAqnD,eAAA,SAAe58B,EAAoBjZ,QAAA,IAAAA,MAAA,MACjC,IAAIo4C,EAAcp4C,EAAWA,EAAS9O,OAAS,EAC3CylD,EAAeyB,EAEfV,EADez+B,EAASoF,UAAUT,mBAElC+5B,EAAe1+B,EAASoF,UAAUZ,eAAevsB,OACjD0mD,EAAcD,EAOlB,GANI1+B,EAAS7B,GAAG4e,EAAA/e,aAAa0N,cACzB+yB,IACAE,IACAjB,GAEJtgC,OAAO+hC,GAAeV,IACjB5qD,KAAK+8C,gBAAgB5wB,GAAW,OAAOnsB,KAAKL,OAAOoY,oBACxD,GAAIuzC,EAAcR,EAAa,CAE7B,GADA3+B,EAAWnsB,KAAKmqD,iBAAiBh+B,IAC5BnsB,KAAK+8C,gBAAgB5wB,GAAW,OAAOnsB,KAAKL,OAAOoY,oBACnD7E,KACHA,EAAW,IAAIhO,MAAM4lD,EAAc,IAC1B1mD,OAAS,GAEpB,IAAK,IAAI/D,EAAIwpD,EAAcxpD,EAAIwqD,IAAgBxqD,EAC7C6S,EAASzO,KAAK0nB,EAASoF,UAAUZ,eAAetwB,GAAG22C,aAAah3C,KAAKL,SAEvEuT,EAASzO,KAAKzE,KAAKL,OAAOmS,UAAUw5C,EAAcV,IAEpD,IAAIpzC,EAAa2U,EAASoF,UAAU/Z,WAEpC,OADAxX,KAAKk5C,YAAc1hC,EACf2U,EAAS7B,GAAG4e,EAAA/e,aAAauL,UACpB11B,KAAKL,OAAO+X,iBAAiByU,EAASxT,aAAczF,EAAUsE,EAAWojB,gBAEzE56B,KAAKL,OAAO2X,WAAW6U,EAASxT,aAAczF,EAAUsE,EAAWojB,iBAK9Eme,EAAAr3C,UAAAioD,oBAAA,SACEp4B,EACAg4B,EACAU,EACAhxB,EACA6vB,QAAA,IAAAA,MAAA,GAEA,IAAIe,EAAeI,EAAoB7lD,OAEvC,IAAKpE,KAAK4pD,mBACRr4B,EACAs4B,EACW,GAAXf,EACA7vB,GAEA,OAAOj5B,KAAKL,OAAOoY,oBAGrB,IAAImyC,EAAuBpB,EAAUe,EAAe,EAAIA,EACpD32C,EAAW,IAAIhO,MAAqBglD,GACpC72C,EAAQ,EACRy1C,IACF51C,EAAS,GAAK41C,EACdz1C,EAAQ,GAGV,IADA,IAAIsd,EAAiBY,EAAUZ,eACtBtwB,EAAI,EAAGA,EAAIwpD,IAAgBxpD,IAAKgT,EACvCH,EAASG,GAASrT,KAAKg8C,kBACrBiO,EAAoB5pD,GACpBswB,EAAetwB,IAInB,OADAkpB,OAAOlW,GAAS62C,GACTlqD,KAAKurD,iBAAiBh6B,EAAWg4B,EAAUr2C,IAIpD6lC,EAAAr3C,UAAA6pD,iBAAA,SAAiBh6B,EAAsBg4B,EAAyBr2C,GAC9D,IAAIsE,EAAa+Z,EAAU/Z,WAG3B,OAFAxX,KAAKk5C,YAAc1hC,EACnBxX,KAAKi6C,mBAAmB1oB,GACjBvxB,KAAKL,OAAOiY,mBAAmB2xC,EAAUr2C,EAAUqe,EAAUiK,sBAGtEud,EAAAr3C,UAAA0/C,uBAAA,SAAuBnrC,EAA6B0qC,GAIlD,IAHA,IAAI/U,EAAc31B,EAAW21B,YACzB4f,EAAiB5f,EAAYxnC,OAC7BqnD,EAAQ,IAAIvmD,MAAqBsmD,KAC5BnrD,EAAI,EAAGA,EAAImrD,IAAkBnrD,EACpCorD,EAAMprD,GAAKL,KAAKg8C,kBAAkBpQ,EAAYvrC,GAAIqjB,EAAA2B,KAAKa,MAGzD,OADAulC,EAAMD,GAAkBxrD,KAAKg8C,kBAAkBpQ,EAAY4f,GAAiB7K,GACrE3gD,KAAKL,OAAO6V,YAAY,KAAMi2C,EAAOzrD,KAAKk5C,YAAYte,iBAG/Dme,EAAAr3C,UAAA2/C,+BAAA,SAA+BprC,EAAqC0qC,GAClE,IAAIl3B,EAAWzpB,KAAKo1B,QAAQvB,qBAAqB5d,EAAYjW,KAAK09B,iBAClE,IAAKjU,EAAU,OAAOzpB,KAAKL,OAAOoY,oBAElCwR,OACEE,EAAS3B,QAAQrB,MAAQyiB,EAAAvf,YAAYsK,oBACrCxK,EAASlS,QACTkS,EAASlS,OAAOkP,MAAQyiB,EAAAvf,YAAY+J,OAEtC,IAAIvH,EAA+B1C,EAAS3B,QAASsE,QACnD,KACQ3C,EAASlS,OAAQ8Y,yBAE3B,IAAKlE,EAAU,OAAOnsB,KAAKL,OAAOoY,oBAClC,IAAI+wC,EAAU9oD,KAAKg8C,kBAAkB/lC,EAAWA,WAAoBwT,EAASlS,OAAQjE,MACrF,OAAOtT,KAAKypD,kBAAkBt9B,GAC5BlW,EAAWi2B,mBACVj2B,EAAY6yC,IAGjB/P,EAAAr3C,UAAA4/C,0BAAA,SAA0BrrC,EAAgC0qC,GACxD,IAAIt4B,EAAcpS,EAAWoS,YACzBqF,GAAcrF,EAAYznB,KAAKsD,KAAKE,OACpCikB,EAAYznB,KAAKsD,KACjB,aAAe,IAAMlE,KAAKq5C,cAAcj1C,OAAOT,SAAS,IACxDjC,EAAY,IAAIwnC,EAAArc,kBAClB7sB,KAAKo1B,QACL1H,EACA1tB,KAAK09B,gBAAgB/kB,aAAe,IAAM+U,EAC1CrF,GAEE8D,EAAWnsB,KAAK88C,kCAClBp7C,KAEA1B,KAAK09B,gBAAgBrN,wBACrBhI,GAEF,IAAK8D,EAAU,OAAOnsB,KAAKL,OAAOoY,oBAClC/X,KAAKk5C,YAAcx1B,EAAA2B,KAAKO,IAAI8L,WAAWvF,EAASoF,WAGhD,IAAIle,EAAQrT,KAAK+9C,yBAAyB5xB,GAC1C,OAAI9Y,EAAQ,EAAUrT,KAAKL,OAAOoY,oBAC3B/X,KAAKL,OAAOmS,UAAUuB,IAQ/B0lC,EAAAr3C,UAAA6/C,4BAAA,SACEtrC,EACA0qC,EACA+K,GAGA,OAAQz1C,EAAWwQ,MACjB,KAAK9C,EAAA+C,SAASmZ,KAIZ,OAHK8gB,EAAentB,YAClBxzB,KAAKk5C,YAAcl5C,KAAKolB,QAAQU,WAE3B9lB,KAAKolB,QAAQ+0B,SAChBn6C,KAAKL,OAAOsS,UAAU,GACtBjS,KAAKL,OAAOmS,UAAU,GAE5B,KAAK6R,EAAA+C,SAASyZ,KAEZ,OADAngC,KAAKk5C,YAAcx1B,EAAA2B,KAAKU,KACjB/lB,KAAKL,OAAOmS,UAAU,GAE/B,KAAK6R,EAAA+C,SAASuY,MAEZ,OADAj/B,KAAKk5C,YAAcx1B,EAAA2B,KAAKU,KACjB/lB,KAAKL,OAAOmS,UAAU,GAE/B,KAAK6R,EAAA+C,SAAS6N,KACZ,GAAIv0B,KAAK09B,gBAAgBpT,GAAG4e,EAAA/e,aAAa0N,UAAW,CAClD,IAAIrH,EAAWjH,OAAOvpB,KAAK09B,gBAAgBlJ,kBAAkBlhB,KAE7D,OADAtT,KAAKk5C,YAAc1oB,EACZxwB,KAAKL,OAAOyT,eAAe,EAAGod,EAASoK,gBAOhD,OALA56B,KAAKoF,MACHqe,EAAAlhB,eAAekyB,+CACfxe,EAAWhT,OAEbjD,KAAKk5C,YAAcl5C,KAAKolB,QAAQU,UACzB9lB,KAAKL,OAAOoY,oBAErB,KAAK4L,EAAA+C,SAASgO,MACZ,GAAI10B,KAAK09B,gBAAgBpT,GAAG4e,EAAA/e,aAAa0N,UAAW,CAClD,IAAIjE,EAAOrK,OAAOvpB,KAAK09B,gBAAgBlJ,kBAAkBZ,KACzD,GAAIA,EAAM,CACR,IAAI+3B,EAAY/3B,EAAKtgB,KAErB,OADAtT,KAAKk5C,YAAcyS,EACZ3rD,KAAKL,OAAOyT,eAAe,EAAGu4C,EAAU/wB,iBAQnD,OALA56B,KAAKoF,MACHqe,EAAAlhB,eAAeoyB,iDACf1e,EAAWhT,OAEbjD,KAAKk5C,YAAcl5C,KAAKolB,QAAQU,UACzB9lB,KAAKL,OAAOoY,oBAKvB,IAAI0R,EAAWzpB,KAAKo1B,QAAQ1L,kBAC1BzT,EACAjW,KAAK09B,gBACL19B,KAAKi5C,aAEP,IAAKxvB,EAAU,OAAOzpB,KAAKL,OAAOoY,oBAElC,IAAI+P,EAAU2B,EAAS3B,QACvB,OAAQA,EAAQrB,MACd,KAAKyiB,EAAAvf,YAAY2J,MACf,OAAYxL,EAASwC,GAAG4e,EAAA/e,aAAawM,SAC5B32B,KAAKo8C,sBAA6Bt0B,EAAS64B,EAAgB+K,IAEpEniC,OAAezB,EAASzU,OAAS,GACjCrT,KAAKk5C,YAAsBpxB,EAASxU,KAC7BtT,KAAKL,OAAOyT,eAAuB0U,EAASzU,MAAOrT,KAAKk5C,YAAYte,iBAE7E,KAAKsO,EAAAvf,YAAYc,OACf,OAAI3C,EAAQwC,GAAG4e,EAAA/e,aAAaC,SACnBguB,EAAAwT,mBAA0B5rD,KAAc8nB,EAAS7R,GAErDjW,KAAK27C,cAAsB7zB,IAGhCyB,OAAgBzB,EAASxU,MAAQoQ,EAAA2B,KAAKa,MACzB4B,EAASwC,GAAG4e,EAAA/e,aAAawM,SAC7B32B,KAAKo8C,sBAA8Bt0B,EAAS64B,EAAgB+K,IAErE1rD,KAAKk5C,YAAuBpxB,EAASxU,KAC9BtT,KAAKL,OAAO+T,gBAAyBoU,EAASnP,aAAc3Y,KAAKk5C,YAAYte,kBAP3E56B,KAAKL,OAAOoY,oBASvB,KAAKmxB,EAAAvf,YAAYiJ,UACf,OAAK9K,EAAQwC,GAAG4e,EAAA/e,aAAa0xB,WAQ7B77C,KAAKk5C,YAAcx1B,EAAA2B,KAAK7G,IACRsJ,EAASwC,GAAG4e,EAAA/e,aAAawM,SAChC32B,KAAKL,OAAOmS,UAAsBgW,EAASkO,eAE7Ch2B,KAAKL,OAAO+T,gBAA4BoU,EAASnP,aAAciL,EAAAre,WAAWwZ,OAX/E/e,KAAKoF,MACHqe,EAAAlhB,eAAespD,+HACf51C,EAAWhT,OAEbjD,KAAKk5C,YAAcx1B,EAAA2B,KAAK7G,IACjBxe,KAAKL,OAAOoY,qBAazB,OAJA/X,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAENjD,KAAKL,OAAOoY,qBAGrBghC,EAAAr3C,UAAA8/C,yBAAA,SACEvrC,EACA0qC,EACAmL,GAEA,YAFA,IAAAA,OAAA,GAEQ71C,EAAWuX,aACjB,OACEjE,QAAQuiC,GACR,IAAIt4B,EAAYmtB,EAAentB,UAC/B,OACEA,GACAA,GAAaxzB,KAAKo1B,QAAQtQ,SAAS3jB,IAAI,UACvCqyB,EAAU1B,eAAmD,GAAlC0B,EAAU1B,cAAc1tB,OAE5CpE,KAAK+rD,mBACVv4B,EAAU1B,cAAc,GACC7b,EAAY80B,qBAGzC/qC,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAENjD,KAAKL,OAAOoY,qBAErB,OACE,IAAIi0C,EAAsC/1C,EAAY5U,MAItD,OAHIyqD,IACFE,GAAcA,GAEZrL,GAAkBj9B,EAAA2B,KAAKW,IAClBhmB,KAAKL,OAAO0S,UAAe25C,IAEpChsD,KAAKk5C,YAAcx1B,EAAA2B,KAAKY,IACjBjmB,KAAKL,OAAO4S,UAAUy5C,IAE/B,OACE,IAAIC,EAAsCh2C,EAAY5U,MAOtD,OANIyqD,IACFG,EAAWC,QACTx1B,QAAQ,GACRu1B,IAGItL,EAAel6B,MAIrB,OACE,GAAI0lC,UAAUF,GAAW,OAAOjsD,KAAKL,OAAOmS,UAAUoJ,QAAQ+wC,IAC9D,MAEF,OACE,GAAIG,WAAWH,GAAW,OAAOjsD,KAAKL,OAAOmS,UAAUoJ,QAAQ+wC,IAC/D,MAEF,OACE,GAAII,WAAWJ,GAAW,OAAOjsD,KAAKL,OAAOmS,UAAUoJ,QAAQ+wC,IAC/D,MAEF,OACE,GAAIK,UAAUL,GAAW,OAAOjsD,KAAKL,OAAOmS,UAAUoJ,QAAQ+wC,IAC9D,MAEF,OACE,GAAIM,WAAWN,GAAW,OAAOjsD,KAAKL,OAAOmS,UAAUoJ,QAAQ+wC,IAC/D,MAEF,OACE,GAAIO,WAAWP,GAAW,OAAOjsD,KAAKL,OAAOmS,UAAUoJ,QAAQ+wC,IAC/D,MAEF,QACE,GAAIQ,YAAYR,GAAW,OAAOjsD,KAAKL,OAAOmS,UAAUoJ,QAAQ+wC,IAChE,MAEF,OAOA,OACE,IAAKjsD,KAAKolB,QAAQ+0B,SAAU,CAC1B,GAAIqS,WAAWP,GAAW,OAAOjsD,KAAKL,OAAOmS,UAAUoJ,QAAQ+wC,IAC/D,MAEF,OAAOjsD,KAAKL,OAAOsS,UAAUiJ,QAAQ+wC,GAAW9wC,SAAS8wC,IAE3D,OACA,OACE,OAAOjsD,KAAKL,OAAOsS,UAAUiJ,QAAQ+wC,GAAW9wC,SAAS8wC,IAE3D,QACE,GAAIS,WAAWT,GAAW,OAAOjsD,KAAKL,OAAO0S,UAAUs6C,WAAWV,IAClE,MAEF,QACE,GAAIW,WAAWX,GAAW,OAAOjsD,KAAKL,OAAO4S,UAAUs6C,WAAWZ,IAClE,MAEF,QACE,MAEF,QACE1iC,QAAO,GAOX,OAAI8iC,WAAWJ,IACbjsD,KAAKk5C,YAAcx1B,EAAA2B,KAAK7G,IACjBxe,KAAKL,OAAOmS,UAAUoJ,QAAQ+wC,MAErCjsD,KAAKk5C,YAAcx1B,EAAA2B,KAAKG,IACjBxlB,KAAKL,OAAOsS,UAAUiJ,QAAQ+wC,GAAW9wC,SAAS8wC,KAG7D,OAEE,OADA1iC,QAAQuiC,GACD9rD,KAAK8sD,oBAA8C72C,EAAY5U,OAU1E,OALArB,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEbjD,KAAKk5C,YAAcyH,EACZ3gD,KAAKL,OAAOoY,qBAGrBghC,EAAAr3C,UAAAorD,oBAAA,SAAoBC,GAClB,IAAIC,EAAsChtD,KAAKo5C,eAAej4C,IAAI4rD,GAClE,IAAKC,EAAe,CAClB,IAAIC,EAAeF,EAAY3oD,OAC3B8oD,EAAe,IAAIlqC,WAAW,EAAmB,EAAfiqC,GACtCC,EAAa,GAA6B,IAAvBD,EACnBC,EAAa,GAAMD,IAAkB,EAAK,IAC1CC,EAAa,GAAMD,IAAiB,GAAM,IAC1CC,EAAa,GAAMD,IAAiB,GAAM,IAC1C,IAAK,IAAI5sD,EAAI,EAAGA,EAAI4sD,IAAgB5sD,EAClC6sD,EAAa,EAAQ,EAAJ7sD,GAA6C,IAAnC0sD,EAAYzoD,WAAWjE,GAClD6sD,EAAa,EAAQ,EAAJ7sD,GAAU0sD,EAAYzoD,WAAWjE,KAAO,EAAK,IAEhE2sD,EAAgBhtD,KAAK69C,iBAAiBqP,EAAcltD,KAAKolB,QAAQU,UAAU+W,UAC3E78B,KAAKo5C,eAAenxB,IAAI8kC,EAAaC,GAEvC,IAAIG,EAAeH,EAAcx8C,OAC7B48C,EAAaptD,KAAKo1B,QAAQrQ,MAAM5jB,IAAI,UAExC,OADAnB,KAAKk5C,YAAckU,GAA0BptD,KAAKolB,QAAQU,UACtD9lB,KAAKolB,QAAQ+0B,SACRn6C,KAAKL,OAAOsS,UAAUiJ,QAAQiyC,GAAehyC,SAASgyC,KAE/D5jC,OAAO8iC,WAAWc,IACXntD,KAAKL,OAAOmS,UAAUoJ,QAAQiyC,MAGvCpU,EAAAr3C,UAAAqqD,mBAAA,SAAmB3D,EAAmBxc,GAGpC,IAII/c,EAJAw+B,GAAW,EACXnX,EAAOtK,EAAYxnC,OAEnB83C,EAAakM,EAAYxtB,eAE7B,OAAQshB,GACN,KAAKt4B,EAAAre,WAAWwZ,IACd8P,EAASzd,WAAkB,IAAIk8C,WAAWpX,IAC1C,MAEF,KAAKtyB,EAAAre,WAAW0Z,IACd4P,EAASzd,WAAkB,IAAIlM,MAAWgxC,IAC1C,MAEF,KAAKtyB,EAAAre,WAAW6Z,IACdyP,EAASzd,WAAkB,IAAIm8C,aAAarX,IAC5C,MAEF,KAAKtyB,EAAAre,WAAW+Z,IACduP,EAASzd,WAAkB,IAAIo8C,aAAatX,IAC5C,MAEF,QACE,MAAM,IAAIn4B,MAAM,0BAMpB,IAFA,IACIpL,EADA84C,EAAQ,IAAIvmD,MAAqBgxC,GAE5B71C,EAAI,EAAGA,EAAI61C,IAAQ71C,EAI1B,GAHAorD,EAAMprD,GAAKurC,EAAYvrC,GACnBL,KAAKg8C,kBAA8BpQ,EAAYvrC,GAAI+nD,GACnDA,EAAYpR,aAAah3C,KAAKL,QAC9B0tD,EAEF,GADA16C,EAAO3S,KAAKq8C,wBAAwBoP,EAAMprD,IACtCue,yBAAyBjM,IAASiR,EAAApe,aAAaqZ,MAEjD,OADA0K,OAAOzK,2BAA2BnM,IAASupC,GACnCA,GACN,KAAKt4B,EAAAre,WAAWwZ,IACd3N,WAAkByd,GAAQxuB,GAAK2e,0BAA0BrM,GACzD,MAEF,KAAKiR,EAAAre,WAAW0Z,IACd7N,WAAkByd,GAAQxuB,GAAKq2B,QAC7BxX,6BAA6BvM,GAC7BwM,8BAA8BxM,IAEhC,MAEF,KAAKiR,EAAAre,WAAW6Z,IACdhO,WAAkByd,GAAQxuB,GAAKgf,0BAA0B1M,GACzD,MAEF,KAAKiR,EAAAre,WAAW+Z,IACdlO,WAAkByd,GAAQxuB,GAAKkf,0BAA0B5M,GACzD,MAEF,QACE4W,QAAO,QAKX8jC,GAAW,EAYjB,MAAM,IAAItvC,MAAM,oBAGlBg7B,EAAAr3C,UAAA+/C,qBAAA,SAAqBxrC,EAA2B0qC,GAC9C,QAAIl3B,EAAWzpB,KAAKo1B,QAAQhC,kBAC1Bnd,EAAWA,WACXjW,KAAK09B,iBAEP,GAAIjU,EACF,GAAIA,EAAS3B,QAAQrB,MAAQyiB,EAAAvf,YAAYC,gBAAiB,CACxD,IACIuC,EAD4B1C,EAAS3B,QAChB+J,0BACvB5b,EAAW6b,cACX,KACA7b,GAEF,GAAIkW,EAAU,CACZ,IAAIshC,EAAWrV,EAAAsV,gBAAuB1tD,KAAMmsB,EAAUlW,GAClDsqC,EAAe,IAAIr7C,MAGnBy6C,EAAY3/C,KAAK09B,gBAAgBhD,aAAa16B,KAAKolB,QAAQU,WAI/D,GAHAy6B,EAAa97C,KAAKzE,KAAKL,OAAOyV,eAAeuqC,EAAUtsC,MAAOo6C,IAG1DthC,EAAShB,YACX,IAAmB,IAAAtC,EAAAJ,EAAA0D,EAAShB,QAAQ0D,UAAQsL,EAAAtR,EAAAF,QAAAwR,EAAAvR,KAAAuR,EAAAtR,EAAAF,OAAA,CAAvC,IAAIO,EAAMiR,EAAA94B,MACb,GAAI6nB,EAAOzC,MAAQyiB,EAAAvf,YAAY4J,MAAO,CACpC,IAAIo6B,EAAezkC,EACfwT,EAAmBixB,EAAMjsD,UAAU2mB,YACnCslC,EAAMrjC,GAAG4e,EAAA/e,aAAa4L,UACxBxM,QAAO,GACEmT,GAAoBA,EAAiBvkB,aAC9CooC,EAAa97C,KAAKzE,KAAKL,OAAOsU,YAAY05C,EAAMr6C,KAAKupB,SACnD78B,KAAKL,OAAOyT,eAAeusC,EAAUtsC,MAAOrT,KAAKolB,QAAQ8lC,gBACzDlrD,KAAKg8C,kBAAkBtf,EAAiBvkB,YAAaw1C,EAAMr6C,MAC3Dq6C,EAAMr6C,KAAKsnB,eACX+yB,EAAMhyB,kHAQhB,IAAIY,EAAsBpQ,EAASoQ,oBAanC,OAZIA,GACFgkB,EAAa97C,KAAKzE,KAAKypD,kBAAkBltB,EAAqBtmB,EAAWoX,UAAWpX,EAClFjW,KAAKL,OAAOyT,eAAeusC,EAAUtsC,MAAOrT,KAAKolB,QAAQ8lC,kBAK7D3K,EAAa97C,KAAKzE,KAAKL,OAAOyT,eAAeusC,EAAUtsC,MAAOrT,KAAKolB,QAAQ8lC,iBAC3ElrD,KAAK09B,gBAAgB5C,cAAc6kB,GACnC8N,EAAWztD,KAAKL,OAAO6V,YAAY,KAAM+qC,EAAcvgD,KAAKolB,QAAQ8lC,gBAEpElrD,KAAKk5C,YAAc/sB,EAAS7Y,KACrBm6C,QAGTztD,KAAKoF,MACHqe,EAAAlhB,eAAeqrD,yEACf33C,EAAWA,WAAWhT,OAI5B,OAAOjD,KAAKL,OAAOoY,qBAGrBghC,EAAAr3C,UAAAggD,+BAAA,SACEzrC,EACA0qC,EACAK,GAGA,YAHA,IAAAA,OAAA,GAGOhhD,KAAKg8C,kBACV/lC,EAAWA,WACX0qC,EAAc,EAEdK,IASJjI,EAAAr3C,UAAAigD,gCAAA,SACEzuB,EACAytB,EACA+K,GAEA,IAAIjiC,EAAWzpB,KAAKo1B,QAAQnC,sBAAsBC,EAAgBlzB,KAAK09B,iBACvE,IAAKjU,EAAU,OAAOzpB,KAAKL,OAAOoY,oBAElC,IACI6wC,EADA9gC,EAAU2B,EAAS3B,QAEvB,OAAQA,EAAQrB,MACd,KAAKyiB,EAAAvf,YAAYc,OACf,OAAI3C,EAAQwC,GAAG4e,EAAA/e,aAAaC,SACnBguB,EAAAwT,mBAA0B5rD,KAAc8nB,EAASoL,GAErDlzB,KAAK27C,cAAsB7zB,IAGhCyB,OAAgBzB,EAASxU,MAAQoQ,EAAA2B,KAAKa,MACzB4B,EAASwC,GAAG4e,EAAA/e,aAAawM,SAC7B32B,KAAKo8C,sBAA8Bt0B,EAAS64B,EAAgB+K,IAErE1rD,KAAKk5C,YAAuBpxB,EAASxU,KAC9BtT,KAAKL,OAAO+T,gBAAyBoU,EAASnP,aAAc3Y,KAAKk5C,YAAYte,kBAP3E56B,KAAKL,OAAOoY,oBASvB,KAAKmxB,EAAAvf,YAAYiJ,UACf,OAAK5yB,KAAKw8C,YAAwB10B,EAASmO,OAG3Cj2B,KAAKk5C,YAAcx1B,EAAA2B,KAAK7G,IACRsJ,EAASwC,GAAG4e,EAAA/e,aAAawM,SAChC32B,KAAKL,OAAOmS,UAAsBgW,EAASkO,eAE7Ch2B,KAAKL,OAAO+T,gBAA4BoU,EAASnP,aAAciL,EAAAre,WAAWwZ,MANxE/e,KAAKL,OAAOoY,oBAQvB,KAAKmxB,EAAAvf,YAAY4J,MASf,OARAhK,OAAOE,EAASk/B,kBAChBp/B,OAAezB,EAAS6T,cAAgB,GACxCitB,EAAa5oD,KAAKg8C,kBACJvyB,EAAS0J,iBACrBnzB,KAAKolB,QAAQU,UAAS,GAGxB9lB,KAAKk5C,YAAsBpxB,EAASxU,KAC7BtT,KAAKL,OAAOiU,WACTkU,EAASxU,KAAK4iC,MAAQ,EACtBpuB,EAASxU,KAAKgX,GAAG,GACzBs+B,EACQ9gC,EAASxU,KAAKsnB,eACd9S,EAAS6T,cAGrB,KAAKuN,EAAAvf,YAAYwE,SACf,IAAIzsB,EAAuBomB,EAASsG,gBACpC,GAAI1sB,EAAW,CACb,IAAIyqB,EAAWzqB,EAAU0qB,QAAQ,MACjC,IAAKD,EAAU,OAAOnsB,KAAKL,OAAOoY,oBAClC,IAAIwZ,EAAYpF,EAASoF,UACzB,OAAKvxB,KAAK4pD,mBACRr4B,EACA,EACApF,EAAS7B,GAAG4e,EAAA/e,aAAa0N,UACzB3E,GAIE/G,EAASqI,kBACXo0B,EAAa5oD,KAAKg8C,kBACJvyB,EAAS0J,iBACrBhH,EAASqI,iBAAiBlhB,MAE5BtT,KAAKk5C,YAAc3nB,EAAU/Z,WACtBxX,KAAKypD,kBAAkBt9B,KAAc+G,EAAgB01B,KAE5D5oD,KAAKk5C,YAAc3nB,EAAU/Z,WACtBxX,KAAKypD,kBAAkBt9B,KAAc+G,IAXrClzB,KAAKL,OAAOoY,oBAkBrB,OAJA/X,KAAKoF,MACHqe,EAAAlhB,eAAekxB,oCACfP,EAAejwB,MAAkB6kB,EAAS4F,WAAuB5F,EAASQ,OAAO3kB,YAE5E3D,KAAKL,OAAOoY,oBAQzB,OAJA/X,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACf+F,EAAejwB,OAEVjD,KAAKL,OAAOoY,qBAGrBghC,EAAAr3C,UAAAkgD,yBAAA,SAAyB3rC,EAA+B0qC,GACtD,IAAI7qC,EAAYypC,EACdv/C,KAAKg8C,kBAAkB/lC,EAAWH,UAAW4N,EAAA2B,KAAKO,IAAG,GACrD5lB,KAAKk5C,YACLl5C,KAAKL,QAEH+tC,EAAS1tC,KAAKg8C,kBAAkB/lC,EAAWy3B,OAAQiT,GACnDhT,EAAS3tC,KAAKg8C,kBAAkB/lC,EAAW03B,OAAQgT,GACvD,OAAO3gD,KAAKL,OAAO2W,SAASR,EAAW43B,EAAQC,IAGjDoL,EAAAr3C,UAAAmgD,8BAAA,SAA8B5rC,EAAoC0qC,GAEhE,IASIjuC,EACAwpC,EACA2R,EAqIAC,EAhJAC,EAAW/tD,KAAKg8C,kBAClB/lC,EAAWq4B,QACXqS,GAAkBj9B,EAAA2B,KAAKa,KACnBxC,EAAA2B,KAAK7G,IACLmiC,EAAc,GAElB,GAMEoD,GAAoB,EAExB,OAAQ9tC,EAAWq1B,UACjB,KAAKnC,EAAAhL,MAAM6D,UACT,GAAIhiC,KAAKk5C,YAAYzC,YAKnB,OAJAz2C,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAENjD,KAAKL,OAAOoY,oBAErB,OAAQ/X,KAAKk5C,YAAYzyB,MACvB,OACA,OACA,OACA,OACA,QAAoBs9B,GAAoB,EACxC,QACErxC,EAAKkR,EAAA/Y,SAAS+xC,OACdV,EAAat4B,EAAAre,WAAWwZ,IACxB8uC,EAAY7tD,KAAKL,OAAOmS,UAAU,GAClC,MAEF,OACA,OACEY,EAAK1S,KAAKolB,QAAQ+0B,SACdv2B,EAAA/Y,SAASo7C,OACTriC,EAAA/Y,SAAS+xC,OACbV,EAAal8C,KAAKolB,QAAQ+0B,SACtBv2B,EAAAre,WAAW0Z,IACX2E,EAAAre,WAAWwZ,IACf8uC,EAAY7tD,KAAKk5C,YAAYjC,YAAYj3C,KAAKL,QAC9C,MAEF,OACA,OACE+S,EAAKkR,EAAA/Y,SAASo7C,OACd/J,EAAat4B,EAAAre,WAAW0Z,IACxB4uC,EAAY7tD,KAAKL,OAAOsS,UAAU,GAClC,MAEF,QACES,EAAKkR,EAAA/Y,SAASq7C,OACdhK,EAAat4B,EAAAre,WAAW6Z,IACxByuC,EAAY7tD,KAAKL,OAAO0S,UAAU,GAClC,MAEF,QACEK,EAAKkR,EAAA/Y,SAASs7C,OACdjK,EAAat4B,EAAAre,WAAW+Z,IACxBuuC,EAAY7tD,KAAKL,OAAO4S,UAAU,GAClC,MAEF,QAKE,MAJAvS,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,0BAGpB,MAEF,KAAKorB,EAAAhL,MAAM8D,YACT,GAAIjiC,KAAKk5C,YAAYzC,YAKnB,OAJAz2C,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAENjD,KAAKL,OAAOoY,oBAErB,OAAQ/X,KAAKk5C,YAAYzyB,MACvB,OACA,OACA,OACA,OACA,QAAoBs9B,GAAoB,EACxC,QACErxC,EAAKkR,EAAA/Y,SAASu7C,OACdlK,EAAat4B,EAAAre,WAAWwZ,IACxB8uC,EAAY7tD,KAAKL,OAAOmS,UAAU,GAClC,MAEF,OACA,OACEY,EAAK1S,KAAKolB,QAAQ+0B,SACdv2B,EAAA/Y,SAASw7C,OACTziC,EAAA/Y,SAASu7C,OACblK,EAAal8C,KAAKolB,QAAQ+0B,SACtBv2B,EAAAre,WAAW0Z,IACX2E,EAAAre,WAAWwZ,IACf8uC,EAAY7tD,KAAKk5C,YAAYjC,YAAYj3C,KAAKL,QAC9C,MAEF,OACA,OACE+S,EAAKkR,EAAA/Y,SAASw7C,OACdnK,EAAat4B,EAAAre,WAAW0Z,IACxB4uC,EAAY7tD,KAAKL,OAAOsS,UAAU,GAClC,MAEF,QACES,EAAKkR,EAAA/Y,SAASy7C,OACdpK,EAAat4B,EAAAre,WAAW6Z,IACxByuC,EAAY7tD,KAAKL,OAAO0S,UAAU,GAClC,MAEF,QACEK,EAAKkR,EAAA/Y,SAAS07C,OACdrK,EAAat4B,EAAAre,WAAW+Z,IACxBuuC,EAAY7tD,KAAKL,OAAO4S,UAAU,GAClC,MAEF,QAKE,MAJAvS,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,0BAGpB,MAEF,QAKE,MAJA/d,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,mCAKpB,IAAI4hC,EAA0B,KAyB9B,OAtBIgB,GAAkBj9B,EAAA2B,KAAKa,KACzB4nC,EAAW9tD,KAAKL,OAAOkT,aAAaH,EAClCq7C,EACAF,IAKFlO,EAAY3/C,KAAK09B,gBAAgBhD,aAAa16B,KAAKk5C,aACnD4U,EAAW9tD,KAAKL,OAAOkT,aAAaH,EAClC1S,KAAKL,OAAOyT,eAAeusC,EAAUtsC,MAAO6oC,GAC5C2R,IAIA9J,IACFx6B,OAAOvpB,KAAKk5C,YAAY5uB,GAAG,KAC3BwjC,EAAWrL,EAAqBqL,EAAU9tD,KAAKk5C,YAAal5C,KAAKL,SAGnEmuD,EAAW9tD,KAAK0gD,2BAA2BzqC,EAAWq4B,QAASwf,GAAU,GAErEnN,GAAkBj9B,EAAA2B,KAAKa,MACzBqD,QAAQo2B,GACDmO,IAGT9tD,KAAKk5C,YAAc3vB,OAAOo2B,GAAWrsC,KACrCtT,KAAK09B,gBAAgB5C,cAAqB6kB,GACnC3/C,KAAKL,OAAO6V,YAAY,MAC7BxV,KAAKL,OAAOyV,eAAuBuqC,EAAWtsC,MAAO06C,GACrDD,EACA9tD,KAAKL,OAAOyT,eAAuBusC,EAAWtsC,MAAO6oC,IACpDA,KAGLnD,EAAAr3C,UAAAogD,6BAAA,SACE7rC,EACA0qC,EACAK,QAAA,IAAAA,OAAA,GAEA,IAEIruC,EAFAoxC,GAAoB,EACpBD,GAAW,EAGf,OAAQ7tC,EAAWq1B,UACjB,KAAKnC,EAAAhL,MAAMuD,KACT,GAAI1hC,KAAKk5C,YAAYzC,YAKnB,OAJAz2C,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAENjD,KAAKL,OAAOoY,oBAErBpF,EAAO3S,KAAKg8C,kBACV/lC,EAAWq4B,QACXqS,GAAkBj9B,EAAA2B,KAAKa,KACnBxC,EAAA2B,KAAK7G,IACLmiC,EAAc,GAElB,GAEFoD,EAAoB/jD,KAAKk5C,YAAY5uB,GAAG,IACxC,MAEF,KAAK6e,EAAAhL,MAAMwD,MACT,GAAI3hC,KAAKk5C,YAAYzC,YAKnB,OAJAz2C,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAENjD,KAAKL,OAAOoY,oBAErB,GAAI9B,EAAWq4B,QAAQ7nB,MAAQ9C,EAAA+C,SAAS6G,SACa,GAA/BtX,EAAWq4B,QAAS9gB,aACW,GAA/BvX,EAAWq4B,QAAS9gB,YAcxC,OARA7a,EAAO3S,KAAKg8C,kBACV/lC,EAAWq4B,QACXqS,GAAkBj9B,EAAA2B,KAAKa,KACnBxC,EAAA2B,KAAK7G,IACLmiC,EAAc,GAElB,GAEM3gD,KAAKk5C,YAAYzyB,MACvB,OACA,OACA,OACA,OACA,QAAoBs9B,GAAoB,EACxC,QACEpxC,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASu7C,OAAQpmD,KAAKL,OAAOmS,UAAU,GAAIa,GAC3E,MAEF,OACE,GAAI3S,KAAKk5C,YAAYzC,YAKnB,OAJAz2C,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAENjD,KAAKL,OAAOoY,oBAIvB,OACEpF,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASw7C,OACTziC,EAAA/Y,SAASu7C,OACbpmD,KAAKk5C,YAAYlC,aAAah3C,KAAKL,QACnCgT,GAEF,MAEF,OACA,OACEA,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASw7C,OAAQrmD,KAAKL,OAAOsS,UAAU,GAAIU,GAC3E,MAEF,QACEA,EAAO3S,KAAKL,OAAO8S,YAAYmR,EAAA/b,QAAQmmD,OAAQr7C,GAC/C,MAEF,QACEA,EAAO3S,KAAKL,OAAO8S,YAAYmR,EAAA/b,QAAQomD,OAAQt7C,QAnDnDA,EAAO3S,KAAKwhD,yBAA4CvrC,EAAWq4B,QAASqS,GAAgB,GAC5F3gD,KAAK8+C,iBAAiBnsC,EAAMsD,EAAWhT,OAuDzC,MAEF,KAAKkmC,EAAAhL,MAAM6D,UACT,GAAIhiC,KAAKk5C,YAAYzC,YAKnB,OAJAz2C,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAENjD,KAAKL,OAAOoY,oBAWrB,OATA+rC,GAAW,EACXnxC,EAAO3S,KAAKg8C,kBACV/lC,EAAWq4B,QACXqS,GAAkBj9B,EAAA2B,KAAKa,KACnBxC,EAAA2B,KAAK7G,IACLmiC,EAAc,GAElB,GAEM3gD,KAAKk5C,YAAYzyB,MACvB,OACA,OACA,OACA,OACA,QAAoBs9B,GAAoB,EACxC,QACEpxC,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS+xC,OAAQjqC,EAAM3S,KAAKL,OAAOmS,UAAU,IAC7E,MAEF,OACE,GAAI9R,KAAKk5C,YAAYzC,YAKnB,OAJAz2C,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAENjD,KAAKL,OAAOoY,oBAIvB,OACEpF,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASo7C,OACTriC,EAAA/Y,SAAS+xC,OACbjqC,EACA3S,KAAKk5C,YAAYjC,YAAYj3C,KAAKL,SAEpC,MAEF,OACA,OACEgT,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASo7C,OAAQtzC,EAAM3S,KAAKL,OAAOsS,UAAU,IAC7E,MAEF,QACEU,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASq7C,OAAQvzC,EAAM3S,KAAKL,OAAO0S,UAAU,IAC7E,MAEF,QACEM,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASs7C,OAAQxzC,EAAM3S,KAAKL,OAAO4S,UAAU,IAIjF,MAEF,KAAK42B,EAAAhL,MAAM8D,YACT,GAAIjiC,KAAKk5C,YAAYzC,YAKnB,OAJAz2C,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAENjD,KAAKL,OAAOoY,oBAWrB,OATA+rC,GAAW,EACXnxC,EAAO3S,KAAKg8C,kBACV/lC,EAAWq4B,QACXqS,GAAkBj9B,EAAA2B,KAAKa,KACnBxC,EAAA2B,KAAK7G,IACLmiC,EAAc,GAElB,GAEM3gD,KAAKk5C,YAAYzyB,MACvB,OACA,OACA,OACA,OACA,QAAoBs9B,GAAoB,EACxC,QACEpxC,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASu7C,OAAQzzC,EAAM3S,KAAKL,OAAOmS,UAAU,IAC7E,MAEF,OACE,GAAI9R,KAAKk5C,YAAYzC,YAKnB,OAJAz2C,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAENjD,KAAKL,OAAOoY,oBAIvB,OACEpF,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASw7C,OACTziC,EAAA/Y,SAASu7C,OACbzzC,EACA3S,KAAKk5C,YAAYjC,YAAYj3C,KAAKL,SAEpC,MAEF,OACA,OACEgT,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASw7C,OAAQ1zC,EAAM3S,KAAKL,OAAOsS,UAAU,IAC7E,MAEF,QACEU,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASy7C,OAAQ3zC,EAAM3S,KAAKL,OAAO0S,UAAU,IAC7E,MAEF,QACEM,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAAS07C,OAAQ5zC,EAAM3S,KAAKL,OAAO4S,UAAU,IAIjF,MAEF,KAAK42B,EAAAhL,MAAMqE,YAST7vB,EAAOu7C,EARPv7C,EAAO3S,KAAKg8C,kBACV/lC,EAAWq4B,QACXqS,GAAkBj9B,EAAA2B,KAAKa,KACnBxC,EAAA2B,KAAK7G,IACLmiC,EAAc,GAElB,GAE0B3gD,KAAKk5C,YAAal5C,KAAKL,QACnDK,KAAKk5C,YAAcx1B,EAAA2B,KAAKU,KACxB,MAEF,KAAKojB,EAAAhL,MAAMsE,MACT,GAAIziC,KAAKk5C,YAAYzC,YAKnB,OAJAz2C,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAENjD,KAAKL,OAAOoY,oBAcrB,OAZApF,EAAO3S,KAAKg8C,kBACV/lC,EAAWq4B,QACXqS,GAAkBj9B,EAAA2B,KAAKa,KACnBxC,EAAA2B,KAAK7G,IACLmiC,EAAer2B,GAAE,GACf5G,EAAA2B,KAAKG,IACLm7B,EACNA,GAAkBj9B,EAAA2B,KAAKa,KACpB,EACA,GACH,GAEMlmB,KAAKk5C,YAAYzyB,MACvB,OACA,OACA,OACA,OACA,QAAoBs9B,GAAoB,EACxC,QACEpxC,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASo9C,OAAQt1C,EAAM3S,KAAKL,OAAOmS,WAAW,IAC9E,MAEF,OACE,GAAI9R,KAAKk5C,YAAYzC,YAKnB,OAJAz2C,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAENjD,KAAKL,OAAOoY,oBAIvB,OACEpF,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAKolB,QAAQ+0B,SACTv2B,EAAA/Y,SAASq9C,OACTtkC,EAAA/Y,SAASo9C,OACbt1C,EACA3S,KAAKk5C,YAAYhC,eAAel3C,KAAKL,SAEvC,MAEF,OACA,OACEgT,EAAO3S,KAAKL,OAAOkT,aAAa+Q,EAAA/Y,SAASq9C,OAAQv1C,EAAM3S,KAAKL,OAAOsS,WAAW,GAAI,IAItF,MAEF,KAAKk3B,EAAAhL,MAAMmC,OAUT,MAJAtgC,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,mBAElB,QAKE,MAJA/d,KAAKoF,MACHqe,EAAAlhB,eAAe4qB,wBACflX,EAAWhT,OAEP,IAAI8a,MAAM,2BAOpB,OAJIgmC,GAAqB/C,IACvBz3B,OAAOvpB,KAAKk5C,YAAY5uB,GAAG,KAC3B3X,EAAO8vC,EAAqB9vC,EAAM3S,KAAKk5C,YAAal5C,KAAKL,SAEpDmkD,EACH9jD,KAAK0gD,2BAA2BzqC,EAAWq4B,QAAS37B,EAAMguC,GAAkBj9B,EAAA2B,KAAKa,MACjFvT,GAGNomC,EAAAr3C,UAAAo9C,iBAAA,SAAiBnsC,EAAqB1P,GACpC,GAAKjD,KAAKolB,QAAQxH,UAAlB,CACA,IAAIha,EAASX,EAAMW,OACfA,EAAO03B,eAAiB,IAC1B13B,EAAO03B,eAAiBt7B,KAAKL,OAAO+gB,iBAAiB9c,EAAOC,iBAE9DZ,EAAMo4B,aAAe1oB,EAChB3S,KAAK09B,gBAAgBjE,iBAAgBz5B,KAAK09B,gBAAgBjE,mBAC/Dz5B,KAAK09B,gBAAgBjE,eAAeh1B,KAAKxB,KAE7C81C,EA1hKA,CAA8Bt1B,EAAAze,mBA+hK9B,SAAAy9C,EAAqC9vC,EAAqBW,EAAY3T,GACpE,OAAQ2T,EAAKmT,MACX,OACE9T,EAAOhT,EAAOkT,aAAa+Q,EAAA/Y,SAAS48C,OAClC9nD,EAAOkT,aAAa+Q,EAAA/Y,SAASy8C,OAC3B30C,EACAhT,EAAOmS,UAAU,KAEnBnS,EAAOmS,UAAU,KAEnB,MAEF,OACEa,EAAOhT,EAAOkT,aAAa+Q,EAAA/Y,SAAS48C,OAClC9nD,EAAOkT,aAAa+Q,EAAA/Y,SAASy8C,OAC3B30C,EACAhT,EAAOmS,UAAU,KAEnBnS,EAAOmS,UAAU,KAEnB,MAEF,OACEa,EAAOhT,EAAOkT,aAAa+Q,EAAA/Y,SAASg9C,OAClCl1C,EACAhT,EAAOmS,UAAU,MAEnB,MAEF,OACEa,EAAOhT,EAAOkT,aAAa+Q,EAAA/Y,SAASg9C,OAClCl1C,EACAhT,EAAOmS,UAAU,QAEnB,MAEF,QACEa,EAAOhT,EAAOkT,aAAa+Q,EAAA/Y,SAASg9C,OAClCl1C,EACAhT,EAAOmS,UAAU,IAEnB,MAEF,QACE,MAAM,IAAIiM,MAAM,+BAGpB,OAAOpL,EAIT,SAAAu7C,EAA+Bv7C,EAAqBW,EAAY3T,GAC9D,OAAQ2T,EAAKmT,MACX,QACE9T,EAAOhT,EAAO8S,YAAYmR,EAAA/b,QAAQsmD,OAAQx7C,GAC1C,MAEF,OACA,OACEA,EAAOhT,EAAO8S,YAAYmR,EAAA/b,QAAQumD,OAAQz7C,GAC1C,MAEF,OAEA,OACEA,EAAOhT,EAAO8S,YAAyB,IAAba,EAAK4iC,KAAatyB,EAAA/b,QAAQumD,OAASxqC,EAAA/b,QAAQsmD,OAAQx7C,GAC7E,MAEF,QACEA,EAAOhT,EAAOkT,aAAa+Q,EAAA/Y,SAAS66C,MAAO/yC,EAAMhT,EAAO0S,UAAU,IAClE,MAEF,QACEM,EAAOhT,EAAOkT,aAAa+Q,EAAA/Y,SAAS86C,MAAOhzC,EAAMhT,EAAO4S,UAAU,IAClE,MAEF,QACE,MAAM,IAAIwL,MAAM,0BAGpB,OAAOpL,EAIT,SAAA4sC,EAA8B5sC,EAAqBW,EAAY3T,GAC7D,OAAQ2T,EAAKmT,MACX,OACA,OACE9T,EAAOhT,EAAOkT,aAAa+Q,EAAA/Y,SAASg7C,MAAOlzC,EAAMhT,EAAOsS,UAAU,IAClE,MAEF,OACA,OACmB,IAAbqB,EAAK4iC,OACPvjC,EAAOhT,EAAOkT,aAAa+Q,EAAA/Y,SAASg7C,MAAOlzC,EAAMhT,EAAOsS,UAAU,KAEpE,MAEF,QACEU,EAAOhT,EAAOkT,aAAa+Q,EAAA/Y,SAASi7C,MAAOnzC,EAAMhT,EAAO0S,UAAU,IAClE,MAEF,QACEM,EAAOhT,EAAOkT,aAAa+Q,EAAA/Y,SAASk7C,MAAOpzC,EAAMhT,EAAO4S,UAAU,IAClE,MAEF,QACE,MAAM,IAAIwL,MAAM,0BAGpB,OAAOpL,EA7oKIjT,EAAAq5C,WA+hKbr5C,EAAA+iD,uBAmDA/iD,EAAAwuD,iBAiCAxuD,EAAA6/C,+BCvyKA,IAAA8O,EAGAA,EAAA,WACA,OAAAruD,KADA,GAIA,IAEAquD,KAAAv1B,SAAA,cAAAA,KAAA,EAAAw1B,MAAA,QACC,MAAAC,GAED,iBAAAC,SAAAH,EAAAG,QAOA7uD,EAAAD,QAAA2uD,iFCfA,IAAMI,EAAS,GAMf,SAAA7e,EAA0BrnB,GAKxB,IAJA,IAiBIkK,EAjBAkR,EAAM,EACNx/B,EAAMokB,EAAKnkB,OAGRu/B,EAAM,EAAIx/B,GACK,IAApBokB,EAAKjkB,WAAWq/B,IAChBpb,EAAKjkB,WAAWq/B,EAAM,IAAM8qB,GAE5B9qB,GAAO,EAUT,KAPIA,EAAM,GAAKx/B,EAAMokB,EAAKnkB,UACxBmkB,EAAOA,EAAK/jB,UAAUm/B,EAAKx/B,GAC3BA,GAAOw/B,EACPA,EAAM,GAIDA,EAAM,EAAIx/B,GAAK,CAIpB,GAHAsuB,GAAQ,EAINlK,EAAKjkB,WAAWq/B,IAAQ8qB,GACA,IAAxBlmC,EAAKjkB,WAAWq/B,EAAM,GACtB,CAGA,IADAlR,EAAQkR,EAAM,GAAKx/B,IAEjBw/B,EAAM,EAAIx/B,GACVokB,EAAKjkB,WAAWq/B,EAAM,IAAM8qB,EAC5B,CACAlmC,EAAOkK,EACHlK,EAAK/jB,UAAU,EAAGm/B,GAClBpb,EAAK/jB,UAAU,EAAGm/B,GAAOpb,EAAK/jB,UAAUm/B,EAAM,GAClDx/B,GAAO,EACP,SAKF,IADAsuB,EAAQkR,EAAM,GAAKx/B,IACkB,IAAxBokB,EAAKjkB,WAAWq/B,EAAM,IACjCA,EAAM,EAAIx/B,GACc,IAAxBokB,EAAKjkB,WAAWq/B,EAAM,IACtBpb,EAAKjkB,WAAWq/B,EAAM,IAAM8qB,EAC5B,CAGA,IADA,IAAIC,EAAO/qB,IACF+qB,GAAQ,GACf,GAAInmC,EAAKjkB,WAAWoqD,IAASD,EAAW,CAClC9qB,EAAM+qB,GAAQ,GACS,IAAzBnmC,EAAKjkB,WAAWoqD,EAAO,IACE,IAAzBnmC,EAAKjkB,WAAWoqD,EAAO,KAEvBnmC,EAAOkK,EACHlK,EAAK/jB,UAAU,EAAGkqD,GAClBnmC,EAAK/jB,UAAU,EAAGkqD,GAAQnmC,EAAK/jB,UAAUm/B,EAAM,GACnDx/B,GAAOw/B,EAAM,EAAI+qB,EACjB/qB,EAAM+qB,EAAO,GAEf,MAKJ,GAAIA,EAAO,GAAK/qB,EAAM,IACT,GAAPA,GACgB,IAAlBpb,EAAKjkB,WAAW,IACE,IAAlBikB,EAAKjkB,WAAW,IAChB,CAEAH,GADAokB,EAAOA,EAAK/jB,UAAUm/B,EAAM,IACjBv/B,OACX,WAKRu/B,IAEF,OAAOx/B,EAAM,EAAIokB,EAAO,IAc1B,SAAAomC,EAAwB9qD,GAEtB,IADA,IAAI8/B,EAAM9/B,EAAeO,SAChBu/B,EAAM,GACb,GAAI9/B,EAAeS,WAAWq/B,IAAQ8qB,EACpC,OAAO5qD,EAAeW,UAAU,EAAGm/B,GAGvC,MAAO,IArGTjkC,EAAAkwC,YAoFAlwC,EAAA0sB,QAAA,SAAwBvoB,EAAwB+qD,GAC9C,OAAI/qD,EAAegsC,WAAW,QACrBhsC,EAEF+rC,EACL+e,EAAQC,GAAUrrC,OAAO2jB,aAAaunB,GAAa5qD,IAKvDnE,EAAAivD,yFCvGA,SAAkBE,GAEhBA,IAAA,eACAA,IAAA,wBACAA,IAAA,oCACAA,IAAA,oCACAA,IAAA,8CACAA,IAAA,yBAEAA,IAAA,kBACAA,IAAA,yCACAA,IAAA,sBACAA,IAAA,sBACAA,IAAA,wBACAA,IAAA,wBACAA,IAAA,wCACAA,IAAA,sCACAA,IAAA,oCACAA,IAAA,gCACAA,IAAA,0CACAA,IAAA,4BACAA,IAAA,4BACAA,IAAA,sCACAA,IAAA,8CACAA,IAAA,2CACAA,IAAA,4CACAA,IAAA,oBAEAA,IAAA,UAEAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YAEAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WAEAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UAEAA,IAAA,0BACAA,IAAA,wBACAA,IAAA,YACAA,IAAA,0BACAA,IAAA,wBACAA,IAAA,eACAA,IAAA,kBACAA,IAAA,6BACAA,IAAA,gCACAA,IAAA,4BACAA,IAAA,kBACAA,IAAA,kBACAA,IAAA,oBACAA,IAAA,cACAA,IAAA,8BACAA,IAAA,oBACAA,IAAA,8BACAA,IAAA,8BACAA,IAAA,gBACAA,IAAA,wBACAA,IAAA,kBACAA,IAAA,2BACAA,IAAA,8BACAA,IAAA,0BACAA,IAAA,sBACAA,IAAA,gBACAA,IAAA,wBACAA,IAAA,0BACAA,IAAA,8BACAA,IAAA,kBACAA,IAAA,mBAEAA,IAAA,yBACAA,IAAA,wBACAA,IAAA,qCACAA,IAAA,aACAA,IAAA,8BAnIF,CAAkBnvD,EAAAmvD,WAAAnvD,EAAAmvD,cAuIlBnvD,EAAA2E,YAAA,SAA4B3D,GAC1B,OAAQA,GACN,QACA,QACA,UACA,UACE,OAAO,EAET,QACE,OAAO,IAMbhB,EAAAkmC,aAAA,SAA6BllC,GAC3B,OAAQA,GACN,QACA,OACA,QACA,QACA,SACA,SACA,UACA,UACA,UACA,WACA,WACE,OAAO,EAET,QACE,OAAOA,GAAC,MAAuBA,GAAC,OAMtChB,EAAA4kC,eAAA,SAA+B5jC,GAC7B,OAAOA,GAAC,IAAmBA,GAAC,IAI9BhB,EAAAkoC,aAAA,SAA6BlnC,GAC3B,OAAOA,GAAC,IAAmBA,GAAC,IAI9BhB,EAAA4lC,kBAAA,SAAkC5kC,GAChC,OAAOA,GAAC,IAAkBA,GAAC,IACpBA,GAAC,IAAkBA,GAAC,KACnB,IAADA,GACC,IAADA,GACAA,EAAI,QAiLqBqC,EAjLYrC,GAkL9B,GAAKqC,EAAO,QACnB+rD,EAAmB/rD,EAAagsD,GAFzC,IAAkChsD,GA7KlCrD,EAAA6lC,mBAAA,SAAmC7kC,GACjC,OAAOA,GAAC,IAAkBA,GAAC,KAI7BhB,EAAA+lC,iBAAA,SAAiC/kC,GAC/B,OAAOA,GAAC,IAAkBA,GAAC,IACpBA,GAAC,IAAkBA,GAAC,KACpBA,GAAC,IAAmBA,GAAC,IACpB,IAADA,GACC,IAADA,GACAA,EAAI,QAuKoBqC,EAvKYrC,GAwK7B,GAAKqC,EAAO,QACnB+rD,EAAmB/rD,EAAaisD,GAFzC,IAAiCjsD,GAnKjC,IAAMgsD,GACJ,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IACpB,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAEtCC,GACJ,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IACpB,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KACxB,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,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 diff --git a/lib/lint/README.md b/lib/lint/README.md new file mode 100644 index 00000000..d20da84e --- /dev/null +++ b/lib/lint/README.md @@ -0,0 +1,41 @@ +![AS](https://avatars1.githubusercontent.com/u/28916798?s=48) lint +====================== + +Recommended [TSLint](https://github.com/palantir/tslint) rules for use with AssemblyScript. Meant to spot the most common issues as you type. + +Not a sophisticated checker in its current state. + +Usage +----- + +Add the following `tslint.json` to your project: + +```json +{ + "extends": "@assemblyscript/lint" +} +``` + +Add additional rules if necessary. + +Add a script to your `package.json`: + +```json +"scripts": { + "lint": "tslint -c tslint.json --project ./path/to[/tsconfig.json] --format as" +} +``` + +Now, to check your sources, run: + +``` +$> npm run lint +``` + +If you are using [Visual Studio Code](https://code.visualstudio.com/), there's also a [TSLint extension](https://marketplace.visualstudio.com/items?itemName=eg2.tslint) that highlights issues as you type. + +Custom rules +------------ + +* **as-types** checks that all types are annotated or have an initializer. +* **as-variables** checks the use of `var` and `let` to match their semantic meaning. For reference, `var` becomes a distinct local or mutable global, while `let` becomes a shared local. diff --git a/lib/lint/base.json b/lib/lint/base.json new file mode 100644 index 00000000..5b6b2f41 --- /dev/null +++ b/lib/lint/base.json @@ -0,0 +1,118 @@ +{ + "rules": { + "adjacent-overload-signatures": {}, + "ban-types": { + "severity": "error", + "options": [ + ["object", "Not supported."], + ["any", "Not supported."], + ["undefined", "Not supported."], + ["never", "Not supported."], + ["number", "Use one of the WebAssembly types instead."], + ["boolean", "Use `bool` instead."] + ] + }, + "object-literal-shorthand": { + "severity": "error", + "options": ["never"] + }, + "restrict-plus-operands": { + "severity": "error" + }, + "curly": { + "options": ["ignore-same-line"] + }, + "deprecation": {}, + "encoding": { + "severity": "error" + }, + "eofline": {}, + "label-position": { + "severity": "error" + }, + "new-parens": { + "severity": "error" + }, + "no-any": { + "severity": "error" + }, + "no-arg": { + "severity": "error" + }, + "no-consecutive-blank-lines": {}, + "no-debugger": { + "severity": "error" + }, + "no-default-export": { + "severity": "error" + }, + "no-duplicate-imports": { + "severity": "error" + }, + "no-duplicate-super": { + "severity": "error" + }, + "no-duplicate-switch-case": { + "severity": "error" + }, + "no-duplicate-variable": { + "severity": "error" + }, + "no-eval": { + "severity": "error" + }, + "no-inferred-empty-object-type": { + "severity": "error" + }, + "no-internal-module": { + "severity": "error" + }, + "no-invalid-template-strings": { + "severity": "error" + }, + "no-invalid-this": { + "severity": "error" + }, + "no-irregular-whitespace": {}, + "no-misused-new": { + "severity": "error" + }, + "no-object-literal-type-assertion": { + "severity": "error" + }, + "no-parameter-properties": { + "severity": "error" + }, + "no-require-imports": { + "severity": "error" + }, + "no-shadowed-variable": {}, + "no-sparse-arrays": {}, + "no-string-literal": { + "severity": "error" + }, + "no-string-throw": { + "severity": "error" + }, + "no-trailing-whitespace": {}, + "no-unbound-method": { + "severity": "error" + }, + "no-unsafe-any": { + "severity": "error" + }, + "no-unused-variable": { + "options": [{ + "ignore-pattern": "^_" + }] + }, + "no-void-expression": { + "severity": "error" + }, + "prefer-method-signature": {}, + "radix": {}, + "semicolon": { + "options": ["always"] + } + } +} diff --git a/lib/lint/formatters/asFormatter.js b/lib/lint/formatters/asFormatter.js new file mode 100644 index 00000000..76373bb1 --- /dev/null +++ b/lib/lint/formatters/asFormatter.js @@ -0,0 +1,50 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const abstractFormatter_1 = require("tslint/lib/language/formatter/abstractFormatter"); +const colorBlue = "\u001b[93m"; +const colorYellow = "\u001b[93m"; +const colorRed = "\u001b[91m"; +const colorReset = "\u001b[0m"; +class Formatter extends abstractFormatter_1.AbstractFormatter { + format(failures) { + return `${this.mapToMessages(failures).join("\n")}\n`; + } + mapToMessages(failures) { + return failures.map((failure) => { + var fileName = failure.getFileName(); + var failureString = failure.getFailure(); + var ruleName = failure.getRuleName(); + var lineAndCharacter = failure.getStartPosition().getLineAndCharacter(); + var positionTuple = `:${lineAndCharacter.line + 1}:${lineAndCharacter.character + 1}`; + if (this.lastSeverity == failure.getRuleSeverity() && this.lastFailure == failureString) { + return " in " + fileName + positionTuple; + } + else { + let message = this.lastSeverity ? "\n" : ""; + switch (this.lastSeverity = failure.getRuleSeverity()) { + case "warning": { + message += colorYellow + "WARNING:" + colorReset; + break; + } + case "error": { + message += colorRed + "ERROR:" + colorReset; + break; + } + default: { + message += failure.getRuleSeverity(); + break; + } + } + this.lastFailure = failureString; + return message + " " + failureString + " [" + ruleName + "]\n in " + fileName + positionTuple; + } + }); + } +} +Formatter.metadata = { + formatterName: "as", + description: "AssemblyScript's TSLint formatter.", + sample: "Similar to ASC's output.", + consumer: "human", +}; +exports.Formatter = Formatter; diff --git a/lib/lint/index.json b/lib/lint/index.json new file mode 100644 index 00000000..5f487f79 --- /dev/null +++ b/lib/lint/index.json @@ -0,0 +1,11 @@ +{ + "extends": "./base.json", + "rulesDirectory": ["./rules", "./rules/internal"], + "formattersDirectory": ["./formatters"], + "rules": { + "as-types": { + "severity": "error" + }, + "as-variables": {} + } +} diff --git a/lib/lint/package.json b/lib/lint/package.json new file mode 100644 index 00000000..a6b58d7e --- /dev/null +++ b/lib/lint/package.json @@ -0,0 +1,21 @@ +{ + "name": "@assemblyscript/lint", + "version": "1.0.0", + "main": "index.json", + "scripts": { + "build": "tsc --project ./src --outDir . --diagnostics" + }, + "peerDependencies": { + "tslint": "^5.9.1" + }, + "devDependencies": { + "typescript": "^2.7.2" + }, + "files": [ + "index.json", + "package.json", + "README.md", + "rules/", + "formatters/" + ] +} diff --git a/lib/lint/rules/asTypesRule.js b/lib/lint/rules/asTypesRule.js new file mode 100644 index 00000000..eaf370d8 --- /dev/null +++ b/lib/lint/rules/asTypesRule.js @@ -0,0 +1,58 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ts = require("typescript"); +const Lint = require("tslint"); +class Rule extends Lint.Rules.AbstractRule { + apply(sourceFile) { + return this.applyWithWalker(new DiagnosticsWalker(sourceFile, this.getOptions())); + } +} +Rule.MISSING_TYPE_OR_INITIALIZER = "Missing type or initializer."; +Rule.MISSING_RETURN_TYPE = "Missing return type."; +exports.Rule = Rule; +class DiagnosticsWalker extends Lint.RuleWalker { + visitVariableDeclaration(node) { + var list = node.parent; + if (list) { + let stmt = list.parent; + if (stmt && stmt.kind != ts.SyntaxKind.ForOfStatement) { + this.checkTypeOrInitializer(node); + } + } + super.visitVariableDeclaration(node); + } + visitPropertyDeclaration(node) { + this.checkTypeOrInitializer(node); + super.visitPropertyDeclaration(node); + } + visitParameterDeclaration(node) { + this.checkTypeOrInitializer(node); + super.visitParameterDeclaration(node); + } + checkTypeOrInitializer(node) { + if (!node.type && !node.initializer) { + this.addFailureAtNode(node, Rule.MISSING_TYPE_OR_INITIALIZER); + } + } + visitFunctionDeclaration(node) { + this.checkFunctionReturnType(node); + super.visitFunctionDeclaration(node); + } + visitArrowFunction(node) { + this.checkFunctionReturnType(node); + super.visitArrowFunction(node); + } + visitMethodDeclaration(node) { + this.checkFunctionReturnType(node); + super.visitMethodDeclaration(node); + } + visitGetAccessor(node) { + this.checkFunctionReturnType(node); + super.visitGetAccessor(node); + } + checkFunctionReturnType(node) { + if (!node.type) { + this.addFailureAtNode(node, Rule.MISSING_RETURN_TYPE); + } + } +} diff --git a/lib/lint/rules/asVariablesRule.js b/lib/lint/rules/asVariablesRule.js new file mode 100644 index 00000000..2fb4cd37 --- /dev/null +++ b/lib/lint/rules/asVariablesRule.js @@ -0,0 +1,42 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const Lint = require("tslint"); +const tsutils_1 = require("tsutils"); +class Rule extends Lint.Rules.AbstractRule { + apply(sourceFile) { + return this.applyWithWalker(new VariablesWalker(sourceFile, this.getOptions())); + } +} +Rule.TOP_LEVEL_VAR = "Top-level variable should be 'var' (distinct local or global)."; +Rule.BLOCK_LEVEL_LET = "Block-level variable should be 'let' (shared local)."; +exports.Rule = Rule; +class VariablesWalker extends Lint.RuleWalker { + visitVariableDeclarationList(node) { + if (tsutils_1.isVariableStatement(node.parent)) { + if (tsutils_1.isBlock(node.parent.parent)) { + if (tsutils_1.isFunctionScopeBoundary(node.parent.parent.parent) || + tsutils_1.isNamespaceDeclaration(node.parent.parent.parent)) { + if (tsutils_1.getVariableDeclarationKind(node) == 1 /* Let */) { + this.addFailureAtNode(node, Rule.TOP_LEVEL_VAR); + } + } + else if (tsutils_1.getVariableDeclarationKind(node) == 0 /* Var */) { + this.addFailureAtNode(node, Rule.BLOCK_LEVEL_LET); + } + } + else if (tsutils_1.isSourceFile(node.parent.parent) || + tsutils_1.isModuleBlock(node.parent.parent)) { + if (tsutils_1.getVariableDeclarationKind(node) == 1 /* Let */) { + this.addFailureAtNode(node, Rule.TOP_LEVEL_VAR); + } + } + else if (tsutils_1.getVariableDeclarationKind(node) == 0 /* Var */) { + this.addFailureAtNode(node, Rule.BLOCK_LEVEL_LET); + } + } + else if (tsutils_1.getVariableDeclarationKind(node) == 0 /* Var */) { + this.addFailureAtNode(node, Rule.BLOCK_LEVEL_LET); + } + super.visitVariableDeclarationList(node); + } +} diff --git a/lib/lint/rules/internal/asInternalCaseRule.js b/lib/lint/rules/internal/asInternalCaseRule.js new file mode 100644 index 00000000..d7365c2b --- /dev/null +++ b/lib/lint/rules/internal/asInternalCaseRule.js @@ -0,0 +1,36 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ts = require("typescript"); +const Lint = require("tslint"); +const tsutils_1 = require("tsutils"); +class Rule extends Lint.Rules.AbstractRule { + apply(sourceFile) { + return this.applyWithWalker(new CaseWalker(sourceFile, this.getOptions())); + } +} +Rule.NOT_BRACED = "Multi-line case clauses should be braced."; +exports.Rule = Rule; +class CaseWalker extends Lint.RuleWalker { + visitDefaultClause(node) { + this.checkDefaultOrCaseClause(node); + super.visitDefaultClause(node); + } + visitCaseClause(node) { + this.checkDefaultOrCaseClause(node); + super.visitCaseClause(node); + } + checkDefaultOrCaseClause(node) { + var count = node.statements.length; + if (count > 1) { + this.addFailureAtNode(node, Rule.NOT_BRACED); + } + else if (count == 1) { + let stmt = node.statements[0]; + if (stmt.kind != ts.SyntaxKind.Block) { + if (!tsutils_1.isSameLine(node.getSourceFile(), node.getStart(), stmt.getStart())) { + this.addFailureAtNode(node, Rule.NOT_BRACED); + } + } + } + } +} diff --git a/lib/lint/rules/internal/asInternalDiagnosticsRule.js b/lib/lint/rules/internal/asInternalDiagnosticsRule.js new file mode 100644 index 00000000..b39096ca --- /dev/null +++ b/lib/lint/rules/internal/asInternalDiagnosticsRule.js @@ -0,0 +1,23 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const ts = require("typescript"); +const Lint = require("tslint"); +const tsutils_1 = require("tsutils"); +class Rule extends Lint.Rules.AbstractRule { + apply(sourceFile) { + return this.applyWithWalker(new DiagnosticsWalker(sourceFile, this.getOptions())); + } +} +Rule.NOT_ON_SEPARATE_LINE = "Diagnostic message not on a separate line."; +exports.Rule = Rule; +class DiagnosticsWalker extends Lint.RuleWalker { + visitPropertyAccessExpression(node) { + if (node.expression.kind === ts.SyntaxKind.Identifier) { + if (node.expression.text == "DiagnosticCode" && + tsutils_1.isSameLine(node.getSourceFile(), node.parent.getStart(), node.getStart())) { + this.addFailureAtNode(node, Rule.NOT_ON_SEPARATE_LINE); + } + } + super.visitPropertyAccessExpression(node); + } +} diff --git a/lib/tslint/asFormatter.ts b/lib/lint/src/formatters/asFormatter.ts similarity index 100% rename from lib/tslint/asFormatter.ts rename to lib/lint/src/formatters/asFormatter.ts diff --git a/lib/lint/src/rules/asTypesRule.ts b/lib/lint/src/rules/asTypesRule.ts new file mode 100644 index 00000000..7df92a6f --- /dev/null +++ b/lib/lint/src/rules/asTypesRule.ts @@ -0,0 +1,68 @@ +import * as ts from "typescript"; +import * as Lint from "tslint"; + +export class Rule extends Lint.Rules.AbstractRule { + + static MISSING_TYPE_OR_INITIALIZER = "Missing type or initializer."; + static MISSING_RETURN_TYPE = "Missing return type."; + + apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] { + return this.applyWithWalker(new DiagnosticsWalker(sourceFile, this.getOptions())); + } +} + +class DiagnosticsWalker extends Lint.RuleWalker { + + visitVariableDeclaration(node: ts.VariableDeclaration) { + var list = node.parent; + if (list) { + let stmt = list.parent; + if (stmt && stmt.kind != ts.SyntaxKind.ForOfStatement) { + this.checkTypeOrInitializer(node); + } + } + super.visitVariableDeclaration(node); + } + + visitPropertyDeclaration(node: ts.PropertyDeclaration) { + this.checkTypeOrInitializer(node); + super.visitPropertyDeclaration(node); + } + + visitParameterDeclaration(node: ts.ParameterDeclaration) { + this.checkTypeOrInitializer(node); + super.visitParameterDeclaration(node); + } + + private checkTypeOrInitializer(node: ts.NamedDeclaration & { type?: ts.TypeNode, initializer?: ts.Expression }) { + if (!node.type && !node.initializer) { + this.addFailureAtNode(node, Rule.MISSING_TYPE_OR_INITIALIZER); + } + } + + visitFunctionDeclaration(node: ts.FunctionDeclaration) { + this.checkFunctionReturnType(node); + super.visitFunctionDeclaration(node); + } + + visitArrowFunction(node: ts.ArrowFunction) { + this.checkFunctionReturnType(node); + super.visitArrowFunction(node); + } + + visitMethodDeclaration(node: ts.MethodDeclaration) { + this.checkFunctionReturnType(node); + super.visitMethodDeclaration(node); + } + + visitGetAccessor(node: ts.GetAccessorDeclaration) { + this.checkFunctionReturnType(node); + super.visitGetAccessor(node); + } + + private checkFunctionReturnType(node: ts.FunctionLikeDeclaration) { + if (!node.type) { + this.addFailureAtNode(node, Rule.MISSING_RETURN_TYPE); + } + } +} diff --git a/lib/tslint/asVariablesRule.ts b/lib/lint/src/rules/asVariablesRule.ts similarity index 92% rename from lib/tslint/asVariablesRule.ts rename to lib/lint/src/rules/asVariablesRule.ts index cf28931d..932d36e4 100644 --- a/lib/tslint/asVariablesRule.ts +++ b/lib/lint/src/rules/asVariablesRule.ts @@ -18,11 +18,11 @@ export class Rule extends Lint.Rules.AbstractRule { static BLOCK_LEVEL_LET = "Block-level variable should be 'let' (shared local)."; apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] { - return this.applyWithWalker(new DiagnosticsWalker(sourceFile, this.getOptions())); + return this.applyWithWalker(new VariablesWalker(sourceFile, this.getOptions())); } } -class DiagnosticsWalker extends Lint.RuleWalker { +class VariablesWalker extends Lint.RuleWalker { visitVariableDeclarationList(node: ts.VariableDeclarationList): void { if (isVariableStatement(node.parent)) { diff --git a/lib/tslint/internal/asInternalCaseRule.ts b/lib/lint/src/rules/internal/asInternalCaseRule.ts similarity index 88% rename from lib/tslint/internal/asInternalCaseRule.ts rename to lib/lint/src/rules/internal/asInternalCaseRule.ts index a35272e3..99841389 100644 --- a/lib/tslint/internal/asInternalCaseRule.ts +++ b/lib/lint/src/rules/internal/asInternalCaseRule.ts @@ -7,11 +7,11 @@ export class Rule extends Lint.Rules.AbstractRule { static NOT_BRACED = "Multi-line case clauses should be braced."; apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] { - return this.applyWithWalker(new DiagnosticsWalker(sourceFile, this.getOptions())); + return this.applyWithWalker(new CaseWalker(sourceFile, this.getOptions())); } } -class DiagnosticsWalker extends Lint.RuleWalker { +class CaseWalker extends Lint.RuleWalker { visitDefaultClause(node: ts.DefaultClause) { this.checkDefaultOrCaseClause(node); diff --git a/lib/tslint/internal/asInternalDiagnosticsRule.ts b/lib/lint/src/rules/internal/asInternalDiagnosticsRule.ts similarity index 100% rename from lib/tslint/internal/asInternalDiagnosticsRule.ts rename to lib/lint/src/rules/internal/asInternalDiagnosticsRule.ts diff --git a/lib/tslint/tsconfig.json b/lib/lint/src/tsconfig.json similarity index 85% rename from lib/tslint/tsconfig.json rename to lib/lint/src/tsconfig.json index 17b27ac1..6e728805 100644 --- a/lib/tslint/tsconfig.json +++ b/lib/lint/src/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es5", + "target": "es6", "module": "commonjs", "lib": ["es6", "es2015.collection"] }, diff --git a/lib/tslint/asFormatter.js b/lib/tslint/asFormatter.js deleted file mode 100644 index 1f3b5750..00000000 --- a/lib/tslint/asFormatter.js +++ /dev/null @@ -1,63 +0,0 @@ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -exports.__esModule = true; -var abstractFormatter_1 = require("tslint/lib/language/formatter/abstractFormatter"); -var colorBlue = "\u001b[93m"; -var colorYellow = "\u001b[93m"; -var colorRed = "\u001b[91m"; -var colorReset = "\u001b[0m"; -var Formatter = /** @class */ (function (_super) { - __extends(Formatter, _super); - function Formatter() { - return _super !== null && _super.apply(this, arguments) || this; - } - Formatter.prototype.format = function (failures) { - return this.mapToMessages(failures).join("\n") + "\n"; - }; - Formatter.prototype.mapToMessages = function (failures) { - var _this = this; - return failures.map(function (failure) { - var fileName = failure.getFileName(); - var failureString = failure.getFailure(); - var ruleName = failure.getRuleName(); - var lineAndCharacter = failure.getStartPosition().getLineAndCharacter(); - var positionTuple = ":" + (lineAndCharacter.line + 1) + ":" + (lineAndCharacter.character + 1); - if (_this.lastSeverity == failure.getRuleSeverity() && _this.lastFailure == failureString) { - return " in " + fileName + positionTuple; - } - else { - var message = _this.lastSeverity ? "\n" : ""; - switch (_this.lastSeverity = failure.getRuleSeverity()) { - case "warning": - message += colorYellow + "WARNING:" + colorReset; - break; - case "error": - message += colorRed + "ERROR:" + colorReset; - break; - default: - message += failure.getRuleSeverity(); - break; - } - _this.lastFailure = failureString; - return message + " " + failureString + " [" + ruleName + "]\n in " + fileName + positionTuple; - } - }); - }; - Formatter.metadata = { - formatterName: "as", - description: "AssemblyScript's TSLint formatter.", - sample: "Similar to ASC's output.", - consumer: "human" - }; - return Formatter; -}(abstractFormatter_1.AbstractFormatter)); -exports.Formatter = Formatter; diff --git a/lib/tslint/asTypesRule.js b/lib/tslint/asTypesRule.js deleted file mode 100644 index ca9c4710..00000000 --- a/lib/tslint/asTypesRule.js +++ /dev/null @@ -1,55 +0,0 @@ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -exports.__esModule = true; -var ts = require("typescript"); -var Lint = require("tslint"); -var Rule = /** @class */ (function (_super) { - __extends(Rule, _super); - function Rule() { - return _super !== null && _super.apply(this, arguments) || this; - } - Rule.prototype.apply = function (sourceFile) { - return this.applyWithWalker(new DiagnosticsWalker(sourceFile, this.getOptions())); - }; - Rule.MISSING_TYPE_OR_INITIALIZER = "Missing type or initializer."; - Rule.MISSING_RETURN_TYPE = "Missing return type."; - return Rule; -}(Lint.Rules.AbstractRule)); -exports.Rule = Rule; -var DiagnosticsWalker = /** @class */ (function (_super) { - __extends(DiagnosticsWalker, _super); - function DiagnosticsWalker() { - return _super !== null && _super.apply(this, arguments) || this; - } - DiagnosticsWalker.prototype.visitVariableDeclaration = function (node) { - if (!node.type && !node.initializer && - node.parent.parent.kind != ts.SyntaxKind.ForOfStatement) { - this.addFailureAtNode(node, Rule.MISSING_TYPE_OR_INITIALIZER); - } - }; - DiagnosticsWalker.prototype.visitPropertyDeclaration = function (node) { - if (!node.type && !node.initializer) { - this.addFailureAtNode(node, Rule.MISSING_TYPE_OR_INITIALIZER); - } - }; - DiagnosticsWalker.prototype.visitParameterDeclaration = function (node) { - if (!node.type && !node.initializer) { - this.addFailureAtNode(node, Rule.MISSING_TYPE_OR_INITIALIZER); - } - }; - DiagnosticsWalker.prototype.visitFunctionDeclaration = function (node) { - if (!node.type) { - this.addFailureAtNode(node, Rule.MISSING_RETURN_TYPE); - } - }; - return DiagnosticsWalker; -}(Lint.RuleWalker)); diff --git a/lib/tslint/asTypesRule.ts b/lib/tslint/asTypesRule.ts deleted file mode 100644 index f5b64286..00000000 --- a/lib/tslint/asTypesRule.ts +++ /dev/null @@ -1,42 +0,0 @@ -import * as ts from "typescript"; -import * as Lint from "tslint"; - -export class Rule extends Lint.Rules.AbstractRule { - - static MISSING_TYPE_OR_INITIALIZER = "Missing type or initializer."; - static MISSING_RETURN_TYPE = "Missing return type."; - - apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] { - return this.applyWithWalker(new DiagnosticsWalker(sourceFile, this.getOptions())); - } -} - -class DiagnosticsWalker extends Lint.RuleWalker { - - visitVariableDeclaration(node: ts.VariableDeclaration) { - if ( - !node.type && !node.initializer && - node.parent.parent.kind != ts.SyntaxKind.ForOfStatement - ) { - this.addFailureAtNode(node, Rule.MISSING_TYPE_OR_INITIALIZER); - } - } - - visitPropertyDeclaration(node: ts.PropertyDeclaration) { - if (!node.type && !node.initializer) { - this.addFailureAtNode(node, Rule.MISSING_TYPE_OR_INITIALIZER); - } - } - - visitParameterDeclaration(node: ts.ParameterDeclaration) { - if (!node.type && !node.initializer) { - this.addFailureAtNode(node, Rule.MISSING_TYPE_OR_INITIALIZER); - } - } - - visitFunctionDeclaration(node: ts.FunctionDeclaration) { - if (!node.type) { - this.addFailureAtNode(node, Rule.MISSING_RETURN_TYPE); - } - } -} diff --git a/lib/tslint/asVariablesRule.js b/lib/tslint/asVariablesRule.js deleted file mode 100644 index afded40c..00000000 --- a/lib/tslint/asVariablesRule.js +++ /dev/null @@ -1,62 +0,0 @@ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -exports.__esModule = true; -var Lint = require("tslint"); -var tsutils_1 = require("tsutils"); -var Rule = /** @class */ (function (_super) { - __extends(Rule, _super); - function Rule() { - return _super !== null && _super.apply(this, arguments) || this; - } - Rule.prototype.apply = function (sourceFile) { - return this.applyWithWalker(new DiagnosticsWalker(sourceFile, this.getOptions())); - }; - Rule.TOP_LEVEL_VAR = "Top-level variable should be 'var' (distinct local or global)."; - Rule.BLOCK_LEVEL_LET = "Block-level variable should be 'let' (shared local)."; - return Rule; -}(Lint.Rules.AbstractRule)); -exports.Rule = Rule; -var DiagnosticsWalker = /** @class */ (function (_super) { - __extends(DiagnosticsWalker, _super); - function DiagnosticsWalker() { - return _super !== null && _super.apply(this, arguments) || this; - } - DiagnosticsWalker.prototype.visitVariableDeclarationList = function (node) { - if (tsutils_1.isVariableStatement(node.parent)) { - if (tsutils_1.isBlock(node.parent.parent)) { - if (tsutils_1.isFunctionScopeBoundary(node.parent.parent.parent) || - tsutils_1.isNamespaceDeclaration(node.parent.parent.parent)) { - if (tsutils_1.getVariableDeclarationKind(node) == 1 /* Let */) { - this.addFailureAtNode(node, Rule.TOP_LEVEL_VAR); - } - } - else if (tsutils_1.getVariableDeclarationKind(node) == 0 /* Var */) { - this.addFailureAtNode(node, Rule.BLOCK_LEVEL_LET); - } - } - else if (tsutils_1.isSourceFile(node.parent.parent) || - tsutils_1.isModuleBlock(node.parent.parent)) { - if (tsutils_1.getVariableDeclarationKind(node) == 1 /* Let */) { - this.addFailureAtNode(node, Rule.TOP_LEVEL_VAR); - } - } - else if (tsutils_1.getVariableDeclarationKind(node) == 0 /* Var */) { - this.addFailureAtNode(node, Rule.BLOCK_LEVEL_LET); - } - } - else if (tsutils_1.getVariableDeclarationKind(node) == 0 /* Var */) { - this.addFailureAtNode(node, Rule.BLOCK_LEVEL_LET); - } - _super.prototype.visitVariableDeclarationList.call(this, node); - }; - return DiagnosticsWalker; -}(Lint.RuleWalker)); diff --git a/lib/tslint/internal/asInternalCaseRule.js b/lib/tslint/internal/asInternalCaseRule.js deleted file mode 100644 index f301d2b6..00000000 --- a/lib/tslint/internal/asInternalCaseRule.js +++ /dev/null @@ -1,56 +0,0 @@ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -exports.__esModule = true; -var ts = require("typescript"); -var Lint = require("tslint"); -var tsutils_1 = require("tsutils"); -var Rule = /** @class */ (function (_super) { - __extends(Rule, _super); - function Rule() { - return _super !== null && _super.apply(this, arguments) || this; - } - Rule.prototype.apply = function (sourceFile) { - return this.applyWithWalker(new DiagnosticsWalker(sourceFile, this.getOptions())); - }; - Rule.NOT_BRACED = "Multi-line case clauses should be braced."; - return Rule; -}(Lint.Rules.AbstractRule)); -exports.Rule = Rule; -var DiagnosticsWalker = /** @class */ (function (_super) { - __extends(DiagnosticsWalker, _super); - function DiagnosticsWalker() { - return _super !== null && _super.apply(this, arguments) || this; - } - DiagnosticsWalker.prototype.visitDefaultClause = function (node) { - this.checkDefaultOrCaseClause(node); - _super.prototype.visitDefaultClause.call(this, node); - }; - DiagnosticsWalker.prototype.visitCaseClause = function (node) { - this.checkDefaultOrCaseClause(node); - _super.prototype.visitCaseClause.call(this, node); - }; - DiagnosticsWalker.prototype.checkDefaultOrCaseClause = function (node) { - var count = node.statements.length; - if (count > 1) { - this.addFailureAtNode(node, Rule.NOT_BRACED); - } - else if (count == 1) { - var stmt = node.statements[0]; - if (stmt.kind != ts.SyntaxKind.Block) { - if (!tsutils_1.isSameLine(node.getSourceFile(), node.getStart(), stmt.getStart())) { - this.addFailureAtNode(node, Rule.NOT_BRACED); - } - } - } - }; - return DiagnosticsWalker; -}(Lint.RuleWalker)); diff --git a/lib/tslint/internal/asInternalDiagnosticsRule.js b/lib/tslint/internal/asInternalDiagnosticsRule.js deleted file mode 100644 index dff1763e..00000000 --- a/lib/tslint/internal/asInternalDiagnosticsRule.js +++ /dev/null @@ -1,43 +0,0 @@ -"use strict"; -var __extends = (this && this.__extends) || (function () { - var extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -exports.__esModule = true; -var ts = require("typescript"); -var Lint = require("tslint"); -var tsutils_1 = require("tsutils"); -var Rule = /** @class */ (function (_super) { - __extends(Rule, _super); - function Rule() { - return _super !== null && _super.apply(this, arguments) || this; - } - Rule.prototype.apply = function (sourceFile) { - return this.applyWithWalker(new DiagnosticsWalker(sourceFile, this.getOptions())); - }; - Rule.NOT_ON_SEPARATE_LINE = "Diagnostic message not on a separate line."; - return Rule; -}(Lint.Rules.AbstractRule)); -exports.Rule = Rule; -var DiagnosticsWalker = /** @class */ (function (_super) { - __extends(DiagnosticsWalker, _super); - function DiagnosticsWalker() { - return _super !== null && _super.apply(this, arguments) || this; - } - DiagnosticsWalker.prototype.visitPropertyAccessExpression = function (node) { - if (node.expression.kind === ts.SyntaxKind.Identifier) { - if (node.expression.text == "DiagnosticCode" && - tsutils_1.isSameLine(node.getSourceFile(), node.parent.getStart(), node.getStart())) { - this.addFailureAtNode(node, Rule.NOT_ON_SEPARATE_LINE); - } - } - _super.prototype.visitPropertyAccessExpression.call(this, node); - }; - return DiagnosticsWalker; -}(Lint.RuleWalker)); diff --git a/package.json b/package.json index 8a832e77..3a8e9ac7 100644 --- a/package.json +++ b/package.json @@ -41,8 +41,8 @@ "build": "webpack --mode production", "clean": "node scripts/clean", "lint": "npm run lint:compiler && npm run lint:library", - "lint:compiler": "tslint -c tslint.json --project src --formatters-dir lib/tslint --format as", - "lint:library": "tslint -c tslint.json --project std/assembly --formatters-dir lib/tslint --format as", + "lint:compiler": "tslint -c tslint.json --project src --formatters-dir lib/lint/formatters --format as", + "lint:library": "tslint -c tslint.json --project std/assembly --formatters-dir lib/lint/formatters --format as", "test:config": "tsc --noEmit -p src --diagnostics --listFiles", "test:parser": "node tests/parser", "test:compiler": "node tests/compiler", diff --git a/src/ast.ts b/src/ast.ts index 8e21b177..59b393c5 100644 --- a/src/ast.ts +++ b/src/ast.ts @@ -119,7 +119,7 @@ export abstract class Node { static createOmittedType( range: Range - ) { + ): TypeNode { return Node.createType( Node.createIdentifierExpression("", range), null, diff --git a/src/compiler.ts b/src/compiler.ts index ca57a46e..c5705b9c 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -1892,7 +1892,11 @@ export class Compiler extends DiagnosticEmitter { return expr; } - compileExpressionRetainType(expression: Expression, contextualType: Type, wrapSmallIntegers: bool = true) { + compileExpressionRetainType( + expression: Expression, + contextualType: Type, + wrapSmallIntegers: bool = true + ): ExpressionRef { return this.compileExpression( expression, contextualType == Type.void diff --git a/src/decompiler.ts b/src/decompiler.ts index 517f4a38..c821222a 100644 --- a/src/decompiler.ts +++ b/src/decompiler.ts @@ -27,7 +27,7 @@ export class Decompiler { constructor() { } /** Decompiles a module to an AST that can then be serialized. */ - decompile(module: Module) { + decompile(module: Module): void { throw new Error("not implemented"); } diff --git a/src/diagnostics.ts b/src/diagnostics.ts index 9f532263..6403a00b 100644 --- a/src/diagnostics.ts +++ b/src/diagnostics.ts @@ -215,7 +215,7 @@ export abstract class DiagnosticEmitter { arg0: string | null = null, arg1: string | null = null, arg2: string | null = null - ) { + ): void { var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range); this.diagnostics.push(message); // console.log(formatDiagnosticMessage(message, true, true) + "\n"); // temporary diff --git a/src/module.ts b/src/module.ts index 77746292..05aa60d5 100644 --- a/src/module.ts +++ b/src/module.ts @@ -223,7 +223,7 @@ export class MemorySegment { buffer: Uint8Array; offset: I64; - static create(buffer: Uint8Array, offset: I64) { + static create(buffer: Uint8Array, offset: I64): MemorySegment { var segment = new MemorySegment(); segment.buffer = buffer; segment.offset = offset; diff --git a/src/program.ts b/src/program.ts index 72bc3b1e..aa5604ea 100644 --- a/src/program.ts +++ b/src/program.ts @@ -612,7 +612,7 @@ export class Program extends DiagnosticEmitter { decorators: DecoratorNode[] | null, prototype: FunctionPrototype, classPrototype: ClassPrototype - ) { + ): void { // handle operator annotations. operators are either instance methods taking // a second argument of the instance's type or static methods taking two // arguments of the instance's type. return values vary depending on the diff --git a/std/assembly/tsconfig.json b/std/assembly/tsconfig.json index 7fd4ee69..98ce4e4b 100644 --- a/std/assembly/tsconfig.json +++ b/std/assembly/tsconfig.json @@ -1,9 +1,9 @@ { "extends": "../assembly.json", - "compilerOptions": { - "diagnostics": true - }, "include": [ "./**/*.ts" + ], + "exclude": [ + "./collector/*.ts" ] } diff --git a/tslint.json b/tslint.json index 8994cbef..3d204bac 100644 --- a/tslint.json +++ b/tslint.json @@ -1,67 +1,41 @@ { - "rulesDirectory": [ - "./lib/tslint", - "./lib/tslint/internal" - ], + "extends": "./lib/lint", "defaultSeverity": "warning", "rules": { - "as-types": { "severity": "error" }, - "as-variables": true, - - "as-internal-case": true, - "as-internal-diagnostics": true, - - "adjacent-overload-signatures": true, - "ban-types": [ true, ["Object"], ["any"], ["undefined"], ["never"] ], - "curly": [true, "ignore-same-line"], - "deprecation": true, - "encoding": true, - "eofline": true, - "indent": [true, "spaces", 2], - "label-position": true, - "max-line-length": [ true, { "limit": 120, "ignore-pattern": " *DiagnosticCode\\.[^ ]+,$" } ], - "member-access": [ true, "no-public" ], - "new-parens": true, - "no-any": true, - "no-arg": true, - "no-consecutive-blank-lines": true, - "no-debugger": true, - "no-default-export": true, - "no-duplicate-imports": true, - "no-duplicate-super": true, - "no-duplicate-switch-case": true, - "no-duplicate-variable": true, - "no-eval": true, - "no-inferred-empty-object-type": true, - "no-internal-module": true, - "no-invalid-template-strings": true, - "no-invalid-this": true, - "no-irregular-whitespace": true, - "no-mergeable-namespace": true, - "no-misused-new": true, - "no-object-literal-type-assertion": true, - "no-parameter-properties": true, - "no-require-imports": true, - "no-shadowed-variable": true, - "no-sparse-arrays": true, - "no-string-literal": true, - "no-string-throw": true, - "no-trailing-whitespace": true, - "no-unbound-method": true, - "no-unsafe-any": true, - "no-unused-variable": [true, {"ignore-pattern": "^_"}], - "no-void-expression": true, - "object-literal-shorthand": [ true, "never" ], - "prefer-method-signature": true, - "quotemark": [true, "double"], - "radix": true, - "restrict-plus-operands": true, - "semicolon": [true, "always"] + "as-internal-case": {}, + "as-internal-diagnostics": {}, + "indent": { + "options": ["spaces", 2] + }, + "max-line-length": { + "options": [{ + "limit": 120, + "ignore-pattern": " *DiagnosticCode\\.[^ ]+,$" + }] + }, + "member-access": { + "options": ["no-public"] + }, + "quotemark": { + "options": ["double"] + }, + "semicolon": { + "options": ["always"] + } }, "jsRules": { - "quotemark": [true, "double"], - "radix": true, - "max-line-length": [ true, { "limit": 120, "ignore-pattern": " *DiagnosticCode\\.[^ ]+,$" } ], - "semicolon": [true, "always"] + "max-line-length": { + "options": [{ + "limit": 120, + "ignore-pattern": " *DiagnosticCode\\.[^ ]+,$" + }] + }, + "quotemark": { + "options": ["double"] + }, + "radix": {}, + "semicolon": { + "options": ["always"] + } } }