8bitworkshop/gen/worker/bundle.js.map

8 lines
846 KiB
Plaintext

{
"version": 3,
"sources": ["../../node_modules/jszip/dist/jszip.min.js", "../../src/common/util.ts", "../../src/common/basic/compiler.ts", "../../src/worker/platforms.ts", "../../src/worker/builder.ts", "../../src/worker/wasmutils.ts", "../../src/worker/listingutils.ts", "../../src/worker/tools/misc.ts", "../../src/worker/tools/cc65.ts", "../../src/common/wasi/wasishim.ts", "../../src/worker/tools/dasm.ts", "../../src/worker/tools/mcpp.ts", "../../src/worker/tools/sdcc.ts", "../../src/worker/assembler.ts", "../../src/common/hdl/hdltypes.ts", "../../src/common/hdl/vxmlparser.ts", "../../src/worker/tools/verilog.ts", "../../src/worker/tools/m6809.ts", "../../src/worker/tools/m6502.ts", "../../src/worker/tools/z80.ts", "../../src/worker/tools/x86.ts", "../../src/worker/tools/arm.ts", "../../src/common/tokenizer.ts", "../../src/common/ecs/binpack.ts", "../../src/common/ecs/ecs.ts", "../../src/common/ecs/decoder.ts", "../../src/common/ecs/compiler.ts", "../../src/worker/tools/ecs.ts", "../../src/common/workertypes.ts", "../../src/worker/tools/remote.ts", "../../src/worker/tools/acme.ts", "../../src/worker/wasiutils.ts", "../../src/worker/tools/cc7800.ts", "../../src/worker/tools/bataribasic.ts", "../../src/worker/workertools.ts", "../../src/worker/workermain.ts"],
"sourcesContent": ["/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n<http://stuartk.com/jszip>\n\n(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>\nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e<h.length;e++)u(h[e]);return u}({1:[function(e,t,r){\"use strict\";var d=e(\"./utils\"),c=e(\"./support\"),p=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.encode=function(e){for(var t,r,n,i,s,a,o,h=[],u=0,l=e.length,f=l,c=\"string\"!==d.getTypeOf(e);u<e.length;)f=l-u,n=c?(t=e[u++],r=u<l?e[u++]:0,u<l?e[u++]:0):(t=e.charCodeAt(u++),r=u<l?e.charCodeAt(u++):0,u<l?e.charCodeAt(u++):0),i=t>>2,s=(3&t)<<4|r>>4,a=1<f?(15&r)<<2|n>>6:64,o=2<f?63&n:64,h.push(p.charAt(i)+p.charAt(s)+p.charAt(a)+p.charAt(o));return h.join(\"\")},r.decode=function(e){var t,r,n,i,s,a,o=0,h=0,u=\"data:\";if(e.substr(0,u.length)===u)throw new Error(\"Invalid base64 input, it looks like a data url.\");var l,f=3*(e=e.replace(/[^A-Za-z0-9+/=]/g,\"\")).length/4;if(e.charAt(e.length-1)===p.charAt(64)&&f--,e.charAt(e.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error(\"Invalid base64 input, bad content length.\");for(l=c.uint8array?new Uint8Array(0|f):new Array(0|f);o<e.length;)t=p.indexOf(e.charAt(o++))<<2|(i=p.indexOf(e.charAt(o++)))>>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r<t;r++)n+=String.fromCharCode(255&e),e>>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t<this.dirRecords.length;t++)this.push({data:this.dirRecords[t],meta:{percent:100}});var r=this.bytesWritten-e,n=function(e,t,r,n,i){var s=I.transformTo(\"string\",i(n));return R.CENTRAL_DIRECTORY_END+\"\\0\\0\\0\\0\"+A(e,2)+A(e,2)+A(t,4)+A(r,4)+A(s.length,2)+s}(this.dirRecords.length,r,e,this.zipComment,this.encodeFileName);this.push({data:n,meta:{percent:100}})},s.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},s.prototype.registerPrevious=function(e){this._sources.push(e);var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.closedSource(t.previous.streamInfo),t._sources.length?t.prepareNextSource():t.end()}),e.on(\"error\",function(e){t.error(e)}),this},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},s.prototype.error=function(e){var t=this._sources;if(!i.prototype.error.call(this,e))return!1;for(var r=0;r<t.length;r++)try{t[r].error(e)}catch(e){}return!0},s.prototype.lock=function(){i.prototype.lock.call(this);for(var e=this._sources,t=0;t<e.length;t++)e[t].lock()},t.exports=s},{\"../crc32\":4,\"../signature\":23,\"../stream/GenericWorker\":28,\"../utf8\":31,\"../utils\":32}],9:[function(e,t,r){\"use strict\";var u=e(\"../compressions\"),n=e(\"./ZipFileWorker\");r.generateWorker=function(e,a,t){var o=new n(a.streamFiles,t,a.platform,a.encodeFileName),h=0;try{e.forEach(function(e,t){h++;var r=function(e,t){var r=e||t,n=u[r];if(!n)throw new Error(r+\" is not a valid compression method !\");return n}(t.options.compression,a.compression),n=t.options.compressionOptions||a.compressionOptions||{},i=t.dir,s=t.date;t._compressWorker(r,n).withStreamInfo(\"file\",{name:e,dir:i,date:s,comment:t.comment||\"\",unixPermissions:t.unixPermissions,dosPermissions:t.dosPermissions}).pipe(o)}),o.entriesCount=h}catch(e){o.error(e)}return o}},{\"../compressions\":3,\"./ZipFileWorker\":8}],10:[function(e,t,r){\"use strict\";function n(){if(!(this instanceof n))return new n;if(arguments.length)throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");this.files=Object.create(null),this.comment=null,this.root=\"\",this.clone=function(){var e=new n;for(var t in this)\"function\"!=typeof this[t]&&(e[t]=this[t]);return e}}(n.prototype=e(\"./object\")).loadAsync=e(\"./load\"),n.support=e(\"./support\"),n.defaults=e(\"./defaults\"),n.version=\"3.10.1\",n.loadAsync=function(e,t){return(new n).loadAsync(e,t)},n.external=e(\"./external\"),t.exports=n},{\"./defaults\":5,\"./external\":6,\"./load\":11,\"./object\":15,\"./support\":30}],11:[function(e,t,r){\"use strict\";var u=e(\"./utils\"),i=e(\"./external\"),n=e(\"./utf8\"),s=e(\"./zipEntries\"),a=e(\"./stream/Crc32Probe\"),l=e(\"./nodejsUtils\");function f(n){return new i.Promise(function(e,t){var r=n.decompressed.getContentWorker().pipe(new a);r.on(\"error\",function(e){t(e)}).on(\"end\",function(){r.streamInfo.crc32!==n.decompressed.crc32?t(new Error(\"Corrupted zip : CRC32 mismatch\")):e()}).resume()})}t.exports=function(e,o){var h=this;return o=u.extend(o||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:n.utf8decode}),l.isNode&&l.isStream(e)?i.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\")):u.prepareContent(\"the loaded zip file\",e,!0,o.optimizedBinaryString,o.base64).then(function(e){var t=new s(o);return t.load(e),t}).then(function(e){var t=[i.Promise.resolve(e)],r=e.files;if(o.checkCRC32)for(var n=0;n<r.length;n++)t.push(f(r[n]));return i.Promise.all(t)}).then(function(e){for(var t=e.shift(),r=t.files,n=0;n<r.length;n++){var i=r[n],s=i.fileNameStr,a=u.resolve(i.fileNameStr);h.file(a,i.decompressed,{binary:!0,optimizedBinaryString:!0,date:i.date,dir:i.dir,comment:i.fileCommentStr.length?i.fileCommentStr:null,unixPermissions:i.unixPermissions,dosPermissions:i.dosPermissions,createFolders:o.createFolders}),i.dir||(h.file(a).unsafeOriginalName=s)}return t.zipComment.length&&(h.comment=t.zipComment),h})}},{\"./external\":6,\"./nodejsUtils\":14,\"./stream/Crc32Probe\":25,\"./utf8\":31,\"./utils\":32,\"./zipEntries\":33}],12:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../stream/GenericWorker\");function s(e,t){i.call(this,\"Nodejs stream input adapter for \"+e),this._upstreamEnded=!1,this._bindStream(t)}n.inherits(s,i),s.prototype._bindStream=function(e){var t=this;(this._stream=e).pause(),e.on(\"data\",function(e){t.push({data:e,meta:{percent:0}})}).on(\"error\",function(e){t.isPaused?this.generatedError=e:t.error(e)}).on(\"end\",function(){t.isPaused?t._upstreamEnded=!0:t.end()})},s.prototype.pause=function(){return!!i.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},t.exports=s},{\"../stream/GenericWorker\":28,\"../utils\":32}],13:[function(e,t,r){\"use strict\";var i=e(\"readable-stream\").Readable;function n(e,t,r){i.call(this,t),this._helper=e;var n=this;e.on(\"data\",function(e,t){n.push(e)||n._helper.pause(),r&&r(t)}).on(\"error\",function(e){n.emit(\"error\",e)}).on(\"end\",function(){n.push(null)})}e(\"../utils\").inherits(n,i),n.prototype._read=function(){this._helper.resume()},t.exports=n},{\"../utils\":32,\"readable-stream\":16}],14:[function(e,t,r){\"use strict\";t.exports={isNode:\"undefined\"!=typeof Buffer,newBufferFrom:function(e,t){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(e,t);if(\"number\"==typeof e)throw new Error('The \"data\" argument must not be a number');return new Buffer(e,t)},allocBuffer:function(e){if(Buffer.alloc)return Buffer.alloc(e);var t=new Buffer(e);return t.fill(0),t},isBuffer:function(e){return Buffer.isBuffer(e)},isStream:function(e){return e&&\"function\"==typeof e.on&&\"function\"==typeof e.pause&&\"function\"==typeof e.resume}}},{}],15:[function(e,t,r){\"use strict\";function s(e,t,r){var n,i=u.getTypeOf(t),s=u.extend(r||{},f);s.date=s.date||new Date,null!==s.compression&&(s.compression=s.compression.toUpperCase()),\"string\"==typeof s.unixPermissions&&(s.unixPermissions=parseInt(s.unixPermissions,8)),s.unixPermissions&&16384&s.unixPermissions&&(s.dir=!0),s.dosPermissions&&16&s.dosPermissions&&(s.dir=!0),s.dir&&(e=g(e)),s.createFolders&&(n=_(e))&&b.call(this,n,!0);var a=\"string\"===i&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!a),(t instanceof c&&0===t.uncompressedSize||s.dir||!t||0===t.length)&&(s.base64=!1,s.binary=!0,t=\"\",s.compression=\"STORE\",i=\"string\");var o=null;o=t instanceof c||t instanceof l?t:p.isNode&&p.isStream(t)?new m(e,t):u.prepareContent(e,t,s.binary,s.optimizedBinaryString,s.base64);var h=new d(e,o,s);this.files[e]=h}var i=e(\"./utf8\"),u=e(\"./utils\"),l=e(\"./stream/GenericWorker\"),a=e(\"./stream/StreamHelper\"),f=e(\"./defaults\"),c=e(\"./compressedObject\"),d=e(\"./zipObject\"),o=e(\"./generate\"),p=e(\"./nodejsUtils\"),m=e(\"./nodejs/NodejsStreamInputAdapter\"),_=function(e){\"/\"===e.slice(-1)&&(e=e.substring(0,e.length-1));var t=e.lastIndexOf(\"/\");return 0<t?e.substring(0,t):\"\"},g=function(e){return\"/\"!==e.slice(-1)&&(e+=\"/\"),e},b=function(e,t){return t=void 0!==t?t:f.createFolders,e=g(e),this.files[e]||s.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function h(e){return\"[object RegExp]\"===Object.prototype.toString.call(e)}var n={load:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},forEach:function(e){var t,r,n;for(t in this.files)n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n)},filter:function(r){var n=[];return this.forEach(function(e,t){r(e,t)&&n.push(t)}),n},file:function(e,t,r){if(1!==arguments.length)return e=this.root+e,s.call(this,e,t,r),this;if(h(e)){var n=e;return this.filter(function(e,t){return!t.dir&&n.test(e)})}var i=this.files[this.root+e];return i&&!i.dir?i:null},folder:function(r){if(!r)return this;if(h(r))return this.filter(function(e,t){return t.dir&&r.test(e)});var e=this.root+r,t=b.call(this,e),n=this.clone();return n.root=t.name,n},remove:function(r){r=this.root+r;var e=this.files[r];if(e||(\"/\"!==r.slice(-1)&&(r+=\"/\"),e=this.files[r]),e&&!e.dir)delete this.files[r];else for(var t=this.filter(function(e,t){return t.name.slice(0,r.length)===r}),n=0;n<t.length;n++)delete this.files[t[n].name];return this},generate:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},generateInternalStream:function(e){var t,r={};try{if((r=u.extend(e||{},{streamFiles:!1,compression:\"STORE\",compressionOptions:null,type:\"\",platform:\"DOS\",comment:null,mimeType:\"application/zip\",encodeFileName:i.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),\"binarystring\"===r.type&&(r.type=\"string\"),!r.type)throw new Error(\"No output type specified.\");u.checkSupport(r.type),\"darwin\"!==r.platform&&\"freebsd\"!==r.platform&&\"linux\"!==r.platform&&\"sunos\"!==r.platform||(r.platform=\"UNIX\"),\"win32\"===r.platform&&(r.platform=\"DOS\");var n=r.comment||this.comment||\"\";t=o.generateWorker(this,r,n)}catch(e){(t=new l(\"error\")).error(e)}return new a(t,r.type||\"string\",r.mimeType)},generateAsync:function(e,t){return this.generateInternalStream(e).accumulate(t)},generateNodeStream:function(e,t){return(e=e||{}).type||(e.type=\"nodebuffer\"),this.generateInternalStream(e).toNodejsStream(t)}};t.exports=n},{\"./compressedObject\":2,\"./defaults\":5,\"./generate\":9,\"./nodejs/NodejsStreamInputAdapter\":12,\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31,\"./utils\":32,\"./zipObject\":35}],16:[function(e,t,r){\"use strict\";t.exports=e(\"stream\")},{stream:void 0}],17:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e);for(var t=0;t<this.data.length;t++)e[t]=255&e[t]}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data[this.zero+e]},i.prototype.lastIndexOfSignature=function(e){for(var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.length-4;0<=s;--s)if(this.data[s]===t&&this.data[s+1]===r&&this.data[s+2]===n&&this.data[s+3]===i)return s-this.zero;return-1},i.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.readData(4);return t===s[0]&&r===s[1]&&n===s[2]&&i===s[3]},i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],18:[function(e,t,r){\"use strict\";var n=e(\"../utils\");function i(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}i.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<this.zero+e||e<0)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+e+\"). Corrupted zip ?\")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(){},readInt:function(e){var t,r=0;for(this.checkOffset(e),t=this.index+e-1;t>=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r<this._listeners[e].length;r++)this._listeners[e][r].call(this,t)},pipe:function(e){return e.registerPrevious(this)},registerPrevious:function(e){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.streamInfo=e.streamInfo,this.mergeStreamInfo(),this.previous=e;var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.end()}),e.on(\"error\",function(e){t.error(e)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var e=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),e=!0),this.previous&&this.previous.resume(),!e},flush:function(){},processChunk:function(e){this.push(e)},withStreamInfo:function(e,t){return this.extraStreamInfo[e]=t,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var e in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,e)&&(this.streamInfo[e]=this.extraStreamInfo[e])},lock:function(){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var e=\"Worker \"+this.name;return this.previous?this.previous+\" -> \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r<t.length;r++)s+=t[r].length;switch(e){case\"string\":return t.join(\"\");case\"array\":return Array.prototype.concat.apply([],t);case\"uint8array\":for(i=new Uint8Array(s),r=0;r<t.length;r++)i.set(t[r],n),n+=t[r].length;return i;case\"nodebuffer\":return Buffer.concat(t);default:throw new Error(\"concat : unsupported type '\"+e+\"'\")}}(i,n),a);t(e)}catch(e){r(e)}n=[]}).resume()})}function f(e,t,r){var n=t;switch(t){case\"blob\":case\"arraybuffer\":n=\"uint8array\";break;case\"base64\":n=\"string\"}try{this._internalType=n,this._outputType=t,this._mimeType=r,h.checkSupport(n),this._worker=e.pipe(new i(n)),e.lock()}catch(e){this._worker=new s(\"error\"),this._worker.error(e)}}f.prototype={accumulate:function(e){return l(this,e)},on:function(e,t){var r=this;return\"data\"===e?this._worker.on(e,function(e){t.call(r,e.data,e.meta)}):this._worker.on(e,function(){h.delay(t,arguments,r)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(e){if(h.checkSupport(\"nodestream\"),\"nodebuffer\"!==this._outputType)throw new Error(this._outputType+\" is not supported by this method\");return new o(this,{objectMode:\"nodebuffer\"!==this._outputType},e)}},t.exports=f},{\"../base64\":1,\"../external\":6,\"../nodejs/NodejsStreamOutputAdapter\":13,\"../support\":30,\"../utils\":32,\"./ConvertWorker\":24,\"./GenericWorker\":28}],30:[function(e,t,r){\"use strict\";if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array,r.nodebuffer=\"undefined\"!=typeof Buffer,r.uint8array=\"undefined\"!=typeof Uint8Array,\"undefined\"==typeof ArrayBuffer)r.blob=!1;else{var n=new ArrayBuffer(0);try{r.blob=0===new Blob([n],{type:\"application/zip\"}).size}catch(e){try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);i.append(n),r.blob=0===i.getBlob(\"application/zip\").size}catch(e){r.blob=!1}}}try{r.nodestream=!!e(\"readable-stream\").Readable}catch(e){r.nodestream=!1}},{\"readable-stream\":16}],31:[function(e,t,s){\"use strict\";for(var o=e(\"./utils\"),h=e(\"./support\"),r=e(\"./nodejsUtils\"),n=e(\"./stream/GenericWorker\"),u=new Array(256),i=0;i<256;i++)u[i]=252<=i?6:248<=i?5:240<=i?4:224<=i?3:192<=i?2:1;u[254]=u[254]=1;function a(){n.call(this,\"utf-8 decode\"),this.leftOver=null}function l(){n.call(this,\"utf-8 encode\")}s.utf8encode=function(e){return h.nodebuffer?r.newBufferFrom(e,\"utf-8\"):function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=h.uint8array?new Uint8Array(o):new Array(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t<s;)if((n=e[t++])<128)a[r++]=n;else if(4<(i=u[n]))a[r++]=65533,t+=i-1;else{for(n&=2===i?31:3===i?15:7;1<i&&t<s;)n=n<<6|63&e[t++],i--;1<i?a[r++]=65533:n<65536?a[r++]=n:(n-=65536,a[r++]=55296|n>>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r<e.length;++r)t[r]=255&e.charCodeAt(r);return t}e(\"setimmediate\"),a.newBlob=function(t,r){a.checkSupport(\"blob\");try{return new Blob([t],{type:r})}catch(e){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return n.append(t),n.getBlob(r)}catch(e){throw new Error(\"Bug : can't construct the Blob.\")}}};var i={stringifyByChunk:function(e,t,r){var n=[],i=0,s=e.length;if(s<=r)return String.fromCharCode.apply(null,e);for(;i<s;)\"array\"===t||\"nodebuffer\"===t?n.push(String.fromCharCode.apply(null,e.slice(i,Math.min(i+r,s)))):n.push(String.fromCharCode.apply(null,e.subarray(i,Math.min(i+r,s)))),i+=r;return n.join(\"\")},stringifyByChar:function(e){for(var t=\"\",r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return t},applyCanBeUsed:{uint8array:function(){try{return o.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(e){return!1}}(),nodebuffer:function(){try{return o.nodebuffer&&1===String.fromCharCode.apply(null,r.allocBuffer(1)).length}catch(e){return!1}}()}};function s(e){var t=65536,r=a.getTypeOf(e),n=!0;if(\"uint8array\"===r?n=i.applyCanBeUsed.uint8array:\"nodebuffer\"===r&&(n=i.applyCanBeUsed.nodebuffer),n)for(;1<t;)try{return i.stringifyByChunk(e,r,t)}catch(e){t=Math.floor(t/2)}return i.stringifyByChar(e)}function f(e,t){for(var r=0;r<e.length;r++)t[r]=e[r];return t}a.applyFromCharCode=s;var c={};c.string={string:n,array:function(e){return l(e,new Array(e.length))},arraybuffer:function(e){return c.string.uint8array(e).buffer},uint8array:function(e){return l(e,new Uint8Array(e.length))},nodebuffer:function(e){return l(e,r.allocBuffer(e.length))}},c.array={string:s,array:n,arraybuffer:function(e){return new Uint8Array(e).buffer},uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(e)}},c.arraybuffer={string:function(e){return s(new Uint8Array(e))},array:function(e){return f(new Uint8Array(e),new Array(e.byteLength))},arraybuffer:n,uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(new Uint8Array(e))}},c.uint8array={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return e.buffer},uint8array:n,nodebuffer:function(e){return r.newBufferFrom(e)}},c.nodebuffer={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return c.nodebuffer.uint8array(e).buffer},uint8array:function(e){return f(e,new Uint8Array(e.length))},nodebuffer:n},a.transformTo=function(e,t){if(t=t||\"\",!e)return t;a.checkSupport(e);var r=a.getTypeOf(t);return c[r][e](t)},a.resolve=function(e){for(var t=e.split(\"/\"),r=[],n=0;n<t.length;n++){var i=t[n];\".\"===i||\"\"===i&&0!==n&&n!==t.length-1||(\"..\"===i?r.pop():r.push(i))}return r.join(\"/\")},a.getTypeOf=function(e){return\"string\"==typeof e?\"string\":\"[object Array]\"===Object.prototype.toString.call(e)?\"array\":o.nodebuffer&&r.isBuffer(e)?\"nodebuffer\":o.uint8array&&e instanceof Uint8Array?\"uint8array\":o.arraybuffer&&e instanceof ArrayBuffer?\"arraybuffer\":void 0},a.checkSupport=function(e){if(!o[e.toLowerCase()])throw new Error(e+\" is not supported by this platform\")},a.MAX_VALUE_16BITS=65535,a.MAX_VALUE_32BITS=-1,a.pretty=function(e){var t,r,n=\"\";for(r=0;r<(e||\"\").length;r++)n+=\"\\\\x\"+((t=e.charCodeAt(r))<16?\"0\":\"\")+t.toString(16).toUpperCase();return n},a.delay=function(e,t,r){setImmediate(function(){e.apply(r||null,t||[])})},a.inherits=function(e,t){function r(){}r.prototype=t.prototype,e.prototype=new r},a.extend=function(){var e,t,r={};for(e=0;e<arguments.length;e++)for(t in arguments[e])Object.prototype.hasOwnProperty.call(arguments[e],t)&&void 0===r[t]&&(r[t]=arguments[e][t]);return r},a.prepareContent=function(r,e,n,i,s){return u.Promise.resolve(e).then(function(n){return o.blob&&(n instanceof Blob||-1!==[\"[object File]\",\"[object Blob]\"].indexOf(Object.prototype.toString.call(n)))&&\"undefined\"!=typeof FileReader?new u.Promise(function(t,r){var e=new FileReader;e.onload=function(e){t(e.target.result)},e.onerror=function(e){r(e.target.error)},e.readAsArrayBuffer(n)}):n}).then(function(e){var t=a.getTypeOf(e);return t?(\"arraybuffer\"===t?e=a.transformTo(\"uint8array\",e):\"string\"===t&&(s?e=h.decode(e):n&&!0!==i&&(e=function(e){return l(e,o.uint8array?new Uint8Array(e.length):new Array(e.length))}(e))),e):u.Promise.reject(new Error(\"Can't read the data of '\"+r+\"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\"))})}},{\"./base64\":1,\"./external\":6,\"./nodejsUtils\":14,\"./support\":30,setimmediate:54}],33:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),i=e(\"./utils\"),s=e(\"./signature\"),a=e(\"./zipEntry\"),o=e(\"./support\");function h(e){this.files=[],this.loadOptions=e}h.prototype={checkSignature:function(e){if(!this.reader.readAndCheckSignature(e)){this.reader.index-=4;var t=this.reader.readString(4);throw new Error(\"Corrupted zip or bug: unexpected signature (\"+i.pretty(t)+\", expected \"+i.pretty(e)+\")\")}},isSignature:function(e,t){var r=this.reader.index;this.reader.setIndex(e);var n=this.reader.readString(4)===t;return this.reader.setIndex(r),n},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var e=this.reader.readData(this.zipCommentLength),t=o.uint8array?\"uint8array\":\"array\",r=i.transformTo(t,e);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var e,t,r,n=this.zip64EndOfCentralSize-44;0<n;)e=this.reader.readInt(2),t=this.reader.readInt(4),r=this.reader.readData(t),this.zip64ExtensibleData[e]={id:e,length:t,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var e,t;for(e=0;e<this.files.length;e++)t=this.files[e],this.reader.setIndex(t.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),t.readLocalPart(this.reader),t.handleUTF8(),t.processAttributes()},readCentralDir:function(){var e;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(e=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(e);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error(\"Corrupted zip or bug: expected \"+this.centralDirRecords+\" records in central dir, got \"+this.files.length)},readEndOfCentral:function(){var e=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(e<0)throw!this.isSignature(0,s.LOCAL_FILE_HEADER)?new Error(\"Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\"):new Error(\"Corrupted zip: can't find end of central directory\");this.reader.setIndex(e);var t=e;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===i.MAX_VALUE_16BITS||this.diskWithCentralDirStart===i.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===i.MAX_VALUE_16BITS||this.centralDirRecords===i.MAX_VALUE_16BITS||this.centralDirSize===i.MAX_VALUE_32BITS||this.centralDirOffset===i.MAX_VALUE_32BITS){if(this.zip64=!0,(e=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");if(this.reader.setIndex(e),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var n=t-r;if(0<n)this.isSignature(t,s.CENTRAL_FILE_HEADER)||(this.reader.zero=n);else if(n<0)throw new Error(\"Corrupted zip: missing \"+Math.abs(n)+\" bytes.\")},prepareReader:function(e){this.reader=n(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=h},{\"./reader/readerFor\":22,\"./signature\":23,\"./support\":30,\"./utils\":32,\"./zipEntry\":34}],34:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),s=e(\"./utils\"),i=e(\"./compressedObject\"),a=e(\"./crc32\"),o=e(\"./utf8\"),h=e(\"./compressions\"),u=e(\"./support\");function l(e,t){this.options=e,this.loadOptions=t}l.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(e){var t,r;if(e.skip(22),this.fileNameLength=e.readInt(2),r=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)\");if(null===(t=function(e){for(var t in h)if(Object.prototype.hasOwnProperty.call(h,t)&&h[t].magic===e)return h[t];return null}(this.compressionMethod)))throw new Error(\"Corrupted zip : compression \"+s.pretty(this.compressionMethod)+\" unknown (inner file : \"+s.transformTo(\"string\",this.fileName)+\")\");this.decompressed=new i(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4<i;)t=e.readInt(2),r=e.readInt(2),n=e.readData(r),this.extraFields[t]={id:t,length:r,value:n};e.setIndex(i)},handleUTF8:function(){var e=u.uint8array?\"uint8array\":\"array\";if(this.useUTF8())this.fileNameStr=o.utf8decode(this.fileName),this.fileCommentStr=o.utf8decode(this.fileComment);else{var t=this.findExtraFieldUnicodePath();if(null!==t)this.fileNameStr=t;else{var r=s.transformTo(e,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var n=this.findExtraFieldUnicodeComment();if(null!==n)this.fileCommentStr=n;else{var i=s.transformTo(e,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var e=this.extraFields[28789];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileName)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null},findExtraFieldUnicodeComment:function(){var e=this.extraFields[25461];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileComment)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null}},t.exports=l},{\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./reader/readerFor\":22,\"./support\":30,\"./utf8\":31,\"./utils\":32}],35:[function(e,t,r){\"use strict\";function n(e,t,r){this.name=e,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=t,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var s=e(\"./stream/StreamHelper\"),i=e(\"./stream/DataWorker\"),a=e(\"./utf8\"),o=e(\"./compressedObject\"),h=e(\"./stream/GenericWorker\");n.prototype={internalStream:function(e){var t=null,r=\"string\";try{if(!e)throw new Error(\"No output type specified.\");var n=\"string\"===(r=e.toLowerCase())||\"text\"===r;\"binarystring\"!==r&&\"text\"!==r||(r=\"string\"),t=this._decompressWorker();var i=!this._dataBinary;i&&!n&&(t=t.pipe(new a.Utf8EncodeWorker)),!i&&n&&(t=t.pipe(new a.Utf8DecodeWorker))}catch(e){(t=new h(\"error\")).error(e)}return new s(t,r,\"\")},async:function(e,t){return this.internalStream(e).accumulate(t)},nodeStream:function(e,t){return this.internalStream(e||\"nodebuffer\").toNodejsStream(t)},_compressWorker:function(e,t){if(this._data instanceof o&&this._data.compression.magic===e.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),o.createWorkerFrom(r,e,t)},_decompressWorker:function(){return this._data instanceof o?this._data.getContentWorker():this._data instanceof h?this._data:new i(this._data)}};for(var u=[\"asText\",\"asBinary\",\"asNodeBuffer\",\"asUint8Array\",\"asArrayBuffer\"],l=function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},f=0;f<u.length;f++)n.prototype[u[f]]=l;t.exports=n},{\"./compressedObject\":2,\"./stream/DataWorker\":27,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31}],36:[function(e,l,t){(function(t){\"use strict\";var r,n,e=t.MutationObserver||t.WebKitMutationObserver;if(e){var i=0,s=new e(u),a=t.document.createTextNode(\"\");s.observe(a,{characterData:!0}),r=function(){a.data=i=++i%2}}else if(t.setImmediate||void 0===t.MessageChannel)r=\"document\"in t&&\"onreadystatechange\"in t.document.createElement(\"script\")?function(){var e=t.document.createElement(\"script\");e.onreadystatechange=function(){u(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},t.document.documentElement.appendChild(e)}:function(){setTimeout(u,0)};else{var o=new t.MessageChannel;o.port1.onmessage=u,r=function(){o.port2.postMessage(0)}}var h=[];function u(){var e,t;n=!0;for(var r=h.length;r;){for(t=h,h=[],e=-1;++e<r;)t[e]();r=h.length}n=!1}l.exports=function(e){1!==h.push(e)||n||r()}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],37:[function(e,t,r){\"use strict\";var i=e(\"immediate\");function u(){}var l={},s=[\"REJECTED\"],a=[\"FULFILLED\"],n=[\"PENDING\"];function o(e){if(\"function\"!=typeof e)throw new TypeError(\"resolver must be a function\");this.state=n,this.queue=[],this.outcome=void 0,e!==u&&d(this,e)}function h(e,t,r){this.promise=e,\"function\"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),\"function\"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function f(t,r,n){i(function(){var e;try{e=r(n)}catch(e){return l.reject(t,e)}e===t?l.reject(t,new TypeError(\"Cannot resolve promise with itself\")):l.resolve(t,e)})}function c(e){var t=e&&e.then;if(e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof t)return function(){t.apply(e,arguments)}}function d(t,e){var r=!1;function n(e){r||(r=!0,l.reject(t,e))}function i(e){r||(r=!0,l.resolve(t,e))}var s=p(function(){e(i,n)});\"error\"===s.status&&n(s.value)}function p(e,t){var r={};try{r.value=e(t),r.status=\"success\"}catch(e){r.status=\"error\",r.value=e}return r}(t.exports=o).prototype.finally=function(t){if(\"function\"!=typeof t)return this;var r=this.constructor;return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})},o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){if(\"function\"!=typeof e&&this.state===a||\"function\"!=typeof t&&this.state===s)return this;var r=new this.constructor(u);this.state!==n?f(r,this.state===a?e:t,this.outcome):this.queue.push(new h(r,e,t));return r},h.prototype.callFulfilled=function(e){l.resolve(this.promise,e)},h.prototype.otherCallFulfilled=function(e){f(this.promise,this.onFulfilled,e)},h.prototype.callRejected=function(e){l.reject(this.promise,e)},h.prototype.otherCallRejected=function(e){f(this.promise,this.onRejected,e)},l.resolve=function(e,t){var r=p(c,t);if(\"error\"===r.status)return l.reject(e,r.value);var n=r.value;if(n)d(e,n);else{e.state=a,e.outcome=t;for(var i=-1,s=e.queue.length;++i<s;)e.queue[i].callFulfilled(t)}return e},l.reject=function(e,t){e.state=s,e.outcome=t;for(var r=-1,n=e.queue.length;++r<n;)e.queue[r].callRejected(t);return e},o.resolve=function(e){if(e instanceof this)return e;return l.resolve(new this(u),e)},o.reject=function(e){var t=new this(u);return l.reject(t,e)},o.all=function(e){var r=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var n=e.length,i=!1;if(!n)return this.resolve([]);var s=new Array(n),a=0,t=-1,o=new this(u);for(;++t<n;)h(e[t],t);return o;function h(e,t){r.resolve(e).then(function(e){s[t]=e,++a!==n||i||(i=!0,l.resolve(o,s))},function(e){i||(i=!0,l.reject(o,e))})}},o.race=function(e){var t=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var r=e.length,n=!1;if(!r)return this.resolve([]);var i=-1,s=new this(u);for(;++i<r;)a=e[i],t.resolve(a).then(function(e){n||(n=!0,l.resolve(s,e))},function(e){n||(n=!0,l.reject(s,e))});var a;return s}},{immediate:36}],38:[function(e,t,r){\"use strict\";var n={};(0,e(\"./lib/utils/common\").assign)(n,e(\"./lib/deflate\"),e(\"./lib/inflate\"),e(\"./lib/zlib/constants\")),t.exports=n},{\"./lib/deflate\":39,\"./lib/inflate\":40,\"./lib/utils/common\":41,\"./lib/zlib/constants\":44}],39:[function(e,t,r){\"use strict\";var a=e(\"./zlib/deflate\"),o=e(\"./utils/common\"),h=e(\"./utils/strings\"),i=e(\"./zlib/messages\"),s=e(\"./zlib/zstream\"),u=Object.prototype.toString,l=0,f=-1,c=0,d=8;function p(e){if(!(this instanceof p))return new p(e);this.options=o.assign({level:f,method:d,chunkSize:16384,windowBits:15,memLevel:8,strategy:c,to:\"\"},e||{});var t=this.options;t.raw&&0<t.windowBits?t.windowBits=-t.windowBits:t.gzip&&0<t.windowBits&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=a.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==l)throw new Error(i[r]);if(t.header&&a.deflateSetHeader(this.strm,t.header),t.dictionary){var n;if(n=\"string\"==typeof t.dictionary?h.string2buf(t.dictionary):\"[object ArrayBuffer]\"===u.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,(r=a.deflateSetDictionary(this.strm,n))!==l)throw new Error(i[r]);this._dict_set=!0}}function n(e,t){var r=new p(t);if(r.push(e,!0),r.err)throw r.msg||i[r.err];return r.result}p.prototype.push=function(e,t){var r,n,i=this.strm,s=this.options.chunkSize;if(this.ended)return!1;n=t===~~t?t:!0===t?4:0,\"string\"==typeof e?i.input=h.string2buf(e):\"[object ArrayBuffer]\"===u.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(0===i.avail_out&&(i.output=new o.Buf8(s),i.next_out=0,i.avail_out=s),1!==(r=a.deflate(i,n))&&r!==l)return this.onEnd(r),!(this.ended=!0);0!==i.avail_out&&(0!==i.avail_in||4!==n&&2!==n)||(\"string\"===this.options.to?this.onData(h.buf2binstring(o.shrinkBuf(i.output,i.next_out))):this.onData(o.shrinkBuf(i.output,i.next_out)))}while((0<i.avail_in||0===i.avail_out)&&1!==r);return 4===n?(r=a.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===l):2!==n||(this.onEnd(l),!(i.avail_out=0))},p.prototype.onData=function(e){this.chunks.push(e)},p.prototype.onEnd=function(e){e===l&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Deflate=p,r.deflate=n,r.deflateRaw=function(e,t){return(t=t||{}).raw=!0,n(e,t)},r.gzip=function(e,t){return(t=t||{}).gzip=!0,n(e,t)}},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/deflate\":46,\"./zlib/messages\":51,\"./zlib/zstream\":53}],40:[function(e,t,r){\"use strict\";var c=e(\"./zlib/inflate\"),d=e(\"./utils/common\"),p=e(\"./utils/strings\"),m=e(\"./zlib/constants\"),n=e(\"./zlib/messages\"),i=e(\"./zlib/zstream\"),s=e(\"./zlib/gzheader\"),_=Object.prototype.toString;function a(e){if(!(this instanceof a))return new a(e);this.options=d.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&0<=t.windowBits&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(0<=t.windowBits&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),15<t.windowBits&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new i,this.strm.avail_out=0;var r=c.inflateInit2(this.strm,t.windowBits);if(r!==m.Z_OK)throw new Error(n[r]);this.header=new s,c.inflateGetHeader(this.strm,this.header)}function o(e,t){var r=new a(t);if(r.push(e,!0),r.err)throw r.msg||n[r.err];return r.result}a.prototype.push=function(e,t){var r,n,i,s,a,o,h=this.strm,u=this.options.chunkSize,l=this.options.dictionary,f=!1;if(this.ended)return!1;n=t===~~t?t:!0===t?m.Z_FINISH:m.Z_NO_FLUSH,\"string\"==typeof e?h.input=p.binstring2buf(e):\"[object ArrayBuffer]\"===_.call(e)?h.input=new Uint8Array(e):h.input=e,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new d.Buf8(u),h.next_out=0,h.avail_out=u),(r=c.inflate(h,m.Z_NO_FLUSH))===m.Z_NEED_DICT&&l&&(o=\"string\"==typeof l?p.string2buf(l):\"[object ArrayBuffer]\"===_.call(l)?new Uint8Array(l):l,r=c.inflateSetDictionary(this.strm,o)),r===m.Z_BUF_ERROR&&!0===f&&(r=m.Z_OK,f=!1),r!==m.Z_STREAM_END&&r!==m.Z_OK)return this.onEnd(r),!(this.ended=!0);h.next_out&&(0!==h.avail_out&&r!==m.Z_STREAM_END&&(0!==h.avail_in||n!==m.Z_FINISH&&n!==m.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(i=p.utf8border(h.output,h.next_out),s=h.next_out-i,a=p.buf2string(h.output,i),h.next_out=s,h.avail_out=u-s,s&&d.arraySet(h.output,h.output,i,s,0),this.onData(a)):this.onData(d.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(f=!0)}while((0<h.avail_in||0===h.avail_out)&&r!==m.Z_STREAM_END);return r===m.Z_STREAM_END&&(n=m.Z_FINISH),n===m.Z_FINISH?(r=c.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m.Z_OK):n!==m.Z_SYNC_FLUSH||(this.onEnd(m.Z_OK),!(h.avail_out=0))},a.prototype.onData=function(e){this.chunks.push(e)},a.prototype.onEnd=function(e){e===m.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=d.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Inflate=a,r.inflate=o,r.inflateRaw=function(e,t){return(t=t||{}).raw=!0,o(e,t)},r.ungzip=o},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/constants\":44,\"./zlib/gzheader\":47,\"./zlib/inflate\":49,\"./zlib/messages\":51,\"./zlib/zstream\":53}],41:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;r.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be non-object\");for(var n in r)r.hasOwnProperty(n)&&(e[n]=r[n])}}return e},r.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var i={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){var t,r,n,i,s,a;for(t=n=0,r=e.length;t<r;t++)n+=e[t].length;for(a=new Uint8Array(n),t=i=0,r=e.length;t<r;t++)s=e[t],a.set(s,i),i+=s.length;return a}},s={arraySet:function(e,t,r,n,i){for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){return[].concat.apply([],e)}};r.setTyped=function(e){e?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,i)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(n)},{}],42:[function(e,t,r){\"use strict\";var h=e(\"./common\"),i=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(e){i=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){s=!1}for(var u=new h.Buf8(256),n=0;n<256;n++)u[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;function l(e,t){if(t<65537&&(e.subarray&&s||!e.subarray&&i))return String.fromCharCode.apply(null,h.shrinkBuf(e,t));for(var r=\"\",n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r}u[254]=u[254]=1,r.string2buf=function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=new h.Buf8(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r<n;r++)t[r]=e.charCodeAt(r);return t},r.buf2string=function(e,t){var r,n,i,s,a=t||e.length,o=new Array(2*a);for(r=n=0;r<a;)if((i=e[r++])<128)o[n++]=i;else if(4<(s=u[i]))o[n++]=65533,r+=s-1;else{for(i&=2===s?31:3===s?15:7;1<s&&r<a;)i=i<<6|63&e[r++],s--;1<s?o[n++]=65533:i<65536?o[n++]=i:(i-=65536,o[n++]=55296|i>>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;s=s+(i=i+t[n++]|0)|0,--a;);i%=65521,s%=65521}return i|s<<16|0}},{}],44:[function(e,t,r){\"use strict\";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(e,t,r){\"use strict\";var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4<e?9:0)}function D(e){for(var t=e.length;0<=--t;)e[t]=0}function F(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&s<c);if(n=S-(c-s),s=c-S,a<n){if(e.match_start=t,o<=(a=n))break;d=u[s+a-1],p=u[s+a]}}}while((t=f[t&l])>h&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u<l&&(l=u),r=0===l?0:(a.avail_in-=l,c.arraySet(o,a.input,a.next_in,l,h),1===a.state.wrap?a.adler=d(a.adler,o,l,h):2===a.state.wrap&&(a.adler=p(a.adler,o,l,h)),a.next_in+=l,a.total_in+=l,l),e.lookahead+=r,e.lookahead+e.insert>=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+x-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<x)););}while(e.lookahead<z&&0!==e.strm.avail_in)}function Z(e,t){for(var r,n;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r)),e.match_length>=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart,0!=--e.match_length;);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function W(e,t){for(var r,n,i;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=x-1,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r),e.match_length<=5&&(1===e.strategy||e.match_length===x&&4096<e.strstart-e.match_start)&&(e.match_length=x-1)),e.prev_length>=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!=--e.prev_length;);if(e.match_available=0,e.match_length=x-1,e.strstart++,n&&(N(e,!1),0===e.strm.avail_out))return A}else if(e.match_available){if((n=u._tr_tally(e,0,e.window[e.strstart-1]))&&N(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return A}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=u._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function M(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}function H(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=v,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new c.Buf16(2*w),this.dyn_dtree=new c.Buf16(2*(2*a+1)),this.bl_tree=new c.Buf16(2*(2*o+1)),D(this.dyn_ltree),D(this.dyn_dtree),D(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new c.Buf16(k+1),this.heap=new c.Buf16(2*s+1),D(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new c.Buf16(2*s+1),D(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function G(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=i,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?C:E,e.adler=2===t.wrap?0:1,t.last_flush=l,u._tr_init(t),m):R(e,_)}function K(e){var t=G(e);return t===m&&function(e){e.window_size=2*e.w_size,D(e.head),e.max_lazy_match=h[e.level].max_lazy,e.good_match=h[e.level].good_length,e.nice_match=h[e.level].nice_length,e.max_chain_length=h[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=x-1,e.match_available=0,e.ins_h=0}(e.state),t}function Y(e,t,r,n,i,s){if(!e)return _;var a=1;if(t===g&&(t=6),n<0?(a=0,n=-n):15<n&&(a=2,n-=16),i<1||y<i||r!==v||n<8||15<n||t<0||9<t||s<0||b<s)return R(e,_);8===n&&(n=9);var o=new H;return(e.state=o).strm=e,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+x-1)/x),o.window=new c.Buf8(2*o.w_size),o.head=new c.Buf16(o.hash_size),o.prev=new c.Buf16(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new c.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=s,o.method=r,K(e)}h=[new M(0,0,0,0,function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5<t||t<0)return e?R(e,_):_;if(n=e.state,!e.output||!e.input&&0!==e.avail_in||666===n.status&&t!==f)return R(e,0===e.avail_out?-5:_);if(n.strm=e,r=n.last_flush,n.last_flush=t,n.status===C)if(2===n.wrap)e.adler=0,U(n,31),U(n,139),U(n,8),n.gzhead?(U(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),U(n,255&n.gzhead.time),U(n,n.gzhead.time>>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.name.length?255&n.gzhead.name.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.comment.length?255&n.gzhead.comment.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0<e.strstart&&(n=a[i=e.strstart-1])===a[++i]&&n===a[++i]&&n===a[++i]){s=e.strstart+S;do{}while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&i<s);e.match_length=S-(s-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0<n.wrap&&(n.wrap=-n.wrap),0!==n.pending?m:1)},r.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==C&&69!==t&&73!==t&&91!==t&&103!==t&&t!==E&&666!==t?R(e,_):(e.state=null,t===E?R(e,-3):m):_},r.deflateSetDictionary=function(e,t){var r,n,i,s,a,o,h,u,l=t.length;if(!e||!e.state)return _;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==C||r.lookahead)return _;for(1===s&&(e.adler=d(e.adler,t,l,0)),r.wrap=0,l>=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+x-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++,--i;);r.strstart=n,r.lookahead=x-1,j(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=x-1,r.match_available=0,e.next_in=o,e.input=h,e.avail_in=a,r.wrap=s,m},r.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./messages\":51,\"./trees\":52}],47:[function(e,t,r){\"use strict\";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1}},{}],48:[function(e,t,r){\"use strict\";t.exports=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C;r=e.state,n=e.next_in,z=e.input,i=n+(e.avail_in-5),s=e.next_out,C=e.output,a=s-(t-e.avail_out),o=s+(e.avail_out-257),h=r.dmax,u=r.wsize,l=r.whave,f=r.wnext,c=r.window,d=r.hold,p=r.bits,m=r.lencode,_=r.distcode,g=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;e:do{p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=m[d&g];t:for(;;){if(d>>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<<y)-1)];continue t}if(32&y){r.mode=12;break e}e.msg=\"invalid literal/length code\",r.mode=30;break e}w=65535&v,(y&=15)&&(p<y&&(d+=z[n++]<<p,p+=8),w+=d&(1<<y)-1,d>>>=y,p-=y),p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=_[d&b];r:for(;;){if(d>>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<<y)-1)];continue r}e.msg=\"invalid distance code\",r.mode=30;break e}if(k=65535&v,p<(y&=15)&&(d+=z[n++]<<p,(p+=8)<y&&(d+=z[n++]<<p,p+=8)),h<(k+=d&(1<<y)-1)){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(d>>>=y,p-=y,(y=s-a)<k){if(l<(y=k-y)&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(S=c,(x=0)===f){if(x+=u-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}}else if(f<y){if(x+=u+f-y,(y-=f)<w){for(w-=y;C[s++]=c[x++],--y;);if(x=0,f<w){for(w-=y=f;C[s++]=c[x++],--y;);x=s-k,S=C}}}else if(x+=f-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}for(;2<w;)C[s++]=S[x++],C[s++]=S[x++],C[s++]=S[x++],w-=3;w&&(C[s++]=S[x++],1<w&&(C[s++]=S[x++]))}else{for(x=s-k;C[s++]=C[x++],C[s++]=C[x++],C[s++]=C[x++],2<(w-=3););w&&(C[s++]=C[x++],1<w&&(C[s++]=C[x++]))}break}}break}}while(n<i&&s<o);n-=w=p>>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n<i?i-n+5:5-(n-i),e.avail_out=s<o?o-s+257:257-(s-o),r.hold=d,r.bits=p}},{}],49:[function(e,t,r){\"use strict\";var I=e(\"../utils/common\"),O=e(\"./adler32\"),B=e(\"./crc32\"),R=e(\"./inffast\"),T=e(\"./inftrees\"),D=1,F=2,N=0,U=-2,P=1,n=852,i=592;function L(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15<t)?U:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,o(e))):U}function u(e,t){var r,n;return e?(n=new s,(e.state=n).window=null,(r=h(e,t))!==N&&(e.state=null),r):U}var l,f,c=!0;function j(e){if(c){var t;for(l=new I.Buf32(512),f=new I.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(T(D,e.lens,0,288,l,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;T(F,e.lens,0,32,f,0,e.work,{bits:5}),c=!1}e.lencode=l,e.lenbits=9,e.distcode=f,e.distbits=5}function Z(e,t,r,n){var i,s=e.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new I.Buf8(s.wsize)),n>=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0}r.inflateReset=o,r.inflateReset2=h,r.inflateResetKeep=a,r.inflateInit=function(e){return u(e,15)},r.inflateInit2=u,r.inflate=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C=0,E=new I.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return U;12===(r=e.state).mode&&(r.mode=13),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,f=o,c=h,x=N;e:for(;;)switch(r.mode){case P:if(0===r.wrap){r.mode=13;break}for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(2&r.wrap&&35615===u){E[r.check=0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<<k,e.adler=r.check=1,r.mode=512&u?10:12,l=u=0;break;case 2:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.flags=u,8!=(255&r.flags)){e.msg=\"unknown compression method\",r.mode=30;break}if(57344&r.flags){e.msg=\"unknown header flags set\",r.mode=30;break}r.head&&(r.head.text=u>>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.time=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.xflags=255&u,r.head.os=u>>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length=u,r.head&&(r.head.extra_len=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(65535&r.check)){e.msg=\"header crc mismatch\",r.mode=30;break}l=u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}e.adler=r.check=L(u),l=u=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,2;e.adler=r.check=1,r.mode=12;case 12:if(5===t||6===t)break e;case 13:if(r.last){u>>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}switch(r.last=1&u,l-=1,3&(u>>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if((65535&u)!=(u>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o<d&&(d=o),h<d&&(d=h),0===d)break e;I.arraySet(i,n,s,d,a),o-=d,s+=d,h-=d,a+=d,r.length-=d;break}r.mode=12;break;case 17:for(;l<14;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.nlen=257+(31&u),u>>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286<r.nlen||30<r.ndist){e.msg=\"too many length or distance symbols\",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.lens[A[r.have++]]=7&u,u>>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(b<16)u>>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u>>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=3+(7&(u>>>=_)),u>>>=3,l-=3}else{for(z=_+7;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=11+(127&(u>>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(g&&0==(240&g)){for(v=_,y=g,w=b;g=(C=r.lencode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<<r.distbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(0==(240&g)){for(v=_,y=g,w=b;g=(C=r.distcode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.offset+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(h<d&&(d=h),h-=d,r.length-=d;i[a++]=m[p++],--d;);0===r.length&&(r.mode=21);break;case 26:if(0===h)break e;i[a++]=r.length,h--,r.mode=21;break;case 27:if(r.wrap){for(;l<32;){if(0===o)break e;o--,u|=n[s++]<<l,l+=8}if(c-=h,e.total_out+=c,r.total+=c,c&&(e.adler=r.check=r.flags?B(r.check,i,c,a-c):O(r.check,i,c,a-c)),c=h,(r.flags?u:L(u))!==r.check){e.msg=\"incorrect data check\",r.mode=30;break}l=u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(4294967295&r.total)){e.msg=\"incorrect length check\",r.mode=30;break}l=u=0}r.mode=29;case 29:x=1;break e;case 30:x=-3;break e;case 31:return-4;case 32:default:return U}return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,(r.wsize||c!==e.avail_out&&r.mode<30&&(r.mode<27||4!==t))&&Z(e,e.output,e.next_out,c-e.avail_out)?(r.mode=31,-4):(f-=e.avail_in,c-=e.avail_out,e.total_in+=f,e.total_out+=c,r.total+=c,r.wrap&&c&&(e.adler=r.check=r.flags?B(r.check,i,c,e.next_out-c):O(r.check,i,c,e.next_out-c)),e.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==f&&0===c||4===t)&&x===N&&(x=-5),x)},r.inflateEnd=function(e){if(!e||!e.state)return U;var t=e.state;return t.window&&(t.window=null),e.state=null,N},r.inflateGetHeader=function(e,t){var r;return e&&e.state?0==(2&(r=e.state).wrap)?U:((r.head=t).done=!1,N):U},r.inflateSetDictionary=function(e,t){var r,n=t.length;return e&&e.state?0!==(r=e.state).wrap&&11!==r.mode?U:11===r.mode&&O(1,t,n,0)!==r.check?-3:Z(e,t,n,n)?(r.mode=31,-4):(r.havedict=1,N):U},r.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./inffast\":48,\"./inftrees\":50}],50:[function(e,t,r){\"use strict\";var D=e(\"../utils/common\"),F=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],N=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],U=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],P=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];t.exports=function(e,t,r,n,i,s,a,o){var h,u,l,f,c,d,p,m,_,g=o.bits,b=0,v=0,y=0,w=0,k=0,x=0,S=0,z=0,C=0,E=0,A=null,I=0,O=new D.Buf16(16),B=new D.Buf16(16),R=null,T=0;for(b=0;b<=15;b++)O[b]=0;for(v=0;v<n;v++)O[t[r+v]]++;for(k=g,w=15;1<=w&&0===O[w];w--);if(w<k&&(k=w),0===w)return i[s++]=20971520,i[s++]=20971520,o.bits=1,0;for(y=1;y<w&&0===O[y];y++);for(k<y&&(k=y),b=z=1;b<=15;b++)if(z<<=1,(z-=O[b])<0)return-1;if(0<z&&(0===e||1!==w))return-1;for(B[1]=0,b=1;b<15;b++)B[b+1]=B[b]+O[b];for(v=0;v<n;v++)0!==t[r+v]&&(a[B[t[r+v]]++]=v);if(d=0===e?(A=R=a,19):1===e?(A=F,I-=257,R=N,T-=257,256):(A=U,R=P,-1),b=y,c=s,S=v=E=0,l=-1,f=(C=1<<(x=k))-1,1===e&&852<C||2===e&&592<C)return 1;for(;;){for(p=b-S,_=a[v]<d?(m=0,a[v]):a[v]>d?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<<b-S,y=u=1<<x;i[c+(E>>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<<b-1;E&h;)h>>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k<b&&(E&f)!==l){for(0===S&&(S=k),c+=y,z=1<<(x=b-S);x+S<w&&!((z-=O[x+S])<=0);)x++,z<<=1;if(C+=1<<x,1===e&&852<C||2===e&&592<C)return 1;i[l=E&f]=k<<24|x<<16|c-s|0}}return 0!==E&&(i[c+E]=b-S<<24|64<<16|0),o.bits=k,0}},{\"../utils/common\":41}],51:[function(e,t,r){\"use strict\";t.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],52:[function(e,t,r){\"use strict\";var i=e(\"../utils/common\"),o=0,h=1;function n(e){for(var t=e.length;0<=--t;)e[t]=0}var s=0,a=29,u=256,l=u+1+a,f=30,c=19,_=2*l+1,g=15,d=16,p=7,m=256,b=16,v=17,y=18,w=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],k=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],x=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],z=new Array(2*(l+2));n(z);var C=new Array(2*f);n(C);var E=new Array(512);n(E);var A=new Array(256);n(A);var I=new Array(a);n(I);var O,B,R,T=new Array(f);function D(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function F(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function N(e){return e<256?E[e]:E[256+(e>>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<<e.bi_valid&65535,U(e,e.bi_buf),e.bi_buf=t>>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function L(e,t,r){P(e,r[2*t],r[2*t+1])}function j(e,t){for(var r=0;r|=1&e,e>>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t<l;t++)e.dyn_ltree[2*t]=0;for(t=0;t<f;t++)e.dyn_dtree[2*t]=0;for(t=0;t<c;t++)e.bl_tree[2*t]=0;e.dyn_ltree[2*m]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function M(e){8<e.bi_valid?U(e,e.bi_buf):0<e.bi_valid&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function H(e,t,r,n){var i=2*t,s=2*r;return e[i]<e[s]||e[i]===e[s]&&n[t]<=n[r]}function G(e,t,r){for(var n=e.heap[r],i=r<<1;i<=e.heap_len&&(i<e.heap_len&&H(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!H(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n}function K(e,t,r){var n,i,s,a,o=0;if(0!==e.last_lit)for(;n=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],i=e.pending_buf[e.l_buf+o],o++,0===n?L(e,i,t):(L(e,(s=A[i])+u+1,t),0!==(a=w[s])&&P(e,i-=I[s],a),L(e,s=N(--n),r),0!==(a=k[s])&&P(e,n-=T[s],a)),o<e.last_lit;);L(e,m,t)}function Y(e,t){var r,n,i,s=t.dyn_tree,a=t.stat_desc.static_tree,o=t.stat_desc.has_stree,h=t.stat_desc.elems,u=-1;for(e.heap_len=0,e.heap_max=_,r=0;r<h;r++)0!==s[2*r]?(e.heap[++e.heap_len]=u=r,e.depth[r]=0):s[2*r+1]=0;for(;e.heap_len<2;)s[2*(i=e.heap[++e.heap_len]=u<2?++u:0)]=1,e.depth[i]=0,e.opt_len--,o&&(e.static_len-=a[2*i+1]);for(t.max_code=u,r=e.heap_len>>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u<n||(e.bl_count[s]++,a=0,d<=n&&(a=c[n-d]),o=h[2*n],e.opt_len+=o*(s+a),f&&(e.static_len+=o*(l[2*n+1]+a)));if(0!==m){do{for(s=p-1;0===e.bl_count[s];)s--;e.bl_count[s]--,e.bl_count[s+1]+=2,e.bl_count[p]--,m-=2}while(0<m);for(s=p;0!==s;s--)for(n=e.bl_count[s];0!==n;)u<(i=e.heap[--r])||(h[2*i+1]!==s&&(e.opt_len+=(s-h[2*i+1])*h[2*i],h[2*i+1]=s),n--)}}(e,t),Z(s,u,e.bl_count)}function X(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=a,a=t[2*(n+1)+1],++o<h&&i===a||(o<u?e.bl_tree[2*i]+=o:0!==i?(i!==s&&e.bl_tree[2*i]++,e.bl_tree[2*b]++):o<=10?e.bl_tree[2*v]++:e.bl_tree[2*y]++,s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4))}function V(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),n=0;n<=r;n++)if(i=a,a=t[2*(n+1)+1],!(++o<h&&i===a)){if(o<u)for(;L(e,i,e.bl_tree),0!=--o;);else 0!==i?(i!==s&&(L(e,i,e.bl_tree),o--),L(e,b,e.bl_tree),P(e,o-3,2)):o<=10?(L(e,v,e.bl_tree),P(e,o-3,3)):(L(e,y,e.bl_tree),P(e,o-11,7));s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4)}}n(T);var q=!1;function J(e,t,r,n){P(e,(s<<1)+(n?1:0),3),function(e,t,r,n){M(e),n&&(U(e,r),U(e,~r)),i.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}(e,t,r,!0)}r._tr_init=function(e){q||(function(){var e,t,r,n,i,s=new Array(g+1);for(n=r=0;n<a-1;n++)for(I[n]=r,e=0;e<1<<w[n];e++)A[r++]=n;for(A[r-1]=n,n=i=0;n<16;n++)for(T[n]=i,e=0;e<1<<k[n];e++)E[i++]=n;for(i>>=7;n<f;n++)for(T[n]=i<<7,e=0;e<1<<k[n]-7;e++)E[256+i++]=n;for(t=0;t<=g;t++)s[t]=0;for(e=0;e<=143;)z[2*e+1]=8,e++,s[8]++;for(;e<=255;)z[2*e+1]=9,e++,s[9]++;for(;e<=279;)z[2*e+1]=7,e++,s[7]++;for(;e<=287;)z[2*e+1]=8,e++,s[8]++;for(Z(z,l+1,s),e=0;e<f;e++)C[2*e+1]=5,C[2*e]=j(e,5);O=new D(z,w,u+1,l,g),B=new D(C,k,0,f,g),R=new D(new Array(0),x,0,c,p)}(),q=!0),e.l_desc=new F(e.dyn_ltree,O),e.d_desc=new F(e.dyn_dtree,B),e.bl_desc=new F(e.bl_tree,R),e.bi_buf=0,e.bi_valid=0,W(e)},r._tr_stored_block=J,r._tr_flush_block=function(e,t,r,n){var i,s,a=0;0<e.level?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t<u;t++)if(0!==e.dyn_ltree[2*t])return h;return o}(e)),Y(e,e.l_desc),Y(e,e.d_desc),a=function(e){var t;for(X(e,e.dyn_ltree,e.l_desc.max_code),X(e,e.dyn_dtree,e.d_desc.max_code),Y(e,e.bl_desc),t=c-1;3<=t&&0===e.bl_tree[2*S[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i<n;i++)P(e,e.bl_tree[2*S[i]+1],3);V(e,e.dyn_ltree,t-1),V(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),K(e,e.dyn_ltree,e.dyn_dtree)),W(e),n&&M(e)},r._tr_tally=function(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r<t.length;r++)t[r]=arguments[r+1];var n={callback:e,args:t};return h[o]=n,i(o),o++},e.clearImmediate=f}function f(e){delete h[e]}function c(e){if(u)setTimeout(c,0,e);else{var t=h[e];if(t){u=!0;try{!function(e){var t=e.callback,r=e.args;switch(r.length){case 0:t();break;case 1:t(r[0]);break;case 2:t(r[0],r[1]);break;case 3:t(r[0],r[1],r[2]);break;default:t.apply(n,r)}}(t)}finally{f(e),u=!1}}}}function d(e){e.source===r&&\"string\"==typeof e.data&&0===e.data.indexOf(a)&&c(+e.data.slice(a.length))}}(\"undefined\"==typeof self?void 0===e?this:e:self)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}]},{},[10])(10)});", "\nexport function lpad(s:string, n:number):string {\n s += ''; // convert to string\n while (s.length<n) s=\" \"+s;\n return s;\n}\n\nexport function rpad(s:string, n:number):string {\n s += ''; // convert to string\n while (s.length<n) s+=\" \";\n return s;\n}\n\nexport function byte2signed(b:number):number {\n b &= 0xff;\n return (b < 0x80) ? b : -(256-b);\n}\n\nexport function getFilenameForPath(s:string):string {\n var toks = s.split('/');\n return toks[toks.length-1];\n}\n\nexport function getFolderForPath(s:string):string {\n return s.substring(0, s.lastIndexOf('/'));\n}\n\nexport function getFilenamePrefix(s:string):string {\n var pos = s.lastIndexOf('.');\n return (pos > 0) ? s.substr(0, pos) : s;\n}\n\nexport function hex(v:number, nd?:number) {\n if (!nd) nd = 2;\n if (nd == 8) {\n return hex((v>>16)&0xffff,4) + hex(v&0xffff,4);\n } else {\n return toradix(v,nd,16);\n }\n}\n\nexport function tobin(v:number, nd?:number) {\n if (!nd) nd = 8;\n return toradix(v,nd,2);\n}\n\nexport function toradix(v:number, nd:number, radix:number) {\n try {\n var s = v.toString(radix).toUpperCase();\n while (s.length < nd)\n s = \"0\" + s;\n return s;\n } catch (e) {\n return v+\"\";\n }\n}\n\nexport function arrayCompare(a:ArrayLike<any>, b:ArrayLike<any>):boolean {\n if (a == null && b == null) return true;\n if (a == null) return false;\n if (b == null) return false;\n if (a.length != b.length) return false;\n for (var i=0; i<a.length; i++)\n if (a[i] != b[i])\n return false;\n return true;\n}\n\nexport function invertMap(m:{}):{} {\n var r = {};\n if (m) {\n for (var k in m) r[m[k]] = k;\n }\n return r;\n}\n\nexport function highlightDifferences(s1:string, s2:string):string {\n var split1 = s1.split(/(\\S+\\s+)/).filter(function(n) {return n});\n var split2 = s2.split(/(\\S+\\s+)/).filter(function(n) {return n});\n var i = 0;\n var j = 0;\n var result = \"\";\n while (i < split1.length && j < split2.length) {\n var w1 = split1[i];\n var w2 = split2[j];\n if (w2 && w2.indexOf(\"\\n\") >= 0) {\n while (i < s1.length && split1[i].indexOf(\"\\n\") < 0)\n i++;\n }\n if (w1 != w2) {\n w2 = '<span class=\"hilite\">' + w2 + '</span>';\n }\n result += w2;\n i++;\n j++;\n }\n while (j < split2.length) {\n result += split2[j++];\n }\n return result;\n}\n\nexport function lzgmini() {\n\n // Constants\n var LZG_HEADER_SIZE = 16;\n var LZG_METHOD_COPY = 0;\n var LZG_METHOD_LZG1 = 1;\n\n // LUT for decoding the copy length parameter\n var LZG_LENGTH_DECODE_LUT = [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,\n 20,21,22,23,24,25,26,27,28,29,35,48,72,128];\n\n // Decoded data (produced by the decode() method)\n var outdata = null;\n\n // Calculate the checksum\n var calcChecksum = function(data) {\n var a = 1;\n var b = 0;\n var i = LZG_HEADER_SIZE;\n while (i < data.length)\n {\n a = (a + (data[i] & 0xff)) & 0xffff;\n b = (b + a) & 0xffff;\n i++;\n }\n return (b << 16) | a;\n }\n\n // Decode LZG coded data. The function returns the size of the decoded data.\n // Use any of the get* methods to retrieve the decoded data.\n this.decode = function(data:number[]):number[] {\n // Start by clearing the decompressed array in this object\n outdata = null;\n\n // Check magic ID\n if ((data.length < LZG_HEADER_SIZE) || (data[0] != 76) ||\n (data[1] != 90) || (data[2] != 71))\n {\n return null;\n }\n \n // what's the length?\n var uncomplen = data[6] | (data[5]<<8) | (data[4]<<16) | (data[3]<<24);\n\n // Calculate & check the checksum\n var checksum = ((data[11] & 0xff) << 24) |\n ((data[12] & 0xff) << 16) |\n ((data[13] & 0xff) << 8) |\n (data[14] & 0xff);\n if (calcChecksum(data) != checksum)\n {\n return null;\n }\n\n var dst = new Array();\n // Check which method to use\n var method = data[15] & 0xff;\n if (method == LZG_METHOD_LZG1)\n {\n // Get marker symbols\n var m1 = data[16] & 0xff;\n var m2 = data[17] & 0xff;\n var m3 = data[18] & 0xff;\n var m4 = data[19] & 0xff;\n\n // Main decompression loop\n var symbol, b, b2, b3, len, offset;\n var dstlen = 0;\n var k = LZG_HEADER_SIZE + 4;\n var datalen = data.length;\n while (k <= datalen)\n {\n symbol = data[k++] & 0xff;\n if ((symbol != m1) && (symbol != m2) && (symbol != m3) && (symbol != m4))\n {\n // Literal copy\n dst[dstlen++] = symbol;\n }\n else\n {\n b = data[k++] & 0xff;\n if (b != 0)\n {\n // Decode offset / length parameters\n if (symbol == m1)\n {\n // marker1 - \"Distant copy\"\n len = LZG_LENGTH_DECODE_LUT[b & 0x1f];\n b2 = data[k++] & 0xff;\n b3 = data[k++] & 0xff;\n offset = (((b & 0xe0) << 11) | (b2 << 8) | b3) + 2056;\n }\n else if (symbol == m2)\n {\n // marker2 - \"Medium copy\"\n len = LZG_LENGTH_DECODE_LUT[b & 0x1f];\n b2 = data[k++] & 0xff;\n offset = (((b & 0xe0) << 3) | b2) + 8;\n }\n else if (symbol == m3)\n {\n // marker3 - \"Short copy\"\n len = (b >> 6) + 3;\n offset = (b & 63) + 8;\n }\n else\n {\n // marker4 - \"Near copy (incl. RLE)\"\n len = LZG_LENGTH_DECODE_LUT[b & 0x1f];\n offset = (b >> 5) + 1;\n }\n\n // Copy the corresponding data from the history window\n for (i = 0; i < len; i++)\n {\n dst[dstlen] = dst[dstlen-offset];\n dstlen++;\n }\n }\n else\n {\n // Literal copy (single occurance of a marker symbol)\n dst[dstlen++] = symbol;\n }\n }\n }\n\n }\n else if (method == LZG_METHOD_COPY)\n {\n // Plain copy\n var dstlen = 0;\n var datalen = data.length;\n for (var i = LZG_HEADER_SIZE; i < datalen; i++)\n {\n dst[dstlen++] = data[i] & 0xff;\n }\n }\n else\n {\n // Unknown method\n return null;\n }\n // Store the decompressed data in the lzgmini object for later retrieval\n if (dst.length < uncomplen) return null; // data too short\n outdata = dst.slice(0, uncomplen);\n return outdata;\n }\n\n // Get the decoded byte array\n this.getByteArray = function():number[]\n {\n return outdata;\n }\n\n // Get the decoded string from a Latin 1 (or ASCII) encoded array\n this.getStringLatin1 = function():string {\n return byteArrayToString(outdata);\n }\n\n // Get the decoded string from an UTF-8 encoded array\n this.getStringUTF8 = function():string {\n return byteArrayToUTF8(outdata);\n }\n}\n\nexport function stringToByteArray(s:string) : Uint8Array {\n var a = new Uint8Array(s.length);\n for (var i=0; i<s.length; i++)\n a[i] = s.charCodeAt(i);\n return a;\n}\n\nexport function byteArrayToString(data : number[] | Uint8Array) : string {\n var str = \"\";\n if (data != null) {\n var charLUT = new Array();\n for (var i = 0; i < 256; ++i)\n charLUT[i] = String.fromCharCode(i);\n var len = data.length;\n for (var i = 0; i < len; i++)\n str += charLUT[data[i]];\n }\n return str;\n}\n\nexport function byteArrayToUTF8(data : number[] | Uint8Array) : string {\n var str = \"\";\n var charLUT = new Array();\n for (var i = 0; i < 128; ++i)\n charLUT[i] = String.fromCharCode(i);\n var c;\n var len = data.length;\n for (var i = 0; i < len;) {\n c = data[i++];\n if (c < 128) {\n str += charLUT[c];\n } else {\n if ((c >= 192) && (c < 224)) {\n c = ((c & 31) << 6) | (data[i++] & 63);\n } else {\n c = ((c & 15) << 12) | ((data[i] & 63) << 6) | (data[i+1] & 63);\n i += 2;\n if (c == 0xfeff) continue; // ignore BOM\n }\n str += String.fromCharCode(c);\n }\n }\n return str;\n}\n\nexport function removeBOM(s:string) {\n if (s.charCodeAt(0) === 0xFEFF) {\n s = s.substr(1);\n }\n return s;\n}\n\nexport function isProbablyBinary(path:string, data?:number[] | Uint8Array) : boolean {\n var score = 0;\n // check extensions\n if (path) {\n path = path.toUpperCase();\n const BINEXTS = ['.CHR','.BIN','.DAT','.PAL','.NAM','.RLE','.LZ4','.NSF'];\n for (var ext of BINEXTS) {\n if (path.endsWith(ext)) score++;\n }\n }\n // decode as UTF-8\n for (var i = 0; i < (data?data.length:0);) {\n let c = data[i++];\n if ((c & 0x80) == 0) {\n // more likely binary if we see a NUL or obscure control character\n if (c < 9 || (c >= 14 && c < 26) || c == 0x7f) {\n score++;\n break;\n }\n } else {\n // look for invalid unicode sequences\n var nextra = 0;\n if ((c & 0xe0) == 0xc0) nextra = 1;\n else if ((c & 0xf0) == 0xe0) nextra = 2;\n else if ((c & 0xf8) == 0xf0) nextra = 3;\n else if (c < 0xa0) score++;\n else if (c == 0xff) score++;\n while (nextra--) {\n if (i >= data.length || (data[i++] & 0xc0) != 0x80) {\n score++;\n break;\n }\n }\n }\n }\n return score > 0;\n}\n\n// need to load liblzg.js first\nexport function compressLZG(em_module, inBuffer:number[], levelArg?:boolean) : Uint8Array {\n var level = levelArg || 9;\n var inLen = inBuffer.length;\n var inPtr = em_module._malloc(inLen + 1);\n for (var i = 0; i < inLen; i++) {\n em_module.setValue(inPtr + i, inBuffer[i], 'i8');\n }\n var maxEncSize = em_module._LZG_MaxEncodedSize(inLen);\n var outPtr = em_module._malloc(maxEncSize + 1);\n var compLen = em_module.ccall('compress_lzg', 'number', ['number', 'number', 'number', 'number', 'number'], [level, inPtr, inLen, maxEncSize, outPtr]);\n em_module._free(inPtr);\n var outBuffer = new Uint8Array(compLen);\n for (var i = 0; i < compLen; i++) {\n outBuffer[i] = em_module.getValue(outPtr + i, 'i8');\n }\n em_module._free(outPtr);\n return outBuffer;\n}\n\n// only does primitives, 1D arrays and no recursion\nexport function safe_extend(deep, dest, src) {\n // TODO: deep ignored\n for (var key in src) {\n var val = src[key];\n var type = typeof(val);\n if (val === null || type == 'undefined') {\n dest[key] = val;\n } else if (type == 'function') {\n // ignore function\n } else if (type == 'object') {\n if (val['slice']) { // array?\n dest[key] = val.slice();\n } else {\n // ignore object\n }\n } else {\n dest[key] = val;\n }\n }\n return dest;\n}\n\nexport function printFlags(val:number, names:string[], r2l:boolean) {\n var s = '';\n for (var i=0; i<names.length; i++) {\n if (names[i]) {\n var bit = 1 << (r2l ? (names.length-1-i) : i);\n if (i > 0) s += \" \";\n s += (val & bit) ? names[i] : \"-\";\n }\n }\n return s;\n}\n\nexport function rgb2bgr(x) {\n return ((x&0xff)<<16) | ((x>>16)&0xff) | (x&0x00ff00);\n}\n\nexport function RGBA(r:number,g:number,b:number) {\n return (r&0xff) | ((g&0xff)<<8) | ((b&0xff)<<16) | 0xff000000;\n}\n\nexport function clamp(minv:number, maxv:number, v:number) {\n return (v < minv) ? minv : (v > maxv) ? maxv : v;\n}\n\nexport function safeident(s : string) : string {\n // if starts with non-alpha character, prefix with '_'\n if (s.length == 0) return '';\n if (!s.match(/^[a-zA-Z_]/)) s = '_' + s;\n return s.replace(/\\W+/g, \"_\");\n}\n\nexport function rle_unpack(src : Uint8Array) : Uint8Array {\n var i = 0;\n var tag = src[i++];\n var dest = [];\n var data = tag;\n while (i < src.length) {\n var ch = src[i++];\n if (ch == tag) {\n var count = src[i++];\n for (var j=0; j<count; j++)\n dest.push(data);\n if (count == 0)\n break;\n } else {\n data = ch;\n dest.push(data);\n }\n }\n return new Uint8Array(dest);\n}\n\n// firefox doesn't do GET with binary files\n// TODO: replace with fetch()?\nexport function getWithBinary(url:string, success:(text:string|Uint8Array)=>void, datatype:'text'|'arraybuffer') {\n var oReq = new XMLHttpRequest();\n oReq.open(\"GET\", url, true);\n oReq.responseType = datatype;\n oReq.onload = function (oEvent) {\n if (oReq.status == 200) {\n var data = oReq.response;\n if (data instanceof ArrayBuffer) {\n data = new Uint8Array(data);\n }\n success(data);\n } else if (oReq.status == 404) {\n success(null);\n } else {\n throw Error(\"Error \" + oReq.status + \" loading \" + url);\n }\n }\n oReq.onerror = function (oEvent) {\n success(null);\n }\n oReq.ontimeout = function (oEvent) {\n throw Error(\"Timeout loading \" + url);\n }\n oReq.send(null);\n}\n\n// get platform ID without . emulator\nexport function getBasePlatform(platform : string) : string {\n return platform.split('.')[0];\n}\n\n// get platform ID without - specialization\nfunction getRootPlatform(platform : string) : string {\n return platform.split('-')[0];\n}\n\n// get platform ID without emulator or specialization\nexport function getRootBasePlatform(platform : string) : string {\n return getRootPlatform(getBasePlatform(platform));\n}\n\nexport function isArray(obj: any) : obj is ArrayLike<any> {\n return obj != null && (Array.isArray(obj) || isTypedArray(obj));\n}\n\nexport function isTypedArray(obj: any) : obj is ArrayLike<number> {\n return obj != null && obj['BYTES_PER_ELEMENT'];\n}\n\nexport function convertDataToUint8Array(data: string|Uint8Array) : Uint8Array {\n return (typeof data === 'string') ? stringToByteArray(data) : data;\n}\n\nexport function convertDataToString(data: string|Uint8Array) : string {\n return (data instanceof Uint8Array) ? byteArrayToUTF8(data) : data;\n}\n\nexport function byteToASCII(b: number) : string {\n if (b < 32)\n return String.fromCharCode(b + 0x2400);\n else\n return String.fromCharCode(b);\n}\n\nexport function loadScript(scriptfn:string) : Promise<Event> {\n return new Promise( (resolve, reject) => {\n var script = document.createElement('script');\n script.onload = resolve;\n script.onerror = reject;\n script.src = scriptfn;\n document.getElementsByTagName('head')[0].appendChild(script);\n });\n}\n\nexport function decodeQueryString(qs : string) : {} {\n if (qs.startsWith('?')) qs = qs.substr(1);\n var a = qs.split('&');\n if (!a || a.length == 0)\n return {};\n var b = {};\n for (var i = 0; i < a.length; ++i) {\n var p = a[i].split('=', 2);\n if (p.length == 1)\n b[p[0]] = \"\";\n else\n b[p[0]] = decodeURIComponent(p[1].replace(/\\+/g, \" \"));\n }\n return b;\n}\n\nexport function parseBool(s : string) : boolean {\n if (!s) return false;\n if (s == 'false' || s == '0') return false;\n if (s == 'true' || s == '1') return true;\n return s ? true : false;\n}\n\n///\n\nexport class XMLParseError extends Error {\n}\n\nexport interface XMLNode {\n type: string;\n text: string | null;\n children: XMLNode[];\n attrs: { [id: string]: string };\n obj: any;\n}\n\nexport type XMLVisitFunction = (node: XMLNode) => any;\n\nfunction escapeXML(s: string): string {\n if (s.indexOf('&') >= 0) {\n return s.replace(/&apos;/g, \"'\")\n .replace(/&quot;/g, '\"')\n .replace(/&gt;/g, '>')\n .replace(/&lt;/g, '<')\n .replace(/&amp;/g, '&');\n } else {\n return s;\n }\n}\n\nexport function parseXMLPoorly(s: string, openfn?: XMLVisitFunction, closefn?: XMLVisitFunction): XMLNode {\n const tag_re = /[<]([/]?)([?a-z_-]+)([^>]*)[>]+|(\\s*[^<]+)/gi;\n const attr_re = /\\s*(\\w+)=\"(.*?)\"\\s*/gi;\n var fm: RegExpMatchArray;\n var stack: XMLNode[] = [];\n var top: XMLNode;\n\n function closetop() {\n top = stack.pop();\n if (top == null || top.type != ident) throw new XMLParseError(\"mismatch close tag: \" + ident);\n if (closefn) {\n top.obj = closefn(top);\n }\n if (stack.length == 0) throw new XMLParseError(\"close tag without open: \" + ident);\n stack[stack.length - 1].children.push(top);\n }\n function parseattrs(as: string): { [id: string]: string } {\n var am;\n var attrs = {};\n if (as != null) {\n while (am = attr_re.exec(as)) {\n attrs[am[1]] = escapeXML(am[2]);\n }\n }\n return attrs;\n }\n while (fm = tag_re.exec(s)) {\n var [_m0, close, ident, attrs, content] = fm;\n //console.log(stack.length, close, ident, attrs, content);\n if (close) {\n closetop();\n } else if (ident) {\n var node = { type: ident, text: null, children: [], attrs: parseattrs(attrs), obj: null };\n stack.push(node);\n if (attrs) {\n parseattrs(attrs);\n }\n if (openfn) {\n node.obj = openfn(node);\n }\n if (attrs && attrs.endsWith('/')) closetop();\n } else if (content != null) {\n if (stack.length == 0) throw new XMLParseError(\"content without element\");\n var txt = escapeXML(content as string).trim();\n if (txt.length) stack[stack.length - 1].text = txt;\n }\n }\n if (stack.length != 1) throw new XMLParseError(\"tag not closed\");\n if (stack[0].type != '?xml') throw new XMLParseError(\"?xml needs to be first element\");\n return top;\n}\n\nexport function escapeHTML(s: string): string {\n return s.replace(/[&]/g, '&amp;').replace(/[<]/g, '&lt;').replace(/[>]/g, '&gt;');\n}\n\n// lame factorization for displaying bitmaps\n// returns a > b such that a * b == x (or higher), a >= mina, b >= minb\nexport function findIntegerFactors(x: number, mina: number, minb: number, aspect: number) : {a: number, b: number} {\n let a = x;\n let b = 1;\n if (minb > 1 && minb < a) {\n a = Math.ceil(x / minb);\n b = minb;\n }\n while (a > b) {\n let a2 = a;\n let b2 = b;\n if ((a & 1) == 0) {\n b2 = b * 2;\n a2 = a / 2;\n }\n if ((a % 3) == 0) {\n b2 = b * 3;\n a2 = a / 3;\n }\n if ((a % 5) == 0) {\n b2 = b * 5;\n a2 = a / 5;\n }\n if (a2 < mina) break;\n if (a2 < b2 * aspect) break;\n a = a2;\n b = b2;\n }\n return {a, b};\n}\n\nexport class FileDataCache {\n maxSize : number = 8000000;\n size : number;\n cache : Map<string, string|Uint8Array>;\n constructor() {\n this.reset();\n }\n get(key : string) : string|Uint8Array {\n return this.cache.get(key);\n }\n put(key : string, value : string|Uint8Array) {\n this.cache.set(key, value);\n this.size += value.length;\n if (this.size > this.maxSize) {\n console.log('cache reset', this);\n this.reset();\n }\n }\n reset() {\n this.cache = new Map();\n this.size = 0;\n }\n}\n\nexport function coerceToArray<T>(arrobj: any) : T[] {\n if (Array.isArray(arrobj)) return arrobj;\n else if (arrobj != null && typeof arrobj[Symbol.iterator] === 'function') return Array.from(arrobj);\n else if (typeof arrobj === 'object') return Array.from(Object.values(arrobj))\n else throw new Error(`Expected array or object, got \"${arrobj}\"`);\n}\n\nexport function replaceAll(s:string, search:string, replace:string) : string {\n if (s == '') return '';\n if (search == '') return s;\n return s.split(search).join(replace);\n}\n\nexport function getCookie(name: string) : string {\n var nameEQ = name + \"=\";\n var ca = document.cookie.split(';');\n for(var i=0;i < ca.length;i++) {\n var c = ca[i];\n while (c.charAt(0)==' ') c = c.substring(1,c.length);\n if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);\n }\n return null;\n}\n\n", "import { WorkerError, CodeListingMap, SourceLocation, SourceLine, SourceLocated, SourceLineLocated } from \"../workertypes\";\n\nexport interface BASICOptions {\n dialectName : string; // use this to select the dialect \n // SYNTAX AND PARSING\n asciiOnly : boolean; // reject non-ASCII chars?\n uppercaseOnly : boolean; // convert everything to uppercase?\n optionalLabels : boolean;\t\t\t// can omit line numbers and use labels?\n optionalWhitespace : boolean; // can \"crunch\" keywords? also, eat extra \":\" delims\n multipleStmtsPerLine : boolean; // multiple statements separated by \":\"\n varNaming : 'A'|'A1'|'A1$'|'AA'|'*'; // only allow A0-9 for numerics, single letter for arrays/strings\n squareBrackets : boolean; // \"[\" and \"]\" interchangable with \"(\" and \")\"?\n tickComments : boolean; // support 'comments?\n hexOctalConsts : boolean; // support &H and &O integer constants?\n optionalLet : boolean; // LET is optional\n chainAssignments : boolean; // support A = B = value (HP2000)\n validKeywords : string[]; // valid keywords (or null for accept all)\n validFunctions : string[]; // valid functions (or null for accept all)\n validOperators : string[]; // valid operators (or null for accept all)\n // VALUES AND OPERATORS\n defaultValues : boolean; // initialize unset variables to default value? (0 or \"\")\n stringConcat : boolean; // can concat strings with \"+\" operator?\n checkOverflow : boolean; // check for overflow of numerics?\n bitwiseLogic : boolean; // -1 = TRUE, 0 = FALSE, AND/OR/NOT done with bitwise ops\n maxStringLength : number; // maximum string length in chars\n maxDefArgs : number; // maximum # of arguments for user-defined functions\n // ARRAYS\n staticArrays : boolean; // can only DIM with constant value? (and never redim)\n sharedArrayNamespace : boolean; // arrays and variables have same namespace? (TODO)\n defaultArrayBase : number; // arrays start at this number (0 or 1)\n defaultArraySize : number; // arrays are allocated w/ this size (starting @ 0)\n maxDimensions : number; // max number of dimensions for arrays\n arraysContainChars : boolean; // HP BASIC array-slicing syntax\n // PRINTING\n printZoneLength : number; // print zone length\n numericPadding : boolean; // \" \" or \"-\" before and \" \" after numbers?\n // CONTROL FLOW\n compiledBlocks : boolean; // assume blocks are statically compiled, not interpreted\n testInitialFor : boolean; // can we skip a NEXT statement? (can't interleave tho)\n optionalNextVar : boolean; // can do NEXT without variable\n multipleNextVars : boolean; // NEXT J,I\n checkOnGotoIndex : boolean; // fatal error when ON..GOTO index out of bounds\n computedGoto : boolean; // non-const expr GOTO label (and GOTO..OF expression)\n restoreWithLabel : boolean; // RESTORE <label>\n endStmtRequired : boolean; // need END at end?\n // MISC\n multilineIfThen? : boolean; // multi-line IF .. ELSE .. END IF?\n commandsPerSec? : number; // how many commands per second?\n maxLinesPerFile? : number; // limit on # of lines\n maxArrayElements? : number; // max array elements (all dimensions)\n}\n\nexport class CompileError extends Error {\n $loc : SourceLocation;\n constructor(msg: string, loc: SourceLocation) {\n super(msg);\n Object.setPrototypeOf(this, CompileError.prototype);\n this.$loc = loc;\n }\n}\n\n// Lexer regular expression -- each (capture group) handles a different token type\n// FLOAT INT HEXOCTAL REMARK IDENT STRING RELOP EXP OPERATORS OTHER WS\nconst re_toks = /([0-9.]+[E][+-]?\\d+|\\d+[.][E0-9]*|[.][E0-9]+)|[0]*(\\d+)|&([OH][0-9A-F]+)|(['].*)|([A-Z_]\\w*[$]?)|(\".*?\")|([<>]?[=<>#])|(\\*\\*)|([-+*/^,;:()\\[\\]\\?\\\\])|(\\S+)|(\\s+)/gi;\n\nexport enum TokenType {\n EOL = 0,\n Float,\n Int,\n HexOctalInt,\n Remark,\n Ident,\n String,\n Relational,\n DoubleStar,\n Operator,\n CatchAll,\n Whitespace,\n _LAST,\n}\n\nexport type ExprTypes = BinOp | UnOp | IndOp | Literal;\nexport type Expr = ExprTypes; // & SourceLocated;\nexport type Opcode = string;\nexport type Value = number | string;\nexport type ValueType = 'number' | 'string' | 'label';\n\nexport interface ExprBase extends SourceLocated {\n valtype: ValueType;\n}\n\nexport interface Literal extends ExprBase {\n value: Value;\n}\n\nexport interface BinOp extends ExprBase {\n op: Opcode;\n left: Expr;\n right: Expr;\n}\n\nexport interface UnOp extends ExprBase {\n op: 'neg' | 'lnot' | 'bnot';\n expr: Expr;\n}\n\nexport interface IndOp extends ExprBase {\n name: string;\n args: Expr[];\n}\n\nexport interface Statement extends SourceLineLocated {\n command: string;\n}\n\nexport interface ScopeStartStatement extends Statement {\n endpc?: number;\n}\n\nexport interface ScopeEndStatement extends Statement {\n startpc?: number;\n}\n\nexport interface PRINT_Statement extends Statement {\n command: \"PRINT\";\n args: Expr[];\n}\n\nexport interface LET_Statement extends Statement {\n command: \"LET\";\n lexprs: IndOp[];\n right: Expr;\n}\n\nexport interface DIM_Statement extends Statement {\n command: \"DIM\";\n args: IndOp[];\n}\n\nexport interface GOTO_Statement extends Statement {\n command: \"GOTO\";\n label: Expr;\n}\n\nexport interface GOSUB_Statement extends Statement {\n command: \"GOSUB\";\n label: Expr;\n}\n\nexport interface RETURN_Statement extends Statement {\n command: \"RETURN\";\n}\n\nexport interface ONGO_Statement extends Statement {\n command: \"ONGOTO\" | \"ONGOSUB\";\n expr: Expr;\n labels: Expr[];\n}\n\nexport interface IF_Statement extends ScopeStartStatement {\n command: \"IF\";\n cond: Expr;\n}\n\nexport interface ELSE_Statement extends ScopeStartStatement {\n command: \"ELSE\";\n}\n\nexport interface FOR_Statement extends ScopeStartStatement {\n command: \"FOR\";\n lexpr: IndOp;\n initial: Expr;\n target: Expr;\n step?: Expr;\n}\n\nexport interface NEXT_Statement extends ScopeEndStatement {\n command: \"NEXT\";\n lexpr?: IndOp;\n}\n\nexport interface WHILE_Statement extends ScopeStartStatement {\n command: \"WHILE\";\n cond: Expr;\n}\n\nexport interface WEND_Statement extends ScopeEndStatement {\n command: \"WEND\";\n}\n\nexport interface END_Statement extends ScopeEndStatement {\n command: \"END\";\n}\n\nexport interface INPUT_Statement extends Statement {\n command: \"INPUT\";\n prompt: Expr;\n args: IndOp[];\n timeout?: Expr;\n elapsed?: IndOp;\n}\n\nexport interface ENTER_Statement extends INPUT_Statement {\n timeout: Expr;\n elapsed: IndOp;\n}\n\nexport interface DATA_Statement extends Statement {\n command: \"DATA\";\n datums: Literal[];\n}\n\nexport interface READ_Statement extends Statement {\n command: \"READ\";\n args: IndOp[];\n}\n\nexport interface RESTORE_Statement extends Statement {\n command: \"RESTORE\";\n label: Expr;\n}\n\nexport interface DEF_Statement extends Statement {\n command: \"DEF\";\n lexpr: IndOp;\n def: Expr;\n}\n\nexport interface SUB_Statement extends ScopeStartStatement {\n command: \"SUB\";\n lexpr: IndOp;\n}\n\nexport interface CALL_Statement {\n command: \"CALL\";\n call: IndOp;\n}\n\nexport interface OPTION_Statement extends Statement {\n command: \"OPTION\";\n optname: string;\n optargs: string[];\n}\n\nexport interface GET_Statement extends Statement { // applesoft only?\n command: \"GET\";\n lexpr: IndOp;\n}\n\nexport interface CHANGE_Statement extends Statement {\n command: \"CHANGE\";\n src: Expr;\n dest: IndOp;\n}\n\nexport interface CONVERT_Statement extends Statement {\n command: \"CONVERT\";\n src: Expr;\n dest: IndOp;\n}\n\nexport interface NoArgStatement extends Statement {\n command: string;\n}\n\nexport interface BASICProgram {\n opts: BASICOptions;\n stmts: Statement[];\n labels: { [label: string]: number }; // label -> PC\n}\n\nclass Token implements SourceLocated {\n str: string;\n type: TokenType;\n $loc: SourceLocation;\n}\n\nconst OPERATORS = {\n 'IMP': {f:'bimp',p:4},\n 'EQV': {f:'beqv',p:5},\n 'XOR': {f:'bxor',p:6},\n 'OR': {f:'bor',p:7}, // or \"lor\" for logical\n 'AND': {f:'band',p:8}, // or \"land\" for logical\n '||': {f:'lor',p:17}, // not used\n '&&': {f:'land',p:18}, // not used\n '=': {f:'eq',p:50},\n '==': {f:'eq',p:50},\n '<>': {f:'ne',p:50},\n '><': {f:'ne',p:50},\n '!=': {f:'ne',p:50},\n '#': {f:'ne',p:50},\n '<': {f:'lt',p:50},\n '>': {f:'gt',p:50},\n '<=': {f:'le',p:50},\n '>=': {f:'ge',p:50},\n 'MIN': {f:'min',p:75},\n 'MAX': {f:'max',p:75},\n '+': {f:'add',p:100},\n '-': {f:'sub',p:100},\n '%': {f:'mod',p:140},\n 'MOD': {f:'mod',p:140},\n '\\\\': {f:'idiv',p:150},\n '*': {f:'mul',p:200},\n '/': {f:'div',p:200},\n '^': {f:'pow',p:300},\n '**': {f:'pow',p:300},\n};\n\nfunction getOperator(op: string) {\n return OPERATORS[op];\n}\n\nfunction getPrecedence(tok: Token): number {\n switch (tok.type) {\n case TokenType.Operator:\n case TokenType.DoubleStar:\n case TokenType.Relational:\n case TokenType.Ident:\n let op = getOperator(tok.str);\n if (op) return op.p;\n }\n return -1;\n}\n\n// is token an end of statement marker? (\":\" or end of line)\nfunction isEOS(tok: Token) {\n return tok.type == TokenType.EOL || tok.type == TokenType.Remark\n || tok.str == ':' || tok.str == 'ELSE'; // TODO: only ELSE if ifElse==true\n}\n\nfunction stripQuotes(s: string) {\n // TODO: assert\n return s.substr(1, s.length-2);\n}\n\nfunction isLiteral(arg: Expr): arg is Literal {\n return (arg as any).value != null;\n}\nfunction isLookup(arg: Expr): arg is IndOp {\n return (arg as any).name != null;\n}\nfunction isBinOp(arg: Expr): arg is BinOp {\n return (arg as any).op != null && (arg as any).left != null && (arg as any).right != null;\n}\nfunction isUnOp(arg: Expr): arg is UnOp {\n return (arg as any).op != null && (arg as any).expr != null;\n}\n\nfunction mergeLocs(a: SourceLocation, b: SourceLocation) : SourceLocation {\n return {\n line:Math.min(a.line, b.line),\n start:Math.min(a.start, b.start),\n end:Math.max(a.end, b.end),\n label:a.label || b.label,\n path:a.path || b.path,\n }\n}\n\n///// BASIC PARSER\n\nexport class BASICParser {\n opts : BASICOptions = DIALECTS['DEFAULT'];\n optionCount : number; // how many OPTION stmts so far?\n maxlinelen : number = 255; // maximum line length (some like HP use 72 chars)\n stmts : Statement[];\n errors: WorkerError[];\n listings: CodeListingMap;\n labels: { [label: string]: number }; // label -> PC\n targets: { [targetlabel: string]: SourceLocation }; // targets of GOTOs etc\n vardefs: { [name: string]: IndOp }; // LET or DIM\n varrefs: { [name: string]: SourceLocation }; // variable references\n fnrefs: { [name: string]: string[] }; // DEF FN call graph\n scopestack: number[];\n elseifcount: number;\n\n path : string;\n lineno : number;\n tokens: Token[];\n eol: Token;\n curlabel: string;\n lasttoken: Token;\n\n constructor() {\n this.optionCount = 0;\n this.lineno = 0;\n this.curlabel = null;\n this.stmts = [];\n this.labels = {};\n this.targets = {};\n this.errors = [];\n this.listings = {};\n this.vardefs = {};\n this.varrefs = {};\n this.fnrefs = {};\n this.scopestack = [];\n this.elseifcount = 0;\n }\n addError(msg: string, loc?: SourceLocation) {\n var tok = this.lasttoken || this.peekToken();\n if (!loc) loc = tok.$loc;\n this.errors.push({path:loc.path, line:loc.line, label:this.curlabel, start:loc.start, end:loc.end, msg:msg});\n }\n compileError(msg: string, loc?: SourceLocation, loc2?: SourceLocation) {\n this.addError(msg, loc);\n //if (loc2 != null) this.addError(`...`, loc2);\n throw new CompileError(msg, loc);\n }\n dialectError(what: string, loc?: SourceLocation) {\n this.compileError(`${what} in this dialect of BASIC (${this.opts.dialectName}).`, loc);\n }\n dialectErrorNoSupport(what: string, loc?: SourceLocation) {\n this.compileError(`You can't use ${what} in this dialect of BASIC (${this.opts.dialectName}).`, loc); // TODO\n }\n consumeToken(): Token {\n var tok = this.lasttoken = (this.tokens.shift() || this.eol);\n return tok;\n }\n expectToken(str: string, msg?: string) : Token {\n var tok = this.consumeToken();\n var tokstr = tok.str;\n if (str != tokstr) {\n this.compileError(msg || `There should be a \"${str}\" here.`);\n }\n return tok;\n }\n expectTokens(strlist: string[], msg?: string) : Token {\n var tok = this.consumeToken();\n var tokstr = tok.str;\n if (strlist.indexOf(tokstr) < 0) {\n this.compileError(msg || `There should be a ${strlist.map((s) => `\"${s}\"`).join(' or ')} here.`);\n }\n return tok;\n }\n peekToken(lookahead?: number): Token {\n var tok = this.tokens[lookahead || 0];\n return tok ? tok : this.eol;\n }\n pushbackToken(tok: Token) {\n this.tokens.unshift(tok);\n }\n // this parses either a line number or \"label:\" -- or adds a default label to a line\n parseOptLabel() {\n let tok = this.consumeToken();\n switch (tok.type) {\n case TokenType.Ident:\n if (this.opts.optionalLabels || tok.str == 'OPTION') {\n // is it a \"label :\" and not a keyword like \"PRINT : \"\n if (this.peekToken().str == ':' && !this.supportsCommand(tok.str)) { \n this.consumeToken(); // eat the \":\"\n // fall through to the next case\n } else {\n this.pushbackToken(tok); // nope\n break;\n }\n } else\n this.dialectError(`Each line must begin with a line number`);\n case TokenType.Int:\n this.addLabel(tok.str);\n return;\n // label added, return from function... other cases add default label\n case TokenType.HexOctalInt:\n case TokenType.Float:\n this.compileError(`Line numbers must be positive integers.`);\n break;\n case TokenType.Operator:\n if (this.supportsCommand(tok.str) && this.validKeyword(tok.str)) {\n this.pushbackToken(tok);\n break; // \"?\" is allowed\n }\n default:\n if (this.opts.optionalLabels)\n this.compileError(`A line must start with a line number, command, or label.`);\n else\n this.compileError(`A line must start with a line number.`);\n case TokenType.Remark:\n break;\n }\n // add default label\n this.addLabel('#'+this.lineno);\n }\n getPC() : number {\n return this.stmts.length;\n }\n addStatement(stmt: Statement, cmdtok: Token, endtok?: Token) {\n // set location for statement, adding offset (PC) field\n if (endtok == null) endtok = this.peekToken();\n stmt.$loc = { path: cmdtok.$loc.path, line: cmdtok.$loc.line, start: cmdtok.$loc.start, end: endtok.$loc.start,\n label: this.curlabel,\n offset: this.stmts.length };\n // check IF/THEN WHILE/WEND FOR/NEXT etc\n this.modifyScope(stmt);\n // add to list\n this.stmts.push(stmt);\n }\n addLabel(str: string, offset?: number) {\n if (this.labels[str] != null) this.compileError(`There's a duplicated label named \"${str}\".`);\n this.labels[str] = this.getPC() + (offset || 0);\n this.curlabel = str;\n this.tokens.forEach((tok) => tok.$loc.label = str);\n }\n parseFile(file: string, path: string) : BASICProgram {\n this.path = path;\n var txtlines = file.split(/\\n|\\r\\n?/);\n txtlines.forEach((line) => this.parseLine(line));\n var program = { opts: this.opts, stmts: this.stmts, labels: this.labels };\n this.checkAll(program);\n this.listings[path] = this.generateListing(file, program);\n return program;\n }\n parseLine(line: string) : void {\n try {\n this.tokenize(line);\n this.parse();\n } catch (e) {\n if (!(e instanceof CompileError)) throw e; // ignore compile errors since errors[] list captures them\n }\n }\n _tokenize(line: string) : void {\n // split identifier regex (if token-crunching enabled)\n let splitre = this.opts.optionalWhitespace && new RegExp('('+this.opts.validKeywords.map(s => `${s}`).join('|')+')');\n // iterate over each token via re_toks regex\n var lastTokType = TokenType.CatchAll;\n var m : RegExpMatchArray;\n while (m = re_toks.exec(line)) {\n for (var i = 1; i <= lastTokType; i++) {\n let s : string = m[i];\n if (s != null) {\n let loc = { path: this.path, line: this.lineno, start: m.index, end: m.index+s.length };\n // maybe we don't support unicode in 1975?\n if (this.opts.asciiOnly && !/^[\\x00-\\x7F]*$/.test(s))\n this.dialectErrorNoSupport(`non-ASCII characters`);\n // uppercase all identifiers, and maybe more\n if (i == TokenType.Ident || i == TokenType.HexOctalInt || this.opts.uppercaseOnly) {\n s = s.toUpperCase();\n // DATA statement captures whitespace too\n if (s == 'DATA') lastTokType = TokenType.Whitespace;\n // certain keywords shouldn't split for rest of line\n if (s == 'DATA') splitre = null;\n if (s == 'OPTION') splitre = null;\n // REM means ignore rest of statement\n if (lastTokType == TokenType.CatchAll && s.startsWith('REM')) {\n s = 'REM';\n lastTokType = TokenType.EOL;\n }\n }\n // convert brackets\n if (s == '[' || s == ']') {\n if (!this.opts.squareBrackets) this.dialectErrorNoSupport(`square brackets`);\n if (s == '[') s = '(';\n if (s == ']') s = ')';\n }\n // un-crunch tokens?\n if (splitre && i == TokenType.Ident) {\n var splittoks = s.split(splitre).filter((s) => s != ''); // only non-empties\n if (splittoks.length > 1) {\n splittoks.forEach((ss) => {\n // check to see if leftover might be integer, or identifier\n if (/^[0-9]+$/.test(ss)) i = TokenType.Int;\n else if (/^[A-Z_]\\w*[$]?$/.test(ss)) i = TokenType.Ident;\n else this.compileError(`Try adding whitespace before \"${ss}\".`);\n this.tokens.push({str: ss, type: i, $loc:loc});\n });\n s = null;\n }\n }\n // add token to list\n if (s) this.tokens.push({str: s, type: i, $loc:loc});\n break;\n }\n }\n }\n }\n tokenize(line: string) : void {\n this.lineno++;\n this.tokens = []; // can't have errors until this is set\n this.eol = { type: TokenType.EOL, str: \"\", $loc: { path: this.path, line: this.lineno, start: line.length } };\n if (line.length > this.maxlinelen) this.compileError(`A line should be no more than ${this.maxlinelen} characters long.`);\n this._tokenize(line);\n }\n parse() : void {\n // not empty line?\n if (this.tokens.length) {\n this.parseOptLabel();\n if (this.tokens.length) {\n this.parseCompoundStatement();\n }\n var next = this.peekToken();\n if (!isEOS(next)) this.compileError(`Expected end of line or ':'`, next.$loc);\n this.curlabel = null;\n }\n }\n parseCompoundStatement() : void {\n if (this.opts.multipleStmtsPerLine) {\n this.parseList(this.parseStatement, ':');\n } else {\n this.parseList(this.parseStatement, '\\0');\n if (this.peekToken().str == ':') this.dialectErrorNoSupport(`multiple statements on a line`);\n }\n }\n validKeyword(keyword: string) : string {\n return (this.opts.validKeywords && this.opts.validKeywords.indexOf(keyword) < 0) ? null : keyword;\n }\n validFunction(funcname: string) : string {\n return (this.opts.validFunctions && this.opts.validFunctions.indexOf(funcname) < 0) ? null : funcname;\n }\n supportsCommand(cmd: string) : () => Statement {\n if (cmd == '?') return this.stmt__PRINT;\n else return this['stmt__' + cmd];\n }\n parseStatement(): Statement | null {\n // eat extra \":\" (should have separate property for this)\n if (this.opts.optionalWhitespace && this.peekToken().str == ':') return null;\n // get the command word\n var cmdtok = this.consumeToken();\n var cmd = cmdtok.str;\n var stmt : Statement;\n switch (cmdtok.type) {\n case TokenType.Remark:\n if (cmdtok.str.startsWith(\"'\") && !this.opts.tickComments)\n this.dialectErrorNoSupport(`tick comments`);\n return null;\n case TokenType.Operator:\n // \"?\" is alias for \"PRINT\" on some platforms\n if (cmd == this.validKeyword('?')) cmd = 'PRINT';\n case TokenType.Ident:\n // ignore remarks\n if (cmd == 'REM') return null;\n // look for \"GO TO\" and \"GO SUB\"\n if (cmd == 'GO' && this.peekToken().str == 'TO') {\n this.consumeToken();\n cmd = 'GOTO';\n } else if (cmd == 'GO' && this.peekToken().str == 'SUB') {\n this.consumeToken();\n cmd = 'GOSUB';\n }\n // lookup JS function for command\n var fn = this.supportsCommand(cmd);\n if (fn) {\n if (this.validKeyword(cmd) == null)\n this.dialectErrorNoSupport(`the ${cmd} statement`);\n stmt = fn.bind(this)();\n break;\n } else if (this.peekToken().str == '=' || this.peekToken().str == '(') {\n if (!this.opts.optionalLet)\n this.dialectError(`Assignments must have a preceding LET`);\n // 'A = expr' or 'A(X) = expr'\n this.pushbackToken(cmdtok);\n stmt = this.stmt__LET();\n break;\n } else {\n this.compileError(`I don't understand the command \"${cmd}\".`);\n }\n case TokenType.EOL:\n if (this.opts.optionalWhitespace) return null;\n default:\n this.compileError(`There should be a command here.`);\n return null;\n }\n // add statement to list\n if (stmt != null) this.addStatement(stmt, cmdtok);\n return stmt;\n }\n // check scope stuff (if compiledBlocks is true)\n modifyScope(stmt: Statement) {\n if (this.opts.compiledBlocks) {\n var cmd = stmt.command;\n if (cmd == 'FOR' || cmd == 'WHILE' || cmd == 'SUB') {\n this.scopestack.push(this.getPC()); // has to be before adding statment to list\n } else if (cmd == 'NEXT') {\n this.popScope(stmt as NEXT_Statement, 'FOR');\n } else if (cmd == 'WEND') {\n this.popScope(stmt as WEND_Statement, 'WHILE');\n }\n }\n }\n popScope(close: WEND_Statement|NEXT_Statement|END_Statement, open: string) {\n var popidx = this.scopestack.pop();\n var popstmt : ScopeStartStatement = popidx != null ? this.stmts[popidx] : null;\n if (popstmt == null)\n this.compileError(`There's a ${close.command} without a matching ${open}.`, close.$loc);\n else if (popstmt.command != open)\n this.compileError(`There's a ${close.command} paired with ${popstmt.command}, but it should be paired with ${open}.`, close.$loc, popstmt.$loc);\n else if (close.command == 'NEXT' && !this.opts.optionalNextVar \n && close.lexpr.name != (popstmt as FOR_Statement).lexpr.name)\n this.compileError(`This NEXT statement is matched with the wrong FOR variable (${close.lexpr.name}).`, close.$loc, popstmt.$loc);\n // set start + end locations\n close.startpc = popidx;\n popstmt.endpc = this.getPC(); // has to be before adding statment to list\n }\n popIfThenScope(nextpc?: number) {\n var popidx = this.scopestack.pop();\n var popstmt : ScopeStartStatement = popidx != null ? this.stmts[popidx] : null;\n if (popstmt == null)\n this.compileError(`There's an END IF without a matching IF or ELSE.`);\n if (popstmt.command == 'ELSE') {\n popstmt.endpc = this.getPC();\n this.popIfThenScope(popidx + 1); // IF goes to ELSE+1\n } else if (popstmt.command == 'IF') {\n popstmt.endpc = nextpc != null ? nextpc : this.getPC();\n } else {\n this.compileError(`There's an END IF paired with a ${popstmt.command}, not IF or ELSE.`, this.lasttoken.$loc, popstmt.$loc);\n }\n }\n parseVarSubscriptOrFunc(): IndOp {\n var tok = this.consumeToken();\n switch (tok.type) {\n case TokenType.Ident:\n let args = null;\n if (this.peekToken().str == '(') {\n this.expectToken('(');\n args = this.parseExprList();\n this.expectToken(')', `There should be another expression or a \")\" here.`);\n }\n var loc = mergeLocs(tok.$loc, this.lasttoken.$loc);\n var valtype = this.exprTypeForSubscript(tok.str, args, loc);\n return { valtype: valtype, name: tok.str, args: args, $loc:loc };\n default:\n this.compileError(`There should be a variable name here.`);\n break;\n }\n }\n parseLexpr(): IndOp {\n var lexpr = this.parseVarSubscriptOrFunc();\n this.vardefs[lexpr.name] = lexpr;\n this.validateVarName(lexpr);\n return lexpr;\n }\n parseForNextLexpr() : IndOp {\n var lexpr = this.parseLexpr();\n if (lexpr.args || lexpr.name.endsWith('$'))\n this.compileError(`A FOR ... NEXT loop can only use numeric variables.`, lexpr.$loc);\n return lexpr;\n }\n parseList<T>(parseFunc:()=>T, delim:string): T[] {\n var sep;\n var list = [];\n do {\n var el = parseFunc.bind(this)(); // call parse function\n if (el != null) list.push(el); // add parsed element to list\n sep = this.consumeToken(); // consume seperator token\n } while (sep.str == delim);\n this.pushbackToken(sep);\n return list;\n }\n parseLexprList(): IndOp[] {\n return this.parseList(this.parseLexpr, ',');\n }\n parseExprList(): Expr[] {\n return this.parseList(this.parseExpr, ',');\n }\n parseLabelList(): Expr[] {\n return this.parseList(this.parseLabel, ',');\n }\n parseLabel() : Expr {\n // parse full expr?\n if (this.opts.computedGoto) {\n // parse expression, but still add to list of label targets if constant\n var expr = this.parseExpr();\n if (isLiteral(expr)) this.targets[expr.value] = this.lasttoken.$loc;\n return expr;\n } else {\n // parse a single number or ident label\n var tok = this.consumeToken();\n switch (tok.type) {\n case TokenType.Ident:\n if (!this.opts.optionalLabels)\n this.dialectError(`All labels must be line numbers`)\n case TokenType.Int:\n var label = tok.str;\n this.targets[label] = tok.$loc;\n return {valtype:'label', value:label};\n default:\n var what = this.opts.optionalLabels ? \"label or line number\" : \"line number\";\n this.compileError(`There should be a ${what} here.`);\n }\n }\n }\n parseDatumList(): Literal[] {\n return this.parseList(this.parseDatum, ',');\n }\n parseDatum(): Literal {\n var tok = this.consumeToken();\n // get rid of leading whitespace\n while (tok.type == TokenType.Whitespace)\n tok = this.consumeToken();\n if (isEOS(tok)) this.compileError(`There should be a datum here.`);\n // parse constants\n if (tok.type <= TokenType.HexOctalInt) {\n return this.parseValue(tok);\n }\n if (tok.str == '-' && this.peekToken().type <= TokenType.HexOctalInt) {\n tok = this.consumeToken();\n return { valtype:'number', value: -this.parseValue(tok).value };\n }\n if (tok.str == '+' && this.peekToken().type <= TokenType.HexOctalInt) {\n tok = this.consumeToken();\n return this.parseValue(tok);\n }\n // concat all stuff including whitespace\n // TODO: should trim whitespace only if not quoted string\n var s = '';\n while (!isEOS(tok) && tok.str != ',') {\n s += this.parseValue(tok).value;\n tok = this.consumeToken();\n }\n this.pushbackToken(tok);\n return { valtype:'string', value: s }; // trim leading and trailing whitespace\n }\n parseValue(tok: Token): Literal {\n switch (tok.type) {\n case TokenType.HexOctalInt:\n if (!this.opts.hexOctalConsts)\n this.dialectErrorNoSupport(`hex/octal constants`);\n let base = tok.str.startsWith('H') ? 16 : 8;\n return { valtype:'number', value: parseInt(tok.str.substr(1), base) };\n case TokenType.Int:\n case TokenType.Float:\n return { valtype:'number', value: this.parseNumber(tok.str) };\n case TokenType.String:\n return { valtype:'string', value: stripQuotes(tok.str) };\n default:\n return { valtype:'string', value: tok.str }; // only used in DATA statement\n }\n }\n parsePrimary(): Expr {\n let tok = this.consumeToken();\n switch (tok.type) {\n case TokenType.HexOctalInt:\n case TokenType.Int:\n case TokenType.Float:\n case TokenType.String:\n return this.parseValue(tok);\n case TokenType.Ident:\n if (tok.str == 'NOT') {\n let expr = this.parsePrimary();\n return { valtype:'number', op: this.opts.bitwiseLogic ? 'bnot' : 'lnot', expr: expr };\n } else {\n this.pushbackToken(tok);\n return this.parseVarSubscriptOrFunc();\n }\n case TokenType.Operator:\n if (tok.str == '(') {\n let expr = this.parseExpr();\n this.expectToken(')', `There should be another expression or a \")\" here.`);\n return expr;\n } else if (tok.str == '-') {\n let expr = this.parsePrimary(); // TODO: -2^2=-4 and -2-2=-4\n return { valtype:'number', op: 'neg', expr: expr };\n } else if (tok.str == '+') {\n return this.parsePrimary(); // ignore unary +\n }\n default:\n this.compileError(`The expression is incomplete.`);\n return;\n }\n }\n parseNumber(str: string) : number {\n var n = parseFloat(str);\n if (isNaN(n))\n this.compileError(`The number ${str} is not a valid floating-point number.`);\n if (this.opts.checkOverflow && !isFinite(n))\n this.compileError(`The number ${str} is too big to fit into a floating-point value.`);\n return n;\n }\n parseExpr1(left: Expr, minPred: number): Expr {\n let look = this.peekToken();\n while (getPrecedence(look) >= minPred) {\n let op = this.consumeToken();\n if (this.opts.validOperators && this.opts.validOperators.indexOf(op.str) < 0)\n this.dialectErrorNoSupport(`the \"${op.str}\" operator`);\n let right: Expr = this.parsePrimary();\n look = this.peekToken();\n while (getPrecedence(look) > getPrecedence(op)) {\n right = this.parseExpr1(right, getPrecedence(look));\n look = this.peekToken();\n }\n var opfn = getOperator(op.str).f;\n // use logical operators instead of bitwise?\n if (!this.opts.bitwiseLogic && op.str == 'AND') opfn = 'land';\n if (!this.opts.bitwiseLogic && op.str == 'OR') opfn = 'lor';\n var valtype = this.exprTypeForOp(opfn, left, right, op);\n left = { valtype:valtype, op:opfn, left: left, right: right };\n }\n return left;\n }\n parseExpr(): Expr {\n var startloc = this.peekToken().$loc;\n var expr = this.parseExpr1(this.parsePrimary(), 0);\n var endloc = this.lasttoken.$loc;\n expr.$loc = mergeLocs(startloc, endloc);\n return expr;\n }\n parseExprWithType(expecttype: ValueType): Expr {\n var expr = this.parseExpr();\n if (expr.valtype != expecttype)\n this.compileError(`There should be a ${expecttype} here, but this expression evaluates to a ${expr.valtype}.`, expr.$loc);\n return expr;\n }\n validateVarName(lexpr: IndOp) {\n switch (this.opts.varNaming) {\n case 'A': // TINY BASIC, no strings\n if (!/^[A-Z]$/i.test(lexpr.name))\n this.dialectErrorNoSupport(`variable names other than a single letter`);\n break;\n case 'A1':\n if (lexpr.args == null && !/^[A-Z][0-9]?[$]?$/i.test(lexpr.name))\n this.dialectErrorNoSupport(`variable names other than a letter followed by an optional digit`);\n if (lexpr.args != null && !/^[A-Z]?[$]?$/i.test(lexpr.name))\n this.dialectErrorNoSupport(`array names other than a single letter`);\n break;\n case 'A1$':\n if (!/^[A-Z][0-9]?[$]?$/i.test(lexpr.name))\n this.dialectErrorNoSupport(`variable names other than a letter followed by an optional digit`);\n break;\n case 'AA':\n if (lexpr.args == null && !/^[A-Z][A-Z0-9]?[$]?$/i.test(lexpr.name))\n this.dialectErrorNoSupport(`variable names other than a letter followed by an optional letter or digit`);\n break;\n case '*':\n break;\n }\n }\n visitExpr(expr: Expr, callback: (expr:Expr) => void) {\n if (isBinOp(expr)) {\n this.visitExpr(expr.left, callback);\n this.visitExpr(expr.right, callback);\n }\n if (isUnOp(expr)) {\n this.visitExpr(expr.expr, callback);\n }\n if (isLookup(expr) && expr.args != null) {\n for (var arg of expr.args)\n this.visitExpr(arg, callback);\n }\n callback(expr);\n }\n // type-checking\n exprTypeForOp(fnname: string, left: Expr, right: Expr, optok: Token) : ValueType {\n if (left.valtype == 'string' || right.valtype == 'string') {\n if (fnname == 'add') {\n if (this.opts.stringConcat) return 'string' // concat strings\n else this.dialectErrorNoSupport(`the \"+\" operator to concatenate strings`, optok.$loc);\n } else if (fnname.length != 2) // only relops are 2 chars long!\n this.compileError(`You can't do math on strings until they're converted to numbers.`, optok.$loc);\n }\n return 'number';\n }\n exprTypeForSubscript(fnname: string, args: Expr[], loc: SourceLocation) : ValueType {\n args = args || [];\n // first check the built-in functions\n var defs = BUILTIN_MAP[fnname];\n if (defs != null) {\n if (!this.validFunction(fnname)) this.dialectErrorNoSupport(`the ${fnname} function`, loc);\n for (var def of defs) {\n if (args.length == def.args.length)\n return def.result; // TODO: check arg types\n }\n // TODO: check func arg types\n this.compileError(`The ${fnname} function takes ${def.args.length} arguments, but ${args.length} are given.`, loc);\n }\n // no function found, assume it's an array ref\n // TODO: validateVarName() later?\n this.varrefs[fnname] = loc;\n return fnname.endsWith('$') ? 'string' : 'number';\n }\n\n //// STATEMENTS\n\n stmt__LET(): LET_Statement {\n var lexprs = [ this.parseLexpr() ];\n this.expectToken(\"=\");\n // look for A=B=expr (TODO: doesn't work on arrays)\n while (this.opts.chainAssignments && this.peekToken().type == TokenType.Ident && this.peekToken(1).str == '=') {\n lexprs.push(this.parseLexpr());\n this.expectToken(\"=\");\n }\n var right = this.parseExprWithType(lexprs[0].valtype);\n return { command: \"LET\", lexprs: lexprs, right: right };\n }\n stmt__PRINT(): PRINT_Statement {\n var sep, lastsep;\n var list = [];\n do {\n sep = this.peekToken();\n if (isEOS(sep)) {\n break;\n } else if (sep.str == ';') {\n this.consumeToken();\n lastsep = sep;\n } else if (sep.str == ',') {\n this.consumeToken();\n list.push({value:'\\t'});\n lastsep = sep;\n } else {\n list.push(this.parseExpr());\n lastsep = null;\n }\n } while (true);\n if (!(lastsep && (lastsep.str == ';' || sep.str != ','))) {\n list.push({value:'\\n'});\n }\n return { command: \"PRINT\", args: list };\n }\n stmt__GOTO(): GOTO_Statement | GOSUB_Statement | ONGO_Statement {\n return this.__GO(\"GOTO\");\n }\n stmt__GOSUB(): GOTO_Statement | GOSUB_Statement | ONGO_Statement {\n return this.__GO(\"GOSUB\");\n }\n __GO(cmd: \"GOTO\"|\"GOSUB\"): GOTO_Statement | GOSUB_Statement | ONGO_Statement {\n var expr = this.parseLabel();\n // GOTO (expr) OF (labels...)\n if (this.peekToken().str == this.validKeyword('OF')) {\n this.expectToken('OF');\n let newcmd : 'ONGOTO'|'ONGOSUB' = (cmd == 'GOTO') ? 'ONGOTO' : 'ONGOSUB';\n return { command: newcmd, expr: expr, labels: this.parseLabelList() };\n } else {\n // regular GOTO or GOSUB\n return { command: cmd, label: expr };\n }\n }\n stmt__IF(): void {\n var cmdtok = this.lasttoken;\n var cond = this.parseExprWithType(\"number\");\n var ifstmt : IF_Statement = { command: \"IF\", cond: cond };\n this.addStatement(ifstmt, cmdtok);\n // we accept GOTO or THEN if line number provided (DEC accepts GO TO)\n var thengoto = this.expectTokens(['THEN','GOTO','GO']);\n if (thengoto.str == 'GO') this.expectToken('TO');\n // multiline IF .. THEN? push it to scope stack\n if (this.opts.multilineIfThen && isEOS(this.peekToken())) {\n this.scopestack.push(this.getPC() - 1); // we already added stmt to list, so - 1\n } else {\n // parse line number or statement clause\n this.parseGotoOrStatements();\n // is the next statement an ELSE?\n // gotta parse it now because it's an end-of-statement token\n if (this.peekToken().str == 'ELSE') {\n this.expectToken('ELSE');\n ifstmt.endpc = this.getPC() + 1;\n this.stmt__ELSE();\n } else {\n ifstmt.endpc = this.getPC();\n }\n }\n }\n stmt__ELSE(): void {\n var elsestmt : ELSE_Statement = { command: \"ELSE\" };\n this.addStatement(elsestmt, this.lasttoken);\n // multiline ELSE? or ELSE IF?\n var nexttok = this.peekToken();\n if (this.opts.multilineIfThen && isEOS(nexttok)) {\n this.scopestack.push(this.getPC() - 1); // we already added stmt to list, so - 1\n } else if (this.opts.multilineIfThen && nexttok.str == 'IF') {\n this.scopestack.push(this.getPC() - 1); // we already added stmt to list, so - 1\n this.parseGotoOrStatements();\n this.elseifcount++;\n } else {\n // parse line number or statement clause\n this.parseGotoOrStatements();\n elsestmt.endpc = this.getPC();\n }\n }\n parseGotoOrStatements() {\n var lineno = this.peekToken();\n // assume GOTO if number given after THEN\n if (lineno.type == TokenType.Int) {\n this.parseLabel();\n var gotostmt : GOTO_Statement = { command:'GOTO', label: {valtype:'label', value:lineno.str} }\n this.addStatement(gotostmt, lineno);\n } else {\n // parse rest of IF clause\n this.parseCompoundStatement();\n }\n }\n stmt__FOR() : FOR_Statement {\n var lexpr = this.parseForNextLexpr();\n this.expectToken('=');\n var init = this.parseExprWithType(\"number\");\n this.expectToken('TO');\n var targ = this.parseExprWithType(\"number\");\n if (this.peekToken().str == 'STEP') {\n this.consumeToken();\n var step = this.parseExprWithType(\"number\");\n }\n return { command:'FOR', lexpr:lexpr, initial:init, target:targ, step:step };\n }\n stmt__NEXT() : NEXT_Statement {\n var lexpr = null;\n // NEXT var might be optional\n if (!this.opts.optionalNextVar || !isEOS(this.peekToken())) {\n lexpr = this.parseForNextLexpr();\n // convert ',' to ':' 'NEXT'\n if (this.opts.multipleNextVars && this.peekToken().str == ',') {\n this.consumeToken(); // consume ','\n this.tokens.unshift({type:TokenType.Ident, str:'NEXT', $loc:this.peekToken().$loc});\n this.tokens.unshift({type:TokenType.Operator, str:':', $loc:this.peekToken().$loc});\n }\n }\n return { command:'NEXT', lexpr:lexpr };\n }\n stmt__WHILE(): WHILE_Statement {\n var cond = this.parseExprWithType(\"number\");\n return { command:'WHILE', cond:cond };\n }\n stmt__WEND(): WEND_Statement {\n return { command:'WEND' };\n }\n stmt__DIM() : DIM_Statement {\n var lexprs = this.parseLexprList();\n lexprs.forEach((arr) => {\n if (arr.args == null || arr.args.length == 0) \n this.compileError(`An array defined by DIM must have at least one dimension.`)\n else if (arr.args.length > this.opts.maxDimensions) \n this.dialectErrorNoSupport(`arrays with more than ${this.opts.maxDimensions} dimensionals`);\n for (var arrdim of arr.args) {\n if (arrdim.valtype != 'number')\n this.compileError(`Array dimensions must be numeric.`, arrdim.$loc);\n if (isLiteral(arrdim) && typeof arrdim.value === 'number' && arrdim.value < this.opts.defaultArrayBase)\n this.compileError(`An array dimension cannot be less than ${this.opts.defaultArrayBase}.`, arrdim.$loc);\n }\n });\n return { command:'DIM', args:lexprs };\n }\n stmt__INPUT() : INPUT_Statement {\n var prompt = this.consumeToken();\n var promptstr;\n if (prompt.type == TokenType.String) {\n this.expectTokens([';', ',']);\n promptstr = stripQuotes(prompt.str);\n } else {\n this.pushbackToken(prompt);\n promptstr = \"\";\n }\n return { command:'INPUT', prompt:{ valtype:'string', value: promptstr }, args:this.parseLexprList() };\n }\n /* for HP BASIC only */\n stmt__ENTER() : INPUT_Statement {\n var timeout = this.parseExpr();\n this.expectToken(',');\n var elapsed = this.parseLexpr(); // TODO: this has to go somewheres\n this.expectToken(',');\n return { command:'INPUT', prompt:null, args:this.parseLexprList(), timeout:timeout, elapsed:elapsed };\n }\n // TODO: DATA statement doesn't read unquoted strings\n stmt__DATA() : DATA_Statement {\n return { command:'DATA', datums:this.parseDatumList() };\n }\n stmt__READ() : READ_Statement {\n return { command:'READ', args:this.parseLexprList() };\n }\n stmt__RESTORE() : RESTORE_Statement {\n var label = null;\n if (this.opts.restoreWithLabel && !isEOS(this.peekToken()))\n label = this.parseLabel();\n return { command:'RESTORE', label:label };\n }\n stmt__RETURN() {\n return { command:'RETURN' };\n }\n stmt__STOP() {\n return { command:'STOP' };\n }\n stmt__END() {\n if (this.opts.multilineIfThen && this.scopestack.length) {\n let endtok = this.expectTokens(['IF','SUB']);\n if (endtok.str == 'IF') {\n this.popIfThenScope();\n while (this.elseifcount--) this.popIfThenScope(); // pop additional ELSE IF blocks?\n this.elseifcount = 0;\n } else if (endtok.str == 'SUB') {\n this.addStatement( { command: 'RETURN' }, endtok );\n this.popScope( { command: 'END' }, 'SUB'); // fake command to avoid null\n }\n } else {\n return { command:'END' };\n }\n }\n stmt__ON() : ONGO_Statement {\n var expr = this.parseExprWithType(\"number\");\n var gotok = this.consumeToken();\n var cmd = {GOTO:'ONGOTO', THEN:'ONGOTO', GOSUB:'ONGOSUB'}[gotok.str]; // THEN only for DEC basic?\n if (!cmd) this.compileError(`There should be a GOTO or GOSUB here.`);\n var labels = this.parseLabelList();\n return { command:cmd as any, expr:expr, labels:labels };\n }\n stmt__DEF() : DEF_Statement {\n var lexpr = this.parseVarSubscriptOrFunc(); // TODO: only allow parameter names, not exprs\n if (lexpr.args && lexpr.args.length > this.opts.maxDefArgs)\n this.compileError(`There can be no more than ${this.opts.maxDefArgs} arguments to a function or subscript.`, lexpr.$loc);\n if (!lexpr.name.startsWith('FN')) this.compileError(`Functions defined with DEF must begin with the letters \"FN\".`, lexpr.$loc)\n this.markVarDefs(lexpr); // local variables need to be marked as referenced (TODO: only for this scope)\n this.expectToken(\"=\");\n var func = this.parseExpr();\n // build call graph to detect cycles\n this.visitExpr(func, (expr:Expr) => {\n if (isLookup(expr) && expr.name.startsWith('FN')) {\n if (!this.fnrefs[lexpr.name])\n this.fnrefs[lexpr.name] = [];\n this.fnrefs[lexpr.name].push(expr.name);\n }\n });\n this.checkCallGraph(lexpr.name, new Set());\n return { command:'DEF', lexpr:lexpr, def:func };\n }\n stmt__SUB() : SUB_Statement {\n var lexpr = this.parseVarSubscriptOrFunc(); // TODO: only allow parameter names, not exprs\n this.markVarDefs(lexpr); // local variables need to be marked as referenced (TODO: only for this scope)\n this.addLabel(lexpr.name, 1); // offset +1 to skip SUB command\n return { command:'SUB', lexpr:lexpr };\n }\n stmt__CALL() : CALL_Statement {\n return { command:'CALL', call:this.parseVarSubscriptOrFunc() };\n }\n markVarDefs(lexpr: IndOp) {\n this.vardefs[lexpr.name] = lexpr;\n if (lexpr.args != null)\n for (let arg of lexpr.args) {\n if (isLookup(arg) && arg.args == null)\n this.vardefs[arg.name] = arg;\n else\n this.compileError(`A definition can only define symbols, not expressions.`);\n }\n }\n // detect cycles in call graph starting at function 'name'\n checkCallGraph(name: string, visited: Set<string>) {\n if (visited.has(name)) this.compileError(`There was a cycle in the function definition graph for ${name}.`);\n visited.add(name);\n var refs = this.fnrefs[name] || [];\n for (var ref of refs)\n this.checkCallGraph(ref, visited); // recurse\n visited.delete(name);\n }\n stmt__POP() : NoArgStatement {\n return { command:'POP' };\n }\n stmt__GET() : GET_Statement {\n var lexpr = this.parseLexpr();\n return { command:'GET', lexpr:lexpr };\n }\n stmt__CLEAR() : NoArgStatement {\n return { command:'CLEAR' };\n }\n stmt__RANDOMIZE() : NoArgStatement {\n return { command:'RANDOMIZE' };\n }\n stmt__CHANGE() : CHANGE_Statement {\n var src = this.parseExpr();\n this.expectToken('TO');\n var dest = this.parseLexpr();\n if (dest.valtype == src.valtype)\n this.compileError(`CHANGE can only convert strings to numeric arrays, or vice-versa.`, mergeLocs(src.$loc, dest.$loc));\n return { command:'CHANGE', src:src, dest:dest };\n }\n stmt__CONVERT() : CONVERT_Statement {\n var src = this.parseExpr();\n this.expectToken('TO');\n var dest = this.parseLexpr();\n if (dest.valtype == src.valtype)\n this.compileError(`CONVERT can only convert strings to numbers, or vice-versa.`, mergeLocs(src.$loc, dest.$loc));\n return { command:'CONVERT', src:src, dest:dest };\n }\n // TODO: CHANGE A TO A$ (4th edition, A(0) is len and A(1..) are chars)\n stmt__OPTION() : OPTION_Statement {\n this.optionCount++;\n var tokname = this.consumeToken();\n var optname = tokname.str.toUpperCase();\n if (tokname.type != TokenType.Ident) this.compileError(`There must be a name after the OPTION statement.`)\n var tokarg = this.consumeToken();\n var arg = tokarg.str.toUpperCase();\n switch (optname) {\n case 'DIALECT':\n if (this.optionCount > 1) this.compileError(`OPTION DIALECT must be the first OPTION statement in the file.`, tokname.$loc);\n let dname = arg || \"\";\n if (dname == \"\") this.compileError(`OPTION DIALECT requires a dialect name.`, tokname.$loc);\n let dialect = DIALECTS[dname.toUpperCase()];\n if (dialect) this.opts = dialect;\n else this.compileError(`${dname} is not a valid dialect.`);\n break;\n case 'BASE':\n let base = parseInt(arg);\n if (base == 0 || base == 1) this.opts.defaultArrayBase = base;\n else this.compileError(\"OPTION BASE can only be 0 or 1.\");\n break;\n case 'CPUSPEED':\n if (!(this.opts.commandsPerSec = Math.min(1e7, arg=='MAX' ? Infinity : parseFloat(arg))))\n this.compileError(`OPTION CPUSPEED takes a positive number or MAX.`);\n break;\n default:\n // maybe it's one of the options?\n let propname = Object.getOwnPropertyNames(this.opts).find((n) => n.toUpperCase() == optname);\n if (propname == null) this.compileError(`${optname} is not a valid option.`, tokname.$loc);\n if (arg == null) this.compileError(`OPTION ${optname} requires a parameter.`);\n switch (typeof this.opts[propname]) {\n case 'boolean' : this.opts[propname] = arg.toUpperCase().startsWith(\"T\") || (arg as any)>0; return;\n case 'number' : this.opts[propname] = parseFloat(arg); return;\n case 'string' : this.opts[propname] = arg; return;\n case 'object' :\n if (Array.isArray(this.opts[propname]) && arg == 'ALL') {\n this.opts[propname] = null;\n return;\n }\n this.compileError(`OPTION ${optname} ALL is the only option supported.`);\n }\n break;\n }\n return { command:'OPTION', optname:optname, optargs:[arg]}\n }\n \n // for workermain\n generateListing(file: string, program: BASICProgram) {\n var srclines = [];\n var laststmt : Statement;\n program.stmts.forEach((stmt, idx) => {\n laststmt = stmt;\n srclines.push(stmt.$loc);\n });\n if (this.opts.endStmtRequired && (laststmt == null || laststmt.command != 'END'))\n this.dialectError(`All programs must have a final END statement`);\n return { lines: srclines };\n }\n getListings() : CodeListingMap {\n return this.listings;\n }\n\n // LINT STUFF\n checkAll(program : BASICProgram) {\n this.checkLabels();\n this.checkScopes();\n this.checkVarRefs();\n }\n checkLabels() {\n for (let targ in this.targets) {\n if (this.labels[targ] == null) {\n var what = this.opts.optionalLabels && isNaN(parseInt(targ)) ? \"label named\" : \"line number\";\n this.addError(`There isn't a ${what} ${targ}.`, this.targets[targ]);\n }\n }\n }\n checkScopes() {\n if (this.opts.compiledBlocks && this.scopestack.length) {\n var open = this.stmts[this.scopestack.pop()];\n var close = {FOR:\"NEXT\", WHILE:\"WEND\", IF:\"END IF\", SUB:\"END SUB\"};\n this.compileError(`Don't forget to add a matching ${close[open.command]} statement.`, open.$loc);\n }\n }\n checkVarRefs() {\n if (!this.opts.defaultValues) {\n for (var varname in this.varrefs) {\n if (this.vardefs[varname] == null)\n this.compileError(`The variable ${varname} isn't defined anywhere in the program.`, this.varrefs[varname]);\n }\n }\n }\n}\n\n///// BASIC DIALECTS\n\nexport const ECMA55_MINIMAL : BASICOptions = {\n dialectName: \"ECMA55\",\n asciiOnly : true,\n uppercaseOnly : true,\n optionalLabels : false,\n optionalWhitespace : false,\n multipleStmtsPerLine : false,\n varNaming : \"A1\",\n staticArrays : true,\n sharedArrayNamespace : true,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : false,\n stringConcat : false,\n maxDimensions : 2,\n maxDefArgs : 255,\n maxStringLength : 255,\n tickComments : false,\n hexOctalConsts : false,\n validKeywords : [\n 'BASE','DATA','DEF','DIM','END',\n 'FOR','GO','GOSUB','GOTO','IF','INPUT','LET','NEXT','ON','OPTION','PRINT',\n 'RANDOMIZE','READ','REM','RESTORE','RETURN','STEP','STOP','THEN','TO' // 'SUB'\n ],\n validFunctions : [\n 'ABS','ATN','COS','EXP','INT','LOG','RND','SGN','SIN','SQR','TAB','TAN'\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^'\n ],\n printZoneLength : 15,\n numericPadding : true,\n checkOverflow : true,\n testInitialFor : true,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : true,\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : true,\n chainAssignments : false,\n optionalLet : false,\n compiledBlocks : true,\n}\n\nexport const DARTMOUTH_4TH_EDITION : BASICOptions = {\n dialectName: \"DARTMOUTH4\",\n asciiOnly : true,\n uppercaseOnly : true,\n optionalLabels : false,\n optionalWhitespace : false,\n multipleStmtsPerLine : false,\n varNaming : \"A1\",\n staticArrays : true,\n sharedArrayNamespace : false,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : false,\n stringConcat : false,\n maxDimensions : 2,\n maxDefArgs : 255,\n maxStringLength : 255,\n tickComments : true,\n hexOctalConsts : false,\n validKeywords : [\n 'BASE','DATA','DEF','DIM','END',\n 'FOR','GO','GOSUB','GOTO','IF','INPUT','LET','NEXT','ON','OPTION','PRINT',\n 'RANDOMIZE','READ','REM','RESTORE','RETURN','STEP','STOP','THEN','TO', //'SUB',\n 'CHANGE','MAT','RANDOM','RESTORE$','RESTORE*',\n ],\n validFunctions : [\n 'ABS','ATN','COS','EXP','INT','LOG','RND','SGN','SIN','SQR','TAB','TAN',\n 'TRN','INV','DET','NUM','ZER', // NUM = # of strings input for MAT INPUT\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^'\n ],\n printZoneLength : 15,\n numericPadding : true,\n checkOverflow : true,\n testInitialFor : true,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : true,\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : true,\n chainAssignments : true,\n optionalLet : false,\n compiledBlocks : true,\n}\n\n// TODO: only integers supported\nexport const TINY_BASIC : BASICOptions = {\n dialectName: \"TINY\",\n asciiOnly : true,\n uppercaseOnly : true,\n optionalLabels : false,\n optionalWhitespace : false,\n multipleStmtsPerLine : false,\n varNaming : \"A\",\n staticArrays : false,\n sharedArrayNamespace : true,\n defaultArrayBase : 0,\n defaultArraySize : 0,\n defaultValues : true,\n stringConcat : false,\n maxDimensions : 0,\n maxDefArgs : 255,\n maxStringLength : 255,\n tickComments : false,\n hexOctalConsts : false,\n validKeywords : [\n 'OPTION',\n 'PRINT','IF','THEN','GOTO','INPUT','LET','GOSUB','RETURN','CLEAR','END'\n ],\n validFunctions : [\n ],\n validOperators : [\n '=', '<>', '><', '<', '>', '<=', '>=', '+', '-', '*', '/',\n ],\n printZoneLength : 1,\n numericPadding : false,\n checkOverflow : false,\n testInitialFor : false,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : false,\n computedGoto : true,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false,\n optionalLet : false,\n compiledBlocks : false,\n}\n\nexport const HP_TIMESHARED_BASIC : BASICOptions = {\n dialectName: \"HP2000\",\n asciiOnly : true,\n uppercaseOnly : true, // the terminal is usually uppercase\n optionalLabels : false,\n optionalWhitespace : false,\n multipleStmtsPerLine : true,\n varNaming : \"A1$\",\n staticArrays : true,\n sharedArrayNamespace : false,\n defaultArrayBase : 1,\n defaultArraySize : 11,\n defaultValues : false,\n stringConcat : false,\n maxDimensions : 2,\n maxDefArgs : 255,\n maxStringLength : 255, // 72 for literals\n tickComments : false, // TODO: HP BASIC has 'hh char constants\n hexOctalConsts : false,\n validKeywords : [\n 'BASE','DATA','DEF','DIM','END',\n 'FOR','GO','GOSUB','GOTO','IF','INPUT','LET','NEXT','OPTION','PRINT',\n 'RANDOMIZE','READ','REM','RESTORE','RETURN','STEP','STOP','THEN','TO', //'SUB',\n 'ENTER','MAT','CONVERT','OF','IMAGE','USING'\n ],\n validFunctions : [\n 'ABS','ATN','BRK','COS','CTL','EXP','INT','LEN','LIN','LOG','NUM',\n 'POS','RND','SGN','SIN','SPA','SQR','TAB','TAN','TIM','TYP','UPS$', // TODO: POS,\n 'NFORMAT$', // non-standard, substitute for PRINT USING\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^',\n '**', '#', 'NOT', 'AND', 'OR', 'MIN', 'MAX',\n ],\n printZoneLength : 15,\n numericPadding : true,\n checkOverflow : false,\n testInitialFor : true,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : false,\n computedGoto : true, // not really, but we do parse expressions for GOTO ... OF \n restoreWithLabel : true,\n squareBrackets : true,\n arraysContainChars : true,\n endStmtRequired : true,\n chainAssignments : true,\n optionalLet : true,\n compiledBlocks : true,\n maxArrayElements : 5000,\n // TODO: max line number\n}\n\nexport const DEC_BASIC_11 : BASICOptions = {\n dialectName: \"DEC11\",\n asciiOnly : true,\n uppercaseOnly : true, // translates all lower to upper\n optionalLabels : false,\n optionalWhitespace : false,\n multipleStmtsPerLine : false, // actually \"\\\"\n varNaming : \"A1\",\n staticArrays : true,\n sharedArrayNamespace : false,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : true,\n stringConcat : true, // can also use &\n maxDimensions : 2,\n maxDefArgs : 255, // ?\n maxStringLength : 255,\n tickComments : false,\n hexOctalConsts : false,\n validKeywords : [\n 'OPTION',\n 'DATA','DEF','DIM','END','FOR','STEP','GOSUB','GOTO','GO','TO',\n 'IF','THEN','INPUT','LET','NEXT','ON','PRINT','RANDOMIZE',\n 'READ','REM','RESET','RESTORE','RETURN','STOP',\n ],\n validFunctions : [\n 'ABS','ATN','COS','EXP','INT','LOG','LOG10','PI','RND','SGN','SIN','SQR','TAB',\n 'ASC','BIN','CHR$','CLK$','DAT$','LEN','OCT','POS','SEG$','STR$','TRM$','VAL',\n 'NFORMAT$', // non-standard, substitute for PRINT USING\n ],\n validOperators : [\n '=', '<>', '><', '<', '>', '<=', '>=', '+', '-', '*', '/', '^',\n ],\n printZoneLength : 14,\n numericPadding : true,\n checkOverflow : true, // non-fatal; subst 0 and continue\n testInitialFor : true,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : true, // might continue\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false,\n optionalLet : true,\n compiledBlocks : true,\n // TODO: max line number 32767\n // TODO: \\ separator, % int vars and constants, 'single' quoted\n // TODO: can't compare strings and numbers\n}\n\nexport const DEC_BASIC_PLUS : BASICOptions = {\n dialectName: \"DECPLUS\",\n asciiOnly : true,\n uppercaseOnly : false,\n optionalLabels : false,\n optionalWhitespace : false,\n multipleStmtsPerLine : true,\n varNaming : \"A1\",\n staticArrays : true,\n sharedArrayNamespace : false,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : true,\n stringConcat : true, // can also use \"&\"\n maxDimensions : 2,\n maxDefArgs : 255, // ?\n maxStringLength : 255,\n tickComments : true, // actually use \"!\"\n hexOctalConsts : false,\n validKeywords : [\n 'OPTION',\n 'REM','LET','DIM','RANDOM','RANDOMIZE','IF','THEN','ELSE',\n 'FOR','TO','STEP','WHILE','UNTIL','NEXT','DEF','ON','GOTO','GOSUB',\n 'RETURN','CHANGE','READ','DATA','RESTORE','PRINT','USING',\n 'INPUT','LINE','NAME','AS','ERROR','RESUME','CHAIN','STOP','END',\n 'MAT','UNLESS','SLEEP','WAIT',\n ],\n validFunctions : [\n 'ABS','ATN','COS','EXP','INT','LOG','LOG10','PI','RND','SGN','SIN','SQR','TAB','TAN',\n 'POS','TAB','ASCII','CHR$','CVT%$','CVTF$','CVT$%','CVT$F',\n 'LEFT$','RIGHT$','MID$','LEN','INSTR','SPACE$','NUM$','VAL','XLATE',\n 'DATE$','TIME$','TIME','ERR','ERL','SWAP%','RAD$',\n 'NFORMAT$', // non-standard, substitute for PRINT USING\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^',\n '**', '==',\n 'NOT', 'AND', 'OR', 'XOR', 'IMP', 'EQV',\n ],\n printZoneLength : 14,\n numericPadding : true,\n checkOverflow : true, // non-fatal; subst 0 and continue\n testInitialFor : true,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : true, // might continue\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false, // TODO: can chain with \",\" not \"=\"\n optionalLet : true,\n compiledBlocks : true,\n // TODO: max line number 32767\n // TODO: \\ separator, % int vars and constants, 'single' quoted\n // TODO: can't compare strings and numbers\n // TODO: WHILE/UNTIL/FOR extra statements, etc\n}\n\nexport const BASICODE : BASICOptions = {\n dialectName: \"BASICODE\",\n asciiOnly : true,\n uppercaseOnly : false,\n optionalLabels : false,\n optionalWhitespace : true,\n multipleStmtsPerLine : true,\n varNaming : \"AA\",\n staticArrays : true,\n sharedArrayNamespace : false,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : false,\n stringConcat : true,\n maxDimensions : 2,\n maxDefArgs : 255,\n maxStringLength : 255,\n tickComments : false,\n hexOctalConsts : false,\n validKeywords : [\n 'BASE','DATA','DEF','DIM','END',\n 'FOR','GO','GOSUB','GOTO','IF','INPUT','LET','NEXT','ON','OPTION','PRINT',\n 'READ','REM','RESTORE','RETURN','STEP','STOP','THEN','TO', // 'SUB',\n 'AND', 'NOT', 'OR'\n ],\n validFunctions : [\n 'ABS','ASC','ATN','CHR$','COS','EXP','INT','LEFT$','LEN','LOG', \n 'MID$','RIGHT$','SGN','SIN','SQR','TAB','TAN','VAL'\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^', 'AND', 'NOT', 'OR'\n ],\n printZoneLength : 15,\n numericPadding : true,\n checkOverflow : true,\n testInitialFor : true,\n optionalNextVar : false,\n multipleNextVars : false,\n bitwiseLogic : false,\n checkOnGotoIndex : true,\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false,\n optionalLet : true,\n compiledBlocks : false,\n}\n\nexport const ALTAIR_BASIC41 : BASICOptions = {\n dialectName: \"ALTAIR41\",\n asciiOnly : true,\n uppercaseOnly : true,\n optionalLabels : false,\n optionalWhitespace : true,\n multipleStmtsPerLine : true,\n varNaming : \"*\", // or AA\n staticArrays : false,\n sharedArrayNamespace : true,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : true,\n stringConcat : true,\n maxDimensions : 128, // \"as many as will fit on a single line\" ... ?\n maxDefArgs : 255,\n maxStringLength : 255,\n tickComments : false,\n hexOctalConsts : false,\n validKeywords : [\n 'OPTION',\n 'CONSOLE','DATA','DEF','DEFUSR','DIM','END','ERASE','ERROR',\n 'FOR','GOTO','GOSUB','IF','THEN','ELSE','INPUT','LET','LINE',\n 'PRINT','LPRINT','USING','NEXT','ON','OUT','POKE',\n 'READ','REM','RESTORE','RESUME','RETURN','STOP','SWAP',\n 'TROFF','TRON','WAIT',\n 'TO','STEP',\n 'AND', 'NOT', 'OR', 'XOR', 'IMP', 'EQV', 'MOD',\n 'RANDOMIZE' // not in Altair BASIC, but we add it anyway\n ],\n validFunctions : [\n 'ABS','ASC','ATN','CDBL','CHR$','CINT','COS','ERL','ERR',\n 'EXP','FIX','FRE','HEX$','INP','INSTR','INT',\n 'LEFT$','LEN','LOG','LPOS','MID$',\n 'OCT$','POS','RIGHT$','RND','SGN','SIN','SPACE$','SPC',\n 'SQR','STR$','STRING$','TAB','TAN','USR','VAL','VARPTR'\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^', '\\\\',\n 'AND', 'NOT', 'OR', 'XOR', 'IMP', 'EQV', 'MOD'\n ],\n printZoneLength : 15,\n numericPadding : true,\n checkOverflow : true,\n testInitialFor : false,\n optionalNextVar : true,\n multipleNextVars : true,\n bitwiseLogic : true,\n checkOnGotoIndex : false,\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false,\n optionalLet : true,\n compiledBlocks : false,\n}\n\nexport const APPLESOFT_BASIC : BASICOptions = {\n dialectName: \"APPLESOFT\",\n asciiOnly : true,\n uppercaseOnly : false,\n optionalLabels : false,\n optionalWhitespace : true,\n multipleStmtsPerLine : true,\n varNaming : \"*\", // or AA\n staticArrays : false,\n sharedArrayNamespace : false,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : true,\n stringConcat : true,\n maxDimensions : 88,\n maxDefArgs : 1, // TODO: no string FNs\n maxStringLength : 255,\n tickComments : false,\n hexOctalConsts : false,\n validKeywords : [\n 'OPTION',\n 'CLEAR','LET','DIM','DEF','GOTO','GOSUB','RETURN','ON','POP',\n 'FOR','NEXT','IF','THEN','END','STOP','ONERR','RESUME',\n 'PRINT','INPUT','GET','HOME','HTAB','VTAB',\n 'INVERSE','FLASH','NORMAL','TEXT',\n 'GR','COLOR','PLOT','HLIN','VLIN',\n 'HGR','HGR2','HPLOT','HCOLOR','AT',\n 'DATA','READ','RESTORE',\n 'REM','TRACE','NOTRACE',\n 'TO','STEP',\n 'AND', 'NOT', 'OR'\n ],\n validFunctions : [\n 'ABS','ATN','COS','EXP','INT','LOG','RND','SGN','SIN','SQR','TAN',\n 'LEN','LEFT$','MID$','RIGHT$','STR$','VAL','CHR$','ASC',\n 'FRE','SCRN','PDL','PEEK','POS'\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^',\n 'AND', 'NOT', 'OR'\n ],\n printZoneLength : 16,\n numericPadding : false,\n checkOverflow : true,\n testInitialFor : false,\n optionalNextVar : true,\n multipleNextVars : true,\n bitwiseLogic : false,\n checkOnGotoIndex : false,\n computedGoto : false,\n restoreWithLabel : false,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false,\n optionalLet : true,\n compiledBlocks : false,\n}\n\nexport const BASIC80 : BASICOptions = {\n dialectName: \"BASIC80\",\n asciiOnly : true,\n uppercaseOnly : false,\n optionalLabels : false,\n optionalWhitespace : true,\n multipleStmtsPerLine : true,\n varNaming : \"*\",\n staticArrays : false,\n sharedArrayNamespace : true,\n defaultArrayBase : 0,\n defaultArraySize : 11,\n defaultValues : true,\n stringConcat : true,\n maxDimensions : 255,\n maxDefArgs : 255,\n maxStringLength : 255,\n //maxElements : 32767, // TODO\n tickComments : true,\n hexOctalConsts : true,\n validKeywords : [\n 'OPTION',\n 'CONSOLE','DATA','DEF','DEFUSR','DIM','END','ERASE','ERROR',\n 'FOR','GOTO','GOSUB','IF','THEN','ELSE','INPUT','LET','LINE',\n 'PRINT','LPRINT','USING','NEXT','ON','OUT','POKE',\n 'READ','REM','RESTORE','RESUME','RETURN','STOP','SWAP',\n 'TROFF','TRON','WAIT',\n 'CALL','CHAIN','COMMON','WHILE','WEND','WRITE','RANDOMIZE',\n 'TO','STEP',\n 'AND', 'NOT', 'OR', 'XOR', 'IMP', 'EQV', 'MOD'\n ],\n validFunctions : [\n 'ABS','ASC','ATN','CDBL','CHR$','CINT','COS','CSNG','CVI','CVS','CVD',\n 'EOF','EXP','FIX','FRE','HEX$','INP','INPUT$','INSTR','INT',\n 'LEFT$','LEN','LOC','LOG','LPOS','MID$','MKI$','MKS$','MKD$',\n 'OCT$','PEEK','POS','RIGHT$','RND','SGN','SIN','SPACE$','SPC',\n 'SQR','STR$','STRING$','TAB','TAN','USR','VAL','VARPTR'\n ],\n validOperators : [\n '=', '<>', '<', '>', '<=', '>=', '+', '-', '*', '/', '^', '\\\\',\n 'AND', 'NOT', 'OR', 'XOR', 'IMP', 'EQV', 'MOD'\n ],\n printZoneLength : 14,\n numericPadding : true,\n checkOverflow : false, // TODO: message displayed when overflow, division by zero = ok\n testInitialFor : true,\n optionalNextVar : true,\n multipleNextVars : true,\n bitwiseLogic : true,\n checkOnGotoIndex : false,\n computedGoto : false,\n restoreWithLabel : true,\n squareBrackets : false,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : false,\n optionalLet : true,\n compiledBlocks : false,\n}\n\nexport const MODERN_BASIC : BASICOptions = {\n dialectName: \"MODERN\",\n asciiOnly : false,\n uppercaseOnly : false,\n optionalLabels : true,\n optionalWhitespace : false,\n multipleStmtsPerLine : true,\n varNaming : \"*\",\n staticArrays : false,\n sharedArrayNamespace : false,\n defaultArrayBase : 0,\n defaultArraySize : 0, // DIM required\n defaultValues : false,\n stringConcat : true,\n maxDimensions : 255,\n maxDefArgs : 255,\n maxStringLength : 2048, // TODO?\n tickComments : true,\n hexOctalConsts : true,\n validKeywords : null, // all\n validFunctions : null, // all\n validOperators : null, // all\n printZoneLength : 16,\n numericPadding : false,\n checkOverflow : true,\n testInitialFor : true,\n optionalNextVar : true,\n multipleNextVars : true,\n bitwiseLogic : true,\n checkOnGotoIndex : true,\n computedGoto : false,\n restoreWithLabel : true,\n squareBrackets : true,\n arraysContainChars : false,\n endStmtRequired : false,\n chainAssignments : true,\n optionalLet : true,\n compiledBlocks : true,\n multilineIfThen : true,\n}\n\n// TODO: integer vars\n// TODO: DEFINT/DEFSTR\n// TODO: excess INPUT ignored, error msg\n// TODO: out of order line numbers\n\ntype BuiltinFunctionDef = [string, ValueType[], ValueType];\n\nconst BUILTIN_DEFS : BuiltinFunctionDef[] = [\n ['ABS', ['number'], 'number' ],\n ['ASC', ['string'], 'number' ],\n ['ATN', ['number'], 'number' ],\n ['CHR$', ['number'], 'string' ],\n ['CINT', ['number'], 'number' ],\n ['COS', ['number'], 'number' ],\n ['COT', ['number'], 'number' ],\n ['CTL', ['number'], 'string' ],\n ['EXP', ['number'], 'number' ],\n ['FIX', ['number'], 'number' ],\n ['HEX$', ['number'], 'string' ],\n ['INSTR', ['number', 'string', 'string'], 'number' ],\n ['INSTR', ['string', 'string'], 'number' ],\n ['INT', ['number'], 'number' ],\n ['LEFT$', ['string', 'number'], 'string' ],\n ['LEN', ['string'], 'number' ],\n ['LIN', ['number'], 'string' ],\n ['LOG', ['number'], 'number' ],\n ['LOG10', ['number'], 'number' ],\n ['MID$', ['string', 'number'], 'string'],\n ['MID$', ['string', 'number', 'number'], 'string'],\n ['OCT$', ['number'], 'string' ],\n ['PI', [], 'number'],\n ['POS', ['number'], 'number' ], // arg ignored\n ['POS', ['string','string'], 'number' ], // HP POS\n ['RIGHT$', ['string', 'number'], 'string' ],\n ['RND', [], 'number' ],\n ['RND', ['number'], 'number' ],\n ['ROUND', ['number'], 'number' ],\n ['SGN', ['number'], 'number' ],\n ['SIN', ['number'], 'number' ],\n ['SPACE$', ['number'], 'string' ],\n ['SPC', ['number'], 'string' ],\n ['SQR', ['number'], 'number' ],\n ['STR$', ['number'], 'string' ],\n ['STRING$', ['number', 'number'], 'string'],\n ['STRING$', ['number', 'string'], 'string'],\n ['TAB', ['number'], 'string' ],\n ['TAN', ['number'], 'number' ],\n ['TIM', ['number'], 'number' ], // only HP BASIC?\n ['TIMER', [], 'number' ],\n ['UPS$', ['string'], 'string' ],\n ['VAL', ['string'], 'number' ],\n ['LPAD$', ['string', 'number'], 'string' ],\n ['RPAD$', ['string', 'number'], 'string' ],\n ['NFORMAT$', ['number', 'number'], 'string' ],\n];\n\nvar BUILTIN_MAP : { [name:string] : {args:ValueType[], result:ValueType}[] } = {};\nBUILTIN_DEFS.forEach( (def, idx) => {\n let [name, args, result] = def;\n if (!BUILTIN_MAP[name]) BUILTIN_MAP[name] = [];\n BUILTIN_MAP[name].push({args: args, result: result});\n});\n\nexport const DIALECTS = {\n \"DEFAULT\": MODERN_BASIC,\n \"DARTMOUTH\": DARTMOUTH_4TH_EDITION,\n \"DARTMOUTH4\": DARTMOUTH_4TH_EDITION,\n \"ALTAIR\": ALTAIR_BASIC41,\n \"ALTAIR4\": ALTAIR_BASIC41,\n \"ALTAIR41\": ALTAIR_BASIC41,\n \"TINY\": TINY_BASIC,\n \"ECMA55\": ECMA55_MINIMAL,\n \"MINIMAL\": ECMA55_MINIMAL,\n \"HP\": HP_TIMESHARED_BASIC,\n \"HPB\": HP_TIMESHARED_BASIC,\n \"HPTSB\": HP_TIMESHARED_BASIC,\n \"HP2000\": HP_TIMESHARED_BASIC,\n \"HPBASIC\": HP_TIMESHARED_BASIC,\n \"HPACCESS\": HP_TIMESHARED_BASIC,\n \"DEC11\": DEC_BASIC_11,\n \"DEC\": DEC_BASIC_PLUS,\n \"DECPLUS\": DEC_BASIC_PLUS,\n \"BASICPLUS\": DEC_BASIC_PLUS,\n \"BASICODE\": BASICODE,\n \"APPLESOFT\": APPLESOFT_BASIC,\n \"BASIC80\": BASIC80,\n \"MODERN\": MODERN_BASIC,\n};\n", "\nexport var PLATFORM_PARAMS = {\n 'vcs': {\n arch: '6502',\n code_start: 0x1000,\n code_size: 0xf000,\n data_start: 0x80,\n data_size: 0x80,\n wiz_rom_ext: '.a26',\n wiz_inc_dir: '2600',\n cfgfile: 'atari2600.cfg',\n libargs: ['crt0.o', 'atari2600.lib'],\n extra_link_files: ['crt0.o', 'atari2600.cfg'],\n define: ['__ATARI2600__'],\n },\n 'mw8080bw': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x2000,\n data_start: 0x2000,\n data_size: 0x400,\n stack_end: 0x2400,\n },\n 'vicdual': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x4020,\n data_start: 0xe400,\n data_size: 0x400,\n stack_end: 0xe800,\n },\n 'galaxian': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x4000,\n data_start: 0x4000,\n data_size: 0x400,\n stack_end: 0x4800,\n },\n 'galaxian-scramble': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x5020,\n data_start: 0x4000,\n data_size: 0x400,\n stack_end: 0x4800,\n },\n 'williams': {\n arch: '6809',\n code_start: 0x0,\n rom_size: 0xc000,\n data_start: 0x9800,\n data_size: 0x2800,\n stack_end: 0xc000,\n set_stack_end: 0xc000,\n extra_link_files: ['williams.scr', 'libcmoc-crt-vec.a', 'libcmoc-std-vec.a'],\n extra_link_args: ['-swilliams.scr', '-lcmoc-crt-vec', '-lcmoc-std-vec'],\n extra_compile_files: ['assert.h','cmoc.h','stdarg.h','stdlib.h'],\n //extra_compile_args: ['--vectrex'],\n },\n 'williams-defender': {\n arch: '6809',\n code_start: 0x0,\n rom_size: 0xc000,\n data_start: 0x9800,\n data_size: 0x2800,\n stack_end: 0xc000,\n },\n 'williams-z80': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x9800,\n data_start: 0x9800,\n data_size: 0x2800,\n stack_end: 0xc000,\n },\n 'vector-z80color': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x8000,\n data_start: 0xe000,\n data_size: 0x2000,\n stack_end: 0x0,\n },\n 'vector-ataricolor': { //TODO\n arch: '6502',\n define: ['__VECTOR__'],\n cfgfile: 'vector-color.cfg',\n libargs: ['crt0.o', 'none.lib'],\n extra_link_files: ['crt0.o', 'vector-color.cfg'],\n },\n 'sound_williams-z80': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x4000,\n data_start: 0x4000,\n data_size: 0x400,\n stack_end: 0x8000,\n },\n 'base_z80': {\n arch: 'z80',\n code_start: 0x0,\n rom_size: 0x8000,\n data_start: 0x8000,\n data_size: 0x8000,\n stack_end: 0x0,\n },\n 'coleco': {\n arch: 'z80',\n rom_start: 0x8000,\n code_start: 0x8100,\n rom_size: 0x8000,\n data_start: 0x7000,\n data_size: 0x400,\n stack_end: 0x8000,\n extra_preproc_args: ['-I', '/share/include/coleco', '-D', 'CV_CV'],\n extra_link_args: ['-k', '/share/lib/coleco', '-l', 'libcv', '-l', 'libcvu', 'crt0.rel'],\n },\n 'msx': {\n arch: 'z80',\n rom_start: 0x4000,\n code_start: 0x4000,\n rom_size: 0x8000,\n data_start: 0xc000,\n data_size: 0x3000,\n stack_end: 0xffff,\n extra_link_args: ['crt0-msx.rel'],\n extra_link_files: ['crt0-msx.rel', 'crt0-msx.lst'],\n wiz_sys_type: 'z80',\n wiz_inc_dir: 'msx',\n },\n 'msx-libcv': {\n arch: 'z80',\n rom_start: 0x4000,\n code_start: 0x4000,\n rom_size: 0x8000,\n data_start: 0xc000,\n data_size: 0x3000,\n stack_end: 0xffff,\n extra_preproc_args: ['-I', '.', '-D', 'CV_MSX'],\n extra_link_args: ['-k', '.', '-l', 'libcv-msx', '-l', 'libcvu-msx', 'crt0-msx.rel'],\n extra_link_files: ['libcv-msx.lib', 'libcvu-msx.lib', 'crt0-msx.rel', 'crt0-msx.lst'],\n extra_compile_files: ['cv.h','cv_graphics.h','cv_input.h','cv_sound.h','cv_support.h','cvu.h','cvu_c.h','cvu_compression.h','cvu_f.h','cvu_graphics.h','cvu_input.h','cvu_sound.h'],\n },\n 'sms-sg1000-libcv': {\n arch: 'z80',\n rom_start: 0x0000,\n code_start: 0x0100,\n rom_size: 0xc000,\n data_start: 0xc000,\n data_size: 0x400,\n stack_end: 0xe000,\n extra_preproc_args: ['-I', '.', '-D', 'CV_SMS'],\n extra_link_args: ['-k', '.', '-l', 'libcv-sms', '-l', 'libcvu-sms', 'crt0-sms.rel'],\n extra_link_files: ['libcv-sms.lib', 'libcvu-sms.lib', 'crt0-sms.rel', 'crt0-sms.lst'],\n extra_compile_files: ['cv.h','cv_graphics.h','cv_input.h','cv_sound.h','cv_support.h','cvu.h','cvu_c.h','cvu_compression.h','cvu_f.h','cvu_graphics.h','cvu_input.h','cvu_sound.h'],\n },\n 'nes': { //TODO\n arch: '6502',\n define: ['__NES__'],\n cfgfile: 'neslib2.cfg',\n libargs: ['crt0.o', 'nes.lib', 'neslib2.lib',\n '-D', 'NES_MAPPER=0', // NROM\n '-D', 'NES_PRG_BANKS=2', // 2 16K PRG banks\n '-D', 'NES_CHR_BANKS=1', // 1 CHR bank\n '-D', 'NES_MIRRORING=0', // horizontal mirroring\n ],\n extra_link_files: ['crt0.o', 'neslib2.lib', 'neslib2.cfg', 'nesbanked.cfg'],\n wiz_rom_ext: '.nes',\n },\n 'apple2': {\n arch: '6502',\n define: ['__APPLE2__'],\n cfgfile: 'apple2.cfg',\n libargs: [ '--lib-path', '/share/target/apple2/drv', 'apple2.lib'],\n __CODE_RUN__: 16384,\n code_start: 0x803,\n acmeargs: ['-f', 'apple'],\n },\n 'apple2-e': {\n arch: '6502',\n define: ['__APPLE2__'],\n cfgfile: 'apple2.cfg',\n libargs: ['apple2.lib'],\n acmeargs: ['-f', 'apple'],\n },\n 'atari8-800xl.disk': {\n arch: '6502',\n define: ['__ATARI__'],\n cfgfile: 'atari.cfg',\n libargs: ['atari.lib'],\n fastbasic_cfgfile: 'fastbasic-cart.cfg',\n },\n 'atari8-800xl': {\n arch: '6502',\n define: ['__ATARI__'],\n cfgfile: 'atari-cart.cfg',\n libargs: ['atari.lib', '-D', '__CARTFLAGS__=4'],\n fastbasic_cfgfile: 'fastbasic-cart.cfg',\n },\n 'atari8-800': {\n arch: '6502',\n define: ['__ATARI__'],\n cfgfile: 'atari-cart.cfg',\n libargs: ['atari.lib', '-D', '__CARTFLAGS__=4'],\n fastbasic_cfgfile: 'fastbasic-cart.cfg',\n },\n 'atari8-5200': {\n arch: '6502',\n define: ['__ATARI5200__'],\n cfgfile: 'atari5200.cfg',\n libargs: ['atari5200.lib', '-D', '__CARTFLAGS__=255'],\n fastbasic_cfgfile: 'fastbasic-cart.cfg',\n },\n 'verilog': {\n arch: 'verilog',\n extra_compile_files: ['8bitworkshop.v'],\n },\n 'astrocade': {\n arch: 'z80',\n code_start: 0x2000,\n rom_size: 0x2000,\n data_start: 0x4e10,\n data_size: 0x1f0,\n stack_end: 0x5000,\n },\n 'astrocade-arcade': {\n arch: 'z80',\n code_start: 0x0000,\n rom_size: 0x4000,\n data_start: 0x7de0,\n data_size: 0x220,\n stack_end: 0x8000,\n },\n 'astrocade-bios': {\n arch: 'z80',\n code_start: 0x0000,\n rom_size: 0x2000,\n data_start: 0x4fce,\n data_size: 50,\n stack_end: 0x4fce,\n },\n 'atari7800': {\n arch: '6502',\n define: ['__ATARI7800__'],\n cfgfile: 'atari7800.cfg',\n libargs: ['crt0.o', 'none.lib'],\n extra_link_files: ['crt0.o', 'atari7800.cfg'],\n },\n 'c64': {\n arch: '6502',\n define: ['__CBM__', '__C64__'],\n cfgfile: 'c64.cfg', // SYS 2061\n libargs: ['c64.lib'],\n acmeargs: ['-f', 'cbm'],\n //extra_link_files: ['c64-cart.cfg'],\n },\n 'vic20': {\n arch: '6502',\n define: ['__CBM__', '__VIC20__'],\n cfgfile: 'vic20.cfg',\n libargs: ['vic20.lib'],\n acmeargs: ['-f', 'cbm'],\n //extra_link_files: ['c64-cart.cfg'],\n },\n 'kim1': {\n arch: '6502',\n },\n 'vectrex': {\n arch: '6809',\n code_start: 0x0,\n rom_size: 0x8000,\n data_start: 0xc880,\n data_size: 0x380,\n stack_end: 0xcc00,\n extra_compile_files: ['assert.h','cmoc.h','stdarg.h','vectrex.h','stdlib.h','bios.h'],\n extra_link_files: ['vectrex.scr', 'libcmoc-crt-vec.a', 'libcmoc-std-vec.a'],\n extra_compile_args: ['--vectrex'],\n extra_link_args: ['-svectrex.scr', '-lcmoc-crt-vec', '-lcmoc-std-vec'],\n },\n 'x86': { \n arch: 'x86',\n },\n 'zx': {\n arch: 'z80',\n code_start: 0x5ccb,\n rom_size: 0xff58-0x5ccb,\n data_start: 0xf000,\n data_size: 0xfe00-0xf000,\n stack_end: 0xff58,\n extra_link_args: ['crt0-zx.rel'],\n extra_link_files: ['crt0-zx.rel', 'crt0-zx.lst'],\n },\n 'devel-6502': {\n arch: '6502',\n cfgfile: 'devel-6502.cfg',\n libargs: ['crt0.o', 'none.lib'],\n extra_link_files: ['crt0.o', 'devel-6502.cfg'],\n },\n // https://github.com/cpcitor/cpc-dev-tool-chain\n 'cpc.rslib': {\n arch: 'z80',\n code_start: 0x4000,\n rom_size: 0xb100-0x4000,\n data_start: 0xb100,\n data_size: 0xb100-0xc000,\n stack_end: 0xc000,\n extra_compile_files: ['cpcrslib.h'],\n extra_link_args: ['crt0-cpc.rel', 'cpcrslib.lib'],\n extra_link_files: ['crt0-cpc.rel', 'crt0-cpc.lst', 'cpcrslib.lib', 'cpcrslib.lst'],\n },\n // https://lronaldo.github.io/cpctelera/ (TODO)\n 'cpc': {\n arch: 'z80',\n code_start: 0x4000,\n rom_size: 0xb100-0x4000,\n data_start: 0xb100,\n data_size: 0xb100-0xc000,\n stack_end: 0xc000,\n extra_compile_files: ['cpctelera.h'],\n extra_link_args: ['crt0-cpc.rel', 'cpctelera.lib'],\n extra_link_files: ['crt0-cpc.rel', 'crt0-cpc.lst', 'cpctelera.lib', 'cpctelera.lst'],\n },\n 'pce': {\n arch: 'huc6280',\n define: ['__PCE__'],\n cfgfile: 'pce.cfg',\n libargs: ['pce.lib', '-D', '__CARTSIZE__=0x8000'],\n },\n 'exidy': {\n define: ['__EXIDY__'],\n cfgfile: 'exidy.cfg',\n libargs: ['crt0.o', 'none.lib'],\n extra_link_files: ['crt0.o', 'exidy.cfg'],\n //extra_compile_files: ['exidy.h'],\n },\n };\n \n PLATFORM_PARAMS['sms-sms-libcv'] = PLATFORM_PARAMS['sms-sg1000-libcv'];\n PLATFORM_PARAMS['sms-gg-libcv'] = PLATFORM_PARAMS['sms-sms-libcv'];\n ", "import { convertDataToUint8Array, getBasePlatform } from \"../common/util\";\nimport { WorkerBuildStep, WorkerError, WorkerErrorResult, WorkerMessage, WorkerResult, WorkingStore } from \"../common/workertypes\";\nimport { PLATFORM_PARAMS } from \"./platforms\";\nimport { TOOLS } from \"./workertools\";\n\n/// working file store and build steps\n\nconst PSRC = \"../../src/\";\nexport const PWORKER = PSRC + \"worker/\";\n\nexport type FileData = string | Uint8Array;\n\nexport type FileEntry = {\n path: string\n encoding: string\n data: FileData\n ts: number\n};\n\nexport type BuildOptions = {\n mainFilePath: string,\n processFn?: (s: string, d: FileData) => FileData\n};\n\n// TODO\nexport type BuildStepResult = WorkerResult | WorkerNextToolResult;\n\nexport interface WorkerNextToolResult {\n nexttool?: string\n linktool?: string\n path?: string\n args: string[]\n files: string[]\n bblines?: boolean\n}\n\nexport interface BuildStep extends WorkerBuildStep {\n files?: string[]\n args?: string[]\n nextstep?: BuildStep\n linkstep?: BuildStep\n params?\n result?: BuildStepResult\n code?\n prefix?\n maxts?\n debuginfo?\n};\n\n///\n\nexport class FileWorkingStore implements WorkingStore {\n workfs: { [path: string]: FileEntry } = {};\n workerseq: number = 0;\n items: {};\n\n constructor() {\n this.reset();\n }\n reset() {\n this.workfs = {};\n this.newVersion();\n }\n currentVersion() {\n return this.workerseq;\n }\n newVersion() {\n let ts = new Date().getTime();\n if (ts <= this.workerseq)\n ts = ++this.workerseq;\n return ts;\n }\n putFile(path: string, data: FileData): FileEntry {\n var encoding = (typeof data === 'string') ? 'utf8' : 'binary';\n var entry = this.workfs[path];\n if (!entry || !compareData(entry.data, data) || entry.encoding != encoding) {\n this.workfs[path] = entry = { path: path, data: data, encoding: encoding, ts: this.newVersion() };\n console.log('+++', entry.path, entry.encoding, entry.data.length, entry.ts);\n }\n return entry;\n }\n hasFile(path: string) {\n return this.workfs[path] != null;\n }\n getFileData(path: string): FileData {\n return this.workfs[path] && this.workfs[path].data;\n }\n getFileAsString(path: string): string {\n let data = this.getFileData(path);\n if (data != null && typeof data !== 'string')\n throw new Error(`${path}: expected string`)\n return data as string; // TODO\n }\n getFileEntry(path: string): FileEntry {\n return this.workfs[path];\n }\n setItem(key: string, value: object) {\n this.items[key] = value;\n }\n}\n\nexport var store = new FileWorkingStore();\n\n///\n\nexport function errorResult(msg: string): WorkerErrorResult {\n return { errors: [{ line: 0, msg: msg }] };\n}\n\nexport class Builder {\n steps: BuildStep[] = [];\n startseq: number = 0;\n\n // returns true if file changed during this build step\n wasChanged(entry: FileEntry): boolean {\n return entry.ts > this.startseq;\n }\n async executeBuildSteps(): Promise<WorkerResult> {\n this.startseq = store.currentVersion();\n var linkstep: BuildStep = null;\n while (this.steps.length) {\n var step = this.steps.shift(); // get top of array\n var platform = step.platform;\n var [tool, remoteTool] = step.tool.split(':', 2);\n var toolfn = TOOLS[tool];\n if (!toolfn) {\n throw Error(`no tool named \"${tool}\"`);\n }\n if (remoteTool) {\n step.tool = remoteTool;\n }\n step.params = PLATFORM_PARAMS[getBasePlatform(platform)];\n try {\n step.result = await toolfn(step);\n } catch (e) {\n console.log(\"EXCEPTION\", e, e.stack);\n return errorResult(e + \"\"); // TODO: catch errors already generated?\n }\n if (step.result) {\n (step.result as any).params = step.params; // TODO: type check\n if (step.debuginfo) {\n let r = step.result as any; // TODO\n if (!r.debuginfo) r.debuginfo = {};\n Object.assign(r.debuginfo, step.debuginfo);\n }\n // errors? return them\n if ('errors' in step.result && step.result.errors.length) {\n applyDefaultErrorPath(step.result.errors, step.path);\n return step.result;\n }\n // if we got some output, return it immediately\n if ('output' in step.result && step.result.output) {\n return step.result;\n }\n // combine files with a link tool?\n if ('linktool' in step.result) {\n // add to existing link step\n if (linkstep) {\n linkstep.files = linkstep.files.concat(step.result.files);\n linkstep.args = linkstep.args.concat(step.result.args);\n } else {\n linkstep = {\n tool: step.result.linktool,\n platform: platform,\n files: step.result.files,\n args: step.result.args\n };\n }\n linkstep.debuginfo = step.debuginfo; // TODO: multiple debuginfos\n }\n // process with another tool?\n if ('nexttool' in step.result) {\n var asmstep: BuildStep = {\n tool: step.result.nexttool,\n platform: platform,\n ...step.result\n }\n this.steps.push(asmstep);\n }\n // process final step?\n if (this.steps.length == 0 && linkstep) {\n this.steps.push(linkstep);\n linkstep = null;\n }\n }\n }\n }\n async handleMessage(data: WorkerMessage): Promise<WorkerResult> {\n this.steps = [];\n // file updates\n if (data.updates) {\n data.updates.forEach((u) => store.putFile(u.path, u.data));\n }\n // object update\n if (data.setitems) {\n data.setitems.forEach((i) => store.setItem(i.key, i.value));\n }\n // build steps\n if (data.buildsteps) {\n this.steps.push.apply(this.steps, data.buildsteps);\n }\n // single-file\n if (data.code) {\n this.steps.push(data as BuildStep); // TODO: remove cast\n }\n // execute build steps\n if (this.steps.length) {\n var result = await this.executeBuildSteps();\n return result ? result : { unchanged: true };\n }\n // TODO: cache results\n // message not recognized\n console.log(\"Unknown message\", data);\n }\n}\n\nfunction applyDefaultErrorPath(errors: WorkerError[], path: string) {\n if (!path) return;\n for (var i = 0; i < errors.length; i++) {\n var err = errors[i];\n if (!err.path && err.line) err.path = path;\n }\n}\n\nfunction compareData(a: FileData, b: FileData): boolean {\n if (a.length != b.length) return false;\n if (typeof a === 'string' && typeof b === 'string') {\n return a == b;\n } else {\n for (var i = 0; i < a.length; i++) {\n //if (a[i] != b[i]) console.log('differ at byte',i,a[i],b[i]);\n if (a[i] != b[i]) return false;\n }\n return true;\n }\n}\n\nexport const builder = new Builder();\n\nvar _t1;\nexport function starttime() { _t1 = new Date(); }\nexport function endtime(msg) { var _t2 = new Date(); console.log(msg, _t2.getTime() - _t1.getTime(), \"ms\"); }\n\n///\n\nexport function putWorkFile(path: string, data: FileData) {\n return store.putFile(path, data);\n}\n\nexport function getWorkFileAsString(path: string): string {\n return store.getFileAsString(path);\n}\n\nexport function populateEntry(fs, path: string, entry: FileEntry, options: BuildOptions) {\n var data = entry.data;\n if (options && options.processFn) {\n data = options.processFn(path, data);\n }\n // create subfolders\n var toks = path.split('/');\n if (toks.length > 1) {\n for (var i = 0; i < toks.length - 1; i++)\n try {\n fs.mkdir(toks[i]);\n } catch (e) { }\n }\n // write file\n fs.writeFile(path, data, { encoding: entry.encoding });\n var time = new Date(entry.ts);\n fs.utime(path, time, time);\n console.log(\"<<<\", path, entry.data.length);\n}\n\n// can call multiple times (from populateFiles)\nexport function gatherFiles(step: BuildStep, options?: BuildOptions): number {\n var maxts = 0;\n if (step.files) {\n for (var i = 0; i < step.files.length; i++) {\n var path = step.files[i];\n var entry = store.workfs[path];\n if (!entry) {\n throw new Error(\"No entry for path '\" + path + \"'\");\n } else {\n maxts = Math.max(maxts, entry.ts);\n }\n }\n }\n else if (step.code) {\n var path = step.path ? step.path : options.mainFilePath; // TODO: what if options null\n if (!path) throw Error(\"need path or mainFilePath\");\n var code = step.code;\n var entry = putWorkFile(path, code);\n step.path = path;\n step.files = [path];\n maxts = entry.ts;\n }\n else if (step.path) {\n var path = step.path;\n var entry = store.workfs[path];\n maxts = entry.ts;\n step.files = [path];\n }\n if (step.path && !step.prefix) {\n step.prefix = getPrefix(step.path);\n }\n step.maxts = maxts;\n return maxts;\n}\n\nexport function getPrefix(s: string): string {\n var pos = s.lastIndexOf('.');\n return (pos > 0) ? s.substring(0, pos) : s;\n}\n\nexport function populateFiles(step: BuildStep, fs, options?: BuildOptions) {\n gatherFiles(step, options);\n if (!step.files) throw Error(\"call gatherFiles() first\");\n for (var i = 0; i < step.files.length; i++) {\n var path = step.files[i];\n populateEntry(fs, path, store.workfs[path], options);\n }\n}\n\nexport function populateExtraFiles(step: BuildStep, fs, extrafiles) {\n if (extrafiles) {\n for (var i = 0; i < extrafiles.length; i++) {\n var xfn = extrafiles[i];\n // is this file cached?\n if (store.workfs[xfn]) {\n fs.writeFile(xfn, store.workfs[xfn].data, { encoding: 'binary' });\n continue;\n }\n // fetch from network\n var xpath = \"lib/\" + getBasePlatform(step.platform) + \"/\" + xfn;\n var xhr = new XMLHttpRequest();\n xhr.responseType = 'arraybuffer';\n xhr.open(\"GET\", PWORKER + xpath, false); // synchronous request\n xhr.send(null);\n if (xhr.response && xhr.status == 200) {\n var data = new Uint8Array(xhr.response);\n fs.writeFile(xfn, data, { encoding: 'binary' });\n putWorkFile(xfn, data);\n console.log(\":::\", xfn, data.length);\n } else {\n throw Error(\"Could not load extra file \" + xpath);\n }\n }\n }\n}\n\nexport function staleFiles(step: BuildStep, targets: string[]) {\n if (!step.maxts) throw Error(\"call populateFiles() first\");\n // see if any target files are more recent than inputs\n for (var i = 0; i < targets.length; i++) {\n var entry = store.workfs[targets[i]];\n if (!entry || step.maxts > entry.ts)\n return true;\n }\n console.log(\"unchanged\", step.maxts, targets);\n return false;\n}\n\nexport function anyTargetChanged(step: BuildStep, targets: string[]) {\n if (!step.maxts) throw Error(\"call populateFiles() first\");\n // see if any target files are more recent than inputs\n for (var i = 0; i < targets.length; i++) {\n var entry = store.workfs[targets[i]];\n if (!entry || entry.ts > step.maxts)\n return true;\n }\n console.log(\"unchanged\", step.maxts, targets);\n return false;\n}\n\nexport function fixParamsWithDefines(path: string, params) {\n var libargs = params.libargs;\n if (path && libargs) {\n var code = getWorkFileAsString(path);\n if (code) {\n var oldcfgfile = params.cfgfile;\n var ident2index = {};\n // find all lib args \"IDENT=VALUE\"\n for (var i = 0; i < libargs.length; i++) {\n var toks = libargs[i].split('=');\n if (toks.length == 2) {\n ident2index[toks[0]] = i;\n }\n }\n // find #defines and replace them\n var re = /^[;]?#define\\s+(\\w+)\\s+(\\S+)/gmi; // TODO: empty string?\n var m;\n while (m = re.exec(code)) {\n var ident = m[1];\n var value = m[2];\n var index = ident2index[ident];\n if (index >= 0) {\n libargs[index] = ident + \"=\" + value;\n console.log('Using libargs', index, libargs[index]);\n // TODO: MMC3 mapper switch\n if (ident == 'NES_MAPPER' && value == '4') {\n params.cfgfile = 'nesbanked.cfg';\n console.log(\"using config file\", params.cfgfile);\n }\n } else if (ident == 'CFGFILE' && value) {\n params.cfgfile = value;\n } else if (ident == 'LIBARGS' && value) {\n params.libargs = value.split(',').filter((s) => { return s != ''; });\n console.log('Using libargs', params.libargs);\n } else if (ident == 'CC65_FLAGS' && value) {\n params.extra_compiler_args = value.split(',').filter((s) => { return s != ''; });\n console.log('Using compiler flags', params.extra_compiler_args);\n }\n }\n }\n }\n}\n\nexport function processEmbedDirective(code: string) {\n let re3 = /^\\s*#embed\\s+\"(.+?)\"/gm;\n // find #embed \"filename.bin\" and replace with C array data\n return code.replace(re3, (m, m1) => {\n let filename = m1;\n let filedata = store.getFileData(filename);\n let bytes = convertDataToUint8Array(filedata);\n if (!bytes) throw new Error('#embed: file not found: \"' + filename + '\"');\n let out = '';\n for (let i = 0; i < bytes.length; i++) {\n out += bytes[i].toString() + ',';\n }\n return out.substring(0, out.length-1);\n });\n}\n\n", "\n// WebAssembly module cache\n// for Emscripten-compiled functions\n\nimport { BuildStep, PWORKER, endtime, starttime } from \"./builder\";\n\n/// <reference types=\"emscripten\" />\nexport interface EmscriptenModule {\n callMain: (args: string[]) => void;\n FS: any; // TODO\n}\n\ndeclare function importScripts(path: string);\n\nconst ENVIRONMENT_IS_WEB = typeof window === 'object';\nconst ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\nexport const emglobal: any = ENVIRONMENT_IS_WORKER ? self : ENVIRONMENT_IS_WEB ? window : global;\n\n// simple CommonJS module loader\n// TODO: relative paths for dependencies\nif (!emglobal['require']) {\n emglobal['require'] = (modpath: string) => {\n if (modpath.endsWith('.js')) modpath = modpath.slice(-3);\n var modname = modpath.split('/').slice(-1)[0];\n var hasNamespace = emglobal[modname] != null;\n console.log('@@@ require', modname, modpath, hasNamespace);\n if (!hasNamespace) {\n exports = {};\n importScripts(`${modpath}.js`);\n }\n if (emglobal[modname] == null) {\n emglobal[modname] = exports; // TODO: always put in global scope?\n }\n return emglobal[modname]; // TODO\n }\n}\n\n// TODO: leaks memory even when disabled...\nvar _WASM_module_cache = {};\nvar CACHE_WASM_MODULES = true; // if false, use asm.js only\n\n// TODO: which modules need this?\nvar wasmMemory;\nexport function getWASMMemory() {\n if (wasmMemory == null) {\n wasmMemory = new WebAssembly.Memory({\n 'initial': 1024, // 64MB\n 'maximum': 16384, // 1024MB\n });\n }\n return wasmMemory;\n}\nexport function getWASMBinary(module_id: string) {\n return wasmBlob[module_id];\n}\nfunction getWASMModule(module_id: string) {\n var module = _WASM_module_cache[module_id];\n if (!module) {\n starttime();\n module = new WebAssembly.Module(wasmBlob[module_id]);\n if (CACHE_WASM_MODULES) {\n _WASM_module_cache[module_id] = module;\n delete wasmBlob[module_id];\n }\n endtime(\"module creation \" + module_id);\n }\n return module;\n}\n// function for use with instantiateWasm\nexport function moduleInstFn(module_id: string) {\n return function (imports, ri) {\n var mod = getWASMModule(module_id);\n var inst = new WebAssembly.Instance(mod, imports);\n ri(inst);\n return inst.exports;\n }\n}\n\nexport function execMain(step: BuildStep, mod, args: string[]) {\n starttime();\n var run = mod.callMain || mod.run; // TODO: run?\n run(args);\n endtime(step.tool);\n}\n\n/// asm.js / WASM / filesystem loading\n\nexport var fsMeta = {};\nvar fsBlob = {};\nvar wasmBlob = {};\n\n// load filesystems for CC65 and others asynchronously\nexport function loadFilesystem(name: string) {\n var xhr = new XMLHttpRequest();\n xhr.responseType = 'blob';\n xhr.open(\"GET\", PWORKER + \"fs/fs\" + name + \".data\", false); // synchronous request\n xhr.send(null);\n fsBlob[name] = xhr.response;\n xhr = new XMLHttpRequest();\n xhr.responseType = 'json';\n xhr.open(\"GET\", PWORKER + \"fs/fs\" + name + \".js.metadata\", false); // synchronous request\n xhr.send(null);\n fsMeta[name] = xhr.response;\n console.log(\"Loaded \" + name + \" filesystem\", fsMeta[name].files.length, 'files', fsBlob[name].size, 'bytes');\n}\n\nvar loaded = {};\nexport function load(modulename: string, debug?: boolean) {\n if (!loaded[modulename]) {\n importScripts(PWORKER + 'asmjs/' + modulename + (debug ? \".\" + debug + \".js\" : \".js\"));\n loaded[modulename] = 1;\n }\n}\nexport function loadWASMBinary(modulename: string) {\n if (!loaded[modulename]) {\n var xhr = new XMLHttpRequest();\n xhr.responseType = 'arraybuffer';\n xhr.open(\"GET\", PWORKER + \"wasm/\" + modulename + \".wasm\", false); // synchronous request\n xhr.send(null);\n if (xhr.response) {\n wasmBlob[modulename] = new Uint8Array(xhr.response);\n console.log(\"Loaded \" + modulename + \".wasm (\" + wasmBlob[modulename].length + \" bytes)\");\n loaded[modulename] = 1;\n } else {\n throw Error(\"Could not load WASM file \" + modulename + \".wasm\");\n }\n }\n return wasmBlob[modulename];\n}\nexport function loadWASM(modulename: string, debug?: boolean) {\n if (!loaded[modulename]) {\n importScripts(PWORKER + \"wasm/\" + modulename + (debug ? \".\" + debug + \".js\" : \".js\"));\n loadWASMBinary(modulename);\n }\n}\nexport function loadNative(modulename: string) {\n // detect WASM\n if (CACHE_WASM_MODULES && typeof WebAssembly === 'object') {\n loadWASM(modulename);\n } else {\n load(modulename);\n }\n}\n\n// mount the filesystem at /share\nexport function setupFS(FS, name: string) {\n var WORKERFS = FS.filesystems['WORKERFS'];\n if (name === '65-vector') name = '65-none'; // TODO\n if (name === '65-atari7800') name = '65-none'; // TODO\n if (name === '65-devel') name = '65-none'; // TODO\n if (name === '65-vcs') name = '65-atari2600'; // TODO\n if (name === '65-exidy') name = '65-none'; // TODO\n if (!fsMeta[name]) throw Error(\"No filesystem for '\" + name + \"'\");\n FS.mkdir('/share');\n FS.mount(WORKERFS, {\n packages: [{ metadata: fsMeta[name], blob: fsBlob[name] }]\n }, '/share');\n // fix for slow Blob operations by caching typed arrays\n // https://github.com/kripken/emscripten/blob/incoming/src/library_workerfs.js\n // https://bugs.chromium.org/p/chromium/issues/detail?id=349304#c30\n var reader = WORKERFS.reader;\n var blobcache = {};\n WORKERFS.stream_ops.read = function (stream, buffer, offset, length, position) {\n if (position >= stream.node.size) return 0;\n var contents = blobcache[stream.path];\n if (!contents) {\n var ab = reader.readAsArrayBuffer(stream.node.contents);\n contents = blobcache[stream.path] = new Uint8Array(ab);\n }\n if (position + length > contents.length)\n length = contents.length - position;\n for (var i = 0; i < length; i++) {\n buffer[offset + i] = contents[position + i];\n }\n return length;\n };\n}\n\nexport var print_fn = function (s: string) {\n console.log(s);\n //console.log(new Error().stack);\n}\n\nexport function setupStdin(fs, code: string) {\n var i = 0;\n fs.init(\n function () { return i < code.length ? code.charCodeAt(i++) : null; }\n );\n}\n", "\n// test.c(6) : warning 85: in function main unreferenced local variable : 'x'\n// main.a (4): error: Unknown Mnemonic 'xxx'.\n\nimport { SourceLine, WorkerError } from \"../common/workertypes\";\n\n// at 2: warning 190: ISO C forbids an empty source file\nexport const re_msvc = /[/]*([^( ]+)\\s*[(](\\d+)[)]\\s*:\\s*(.+?):\\s*(.*)/;\nexport const re_msvc2 = /\\s*(at)\\s+(\\d+)\\s*(:)\\s*(.*)/;\n\nexport function msvcErrorMatcher(errors: WorkerError[]) {\n return function (s: string) {\n var matches = re_msvc.exec(s) || re_msvc2.exec(s);\n if (matches) {\n var errline = parseInt(matches[2]);\n errors.push({\n line: errline,\n path: matches[1],\n //type:matches[3],\n msg: matches[4]\n });\n } else {\n console.log(s);\n }\n }\n}\n\nexport function makeErrorMatcher(errors: WorkerError[], regex, iline: number, imsg: number, mainpath: string, ifilename?: number) {\n return function (s) {\n var matches = regex.exec(s);\n if (matches) {\n errors.push({\n line: parseInt(matches[iline]) || 1,\n msg: matches[imsg],\n path: ifilename ? matches[ifilename] : mainpath\n });\n } else {\n console.log(\"??? \" + s);\n }\n }\n}\n\nexport function extractErrors(regex, strings: string[], path: string, iline, imsg, ifilename) {\n var errors = [];\n var matcher = makeErrorMatcher(errors, regex, iline, imsg, path, ifilename);\n for (var i = 0; i < strings.length; i++) {\n matcher(strings[i]);\n }\n return errors;\n}\n\nexport const re_crlf = /\\r?\\n/;\n// 1 %line 16+1 hello.asm\nexport const re_lineoffset = /\\s*(\\d+)\\s+[%]line\\s+(\\d+)\\+(\\d+)\\s+(.+)/;\n\nexport function parseListing(code: string,\n lineMatch, iline: number, ioffset: number, iinsns: number, icycles?: number,\n funcMatch?, segMatch?): SourceLine[] {\n var lines: SourceLine[] = [];\n var lineofs = 0;\n var segment = '';\n var func = '';\n var funcbase = 0;\n code.split(re_crlf).forEach((line, lineindex) => {\n let segm = segMatch && segMatch.exec(line);\n if (segm) { segment = segm[1]; }\n let funcm = funcMatch && funcMatch.exec(line);\n if (funcm) { funcbase = parseInt(funcm[1], 16); func = funcm[2]; }\n\n var linem = lineMatch.exec(line);\n if (linem && linem[1]) {\n var linenum = iline < 0 ? lineindex : parseInt(linem[iline]);\n var offset = parseInt(linem[ioffset], 16);\n var insns = linem[iinsns];\n var cycles: number = icycles ? parseInt(linem[icycles]) : null;\n var iscode = cycles > 0;\n if (insns) {\n lines.push({\n line: linenum + lineofs,\n offset: offset - funcbase,\n insns,\n cycles,\n iscode,\n segment,\n func\n });\n }\n } else {\n let m = re_lineoffset.exec(line);\n // TODO: check filename too\n if (m) {\n lineofs = parseInt(m[2]) - parseInt(m[1]) - parseInt(m[3]);\n }\n }\n });\n return lines;\n}\n\nexport function parseSourceLines(code: string, lineMatch, offsetMatch, funcMatch?, segMatch?) {\n var lines = [];\n var lastlinenum = 0;\n var segment = '';\n var func = '';\n var funcbase = 0;\n for (var line of code.split(re_crlf)) {\n let segm = segMatch && segMatch.exec(line);\n if (segm) { segment = segm[1]; }\n let funcm = funcMatch && funcMatch.exec(line);\n if (funcm) { funcbase = parseInt(funcm[1], 16); func = funcm[2]; }\n\n var linem = lineMatch.exec(line);\n if (linem && linem[1]) {\n lastlinenum = parseInt(linem[1]);\n } else if (lastlinenum) {\n var linem = offsetMatch.exec(line);\n if (linem && linem[1]) {\n var offset = parseInt(linem[1], 16);\n lines.push({\n line: lastlinenum,\n offset: offset - funcbase,\n segment,\n func\n });\n lastlinenum = 0;\n }\n }\n }\n return lines;\n}\n", "import { Segment, CodeListingMap, WorkerResult, WorkerError } from \"../../common/workertypes\";\nimport * as basic_compiler from '../../common/basic/compiler';\nimport { getRootBasePlatform, parseXMLPoorly } from \"../../common/util\";\nimport { EmscriptenModule, emglobal, execMain, load, loadNative, moduleInstFn, print_fn, setupFS } from \"../wasmutils\";\nimport { BuildStep, BuildStepResult, getWorkFileAsString, gatherFiles, staleFiles, populateFiles, putWorkFile, anyTargetChanged, populateExtraFiles } from \"../builder\";\nimport { msvcErrorMatcher, parseListing, makeErrorMatcher } from \"../listingutils\";\nimport { setupRequireFunction } from \"../workermain\";\n\nexport function translateShowdown(step: BuildStep): BuildStepResult {\n setupRequireFunction();\n load(\"showdown.min\");\n var showdown = emglobal['showdown'];\n var converter = new showdown.Converter({\n tables: 'true',\n smoothLivePreview: 'true',\n requireSpaceBeforeHeadingText: 'true',\n emoji: 'true',\n });\n var code = getWorkFileAsString(step.path);\n var html = converter.makeHtml(code);\n delete emglobal['require'];\n return {\n output: html\n };\n}\n\nexport function compileInform6(step: BuildStep): BuildStepResult {\n loadNative(\"inform\");\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.inf\" });\n var objpath = step.prefix + \".z5\";\n if (staleFiles(step, [objpath])) {\n var errorMatcher = msvcErrorMatcher(errors);\n var lstout = \"\";\n var match_fn = (s: string) => {\n if (s.indexOf(\"Error:\") >= 0) {\n errorMatcher(s);\n } else {\n lstout += s;\n lstout += \"\\n\";\n }\n }\n // TODO: step.path must end in '.inf' or error\n var args = ['-afjnops', '-v5', '-Cu', '-E1', '-k', '+/share/lib', step.path];\n var inform: EmscriptenModule = emglobal.inform({\n instantiateWasm: moduleInstFn('inform'),\n noInitialRun: true,\n //logReadFiles:true,\n print: match_fn,\n printErr: match_fn,\n });\n var FS = inform.FS;\n setupFS(FS, 'inform');\n populateFiles(step, FS);\n //fixParamsWithDefines(step.path, step.params);\n execMain(step, inform, args);\n if (errors.length)\n return { errors: errors };\n var objout = FS.readFile(objpath, { encoding: 'binary' });\n putWorkFile(objpath, objout);\n if (!anyTargetChanged(step, [objpath]))\n return;\n\n // parse debug XML\n var symbolmap = {};\n var segments: Segment[] = [];\n var entitymap = {\n // number -> string\n 'object': {}, 'property': {}, 'attribute': {}, 'constant': {}, 'global-variable': {}, 'routine': {},\n };\n var dbgout = FS.readFile(\"gameinfo.dbg\", { encoding: 'utf8' });\n var xmlroot = parseXMLPoorly(dbgout);\n //console.log(xmlroot);\n var segtype = \"ram\";\n xmlroot.children.forEach((node) => {\n switch (node.type) {\n case 'global-variable':\n case 'routine':\n var ident = node.children.find((c, v) => c.type == 'identifier').text;\n var address = parseInt(node.children.find((c, v) => c.type == 'address').text);\n symbolmap[ident] = address;\n entitymap[node.type][address] = ident;\n break;\n case 'object':\n case 'property':\n case 'attribute':\n var ident = node.children.find((c, v) => c.type == 'identifier').text;\n var value = parseInt(node.children.find((c, v) => c.type == 'value').text);\n //entitymap[node.type][ident] = value;\n entitymap[node.type][value] = ident;\n //symbolmap[ident] = address | 0x1000000;\n break;\n case 'story-file-section':\n var name = node.children.find((c, v) => c.type == 'type').text;\n var address = parseInt(node.children.find((c, v) => c.type == 'address').text);\n var endAddress = parseInt(node.children.find((c, v) => c.type == 'end-address').text);\n if (name == \"grammar table\") segtype = \"rom\";\n segments.push({ name: name, start: address, size: endAddress - address, type: segtype });\n }\n });\n // parse listing\n var listings: CodeListingMap = {};\n // 35 +00015 <*> call_vs long_19 location long_424 -> sp \n var lines = parseListing(lstout, /\\s*(\\d+)\\s+[+]([0-9a-f]+)\\s+([<*>]*)\\s*(\\w+)\\s+(.+)/i, -1, 2, 4);\n var lstpath = step.prefix + '.lst';\n listings[lstpath] = { lines: [], asmlines: lines, text: lstout };\n return {\n output: objout, //.slice(0),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments,\n debuginfo: entitymap,\n };\n }\n}\n\nexport function compileBASIC(step: BuildStep): WorkerResult {\n var jsonpath = step.path + \".json\";\n gatherFiles(step);\n if (staleFiles(step, [jsonpath])) {\n var parser = new basic_compiler.BASICParser();\n var code = getWorkFileAsString(step.path);\n try {\n var ast = parser.parseFile(code, step.path);\n } catch (e) {\n console.log(e);\n if (parser.errors.length == 0) throw e;\n }\n if (parser.errors.length) {\n return { errors: parser.errors };\n }\n // put AST into JSON (sans source locations) to see if it has changed\n var json = JSON.stringify(ast, (key, value) => { return (key == '$loc' ? undefined : value) });\n putWorkFile(jsonpath, json);\n if (anyTargetChanged(step, [jsonpath])) return {\n output: ast,\n listings: parser.getListings(),\n };\n }\n}\n\nexport function compileWiz(step: BuildStep): WorkerResult {\n loadNative(\"wiz\");\n var params = step.params;\n gatherFiles(step, { mainFilePath: \"main.wiz\" });\n var destpath = step.prefix + (params.wiz_rom_ext || \".bin\");\n var errors: WorkerError[] = [];\n if (staleFiles(step, [destpath])) {\n var wiz: EmscriptenModule = emglobal.wiz({\n instantiateWasm: moduleInstFn('wiz'),\n noInitialRun: true,\n print: print_fn,\n //test.wiz:2: error: expected statement, but got identifier `test`\n printErr: makeErrorMatcher(errors, /(.+?):(\\d+):\\s*(.+)/, 2, 3, step.path, 1),\n });\n var FS = wiz.FS;\n setupFS(FS, 'wiz');\n populateFiles(step, FS);\n populateExtraFiles(step, FS, params.extra_compile_files);\n const FWDIR = '/share/common';\n var args = [\n '-o', destpath,\n '-I', FWDIR + '/' + (params.wiz_inc_dir || getRootBasePlatform(step.platform)),\n '-s', 'wla',\n '--color=none',\n step.path];\n args.push('--system', params.wiz_sys_type || params.arch);\n execMain(step, wiz, args);\n if (errors.length)\n return { errors: errors };\n var binout = FS.readFile(destpath, { encoding: 'binary' });\n putWorkFile(destpath, binout);\n var dbgout = FS.readFile(step.prefix + '.sym', { encoding: 'utf8' });\n var symbolmap = {};\n for (var s of dbgout.split(\"\\n\")) {\n var toks = s.split(/ /);\n // 00:4008 header.basic_start\n if (toks && toks.length >= 2) {\n var tokrange = toks[0].split(':');\n var start = parseInt(tokrange[1], 16);\n var sym = toks[1];\n symbolmap[sym] = start;\n }\n }\n return {\n output: binout, //.slice(0),\n errors: errors,\n symbolmap: symbolmap,\n };\n }\n}\n\n", "\nimport { getRootBasePlatform } from \"../../common/util\";\nimport { CodeListingMap, WorkerError } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, gatherFiles, staleFiles, populateFiles, fixParamsWithDefines, putWorkFile, populateExtraFiles, store, populateEntry, anyTargetChanged, processEmbedDirective } from \"../builder\";\nimport { re_crlf, makeErrorMatcher } from \"../listingutils\";\nimport { loadNative, moduleInstFn, print_fn, setupFS, execMain, emglobal, EmscriptenModule } from \"../wasmutils\";\n\n\n/*\n000000r 1 .segment \"CODE\"\n000000r 1 .proc\t_rasterWait: near\n000000r 1 ; int main() { return mul2(2); }\n000000r 1 .dbg line, \"main.c\", 3\n000014r 1 \t.dbg\t func, \"main\", \"00\", extern, \"_main\"\n000000r 1 A2 00 ldx #$00\n00B700 1 BOOT2:\n00B700 1 A2 01 ldx #1 ;track\n00B725 1 00 IBLASTDRVN: .byte 0\n00B726 1 xx xx IBSECSZ: .res 2\n00BA2F 1 2A 2B E8 2C HEX \"2A2BE82C2D2E2F303132F0F133343536\"\n*/\nfunction parseCA65Listing(asmfn: string, code: string, symbols, segments, params, dbg: boolean, listings?: CodeListingMap) {\n var segofs = 0;\n var offset = 0;\n var dbgLineMatch = /^([0-9A-F]+)([r]?)\\s+(\\d+)\\s+[.]dbg\\s+(\\w+), \"([^\"]+)\", (.+)/;\n var funcLineMatch = /\"(\\w+)\", (\\w+), \"(\\w+)\"/;\n var insnLineMatch = /^([0-9A-F]+)([r]?)\\s{1,2}(\\d+)\\s{1,2}([0-9A-Frx ]{11})\\s+(.*)/;\n var segMatch = /[.]segment\\s+\"(\\w+)\"/i;\n var origlines = [];\n var lines = origlines;\n var linenum = 0;\n let curpath = asmfn || '';\n // TODO: only does .c functions, not all .s files\n for (var line of code.split(re_crlf)) {\n var dbgm = dbgLineMatch.exec(line);\n if (dbgm && dbgm[1]) {\n var dbgtype = dbgm[4];\n offset = parseInt(dbgm[1], 16);\n curpath = dbgm[5];\n // new file?\n if (curpath && listings) {\n let l = listings[curpath];\n if (!l) l = listings[curpath] = {lines:[]};\n lines = l.lines;\n }\n if (dbgtype == 'func') {\n var funcm = funcLineMatch.exec(dbgm[6]);\n if (funcm) {\n var funcofs = symbols[funcm[3]];\n if (typeof funcofs === 'number') {\n segofs = funcofs - offset;\n //console.log(funcm[3], funcofs, '-', offset);\n }\n }\n }\n }\n if (dbg && dbgm && dbgtype == 'line') {\n //console.log(dbgm[5], dbgm[6], offset, segofs);\n lines.push({\n path: dbgm[5],\n line: parseInt(dbgm[6]),\n offset: offset + segofs,\n insns: null\n });\n }\n let linem = insnLineMatch.exec(line);\n let topfile = linem && linem[3] == '1';\n if (topfile) {\n let insns = linem[4]?.trim() || '';\n // skip extra insns for macro expansions\n if (!(insns != '' && linem[5] == '')) {\n linenum++;\n }\n if (linem[1]) {\n var offset = parseInt(linem[1], 16);\n if (insns.length) {\n //console.log(dbg, curpath, linenum, offset, segofs, insns);\n if (!dbg) {\n lines.push({\n path: curpath,\n line: linenum,\n offset: offset + segofs,\n insns: insns,\n iscode: true // TODO: can't really tell unless we parse it\n });\n }\n } else {\n var sym = null;\n var label = linem[5];\n if (label?.endsWith(':')) {\n sym = label.substring(0, label.length-1);\n } else if (label?.toLowerCase().startsWith('.proc')) {\n sym = label.split(' ')[1];\n }\n if (sym && !sym.startsWith('@')) {\n var symofs = symbols[sym];\n if (typeof symofs === 'number') {\n segofs = symofs - offset;\n //console.log(sym, segofs, symofs, '-', offset);\n }\n }\n }\n }\n }\n }\n return origlines;\n}\n\nexport function assembleCA65(step: BuildStep): BuildStepResult {\n loadNative(\"ca65\");\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.s\" });\n var objpath = step.prefix + \".o\";\n var lstpath = step.prefix + \".lst\";\n if (staleFiles(step, [objpath, lstpath])) {\n var objout, lstout;\n var CA65: EmscriptenModule = emglobal.ca65({\n instantiateWasm: moduleInstFn('ca65'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: makeErrorMatcher(errors, /(.+?):(\\d+): (.+)/, 2, 3, step.path, 1),\n });\n var FS = CA65.FS;\n setupFS(FS, '65-' + getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n fixParamsWithDefines(step.path, step.params);\n var args = ['-v', '-g', '-I', '/share/asminc', '-o', objpath, '-l', lstpath, step.path];\n args.unshift.apply(args, [\"-D\", \"__8BITWORKSHOP__=1\"]);\n if (step.mainfile) {\n args.unshift.apply(args, [\"-D\", \"__MAIN__=1\"]);\n }\n execMain(step, CA65, args);\n if (errors.length) {\n let listings : CodeListingMap = {};\n // TODO? change extension to .lst\n //listings[step.path] = { lines:[], text:getWorkFileAsString(step.path) };\n return { errors, listings };\n }\n objout = FS.readFile(objpath, { encoding: 'binary' });\n lstout = FS.readFile(lstpath, { encoding: 'utf8' });\n putWorkFile(objpath, objout);\n putWorkFile(lstpath, lstout);\n }\n return {\n linktool: \"ld65\",\n files: [objpath, lstpath],\n args: [objpath]\n };\n}\n\nexport function linkLD65(step: BuildStep): BuildStepResult {\n loadNative(\"ld65\");\n var params = step.params;\n gatherFiles(step);\n var binpath = \"main\";\n if (staleFiles(step, [binpath])) {\n var errors = [];\n var LD65: EmscriptenModule = emglobal.ld65({\n instantiateWasm: moduleInstFn('ld65'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: function (s) { errors.push({ msg: s, line: 0 }); }\n });\n var FS = LD65.FS;\n setupFS(FS, '65-' + getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n populateExtraFiles(step, FS, params.extra_link_files);\n // populate .cfg file, if it is a custom one\n if (store.hasFile(params.cfgfile)) {\n populateEntry(FS, params.cfgfile, store.getFileEntry(params.cfgfile), null);\n }\n var libargs = params.libargs || [];\n var cfgfile = params.cfgfile;\n var args = ['--cfg-path', '/share/cfg',\n '--lib-path', '/share/lib',\n '-C', cfgfile,\n '-Ln', 'main.vice',\n //'--dbgfile', 'main.dbg', // TODO: get proper line numbers\n '-o', 'main',\n '-m', 'main.map'].concat(step.args, libargs);\n //console.log(args);\n execMain(step, LD65, args);\n if (errors.length)\n return { errors: errors };\n var aout = FS.readFile(\"main\", { encoding: 'binary' });\n var mapout = FS.readFile(\"main.map\", { encoding: 'utf8' });\n var viceout = FS.readFile(\"main.vice\", { encoding: 'utf8' });\n // correct binary for PCEngine\n if (step.platform == 'pce' && aout.length > 0x2000) {\n // move 8 KB from end to front\n let newrom = new Uint8Array(aout.length);\n newrom.set(aout.slice(aout.length - 0x2000), 0);\n newrom.set(aout.slice(0, aout.length - 0x2000), 0x2000);\n aout = newrom;\n }\n //var dbgout = FS.readFile(\"main.dbg\", {encoding:'utf8'});\n putWorkFile(\"main\", aout);\n putWorkFile(\"main.map\", mapout);\n putWorkFile(\"main.vice\", viceout);\n // return unchanged if no files changed\n if (!anyTargetChanged(step, [\"main\", \"main.map\", \"main.vice\"]))\n return;\n // parse symbol map (TODO: omit segments, constants)\n var symbolmap = {};\n for (var s of viceout.split(\"\\n\")) {\n var toks = s.split(\" \");\n if (toks[0] == 'al') {\n let ident = toks[2].substr(1);\n if (ident.length != 5 || !ident.startsWith('L')) { // no line numbers\n let ofs = parseInt(toks[1], 16);\n symbolmap[ident] = ofs;\n }\n }\n }\n var segments = [];\n // TODO: CHR, banks, etc\n let re_seglist = /(\\w+)\\s+([0-9A-F]+)\\s+([0-9A-F]+)\\s+([0-9A-F]+)\\s+([0-9A-F]+)/;\n let parseseglist = false;\n let m;\n for (let s of mapout.split('\\n')) {\n if (parseseglist && (m = re_seglist.exec(s))) {\n let seg = m[1];\n let start = parseInt(m[2], 16);\n let size = parseInt(m[4], 16);\n let type = '';\n // TODO: better id of ram/rom\n if (seg.startsWith('CODE') || seg == 'STARTUP' || seg == 'RODATA' || seg.endsWith('ROM')) type = 'rom';\n else if (seg == 'ZP' || seg == 'DATA' || seg == 'BSS' || seg.endsWith('RAM')) type = 'ram';\n segments.push({ name: seg, start, size, type });\n }\n if (s == 'Segment list:') parseseglist = true;\n if (s == '') parseseglist = false;\n }\n // build listings\n var listings: CodeListingMap = {};\n for (var fn of step.files) {\n if (fn.endsWith('.lst')) {\n var lstout = FS.readFile(fn, { encoding: 'utf8' });\n lstout = lstout.split('\\n\\n')[1] || lstout; // remove header\n putWorkFile(fn, lstout);\n //const asmpath = fn.replace(/\\.lst$/, '.ca65'); // TODO! could be .s\n let isECS = step.debuginfo?.systems?.Init != null; // TODO\n if (isECS) {\n var asmlines = [];\n var srclines = parseCA65Listing(fn, lstout, symbolmap, segments, params, true, listings);\n listings[fn] = {\n lines: [],\n text: lstout\n }\n } else {\n var asmlines = parseCA65Listing(fn, lstout, symbolmap, segments, params, false);\n var srclines = parseCA65Listing('', lstout, symbolmap, segments, params, true);\n listings[fn] = {\n asmlines: srclines.length ? asmlines : null,\n lines: srclines.length ? srclines : asmlines,\n text: lstout\n }\n }\n }\n }\n return {\n output: aout, //.slice(0),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\nexport function compileCC65(step: BuildStep): BuildStepResult {\n loadNative(\"cc65\");\n var params = step.params;\n // stderr\n var re_err1 = /(.*?):(\\d+): (.+)/;\n var errors: WorkerError[] = [];\n var errline = 0;\n function match_fn(s) {\n console.log(s);\n var matches = re_err1.exec(s);\n if (matches) {\n errline = parseInt(matches[2]);\n errors.push({\n line: errline,\n msg: matches[3],\n path: matches[1]\n });\n }\n }\n gatherFiles(step, { mainFilePath: \"main.c\" });\n var destpath = step.prefix + '.s';\n if (staleFiles(step, [destpath])) {\n var CC65: EmscriptenModule = emglobal.cc65({\n instantiateWasm: moduleInstFn('cc65'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: match_fn,\n });\n var FS = CC65.FS;\n setupFS(FS, '65-' + getRootBasePlatform(step.platform));\n populateFiles(step, FS, {\n mainFilePath: step.path,\n processFn: (path, code) => {\n if (typeof code === 'string') {\n code = processEmbedDirective(code);\n }\n return code;\n }\n });\n fixParamsWithDefines(step.path, params);\n var args = [\n '-I', '/share/include',\n '-I', '.',\n \"-D\", \"__8BITWORKSHOP__\",\n ];\n if (params.define) {\n params.define.forEach((x) => args.push('-D' + x));\n }\n if (step.mainfile) {\n args.unshift.apply(args, [\"-D\", \"__MAIN__\"]);\n }\n var customArgs = params.extra_compiler_args || ['-T', '-g', '-Oirs', '-Cl', '-W', '-pointer-sign,-no-effect'];\n args = args.concat(customArgs, args);\n args.push(step.path);\n //console.log(args);\n execMain(step, CC65, args);\n if (errors.length)\n return { errors: errors };\n var asmout = FS.readFile(destpath, { encoding: 'utf8' });\n putWorkFile(destpath, asmout);\n }\n return {\n nexttool: \"ca65\",\n path: destpath,\n args: [destpath],\n files: [destpath],\n };\n}\n\n", "\n// https://dev.to/ndesmic/building-a-minimal-wasi-polyfill-for-browsers-4nel\n// http://www.wasmtutor.com/webassembly-barebones-wasi\n// https://github.com/emscripten-core/emscripten/blob/c017fc2d6961962ee87ae387462a099242dfbbd2/src/library_wasi.js#L451\n// https://github.com/emscripten-core/emscripten/blob/c017fc2d6961962ee87ae387462a099242dfbbd2/src/library_fs.js\n// https://github.com/WebAssembly/wasi-libc/blob/main/libc-bottom-half/sources/preopens.c\n// https://fossies.org/linux/wasm3/source/extra/wasi_core.h\n// https://wasix.org/docs/api-reference/wasi/fd_read\n\nconst use_debug = true;\nconst debug = use_debug ? console.log : () => { };\nconst warning = console.log;\n\nexport enum FDType {\n UNKNOWN = 0,\n BLOCK_DEVICE = 1,\n CHARACTER_DEVICE = 2,\n DIRECTORY = 3,\n REGULAR_FILE = 4,\n SOCKET_DGRAM = 5,\n SOCKET_STREAM = 6,\n SYMBOLIC_LINK = 7,\n}\n\nexport enum FDRights {\n FD_DATASYNC = 1,\n FD_READ = 2,\n FD_SEEK = 4,\n FD_FDSTAT_SET_FLAGS = 8,\n FD_SYNC = 16,\n FD_TELL = 32,\n FD_WRITE = 64,\n FD_ADVISE = 128,\n FD_ALLOCATE = 256,\n PATH_CREATE_DIRECTORY = 512,\n PATH_CREATE_FILE = 1024,\n PATH_LINK_SOURCE = 2048,\n PATH_LINK_TARGET = 4096,\n PATH_OPEN = 8192,\n FD_READDIR = 16384,\n PATH_READLINK = 32768,\n PATH_RENAME_SOURCE = 65536,\n PATH_RENAME_TARGET = 131072,\n PATH_FILESTAT_GET = 262144,\n PATH_FILESTAT_SET_SIZE = 524288,\n PATH_FILESTAT_SET_TIMES = 1048576,\n FD_FILESTAT_GET = 2097152,\n FD_FILESTAT_SET_SIZE = 4194304,\n FD_FILESTAT_SET_TIMES = 8388608,\n PATH_SYMLINK = 16777216,\n PATH_REMOVE_DIRECTORY = 33554432,\n PATH_UNLINK_FILE = 67108864,\n POLL_FD_READWRITE = 134217728,\n SOCK_SHUTDOWN = 268435456,\n FD_ALL = 536870911, // TODO?\n}\n\nexport enum FDFlags {\n APPEND = 1,\n DSYNC = 2,\n NONBLOCK = 4,\n RSYNC = 8,\n SYNC = 16,\n}\n\nexport enum FDOpenFlags {\n CREAT = 1,\n DIRECTORY = 2,\n EXCL = 4,\n TRUNC = 8,\n}\n\nexport enum WASIErrors {\n SUCCESS = 0,\n TOOBIG = 1,\n ACCES = 2,\n ADDRINUSE = 3,\n ADDRNOTAVAIL = 4,\n AFNOSUPPORT = 5,\n AGAIN = 6,\n ALREADY = 7,\n BADF = 8,\n BADMSG = 9,\n BUSY = 10,\n CANCELED = 11,\n CHILD = 12,\n CONNABORTED = 13,\n CONNREFUSED = 14,\n CONNRESET = 15,\n DEADLK = 16,\n DESTADDRREQ = 17,\n DOM = 18,\n DQUOT = 19,\n EXIST = 20,\n FAULT = 21,\n FBIG = 22,\n HOSTUNREACH = 23,\n IDRM = 24,\n ILSEQ = 25,\n INPROGRESS = 26,\n INTR = 27,\n INVAL = 28,\n IO = 29,\n ISCONN = 30,\n ISDIR = 31,\n LOOP = 32,\n MFILE = 33,\n MLINK = 34,\n MSGSIZE = 35,\n MULTIHOP = 36,\n NAMETOOLONG = 37,\n NETDOWN = 38,\n NETRESET = 39,\n NETUNREACH = 40,\n NFILE = 41,\n NOBUFS = 42,\n NODEV = 43,\n NOENT = 44,\n NOEXEC = 45,\n NOLCK = 46,\n NOLINK = 47,\n NOMEM = 48,\n NOMSG = 49,\n NOPROTOOPT = 50,\n NOSPC = 51,\n NOSYS = 52,\n NOTCONN = 53,\n NOTDIR = 54,\n NOTEMPTY = 55,\n NOTRECOVERABLE = 56,\n NOTSOCK = 57,\n NOTSUP = 58,\n NOTTY = 59,\n NXIO = 60,\n OVERFLOW = 61,\n OWNERDEAD = 62,\n PERM = 63,\n PIPE = 64,\n PROTO = 65,\n PROTONOSUPPORT = 66,\n PROTOTYPE = 67,\n RANGE = 68,\n ROFS = 69,\n SPIPE = 70,\n SRCH = 71,\n STALE = 72,\n TIMEDOUT = 73,\n TXTBSY = 74,\n XDEV = 75,\n NOTCAPABLE = 76,\n}\n\n\n\nexport class WASIFileDescriptor {\n fdindex: number = -1;\n data: Uint8Array = new Uint8Array(16);\n flags: number = 0;\n size: number = 0;\n offset: number = 0;\n\n constructor(public name: string, public type: FDType, public rights: number) {\n this.rights = -1; // TODO?\n }\n ensureCapacity(size: number) {\n if (this.data.byteLength < size) {\n const newdata = new Uint8Array(size * 2); // TODO?\n newdata.set(this.data);\n this.data = newdata;\n }\n }\n write(chunk: Uint8Array) {\n this.ensureCapacity(this.offset + chunk.byteLength);\n this.data.set(chunk, this.offset);\n this.offset += chunk.byteLength;\n this.size = Math.max(this.size, this.offset);\n }\n read(chunk: Uint8Array) {\n const len = Math.min(chunk.byteLength, this.size - this.offset);\n chunk.set(this.data.subarray(this.offset, this.offset + len));\n this.offset += len;\n return len;\n }\n truncate() {\n this.size = 0;\n this.offset = 0;\n }\n llseek(offset: number, whence: number) {\n switch (whence) {\n case 0: // SEEK_SET\n this.offset = offset;\n break;\n case 1: // SEEK_CUR\n this.offset += offset;\n break;\n case 2: // SEEK_END\n this.offset = this.size + offset;\n break;\n }\n if (this.offset < 0) this.offset = 0;\n if (this.offset > this.size) this.offset = this.size;\n }\n getBytes() {\n return this.data.subarray(0, this.size);\n }\n getBytesAsString() {\n return new TextDecoder().decode(this.getBytes());\n }\n toString() {\n return `FD(${this.fdindex} \"${this.name}\" 0x${this.type.toString(16)} 0x${this.rights.toString(16)} ${this.offset}/${this.size}/${this.data.byteLength})`;\n }\n}\n\nclass WASIStreamingFileDescriptor extends WASIFileDescriptor {\n constructor(fdindex: number, name: string, type: FDType, rights: number,\n private stream: NodeJS.WritableStream) {\n super(name, type, rights);\n this.fdindex = fdindex;\n }\n write(chunk: Uint8Array) {\n this.stream.write(chunk);\n }\n}\n\nexport interface WASIFilesystem {\n getFile(name: string) : WASIFileDescriptor;\n}\n\nexport class WASIMemoryFilesystem implements WASIFilesystem {\n private parent: WASIFilesystem | null = null;\n private files: Map<string, WASIFileDescriptor> = new Map();\n private dirs: Map<string, WASIFileDescriptor> = new Map();\n\n constructor() {\n this.putDirectory(\"/\");\n }\n setParent(parent: WASIFilesystem) {\n this.parent = parent;\n }\n putDirectory(name: string, rights?: number) {\n if (!rights) rights = FDRights.PATH_OPEN | FDRights.PATH_CREATE_DIRECTORY | FDRights.PATH_CREATE_FILE;\n const dir = new WASIFileDescriptor(name, FDType.DIRECTORY, rights);\n this.dirs.set(name, dir);\n return dir;\n }\n putFile(name: string, data: string | Uint8Array, rights?: number) {\n if (typeof data === 'string') {\n data = new TextEncoder().encode(data);\n }\n if (!rights) rights = FDRights.FD_READ | FDRights.FD_WRITE;\n const file = new WASIFileDescriptor(name, FDType.REGULAR_FILE, rights);\n file.write(data);\n file.offset = 0;\n this.files.set(name, file);\n return file;\n }\n getFile(name: string) {\n let file = this.files.get(name);\n if (!file) {\n file = this.parent?.getFile(name);\n }\n return file;\n }\n}\n\nexport class WASIRunner {\n #instance : any; // TODO\n #memarr8: Uint8Array;\n #memarr32: Int32Array;\n #args: Uint8Array[] = [];\n #envvars: Uint8Array[] = [];\n\n stdin : WASIFileDescriptor;\n stdout : WASIFileDescriptor;\n stderr : WASIFileDescriptor;\n\n fds: WASIFileDescriptor[] = [];\n exited = false;\n errno = -1;\n fs = new WASIMemoryFilesystem();\n\n constructor() {\n this.createStdioBrowser();\n }\n exports() {\n return this.#instance.exports;\n }\n createStdioNode() {\n this.stdin = new WASIStreamingFileDescriptor(0, '<stdin>', FDType.CHARACTER_DEVICE, FDRights.FD_READ, process.stdin);\n this.stdout = new WASIStreamingFileDescriptor(1, '<stdout>', FDType.CHARACTER_DEVICE, FDRights.FD_WRITE, process.stdout);\n this.stderr = new WASIStreamingFileDescriptor(2, '<stderr>', FDType.CHARACTER_DEVICE, FDRights.FD_WRITE, process.stderr);\n this.fds[0] = this.stdin;\n this.fds[1] = this.stdout;\n this.fds[2] = this.stderr;\n }\n createStdioBrowser() {\n this.stdin = new WASIFileDescriptor('<stdin>', FDType.CHARACTER_DEVICE, FDRights.FD_READ);\n this.stdout = new WASIFileDescriptor('<stdout>', FDType.CHARACTER_DEVICE, FDRights.FD_WRITE);\n this.stderr = new WASIFileDescriptor('<stderr>', FDType.CHARACTER_DEVICE, FDRights.FD_WRITE);\n this.stdin.fdindex = 0;\n this.stdout.fdindex = 1;\n this.stderr.fdindex = 2;\n this.fds[0] = this.stdin;\n this.fds[1] = this.stdout;\n this.fds[2] = this.stderr;\n }\n initSync(wasmModule: WebAssembly.Module) {\n this.#instance = new WebAssembly.Instance(wasmModule, this.getImportObject());\n }\n loadSync(wasmSource: Uint8Array) {\n let wasmModule = new WebAssembly.Module(wasmSource);\n this.initSync(wasmModule);\n }\n async loadAsync(wasmSource: Uint8Array) {\n let wasmModule = await WebAssembly.compile(wasmSource);\n this.#instance = await WebAssembly.instantiate(wasmModule, this.getImportObject());\n }\n setArgs(args: string[]) {\n this.#args = args.map(arg => new TextEncoder().encode(arg + '\\0'));\n }\n addPreopenDirectory(name: string) {\n return this.openFile(name, FDOpenFlags.DIRECTORY | FDOpenFlags.CREAT);\n }\n openFile(path: string, o_flags: number, mode?: number): WASIFileDescriptor | number {\n let file = this.fs.getFile(path);\n mode = typeof mode == 'undefined' ? 438 /* 0666 */ : mode;\n if (o_flags & FDOpenFlags.CREAT) {\n if (file == null) {\n if (o_flags & FDOpenFlags.DIRECTORY) {\n file = this.fs.putDirectory(path);\n } else {\n file = this.fs.putFile(path, new Uint8Array(), FDRights.FD_ALL);\n }\n } else {\n if (o_flags & FDOpenFlags.TRUNC) { // truncate\n file.truncate();\n } else return WASIErrors.INVAL;\n }\n } else {\n if (file == null) return WASIErrors.NOSYS;\n if (o_flags & FDOpenFlags.DIRECTORY) { // check type\n if (file.type !== FDType.DIRECTORY) return WASIErrors.NOSYS;\n }\n if (o_flags & FDOpenFlags.EXCL) return WASIErrors.INVAL; // already exists\n if (o_flags & FDOpenFlags.TRUNC) { // truncate\n file.truncate();\n } else {\n file.llseek(0, 0); // seek to start\n }\n }\n file.fdindex = this.fds.length;\n this.fds.push(file);\n return file;\n }\n mem8() {\n if (!this.#memarr8?.byteLength) {\n this.#memarr8 = new Uint8Array(this.#instance.exports.memory.buffer);\n }\n return this.#memarr8;\n }\n mem32() {\n if (!this.#memarr32?.byteLength) {\n this.#memarr32 = new Int32Array(this.#instance.exports.memory.buffer);\n }\n return this.#memarr32;\n }\n run() {\n try {\n this.#instance.exports._start();\n if (!this.exited) {\n this.exited = true;\n this.errno = 0;\n }\n } catch (err) {\n if (!this.exited) throw err;\n }\n return this.getErrno();\n }\n initialize() {\n this.#instance.exports._initialize();\n return this.getErrno();\n }\n getImportObject() {\n return {\n \"wasi_snapshot_preview1\": this.getWASISnapshotPreview1(),\n \"env\": this.getEnv(),\n }\n }\n peek8(ptr: number) {\n return this.mem8()[ptr];\n }\n peek16(ptr: number) {\n return this.mem8()[ptr] | (this.mem8()[ptr + 1] << 8);\n }\n peek32(ptr: number) {\n return this.mem32()[ptr >>> 2];\n }\n poke8(ptr: number, val: number) {\n this.mem8()[ptr] = val;\n }\n poke16(ptr: number, val: number) {\n this.mem8()[ptr] = val;\n this.mem8()[ptr + 1] = val >> 8;\n }\n poke32(ptr: number, val: number) {\n this.mem32()[ptr >>> 2] = val;\n }\n poke64(ptr: number, val: number) {\n this.mem32()[ptr >>> 2] = val;\n this.mem32()[(ptr >>> 2) + 1] = 0;\n }\n pokeUTF8(str: string, ptr: number, maxlen: number) {\n const enc = new TextEncoder();\n const bytes = enc.encode(str);\n const len = Math.min(bytes.length, maxlen);\n this.mem8().set(bytes.subarray(0, len), ptr);\n }\n peekUTF8(ptr: number, maxlen: number) {\n const bytes = this.mem8().subarray(ptr, ptr + maxlen);\n const dec = new TextDecoder();\n return dec.decode(bytes);\n }\n getErrno() {\n return this.errno;\n //let errno_ptr = this.#instance.exports.__errno_location();\n //return this.peek32(errno_ptr);\n }\n poke_str_array_sizes(strs: Uint8Array[], count_ptr: number, buf_size_ptr: number) {\n this.poke32(count_ptr, strs.length);\n this.poke32(buf_size_ptr, strs.reduce((acc, arg) => acc + arg.length, 0));\n }\n poke_str_args(strs: Uint8Array[], argv_ptr: number, argv_buf_ptr: number) {\n let argv = argv_ptr;\n let argv_buf = argv_buf_ptr;\n for (let arg of this.#args) {\n this.poke32(argv, argv_buf);\n argv += 4;\n for (let i = 0; i < arg.length; i++) {\n this.poke8(argv_buf, arg[i]);\n argv_buf++;\n }\n }\n }\n args_sizes_get(argcount_ptr: number, argv_buf_size_ptr: number) {\n debug(\"args_sizes_get\", argcount_ptr, argv_buf_size_ptr);\n this.poke_str_array_sizes(this.#args, argcount_ptr, argv_buf_size_ptr);\n return 0;\n }\n args_get(argv_ptr: number, argv_buf_ptr: number) {\n debug(\"args_get\", argv_ptr, argv_buf_ptr);\n this.poke_str_args(this.#args, argv_ptr, argv_buf_ptr);\n return 0;\n }\n environ_sizes_get(environ_count_ptr: number, environ_buf_size_ptr: number) {\n debug(\"environ_sizes_get\", environ_count_ptr, environ_buf_size_ptr);\n this.poke_str_array_sizes(this.#envvars, environ_count_ptr, environ_buf_size_ptr);\n return 0;\n }\n environ_get(environ_ptr: number, environ_buf_ptr: number) {\n debug(\"environ_get\", environ_ptr, environ_buf_ptr);\n this.poke_str_args(this.#envvars, environ_ptr, environ_buf_ptr);\n return 0;\n }\n fd_write(fd, iovs, iovs_len, nwritten_ptr) {\n const stream = this.fds[fd];\n const iovecs = this.mem32().subarray(iovs >>> 2, (iovs + iovs_len * 8) >>> 2);\n let total = 0;\n for (let i = 0; i < iovs_len; i++) {\n const ptr = iovecs[i * 2];\n const len = iovecs[i * 2 + 1];\n const chunk = this.mem8().subarray(ptr, ptr + len);\n total += len;\n stream.write(chunk);\n }\n this.poke32(nwritten_ptr, total);\n debug(\"fd_write\", fd, iovs, iovs_len, '->', total);\n return 0;\n }\n fd_read(fd, iovs, iovs_len, nread_ptr) {\n const stream = this.fds[fd];\n const iovecs = this.mem32().subarray(iovs >>> 2, (iovs + iovs_len * 8) >>> 2);\n let total = 0;\n for (let i = 0; i < iovs_len; i++) {\n const ptr = iovecs[i * 2];\n const len = iovecs[i * 2 + 1];\n const chunk = this.mem8().subarray(ptr, ptr + len);\n total += stream.read(chunk);\n }\n this.poke32(nread_ptr, total);\n debug(\"fd_read\", fd, iovs, iovs_len, '->', total);\n return WASIErrors.SUCCESS;\n }\n fd_seek(fd: number, offset: number, whence: number, newoffset_ptr: number) {\n const file = this.fds[fd];\n if (typeof offset == 'bigint') offset = Number(offset);\n debug(\"fd_seek\", fd, offset, whence, file+\"\");\n if (file != null) {\n file.llseek(offset, whence);\n this.poke64(newoffset_ptr, file.offset);\n return WASIErrors.SUCCESS;\n }\n return WASIErrors.BADF;\n }\n fd_close(fd: number) {\n debug(\"fd_close\", fd);\n const file = this.fds[fd];\n if (file != null) {\n this.fds[fd] = null;\n return 0;\n }\n return WASIErrors.BADF;\n }\n proc_exit(errno: number) {\n debug(\"proc_exit\", errno);\n this.errno = errno;\n this.exited = true;\n }\n fd_prestat_get(fd: number, prestat_ptr: number) {\n const file = this.fds[fd];\n debug(\"fd_prestat_get\", fd, prestat_ptr, file?.name);\n if (file && file.type === FDType.DIRECTORY) {\n const enc_name = new TextEncoder().encode(file.name);\n this.poke8(prestat_ptr + 0, 0); // __WASI_PREOPENTYPE_DIR\n this.poke64(prestat_ptr + 8, enc_name.length);\n return WASIErrors.SUCCESS;\n }\n return WASIErrors.BADF;\n }\n fd_fdstat_get(fd: number, fdstat_ptr: number) {\n const file = this.fds[fd];\n debug(\"fd_fdstat_get\", fd, fdstat_ptr, file + \"\");\n if (file != null) {\n this.poke16(fdstat_ptr + 0, file.type); // fs_filetype\n this.poke16(fdstat_ptr + 2, file.flags); // fs_flags\n this.poke64(fdstat_ptr + 8, file.rights); // fs_rights_base\n this.poke64(fdstat_ptr + 16, file.rights); // fs_rights_inheriting\n return WASIErrors.SUCCESS;\n }\n return WASIErrors.BADF;\n }\n fd_prestat_dir_name(fd: number, path_ptr: number, path_len: number) {\n const file = this.fds[fd];\n debug(\"fd_prestat_dir_name\", fd, path_ptr, path_len);\n if (file != null) {\n this.pokeUTF8(file.name, path_ptr, path_len);\n return WASIErrors.SUCCESS;\n }\n return WASIErrors.INVAL;\n }\n path_open(dirfd: number, dirflags: number, path_ptr: number, path_len: number,\n o_flags: number, fs_rights_base: number, fs_rights_inheriting: number,\n fd_flags: number, fd_ptr: number)\n {\n const dir = this.fds[dirfd];\n if (dir == null) return WASIErrors.BADF;\n if (dir.type !== FDType.DIRECTORY) return WASIErrors.NOTDIR;\n const filename = this.peekUTF8(path_ptr, path_len);\n const path = dir.name + '/' + filename;\n const fd = this.openFile(path, o_flags, fd_flags);\n debug(\"path_open\", path, dirfd, dirflags, \n o_flags, //fs_rights_base, fs_rights_inheriting,\n fd_flags, fd_ptr, '->', fd + \"\");\n if (typeof fd === 'number') return fd; // error msg\n this.poke32(fd_ptr, fd.fdindex);\n return WASIErrors.SUCCESS;\n }\n random_get(ptr: number, len: number) {\n debug(\"random_get\", ptr, len);\n for (let i=0; i<len; i++) {\n // TODO: don't use for crypto\n this.poke8(ptr + i, Math.floor(Math.random() * 256));\n }\n return WASIErrors.SUCCESS;\n }\n path_filestat_get(dirfd: number, dirflags: number, path_ptr: number, path_len: number, filestat_ptr: number) {\n const dir = this.fds[dirfd];\n if (dir == null) return WASIErrors.BADF;\n if (dir.type !== FDType.DIRECTORY) return WASIErrors.NOTDIR;\n const filename = this.peekUTF8(path_ptr, path_len);\n const path = dir.name + '/' + filename;\n const fd = this.fs.getFile(path);\n console.log(\"path_filestat_get\", dir+\"\", path, filestat_ptr, '->', fd+\"\");\n if (!fd) return WASIErrors.NOENT;\n this.poke64(filestat_ptr, fd.fdindex); // dev\n this.poke64(filestat_ptr + 8, 0); // ino\n this.poke8(filestat_ptr + 16, fd.type); // filetype\n this.poke64(filestat_ptr + 24, 1); // nlink\n this.poke64(filestat_ptr + 32, fd.size); // size\n this.poke64(filestat_ptr + 40, 0); // atim\n this.poke64(filestat_ptr + 48, 0); // mtim\n this.poke64(filestat_ptr + 56, 0); // ctim\n }\n getWASISnapshotPreview1() {\n return {\n args_sizes_get: this.args_sizes_get.bind(this),\n args_get: this.args_get.bind(this),\n environ_sizes_get: this.environ_sizes_get.bind(this),\n environ_get: this.environ_get.bind(this),\n proc_exit: this.proc_exit.bind(this),\n path_open: this.path_open.bind(this),\n fd_prestat_get: this.fd_prestat_get.bind(this),\n fd_prestat_dir_name: this.fd_prestat_dir_name.bind(this),\n fd_fdstat_get: this.fd_fdstat_get.bind(this),\n fd_read: this.fd_read.bind(this),\n fd_write: this.fd_write.bind(this),\n fd_seek: this.fd_seek.bind(this),\n fd_close: this.fd_close.bind(this),\n path_filestat_get: this.path_filestat_get.bind(this),\n random_get: this.random_get.bind(this),\n fd_fdstat_set_flags() { warning(\"TODO: fd_fdstat_set_flags\"); return WASIErrors.NOTSUP; },\n fd_readdir() { warning(\"TODO: fd_readdir\"); return WASIErrors.NOTSUP; },\n path_unlink_file() { warning(\"TODO: path_unlink_file\"); return WASIErrors.NOTSUP; },\n clock_time_get() { warning(\"TODO: clock_time_get\"); return WASIErrors.NOTSUP; },\n fd_tell() { warning(\"TODO: fd_tell\"); return WASIErrors.NOTSUP; },\n }\n }\n getEnv() {\n return {\n __syscall_unlinkat() { warning('TODO: unlink'); return WASIErrors.NOTSUP; },\n }\n }\n}\n", "import { WASIRunner } from \"../../common/wasi/wasishim\";\nimport { CodeListingMap, WorkerError } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, populateFiles, putWorkFile, anyTargetChanged, store } from \"../builder\";\nimport { msvcErrorMatcher, re_crlf, re_msvc } from \"../listingutils\";\nimport { execMain, emglobal, EmscriptenModule, load, loadWASMBinary } from \"../wasmutils\";\n\nfunction parseDASMListing(lstpath: string, lsttext: string, listings: CodeListingMap, errors: WorkerError[], unresolved: {}) {\n // TODO: this gets very slow\n // TODO: macros that are on adjacent lines don't get offset addresses\n // 4 08ee\t\t a9 00\t start lda\t#01workermain.js:23:5\n let lineMatch = /\\s*(\\d+)\\s+(\\S+)\\s+([0-9a-f]+)\\s+([?0-9a-f][?0-9a-f ]+)?\\s+(.+)?/i;\n let equMatch = /\\bequ\\b/i;\n let macroMatch = /\\bMAC\\s+(\\S+)?/i;\n let lastline = 0;\n let macros = {};\n let lstline = 0;\n let lstlist = listings[lstpath];\n for (let line of lsttext.split(re_crlf)) {\n lstline++;\n let linem = lineMatch.exec(line + \" \");\n if (linem && linem[1] != null) {\n let linenum = parseInt(linem[1]);\n let filename = linem[2];\n let offset = parseInt(linem[3], 16);\n let insns = linem[4];\n let restline = linem[5];\n if (insns && insns.startsWith('?')) insns = null;\n // don't use listing yet\n if (lstlist && lstlist.lines) {\n lstlist.lines.push({\n line: lstline,\n offset: offset,\n insns: insns,\n iscode: true,\n });\n }\n // inside of a file?\n let lst = listings[filename];\n if (lst) {\n var lines = lst.lines;\n // look for MAC statement\n let macmatch = macroMatch.exec(restline);\n if (macmatch) {\n macros[macmatch[1]] = { line: parseInt(linem[1]), file: linem[2].toLowerCase() };\n }\n else if (insns && restline && !restline.match(equMatch)) {\n lines.push({\n line: linenum,\n offset: offset,\n insns: insns,\n iscode: restline[0] != '.'\n });\n }\n lastline = linenum;\n } else {\n // inside of macro?\n let mac = macros[filename.toLowerCase()];\n // macro invocation in main file\n if (mac && linenum == 0) {\n lines.push({\n line: lastline + 1,\n offset: offset,\n insns: insns,\n iscode: true\n });\n }\n if (insns && mac) {\n let maclst = listings[mac.file];\n if (maclst && maclst.lines) {\n maclst.lines.push({\n path: mac.file,\n line: mac.line + linenum,\n offset: offset,\n insns: insns,\n iscode: true\n });\n }\n // TODO: a listing file can't include other files\n } else {\n // inside of macro or include file\n if (insns && linem[3] && lastline > 0) {\n lines.push({\n line: lastline + 1,\n offset: offset,\n insns: null\n });\n }\n }\n }\n // TODO: better symbol test (word boundaries)\n // TODO: ignore IFCONST and IFNCONST usage\n for (let key in unresolved) {\n let l = restline || line;\n // find the identifier substring\n let pos = l.indexOf(key);\n if (pos >= 0) {\n // strip the comment, if any\n let cmt = l.indexOf(';');\n if (cmt < 0 || cmt > pos) {\n // make sure identifier is flanked by non-word chars\n if (new RegExp(\"\\\\b\" + key + \"\\\\b\").exec(l)) {\n errors.push({\n path: filename,\n line: linenum,\n msg: \"Unresolved symbol '\" + key + \"'\"\n });\n }\n }\n }\n }\n }\n let errm = re_msvc.exec(line);\n if (errm) {\n errors.push({\n path: errm[1],\n line: parseInt(errm[2]),\n msg: errm[4]\n })\n }\n }\n}\n\nvar re_usl = /(\\w+)\\s+0000\\s+[?][?][?][?]/;\n\nfunction parseSymbolMap(asym: string) {\n var symbolmap = {};\n for (var s of asym.split(\"\\n\")) {\n var toks = s.split(/\\s+/);\n if (toks && toks.length >= 2 && !toks[0].startsWith('-')) {\n symbolmap[toks[0]] = parseInt(toks[1], 16);\n }\n }\n return symbolmap;\n}\n\nexport function assembleDASM(step: BuildStep): BuildStepResult {\n load(\"dasm\");\n var unresolved = {};\n var errors = [];\n var errorMatcher = msvcErrorMatcher(errors);\n function match_fn(s: string) {\n // TODO: what if s is not string? (startsWith is not a function)\n var matches = re_usl.exec(s);\n if (matches) {\n var key = matches[1];\n if (key != 'NO_ILLEGAL_OPCODES') { // TODO\n unresolved[matches[1]] = 0;\n }\n } else if (s.startsWith(\"Warning:\")) {\n errors.push({ line: 0, msg: s.substr(9) });\n } else if (s.startsWith(\"unable \")) {\n errors.push({ line: 0, msg: s });\n } else if (s.startsWith(\"segment: \")) {\n errors.push({ line: 0, msg: \"Segment overflow: \" + s.substring(9) });\n } else if (s.toLowerCase().indexOf('error:') >= 0) {\n errors.push({ line: 0, msg: s.trim() });\n } else {\n errorMatcher(s);\n }\n }\n var Module: EmscriptenModule = emglobal.DASM({\n noInitialRun: true,\n print: match_fn\n });\n var FS = Module.FS;\n populateFiles(step, FS, {\n mainFilePath: 'main.a'\n });\n var binpath = step.prefix + '.bin';\n var lstpath = step.prefix + '.lst';\n var sympath = step.prefix + '.sym';\n execMain(step, Module, [step.path, '-f3',\n \"-l\" + lstpath,\n \"-o\" + binpath,\n \"-s\" + sympath]);\n var alst = FS.readFile(lstpath, { 'encoding': 'utf8' });\n // parse main listing, get errors and listings for each file\n var listings: CodeListingMap = {};\n //listings[lstpath] = {lines:[], text:alst};\n for (let path of step.files) {\n listings[path] = { lines: [] };\n }\n parseDASMListing(lstpath, alst, listings, errors, unresolved);\n if (errors.length) {\n return { errors: errors };\n }\n // read binary rom output and symbols\n var aout, asym;\n aout = FS.readFile(binpath);\n try {\n asym = FS.readFile(sympath, { 'encoding': 'utf8' });\n } catch (e) {\n console.log(e);\n errors.push({ line: 0, msg: \"No symbol table generated, maybe segment overflow?\" });\n return { errors: errors }\n }\n putWorkFile(binpath, aout);\n putWorkFile(lstpath, alst);\n putWorkFile(sympath, asym);\n // return unchanged if no files changed\n // TODO: what if listing or symbols change?\n if (!anyTargetChanged(step, [binpath/*, lstpath, sympath*/]))\n return;\n const symbolmap = parseSymbolMap(asym);\n // for bataribasic (TODO)\n if (step['bblines']) {\n let lst = listings[step.path];\n if (lst) {\n lst.asmlines = lst.lines;\n lst.text = alst;\n lst.lines = [];\n }\n }\n return {\n output: aout,\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n };\n}\n\nlet wasiModule: WebAssembly.Module | null = null;\n\nexport function assembleDASM2(step: BuildStep): BuildStepResult {\n const errors = [];\n if (!wasiModule) {\n wasiModule = new WebAssembly.Module(loadWASMBinary(\"dasm-wasisdk\"));\n }\n const binpath = 'a.out';\n const lstpath = step.prefix + '.lst';\n const sympath = step.prefix + '.sym';\n const wasi = new WASIRunner();\n wasi.initSync(wasiModule);\n for (let file of step.files) {\n wasi.fs.putFile(\"./\" + file, store.getFileData(file));\n }\n wasi.addPreopenDirectory(\".\");\n wasi.setArgs(['dasm', step.path, '-f3', \"-l\" + lstpath, \"-s\" + sympath]);\n try {\n wasi.run();\n } catch (e) {\n errors.push(e);\n }\n const stdout = wasi.fds[1].getBytesAsString();\n //const stderr = wasi.fds[2].getBytesAsString();\n const matcher = msvcErrorMatcher(errors);\n const unresolved = {};\n for (let line of stdout.split(\"\\n\")) {\n matcher(line);\n let m = re_usl.exec(line);\n if (m) {\n unresolved[m[1]] = 0;\n }\n }\n const alst = wasi.fs.getFile(\"./\" + lstpath).getBytesAsString();\n const listings: CodeListingMap = {};\n for (let path of step.files) {\n listings[path] = { lines: [] };\n }\n parseDASMListing(lstpath, alst, listings, errors, unresolved);\n if (errors.length) {\n return { errors: errors };\n }\n const asym = wasi.fs.getFile(\"./\" + sympath).getBytesAsString();\n const symbolmap = parseSymbolMap(asym);\n const output = wasi.fs.getFile(\"./\" + binpath).getBytes();\n return {\n output,\n errors,\n listings,\n symbolmap\n };\n}\n", "import { getBasePlatform } from \"../../common/util\";\nimport { BuildStep, populateFiles, populateExtraFiles, errorResult, processEmbedDirective } from \"../builder\";\nimport { makeErrorMatcher, extractErrors } from \"../listingutils\";\nimport { PLATFORM_PARAMS } from \"../platforms\";\nimport { load, print_fn, setupFS, execMain, emglobal, EmscriptenModule } from \"../wasmutils\";\n\nfunction makeCPPSafe(s: string): string {\n return s.replace(/[^A-Za-z0-9_]/g, '_');\n}\n\nexport function preprocessMCPP(step: BuildStep, filesys: string) {\n load(\"mcpp\");\n var platform = step.platform;\n var params = PLATFORM_PARAMS[getBasePlatform(platform)];\n if (!params) throw Error(\"Platform not supported: \" + platform);\n // <stdin>:2: error: Can't open include file \"foo.h\"\n var errors = [];\n var match_fn = makeErrorMatcher(errors, /<stdin>:(\\d+): (.+)/, 1, 2, step.path);\n var MCPP: EmscriptenModule = emglobal.mcpp({\n noInitialRun: true,\n noFSInit: true,\n print: print_fn,\n printErr: match_fn,\n });\n var FS = MCPP.FS;\n if (filesys) setupFS(FS, filesys);\n populateFiles(step, FS, {\n mainFilePath: step.path,\n processFn: (path, code) => {\n if (typeof code === 'string') {\n code = processEmbedDirective(code);\n }\n return code;\n }\n });\n populateExtraFiles(step, FS, params.extra_compile_files);\n // TODO: make configurable by other compilers\n var args = [\n \"-D\", \"__8BITWORKSHOP__\",\n \"-D\", \"__SDCC_z80\",\n \"-D\", makeCPPSafe(platform.toUpperCase()),\n \"-I\", \"/share/include\",\n \"-Q\",\n step.path, \"main.i\"];\n if (step.mainfile) {\n args.unshift.apply(args, [\"-D\", \"__MAIN__\"]);\n }\n let platform_def = (platform.toUpperCase() as any).replaceAll(/[^a-zA-Z0-9]/g, '_');\n args.unshift.apply(args, [\"-D\", `__PLATFORM_${platform_def}__`]);\n if (params.extra_preproc_args) {\n args.push.apply(args, params.extra_preproc_args);\n }\n execMain(step, MCPP, args);\n if (errors.length)\n return { errors: errors };\n var iout = FS.readFile(\"main.i\", { encoding: 'utf8' });\n iout = iout.replace(/^#line /gm, '\\n# ');\n try {\n var errout = FS.readFile(\"mcpp.err\", { encoding: 'utf8' });\n if (errout.length) {\n // //main.c:2: error: Can't open include file \"stdiosd.h\"\n var errors = extractErrors(/([^:]+):(\\d+): (.+)/, errout.split(\"\\n\"), step.path, 2, 3, 1);\n if (errors.length == 0) {\n errors = errorResult(errout).errors;\n }\n return { errors: errors };\n }\n } catch (e) {\n //\n }\n return { code: iout };\n}", "import { CodeListingMap } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, gatherFiles, staleFiles, populateFiles, putWorkFile, populateExtraFiles, anyTargetChanged, getWorkFileAsString } from \"../builder\";\nimport { parseListing, parseSourceLines, msvcErrorMatcher } from \"../listingutils\";\nimport { EmscriptenModule, emglobal, execMain, loadNative, moduleInstFn, print_fn, setupFS, setupStdin } from \"../wasmutils\";\nimport { preprocessMCPP } from \"./mcpp\";\n\nfunction hexToArray(s, ofs) {\n var buf = new ArrayBuffer(s.length / 2);\n var arr = new Uint8Array(buf);\n for (var i = 0; i < arr.length; i++) {\n arr[i] = parseInt(s.slice(i * 2 + ofs, i * 2 + ofs + 2), 16);\n }\n return arr;\n}\n\nfunction parseIHX(ihx, rom_start, rom_size, errors) {\n var output = new Uint8Array(new ArrayBuffer(rom_size));\n var high_size = 0;\n for (var s of ihx.split(\"\\n\")) {\n if (s[0] == ':') {\n var arr = hexToArray(s, 1);\n var count = arr[0];\n var address = (arr[1] << 8) + arr[2] - rom_start;\n var rectype = arr[3];\n //console.log(rectype,address.toString(16),count,arr);\n if (rectype == 0) {\n for (var i = 0; i < count; i++) {\n var b = arr[4 + i];\n output[i + address] = b;\n }\n if (i + address > high_size) high_size = i + address;\n } else if (rectype == 1) {\n break;\n } else {\n console.log(s); // unknown record type\n }\n }\n }\n // TODO: return ROM anyway?\n if (high_size > rom_size) {\n //errors.push({line:0, msg:\"ROM size too large: 0x\" + high_size.toString(16) + \" > 0x\" + rom_size.toString(16)});\n }\n return output;\n}\n\nexport function assembleSDASZ80(step: BuildStep): BuildStepResult {\n loadNative(\"sdasz80\");\n var objout, lstout, symout;\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.asm\" });\n var objpath = step.prefix + \".rel\";\n var lstpath = step.prefix + \".lst\";\n if (staleFiles(step, [objpath, lstpath])) {\n //?ASxxxx-Error-<o> in line 1 of main.asm null\n // <o> .org in REL area or directive / mnemonic error\n // ?ASxxxx-Error-<q> in line 1627 of cosmic.asm\n // <q> missing or improper operators, terminators, or delimiters\n var match_asm_re1 = / in line (\\d+) of (\\S+)/; // TODO\n var match_asm_re2 = / <\\w> (.+)/; // TODO\n var errline = 0;\n var errpath = step.path;\n var match_asm_fn = (s: string) => {\n var m = match_asm_re1.exec(s);\n if (m) {\n errline = parseInt(m[1]);\n errpath = m[2];\n } else {\n m = match_asm_re2.exec(s);\n if (m) {\n errors.push({\n line: errline,\n path: errpath,\n msg: m[1]\n });\n }\n }\n }\n var ASZ80: EmscriptenModule = emglobal.sdasz80({\n instantiateWasm: moduleInstFn('sdasz80'),\n noInitialRun: true,\n //logReadFiles:true,\n print: match_asm_fn,\n printErr: match_asm_fn,\n });\n var FS = ASZ80.FS;\n populateFiles(step, FS);\n execMain(step, ASZ80, ['-plosgffwy', step.path]);\n if (errors.length) {\n return { errors: errors };\n }\n objout = FS.readFile(objpath, { encoding: 'utf8' });\n lstout = FS.readFile(lstpath, { encoding: 'utf8' });\n putWorkFile(objpath, objout);\n putWorkFile(lstpath, lstout);\n }\n return {\n linktool: \"sdldz80\",\n files: [objpath, lstpath],\n args: [objpath]\n };\n //symout = FS.readFile(\"main.sym\", {encoding:'utf8'});\n}\n\nexport function linkSDLDZ80(step: BuildStep) {\n loadNative(\"sdldz80\");\n var errors = [];\n gatherFiles(step);\n var binpath = \"main.ihx\";\n if (staleFiles(step, [binpath])) {\n //?ASlink-Warning-Undefined Global '__divsint' referenced by module 'main'\n var match_aslink_re = /\\?ASlink-(\\w+)-(.+)/;\n var match_aslink_fn = (s: string) => {\n var matches = match_aslink_re.exec(s);\n if (matches) {\n errors.push({\n line: 0,\n msg: matches[2]\n });\n }\n }\n var params = step.params;\n var LDZ80: EmscriptenModule = emglobal.sdldz80({\n instantiateWasm: moduleInstFn('sdldz80'),\n noInitialRun: true,\n //logReadFiles:true,\n print: match_aslink_fn,\n printErr: match_aslink_fn,\n });\n var FS = LDZ80.FS;\n setupFS(FS, 'sdcc');\n populateFiles(step, FS);\n populateExtraFiles(step, FS, params.extra_link_files);\n // TODO: coleco hack so that -u flag works\n if (step.platform.startsWith(\"coleco\")) {\n FS.writeFile('crt0.rel', FS.readFile('/share/lib/coleco/crt0.rel', { encoding: 'utf8' }));\n FS.writeFile('crt0.lst', '\\n'); // TODO: needed so -u flag works\n }\n var args = ['-mjwxyu',\n '-i', 'main.ihx', // TODO: main?\n '-b', '_CODE=0x' + params.code_start.toString(16),\n '-b', '_DATA=0x' + params.data_start.toString(16),\n '-k', '/share/lib/z80',\n '-l', 'z80'];\n if (params.extra_link_args)\n args.push.apply(args, params.extra_link_args);\n args.push.apply(args, step.args);\n //console.log(args);\n execMain(step, LDZ80, args);\n if (errors.length) {\n return { errors: errors };\n }\n var hexout = FS.readFile(\"main.ihx\", { encoding: 'utf8' });\n var noiout = FS.readFile(\"main.noi\", { encoding: 'utf8' });\n putWorkFile(\"main.ihx\", hexout);\n putWorkFile(\"main.noi\", noiout);\n // return unchanged if no files changed\n if (!anyTargetChanged(step, [\"main.ihx\", \"main.noi\"]))\n return;\n // parse binary file\n var binout = parseIHX(hexout, params.rom_start !== undefined ? params.rom_start : params.code_start, params.rom_size, errors);\n if (errors.length) {\n return { errors: errors };\n }\n // parse listings\n var listings: CodeListingMap = {};\n for (var fn of step.files) {\n if (fn.endsWith('.lst')) {\n var rstout = FS.readFile(fn.replace('.lst', '.rst'), { encoding: 'utf8' });\n // 0000 21 02 00 [10] 52 \tld\thl, #2\n var asmlines = parseListing(rstout, /^\\s*([0-9A-F]{4})\\s+([0-9A-F][0-9A-F r]*[0-9A-F])\\s+\\[([0-9 ]+)\\]?\\s+(\\d+) (.*)/i, 4, 1, 2, 3);\n var srclines = parseSourceLines(rstout, /^\\s+\\d+ ;<stdin>:(\\d+):/i, /^\\s*([0-9A-F]{4})/i);\n putWorkFile(fn, rstout);\n // TODO: you have to get rid of all source lines to get asm listing\n listings[fn] = {\n asmlines: srclines.length ? asmlines : null,\n lines: srclines.length ? srclines : asmlines,\n text: rstout\n };\n }\n }\n // parse symbol map\n var symbolmap = {};\n for (var s of noiout.split(\"\\n\")) {\n var toks = s.split(\" \");\n if (toks[0] == 'DEF' && !toks[1].startsWith(\"A$\")) {\n symbolmap[toks[1]] = parseInt(toks[2], 16);\n }\n }\n // build segment map\n var seg_re = /^s__(\\w+)$/;\n var segments = [];\n // TODO: use stack params for stack segment\n for (let ident in symbolmap) {\n let m = seg_re.exec(ident);\n if (m) {\n let seg = m[1];\n let segstart = symbolmap[ident]; // s__SEG\n let segsize = symbolmap['l__' + seg]; // l__SEG\n if (segstart >= 0 && segsize > 0) {\n var type = null;\n if (['INITIALIZER', 'GSINIT', 'GSFINAL'].includes(seg)) type = 'rom';\n else if (seg.startsWith('CODE')) type = 'rom';\n else if (['DATA', 'INITIALIZED'].includes(seg)) type = 'ram';\n if (type == 'rom' || segstart > 0) // ignore HEADER0, CABS0, etc (TODO?)\n segments.push({ name: seg, start: segstart, size: segsize, type: type });\n }\n }\n }\n return {\n output: binout,\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\nexport function compileSDCC(step: BuildStep): BuildStepResult {\n\n gatherFiles(step, {\n mainFilePath: \"main.c\" // not used\n });\n var outpath = step.prefix + \".asm\";\n if (staleFiles(step, [outpath])) {\n var errors = [];\n var params = step.params;\n loadNative('sdcc');\n var SDCC: EmscriptenModule = emglobal.sdcc({\n instantiateWasm: moduleInstFn('sdcc'),\n noInitialRun: true,\n noFSInit: true,\n print: print_fn,\n printErr: msvcErrorMatcher(errors),\n //TOTAL_MEMORY:256*1024*1024,\n });\n var FS = SDCC.FS;\n populateFiles(step, FS);\n // load source file and preprocess\n var code = getWorkFileAsString(step.path);\n var preproc = preprocessMCPP(step, 'sdcc');\n if (preproc.errors) {\n return { errors: preproc.errors };\n }\n else code = preproc.code;\n // pipe file to stdin\n setupStdin(FS, code);\n setupFS(FS, 'sdcc');\n var args = ['--vc', '--std-sdcc99', '-mz80', //'-Wall',\n '--c1mode',\n //'--debug',\n //'-S', 'main.c',\n //'--asm=sdasz80',\n //'--reserve-regs-iy',\n '--less-pedantic',\n ///'--fomit-frame-pointer',\n //'--opt-code-speed',\n //'--max-allocs-per-node', '1000',\n //'--cyclomatic',\n //'--nooverlay',\n //'--nogcse',\n //'--nolabelopt',\n //'--noinvariant',\n //'--noinduction',\n //'--nojtbound',\n //'--noloopreverse',\n '-o', outpath];\n // if \"#pragma opt_code\" found do not disable optimziations\n if (!/^\\s*#pragma\\s+opt_code/m.exec(code)) {\n args.push.apply(args, [\n '--oldralloc',\n '--no-peep',\n '--nolospre'\n ]);\n }\n if (params.extra_compile_args) {\n args.push.apply(args, params.extra_compile_args);\n }\n execMain(step, SDCC, args);\n // TODO: preprocessor errors w/ correct file\n if (errors.length /* && nwarnings < msvc_errors.length*/) {\n return { errors: errors };\n }\n // massage the asm output\n var asmout = FS.readFile(outpath, { encoding: 'utf8' });\n asmout = \" .area _HOME\\n .area _CODE\\n .area _INITIALIZER\\n .area _DATA\\n .area _INITIALIZED\\n .area _BSEG\\n .area _BSS\\n .area _HEAP\\n\" + asmout;\n putWorkFile(outpath, asmout);\n }\n return {\n nexttool: \"sdasz80\",\n path: outpath,\n args: [outpath],\n files: [outpath],\n };\n}\n", "\ntype Endian = 'big' | 'little';\n\ntype Symbol = {\n value: number\n}\n\ntype AssemblerVar = {\n bits : number,\n toks : string[],\n endian? : Endian,\n iprel? : boolean,\n ipofs? : number,\n ipmul? : number,\n}\n\ntype AssemblerRuleSlice = {\n a : number; // argument index\n b : number; // bit index\n n : number; // # of bits\n}\n\ntype AssemblerRule = {\n fmt : string,\n bits : (string | number | AssemblerRuleSlice)[],\n // added at runtime\n re? : RegExp,\n prefix? : string,\n varlist? : string[]\n}\n\ntype AssemblerVarList = {[name:string] : AssemblerVar};\n\ntype AssemblerLine = {line:number, offset:number, nbits:number, insns?:string};\n\ntype AssemblerFixup = {\n sym:string,\n ofs:number,\n size:number;\n srcofs:number,\n dstofs:number,\n dstlen:number,\n line:number,\n iprel:boolean,\n ipofs:number,\n ipmul:number,\n endian:Endian\n};\n\ntype AssemblerSpec = {\n name : string,\n width : number,\n vars : AssemblerVarList,\n rules : AssemblerRule[]\n}\n\ntype AssemblerInstruction = {opcode:number, nbits : number};\ntype AssemblerErrorResult = {error:string};\ntype AssemblerLineResult = AssemblerErrorResult | AssemblerInstruction;\n\ntype AssemblerError = {msg:string, line:number};\n\ntype AssemblerState = {\n ip: number,\n line: number,\n origin: number,\n codelen: number,\n intermediate: any,\n output: number[],\n lines: AssemblerLine[],\n errors: AssemblerError[],\n fixups: AssemblerFixup[]\n}\n\nconst isError = (o: AssemblerLineResult): o is AssemblerErrorResult => (<AssemblerErrorResult>o).error !== undefined\n\nfunction hex(v:number, nd:number) {\n try {\n if (!nd) nd = 2;\n if (nd == 8) {\n return hex((v>>16)&0xffff,4) + hex(v&0xffff,4);\n }\n var s = v.toString(16).toUpperCase();\n while (s.length < nd)\n s = \"0\" + s;\n return s;\n } catch (e) {\n return v+\"\";\n }\n}\n\nfunction stringToData(s:string) : number[] {\n var data = [];\n for (var i=0; i<s.length; i++) {\n data[i] = s.charCodeAt(i);\n }\n return data;\n}\n\n\nexport class Assembler {\n spec : AssemblerSpec;\n ip = 0;\n origin = 0;\n linenum = 0;\n symbols : {[name:string] : Symbol} = {};\n errors : AssemblerError[] = [];\n outwords : number[] = [];\n asmlines : AssemblerLine[] = [];\n fixups : AssemblerFixup[] = [];\n width = 8;\n codelen = 0;\n aborted = false;\n \n constructor(spec? : AssemblerSpec) {\n this.spec = spec;\n if (spec) {\n this.preprocessRules();\n }\n }\n\n rule2regex(rule : AssemblerRule, vars : AssemblerVarList) {\n var s = rule.fmt;\n if (!s || !(typeof s === 'string'))\n throw Error('Each rule must have a \"fmt\" string field');\n if (!rule.bits || !(rule.bits instanceof Array))\n throw Error('Each rule must have a \"bits\" array field');\n var varlist = [];\n rule.prefix = s.split(/\\s+/)[0];\n s = s.replace(/\\+/g, '\\\\+');\n s = s.replace(/\\*/g, '\\\\*');\n s = s.replace(/\\s+/g, '\\\\s+');\n s = s.replace(/\\[/g, '\\\\[');\n s = s.replace(/\\]/g, '\\\\]');\n s = s.replace(/\\(/g, '\\\\(');\n s = s.replace(/\\)/g, '\\\\)');\n s = s.replace(/\\./g, '\\\\.');\n // TODO: more escapes?\n s = s.replace(/~\\w+/g, (varname:string) => {\n varname = varname.substr(1);\n var v = vars[varname];\n varlist.push(varname);\n if (!v)\n throw Error('Could not find variable definition for \"~' + varname + '\"');\n else if (v.toks)\n return '(\\\\w+)';\n else\n return '([0-9]+|[$][0-9a-f]+|\\\\w+)';\n });\n try {\n rule.re = new RegExp('^'+s+'$', 'i');\n } catch (e) {\n throw Error(\"Bad regex for rule \\\"\" + rule.fmt + \"\\\": /\" + s + \"/ -- \" + e);\n }\n rule.varlist = varlist;\n // TODO: check rule constraints\n return rule;\n }\n\n preprocessRules() {\n if (this.spec.width) {\n this.width = this.spec.width || 8;\n }\n for (var rule of this.spec.rules) {\n this.rule2regex(rule, this.spec.vars);\n }\n }\n warning(msg:string, line?:number) {\n this.errors.push({msg:msg, line:line?line:this.linenum});\n }\n fatal(msg:string, line?:number) {\n this.warning(msg, line);\n this.aborted = true;\n }\n fatalIf(msg?:string, line?:number) {\n if (msg) this.fatal(msg, line);\n }\n addBytes(result:AssemblerInstruction) {\n this.asmlines.push({\n line:this.linenum,\n offset:this.ip,\n nbits:result.nbits\n });\n var op = result.opcode;\n var nb = result.nbits/this.width;\n for (var i=0; i<nb; i++) {\n if (this.width < 32)\n this.outwords[this.ip++ - this.origin] = (op >> (nb-1-i)*this.width) & ((1<<this.width)-1);\n else\n this.outwords[this.ip++ - this.origin] = op;\n }\n }\n addWords(data:number[]) {\n this.asmlines.push({\n line:this.linenum,\n offset:this.ip,\n nbits:this.width*data.length\n });\n for (var i=0; i<data.length; i++) {\n if (this.width < 32)\n this.outwords[this.ip++ - this.origin] = data[i] & ((1<<this.width)-1);\n else\n this.outwords[this.ip++ - this.origin] = data[i];\n }\n }\n\n parseData(toks:string[]) : number[] {\n var data = [];\n for (var i=0; i<toks.length; i++) {\n data[i] = this.parseConst(toks[i]);\n }\n return data;\n }\n\n alignIP(align) {\n if (align < 1 || align > this.codelen)\n this.fatal(\"Invalid alignment value\");\n else\n this.ip = Math.floor((this.ip+align-1)/align)*align;\n }\n\n parseConst(s:string, nbits?:number) : number {\n // TODO: check bit length\n if (s && s[0] == '$')\n return parseInt(s.substr(1), 16);\n else\n return parseInt(s);\n }\n\n swapEndian(x: number, nbits: number) {\n var y = 0;\n while (nbits > 0) {\n var n = Math.min(nbits, this.width);\n var mask = (1 << n) - 1;\n y <<= n;\n y |= (x & mask);\n x >>>= n;\n nbits -= n;\n }\n return y;\n }\n\n buildInstruction(rule:AssemblerRule, m:string[]) : AssemblerLineResult {\n var opcode = 0;\n var oplen = 0;\n // iterate over each component of the rule output (\"bits\")\n for (let b of rule.bits) {\n let n,x;\n // is a string? then it's a bit constant\n // TODO\n if (typeof b === \"string\") {\n n = b.length;\n x = parseInt(b,2);\n } else {\n // is it a slice {a,b,n} or just a number?\n var index = typeof b === \"number\" ? b : b.a;\n // it's an indexed variable, look up its variable\n var id = m[index+1];\n var v = this.spec.vars[rule.varlist[index]];\n if (!v) {\n return {error:`Could not find matching identifier for '${m[0]}' index ${index}`};\n }\n n = v.bits;\n var shift = 0;\n if (typeof b !== \"number\") {\n n = b.n;\n shift = b.b;\n }\n // is it an enumerated type? look up the index of its keyword\n if (v.toks) {\n x = v.toks.indexOf(id);\n if (x < 0)\n return {error:\"Can't use '\" + id + \"' here, only one of: \" + v.toks.join(', ')};\n } else {\n // otherwise, parse it as a constant\n x = this.parseConst(id, n);\n // is it a label? add fixup\n if (isNaN(x)) {\n this.fixups.push({\n sym:id, ofs:this.ip, size:v.bits, line:this.linenum,\n dstlen:n, dstofs:oplen, srcofs:shift,\n endian:v.endian,\n iprel:!!v.iprel, ipofs:(v.ipofs+0), ipmul:v.ipmul||1\n });\n x = 0;\n } else {\n var mask = (1<<v.bits)-1;\n if ((x&mask) != x)\n return {error:\"Value \" + x + \" does not fit in \" + v.bits + \" bits\"};\n }\n }\n // if little endian, we need to swap ordering\n if (v.endian == 'little') x = this.swapEndian(x, v.bits);\n // is it an array slice? slice the bits\n if (typeof b !== \"number\") {\n x = (x >>> shift) & ((1 << b.n)-1);\n }\n }\n opcode = (opcode << n) | x;\n oplen += n;\n }\n if (oplen == 0)\n this.warning(\"Opcode had zero length\");\n else if (oplen > 32)\n this.warning(\"Opcodes > 32 bits not supported\");\n else if ((oplen % this.width) != 0)\n this.warning(\"Opcode was not word-aligned (\" + oplen + \" bits)\");\n return {opcode:opcode, nbits:oplen};\n }\n\n loadArch(arch:string) : string {\n if (this.loadJSON) {\n var json = this.loadJSON(arch + \".json\");\n if (json && json.vars && json.rules) {\n this.spec = json;\n this.preprocessRules();\n } else {\n return (\"Could not load arch file '\" + arch + \".json'\");\n }\n }\n }\n\n parseDirective(tokens) {\n var cmd = tokens[0].toLowerCase();\n if (cmd == '.define')\n this.symbols[tokens[1].toLowerCase()] = {value:tokens[2]};\n else if (cmd == '.org')\n this.ip = this.origin = parseInt(tokens[1]);\n else if (cmd == '.len')\n this.codelen = parseInt(tokens[1]);\n else if (cmd == '.width')\n this.width = parseInt(tokens[1]);\n else if (cmd == '.arch')\n this.fatalIf(this.loadArch(tokens[1]));\n else if (cmd == '.include')\n this.fatalIf(this.loadInclude(tokens[1]));\n else if (cmd == '.module')\n this.fatalIf(this.loadModule(tokens[1]));\n else if (cmd == '.data')\n this.addWords(this.parseData(tokens.slice(1)));\n else if (cmd == '.string')\n this.addWords(stringToData(tokens.slice(1).join(' ')));\n else if (cmd == '.align')\n this.alignIP(this.parseConst(tokens[1]));\n else\n this.warning(\"Unrecognized directive: \" + tokens);\n }\n\n assemble(line:string) : AssemblerInstruction {\n this.linenum++;\n // remove comments\n line = line.replace(/[;].*/g, '').trim();\n // is it a directive?\n if (line[0] == '.') {\n var tokens = line.split(/\\s+/);\n this.parseDirective(tokens);\n return;\n }\n // make it lowercase\n line = line.toLowerCase();\n // find labels\n line = line.replace(/(\\w+):/, (_label, label) => {\n this.symbols[label] = {value:this.ip};\n return ''; // replace label with blank\n });\n line = line.trim();\n if (line == '')\n return; // empty line\n // look at each rule in order\n if (!this.spec) { this.fatal(\"Need to load .arch first\"); return; }\n var lastError;\n for (var rule of this.spec.rules) {\n var m = rule.re.exec(line);\n if (m) {\n var result = this.buildInstruction(rule, m);\n if (!isError(result)) {\n this.addBytes(result);\n return result;\n } else {\n lastError = result.error;\n }\n }\n }\n this.warning(lastError ? lastError : (\"Could not decode instruction: \" + line));\n }\n\n applyFixup(fix: AssemblerFixup, sym: Symbol) {\n var ofs = fix.ofs + Math.floor(fix.dstofs/this.width);\n var mask = ((1<<fix.size)-1);\n var value = this.parseConst(sym.value+\"\", fix.dstlen);\n if (fix.iprel)\n value = (value - fix.ofs) * fix.ipmul - fix.ipofs;\n if (fix.srcofs == 0 && (value > mask || value < -mask))\n this.warning(\"Symbol \" + fix.sym + \" (\" + value + \") does not fit in \" + fix.dstlen + \" bits\", fix.line);\n //console.log(hex(value,8), fix.srcofs, fix.dstofs, fix.dstlen);\n if (fix.srcofs > 0)\n value >>>= fix.srcofs;\n value &= (1 << fix.dstlen) - 1;\n // TODO: make it work for all widths\n if (this.width == 32) {\n var shift = 32 - fix.dstofs - fix.dstlen;\n value <<= shift;\n }\n // TODO: check range\n if (fix.size <= this.width) {\n this.outwords[ofs - this.origin] ^= value;\n } else {\n // swap if we want big endian (we'll apply in LSB first order)\n if (fix.endian == 'big') value = this.swapEndian(value, fix.size);\n // apply multi-byte fixup\n while (value) {\n if (value & this.outwords[ofs - this.origin]) {\n this.warning(\"Instruction bits overlapped: \" + hex(this.outwords[ofs - this.origin],8), hex(value,8));\n } else {\n this.outwords[ofs - this.origin] ^= value & ((1<<this.width)-1);\n }\n value >>>= this.width;\n ofs++;\n }\n }\n }\n\n finish() : AssemblerState {\n // apply fixups\n for (var i=0; i<this.fixups.length; i++) {\n var fix = this.fixups[i];\n var sym = this.symbols[fix.sym];\n if (sym) {\n this.applyFixup(fix, sym);\n } else {\n this.warning(\"Symbol '\" + fix.sym + \"' not found\");\n }\n }\n // update asmlines\n for (var i=0; i<this.asmlines.length; i++) {\n var al = this.asmlines[i];\n al.insns = '';\n for (var j=0; j<al.nbits/this.width; j++) {\n var word = this.outwords[al.offset + j - this.origin];\n if (j>0) al.insns += ' ';\n al.insns += hex(word,this.width/4);\n }\n }\n while (this.outwords.length < this.codelen) {\n this.outwords.push(0);\n }\n this.fixups = [];\n return this.state();\n }\n\n assembleFile(text) : AssemblerState {\n var lines = text.split(/\\n/g);\n for (var i=0; i<lines.length && !this.aborted; i++) {\n try {\n this.assemble(lines[i]);\n } catch (e) {\n console.log(e);\n this.fatal(\"Exception during assembly: \" + e);\n }\n }\n return this.finish();\n }\n\n state() : AssemblerState {\n return {ip:this.ip, line:this.linenum, origin:this.origin, codelen:this.codelen,\n intermediate:{}, // TODO: listing, symbols?\n output:this.outwords,\n lines:this.asmlines,\n errors:this.errors,\n fixups:this.fixups};\n }\n \n // methods to implement in subclass\n \n loadJSON : (path : string) => any;\n loadInclude : (path : string) => string;\n loadModule : (path : string) => string;\n}\n\n", "import { SourceLocation } from \"../workertypes\";\n\nexport interface HDLModuleRunner {\n state: any; // live state or proxy object\n eval() : void;\n tick() : void;\n tick2(iters: number) : void;\n powercycle() : void;\n isFinished() : boolean;\n isStopped() : boolean;\n getGlobals() : {};\n saveState() : {};\n loadState(state: {}) : void;\n dispose() : void;\n getFileData : (filename : string) => string|Uint8Array;\n}\n\nexport interface HDLModuleTrace extends HDLModuleRunner {\n trace: any;\n resetTrace() : void;\n nextTrace() : void;\n}\n\n///\n\nexport interface HDLLogicType extends HDLSourceObject {\n left: number;\n right: number;\n signed: boolean;\n}\n\nexport interface HDLUnpackArray extends HDLSourceObject {\n subtype: HDLDataType;\n low: HDLConstant;\n high: HDLConstant;\n}\n\nexport interface HDLNativeType extends HDLSourceObject {\n jstype: string;\n}\n\nexport type HDLDataType = HDLLogicType | HDLUnpackArray | HDLNativeType;\n\nexport function isLogicType(arg:any): arg is HDLLogicType {\n return typeof arg.left === 'number' && typeof arg.right === 'number';\n}\n\nexport function isArrayType(arg:any): arg is HDLUnpackArray {\n return arg.subtype != null && arg.low != null && arg.high != null\n && typeof arg.low.cvalue === 'number' && typeof arg.high.cvalue === 'number';\n}\n\nexport class HDLFile {\n id: string;\n filename: string;\n isModule: boolean;\n}\n\nexport interface HDLSourceLocation extends SourceLocation {\n hdlfile: HDLFile;\n end_line?: number;\n}\n\nexport interface HDLSourceObject {\n $loc?: HDLSourceLocation;\n}\n\nexport interface HDLDataTypeObject extends HDLSourceObject {\n dtype: HDLDataType;\n}\n\nexport function hasDataType(arg: any) : arg is HDLDataTypeObject {\n return typeof arg.dtype === 'object';\n}\n\nexport interface HDLModuleDef extends HDLSourceObject {\n name: string;\n origName: string;\n blocks: HDLBlock[];\n instances: HDLInstanceDef[];\n vardefs: { [id:string] : HDLVariableDef };\n}\n\nexport interface HDLVariableDef extends HDLDataTypeObject {\n name: string;\n origName: string;\n isInput: boolean;\n isOutput: boolean;\n isParam: boolean;\n constValue?: HDLConstant;\n initValue?: HDLBlock;\n}\n\nexport function isVarDecl(arg:any): arg is HDLVariableDef {\n return typeof arg.isParam !== 'undefined';\n}\n\nexport interface HDLConstant extends HDLDataTypeObject {\n cvalue: number;\n bigvalue: bigint;\n}\n\nexport function isConstExpr(arg:any): arg is HDLConstant {\n return typeof arg.cvalue === 'number';\n}\n\nexport function isBigConstExpr(arg:any): arg is HDLConstant {\n return typeof arg.bigvalue === 'bigint';\n}\n\nexport interface HDLHierarchyDef extends HDLSourceObject {\n name: string;\n module: HDLModuleDef;\n parent: HDLHierarchyDef;\n children: HDLHierarchyDef[];\n}\n\nexport interface HDLInstanceDef extends HDLSourceObject {\n name: string;\n origName: string;\n module: HDLModuleDef;\n ports: HDLPort[];\n}\n\nexport interface HDLVarRef extends HDLDataTypeObject {\n refname: string;\n //TODO? vardef: HDLVariableDef;\n}\n\nexport function isVarRef(arg:any): arg is HDLVarRef {\n return arg.refname != null;\n}\n\nexport interface HDLUnop extends HDLDataTypeObject {\n op: string;\n left: HDLExpr;\n}\n\nexport interface HDLExtendop extends HDLUnop {\n width: number;\n widthminv: number;\n}\n\nexport function isUnop(arg:any): arg is HDLUnop {\n return arg.op != null && arg.left != null && arg.right == null;\n}\n\nexport interface HDLBinop extends HDLUnop {\n right: HDLExpr;\n}\n\nexport function isBinop(arg:any): arg is HDLBinop {\n return arg.op != null && arg.left != null && arg.right != null && arg.cond == null;\n}\n\nexport interface HDLTriop extends HDLBinop {\n cond: HDLExpr;\n}\n\nexport function isTriop(arg:any): arg is HDLTriop {\n return arg.op != null && arg.cond != null;\n}\n\nexport interface HDLWhileOp extends HDLDataTypeObject {\n op: 'while';\n precond: HDLExpr;\n loopcond: HDLExpr;\n body: HDLExpr;\n inc: HDLExpr;\n}\n\nexport function isWhileop(arg:any): arg is HDLWhileOp {\n return arg.op === 'while' && arg.loopcond != null;\n}\n\nexport interface HDLBlock extends HDLSourceObject {\n blocktype: string;\n name: string;\n exprs: HDLExpr[];\n}\n\nexport function isBlock(arg:any): arg is HDLBlock {\n return arg.blocktype != null;\n}\n\nexport interface HDLAlwaysBlock extends HDLBlock {\n senlist: HDLSensItem[];\n}\n\nexport interface HDLSensItem extends HDLSourceObject {\n edgeType : \"POS\" | \"NEG\";\n expr: HDLExpr;\n}\n\nexport interface HDLPort extends HDLSourceObject {\n name: string;\n expr: HDLExpr;\n}\n\nexport interface HDLFuncCall extends HDLDataTypeObject {\n funcname: string;\n args: HDLExpr[];\n}\n\nexport function isFuncCall(arg:any): arg is HDLFuncCall {\n return typeof arg.funcname === 'string';\n}\n\nexport interface HDLArrayItem {\n index: number;\n expr: HDLExpr;\n}\n\nexport function isArrayItem(arg:any): arg is HDLArrayItem {\n return typeof arg.index === 'number' && arg.expr != null;\n}\n\nexport type HDLExpr = HDLVarRef | HDLUnop | HDLBinop | HDLTriop | HDLBlock | HDLVariableDef | HDLFuncCall | HDLConstant;\n\nexport interface HDLUnit {\n files: { [id: string]: HDLFile };\n dtypes: { [id: string]: HDLDataType };\n modules: { [id: string]: HDLModuleDef };\n hierarchies: { [id: string]: HDLHierarchyDef };\n}\n\nexport type HDLValue = number | bigint | Uint8Array | Uint16Array | Uint32Array | HDLValue[];\n\n", "\nimport { parseXMLPoorly, XMLNode } from \"../util\";\nimport { HDLAlwaysBlock, HDLArrayItem, HDLBinop, HDLBlock, HDLConstant, HDLDataType, HDLDataTypeObject, HDLExpr, HDLExtendop, HDLFile, HDLFuncCall, HDLHierarchyDef, HDLInstanceDef, HDLLogicType, HDLModuleDef, HDLNativeType, HDLPort, HDLSensItem, HDLSourceLocation, HDLSourceObject, HDLTriop, HDLUnit, HDLUnop, HDLUnpackArray, HDLValue, HDLVariableDef, HDLVarRef, HDLWhileOp, isArrayType, isBinop, isBlock, isConstExpr, isFuncCall, isLogicType, isTriop, isUnop, isVarDecl, isVarRef } from \"./hdltypes\";\n\n/**\n * Whaa?\n * \n * Each hierarchy takes (uint32[] -> uint32[])\n * - convert to/from js object\n * - JS or WASM\n * - Fixed-size packets\n * - state is another uint32[]\n * Find optimal packing of bits\n * Find clocks\n * Find pivots (reset, state) concat them together\n * Dependency cycles\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer\n */\n\n export class CompileError extends Error implements HDLSourceObject {\n $loc: HDLSourceLocation;\n constructor($loc: HDLSourceLocation, msg: string) {\n super(msg);\n this.$loc = $loc;\n Object.setPrototypeOf(this, CompileError.prototype);\n }\n}\n\nexport class VerilogXMLParser implements HDLUnit {\n\n files: { [id: string]: HDLFile } = {};\n dtypes: { [id: string]: HDLDataType } = {};\n modules: { [id: string]: HDLModuleDef } = {};\n hierarchies: { [id: string]: HDLHierarchyDef } = {};\n\n cur_node : XMLNode;\n cur_module : HDLModuleDef;\n cur_loc : HDLSourceLocation;\n cur_loc_str : string;\n cur_deferred = [];\n\n constructor() {\n // TODO: other types?\n this.dtypes['QData'] = {left:63, right:0, signed:false};\n this.dtypes['IData'] = {left:31, right:0, signed:false};\n this.dtypes['SData'] = {left:15, right:0, signed:false};\n this.dtypes['CData'] = {left:7, right:0, signed:false};\n this.dtypes['byte'] = {left:7, right:0, signed:true};\n this.dtypes['shortint'] = {left:15, right:0, signed:true};\n this.dtypes['int'] = {left:31, right:0, signed:true};\n this.dtypes['integer'] = {left:31, right:0, signed:true};\n this.dtypes['longint'] = {left:63, right:0, signed:true};\n this.dtypes['time'] = {left:63, right:0, signed:false};\n }\n\n defer(fn: () => void) {\n this.cur_deferred.unshift(fn);\n }\n\n defer2(fn: () => void) {\n this.cur_deferred.push(fn);\n }\n\n run_deferred() {\n this.cur_deferred.forEach((fn) => fn());\n this.cur_deferred = [];\n }\n\n name2js(s: string) {\n if (s == null) throw new CompileError(this.cur_loc, `no name`);\n return s.replace(/[^a-z0-9_]/gi, '$');\n }\n\n findChildren(node: XMLNode, type: string, required: boolean) : XMLNode[] {\n var arr = node.children.filter((n) => n.type == type);\n if (arr.length == 0 && required) throw new CompileError(this.cur_loc, `no child of type ${type}`);\n return arr;\n }\n\n parseSourceLocation(node: XMLNode): HDLSourceLocation {\n var loc = node.attrs['loc'];\n if (loc) {\n if (loc == this.cur_loc_str) {\n return this.cur_loc; // cache last parsed $loc object\n } else {\n var [fileid, line, col, end_line, end_col] = loc.split(',');\n var $loc = {\n hdlfile: this.files[fileid],\n path: this.files[fileid].filename,\n line: parseInt(line),\n start: parseInt(col)-1,\n end_line: parseInt(end_line),\n end: parseInt(end_col)-1,\n }\n this.cur_loc = $loc;\n this.cur_loc_str = loc;\n return $loc;\n }\n } else {\n return null;\n }\n }\n\n open_module(node: XMLNode) {\n var module: HDLModuleDef = {\n $loc: this.parseSourceLocation(node),\n name: node.attrs['name'],\n origName: node.attrs['origName'],\n blocks: [],\n instances: [],\n vardefs: {},\n }\n if (this.cur_module) throw new CompileError(this.cur_loc, `nested modules not supported`);\n this.cur_module = module;\n return module;\n }\n\n deferDataType(node: XMLNode, def: HDLDataTypeObject) {\n var dtype_id = node.attrs['dtype_id'];\n if (dtype_id != null) {\n this.defer(() => {\n def.dtype = this.dtypes[dtype_id];\n if (!def.dtype) {\n throw new CompileError(this.cur_loc, `Unknown data type ${dtype_id} for ${node.type}`);\n }\n })\n }\n }\n\n parseConstValue(s: string) : number | bigint {\n const re_const = /(\\d+)'([s]?)h([0-9a-f]+)/i;\n var m = re_const.exec(s);\n if (m) {\n var numstr = m[3];\n if (numstr.length <= 8)\n return parseInt(numstr, 16);\n else\n return BigInt('0x' + numstr);\n } else {\n throw new CompileError(this.cur_loc, `could not parse constant \"${s}\"`);\n }\n }\n \n resolveVar(s: string, mod: HDLModuleDef) : HDLVariableDef {\n var def = mod.vardefs[s];\n if (def == null) throw new CompileError(this.cur_loc, `could not resolve variable \"${s}\"`);\n return def;\n }\n\n resolveModule(s: string) : HDLModuleDef {\n var mod = this.modules[s];\n if (mod == null) throw new CompileError(this.cur_loc, `could not resolve module \"${s}\"`);\n return mod;\n }\n\n //\n\n visit_verilator_xml(node: XMLNode) {\n }\n\n visit_package(node: XMLNode) { // TODO?\n }\n\n visit_module(node: XMLNode) {\n this.findChildren(node, 'var', false).forEach((n) => {\n if (isVarDecl(n.obj)) {\n this.cur_module.vardefs[n.obj.name] = n.obj;\n }\n })\n this.modules[this.cur_module.name] = this.cur_module;\n this.cur_module = null;\n }\n\n visit_var(node: XMLNode) : HDLVariableDef {\n var name = node.attrs['name'];\n name = this.name2js(name);\n var vardef: HDLVariableDef = {\n $loc: this.parseSourceLocation(node),\n name: name,\n origName: node.attrs['origName'],\n isInput: node.attrs['dir'] == 'input',\n isOutput: node.attrs['dir'] == 'output',\n isParam: node.attrs['param'] == 'true',\n dtype: null,\n }\n this.deferDataType(node, vardef);\n var const_nodes = this.findChildren(node, 'const', false);\n if (const_nodes.length) {\n vardef.constValue = const_nodes[0].obj;\n }\n var init_nodes = this.findChildren(node, 'initarray', false);\n if (init_nodes.length) {\n vardef.initValue = init_nodes[0].obj;\n }\n return vardef;\n }\n\n visit_const(node: XMLNode) : HDLConstant {\n var name = node.attrs['name'];\n var cvalue = this.parseConstValue(name); \n var constdef: HDLConstant = {\n $loc: this.parseSourceLocation(node),\n dtype: null,\n cvalue: typeof cvalue === 'number' ? cvalue : null,\n bigvalue: typeof cvalue === 'bigint' ? cvalue : null,\n }\n this.deferDataType(node, constdef);\n return constdef;\n }\n\n visit_varref(node: XMLNode) : HDLVarRef {\n var name = node.attrs['name'];\n name = this.name2js(name);\n var varref: HDLVarRef = {\n $loc: this.parseSourceLocation(node),\n dtype: null,\n refname: name\n }\n this.deferDataType(node, varref);\n var mod = this.cur_module;\n /*\n this.defer2(() => {\n varref.vardef = this.resolveVar(name, mod);\n });\n */\n return varref;\n }\n\n visit_sentree(node: XMLNode) {\n // TODO\n }\n\n visit_always(node: XMLNode) : HDLAlwaysBlock {\n // TODO\n var sentree : HDLSensItem[];\n var expr : HDLExpr;\n if (node.children.length == 2) {\n sentree = node.children[0].obj as HDLSensItem[];\n expr = node.children[1].obj as HDLExpr;\n // TODO: check sentree\n } else {\n sentree = null;\n expr = node.children[0].obj as HDLExpr;\n }\n var always: HDLAlwaysBlock = {\n $loc: this.parseSourceLocation(node),\n blocktype: node.type,\n name: null,\n senlist: sentree,\n exprs: [expr],\n };\n this.cur_module.blocks.push(always);\n return always;\n }\n\n visit_begin(node: XMLNode) : HDLBlock {\n var exprs = [];\n node.children.forEach((n) => exprs.push(n.obj));\n return {\n $loc: this.parseSourceLocation(node),\n blocktype: node.type,\n name: node.attrs['name'],\n exprs: exprs,\n }\n }\n\n visit_initarray(node: XMLNode) : HDLBlock {\n return this.visit_begin(node);\n }\n\n visit_inititem(node: XMLNode) : HDLArrayItem {\n this.expectChildren(node, 1, 1);\n return {\n index: parseInt(node.attrs['index']),\n expr: node.children[0].obj\n }\n }\n\n visit_cfunc(node: XMLNode) : HDLBlock {\n if (this.cur_module == null) { // TODO?\n //console.log('no module open, skipping', node);\n return;\n }\n var block = this.visit_begin(node);\n block.exprs = [];\n node.children.forEach((n) => block.exprs.push(n.obj));\n this.cur_module.blocks.push(block);\n return block;\n }\n\n visit_cuse(node: XMLNode) { // TODO?\n }\n\n visit_instance(node: XMLNode) : HDLInstanceDef {\n var instance : HDLInstanceDef = {\n $loc: this.parseSourceLocation(node),\n name: node.attrs['name'],\n origName: node.attrs['origName'],\n ports: [],\n module: null,\n }\n node.children.forEach((child) => {\n instance.ports.push(child.obj);\n })\n this.cur_module.instances.push(instance);\n this.defer(() => {\n instance.module = this.resolveModule(node.attrs['defName']);\n })\n return instance;\n }\n\n visit_iface(node: XMLNode) {\n throw new CompileError(this.cur_loc, `interfaces not supported`);\n }\n\n visit_intfref(node: XMLNode) {\n throw new CompileError(this.cur_loc, `interfaces not supported`);\n }\n\n visit_port(node: XMLNode) : HDLPort {\n this.expectChildren(node, 1, 1);\n var varref: HDLPort = {\n $loc: this.parseSourceLocation(node),\n name: node.attrs['name'],\n expr: node.children[0].obj\n }\n return varref;\n }\n\n visit_netlist(node: XMLNode) {\n }\n\n visit_files(node: XMLNode) {\n }\n\n visit_module_files(node: XMLNode) {\n node.children.forEach((n) => {\n if (n.obj) {\n var file = this.files[(n.obj as HDLFile).id];\n if (file) file.isModule = true;\n }\n });\n }\n\n visit_file(node: XMLNode) {\n return this.visit_file_or_module(node, false);\n }\n\n // TODO\n visit_scope(node: XMLNode) {\n }\n\n visit_topscope(node: XMLNode) {\n }\n\n visit_file_or_module(node: XMLNode, isModule: boolean) : HDLFile {\n var file : HDLFile = {\n id: node.attrs['id'],\n filename: node.attrs['filename'],\n isModule: isModule,\n }\n this.files[file.id] = file;\n return file;\n }\n\n visit_cells(node: XMLNode) {\n this.expectChildren(node, 1, 9999);\n var hier = node.children[0].obj as HDLHierarchyDef;\n if (hier != null) {\n var hiername = hier.name;\n this.hierarchies[hiername] = hier;\n }\n }\n\n visit_cell(node: XMLNode) : HDLHierarchyDef {\n var hier = {\n $loc: this.parseSourceLocation(node),\n name: node.attrs['name'],\n module: null,\n parent: null,\n children: node.children.map((n) => n.obj),\n }\n if (node.children.length > 0)\n throw new CompileError(this.cur_loc, `multiple non-flattened modules not yet supported`);\n node.children.forEach((n) => (n.obj as HDLHierarchyDef).parent = hier);\n this.defer(() => {\n hier.module = this.resolveModule(node.attrs['submodname']);\n })\n return hier;\n }\n\n visit_basicdtype(node: XMLNode): HDLDataType {\n let id = node.attrs['id'];\n var dtype: HDLDataType;\n var dtypename = node.attrs['name'];\n switch (dtypename) {\n case 'logic':\n case 'integer': // TODO?\n case 'bit':\n let dlogic: HDLLogicType = {\n $loc: this.parseSourceLocation(node),\n left: parseInt(node.attrs['left'] || \"0\"),\n right: parseInt(node.attrs['right'] || \"0\"),\n signed: node.attrs['signed'] == 'true'\n }\n dtype = dlogic;\n break;\n case 'string':\n let dstring: HDLNativeType = {\n $loc: this.parseSourceLocation(node),\n jstype: 'string'\n }\n dtype = dstring;\n break;\n default:\n dtype = this.dtypes[dtypename];\n if (dtype == null) {\n throw new CompileError(this.cur_loc, `unknown data type ${dtypename}`);\n }\n }\n this.dtypes[id] = dtype;\n return dtype;\n }\n\n visit_refdtype(node: XMLNode) {\n }\n\n visit_enumdtype(node: XMLNode) {\n }\n\n visit_enumitem(node: XMLNode) {\n }\n\n visit_packarraydtype(node: XMLNode): HDLDataType {\n // TODO: packed?\n return this.visit_unpackarraydtype(node);\n }\n\n visit_memberdtype(node: XMLNode) {\n throw new CompileError(null, `structs not supported`);\n }\n\n visit_constdtype(node: XMLNode) {\n // TODO? throw new CompileError(null, `constant data types not supported`);\n }\n\n visit_paramtypedtype(node: XMLNode) {\n // TODO? throw new CompileError(null, `constant data types not supported`);\n }\n\n visit_unpackarraydtype(node: XMLNode): HDLDataType {\n let id = node.attrs['id'];\n let sub_dtype_id = node.attrs['sub_dtype_id'];\n let range = node.children[0].obj as HDLBinop;\n if (isConstExpr(range.left) && isConstExpr(range.right)) {\n var dtype: HDLUnpackArray = {\n $loc: this.parseSourceLocation(node),\n subtype: null,\n low: range.left,\n high: range.right,\n }\n this.dtypes[id] = dtype;\n this.defer(() => {\n dtype.subtype = this.dtypes[sub_dtype_id];\n if (!dtype.subtype) throw new CompileError(this.cur_loc, `Unknown data type ${sub_dtype_id} for array`);\n })\n return dtype;\n } else {\n throw new CompileError(this.cur_loc, `could not parse constant exprs in array`)\n }\n }\n\n visit_senitem(node: XMLNode) : HDLSensItem {\n var edgeType = node.attrs['edgeType'];\n if (edgeType != \"POS\" && edgeType != \"NEG\")\n throw new CompileError(this.cur_loc, \"POS/NEG required\")\n return {\n $loc: this.parseSourceLocation(node),\n edgeType: edgeType,\n expr: node.obj\n }\n }\n\n visit_text(node: XMLNode) {\n }\n\n visit_cstmt(node: XMLNode) {\n }\n\n visit_cfile(node: XMLNode) {\n }\n\n visit_typetable(node: XMLNode) {\n }\n\n visit_constpool(node: XMLNode) {\n }\n\n visit_comment(node: XMLNode) {\n }\n\n expectChildren(node: XMLNode, low: number, high: number) {\n if (node.children.length < low || node.children.length > high)\n throw new CompileError(this.cur_loc, `expected between ${low} and ${high} children`);\n }\n\n __visit_unop(node: XMLNode) : HDLUnop {\n this.expectChildren(node, 1, 1);\n var expr: HDLUnop = {\n $loc: this.parseSourceLocation(node),\n op: node.type,\n dtype: null,\n left: node.children[0].obj as HDLExpr,\n }\n this.deferDataType(node, expr);\n return expr;\n }\n\n visit_extend(node: XMLNode) : HDLUnop {\n var unop = this.__visit_unop(node) as HDLExtendop;\n unop.width = parseInt(node.attrs['width']);\n unop.widthminv = parseInt(node.attrs['widthminv']);\n if (unop.width != 32) throw new CompileError(this.cur_loc, `extends width ${unop.width} != 32`)\n return unop;\n }\n\n visit_extends(node: XMLNode) : HDLUnop {\n return this.visit_extend(node);\n }\n\n __visit_binop(node: XMLNode) : HDLBinop {\n this.expectChildren(node, 2, 2);\n var expr: HDLBinop = {\n $loc: this.parseSourceLocation(node),\n op: node.type,\n dtype: null,\n left: node.children[0].obj as HDLExpr,\n right: node.children[1].obj as HDLExpr,\n }\n this.deferDataType(node, expr);\n return expr;\n }\n\n visit_if(node: XMLNode) : HDLTriop {\n this.expectChildren(node, 2, 3);\n var expr: HDLTriop = {\n $loc: this.parseSourceLocation(node),\n op: 'if',\n dtype: null,\n cond: node.children[0].obj as HDLExpr,\n left: node.children[1].obj as HDLExpr,\n right: node.children[2] && node.children[2].obj as HDLExpr,\n }\n return expr;\n }\n\n // while and for loops\n visit_while(node: XMLNode) : HDLWhileOp {\n this.expectChildren(node, 2, 4);\n var expr: HDLWhileOp = {\n $loc: this.parseSourceLocation(node),\n op: 'while',\n dtype: null,\n precond: node.children[0].obj as HDLExpr,\n loopcond: node.children[1].obj as HDLExpr,\n body: node.children[2] && node.children[2].obj as HDLExpr,\n inc: node.children[3] && node.children[3].obj as HDLExpr,\n }\n return expr;\n }\n\n __visit_triop(node: XMLNode) : HDLBinop {\n this.expectChildren(node, 3, 3);\n var expr: HDLTriop = {\n $loc: this.parseSourceLocation(node),\n op: node.type,\n dtype: null,\n cond: node.children[0].obj as HDLExpr,\n left: node.children[1].obj as HDLExpr,\n right: node.children[2].obj as HDLExpr,\n }\n this.deferDataType(node, expr);\n return expr;\n }\n\n __visit_func(node: XMLNode) : HDLFuncCall {\n var expr = {\n $loc: this.parseSourceLocation(node),\n dtype: null,\n funcname: node.attrs['func'] || ('$' + node.type),\n args: node.children.map(n => n.obj as HDLExpr)\n }\n this.deferDataType(node, expr);\n return expr;\n }\n\n visit_not(node: XMLNode) { return this.__visit_unop(node); }\n visit_negate(node: XMLNode) { return this.__visit_unop(node); }\n visit_redand(node: XMLNode) { return this.__visit_unop(node); }\n visit_redor(node: XMLNode) { return this.__visit_unop(node); }\n visit_redxor(node: XMLNode) { return this.__visit_unop(node); }\n visit_initial(node: XMLNode) { return this.__visit_unop(node); }\n visit_ccast(node: XMLNode) { return this.__visit_unop(node); }\n visit_creset(node: XMLNode) { return this.__visit_unop(node); }\n visit_creturn(node: XMLNode) { return this.__visit_unop(node); }\n\n visit_contassign(node: XMLNode) { return this.__visit_binop(node); }\n visit_assigndly(node: XMLNode) { return this.__visit_binop(node); }\n visit_assignpre(node: XMLNode) { return this.__visit_binop(node); }\n visit_assignpost(node: XMLNode) { return this.__visit_binop(node); }\n visit_assign(node: XMLNode) { return this.__visit_binop(node); }\n visit_arraysel(node: XMLNode) { return this.__visit_binop(node); }\n visit_wordsel(node: XMLNode) { return this.__visit_binop(node); }\n\n visit_eq(node: XMLNode) { return this.__visit_binop(node); }\n visit_neq(node: XMLNode) { return this.__visit_binop(node); }\n visit_lte(node: XMLNode) { return this.__visit_binop(node); }\n visit_gte(node: XMLNode) { return this.__visit_binop(node); }\n visit_lt(node: XMLNode) { return this.__visit_binop(node); }\n visit_gt(node: XMLNode) { return this.__visit_binop(node); }\n visit_and(node: XMLNode) { return this.__visit_binop(node); }\n visit_or(node: XMLNode) { return this.__visit_binop(node); }\n visit_xor(node: XMLNode) { return this.__visit_binop(node); }\n visit_add(node: XMLNode) { return this.__visit_binop(node); }\n visit_sub(node: XMLNode) { return this.__visit_binop(node); }\n visit_concat(node: XMLNode) { return this.__visit_binop(node); } // TODO?\n visit_shiftl(node: XMLNode) { return this.__visit_binop(node); }\n visit_shiftr(node: XMLNode) { return this.__visit_binop(node); }\n visit_shiftrs(node: XMLNode) { return this.__visit_binop(node); }\n\n visit_mul(node: XMLNode) { return this.__visit_binop(node); }\n visit_div(node: XMLNode) { return this.__visit_binop(node); }\n visit_moddiv(node: XMLNode) { return this.__visit_binop(node); }\n visit_muls(node: XMLNode) { return this.__visit_binop(node); }\n visit_divs(node: XMLNode) { return this.__visit_binop(node); }\n visit_moddivs(node: XMLNode) { return this.__visit_binop(node); }\n visit_gts(node: XMLNode) { return this.__visit_binop(node); }\n visit_lts(node: XMLNode) { return this.__visit_binop(node); }\n visit_gtes(node: XMLNode) { return this.__visit_binop(node); }\n visit_ltes(node: XMLNode) { return this.__visit_binop(node); }\n // TODO: more?\n\n visit_range(node: XMLNode) { return this.__visit_binop(node); }\n\n visit_cond(node: XMLNode) { return this.__visit_triop(node); }\n visit_condbound(node: XMLNode) { return this.__visit_triop(node); }\n visit_sel(node: XMLNode) { return this.__visit_triop(node); }\n\n visit_changedet(node: XMLNode) : HDLBinop {\n if (node.children.length == 0)\n return null; //{ op: \"changedet\", dtype:null, left:null, right:null }\n else\n return this.__visit_binop(node);\n }\n\n visit_ccall(node: XMLNode) { return this.__visit_func(node); }\n visit_finish(node: XMLNode) { return this.__visit_func(node); }\n visit_stop(node: XMLNode) { return this.__visit_func(node); }\n visit_rand(node: XMLNode) { return this.__visit_func(node); }\n visit_time(node: XMLNode) { return this.__visit_func(node); }\n\n visit_display(node: XMLNode) { return null; }\n visit_sformatf(node: XMLNode) { return null; }\n visit_scopename(node: XMLNode) { return null; }\n\n visit_readmem(node: XMLNode) { return this.__visit_func(node); }\n\n //\n\n xml_open(node: XMLNode) {\n this.cur_node = node;\n var method = this[`open_${node.type}`];\n if (method) {\n return method.bind(this)(node);\n }\n }\n \n xml_close(node: XMLNode) {\n this.cur_node = node;\n var method = this[`visit_${node.type}`];\n if (method) {\n return method.bind(this)(node);\n } else {\n throw new CompileError(this.cur_loc, `no visitor for ${node.type}`)\n }\n }\n\n parse(xmls: string) {\n parseXMLPoorly(xmls, this.xml_open.bind(this), this.xml_close.bind(this));\n this.cur_node = null;\n this.run_deferred();\n }\n}\n\n", "\n// TODO: must be a better way to do all this\n\nimport { WorkerError, CodeListingMap, SourceLocation } from \"../../common/workertypes\";\nimport { Assembler } from \"../assembler\";\nimport * as vxmlparser from '../../common/hdl/vxmlparser';\nimport { EmscriptenModule, emglobal, execMain, getWASMMemory, loadNative, moduleInstFn, print_fn, setupFS } from \"../wasmutils\";\nimport { getWorkFileAsString, BuildStep, BuildStepResult, gatherFiles, staleFiles, populateFiles, starttime, endtime, putWorkFile, anyTargetChanged, populateExtraFiles } from \"../builder\";\nimport { makeErrorMatcher } from \"../listingutils\";\n\nfunction detectModuleName(code: string) {\n var m = /^\\s*module\\s+(\\w+_top)\\b/m.exec(code)\n || /^\\s*module\\s+(top|t)\\b/m.exec(code)\n || /^\\s*module\\s+(\\w+)\\b/m.exec(code);\n return m ? m[1] : null;\n}\n\nfunction detectTopModuleName(code: string) {\n var topmod = detectModuleName(code) || \"top\";\n var m = /^\\s*module\\s+(\\w+?_top)/m.exec(code);\n if (m && m[1]) topmod = m[1];\n return topmod;\n}\n\n// cached stuff (TODO)\nvar jsasm_module_top;\nvar jsasm_module_output;\nvar jsasm_module_key;\n\nfunction compileJSASM(asmcode: string, platform, options, is_inline) {\n var asm = new Assembler(null);\n var includes = [];\n asm.loadJSON = (filename: string) => {\n var jsontext = getWorkFileAsString(filename);\n if (!jsontext) throw Error(\"could not load \" + filename);\n return JSON.parse(jsontext);\n };\n asm.loadInclude = (filename) => {\n if (!filename.startsWith('\"') || !filename.endsWith('\"'))\n return 'Expected filename in \"double quotes\"';\n filename = filename.substr(1, filename.length - 2);\n includes.push(filename);\n };\n var loaded_module = false;\n asm.loadModule = (top_module: string) => {\n // compile last file in list\n loaded_module = true;\n var key = top_module + '/' + includes;\n if (jsasm_module_key != key) {\n jsasm_module_key = key;\n jsasm_module_output = null;\n }\n jsasm_module_top = top_module;\n var main_filename = includes[includes.length - 1];\n // TODO: take out .asm dependency\n var voutput = compileVerilator({ platform: platform, files: includes, path: main_filename, tool: 'verilator' });\n if (voutput)\n jsasm_module_output = voutput;\n return null; // no error\n }\n var result = asm.assembleFile(asmcode);\n if (loaded_module && jsasm_module_output) {\n // errors? return them\n if (jsasm_module_output.errors && jsasm_module_output.errors.length)\n return jsasm_module_output;\n // return program ROM array\n var asmout = result.output;\n // TODO: unify\n result.output = jsasm_module_output.output;\n // TODO: typecheck this garbage\n (result as any).output.program_rom = asmout;\n // TODO: not cpu_platform__DOT__program_rom anymore, make const\n (result as any).output.program_rom_variable = jsasm_module_top + \"$program_rom\";\n (result as any).listings = {};\n (result as any).listings[options.path] = { lines: result.lines };\n return result;\n } else {\n return result;\n }\n}\n\nexport function compileJSASMStep(step: BuildStep): BuildStepResult {\n gatherFiles(step);\n var code = getWorkFileAsString(step.path);\n var platform = step.platform || 'verilog';\n return compileJSASM(code, platform, step, false);\n}\n\nfunction compileInlineASM(code: string, platform, options, errors, asmlines) {\n code = code.replace(/__asm\\b([\\s\\S]+?)\\b__endasm\\b/g, function (s, asmcode, index) {\n var firstline = code.substr(0, index).match(/\\n/g).length;\n var asmout = compileJSASM(asmcode, platform, options, true);\n if (asmout.errors && asmout.errors.length) {\n for (var i = 0; i < asmout.errors.length; i++) {\n asmout.errors[i].line += firstline;\n errors.push(asmout.errors[i]);\n }\n return \"\";\n } else if (asmout.output) {\n let s = \"\";\n var out = asmout.output;\n for (var i = 0; i < out.length; i++) {\n if (i > 0) {\n s += \",\";\n if ((i & 0xff) == 0) s += \"\\n\";\n }\n s += 0 | out[i];\n }\n if (asmlines) {\n var al = asmout.lines;\n for (var i = 0; i < al.length; i++) {\n al[i].line += firstline;\n asmlines.push(al[i]);\n }\n }\n return s;\n }\n });\n return code;\n}\n\nexport function compileVerilator(step: BuildStep): BuildStepResult {\n loadNative(\"verilator_bin\");\n var platform = step.platform || 'verilog';\n var errors: WorkerError[] = [];\n gatherFiles(step);\n // compile verilog if files are stale\n if (staleFiles(step, [xmlPath])) {\n // TODO: %Error: Specified --top-module 'ALU' isn't at the top level, it's under another cell 'cpu'\n // TODO: ... Use \"/* verilator lint_off BLKSEQ */\" and lint_on around source to disable this message.\n var match_fn = makeErrorMatcher(errors, /%(.+?): (.+?):(\\d+)?[:]?\\s*(.+)/i, 3, 4, step.path, 2);\n var verilator_mod: EmscriptenModule = emglobal.verilator_bin({\n instantiateWasm: moduleInstFn('verilator_bin'),\n noInitialRun: true,\n noExitRuntime: true,\n print: print_fn,\n printErr: match_fn,\n wasmMemory: getWASMMemory(), // reuse memory\n //INITIAL_MEMORY:256*1024*1024,\n });\n var code = getWorkFileAsString(step.path);\n var topmod = detectTopModuleName(code);\n var FS = verilator_mod.FS;\n var listings: CodeListingMap = {};\n // process inline assembly, add listings where found\n populateFiles(step, FS, {\n mainFilePath: step.path,\n processFn: (path, code) => {\n if (typeof code === 'string') {\n let asmlines = [];\n code = compileInlineASM(code, platform, step, errors, asmlines);\n if (asmlines.length) {\n listings[path] = { lines: asmlines };\n }\n }\n return code;\n }\n });\n starttime();\n var xmlPath = `obj_dir/V${topmod}.xml`;\n try {\n var args = [\"--cc\", \"-O3\",\n \"-DEXT_INLINE_ASM\", \"-DTOPMOD__\" + topmod, \"-D__8BITWORKSHOP__\",\n \"-Wall\",\n \"-Wno-DECLFILENAME\", \"-Wno-UNUSED\", \"-Wno-EOFNEWLINE\", \"-Wno-PROCASSWIRE\",\n \"--x-assign\", \"fast\", \"--noassert\", \"--pins-sc-biguint\",\n \"--debug-check\", // for XML output\n \"--top-module\", topmod, step.path]\n execMain(step, verilator_mod, args);\n } catch (e) {\n console.log(e);\n errors.push({ line: 0, msg: \"Compiler internal error: \" + e });\n }\n endtime(\"compile\");\n // remove boring errors\n errors = errors.filter(function (e) { return !/Exiting due to \\d+/.exec(e.msg); }, errors);\n errors = errors.filter(function (e) { return !/Use [\"][/][*]/.exec(e.msg); }, errors);\n if (errors.length) {\n return { errors: errors };\n }\n starttime();\n var xmlParser = new vxmlparser.VerilogXMLParser();\n try {\n var xmlContent = FS.readFile(xmlPath, { encoding: 'utf8' });\n var xmlScrubbed = xmlContent.replace(/ fl=\".+?\" loc=\".+?\"/g, '');\n // TODO: this squelches the .asm listing\n //listings[step.prefix + '.xml'] = {lines:[],text:xmlContent};\n putWorkFile(xmlPath, xmlScrubbed); // don't detect changes in source position\n if (!anyTargetChanged(step, [xmlPath]))\n return;\n xmlParser.parse(xmlContent);\n } catch (e) {\n console.log(e, e.stack);\n if (e.$loc != null) {\n let $loc = e.$loc as SourceLocation;\n errors.push({ msg: \"\" + e, path: $loc.path, line: $loc.line });\n } else {\n errors.push({ line: 0, msg: \"\" + e });\n }\n return { errors: errors, listings: listings };\n } finally {\n endtime(\"parse\");\n }\n return {\n output: xmlParser,\n errors: errors,\n listings: listings,\n };\n }\n}\n\n// TODO: test\nexport function compileYosys(step: BuildStep): BuildStepResult {\n loadNative(\"yosys\");\n var code = step.code;\n var errors = [];\n var match_fn = makeErrorMatcher(errors, /ERROR: (.+?) in line (.+?[.]v):(\\d+)[: ]+(.+)/i, 3, 4, step.path);\n starttime();\n var yosys_mod: EmscriptenModule = emglobal.yosys({\n instantiateWasm: moduleInstFn('yosys'),\n noInitialRun: true,\n print: print_fn,\n printErr: match_fn,\n });\n endtime(\"create module\");\n var topmod = detectTopModuleName(code);\n var FS = yosys_mod.FS;\n FS.writeFile(topmod + \".v\", code);\n starttime();\n try {\n execMain(step, yosys_mod, [\"-q\", \"-o\", topmod + \".json\", \"-S\", topmod + \".v\"]);\n } catch (e) {\n console.log(e);\n endtime(\"compile\");\n return { errors: errors };\n }\n endtime(\"compile\");\n //TODO: filename in errors\n if (errors.length) return { errors: errors };\n try {\n var json_file = FS.readFile(topmod + \".json\", { encoding: 'utf8' });\n var json = JSON.parse(json_file);\n console.log(json);\n return { output: json, errors: errors }; // TODO\n } catch (e) {\n console.log(e);\n return { errors: errors };\n }\n}\n\nexport function compileSilice(step: BuildStep): BuildStepResult {\n loadNative(\"silice\");\n var params = step.params;\n gatherFiles(step, { mainFilePath: \"main.ice\" });\n var destpath = step.prefix + '.v';\n var errors: WorkerError[] = [];\n var errfile: string;\n var errline: number;\n if (staleFiles(step, [destpath])) {\n //[preprocessor] 97] attempt to concatenate a nil value (global 'addrW')\n var match_fn = (s: string) => {\n s = (s as any).replaceAll(/\\033\\[\\d+\\w/g, '');\n var mf = /file:\\s*(\\w+)/.exec(s);\n var ml = /line:\\s+(\\d+)/.exec(s);\n var preproc = /\\[preprocessor\\] (\\d+)\\] (.+)/.exec(s);\n if (mf) errfile = mf[1];\n else if (ml) errline = parseInt(ml[1]);\n else if (preproc) {\n errors.push({ path: step.path, line: parseInt(preproc[1]), msg: preproc[2] });\n }\n else if (errfile && errline && s.length > 1) {\n if (s.length > 2) {\n errors.push({ path: errfile + \".ice\", line: errline, msg: s });\n } else {\n errfile = null;\n errline = null;\n }\n }\n else console.log(s);\n }\n var silice: EmscriptenModule = emglobal.silice({\n instantiateWasm: moduleInstFn('silice'),\n noInitialRun: true,\n print: match_fn,\n printErr: match_fn,\n });\n var FS = silice.FS;\n setupFS(FS, 'Silice');\n populateFiles(step, FS);\n populateExtraFiles(step, FS, params.extra_compile_files);\n const FWDIR = '/share/frameworks';\n var args = [\n '-D', 'NTSC=1',\n '--frameworks_dir', FWDIR,\n '-f', `/8bitworkshop.v`,\n '-o', destpath,\n step.path];\n execMain(step, silice, args);\n if (errors.length)\n return { errors: errors };\n var vout = FS.readFile(destpath, { encoding: 'utf8' });\n putWorkFile(destpath, vout);\n }\n return {\n nexttool: \"verilator\",\n path: destpath,\n args: [destpath],\n files: [destpath],\n };\n}\n\n", "import { CodeListingMap, WorkerError } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, populateFiles, putWorkFile, gatherFiles, staleFiles, getWorkFileAsString, fixParamsWithDefines, populateExtraFiles, anyTargetChanged } from \"../builder\";\nimport { parseListing, msvcErrorMatcher, parseSourceLines } from \"../listingutils\";\nimport { EmscriptenModule, emglobal, execMain, load, loadNative, moduleInstFn, print_fn } from \"../wasmutils\";\nimport { preprocessMCPP } from \"./mcpp\";\n\n// http://datapipe-blackbeltsystems.com/windows/flex/asm09.html\nexport function assembleXASM6809(step: BuildStep): BuildStepResult {\n load(\"xasm6809\");\n var alst = \"\";\n var lasterror = null;\n var errors = [];\n function match_fn(s) {\n alst += s;\n alst += \"\\n\";\n if (lasterror) {\n var line = parseInt(s.slice(0, 5)) || 0;\n errors.push({\n line: line,\n msg: lasterror\n });\n lasterror = null;\n }\n else if (s.startsWith(\"***** \")) {\n lasterror = s.slice(6);\n }\n }\n var Module: EmscriptenModule = emglobal.xasm6809({\n noInitialRun: true,\n //logReadFiles:true,\n print: match_fn,\n printErr: print_fn\n });\n var FS = Module.FS;\n //setupFS(FS);\n populateFiles(step, FS, {\n mainFilePath: 'main.asm'\n });\n var binpath = step.prefix + '.bin';\n var lstpath = step.prefix + '.lst'; // in stdout\n execMain(step, Module, [\"-c\", \"-l\", \"-s\", \"-y\", \"-o=\" + binpath, step.path]);\n if (errors.length)\n return { errors: errors };\n var aout = FS.readFile(binpath, { encoding: 'binary' });\n if (aout.length == 0) {\n errors.push({ line: 0, msg: \"Empty output file\" });\n return { errors: errors };\n }\n putWorkFile(binpath, aout);\n putWorkFile(lstpath, alst);\n // TODO: symbol map\n //mond09 0000 \n var symbolmap = {};\n //00005 W 0003 [ 8] A6890011 lda >PALETTE,x\n //00012 0011 0C0203 fcb 12,2,3\n var asmlines = parseListing(alst, /^\\s*([0-9]+) .+ ([0-9A-F]+)\\s+\\[([0-9 ]+)\\]\\s+([0-9A-F]+) (.*)/i, 1, 2, 4, 3);\n var listings: CodeListingMap = {};\n listings[step.prefix + '.lst'] = { lines: asmlines, text: alst };\n return {\n output: aout,\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n };\n}\n\nexport function compileCMOC(step: BuildStep): BuildStepResult {\n loadNative(\"cmoc\");\n var params = step.params;\n // stderr\n var re_err1 = /^[/]*([^:]*):(\\d+): (.+)$/;\n var errors: WorkerError[] = [];\n var errline = 0;\n function match_fn(s) {\n var matches = re_err1.exec(s);\n if (matches) {\n errors.push({\n line: parseInt(matches[2]),\n msg: matches[3],\n path: matches[1] || step.path\n });\n } else {\n console.log(s);\n }\n }\n gatherFiles(step, { mainFilePath: \"main.c\" });\n var destpath = step.prefix + '.s';\n if (staleFiles(step, [destpath])) {\n var args = ['-S', '-Werror', '-V',\n '-I/share/include',\n '-I.',\n step.path];\n var CMOC: EmscriptenModule = emglobal.cmoc({\n instantiateWasm: moduleInstFn('cmoc'),\n noInitialRun: true,\n //logReadFiles:true,\n print: match_fn,\n printErr: match_fn,\n });\n // load source file and preprocess\n var code = getWorkFileAsString(step.path);\n var preproc = preprocessMCPP(step, null);\n if (preproc.errors) {\n return { errors: preproc.errors }\n }\n else code = preproc.code;\n // set up filesystem\n var FS = CMOC.FS;\n //setupFS(FS, '65-'+getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n FS.writeFile(step.path, code);\n fixParamsWithDefines(step.path, params);\n if (params.extra_compile_args) {\n args.unshift.apply(args, params.extra_compile_args);\n }\n execMain(step, CMOC, args);\n if (errors.length)\n return { errors: errors };\n var asmout = FS.readFile(destpath, { encoding: 'utf8' });\n if (step.params.set_stack_end)\n asmout = asmout.replace('stack space in bytes', `\\n lds #${step.params.set_stack_end}\\n`)\n putWorkFile(destpath, asmout);\n }\n return {\n nexttool: \"lwasm\",\n path: destpath,\n args: [destpath],\n files: [destpath],\n };\n}\n\nexport function assembleLWASM(step: BuildStep): BuildStepResult {\n loadNative(\"lwasm\");\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.s\" });\n var objpath = step.prefix + \".o\";\n var lstpath = step.prefix + \".lst\";\n const isRaw = step.path.endsWith('.asm');\n if (staleFiles(step, [objpath, lstpath])) {\n var objout, lstout;\n var args = ['-9', '-I/share/asminc', '-o' + objpath, '-l' + lstpath, step.path];\n args.push(isRaw ? '-r' : '--obj');\n var LWASM: EmscriptenModule = emglobal.lwasm({\n instantiateWasm: moduleInstFn('lwasm'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: msvcErrorMatcher(errors),\n });\n var FS = LWASM.FS;\n //setupFS(FS, '65-'+getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n fixParamsWithDefines(step.path, step.params);\n execMain(step, LWASM, args);\n if (errors.length)\n return { errors: errors };\n objout = FS.readFile(objpath, { encoding: 'binary' });\n lstout = FS.readFile(lstpath, { encoding: 'utf8' });\n putWorkFile(objpath, objout);\n putWorkFile(lstpath, lstout);\n if (isRaw) {\n return {\n output: objout\n };\n }\n }\n return {\n linktool: \"lwlink\",\n files: [objpath, lstpath],\n args: [objpath]\n };\n}\n\nexport function linkLWLINK(step: BuildStep): BuildStepResult {\n loadNative(\"lwlink\");\n var params = step.params;\n gatherFiles(step);\n var binpath = \"main\";\n if (staleFiles(step, [binpath])) {\n var errors = [];\n var LWLINK: EmscriptenModule = emglobal.lwlink({\n instantiateWasm: moduleInstFn('lwlink'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: function (s) {\n if (s.startsWith(\"Warning:\"))\n console.log(s);\n else\n errors.push({ msg: s, line: 0 });\n }\n });\n var FS = LWLINK.FS;\n //setupFS(FS, '65-'+getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n populateExtraFiles(step, FS, params.extra_link_files);\n var libargs = params.extra_link_args || [];\n var args = [\n '-L.',\n '--entry=program_start',\n '--raw',\n '--output=main',\n '--map=main.map'].concat(libargs, step.args);\n console.log(args);\n execMain(step, LWLINK, args);\n if (errors.length)\n return { errors: errors };\n var aout = FS.readFile(\"main\", { encoding: 'binary' });\n var mapout = FS.readFile(\"main.map\", { encoding: 'utf8' });\n putWorkFile(\"main\", aout);\n putWorkFile(\"main.map\", mapout);\n // return unchanged if no files changed\n if (!anyTargetChanged(step, [\"main\", \"main.map\"]))\n return;\n // parse symbol map\n //console.log(mapout);\n var symbolmap = {};\n var segments = [];\n for (var s of mapout.split(\"\\n\")) {\n var toks = s.split(\" \");\n // TODO: use regex\n if (toks[0] == 'Symbol:') {\n let ident = toks[1];\n let ofs = parseInt(toks[4], 16);\n if (ident && ofs >= 0 \n && !ident.startsWith(\"l_\") \n //&& !/^L\\d+$/.test(ident)\n && !ident.startsWith('funcsize_')\n && !ident.startsWith('funcend_')) {\n symbolmap[ident] = ofs;\n }\n }\n else if (toks[0] == 'Section:') {\n let seg = toks[1];\n let segstart = parseInt(toks[5], 16);\n let segsize = parseInt(toks[7], 16);\n segments.push({ name: seg, start: segstart, size: segsize });\n }\n }\n // build listings\n const re_segment = /\\s*SECTION\\s+(\\w+)/i;\n const re_function = /\\s*([0-9a-f]+).+?(\\w+)\\s+EQU\\s+[*]/i;\n var listings: CodeListingMap = {};\n for (var fn of step.files) {\n if (fn.endsWith('.lst')) {\n // TODO\n var lstout = FS.readFile(fn, { encoding: 'utf8' });\n var asmlines = parseListing(lstout, /^([0-9A-F]+)\\s+([0-9A-F]+)\\s+[(]\\s*(.+?)[)]:(\\d+) (.*)/i, 4, 1, 2, 3, re_function, re_segment);\n for (let l of asmlines) {\n l.offset += symbolmap[l.func] || 0;\n }\n // * Line //threed.c:117: init of variable e\n var srclines = parseSourceLines(lstout, /Line .+?:(\\d+)/i, /^([0-9A-F]{4})/i, re_function, re_segment);\n for (let l of srclines) {\n l.offset += symbolmap[l.func] || 0;\n }\n putWorkFile(fn, lstout);\n // strip out left margin\n lstout = lstout.split('\\n').map(l => l.substring(0,15) + l.substring(56)).join('\\n')\n // TODO: you have to get rid of all source lines to get asm listing\n listings[fn] = {\n asmlines: srclines.length ? asmlines : null,\n lines: srclines.length ? srclines : asmlines,\n text: lstout\n };\n }\n }\n return {\n output: aout, //.slice(0),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\n", "\nimport { WorkerError, CodeListingMap } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, populateFiles, putWorkFile, anyTargetChanged, gatherFiles, staleFiles } from \"../builder\";\nimport { parseListing, makeErrorMatcher } from \"../listingutils\";\nimport { loadNative, emglobal, moduleInstFn, execMain, print_fn } from \"../wasmutils\";\nimport { EmscriptenModule } from \"../wasmutils\";\n\n// http://www.nespowerpak.com/nesasm/\nexport function assembleNESASM(step: BuildStep): BuildStepResult {\n loadNative(\"nesasm\");\n var re_filename = /\\#\\[(\\d+)\\]\\s+(\\S+)/;\n var re_insn = /\\s+(\\d+)\\s+([0-9A-F]+):([0-9A-F]+)/;\n var re_error = /\\s+(.+)/;\n var errors: WorkerError[] = [];\n var state = 0;\n var lineno = 0;\n var filename;\n function match_fn(s) {\n var m;\n switch (state) {\n case 0:\n m = re_filename.exec(s);\n if (m) {\n filename = m[2];\n }\n m = re_insn.exec(s);\n if (m) {\n lineno = parseInt(m[1]);\n state = 1;\n }\n break;\n case 1:\n m = re_error.exec(s);\n if (m) {\n errors.push({ path: filename, line: lineno, msg: m[1] });\n state = 0;\n }\n break;\n }\n }\n var Module: EmscriptenModule = emglobal.nesasm({\n instantiateWasm: moduleInstFn('nesasm'),\n noInitialRun: true,\n print: match_fn\n });\n var FS = Module.FS;\n populateFiles(step, FS, {\n mainFilePath: 'main.a'\n });\n var binpath = step.prefix + '.nes';\n var lstpath = step.prefix + '.lst';\n var sympath = step.prefix + '.fns';\n execMain(step, Module, [step.path, '-s', \"-l\", \"2\"]);\n // parse main listing, get errors and listings for each file\n var listings: CodeListingMap = {};\n try {\n var alst = FS.readFile(lstpath, { 'encoding': 'utf8' });\n // 16 00:C004 8E 17 40 STX $4017 ; disable APU frame IRQ\n var asmlines = parseListing(alst, /^\\s*(\\d+)\\s+([0-9A-F]+):([0-9A-F]+)\\s+([0-9A-F ]+?) (.*)/i, 1, 3, 4);\n putWorkFile(lstpath, alst);\n listings[lstpath] = {\n lines: asmlines,\n text: alst\n };\n } catch (e) {\n //\n }\n if (errors.length) {\n return { errors: errors };\n }\n // read binary rom output and symbols\n var aout, asym;\n aout = FS.readFile(binpath);\n try {\n asym = FS.readFile(sympath, { 'encoding': 'utf8' });\n } catch (e) {\n console.log(e);\n errors.push({ line: 0, msg: \"No symbol table generated, maybe missing ENDM or segment overflow?\" });\n return { errors: errors }\n }\n putWorkFile(binpath, aout);\n putWorkFile(sympath, asym);\n if (alst) putWorkFile(lstpath, alst); // listing optional (use LIST)\n // return unchanged if no files changed\n if (!anyTargetChanged(step, [binpath, sympath]))\n return;\n // parse symbols\n var symbolmap = {};\n for (var s of asym.split(\"\\n\")) {\n if (!s.startsWith(';')) {\n var m = /(\\w+)\\s+=\\s+[$]([0-9A-F]+)/.exec(s);\n if (m) {\n symbolmap[m[1]] = parseInt(m[2], 16);\n }\n }\n }\n return {\n output: aout,\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n };\n}\n\n\n/*\n------+-------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------\nLine | # File Line | Line Type | MX | Reloc | Size | Address Object Code | Source Code \n------+-------------------+-------------+----+---------+------+-----------------------+-------------------------------------------------------------------\n 1 | 1 zap.asm 1 | Unknown | ?? | | -1 | 00/FFFF | broak \n 2 | 1 zap.asm 2 | Comment | ?? | | -1 | 00/FFFF | * SPACEGAME\n \n => [Error] Impossible to decode address mode for instruction 'BNE KABOOM!' (line 315, file 'zap.asm') : The number of element in 'KABOOM!' is even (should be value [operator value [operator value]...]).\n => [Error] Unknown line 'foo' in source file 'zap.asm' (line 315)\n => Creating Object file 'pcs.bin'\n => Creating Output file 'pcs.bin_S01__Output.txt'\n\n*/\nexport function assembleMerlin32(step: BuildStep): BuildStepResult {\n loadNative(\"merlin32\");\n var errors = [];\n var lstfiles = [];\n gatherFiles(step, { mainFilePath: \"main.lnk\" });\n var objpath = step.prefix + \".bin\";\n if (staleFiles(step, [objpath])) {\n var args = ['-v', step.path];\n var merlin32: EmscriptenModule = emglobal.merlin32({\n instantiateWasm: moduleInstFn('merlin32'),\n noInitialRun: true,\n print: (s: string) => {\n var m = /\\s*=>\\s*Creating Output file '(.+?)'/.exec(s);\n if (m) {\n lstfiles.push(m[1]);\n }\n var errpos = s.indexOf('Error');\n if (errpos >= 0) {\n s = s.slice(errpos + 6).trim();\n var mline = /\\bline (\\d+)\\b/.exec(s);\n var mpath = /\\bfile '(.+?)'/.exec(s);\n errors.push({\n line: parseInt(mline[1]) || 0,\n msg: s,\n path: mpath[1] || step.path,\n });\n }\n },\n printErr: print_fn,\n });\n var FS = merlin32.FS;\n populateFiles(step, FS);\n execMain(step, merlin32, args);\n if (errors.length)\n return { errors: errors };\n\n var errout = null;\n try {\n errout = FS.readFile(\"error_output.txt\", { encoding: 'utf8' });\n } catch (e) {\n //\n }\n\n var objout = FS.readFile(objpath, { encoding: 'binary' });\n putWorkFile(objpath, objout);\n if (!anyTargetChanged(step, [objpath]))\n return;\n\n var symbolmap = {};\n var segments = [];\n var listings: CodeListingMap = {};\n lstfiles.forEach((lstfn) => {\n var lst = FS.readFile(lstfn, { encoding: 'utf8' }) as string;\n lst.split('\\n').forEach((line) => {\n var toks = line.split(/\\s*\\|\\s*/);\n if (toks && toks[6]) {\n var toks2 = toks[1].split(/\\s+/);\n var toks3 = toks[6].split(/[:/]/, 4);\n var path = toks2[1];\n if (path && toks2[2] && toks3[1]) {\n var lstline = {\n line: parseInt(toks2[2]),\n offset: parseInt(toks3[1].trim(), 16),\n insns: toks3[2],\n cycles: null,\n iscode: false // TODO\n };\n var lst = listings[path];\n if (!lst) listings[path] = lst = { lines: [] };\n lst.lines.push(lstline);\n //console.log(path,toks2,toks3);\n }\n }\n });\n });\n return {\n output: objout, //.slice(0),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\n// README.md:2:5: parse error, expected: statement or variable assignment, integer variable, variable assignment\nexport function compileFastBasic(step: BuildStep): BuildStepResult {\n // TODO: fastbasic-fp?\n loadNative(\"fastbasic-int\");\n var params = step.params;\n gatherFiles(step, { mainFilePath: \"main.fb\" });\n var destpath = step.prefix + '.s';\n var errors = [];\n if (staleFiles(step, [destpath])) {\n var fastbasic: EmscriptenModule = emglobal.fastbasic({\n instantiateWasm: moduleInstFn('fastbasic-int'),\n noInitialRun: true,\n print: print_fn,\n printErr: makeErrorMatcher(errors, /(.+?):(\\d+):(\\d+):\\s*(.+)/, 2, 4, step.path, 1),\n });\n var FS = fastbasic.FS;\n populateFiles(step, FS);\n var libfile = 'fastbasic-int.lib'\n params.libargs = [libfile];\n params.cfgfile = params.fastbasic_cfgfile;\n //params.extra_compile_args = [\"--asm-define\", \"NO_SMCODE\"];\n params.extra_link_files = [libfile, params.cfgfile];\n //fixParamsWithDefines(step.path, params);\n var args = [step.path, destpath];\n execMain(step, fastbasic, args);\n if (errors.length)\n return { errors: errors };\n var asmout = FS.readFile(destpath, { encoding: 'utf8' });\n putWorkFile(destpath, asmout);\n }\n return {\n nexttool: \"ca65\",\n path: destpath,\n args: [destpath],\n files: [destpath],\n };\n}\n\n", "\nimport { CodeListingMap } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, gatherFiles, staleFiles, populateFiles, putWorkFile, anyTargetChanged } from \"../builder\";\nimport { makeErrorMatcher, parseListing } from \"../listingutils\";\nimport { EmscriptenModule, emglobal, execMain, loadNative, moduleInstFn, print_fn } from \"../wasmutils\";\n\n\nexport function assembleZMAC(step: BuildStep): BuildStepResult {\n loadNative(\"zmac\");\n var hexout, lstout, binout;\n var errors = [];\n var params = step.params;\n gatherFiles(step, { mainFilePath: \"main.asm\" });\n var lstpath = step.prefix + \".lst\";\n var binpath = step.prefix + \".cim\";\n if (staleFiles(step, [binpath])) {\n /*\n error1.asm(4) : 'l18d4' Undeclared\n JP L18D4\n \n error1.asm(11): warning: 'foobar' treated as label (instruction typo?)\n Add a colon or move to first column to stop this warning.\n 1 errors (see listing if no diagnostics appeared here)\n */\n var ZMAC: EmscriptenModule = emglobal.zmac({\n instantiateWasm: moduleInstFn('zmac'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: makeErrorMatcher(errors, /([^( ]+)\\s*[(](\\d+)[)]\\s*:\\s*(.+)/, 2, 3, step.path),\n });\n var FS = ZMAC.FS;\n populateFiles(step, FS);\n // TODO: don't know why CIM (hexary) doesn't work\n execMain(step, ZMAC, ['-z', '-c', '--oo', 'lst,cim', step.path]);\n if (errors.length) {\n return { errors: errors };\n }\n lstout = FS.readFile(\"zout/\" + lstpath, { encoding: 'utf8' });\n binout = FS.readFile(\"zout/\" + binpath, { encoding: 'binary' });\n putWorkFile(binpath, binout);\n putWorkFile(lstpath, lstout);\n if (!anyTargetChanged(step, [binpath, lstpath]))\n return;\n // 230: 1739+7+x 017A 1600 L017A: LD D,00h\n var lines = parseListing(lstout, /\\s*(\\d+):\\s*([0-9a-f]+)\\s+([0-9a-f]+)\\s+(.+)/i, 1, 2, 3);\n var listings: CodeListingMap = {};\n listings[lstpath] = { lines: lines };\n // parse symbol table\n var symbolmap = {};\n var sympos = lstout.indexOf('Symbol Table:');\n if (sympos > 0) {\n var symout = lstout.slice(sympos + 14);\n symout.split('\\n').forEach(function (l) {\n var m = l.match(/(\\S+)\\s+([= ]*)([0-9a-f]+)/i);\n if (m) {\n symbolmap[m[1]] = parseInt(m[3], 16);\n }\n });\n }\n return {\n output: binout,\n listings: listings,\n errors: errors,\n symbolmap: symbolmap\n };\n }\n}\n\n", "import { WorkerError, CodeListingMap } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, gatherFiles, staleFiles, getWorkFileAsString, populateFiles, fixParamsWithDefines, putWorkFile, anyTargetChanged } from \"../builder\";\nimport { msvcErrorMatcher, parseListing } from \"../listingutils\";\nimport { EmscriptenModule, emglobal, execMain, loadNative, moduleInstFn, print_fn } from \"../wasmutils\";\nimport { preprocessMCPP } from \"./mcpp\";\n\n// http://www.techhelpmanual.com/829-program_startup___exit.html\nexport function compileSmallerC(step: BuildStep): BuildStepResult {\n loadNative(\"smlrc\");\n var params = step.params;\n // stderr\n var re_err1 = /^Error in \"[/]*(.+)\" [(](\\d+):(\\d+)[)]/;\n var errors: WorkerError[] = [];\n var errline = 0;\n var errpath = step.path;\n function match_fn(s) {\n var matches = re_err1.exec(s);\n if (matches) {\n errline = parseInt(matches[2]);\n errpath = matches[1];\n } else {\n errors.push({\n line: errline,\n msg: s,\n path: errpath,\n });\n }\n }\n gatherFiles(step, { mainFilePath: \"main.c\" });\n var destpath = step.prefix + '.asm';\n if (staleFiles(step, [destpath])) {\n var args = ['-seg16',\n //'-nobss',\n '-no-externs',\n step.path, destpath];\n var smlrc: EmscriptenModule = emglobal.smlrc({\n instantiateWasm: moduleInstFn('smlrc'),\n noInitialRun: true,\n //logReadFiles:true,\n print: match_fn,\n printErr: match_fn,\n });\n // load source file and preprocess\n var code = getWorkFileAsString(step.path);\n var preproc = preprocessMCPP(step, null);\n if (preproc.errors) {\n return { errors: preproc.errors };\n }\n else code = preproc.code;\n // set up filesystem\n var FS = smlrc.FS;\n //setupFS(FS, '65-'+getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n FS.writeFile(step.path, code);\n fixParamsWithDefines(step.path, params);\n if (params.extra_compile_args) {\n args.unshift.apply(args, params.extra_compile_args);\n }\n execMain(step, smlrc, args);\n if (errors.length)\n return { errors: errors };\n var asmout = FS.readFile(destpath, { encoding: 'utf8' });\n putWorkFile(destpath, asmout);\n }\n return {\n nexttool: \"yasm\",\n path: destpath,\n args: [destpath],\n files: [destpath],\n };\n}\n\nexport function assembleYASM(step: BuildStep): BuildStepResult {\n loadNative(\"yasm\");\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.asm\" });\n var objpath = step.prefix + \".exe\";\n var lstpath = step.prefix + \".lst\";\n var mappath = step.prefix + \".map\";\n if (staleFiles(step, [objpath])) {\n var args = ['-X', 'vc',\n '-a', 'x86', '-f', 'dosexe', '-p', 'nasm',\n '-D', 'freedos',\n //'-g', 'dwarf2',\n //'-I/share/asminc',\n '-o', objpath, '-l', lstpath, '--mapfile=' + mappath,\n step.path];\n // return yasm/*.ready*/\n var YASM: EmscriptenModule = emglobal.yasm({\n instantiateWasm: moduleInstFn('yasm'),\n noInitialRun: true,\n //logReadFiles:true,\n print: print_fn,\n printErr: msvcErrorMatcher(errors),\n });\n var FS = YASM.FS;\n //setupFS(FS, '65-'+getRootBasePlatform(step.platform));\n populateFiles(step, FS);\n //fixParamsWithDefines(step.path, step.params);\n execMain(step, YASM, args);\n if (errors.length)\n return { errors: errors };\n var objout, lstout, mapout;\n objout = FS.readFile(objpath, { encoding: 'binary' });\n lstout = FS.readFile(lstpath, { encoding: 'utf8' });\n mapout = FS.readFile(mappath, { encoding: 'utf8' });\n putWorkFile(objpath, objout);\n putWorkFile(lstpath, lstout);\n //putWorkFile(mappath, mapout);\n if (!anyTargetChanged(step, [objpath]))\n return;\n var symbolmap = {};\n var segments = [];\n var lines = parseListing(lstout, /\\s*(\\d+)\\s+([0-9a-f]+)\\s+([0-9a-f]+)\\s+(.+)/i, 1, 2, 3);\n var listings: CodeListingMap = {};\n listings[lstpath] = { lines: lines, text: lstout };\n return {\n output: objout, //.slice(0),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\n", "\nimport { hex } from \"../../common/util\";\nimport { CodeListingMap, SourceLine, WorkerError, WorkerResult } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, gatherFiles, staleFiles, populateFiles, putWorkFile, anyTargetChanged, getPrefix, getWorkFileAsString } from \"../builder\";\nimport { makeErrorMatcher, re_crlf } from \"../listingutils\";\nimport { loadNative, moduleInstFn, execMain, emglobal, EmscriptenModule } from \"../wasmutils\";\n\nexport function assembleARMIPS(step: BuildStep): WorkerResult {\n loadNative(\"armips\");\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.asm\" });\n var objpath = \"main.bin\";\n var lstpath = step.prefix + \".lst\";\n var sympath = step.prefix + \".sym\";\n //test.armips(3) error: Parse error '.arm'\n var error_fn = makeErrorMatcher(errors, /^(.+?)\\((\\d+)\\)\\s+(fatal error|error|warning):\\s+(.+)/, 2, 4, step.path, 1);\n\n if (staleFiles(step, [objpath])) {\n var args = [step.path, '-temp', lstpath, '-sym', sympath, '-erroronwarning'];\n var armips: EmscriptenModule = emglobal.armips({\n instantiateWasm: moduleInstFn('armips'),\n noInitialRun: true,\n print: error_fn,\n printErr: error_fn,\n });\n\n var FS = armips.FS;\n var code = getWorkFileAsString(step.path);\n code = `.arm.little :: .create \"${objpath}\",0 :: ${code}\n .close`;\n putWorkFile(step.path, code);\n populateFiles(step, FS);\n execMain(step, armips, args);\n if (errors.length)\n return { errors: errors };\n\n var objout = FS.readFile(objpath, { encoding: 'binary' }) as Uint8Array;\n putWorkFile(objpath, objout);\n if (!anyTargetChanged(step, [objpath]))\n return;\n\n var symbolmap = {};\n var segments = [];\n var listings: CodeListingMap = {};\n var lstout = FS.readFile(lstpath, { encoding: 'utf8' }) as string;\n var lines = lstout.split(re_crlf);\n //00000034 .word 0x11223344 ; /vidfill.armips line 25\n var re_asmline = /^([0-9A-F]+) (.+?); [/](.+?) line (\\d+)/;\n var lastofs = -1;\n for (var line of lines) {\n var m;\n if (m = re_asmline.exec(line)) {\n var path = m[3];\n var path2 = getPrefix(path) + '.lst'; // TODO: don't rename listing\n var lst = listings[path2];\n if (lst == null) { lst = listings[path2] = { lines: [] }; }\n var ofs = parseInt(m[1], 16);\n if (lastofs == ofs) {\n lst.lines.pop(); // get rid of duplicate offset\n } else if (ofs > lastofs) {\n var lastline = lst.lines[lst.lines.length - 1];\n if (lastline && !lastline.insns) {\n var insns = objout.slice(lastofs, ofs).reverse();\n lastline.insns = Array.from(insns).map((b) => hex(b, 2)).join('');\n }\n }\n lst.lines.push({\n path: path,\n line: parseInt(m[4]),\n offset: ofs\n });\n lastofs = ofs;\n }\n }\n //listings[lstpath] = {lines:lstlines, text:lstout};\n\n var symout = FS.readFile(sympath, { encoding: 'utf8' }) as string;\n //0000000C loop2\n //00000034 .dbl:0004\n var re_symline = /^([0-9A-F]+)\\s+(.+)/;\n for (var line of symout.split(re_crlf)) {\n var m;\n if (m = re_symline.exec(line)) {\n symbolmap[m[2]] = parseInt(m[1], 16);\n }\n }\n\n return {\n output: objout, //.slice(0),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\nexport function assembleVASMARM(step: BuildStep): BuildStepResult {\n loadNative(\"vasmarm_std\");\n /// error 2 in line 8 of \"gfxtest.c\": unknown mnemonic <ew>\n /// error 3007: undefined symbol <XXLOOP>\n /// TODO: match undefined symbols\n var re_err1 = /^(fatal error|error|warning)? (\\d+) in line (\\d+) of \"(.+)\": (.+)/;\n var re_err2 = /^(fatal error|error|warning)? (\\d+): (.+)/;\n var re_undefsym = /symbol <(.+?)>/;\n var errors: WorkerError[] = [];\n var undefsyms = [];\n function findUndefinedSymbols(line: string) {\n // find undefined symbols in line\n undefsyms.forEach((sym) => {\n if (line.indexOf(sym) >= 0) {\n errors.push({\n path: curpath,\n line: curline,\n msg: \"Undefined symbol: \" + sym,\n })\n }\n });\n }\n function match_fn(s) {\n let matches = re_err1.exec(s);\n if (matches) {\n errors.push({\n line: parseInt(matches[3]),\n path: matches[4],\n msg: matches[5],\n });\n } else {\n matches = re_err2.exec(s);\n if (matches) {\n let m = re_undefsym.exec(matches[3]);\n if (m) {\n undefsyms.push(m[1]);\n } else {\n errors.push({\n line: 0,\n msg: s,\n });\n }\n } else {\n console.log(s);\n }\n }\n }\n\n gatherFiles(step, { mainFilePath: \"main.asm\" });\n var objpath = step.prefix + \".bin\";\n var lstpath = step.prefix + \".lst\";\n\n if (staleFiles(step, [objpath])) {\n var args = ['-Fbin', '-m7tdmi', '-x', '-wfail', step.path, '-o', objpath, '-L', lstpath];\n var vasm: EmscriptenModule = emglobal.vasm({\n instantiateWasm: moduleInstFn('vasmarm_std'),\n noInitialRun: true,\n print: match_fn,\n printErr: match_fn,\n });\n\n var FS = vasm.FS;\n populateFiles(step, FS);\n execMain(step, vasm, args);\n if (errors.length) {\n return { errors: errors };\n }\n\n if (undefsyms.length == 0) {\n var objout = FS.readFile(objpath, { encoding: 'binary' });\n putWorkFile(objpath, objout);\n if (!anyTargetChanged(step, [objpath]))\n return;\n }\n\n var lstout = FS.readFile(lstpath, { encoding: 'utf8' });\n // 00:00000018 023020E0 \t 14: eor r3, r0, r2\n // Source: \"vidfill.vasm\"\n // 00: \".text\" (0-40)\n // LOOP 00:00000018\n // STACK S:20010000\n var symbolmap = {};\n var segments = []; // TODO\n var listings: CodeListingMap = {};\n // TODO: parse listings\n var re_asmline = /^(\\d+):([0-9A-F]+)\\s+([0-9A-F ]+)\\s+(\\d+)([:M])/;\n var re_secline = /^(\\d+):\\s+\"(.+)\"/;\n var re_nameline = /^Source:\\s+\"(.+)\"/;\n var re_symline = /^(\\w+)\\s+(\\d+):([0-9A-F]+)/;\n var re_emptyline = /^\\s+(\\d+)([:M])/;\n var curpath = step.path;\n var curline = 0;\n var sections = {};\n // map file and section indices -> names\n var lines: string[] = lstout.split(re_crlf);\n // parse lines\n var lstlines: SourceLine[] = [];\n for (var line of lines) {\n var m;\n if (m = re_secline.exec(line)) {\n sections[m[1]] = m[2];\n } else if (m = re_nameline.exec(line)) {\n curpath = m[1];\n } else if (m = re_symline.exec(line)) {\n symbolmap[m[1]] = parseInt(m[3], 16);\n } else if (m = re_asmline.exec(line)) {\n if (m[5] == ':') {\n curline = parseInt(m[4]);\n } else {\n // TODO: macro line\n }\n lstlines.push({\n path: curpath,\n line: curline,\n offset: parseInt(m[2], 16),\n insns: m[3].replaceAll(' ', '')\n });\n findUndefinedSymbols(line);\n } else if (m = re_emptyline.exec(line)) {\n curline = parseInt(m[1]);\n findUndefinedSymbols(line);\n } else {\n //console.log(line);\n }\n }\n listings[lstpath] = { lines: lstlines, text: lstout };\n // catch-all if no error generated\n if (undefsyms.length && errors.length == 0) {\n errors.push({\n line: 0,\n msg: 'Undefined symbols: ' + undefsyms.join(', ')\n })\n }\n\n return {\n output: objout, //.slice(0x34),\n listings: listings,\n errors: errors,\n symbolmap: symbolmap,\n segments: segments\n };\n }\n}\n\n", "\nimport type { SourceLocation, SourceLine, WorkerError, SourceLocated } from \"./workertypes\";\n\nexport class CompileError extends Error {\n $loc: SourceLocation;\n constructor(msg: string, loc: SourceLocation) {\n super(msg);\n Object.setPrototypeOf(this, CompileError.prototype);\n this.$loc = loc;\n }\n}\n\nexport function mergeLocs(a: SourceLocation, b: SourceLocation): SourceLocation {\n return {\n line: Math.min(a.line, b.line),\n start: Math.min(a.start, b.start),\n end: Math.max(a.end, b.end),\n label: a.label || b.label,\n path: a.path || b.path,\n }\n}\n\nexport enum TokenType {\n EOF = 'eof',\n EOL = 'eol',\n Ident = 'ident',\n Comment = 'comment',\n Ignore = 'ignore',\n CatchAll = 'catch-all',\n}\n\nexport class Token implements SourceLocated {\n str: string;\n type: string;\n eol: boolean; // end of line?\n $loc: SourceLocation;\n}\n\nexport class TokenRule {\n type: string;\n regex: RegExp;\n}\n\nconst CATCH_ALL_RULES: TokenRule[] = [\n { type: TokenType.CatchAll, regex: /.+?/ }\n]\n\nfunction re_escape(rule: TokenRule): string {\n return `(${rule.regex.source})`;\n}\n\nexport class TokenizerRuleSet {\n rules: TokenRule[];\n regex: RegExp;\n constructor(rules: TokenRule[]) {\n this.rules = rules.concat(CATCH_ALL_RULES);\n var pattern = this.rules.map(re_escape).join('|');\n this.regex = new RegExp(pattern, \"gs\"); // global, dotall\n }\n}\n\nexport class Tokenizer {\n ruleset: TokenizerRuleSet;\n lineindex: number[];\n path: string;\n lineno: number;\n tokens: Token[];\n lasttoken: Token;\n errors: WorkerError[];\n curlabel: string;\n eof: Token;\n errorOnCatchAll = false;\n deferred: (() => void)[] = [];\n\n constructor() {\n this.errors = [];\n this.lineno = 0;\n this.lineindex = [];\n this.tokens = [];\n }\n setTokenRuleSet(ruleset: TokenizerRuleSet) {\n this.ruleset = ruleset;\n }\n setTokenRules(rules: TokenRule[]) {\n this.setTokenRuleSet(new TokenizerRuleSet(rules));\n }\n tokenizeFile(contents: string, path: string) {\n this.path = path;\n let m;\n let re = /\\n|\\r\\n?/g;\n this.lineindex.push(0);\n while (m = re.exec(contents)) {\n this.lineindex.push(m.index);\n }\n this._tokenize(contents);\n this.eof = { type: TokenType.EOF, str: \"\", eol: true, $loc: { path: this.path, line: this.lineno } };\n this.pushToken(this.eof);\n }\n _tokenize(text: string): void {\n // iterate over each token via re_toks regex\n let m: RegExpMatchArray;\n this.lineno = 0;\n while (m = this.ruleset.regex.exec(text)) {\n let found = false;\n // find line #\n while (m.index >= this.lineindex[this.lineno]) {\n this.lineno++;\n }\n // find out which capture group was matched, and thus token type\n let rules = this.ruleset.rules;\n for (let i = 0; i < rules.length; i++) {\n let s: string = m[i + 1];\n if (s != null) {\n found = true;\n let col = m.index - (this.lineindex[this.lineno-1] || -1) - 1;\n let loc = { path: this.path, line: this.lineno, start: col, end: col + s.length };\n let rule = rules[i];\n // add token to list\n switch (rule.type) {\n case TokenType.CatchAll:\n if (this.errorOnCatchAll) {\n this.compileError(`I didn't expect the character \"${m[0]}\" here.`, loc);\n }\n default:\n this.pushToken({ str: s, type: rule.type, $loc: loc, eol: false });\n break;\n case TokenType.EOL:\n // set EOL for last token\n if (this.tokens.length)\n this.tokens[this.tokens.length-1].eol = true;\n case TokenType.Comment:\n case TokenType.Ignore:\n break;\n }\n break;\n }\n }\n if (!found) {\n this.compileError(`Could not parse token: <<${m[0]}>>`)\n }\n }\n }\n pushToken(token: Token) {\n this.tokens.push(token);\n }\n addError(msg: string, loc?: SourceLocation) {\n let tok = this.lasttoken || this.peekToken();\n if (!loc) loc = tok.$loc;\n this.errors.push({ path: loc.path, line: loc.line, label: this.curlabel, start: loc.start, end: loc.end, msg: msg });\n }\n internalError() {\n return this.compileError(\"Internal error.\");\n }\n notImplementedError() {\n return this.compileError(\"Not yet implemented.\");\n }\n compileError(msg: string, loc?: SourceLocation, loc2?: SourceLocation) : CompileError {\n this.addError(msg, loc);\n //if (loc2 != null) this.addError(`...`, loc2);\n let e = new CompileError(msg, loc);\n throw e;\n return e;\n }\n peekToken(lookahead?: number): Token {\n let tok = this.tokens[lookahead || 0];\n return tok ? tok : this.eof;\n }\n consumeToken(): Token {\n let tok = this.lasttoken = (this.tokens.shift() || this.eof);\n return tok;\n }\n ifToken(match: string): Token | undefined {\n if (this.peekToken().str == match) return this.consumeToken();\n }\n expectToken(str: string, msg?: string): Token {\n let tok = this.consumeToken();\n let tokstr = tok.str;\n if (str != tokstr) {\n this.compileError(msg || `There should be a \"${str}\" here.`);\n }\n return tok;\n }\n expectTokens(strlist: readonly string[], msg?: string): Token {\n let tok = this.consumeToken();\n let tokstr = tok.str;\n if (!strlist.includes(tokstr)) {\n this.compileError(msg || `These keywords are valid here: ${strlist.join(', ')}`);\n }\n return tok;\n }\n parseModifiers(modifiers: string[]): { [modifier: string]: boolean } {\n let result = {};\n do {\n var tok = this.peekToken();\n if (modifiers.indexOf(tok.str) < 0)\n return result;\n this.consumeToken();\n result[tok.str] = true;\n } while (tok != null);\n }\n expectIdent(msg?: string): Token {\n let tok = this.consumeToken();\n if (tok.type != TokenType.Ident)\n this.compileError(msg || `There should be an identifier here.`);\n return tok;\n }\n pushbackToken(tok: Token) {\n this.tokens.unshift(tok);\n }\n isEOF() {\n return this.tokens.length == 0 || this.peekToken().type == 'eof'; // TODO?\n }\n expectEOL(msg?: string) {\n let tok = this.consumeToken();\n if (tok.type != TokenType.EOL)\n this.compileError(msg || `There's too much stuff on this line.`);\n }\n skipBlankLines() {\n this.skipTokenTypes(['eol']);\n }\n skipTokenTypes(types: string[]) {\n while (types.includes(this.peekToken().type))\n this.consumeToken();\n }\n expectTokenTypes(types: string[], msg?: string) {\n let tok = this.consumeToken();\n if (!types.includes(tok.type))\n this.compileError(msg || `There should be a ${types.map((s) => `\"${s}\"`).join(' or ')} here. not a \"${tok.type}\".`);\n return tok;\n }\n parseList<T>(parseFunc:()=>T, delim:string): T[] {\n var sep;\n var list = [];\n do {\n var el = parseFunc.bind(this)(); // call parse function\n if (el != null) list.push(el); // add parsed element to list\n sep = this.consumeToken(); // consume seperator token\n } while (sep.str == delim);\n this.pushbackToken(sep);\n return list;\n }\n runDeferred() {\n while (this.deferred.length) {\n this.deferred.shift()();\n }\n }\n}\n", "\nvar debug = false;\n\nexport interface BoxConstraints {\n left?: number;\n top?: number;\n width: number;\n height: number;\n box?: PlacedBox;\n label?: string;\n}\n\nenum BoxPlacement {\n TopLeft=0, TopRight=1, BottomLeft=2, BottomRight=3\n}\n\nexport interface Box {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport interface PlacedBox extends Box {\n bin: Bin;\n parents: Box[];\n place: BoxPlacement;\n}\n\nfunction boxesIntersect(a: Box, b: Box) : boolean {\n return !(b.left >= a.right || b.right <= a.left || b.top >= a.bottom || b.bottom <= a.top);\n}\n\nfunction boxesContain(a: Box, b: Box) : boolean {\n return b.left >= a.left && b.top >= a.top && b.right <= a.right && b.bottom <= a.bottom;\n}\n\nexport class Bin {\n boxes: Box[] = [];\n free: Box[] = [];\n extents: Box = {left:0,top:0,right:0,bottom:0};\n\n constructor(public readonly binbounds: Box) {\n this.free.push(binbounds);\n }\n getBoxes(bounds: Box, limit: number, boxes?: Box[]) : Box[] {\n let result = [];\n if (!boxes) boxes = this.boxes;\n for (let box of boxes) {\n //console.log(bounds, box, boxesIntersect(bounds, box))\n if (boxesIntersect(bounds, box)) {\n result.push(box);\n if (result.length >= limit) break;\n }\n }\n return result;\n }\n fits(b: Box) {\n if (!boxesContain(this.binbounds, b)) {\n if (debug) console.log('out of bounds!', b.left,b.top,b.right,b.bottom);\n return false;\n }\n if (this.getBoxes(b, 1).length > 0) {\n if (debug) console.log('intersect!', b.left,b.top,b.right,b.bottom);\n return false;\n }\n return true;\n }\n bestFit(b: BoxConstraints) : Box | null {\n let bestscore = 0;\n let best = null;\n for (let f of this.free) {\n if (b.left != null && b.left < f.left) continue;\n if (b.left != null && b.left + b.width > f.right) continue;\n if (b.top != null && b.top < f.top) continue;\n if (b.top != null && b.top + b.height > f.bottom) continue;\n let dx = (f.right - f.left) - b.width;\n let dy = (f.bottom - f.top) - b.height;\n if (dx >= 0 && dy >= 0) {\n let score = 1 / (1 + dx + dy + f.left * 0.001);\n if (score > bestscore) {\n best = f;\n bestscore = score;\n if (score == 1) break;\n }\n }\n }\n return best;\n }\n anyFit(b: BoxConstraints) : Box | null {\n let bestscore = 0;\n let best = null;\n for (let f of this.free) {\n let box : Box = { \n left: b.left != null ? b.left : f.left, \n right: f.left + b.width,\n top: b.top != null ? b.top : f.top,\n bottom: f.top + b.height };\n if (this.fits(box)) {\n let score = 1 / (1 + box.left + box.top);\n if (score > bestscore) {\n best = f;\n if (score == 1) break;\n }\n }\n }\n return best;\n }\n add(b: PlacedBox) {\n if (debug) console.log('add', b.left,b.top,b.right,b.bottom);\n if (!this.fits(b)) {\n //console.log('collided with', this.getBoxes(b, 1));\n throw new Error(`bad fit ${b.left} ${b.top} ${b.right} ${b.bottom}`)\n }\n // add box to list\n this.boxes.push(b);\n this.extents.right = Math.max(this.extents.right, b.right);\n this.extents.bottom = Math.max(this.extents.bottom, b.bottom);\n // delete bin\n for (let p of b.parents) {\n let i = this.free.indexOf(p);\n if (i < 0) throw new Error('cannot find parent');\n if (debug) console.log('removed',p.left,p.top,p.right,p.bottom);\n this.free.splice(i, 1);\n // split into new bins\n // make long columns\n this.addFree(p.left, p.top, b.left, p.bottom);\n this.addFree(b.right, p.top, p.right, p.bottom);\n // make top caps\n this.addFree(b.left, p.top, b.right, b.top);\n this.addFree(b.left, b.bottom, b.right, p.bottom);\n }\n }\n addFree(left: number, top: number, right: number, bottom: number) {\n if (bottom > top && right > left) {\n let b = { left, top, right, bottom };\n if (debug) console.log('free',b.left,b.top,b.right,b.bottom);\n this.free.push(b);\n }\n // TODO: merge free boxes?\n }\n}\n\nexport class Packer {\n bins : Bin[] = [];\n boxes : BoxConstraints[] = [];\n defaultPlacement : BoxPlacement = BoxPlacement.TopLeft; //TODO\n\n pack() : boolean {\n for (let bc of this.boxes) {\n let box = this.bestPlacement(bc);\n if (!box) return false;\n box.bin.add(box);\n bc.box = box;\n }\n return true;\n }\n bestPlacement(b: BoxConstraints) : PlacedBox | null {\n for (let bin of this.bins) {\n let parent = bin.bestFit(b);\n let approx = false;\n if (!parent) {\n parent = bin.anyFit(b);\n approx = true;\n if (debug) console.log('anyfit',parent?.left,parent?.top);\n }\n if (parent) {\n let place = this.defaultPlacement;\n let box = {\n left: parent.left,\n top: parent.top,\n right: parent.left + b.width,\n bottom: parent.top + b.height\n };\n if (b.left != null) {\n box.left = b.left;\n box.right = b.left + b.width;\n }\n if (b.top != null) {\n box.top = b.top;\n box.bottom = b.top + b.height;\n }\n if (place == BoxPlacement.BottomLeft || place == BoxPlacement.BottomRight) {\n let h = box.bottom - box.top;\n box.top = parent.bottom - h;\n box.bottom = parent.bottom;\n }\n if (place == BoxPlacement.TopRight || place == BoxPlacement.BottomRight) {\n let w = box.right - box.left;\n box.left = parent.right - w;\n box.right = parent.right;\n }\n if (debug) console.log('place',b.label,box.left,box.top,box.right,box.bottom,parent?.left,parent?.top);\n let parents = [parent];\n // if approx match, might overlap multiple free boxes\n if (approx) parents = bin.getBoxes(box, 100, bin.free);\n return { parents, place, bin, ...box };\n }\n }\n if (debug) console.log('cannot place!', b.left,b.top,b.width,b.height);\n return null;\n }\n toSVG() {\n let s = '';\n let r = {width:100,height:70}\n for (let bin of this.bins) {\n r.width = Math.max(r.width, bin.binbounds.right);\n r.height = Math.max(r.height, bin.binbounds.bottom);\n }\n s += `<svg viewBox=\"0 0 ${r.width} ${r.height}\" xmlns=\"http://www.w3.org/2000/svg\"><style><![CDATA[text {font: 1px sans-serif;}]]></style>`;\n for (let bin of this.bins) {\n let be = bin.extents;\n s += '<g>'\n s += `<rect width=\"${be.right-be.left}\" height=\"${be.bottom-be.top}\" stroke=\"black\" stroke-width=\"0.5\" fill=\"none\"/>`;\n let textx = be.right+1;\n let texty = 0;\n for (let box of this.boxes) {\n let b = box.box;\n if (b) {\n if (b.bin == bin) s += `<rect width=\"${b.right-b.left}\" height=\"${b.bottom-b.top}\" x=\"${b.left}\" y=\"${b.top}\" stroke=\"black\" stroke-width=\"0.25\" fill=\"#ccc\"/>`;\n if (b.top == texty) textx += 10; else textx = be.right+1;\n texty = b.top;\n if (box.label) s += `<text x=\"${textx}\" y=\"${texty}\" height=\"1\">${box.label}</text>`;\n }\n }\n /*\n for (let b of bin.free) {\n s += `<rect width=\"${b.right-b.left}\" height=\"${b.bottom-b.top}\" x=\"${b.left}\" y=\"${b.top}\" stroke=\"red\" stroke-width=\"0.1\" fill=\"none\"/>`;\n }\n */\n s += '</g>'\n }\n s += `</svg>`;\n return s;\n }\n toSVGUrl() {\n return `data:image/svg+xml;base64,${btoa(this.toSVG())}`;\n }\n}\n", "\nimport { Token } from \"../tokenizer\";\nimport { SourceLocated, SourceLocation } from \"../workertypes\";\nimport { Bin, Packer } from \"./binpack\";\n\nexport class ECSError extends Error implements SourceLocated {\n $loc: SourceLocation;\n $sources: SourceLocated[] = [];\n\n constructor(msg: string, obj?: SourceLocation | SourceLocated) {\n super(msg);\n Object.setPrototypeOf(this, ECSError.prototype);\n if (obj) this.$loc = (obj as SourceLocated).$loc || (obj as SourceLocation);\n }\n}\n\nfunction mksymbol(c: ComponentType, fieldName: string) {\n return c.name + '_' + fieldName;\n}\nfunction mkscopesymbol(s: EntityScope, c: ComponentType, fieldName: string) {\n return s.name + '_' + c.name + '_' + fieldName;\n}\n\nexport interface Entity extends SourceLocated {\n id: number;\n name?: string;\n etype: EntityArchetype;\n consts: { [component_field: string]: DataValue };\n // TODO: need scope scoping?\n inits: { [scope_component_field: string]: DataValue };\n}\n\nexport interface EntityConst {\n component: ComponentType;\n name: string;\n value: DataValue;\n}\n\nexport interface EntityArchetype {\n components: ComponentType[];\n}\n\nexport interface ComponentType extends SourceLocated {\n name: string;\n fields: DataField[];\n optional?: boolean;\n}\n\nexport interface Query extends SourceLocated {\n include: ComponentType[];\n exclude?: ComponentType[];\n entities?: Entity[];\n limit?: number;\n}\n\nexport class SystemStats {\n tempstartseq: number | undefined;\n tempendseq: number | undefined;\n}\n\nexport interface System extends SourceLocated {\n name: string;\n actions: Action[];\n tempbytes?: number;\n}\n\nexport interface SystemInstanceParameters {\n query?: Query;\n refEntity?: Entity;\n refField?: ComponentFieldPair;\n}\n\nexport interface SystemInstance extends SourceLocated {\n system: System;\n params: SystemInstanceParameters;\n id: number;\n}\n\nexport const SELECT_TYPE = ['once', 'foreach', 'join', 'with', 'if', 'select', 'unroll'] as const;\n\nexport type SelectType = typeof SELECT_TYPE[number];\n\n// TODO?\nexport interface ActionContext {\n system: System\n scope: EntityScope | null\n}\n\nexport class ActionNode implements SourceLocated {\n constructor(\n public readonly owner: ActionContext,\n public readonly $loc: SourceLocation\n ) { }\n\n children?: ActionNode[];\n}\n\nexport class CodeLiteralNode extends ActionNode {\n constructor(\n owner: ActionContext,\n $loc: SourceLocation,\n public readonly text: string\n ) {\n super(owner, $loc);\n }\n}\n\nexport class CodePlaceholderNode extends ActionNode {\n constructor(\n owner: ActionContext,\n $loc: SourceLocation,\n public readonly args: string[]\n ) {\n super(owner, $loc);\n }\n}\n\nexport interface Action extends SourceLocated {\n event: string;\n expr: Statement;\n critical?: boolean;\n fitbytes?: number;\n}\n\nexport type DataValue = number | boolean | Uint8Array | Uint16Array | Uint32Array;\n\nexport type DataField = { name: string; $loc: SourceLocation } & DataType;\n\nexport type DataType = IntType | ArrayType | RefType;\n\nexport interface IntType {\n dtype: 'int'\n lo: number\n hi: number\n defvalue?: number\n enums?: { [name: string] : number }\n}\n\nexport interface ArrayType {\n dtype: 'array'\n elem: DataType\n index?: DataType\n baseoffset?: number\n}\n\nexport interface RefType {\n dtype: 'ref'\n query: Query\n}\n\ninterface FieldArray {\n component: ComponentType;\n field: DataField;\n elo: number;\n ehi: number;\n access?: FieldAccess[];\n}\n\ninterface FieldAccess {\n symbol: string;\n bit: number;\n width: number;\n}\n\ninterface ConstByte {\n symbol: string;\n bitofs: number;\n}\n\nexport interface ComponentFieldPair {\n c: ComponentType;\n f: DataField;\n}\n\n// Expressions\n\nexport interface ForwardRef extends SourceLocated {\n reftype: RefType | undefined\n token: Token\n}\n\nexport type LExpr = IndOp | EntityFieldOp;\nexport type Statement = InlineCode | BlockExpr | QueryExpr;\nexport type Expr = BinOp | UnOp | Literal | ForwardRef | LExpr | Statement;\nexport type Opcode = string;\n\nexport interface ExprBase extends SourceLocated {\n valtype: DataType;\n}\n\nexport interface Literal extends ExprBase {\n value: DataValue;\n}\n\nexport interface LiteralInt extends Literal {\n value: number;\n valtype: IntType;\n}\n\nexport interface BinOp extends ExprBase {\n op: Opcode;\n left: Expr;\n right: Expr;\n}\n\nexport interface UnOp extends ExprBase {\n op: 'neg' | 'lnot' | 'bnot';\n expr: Expr;\n}\n\nexport interface IndOp extends ExprBase {\n name: string;\n args: Expr[];\n}\n\nexport interface CondOp extends ExprBase {\n cond: Expr;\n iftrue?: Expr;\n iffalse?: Expr;\n}\n\nexport interface BranchOp extends ExprBase {\n branch: BlockExpr;\n}\n\nexport interface EntityFieldOp extends ExprBase {\n entities: Entity[];\n field: DataField;\n}\n\nexport interface EntityContextOp extends ExprBase {\n entities: Entity[];\n}\n\nexport interface InlineCode extends ExprBase {\n code: string;\n}\n\nexport interface BlockExpr extends ExprBase {\n loop?: boolean;\n stmts: Expr[];\n}\n\nexport interface QueryExpr extends BlockExpr {\n select: SelectType\n query: Query\n direction?: 'asc' | 'desc'\n join?: Query\n all?: boolean\n}\n\n\nexport function isLiteral(arg: Expr): arg is Literal {\n return (arg as any).value != null;\n}\nexport function isLiteralInt(arg: Expr): arg is LiteralInt {\n return isLiteral(arg) && arg.valtype.dtype == 'int';\n}\nexport function isLookup(arg: Expr): arg is IndOp {\n return (arg as any).name != null;\n}\nexport function isBinOp(arg: Expr): arg is BinOp {\n return (arg as any).op != null && (arg as any).left != null && (arg as any).right != null;\n}\nexport function isUnOp(arg: Expr): arg is UnOp {\n return (arg as any).op != null && (arg as any).expr != null;\n}\nexport function isBlockStmt(arg: Expr): arg is BlockExpr {\n return (arg as any).stmts != null;\n}\nexport function isInlineCode(arg: Expr): arg is InlineCode {\n return (arg as any).code != null;\n}\nexport function isQueryExpr(arg: Expr): arg is QueryExpr {\n return (arg as any).query != null;\n}\n\n\n/// DIALECT\n\nexport class Dialect_CA65 {\n\n ASM_ITERATE_EACH_ASC = `\n ldx #0\n@__each:\n {{%code}}\n inx\n cpx #{{%ecount}}\n jne @__each\n@__exit:\n`;\n\n ASM_ITERATE_EACH_DESC = `\n ldx #{{%ecount}}-1\n@__each:\n {{%code}}\n dex\n jpl @__each\n@__exit:\n`;\n\n ASM_ITERATE_JOIN_ASC = `\n ldy #0\n@__each:\n ldx {{%joinfield}},y\n {{%code}}\n iny\n cpy #{{%ecount}}\n jne @__each\n@__exit:\n`;\n\n ASM_ITERATE_JOIN_DESC = `\n ldy #{{%ecount}}-1\n@__each:\n ldx {{%joinfield}},y\n {{%code}}\n dey\n jpl @__each\n@__exit:\n`;\n\n ASM_FILTER_RANGE_LO_X = `\n cpx #{{%xofs}}\n jcc @__skipxlo\n {{%code}}\n@__skipxlo:\n`\n\n ASM_FILTER_RANGE_HI_X = `\n cpx #{{%xofs}}+{{%ecount}}\n jcs @__skipxhi\n {{%code}}\n@__skipxhi:\n`\n\n ASM_LOOKUP_REF_X = `\n ldx {{%reffield}}\n {{%code}}\n`\n\n INIT_FROM_ARRAY = `\n ldy #{{%nbytes}}\n: lda {{%src}}-1,y\n sta {{%dest}}-1,y\n dey\n bne :-\n`\n\n comment(s: string) {\n return `\\n;;; ${s}\\n`;\n }\n absolute(ident: string, offset?: number) {\n return this.addOffset(ident, offset || 0);\n }\n addOffset(ident: string, offset: number) {\n if (offset > 0) return `${ident}+${offset}`;\n if (offset < 0) return `${ident}-${-offset}`;\n return ident;\n }\n indexed_x(ident: string, offset: number) {\n return this.addOffset(ident, offset) + ',x';\n }\n indexed_y(ident: string, offset: number) {\n return this.addOffset(ident, offset) + ',y';\n }\n fieldsymbol(component: ComponentType, field: DataField, bitofs: number) {\n return `${component.name}_${field.name}_b${bitofs}`;\n }\n datasymbol(component: ComponentType, field: DataField, eid: number, bitofs: number) {\n return `${component.name}_${field.name}_e${eid}_b${bitofs}`;\n }\n debug_file(path: string) {\n return `.dbg file, \"${path}\", 0, 0`\n }\n debug_line(path: string, line: number) {\n return `.dbg line, \"${path}\", ${line}`\n }\n startScope(name: string) {\n return `.scope ${name}`\n }\n endScope(name: string) {\n return `.endscope\\n${this.scopeSymbol(name)} = ${name}::__Start`\n }\n scopeSymbol(name: string) {\n return `${name}__Start`;\n }\n align(value: number) {\n return `.align ${value}`;\n }\n alignSegmentStart() {\n return this.label('__ALIGNORIGIN');\n }\n warningIfPageCrossed(startlabel: string) {\n return `\n.assert >(${startlabel}) = >(*), error, \"${startlabel} crosses a page boundary!\"`\n }\n warningIfMoreThan(bytes: number, startlabel: string) {\n return `\n.assert (* - ${startlabel}) <= ${bytes}, error, .sprintf(\"${startlabel} does not fit in ${bytes} bytes, it took %d!\", (* - ${startlabel}))`\n }\n alignIfLessThan(bytes: number) {\n return `\n.if <(* - __ALIGNORIGIN) > 256-${bytes}\n.align $100\n.endif`\n }\n segment(segtype: 'rodata' | 'bss' | 'code') {\n if (segtype == 'bss') {\n return `.zeropage`;\n } else if (segtype == 'rodata') {\n return '.rodata';\n } else {\n return `.code`;\n }\n }\n label(sym: string) {\n return `${sym}:`;\n }\n export(sym: string) {\n return `.export _${sym} = ${sym}`;\n }\n byte(b: number | ConstByte | undefined) {\n if (b === undefined) {\n return `.res 1`\n } else if (typeof b === 'number') {\n if (b < 0 || b > 255) throw new ECSError(`out of range byte ${b}`);\n return `.byte ${b}`\n } else {\n if (b.bitofs == 0) return `.byte <${b.symbol}`\n else if (b.bitofs == 8) return `.byte >${b.symbol}`\n else return `.byte ((${b.symbol} >> ${b.bitofs})&255)`\n }\n }\n tempLabel(inst: SystemInstance) {\n return `${inst.system.name}__${inst.id}__tmp`;\n }\n equate(symbol: string, value: string): string {\n return `${symbol} = ${value}`;\n }\n define(symbol: string, value?: string): string {\n if (value) return `.define ${symbol} ${value}`;\n else return `.define ${symbol}`;\n }\n call(symbol: string) {\n return ` jsr ${symbol}`;\n }\n jump(symbol: string) {\n return ` jmp ${symbol}`;\n }\n return() {\n return ' rts';\n }\n}\n\n// TODO: merge with Dialect?\nexport class SourceFileExport {\n lines: string[] = [];\n\n line(s: string) {\n this.text(s);\n }\n text(s: string) {\n for (let l of s.split('\\n'))\n this.lines.push(l);\n }\n toString() {\n return this.lines.join('\\n');\n }\n}\n\nclass CodeSegment {\n codefrags: string[] = [];\n\n addCodeFragment(code: string) {\n this.codefrags.push(code);\n }\n dump(file: SourceFileExport) {\n for (let code of this.codefrags) {\n file.text(code);\n }\n }\n}\n\nclass DataSegment {\n symbols: { [sym: string]: number } = {};\n equates: { [sym: string]: string } = {};\n ofs2sym = new Map<number, string[]>();\n fieldranges: { [cfname: string]: FieldArray } = {};\n size: number = 0;\n initdata: (number | ConstByte | undefined)[] = [];\n\n allocateBytes(name: string, bytes: number) {\n let ofs = this.symbols[name];\n if (ofs == null) {\n ofs = this.size;\n this.declareSymbol(name, ofs);\n this.size += bytes;\n }\n return ofs;\n }\n declareSymbol(name: string, ofs: number) {\n this.symbols[name] = ofs;\n if (!this.ofs2sym.has(ofs))\n this.ofs2sym.set(ofs, []);\n this.ofs2sym.get(ofs)?.push(name);\n }\n // TODO: ordering should not matter, but it does\n findExistingInitData(bytes: Uint8Array) {\n for (let i=0; i<this.size - bytes.length; i++) {\n for (var j=0; j<bytes.length; j++) {\n if (this.initdata[i+j] !== bytes[j]) break;\n }\n if (j == bytes.length) return i;\n }\n return -1;\n }\n allocateInitData(name: string, bytes: Uint8Array) {\n let ofs = this.findExistingInitData(bytes);\n if (ofs >= 0) {\n this.declareSymbol(name, ofs);\n } else {\n ofs = this.allocateBytes(name, bytes.length);\n for (let i = 0; i < bytes.length; i++) {\n this.initdata[ofs + i] = bytes[i];\n }\n }\n }\n dump(file: SourceFileExport, dialect: Dialect_CA65, doExport: boolean) {\n // TODO: fewer lines\n for (let i = 0; i < this.size; i++) {\n let syms = this.ofs2sym.get(i);\n if (syms) {\n for (let sym of syms) {\n if (doExport) file.line(dialect.export(sym)); // TODO: this is a hack for C export\n file.line(dialect.label(sym));\n }\n }\n file.line(dialect.byte(this.initdata[i]));\n }\n for (let [symbol,value] of Object.entries(this.equates)) {\n file.line(dialect.equate(symbol, value));\n }\n }\n // TODO: move cfname functions in here too\n getFieldRange(component: ComponentType, fieldName: string) {\n return this.fieldranges[mksymbol(component, fieldName)];\n }\n getByteOffset(range: FieldArray, access: FieldAccess, entityID: number) {\n if (entityID < range.elo) throw new ECSError(`entity ID ${entityID} too low for ${access.symbol}`);\n if (entityID > range.ehi) throw new ECSError(`entity ID ${entityID} too high for ${access.symbol}`);\n let ofs = this.symbols[access.symbol];\n if (ofs !== undefined) {\n return ofs + entityID - range.elo;\n }\n throw new ECSError(`cannot find field access for ${access.symbol}`);\n }\n getOriginSymbol() {\n let a = this.ofs2sym.get(0);\n if (!a) throw new ECSError('getOriginSymbol(): no symbol at offset 0'); // TODO\n return a[0];\n }\n}\n\nclass UninitDataSegment extends DataSegment {\n}\n\nclass ConstDataSegment extends DataSegment {\n}\n\n// TODO: none of this makes sense\nfunction getFieldBits(f: IntType) {\n //let n = Math.abs(f.lo) + f.hi + 1;\n let n = f.hi - f.lo + 1;\n return Math.ceil(Math.log2(n));\n}\n\nfunction getFieldLength(f: DataType) {\n if (f.dtype == 'int') {\n return f.hi - f.lo + 1;\n } else {\n return 1; //TODO?\n }\n}\n\nfunction getPackedFieldSize(f: DataType, constValue?: DataValue): number {\n if (f.dtype == 'int') {\n return getFieldBits(f);\n } if (f.dtype == 'array' && f.index) {\n return 0; // TODO? getFieldLength(f.index) * getPackedFieldSize(f.elem);\n } if (f.dtype == 'array' && constValue != null && Array.isArray(constValue)) {\n return constValue.length * getPackedFieldSize(f.elem);\n } if (f.dtype == 'ref') {\n return 8; // TODO: > 256 entities?\n }\n return 0;\n}\n\nclass EntitySet {\n atypes: EntityArchetype[];\n entities: Entity[];\n scope;\n\n constructor(scope: EntityScope, query?: Query, e?: Entity[]) {\n this.scope = scope;\n if (query) {\n if (query.entities) {\n this.entities = query.entities.slice(0);\n } else {\n this.atypes = scope.em.archetypesMatching(query);\n this.entities = scope.entitiesMatching(this.atypes);\n }\n // TODO: desc?\n if (query.limit) {\n this.entities = this.entities.slice(0, query.limit);\n }\n } else if (e) {\n this.entities = e;\n } else {\n throw new ECSError('invalid EntitySet constructor')\n }\n if (!this.atypes) {\n let at = new Set<EntityArchetype>();\n for (let e of this.entities) at.add(e.etype);\n this.atypes = Array.from(at.values());\n }\n }\n contains(c: ComponentType, f: DataField, where: SourceLocated) {\n // TODO: action for error msg\n return this.scope.em.singleComponentWithFieldName(this.atypes, f.name, where);\n }\n intersection(qr: EntitySet) {\n let ents = this.entities.filter(e => qr.entities.includes(e));\n return new EntitySet(this.scope, undefined, ents);\n }\n union(qr: EntitySet) {\n // TODO: remove dups\n let ents = this.entities.concat(qr.entities);\n let atypes = this.atypes.concat(qr.atypes);\n return new EntitySet(this.scope, undefined, ents);\n }\n isContiguous() {\n if (this.entities.length == 0) return true;\n let id = this.entities[0].id;\n for (let i = 1; i < this.entities.length; i++) {\n if (this.entities[i].id != ++id) return false;\n }\n return true;\n }\n}\n\nclass IndexRegister {\n lo: number | null;\n hi: number | null;\n elo: number;\n ehi: number;\n eset: EntitySet | undefined;\n\n constructor(\n public readonly scope: EntityScope,\n eset?: EntitySet\n ) {\n this.elo = 0;\n this.ehi = scope.entities.length - 1;\n this.lo = null;\n this.hi = null;\n if (eset) { this.narrowInPlace(eset); }\n }\n entityCount() {\n return this.ehi - this.elo + 1;\n }\n clone() {\n return Object.assign(new IndexRegister(this.scope), this);\n }\n narrow(eset: EntitySet, action?: SourceLocated) {\n let i = this.clone();\n return i.narrowInPlace(eset, action) ? i : null;\n }\n narrowInPlace(eset: EntitySet, action?: SourceLocated): boolean {\n if (this.scope != eset.scope) throw new ECSError(`scope mismatch`, action);\n if (!eset.isContiguous()) throw new ECSError(`entities are not contiguous`, action);\n if (this.eset) {\n this.eset = this.eset.intersection(eset);\n } else {\n this.eset = eset;\n }\n if (this.eset.entities.length == 0) {\n return false;\n }\n let newelo = this.eset.entities[0].id;\n let newehi = this.eset.entities[this.eset.entities.length - 1].id;\n if (this.lo === null || this.hi === null) {\n this.lo = 0;\n this.hi = newehi - newelo;\n this.elo = newelo;\n this.ehi = newehi;\n } else {\n //if (action) console.log((action as any).event, this.elo, '-', this.ehi, '->', newelo, '..', newehi);\n this.lo += newelo - this.elo;\n this.hi += newehi - this.ehi;\n }\n return true;\n }\n // TODO: removegi\n offset() {\n return this.lo || 0;\n }\n}\n\n// todo: generalize\nclass ActionCPUState {\n working: EntitySet;\n props: {[key: string] : string};\n xreg: IndexRegister | null = null;\n yreg: IndexRegister | null = null;\n}\n\nclass ActionEval {\n em : EntityManager;\n dialect : Dialect_CA65;\n tmplabel = '';\n label : string;\n seq : number;\n //used = new Set<string>(); // TODO\n\n constructor(\n readonly scope: EntityScope,\n readonly instance: SystemInstance,\n readonly action: Action,\n readonly eventargs: string[])\n {\n this.em = scope.em;\n this.dialect = scope.em.dialect;\n this.tmplabel = this.dialect.tempLabel(this.instance);\n //let query = (this.action as ActionWithQuery).query;\n //TODO? if (query && this.entities.length == 0)\n //throw new ECSError(`query doesn't match any entities`, query); // TODO \n this.seq = this.em.seq++;\n this.label = `${this.instance.system.name}__${action.event}__${this.seq}`;\n }\n begin() {\n }\n end() {\n }\n codeToString(): string {\n let code = this.exprToCode(this.action.expr);\n return code;\n }\n private replaceTags(code: string, action: Action, props: { [name: string]: string; }) {\n const tag_re = /\\{\\{(.+?)\\}\\}/g;\n code = code.replace(tag_re, (entire, group: string) => {\n let toks = group.split(/\\s+/);\n if (toks.length == 0)\n throw new ECSError(`empty command`, action);\n let cmd = group.charAt(0);\n let arg0 = toks[0].substring(1).trim();\n let args = [arg0].concat(toks.slice(1));\n switch (cmd) {\n case '!': return this.__emit(args);\n case '$': return this.__local(args);\n case '^': return this.__use(args);\n case '#': return this.__arg(args);\n case '&': return this.__eid(args);\n case '<': return this.__get([arg0, '0']);\n case '>': return this.__get([arg0, '8']);\n default:\n let value = props[toks[0]];\n if (value)\n return value;\n let fn = (this as any)['__' + toks[0]];\n if (fn)\n return fn.bind(this)(toks.slice(1));\n throw new ECSError(`unrecognized command {{${toks[0]}}}`, action);\n }\n });\n return code;\n }\n private replaceLabels(code: string) {\n const label_re = /@(\\w+)\\b/g;\n let seq = this.em.seq++;\n let label = `${this.instance.system.name}__${this.action.event}__${seq}`;\n code = code.replace(label_re, (s: string, a: string) => `${label}__${a}`);\n return code;\n }\n\n __get(args: string[]) {\n return this.getset(args, false);\n }\n __set(args: string[]) {\n return this.getset(args, true);\n }\n getset(args: string[], canwrite: boolean) {\n let fieldName = args[0];\n let bitofs = parseInt(args[1] || '0');\n return this.generateCodeForField(fieldName, bitofs, canwrite);\n }\n parseFieldArgs(args: string[]) {\n let fieldName = args[0];\n let bitofs = parseInt(args[1] || '0');\n let component = this.em.singleComponentWithFieldName(this.scope.state.working.atypes, fieldName, this.action);\n let field = component.fields.find(f => f.name == fieldName);\n if (field == null) throw new ECSError(`no field named \"${fieldName}\" in component`, this.action);\n return { component, field, bitofs };\n }\n __base(args: string[]) {\n let { component, field, bitofs } = this.parseFieldArgs(args);\n return this.dialect.fieldsymbol(component, field, bitofs);\n }\n __data(args: string[]) {\n let { component, field, bitofs } = this.parseFieldArgs(args);\n let entities = this.scope.state.working.entities;\n if (entities.length != 1) throw new ECSError(`data operates on exactly one entity`, this.action); // TODO?\n let eid = entities[0].id; // TODO?\n return this.dialect.datasymbol(component, field, eid, bitofs);\n }\n __const(args: string[]) {\n let { component, field, bitofs } = this.parseFieldArgs(args);\n let entities = this.scope.state.working.entities;\n if (entities.length != 1) throw new ECSError(`const operates on exactly one entity`, this.action); // TODO?\n let constVal = entities[0].consts[mksymbol(component, field.name)];\n if (constVal === undefined) throw new ECSError(`field is not constant`, this.action); // TODO?\n if (typeof constVal !== 'number') throw new ECSError(`field is not numeric`, this.action); // TODO?\n return constVal << bitofs;\n }\n __index(args: string[]) {\n // TODO: check select type and if we actually have an index...\n let ident = args[0];\n let index = parseInt(args[1] || '0');\n let entities = this.scope.state.working.entities;\n if (entities.length == 1) {\n return this.dialect.absolute(ident);\n } else {\n return this.dialect.indexed_x(ident, index); //TODO?\n }\n }\n __eid(args: string[]) {\n let e = this.scope.getEntityByName(args[0] || '?');\n if (!e) throw new ECSError(`can't find entity named \"${args[0]}\"`, this.action);\n return e.id.toString();\n }\n __use(args: string[]) {\n return this.scope.includeResource(args[0]);\n }\n __emit(args: string[]) {\n let event = args[0];\n let eventargs = args.slice(1);\n try {\n return this.scope.generateCodeForEvent(event, eventargs);\n } catch (e) {\n if (e.$sources) e.$sources.push(this.action);\n throw e;\n }\n }\n __local(args: string[]) {\n let tempinc = parseInt(args[0]);\n let tempbytes = this.instance.system.tempbytes;\n if (isNaN(tempinc)) throw new ECSError(`bad temporary offset`, this.action);\n if (!tempbytes) throw new ECSError(`this system has no locals`, this.action);\n if (tempinc < 0 || tempinc >= tempbytes) throw new ECSError(`this system only has ${tempbytes} locals`, this.action);\n this.scope.updateTempLiveness(this.instance);\n return `${this.tmplabel}+${tempinc}`;\n }\n __arg(args: string[]) {\n let argindex = parseInt(args[0] || '0');\n let argvalue = this.eventargs[argindex] || '';\n //this.used.add(`arg_${argindex}_${argvalue}`);\n return argvalue;\n }\n __start(args: string[]) {\n let startSymbol = this.dialect.scopeSymbol(args[0]);\n return this.dialect.jump(startSymbol);\n }\n generateCodeForField(fieldName: string, bitofs: number, canWrite: boolean): string {\n const action = this.action;\n const qr = this.scope.state.working;\n\n var component: ComponentType;\n var baseLookup = false;\n var entityLookup = false;\n let entities: Entity[];\n // is qualified field?\n if (fieldName.indexOf('.') > 0) {\n let [entname, fname] = fieldName.split('.');\n let ent = this.scope.getEntityByName(entname);\n if (ent == null) throw new ECSError(`no entity named \"${entname}\" in this scope`, action);\n component = this.em.singleComponentWithFieldName([ent.etype], fname, action);\n fieldName = fname;\n entities = [ent];\n entityLookup = true;\n } else if (fieldName.indexOf(':') > 0) {\n let [cname, fname] = fieldName.split(':');\n component = this.em.getComponentByName(cname);\n if (component == null) throw new ECSError(`no component named \"${cname}\"`, action)\n entities = this.scope.state.working.entities;\n fieldName = fname;\n baseLookup = true;\n } else {\n component = this.em.singleComponentWithFieldName(qr.atypes, fieldName, action);\n entities = this.scope.state.working.entities;\n }\n // find archetypes\n let field = component.fields.find(f => f.name == fieldName);\n if (field == null) throw new ECSError(`no field named \"${fieldName}\" in component`, action);\n let ident = this.dialect.fieldsymbol(component, field, bitofs);\n // see if all entities have the same constant value\n // TODO: should be done somewhere else?\n let constValues = new Set<DataValue>();\n let isConst = false;\n for (let e of entities) {\n let constVal = e.consts[mksymbol(component, fieldName)];\n if (constVal !== undefined) isConst = true;\n constValues.add(constVal); // constVal === undefined is allowed\n }\n // can't write to constant\n if (isConst && canWrite)\n throw new ECSError(`can't write to constant field ${fieldName}`, action);\n // is it a constant?\n if (constValues.size == 1) {\n let value = constValues.values().next().value as DataValue;\n // TODO: what about symbols?\n // TODO: use dialect\n if (typeof value === 'number') {\n return `#${(value >> bitofs) & 0xff}`;\n }\n }\n // TODO: offset > 0?\n // TODO: don't mix const and init data\n let range = this.scope.getFieldRange(component, field.name);\n if (!range) throw new ECSError(`couldn't find field for ${component.name}:${fieldName}, maybe no entities?`); // TODO\n // TODO: dialect\n // TODO: doesnt work for entity.field\n // TODO: array field baseoffset?\n if (baseLookup) {\n return this.dialect.absolute(ident);\n } else if (entities.length == 1) {\n // TODO: qr or this.entites?\n let eidofs = entities[0].id - range.elo; // TODO: negative?\n return this.dialect.absolute(ident, eidofs);\n } else {\n let ir;\n let int;\n let eidofs;\n let xreg = this.scope.state.xreg;\n let yreg = this.scope.state.yreg;\n if (xreg && (int = xreg.eset?.intersection(qr))) {\n //console.log(eidofs,'x',qr.entities[0].id,xreg.elo,int.entities[0].id,xreg.offset(),range.elo);\n ir = xreg.eset;\n //eidofs -= xreg.offset();\n //eidofs -= int.entities[0].id - xreg.elo;\n eidofs = xreg.elo - range.elo;\n // TODO? if (xreg.ehi > range.ehi) throw new ECSError(`field \"${field.name}\" could overflow`, action);\n } else if (yreg && (int = yreg.eset?.intersection(qr))) {\n ir = yreg.eset;\n //eidofs -= yreg.offset();\n eidofs = yreg.elo - range.elo;\n } else {\n ir = null;\n eidofs = 0;\n }\n if (!ir) {\n throw new ECSError(`no intersection for index register`, action);\n }\n if (ir.entities.length == 0) throw new ECSError(`no common entities for index register`, action);\n if (!ir.isContiguous()) throw new ECSError(`entities in query are not contiguous`, action);\n if (ir == this.scope.state.xreg?.eset)\n return this.dialect.indexed_x(ident, eidofs);\n if (ir == this.scope.state.yreg?.eset)\n return this.dialect.indexed_y(ident, eidofs);\n throw new ECSError(`cannot find \"${component.name}:${field.name}\" in state`, action);\n }\n }\n getJoinField(action: Action, atypes: EntityArchetype[], jtypes: EntityArchetype[]): ComponentFieldPair {\n let refs = Array.from(this.scope.iterateArchetypeFields(atypes, (c, f) => f.dtype == 'ref'));\n // TODO: better error message\n if (refs.length == 0) throw new ECSError(`cannot find join fields`, action);\n if (refs.length > 1) throw new ECSError(`cannot join multiple fields (${refs.map(r => r.f.name).join(' ')})`, action);\n // TODO: check to make sure join works\n return refs[0]; // TODO\n /* TODO\n let match = refs.map(ref => this.em.archetypesMatching((ref.f as RefType).query));\n for (let ref of refs) {\n let m = this.em.archetypesMatching((ref.f as RefType).query);\n for (let a of m) {\n if (jtypes.includes(a.etype)) {\n console.log(a,m);\n }\n }\n }\n */\n }\n isSubroutineSized(code: string) {\n // TODO?\n if (code.length > 20000) return false;\n if (code.split('\\n ').length >= 4) return true; // TODO: :^/\n return false;\n }\n exprToCode(expr: Expr) : string {\n if (isQueryExpr(expr)) {\n return this.queryExprToCode(expr);\n }\n if (isBlockStmt(expr)) {\n return this.blockStmtToCode(expr);\n }\n if (isInlineCode(expr)) {\n return this.evalInlineCode(expr.code);\n }\n throw new ECSError(`cannot convert expression to code`, expr);\n }\n evalInlineCode(code: string) {\n let props = this.scope.state.props || {};\n // replace @labels\n code = this.replaceLabels(code);\n // replace {{...}} tags\n // TODO: use nodes instead\n code = this.replaceTags(code, this.action, props);\n return code;\n }\n blockStmtToCode(expr: BlockExpr) {\n return expr.stmts.map(node => this.exprToCode(node)).join('\\n');\n }\n queryExprToCode(qexpr: QueryExpr) : string {\n //console.log('query', this.action.event, qexpr.select, qexpr.query.include);\n let q = this.startQuery(qexpr);\n // TODO: move elsewhere? is \"foreach\" and \"join\" part of the empty set?\n const allowEmpty = ['if','foreach','join'];\n if (q.working.entities.length == 0 && allowEmpty.includes(qexpr.select)) {\n //console.log('empty', this.action.event);\n this.endQuery(q);\n return '';\n } else {\n this.scope.state.working = q.working;\n this.scope.state.props = q.props;\n //console.log('begin', this.action.event, this.scope.state);\n q.code = this.evalInlineCode(q.code);\n let body = this.blockStmtToCode(qexpr);\n this.endQuery(q);\n //console.log('end', this.action.event, this.scope.state);\n body = q.code.replace('%%CODE%%', body);\n return body;\n }\n }\n queryWorkingSet(qexpr: QueryExpr) {\n const scope = this.scope;\n const instance = this.instance;\n let select = qexpr.select;\n let q = qexpr.query;\n let qr = new EntitySet(scope, q);\n // narrow query w/ working set?\n if (!(qexpr.all || q.entities)) {\n let ir = qr.intersection(scope.state.working);\n // if intersection is empty, take the global set\n // if doing otherwise would generate an error (execpt for \"if\")\n // TODO: ambiguous?\n if (ir.entities.length || select == 'if') {\n qr = ir;\n }\n }\n // TODO? error if none?\n if (instance.params.refEntity && instance.params.refField) {\n let rf = instance.params.refField;\n if (rf.f.dtype == 'ref') {\n let rq = rf.f.query;\n qr = qr.intersection(new EntitySet(scope, rq));\n //console.log('with', instance.params, rq, this.qr);\n }\n } else if (instance.params.query) {\n qr = qr.intersection(new EntitySet(scope, instance.params.query));\n }\n return qr;\n }\n updateIndexRegisters(qr: EntitySet, jr: EntitySet | null, select: SelectType) {\n const action = this.action;\n const scope = this.scope;\n const instance = this.instance;\n const state = this.scope.state;\n // TODO: generalize to other cpus/langs\n if (qr.entities.length > 1) {\n switch (select) {\n case 'once':\n break;\n case 'foreach':\n case 'unroll':\n if (state.xreg && state.yreg) throw new ECSError('no more index registers', action);\n if (state.xreg) state.yreg = new IndexRegister(scope, qr);\n else state.xreg = new IndexRegister(scope, qr);\n break;\n case 'join':\n // TODO: Joins don't work in superman (arrays offset?)\n // ignore the join query, use the ref\n if (state.xreg || state.yreg) throw new ECSError('no free index registers for join', action);\n if (jr) state.xreg = new IndexRegister(scope, jr);\n state.yreg = new IndexRegister(scope, qr);\n break;\n case 'if':\n case 'with':\n // TODO: what if not in X because 1 element?\n if (state.xreg && state.xreg.eset) {\n state.xreg = state.xreg.narrow(qr, action);\n } else if (select == 'with') {\n if (instance.params.refEntity && instance.params.refField) {\n if (state.xreg)\n state.xreg.eset = qr;\n else\n state.xreg = new IndexRegister(scope, qr);\n // ???\n }\n }\n break;\n }\n }\n }\n getCodeAndProps(qexpr: QueryExpr, qr: EntitySet, jr: EntitySet|null, \n oldState: ActionCPUState)\n {\n // get properties and code\n const entities = qr.entities;\n const select = qexpr.select;\n let code = '%%CODE%%';\n let props: { [name: string]: string } = {};\n // TODO: detect cycles\n // TODO: \"source\"?\n // TODO: what if only 1 item?\n // TODO: what if join is subset of items?\n if (select == 'join' && jr) {\n //let jentities = this.jr.entities;\n // TODO? \n // TODO? throw new ECSError(`join query doesn't match any entities`, (action as ActionWithJoin).join); // TODO \n //console.log('join', qr, jr);\n if (qr.entities.length) {\n let joinfield = this.getJoinField(this.action, qr.atypes, jr.atypes);\n // TODO: what if only 1 item?\n // TODO: should be able to access fields via Y reg\n code = this.wrapCodeInLoop(code, qexpr, qr.entities, joinfield);\n props['%joinfield'] = this.dialect.fieldsymbol(joinfield.c, joinfield.f, 0); //TODO?\n }\n }\n // select subset of entities\n let fullEntityCount = qr.entities.length; //entities.length.toString();\n // TODO: let loopreduce = !loopents || entities.length < loopents.length;\n //console.log(action.event, entities.length, loopents.length);\n // filter entities from loop?\n // TODO: when to ignore if entities.length == 1 and not in for loop?\n if (select == 'with') {\n // TODO? when to load x?\n if (this.instance.params.refEntity && this.instance.params.refField) {\n let re = this.instance.params.refEntity;\n let rf = this.instance.params.refField;\n code = this.wrapCodeInRefLookup(code);\n // TODO: only fetches 1st entity in list, need offset\n let range = this.scope.getFieldRange(rf.c, rf.f.name);\n let eidofs = re.id - range.elo;\n props['%reffield'] = `${this.dialect.fieldsymbol(rf.c, rf.f, 0)}+${eidofs}`;\n } else {\n code = this.wrapCodeInFilter(code, qr, oldState, props);\n }\n }\n if (select == 'if') {\n code = this.wrapCodeInFilter(code, qr, oldState, props);\n }\n if (select == 'foreach' && entities.length > 1) {\n code = this.wrapCodeInLoop(code, qexpr, qr.entities);\n }\n if (select == 'unroll' && entities.length > 1) {\n throw new ECSError('unroll is not yet implemented');\n }\n // define properties\n if (entities.length) {\n props['%elo'] = entities[0].id.toString();\n props['%ehi'] = entities[entities.length - 1].id.toString();\n }\n props['%ecount'] = entities.length.toString();\n props['%efullcount'] = fullEntityCount.toString();\n //console.log('working', action.event, working.entities.length, entities.length);\n return { code, props };\n }\n startQuery(qexpr: QueryExpr) {\n const scope = this.scope;\n const action = this.action;\n const select = qexpr.select;\n\n // save old state and make clone\n const oldState = this.scope.state;\n this.scope.state = Object.assign(new ActionCPUState(), oldState);\n\n // get working set for this query\n const qr = this.queryWorkingSet(qexpr);\n \n // is it a join? query that too\n const jr = qexpr.join && qr.entities.length ? new EntitySet(scope, qexpr.join) : null;\n\n // update x, y state\n this.updateIndexRegisters(qr, jr, select);\n\n const { code, props } = this.getCodeAndProps(qexpr, qr, jr, oldState);\n\n // if join, working set is union of both parts\n let working = jr ? qr.union(jr) : qr;\n \n return { working, oldState, props, code };\n }\n endQuery(q : { oldState: ActionCPUState }) {\n this.scope.state = q.oldState;\n }\n wrapCodeInLoop(code: string, qexpr: QueryExpr, ents: Entity[], joinfield?: ComponentFieldPair): string {\n // TODO: check ents\n // TODO: check segment bounds\n // TODO: what if 0 or 1 entitites?\n // TODO: check > 127 or > 255\n let dir = qexpr.direction;\n let s = dir == 'desc' ? this.dialect.ASM_ITERATE_EACH_DESC : this.dialect.ASM_ITERATE_EACH_ASC;\n if (joinfield) s = dir == 'desc' ? this.dialect.ASM_ITERATE_JOIN_DESC : this.dialect.ASM_ITERATE_JOIN_ASC;\n s = s.replace('{{%code}}', code);\n return s;\n }\n wrapCodeInFilter(code: string, qr: EntitySet, oldState: ActionCPUState, props: any) {\n // TODO: :-p filters too often?\n const ents = qr.entities;\n const ents2 = oldState.xreg?.eset?.entities;\n if (ents && ents.length && ents2) {\n let lo = ents[0].id;\n let hi = ents[ents.length - 1].id;\n let lo2 = ents2[0].id;\n let hi2 = ents2[ents2.length - 1].id;\n if (lo != lo2) {\n code = this.dialect.ASM_FILTER_RANGE_LO_X.replace('{{%code}}', code);\n props['%xofs'] = lo - lo2;\n }\n if (hi != hi2) {\n code = this.dialect.ASM_FILTER_RANGE_HI_X.replace('{{%code}}', code);\n }\n }\n return code;\n }\n wrapCodeInRefLookup(code: string) {\n code = this.dialect.ASM_LOOKUP_REF_X.replace('{{%code}}', code);\n return code;\n }\n}\n\nclass EventCodeStats {\n constructor(\n public readonly inst: SystemInstance,\n public readonly action: Action,\n public readonly eventcode: string\n ) { }\n labels : string[] = [];\n count : number = 0;\n}\n\nexport class EntityScope implements SourceLocated {\n $loc: SourceLocation;\n childScopes: EntityScope[] = [];\n instances: SystemInstance[] = [];\n entities: Entity[] = [];\n fieldtypes: { [name: string]: 'init' | 'const' } = {};\n sysstats = new Map<SystemInstance, SystemStats>();\n bss = new UninitDataSegment();\n rodata = new ConstDataSegment();\n code = new CodeSegment();\n componentsInScope = new Set();\n resources = new Set<string>();\n state;\n isDemo = false;\n filePath = '';\n\n eventSeq : number;\n eventCodeStats : { [code:string] : EventCodeStats };\n inCritical = 0;\n\n constructor(\n public readonly em: EntityManager,\n public readonly dialect: Dialect_CA65,\n public readonly name: string,\n public readonly parent: EntityScope | undefined\n ) {\n parent?.childScopes.push(this);\n this.state = new ActionCPUState();\n // TODO: parent scope entities too?\n this.state.working = new EntitySet(this, undefined, this.entities); // working set = all entities\n }\n newEntity(etype: EntityArchetype, name: string): Entity {\n // TODO: add parent ID? lock parent scope?\n // TODO: name identical check?\n if (name && this.getEntityByName(name))\n throw new ECSError(`already an entity named \"${name}\"`);\n let id = this.entities.length;\n etype = this.em.addArchetype(etype);\n let entity: Entity = { id, etype, consts: {}, inits: {} };\n for (let c of etype.components) {\n this.componentsInScope.add(c.name);\n }\n entity.name = name;\n this.entities.push(entity);\n return entity;\n }\n newSystemInstance(inst: SystemInstance) {\n if (!inst) throw new Error();\n inst.id = this.instances.length+1;\n this.instances.push(inst);\n this.em.registerSystemEvents(inst.system);\n return inst;\n }\n newSystemInstanceWithDefaults(system: System) {\n return this.newSystemInstance({ system, params: {}, id:0 });\n }\n getSystemInstanceNamed(name: string) {\n return this.instances.find(sys => sys.system.name == name);\n }\n getEntityByName(name: string) {\n return this.entities.find(e => e.name == name);\n }\n *iterateEntityFields(entities: Entity[]) {\n for (let i = 0; i < entities.length; i++) {\n let e = entities[i];\n for (let c of e.etype.components) {\n for (let f of c.fields) {\n yield { i, e, c, f, v: e.consts[mksymbol(c, f.name)] };\n }\n }\n }\n }\n *iterateArchetypeFields(arch: EntityArchetype[], filter?: (c: ComponentType, f: DataField) => boolean) {\n for (let i = 0; i < arch.length; i++) {\n let a = arch[i];\n for (let c of a.components) {\n for (let f of c.fields) {\n if (!filter || filter(c, f))\n yield { i, c, f };\n }\n }\n }\n }\n *iterateChildScopes() {\n for (let scope of this.childScopes) {\n yield scope;\n }\n }\n entitiesMatching(atypes: EntityArchetype[]) {\n let result: Entity[] = [];\n for (let e of this.entities) {\n for (let a of atypes) {\n // TODO: what about subclasses?\n // TODO: very scary identity ocmpare\n if (e.etype === a) {\n result.push(e);\n break;\n }\n }\n }\n return result;\n }\n hasComponent(ctype: ComponentType) {\n return this.componentsInScope.has(ctype.name);\n }\n buildSegments() {\n // build FieldArray for each component/field pair\n // they will be different for bss/rodata segments\n let iter = this.iterateEntityFields(this.entities);\n for (var o = iter.next(); o.value; o = iter.next()) {\n let { i, e, c, f, v } = o.value;\n // constants and array pointers go into rodata\n let cfname = mksymbol(c, f.name);\n let ftype = this.fieldtypes[cfname];\n let isConst = ftype == 'const';\n let segment = isConst ? this.rodata : this.bss;\n if (v === undefined && isConst)\n throw new ECSError(`no value for const field ${cfname}`, e);\n // determine range of indices for entities\n let array = segment.fieldranges[cfname];\n if (!array) {\n array = segment.fieldranges[cfname] = { component: c, field: f, elo: i, ehi: i };\n } else {\n array.ehi = i;\n if (array.ehi - array.elo + 1 >= 256)\n throw new ECSError(`too many entities have field ${cfname}, limit is 256`);\n }\n // set default values for entity/field\n if (!isConst) {\n if (f.dtype == 'int' && f.defvalue !== undefined) {\n let ecfname = mkscopesymbol(this, c, f.name);\n if (e.inits[ecfname] == null) {\n this.setInitValue(e, c, f, f.defvalue);\n }\n }\n }\n }\n }\n // TODO: cull unused entity fields\n allocateSegment(segment: DataSegment, alloc: boolean, type: 'init' | 'const' | undefined) {\n let fields: FieldArray[] = Object.values(segment.fieldranges);\n // TODO: fields.sort((a, b) => (a.ehi - a.elo + 1) * getPackedFieldSize(a.field));\n for (let f of fields) {\n if (this.fieldtypes[mksymbol(f.component, f.field.name)] == type) {\n //console.log(f.component.name, f.field.name, type);\n let rangelen = (f.ehi - f.elo + 1);\n // TODO: doesn't work for packed arrays too well\n let bits = getPackedFieldSize(f.field);\n // variable size? make it a pointer\n if (bits == 0) bits = 16; // TODO?\n let bytesperelem = Math.ceil(bits / 8);\n // TODO: packing bits\n // TODO: split arrays\n let access = [];\n for (let i = 0; i < bits; i += 8) {\n let symbol = this.dialect.fieldsymbol(f.component, f.field, i);\n access.push({ symbol, bit: i, width: 8 }); // TODO\n if (alloc) {\n segment.allocateBytes(symbol, rangelen); // TODO\n }\n }\n f.access = access;\n }\n }\n }\n allocateROData(segment: DataSegment) {\n let iter = this.iterateEntityFields(this.entities);\n for (var o = iter.next(); o.value; o = iter.next()) {\n let { i, e, c, f, v } = o.value;\n let cfname = mksymbol(c, f.name);\n // TODO: what if mix of var, const, and init values?\n if (this.fieldtypes[cfname] == 'const') {\n let range = segment.fieldranges[cfname];\n let entcount = range ? range.ehi - range.elo + 1 : 0;\n if (v == null && f.dtype == 'int') v = 0;\n if (v == null && f.dtype == 'ref') v = 0;\n if (v == null && f.dtype == 'array')\n throw new ECSError(`no default value for array ${cfname}`, e);\n //console.log(c.name, f.name, '#'+e.id, '=', v);\n // this is a constant\n // is it a byte array?\n //TODO? if (ArrayBuffer.isView(v) && f.dtype == 'array') {\n if (v instanceof Uint8Array && f.dtype == 'array') {\n let ptrlosym = this.dialect.fieldsymbol(c, f, 0);\n let ptrhisym = this.dialect.fieldsymbol(c, f, 8);\n let loofs = segment.allocateBytes(ptrlosym, entcount);\n let hiofs = segment.allocateBytes(ptrhisym, entcount);\n let datasym = this.dialect.datasymbol(c, f, e.id, 0);\n segment.allocateInitData(datasym, v);\n if (f.baseoffset) datasym = `(${datasym}+${f.baseoffset})`;\n segment.initdata[loofs + e.id - range.elo] = { symbol: datasym, bitofs: 0 };\n segment.initdata[hiofs + e.id - range.elo] = { symbol: datasym, bitofs: 8 };\n } else if (typeof v === 'number') {\n // more than 1 entity, add an array\n // TODO: infer need for array by usage\n /*if (entcount > 1)*/ {\n if (!range.access) throw new ECSError(`no access for field ${cfname}`)\n for (let a of range.access) {\n segment.allocateBytes(a.symbol, entcount);\n let ofs = segment.getByteOffset(range, a, e.id);\n // TODO: this happens if you forget a const field on an object?\n if (e.id < range.elo) throw new ECSError('entity out of range ' + c.name + ' ' + f.name, e);\n if (segment.initdata[ofs] !== undefined) throw new ECSError('initdata already set ' + ofs), e;\n segment.initdata[ofs] = (v >> a.bit) & 0xff;\n }\n }\n } else if (v == null && f.dtype == 'array' && f.index) {\n // TODO\n let datasym = this.dialect.datasymbol(c, f, e.id, 0);\n let databytes = getFieldLength(f.index);\n let offset = this.bss.allocateBytes(datasym, databytes);\n // TODO? this.allocatePointerArray(c, f, datasym, entcount);\n let ptrlosym = this.dialect.fieldsymbol(c, f, 0);\n let ptrhisym = this.dialect.fieldsymbol(c, f, 8);\n // TODO: what if we don't need a pointer array?\n let loofs = segment.allocateBytes(ptrlosym, entcount);\n let hiofs = segment.allocateBytes(ptrhisym, entcount);\n if (f.baseoffset) datasym = `(${datasym}+${f.baseoffset})`;\n segment.initdata[loofs + e.id - range.elo] = { symbol: datasym, bitofs: 0 };\n segment.initdata[hiofs + e.id - range.elo] = { symbol: datasym, bitofs: 8 };\n } else {\n // TODO: bad error message - should say \"wrong type, should be array\"\n throw new ECSError(`unhandled constant ${e.id}:${cfname} -- ${typeof v}`);\n }\n }\n }\n //console.log(segment.initdata)\n }\n allocateInitData(segment: DataSegment) {\n if (segment.size == 0) return '';\n let initbytes = new Uint8Array(segment.size);\n let iter = this.iterateEntityFields(this.entities);\n for (var o = iter.next(); o.value; o = iter.next()) {\n let { i, e, c, f, v } = o.value;\n let scfname = mkscopesymbol(this, c, f.name);\n let initvalue = e.inits[scfname];\n if (initvalue !== undefined) {\n let range = segment.getFieldRange(c, f.name);\n if (!range) throw new ECSError(`no init range for ${scfname}`, e); \n if (!range.access) throw new ECSError(`no init range access for ${scfname}`, e);\n if (typeof initvalue === 'number') {\n for (let a of range.access) {\n let offset = segment.getByteOffset(range, a, e.id);\n initbytes[offset] = (initvalue >> a.bit) & ((1 << a.width) - 1);\n }\n } else if (initvalue instanceof Uint8Array) {\n // TODO: 16/32...\n let datasym = this.dialect.datasymbol(c, f, e.id, 0);\n let ofs = this.bss.symbols[datasym];\n initbytes.set(initvalue, ofs);\n } else {\n // TODO: init arrays?\n throw new ECSError(`cannot initialize ${scfname} = ${initvalue}`); // TODO??\n }\n }\n }\n // build the final init buffer\n // TODO: compress 0s?\n let bufsym = this.name + '__INITDATA';\n let bufofs = this.rodata.allocateInitData(bufsym, initbytes);\n let code = this.dialect.INIT_FROM_ARRAY;\n //TODO: function to repalce from dict?\n code = code.replace('{{%nbytes}}', initbytes.length.toString())\n code = code.replace('{{%src}}', bufsym);\n code = code.replace('{{%dest}}', segment.getOriginSymbol());\n return code;\n }\n getFieldRange(c: ComponentType, fn: string) {\n return this.bss.getFieldRange(c, fn) || this.rodata.getFieldRange(c, fn);\n }\n setConstValue(e: Entity, component: ComponentType, field: DataField, value: DataValue) {\n this.setConstInitValue(e, component, field, value, 'const');\n }\n setInitValue(e: Entity, component: ComponentType, field: DataField, value: DataValue) {\n this.setConstInitValue(e, component, field, value, 'init');\n }\n setConstInitValue(e: Entity, component: ComponentType, field: DataField, value: DataValue,\n type: 'const'|'init')\n {\n this.checkFieldValue(field, value);\n let fieldName = field.name;\n let cfname = mksymbol(component, fieldName);\n let ecfname = mkscopesymbol(this, component, fieldName);\n if (e.consts[cfname] !== undefined) throw new ECSError(`\"${fieldName}\" is already defined as a constant`, e);\n if (e.inits[ecfname] !== undefined) throw new ECSError(`\"${fieldName}\" is already defined as a variable`, e);\n if (type == 'const') e.consts[cfname] = value;\n if (type == 'init') e.inits[ecfname] = value;\n this.fieldtypes[cfname] = type;\n }\n isConstOrInit(component: ComponentType, fieldName: string) : 'const' | 'init' {\n return this.fieldtypes[mksymbol(component, fieldName)];\n }\n getConstValue(entity: Entity, fieldName: string) {\n let component = this.em.singleComponentWithFieldName([entity.etype], fieldName, entity);\n let cfname = mksymbol(component, fieldName);\n return entity.consts[cfname];\n }\n checkFieldValue(field: DataField, value: DataValue) {\n if (field.dtype == 'array') {\n if (!(value instanceof Uint8Array))\n throw new ECSError(`This \"${field.name}\" value should be an array.`);\n } else if (typeof value !== 'number') {\n throw new ECSError(`This \"${field.name}\" ${field.dtype} value should be an number.`);\n } else {\n if (field.dtype == 'int') {\n if (value < field.lo || value > field.hi)\n throw new ECSError(`This \"${field.name}\" value is out of range, should be between ${field.lo} and ${field.hi}.`);\n } else if (field.dtype == 'ref') {\n // TODO: allow override if number\n let eset = new EntitySet(this, field.query);\n if (value < 0 || value >= eset.entities.length)\n throw new ECSError(`This \"${field.name}\" value is out of range for this ref type.`);\n }\n }\n }\n generateCodeForEvent(event: string, args?: string[], codelabel?: string): string {\n // find systems that respond to event\n // and have entities in this scope\n let systems = this.em.event2systems[event];\n if (!systems || systems.length == 0) {\n // TODO: error or warning?\n //throw new ECSError(`warning: no system responds to \"${event}\"`);\n console.log(`warning: no system responds to \"${event}\"`);\n return '';\n }\n this.eventSeq++;\n // generate code\n let code = '';\n // is there a label? generate it first\n if (codelabel) { code += this.dialect.label(codelabel) + '\\n'; }\n // if \"start\" event, initialize data segment\n if (event == 'start') {\n code += this.allocateInitData(this.bss);\n }\n // iterate all instances and generate matching events\n let eventCount = 0;\n let instances = this.instances.filter(inst => systems.includes(inst.system));\n for (let inst of instances) {\n let sys = inst.system;\n for (let action of sys.actions) {\n if (action.event == event) {\n eventCount++;\n // TODO: use Tokenizer so error msgs are better\n // TODO: keep event tree\n let codeeval = new ActionEval(this, inst, action, args || []);\n codeeval.begin();\n if (action.critical) this.inCritical++;\n let eventcode = codeeval.codeToString();\n if (action.critical) this.inCritical--;\n if (!this.inCritical && codeeval.isSubroutineSized(eventcode)) {\n let normcode = this.normalizeCode(eventcode, action);\n let estats = this.eventCodeStats[normcode];\n if (!estats) {\n estats = this.eventCodeStats[normcode] = new EventCodeStats(\n inst, action, eventcode);\n }\n estats.labels.push(codeeval.label);\n estats.count++;\n if (action.critical) estats.count++; // always make critical event subroutines\n }\n let s = '';\n s += this.dialect.comment(`start action ${codeeval.label}`);\n s += eventcode;\n s += this.dialect.comment(`end action ${codeeval.label}`);\n code += s;\n // TODO: check that this happens once?\n codeeval.end();\n }\n }\n }\n if (eventCount == 0) {\n console.log(`warning: event ${event} not handled`);\n }\n return code;\n }\n normalizeCode(code: string, action: Action) {\n // TODO: use dialect to help with this\n code = code.replace(/\\b(\\w+__\\w+__)(\\d+)__(\\w+)\\b/g, (z,a,b,c) => a+c);\n return code;\n }\n getSystemStats(inst: SystemInstance) : SystemStats {\n let stats = this.sysstats.get(inst);\n if (!stats) {\n stats = new SystemStats();\n this.sysstats.set(inst, stats);\n }\n return stats;\n }\n updateTempLiveness(inst: SystemInstance) {\n let stats = this.getSystemStats(inst);\n let n = this.eventSeq;\n if (stats.tempstartseq && stats.tempendseq) {\n stats.tempstartseq = Math.min(stats.tempstartseq, n);\n stats.tempendseq = Math.max(stats.tempendseq, n);\n } else {\n stats.tempstartseq = stats.tempendseq = n;\n }\n }\n includeResource(symbol: string): string {\n this.resources.add(symbol);\n return symbol;\n }\n private allocateTempVars() {\n let pack = new Packer();\n let maxTempBytes = 128 - this.bss.size; // TODO: multiple data segs\n let bssbin = new Bin({ left:0, top:0, bottom: this.eventSeq+1, right: maxTempBytes });\n pack.bins.push(bssbin);\n for (let instance of this.instances) {\n let stats = this.getSystemStats(instance);\n if (instance.system.tempbytes && stats.tempstartseq && stats.tempendseq) {\n let v = {\n inst: instance,\n top: stats.tempstartseq,\n bottom: stats.tempendseq+1,\n width: instance.system.tempbytes,\n height: stats.tempendseq - stats.tempstartseq + 1,\n label: instance.system.name\n };\n pack.boxes.push(v);\n }\n }\n if (!pack.pack()) console.log('cannot pack temporary local vars'); // TODO\n //console.log('tempvars', pack);\n if (bssbin.extents.right > 0) {\n let tempofs = this.bss.allocateBytes('TEMP', bssbin.extents.right);\n for (let b of pack.boxes) {\n let inst : SystemInstance = (b as any).inst;\n //console.log(inst.system.name, b.box?.left);\n if (b.box) this.bss.declareSymbol(this.dialect.tempLabel(inst), tempofs + b.box.left);\n //this.bss.equates[this.dialect.tempLabel(inst)] = `TEMP+${b.box?.left}`;\n }\n }\n console.log(pack.toSVGUrl());\n }\n private analyzeEntities() {\n this.buildSegments();\n this.allocateSegment(this.bss, true, 'init'); // initialized vars\n this.allocateSegment(this.bss, true, undefined); // uninitialized vars\n this.allocateSegment(this.rodata, false, 'const'); // constants\n this.allocateROData(this.rodata);\n }\n private isMainScope() {\n return this.parent == null;\n }\n private generateCode() {\n this.eventSeq = 0;\n this.eventCodeStats = {};\n let start;\n let initsys = this.em.getSystemByName('Init');\n if (this.isMainScope() && initsys) {\n this.newSystemInstanceWithDefaults(initsys); //TODO: what if none?\n start = this.generateCodeForEvent('main_init');\n } else {\n start = this.generateCodeForEvent('start');\n }\n start = this.replaceSubroutines(start);\n this.code.addCodeFragment(start);\n for (let sub of Array.from(this.resources.values())) {\n if (!this.getSystemInstanceNamed(sub)) {\n let sys = this.em.getSystemByName(sub);\n if (!sys) throw new ECSError(`cannot find resource named \"${sub}\"`);\n this.newSystemInstanceWithDefaults(sys);\n }\n let code = this.generateCodeForEvent(sub, [], sub);\n this.code.addCodeFragment(code); // TODO: should be rodata?\n }\n //this.showStats();\n }\n replaceSubroutines(code: string) {\n // TODO: bin-packing for critical code\n // TODO: doesn't work with nested subroutines?\n // TODO: doesn't work between scopes\n let allsubs : string[] = [];\n for (let stats of Object.values(this.eventCodeStats)) {\n if (stats.count > 1) {\n if (allsubs.length == 0) {\n allsubs = [\n this.dialect.segment('rodata'),\n this.dialect.alignSegmentStart()\n ]\n } else if (stats.action.fitbytes) {\n allsubs.push(this.dialect.alignIfLessThan(stats.action.fitbytes));\n }\n let subcall = this.dialect.call(stats.labels[0]);\n for (let label of stats.labels) {\n let startdelim = this.dialect.comment(`start action ${label}`).trim();\n let enddelim = this.dialect.comment(`end action ${label}`).trim();\n let istart = code.indexOf(startdelim);\n let iend = code.indexOf(enddelim, istart);\n if (istart >= 0 && iend > istart) {\n code = code.substring(0, istart) + subcall + code.substring(iend + enddelim.length);\n }\n }\n let substart = stats.labels[0];\n let sublines = [\n this.dialect.segment('rodata'),\n this.dialect.label(substart),\n stats.eventcode,\n this.dialect.return(),\n ];\n if (stats.action.critical) {\n sublines.push(this.dialect.warningIfPageCrossed(substart));\n }\n if (stats.action.fitbytes) {\n sublines.push(this.dialect.warningIfMoreThan(stats.action.fitbytes, substart));\n }\n allsubs = allsubs.concat(sublines);\n }\n }\n code += allsubs.join('\\n');\n return code;\n }\n showStats() {\n for (let inst of this.instances) {\n // TODO?\n console.log(inst.system.name, this.getSystemStats(inst));\n }\n }\n private dumpCodeTo(file: SourceFileExport) {\n let shouldExport = this.instances.length == 0;\n let dialect = this.dialect;\n file.line(dialect.startScope(this.name));\n file.line(dialect.segment('bss'));\n this.bss.dump(file, dialect, shouldExport);\n file.line(dialect.segment('code')); // TODO: rodata for aligned?\n this.rodata.dump(file, dialect, shouldExport);\n //file.segment(`${this.name}_CODE`, 'code');\n file.line(dialect.label('__Start'));\n this.code.dump(file);\n for (let subscope of this.childScopes) {\n // TODO: overlay child BSS segments\n subscope.dump(file);\n }\n file.line(dialect.endScope(this.name));\n }\n dump(file: SourceFileExport) {\n this.analyzeEntities();\n this.generateCode();\n this.allocateTempVars();\n this.dumpCodeTo(file);\n }\n}\n\nexport class EntityManager {\n archetypes: { [key: string]: EntityArchetype } = {};\n components: { [name: string]: ComponentType } = {};\n systems: { [name: string]: System } = {};\n topScopes: { [name: string]: EntityScope } = {};\n event2systems: { [event: string]: System[] } = {};\n name2cfpairs: { [cfname: string]: ComponentFieldPair[] } = {};\n mainPath: string = '';\n imported: { [path: string]: boolean } = {};\n seq = 1;\n\n constructor(public readonly dialect: Dialect_CA65) {\n }\n newScope(name: string, parent?: EntityScope) {\n let existing = this.topScopes[name];\n if (existing && !existing.isDemo)\n throw new ECSError(`scope ${name} already defined`, existing);\n let scope = new EntityScope(this, this.dialect, name, parent);\n if (!parent) this.topScopes[name] = scope;\n return scope;\n }\n deferComponent(name: string) {\n this.components[name] = { name, fields: [] };\n }\n defineComponent(ctype: ComponentType) {\n let existing = this.components[ctype.name];\n // we can defer component definitions, just declare a component with 0 fields?\n if (existing && existing.fields.length > 0)\n throw new ECSError(`component ${ctype.name} already defined`, existing);\n if (existing) {\n existing.fields = ctype.fields;\n ctype = existing;\n }\n for (let field of ctype.fields) {\n let list = this.name2cfpairs[field.name];\n if (!list) list = this.name2cfpairs[field.name] = [];\n list.push({ c: ctype, f: field });\n }\n this.components[ctype.name] = ctype;\n return ctype;\n }\n defineSystem(system: System) {\n let existing = this.systems[system.name];\n if (existing) throw new ECSError(`system ${system.name} already defined`, existing);\n return this.systems[system.name] = system;\n }\n registerSystemEvents(system: System) {\n for (let a of system.actions) {\n let event = a.event;\n let list = this.event2systems[event];\n if (list == null) list = this.event2systems[event] = [];\n if (!list.includes(system)) list.push(system);\n }\n }\n addArchetype(atype: EntityArchetype): EntityArchetype {\n let key = atype.components.map(c => c.name).join(',');\n if (this.archetypes[key])\n return this.archetypes[key];\n else\n return this.archetypes[key] = atype;\n }\n componentsMatching(q: Query, etype: EntityArchetype) {\n let list = [];\n for (let c of etype.components) {\n if (q.exclude?.includes(c)) {\n return [];\n }\n // TODO: 0 includes == all entities?\n if (q.include.length == 0 || q.include.includes(c)) {\n list.push(c);\n }\n }\n return list.length == q.include.length ? list : [];\n }\n archetypesMatching(q: Query) {\n let result = new Set<EntityArchetype>();\n for (let etype of Object.values(this.archetypes)) {\n let cmatch = this.componentsMatching(q, etype);\n if (cmatch.length > 0) {\n result.add(etype);\n }\n }\n return Array.from(result.values());\n }\n componentsWithFieldName(atypes: EntityArchetype[], fieldName: string) {\n // TODO???\n let comps = new Set<ComponentType>();\n for (let at of atypes) {\n for (let c of at.components) {\n for (let f of c.fields) {\n if (f.name == fieldName)\n comps.add(c);\n }\n }\n }\n return Array.from(comps);\n }\n getComponentByName(name: string): ComponentType {\n return this.components[name];\n }\n getSystemByName(name: string): System {\n return this.systems[name];\n }\n singleComponentWithFieldName(atypes: EntityArchetype[], fieldName: string, where: SourceLocated) {\n let cfpairs = this.name2cfpairs[fieldName];\n if (!cfpairs) throw new ECSError(`cannot find field named \"${fieldName}\"`, where);\n let filtered = cfpairs.filter(cf => atypes.find(a => a.components.includes(cf.c)));\n if (filtered.length == 0) {\n throw new ECSError(`cannot find component with field \"${fieldName}\" in this context`, where);\n }\n if (filtered.length > 1) {\n throw new ECSError(`ambiguous field name \"${fieldName}\"`, where);\n }\n return filtered[0].c;\n }\n toJSON() {\n return JSON.stringify({\n components: this.components,\n systems: this.systems\n })\n }\n exportToFile(file: SourceFileExport) {\n for (let event of Object.keys(this.event2systems)) {\n file.line(this.dialect.equate(`EVENT__${event}`, '1'))\n }\n for (let scope of Object.values(this.topScopes)) {\n if (!scope.isDemo || scope.filePath == this.mainPath) {\n scope.dump(file);\n }\n }\n }\n *iterateScopes() {\n for (let scope of Object.values(this.topScopes)) {\n yield scope;\n scope.iterateChildScopes();\n }\n }\n getDebugTree() : {} {\n let scopes = this.topScopes;\n let components = this.components;\n let fields = this.name2cfpairs;\n let systems = this.systems;\n let events = this.event2systems;\n let entities : {[key:string]:Entity} = {};\n for (let scope of Array.from(this.iterateScopes())) {\n for (let e of scope.entities)\n entities[e.name || '#'+e.id.toString()] = e;\n }\n return { scopes, components, fields, systems, events, entities };\n }\n\n // expression stuff\n\n evalExpr(expr: Expr, scope: EntityScope | null) : Expr {\n if (isLiteral(expr)) return expr;\n if (isBinOp(expr) || isUnOp(expr)) {\n var fn = (this as any)['evalop__' + expr.op];\n if (!fn) throw new ECSError(`no eval function for \"${expr.op}\"`);\n }\n if (isBinOp(expr)) {\n expr.left = this.evalExpr(expr.left, scope);\n expr.right = this.evalExpr(expr.right, scope);\n let e = fn(expr.left, expr.right);\n return e || expr;\n }\n if (isUnOp(expr)) {\n expr.expr = this.evalExpr(expr.expr, scope);\n let e = fn(expr.expr);\n return e || expr;\n }\n return expr;\n }\n evalop__neg(arg: Expr) : Expr | undefined {\n if (isLiteralInt(arg)) {\n let valtype : IntType = { dtype:'int',\n lo: -arg.valtype.hi,\n hi: arg.valtype.hi };\n return { valtype, value: -arg.value };\n }\n }\n evalop__add(left: Expr, right: Expr) : Expr | undefined {\n if (isLiteralInt(left) && isLiteralInt(right)) {\n let valtype : IntType = { dtype:'int', \n lo: left.valtype.lo + right.valtype.lo, \n hi: left.valtype.hi + right.valtype.hi };\n return { valtype, value: left.value + right.value };\n }\n }\n evalop__sub(left: Expr, right: Expr) : Expr | undefined {\n if (isLiteralInt(left) && isLiteralInt(right)) {\n let valtype : IntType = { dtype:'int', \n lo: left.valtype.lo - right.valtype.hi, \n hi: left.valtype.hi - right.valtype.lo };\n return { valtype, value: left.value - right.value };\n }\n }\n}\n", "\nimport { SourceLocation } from \"../workertypes\";\nimport { DataValue, ECSError } from \"./ecs\";\n\nexport interface DecoderResult {\n properties: {[name: string] : DataValue}\n}\n\nabstract class LineDecoder {\n curline: number = 0; // for debugging, zero-indexed\n lines : string[][]; // array of token arrays\n\n constructor(\n text: string\n ) {\n // split the text into lines and into tokens\n this.lines = text.split('\\n').map(s => s.trim()).filter(s => !!s).map(s => s.split(/\\s+/));\n }\n\n decodeBits(s: string, n: number, msbfirst: boolean) {\n if (s.length != n) throw new ECSError(`Expected ${n} characters`);\n let b = 0;\n for (let i=0; i<n; i++) {\n let bit;\n let ch = s.charAt(i);\n if (ch == 'x' || ch == 'X' || ch == '1') bit = 1;\n else if (ch == '.' || ch == '0') bit = 0;\n else throw new ECSError('need x or . (or 0 or 1)');\n if (bit) {\n if (msbfirst) b |= 1 << (n-1-i);\n else b |= 1 << i;\n }\n }\n return b;\n }\n\n assertTokens(toks: string[], count: number) {\n if (toks.length != count) throw new ECSError(`Expected ${count} tokens on line.`);\n }\n\n hex(s: string) {\n let v = parseInt(s, 16);\n if (isNaN(v)) throw new ECSError(`Invalid hex value: ${s}`)\n return v;\n }\n\n getErrorLocation($loc: SourceLocation): SourceLocation {\n // TODO: blank lines mess this up\n $loc.line += this.curline + 1;\n return $loc;\n }\n\n abstract parse() : DecoderResult;\n}\n\nexport class VCSSpriteDecoder extends LineDecoder {\n parse() {\n let height = this.lines.length;\n let bitmapdata = new Uint8Array(height);\n let colormapdata = new Uint8Array(height);\n for (let i=0; i<height; i++) {\n this.curline = height - 1 - i;\n let toks = this.lines[this.curline];\n this.assertTokens(toks, 2);\n bitmapdata[i] = this.decodeBits(toks[0], 8, true);\n colormapdata[i] = this.hex(toks[1]);\n }\n return {\n properties: {\n bitmapdata, colormapdata, height: height-1\n }\n }\n }\n}\n\nexport class VCSBitmapDecoder extends LineDecoder {\n parse() {\n let height = this.lines.length;\n let bitmapdata = new Uint8Array(height);\n for (let i=0; i<height; i++) {\n this.curline = height - 1 - i;\n let toks = this.lines[this.curline];\n this.assertTokens(toks, 1);\n bitmapdata[i] = this.decodeBits(toks[0], 8, true);\n }\n return {\n properties: {\n bitmapdata, height: height-1\n }\n }\n }\n}\n\nexport class VCSPlayfieldDecoder extends LineDecoder {\n parse() {\n let height = this.lines.length;\n let pf = new Uint32Array(height);\n for (let i=0; i<height; i++) {\n this.curline = height - 1 - i;\n let toks = this.lines[this.curline];\n this.assertTokens(toks, 1);\n let pf0 = this.decodeBits(toks[0].substring(0,4), 4, false) << 4;\n let pf1 = this.decodeBits(toks[0].substring(4,12), 8, true);\n let pf2 = this.decodeBits(toks[0].substring(12,20), 8, false);\n pf[i] = (pf0 << 0) | (pf1 << 8) | (pf2 << 16);\n }\n return {\n properties: {\n pf\n }\n }\n }\n}\n\n\nexport class VCSVersatilePlayfieldDecoder extends LineDecoder {\n parse() {\n let height = this.lines.length;\n let data = new Uint8Array(height * 2);\n data.fill(0x3f);\n // pf0 pf1 pf2 colupf colubk ctrlpf trash\n const regs = [0x0d, 0x0e, 0x0f, 0x08, 0x09, 0x0a, 0x3f];\n let prev = [0,0,0,0,0,0,0];\n let cur = [0,0,0,0,0,0,0];\n for (let i=0; i<height; i++) {\n let dataofs = height*2 - i*2;\n this.curline = i;\n let toks = this.lines[this.curline];\n if (toks.length == 2) {\n data[dataofs - 1] = this.hex(toks[0]);\n data[dataofs - 2] = this.hex(toks[1]);\n continue;\n }\n this.assertTokens(toks, 4);\n cur[0] = this.decodeBits(toks[0].substring(0,4), 4, false) << 4;\n cur[1] = this.decodeBits(toks[0].substring(4,12), 8, true);\n cur[2] = this.decodeBits(toks[0].substring(12,20), 8, false);\n if (toks[1] != '..') cur[3] = this.hex(toks[1]);\n if (toks[2] != '..') cur[4] = this.hex(toks[2]);\n if (toks[3] != '..') cur[5] = this.hex(toks[3]);\n let changed = [];\n for (let j=0; j<cur.length; j++) {\n if (cur[j] != prev[j])\n changed.push(j);\n }\n if (changed.length > 1) {\n console.log(changed, cur, prev);\n throw new ECSError(`More than one register change in line ${i+1}: [${changed}]`);\n }\n let chgidx = changed.length ? changed[0] : regs.length-1;\n data[dataofs - 1] = regs[chgidx];\n data[dataofs - 2] = cur[chgidx];\n prev[chgidx] = cur[chgidx];\n }\n return {\n properties: {\n data\n }\n }\n }\n}\n\nexport class VCSBitmap48Decoder extends LineDecoder {\n parse() {\n let height = this.lines.length;\n let bitmap0 = new Uint8Array(height);\n let bitmap1 = new Uint8Array(height);\n let bitmap2 = new Uint8Array(height);\n let bitmap3 = new Uint8Array(height);\n let bitmap4 = new Uint8Array(height);\n let bitmap5 = new Uint8Array(height);\n for (let i=0; i<height; i++) {\n this.curline = height - 1 - i;\n let toks = this.lines[this.curline];\n this.assertTokens(toks, 1);\n bitmap0[i] = this.decodeBits(toks[0].slice(0,8), 8, true);\n bitmap1[i] = this.decodeBits(toks[0].slice(8,16), 8, true);\n bitmap2[i] = this.decodeBits(toks[0].slice(16,24), 8, true);\n bitmap3[i] = this.decodeBits(toks[0].slice(24,32), 8, true);\n bitmap4[i] = this.decodeBits(toks[0].slice(32,40), 8, true);\n bitmap5[i] = this.decodeBits(toks[0].slice(40,48), 8, true);\n }\n return {\n properties: {\n bitmap0, bitmap1, bitmap2, bitmap3, bitmap4, bitmap5,\n height: height-1\n }\n }\n }\n}\n\nexport function newDecoder(name: string, text: string) : LineDecoder | undefined {\n let cons = (DECODERS as any)[name];\n if (cons) return new cons(text);\n}\n\nconst DECODERS = {\n 'vcs_sprite': VCSSpriteDecoder,\n 'vcs_bitmap': VCSBitmapDecoder,\n 'vcs_playfield': VCSPlayfieldDecoder,\n 'vcs_versatile': VCSVersatilePlayfieldDecoder,\n 'vcs_bitmap48': VCSBitmap48Decoder,\n}\n", "\nimport { mergeLocs, Token, Tokenizer, TokenType } from \"../tokenizer\";\nimport { SourceLocated, SourceLocation } from \"../workertypes\";\nimport { newDecoder } from \"./decoder\";\nimport { Action, ActionContext, ArrayType, CodeLiteralNode, CodePlaceholderNode, ComponentType, DataField, DataType, DataValue, ECSError, Entity, EntityArchetype, EntityManager, EntityScope, IntType, Query, RefType, SelectType, SELECT_TYPE, SourceFileExport, System, SystemInstance, SystemInstanceParameters, ComponentFieldPair, Expr, ExprBase, ForwardRef, isLiteral, EntityFieldOp, LExpr, Statement, QueryExpr } from \"./ecs\";\n\nexport enum ECSTokenType {\n Ellipsis = 'ellipsis',\n Operator = 'operator',\n Relational = 'relational',\n QuotedString = 'quoted-string',\n Integer = 'integer',\n CodeFragment = 'code-fragment',\n Placeholder = 'placeholder',\n}\n\nconst OPERATORS = {\n 'IMP': {f:'bimp',p:4},\n 'EQV': {f:'beqv',p:5},\n 'XOR': {f:'bxor',p:6},\n 'OR': {f:'bor',p:7}, // or \"lor\" for logical\n 'AND': {f:'band',p:8}, // or \"land\" for logical\n '||': {f:'lor',p:17}, // not used\n '&&': {f:'land',p:18}, // not used\n '=': {f:'eq',p:50},\n '==': {f:'eq',p:50},\n '<>': {f:'ne',p:50},\n '><': {f:'ne',p:50},\n '!=': {f:'ne',p:50},\n '#': {f:'ne',p:50},\n '<': {f:'lt',p:50},\n '>': {f:'gt',p:50},\n '<=': {f:'le',p:50},\n '>=': {f:'ge',p:50},\n 'MIN': {f:'min',p:75},\n 'MAX': {f:'max',p:75},\n '+': {f:'add',p:100},\n '-': {f:'sub',p:100},\n};\n\nfunction getOperator(op: string) {\n return (OPERATORS as any)[op];\n}\n\nfunction getPrecedence(tok: Token): number {\n switch (tok.type) {\n case ECSTokenType.Operator:\n case ECSTokenType.Relational:\n case TokenType.Ident:\n let op = getOperator(tok.str);\n if (op) return op.p;\n }\n return -1;\n}\n\n// is token an end of statement marker? (\":\" or end of line)\nfunction isEOS(tok: Token) {\n return tok.type == TokenType.EOL || tok.type == TokenType.Comment\n || tok.str == ':' || tok.str == 'ELSE'; // TODO: only ELSE if ifElse==true\n}\n\n///\n\nexport class ECSCompiler extends Tokenizer {\n\n currentScope: EntityScope | null = null;\n currentContext: ActionContext | null = null;\n includeDebugInfo = false;\n\n constructor(\n public readonly em: EntityManager,\n public readonly isMainFile: boolean) {\n super();\n //this.includeEOL = true;\n this.setTokenRules([\n { type: ECSTokenType.Ellipsis, regex: /\\.\\./ },\n { type: ECSTokenType.QuotedString, regex: /\".*?\"/ },\n { type: ECSTokenType.CodeFragment, regex: /---.*?---/ },\n { type: ECSTokenType.Integer, regex: /0[xX][A-Fa-f0-9]+/ },\n { type: ECSTokenType.Integer, regex: /\\$[A-Fa-f0-9]+/ },\n { type: ECSTokenType.Integer, regex: /[%][01]+/ },\n { type: ECSTokenType.Integer, regex: /\\d+/ },\n { type: ECSTokenType.Relational, regex: /[=<>][=<>]?/ },\n { type: ECSTokenType.Operator, regex: /[.#,:(){}\\[\\]\\-\\+]/ },\n { type: TokenType.Ident, regex: /[A-Za-z_][A-Za-z0-9_]*/ },\n { type: TokenType.Ignore, regex: /\\/\\/.*?[\\n\\r]/ },\n { type: TokenType.Ignore, regex: /\\/\\*.*?\\*\\// },\n { type: TokenType.EOL, regex: /[\\n\\r]+/ },\n { type: TokenType.Ignore, regex: /\\s+/ },\n ]);\n this.errorOnCatchAll = true;\n }\n\n annotate<T extends SourceLocated>(fn: () => T) {\n let start = this.peekToken();\n let obj = fn();\n let end = this.lasttoken;\n let $loc = end ? mergeLocs(start.$loc, end.$loc) : start.$loc;\n if (obj) (obj as SourceLocated).$loc = $loc;\n return obj;\n }\n\n parseFile(text: string, path: string) {\n this.tokenizeFile(text, path);\n while (!this.isEOF()) {\n let top = this.parseTopLevel();\n if (top) {\n let t = top;\n this.annotate(() => t); // TODO? typescript bug?\n }\n }\n this.runDeferred();\n }\n\n getImportFile: (path: string) => string;\n\n importFile(path: string) {\n if (!this.em.imported[path]) { // already imported?\n let text = this.getImportFile && this.getImportFile(path);\n if (!text) this.compileError(`I can't find the import file \"${path}\".`);\n this.em.imported[path] = true;\n let comp = new ECSCompiler(this.em, false);\n comp.includeDebugInfo = this.includeDebugInfo; // TODO: clone compiler\n try {\n comp.parseFile(text, path);\n } catch (e) {\n for (var err of comp.errors) this.errors.push(err);\n throw e;\n }\n }\n }\n\n parseTopLevel() {\n //this.skipBlankLines();\n let tok = this.expectTokens(['component', 'system', 'scope', 'resource', 'import', 'demo', 'comment']);\n if (tok.str == 'component') {\n return this.em.defineComponent(this.parseComponentDefinition());\n }\n if (tok.str == 'system') {\n return this.em.defineSystem(this.parseSystem());\n }\n if (tok.str == 'scope') {\n return this.parseScope();\n }\n if (tok.str == 'resource') {\n return this.em.defineSystem(this.parseResource());\n }\n if (tok.str == 'import') {\n let tok = this.expectTokenTypes([ECSTokenType.QuotedString]);\n let path = tok.str.substring(1, tok.str.length - 1);\n return this.importFile(path);\n }\n if (tok.str == 'demo') {\n if (this.isMainFile) {\n let scope = this.parseScope();\n scope.isDemo = true;\n this.expectToken('demo');\n return scope;\n } else {\n this.skipDemo(); // don't even parse it, just skip it\n return;\n }\n }\n if (tok.str == 'comment') {\n this.expectTokenTypes([ECSTokenType.CodeFragment]);\n return;\n }\n this.compileError(`Unexpected top-level keyword: ${tok.str}`);\n }\n\n skipDemo() {\n var tok;\n while ((tok = this.consumeToken()) && !this.isEOF()) {\n if (tok.str == 'end' && this.peekToken().str == 'demo') {\n this.consumeToken();\n return;\n }\n }\n throw new ECSError(`Expected \"end demo\" after a \"demo\" declaration.`);\n }\n\n parseComponentDefinition(): ComponentType {\n let name = this.expectIdent().str;\n let fields = [];\n this.em.deferComponent(name);\n while (this.peekToken().str != 'end') {\n fields.push(this.parseComponentField());\n }\n this.expectToken('end');\n return { name, fields };\n }\n\n parseComponentField(): DataField {\n let name = this.expectIdent();\n this.expectToken(':', 'I expected either a \":\" or \"end\" here.'); // TODO\n let type = this.parseDataType();\n return { name: name.str, $loc: name.$loc, ...type };\n }\n\n parseDataType(): DataType {\n if (this.peekToken().type == 'integer') {\n let lo = this.parseIntegerConstant();\n this.expectToken('..');\n let hi = this.parseIntegerConstant();\n this.checkLowerLimit(lo, -0x80000000, \"lower int range\");\n this.checkUpperLimit(hi, 0x7fffffff, \"upper int range\");\n this.checkUpperLimit(hi-lo, 0xffffffff, \"int range\");\n this.checkLowerLimit(hi, lo, \"int range\");\n // TODO: use default value?\n let defvalue;\n if (this.ifToken('default')) {\n defvalue = this.parseIntegerConstant();\n }\n // TODO: check types\n return { dtype: 'int', lo, hi, defvalue } as IntType;\n }\n if (this.peekToken().str == '[') {\n return { dtype: 'ref', query: this.parseQuery() } as RefType;\n }\n if (this.ifToken('array')) {\n let index: IntType | undefined = undefined;\n if (this.peekToken().type == ECSTokenType.Integer) {\n index = this.parseDataType() as IntType;\n }\n this.expectToken('of');\n let elem = this.parseDataType();\n let baseoffset;\n if (this.ifToken('baseoffset')) {\n baseoffset = this.parseIntegerConstant();\n this.checkLowerLimit(baseoffset, -32768, \"base offset\");\n this.checkUpperLimit(baseoffset, 32767, \"base offset\");\n }\n return { dtype: 'array', index, elem, baseoffset } as ArrayType;\n }\n if (this.ifToken('enum')) {\n this.expectToken('[');\n let enumtoks = this.parseList(this.parseEnumIdent, ',');\n this.expectToken(']');\n if (enumtoks.length == 0) this.compileError(`must define at least one enum`);\n let lo = 0;\n let hi = enumtoks.length-1;\n this.checkLowerLimit(hi, 0, \"enum count\");\n this.checkUpperLimit(hi, 255, \"enum count\");\n let enums : {[name:string]:number} = {};\n for (let i=0; i<=hi; i++)\n enums[enumtoks[i].str] = i;\n // TODO: use default value?\n let defvalue;\n if (this.ifToken('default')) {\n defvalue = this.parseIntegerConstant();\n }\n return { dtype: 'int', lo, hi, defvalue, enums } as IntType;\n }\n throw this.compileError(`I expected a data type here.`);\n }\n\n parseEnumIdent() {\n let tok = this.expectTokenTypes([TokenType.Ident]);\n return tok;\n }\n parseEnumValue(tok: Token, field: IntType) {\n if (!field.enums) throw new ECSError(`field is not an enum`);\n let value = field.enums[tok.str];\n if (value == null) throw new ECSError(`unknown enum \"${tok.str}\"`);\n return value;\n }\n\n parseDataValue(field: DataField): DataValue | ForwardRef {\n let tok = this.peekToken();\n // TODO: move to expr\n if (tok.type == TokenType.Ident && field.dtype == 'int') {\n return this.parseEnumValue(this.consumeToken(), field);\n }\n if (tok.type == TokenType.Ident) {\n let entity = this.currentScope?.getEntityByName(tok.str);\n if (!entity)\n this.compileError('no entity named \"${tok.str}\"');\n else {\n this.consumeToken();\n this.expectToken('.');\n let fieldName = this.expectIdent().str;\n let constValue = this.currentScope?.getConstValue(entity, fieldName);\n if (constValue == null)\n throw new ECSError(`\"${fieldName}\" is not defined as a constant`, entity);\n else\n return constValue;\n }\n }\n if (tok.str == '[') {\n // TODO: 16-bit?\n return new Uint8Array(this.parseDataArray());\n }\n if (tok.str == '#') {\n this.consumeToken();\n let reftype = field.dtype == 'ref' ? field as RefType : undefined;\n return this.parseEntityForwardRef(reftype);\n }\n // TODO?\n return this.parseIntegerConstant();\n // TODO: throw this.compileError(`I expected a ${field.dtype} here.`);\n }\n\n parseEntityForwardRef(reftype?: RefType): ForwardRef {\n let token = this.expectIdent();\n return { reftype, token };\n }\n\n parseDataArray() {\n this.expectToken('[');\n let arr = this.parseList(this.parseIntegerConstant, ',');\n this.expectToken(']');\n return arr;\n }\n\n expectInteger(): number {\n let s = this.consumeToken().str;\n let i: number;\n if (s.startsWith('$'))\n i = parseInt(s.substring(1), 16); // hex $...\n else if (s.startsWith('%'))\n i = parseInt(s.substring(1), 2); // binary %...\n else\n i = parseInt(s); // default base 10 or 16 (0x...)\n if (isNaN(i)) this.compileError('There should be an integer here.');\n return i;\n }\n\n parseSystem(): System {\n let name = this.expectIdent().str;\n let actions: Action[] = [];\n let system: System = { name, actions };\n let cmd;\n while ((cmd = this.expectTokens(['on', 'locals', 'end']).str) != 'end') {\n if (cmd == 'on') {\n let action = this.annotate(() => this.parseAction(system));\n actions.push(action);\n } else if (cmd == 'locals') {\n system.tempbytes = this.parseIntegerConstant();\n } else {\n this.compileError(`Unexpected system keyword: ${cmd}`);\n }\n }\n return system;\n }\n\n parseResource(): System {\n let name = this.expectIdent().str;\n let tempbytes;\n if (this.peekToken().str == 'locals') {\n this.consumeToken();\n tempbytes = this.parseIntegerConstant();\n }\n let system: System = { name, tempbytes, actions: [] };\n let expr = this.annotate(() => this.parseBlockStatement());\n let action: Action = { expr, event: name };\n system.actions.push(action);\n return system;\n }\n\n parseAction(system: System): Action {\n // TODO: unused events?\n const event = this.expectIdent().str;\n this.expectToken('do');\n let fitbytes = undefined;\n let critical = undefined;\n if (this.ifToken('critical')) critical = true;\n if (this.ifToken('fit')) fitbytes = this.parseIntegerConstant();\n let expr = this.annotate(() => this.parseBlockStatement());\n //query, join, select, direction, \n let action : Action = { expr, event, fitbytes, critical };\n return action as Action;\n }\n\n parseQuery() {\n let q: Query = { include: [] };\n let start = this.expectToken('[');\n this.parseList(() => this.parseQueryItem(q), ',');\n this.expectToken(']');\n // TODO: other params\n q.$loc = mergeLocs(start.$loc, this.lasttoken.$loc);\n return q;\n }\n\n parseQueryItem(q: Query) {\n let prefix = this.peekToken();\n if (prefix.type != TokenType.Ident) {\n this.consumeToken();\n }\n if (prefix.type == TokenType.Ident) {\n let cref = this.parseComponentRef();\n q.include.push(cref);\n } else if (prefix.str == '-') {\n let cref = this.parseComponentRef();\n if (!q.exclude) q.exclude = [];\n q.exclude.push(cref);\n } else if (prefix.str == '#') {\n const scope = this.currentScope;\n if (scope == null) {\n throw this.compileError('You can only reference specific entities inside of a scope.');\n }\n let eref = this.parseEntityForwardRef();\n this.deferred.push(() => {\n let refvalue = this.resolveEntityRef(scope, eref);\n if (!q.entities) q.entities = [];\n q.entities.push(scope.entities[refvalue]);\n });\n } else {\n this.compileError(`Query components may be preceded only by a '-'.`);\n }\n }\n\n parseEventName() {\n return this.expectIdent().str;\n }\n\n parseEventList() {\n return this.parseList(this.parseEventName, \",\");\n }\n\n parseCode(): string { // TODOActionNode[] {\n // TODO: add $loc\n let tok = this.expectTokenTypes([ECSTokenType.CodeFragment]);\n let code = tok.str.substring(3, tok.str.length - 3);\n // TODO: add after parsing maybe?\n let lines = code.split('\\n');\n if (this.includeDebugInfo) this.addDebugInfo(lines, tok.$loc.line);\n code = lines.join('\\n');\n\n //let acomp = new ECSActionCompiler(context);\n //let nodes = acomp.parseFile(code, this.path);\n // TODO: return nodes\n return code;\n }\n\n addDebugInfo(lines: string[], startline: number) {\n const re = /^\\s*(;|\\/\\/|$)/; // ignore comments and blank lines\n for (let i = 0; i < lines.length; i++) {\n if (!lines[i].match(re))\n lines[i] = this.em.dialect.debug_line(this.path, startline + i) + '\\n' + lines[i];\n }\n }\n\n parseScope(): EntityScope {\n let name = this.expectIdent().str;\n let scope = this.em.newScope(name, this.currentScope || undefined);\n scope.filePath = this.path;\n this.currentScope = scope;\n let cmd;\n while ((cmd = this.expectTokens(['end', 'using', 'entity', 'scope', 'comment', 'system']).str) != 'end') {\n if (cmd == 'using') {\n this.parseScopeUsing();\n }\n if (cmd == 'entity') {\n this.annotate(() => this.parseEntity());\n }\n if (cmd == 'scope') {\n this.annotate(() => this.parseScope());\n }\n if (cmd == 'comment') {\n this.expectTokenTypes([ECSTokenType.CodeFragment]);\n }\n // TODO: need to make these local names, otherwise we get \"duplicate name\"\n if (cmd == 'system') {\n let sys = this.annotate(() => this.parseSystem());\n this.em.defineSystem(sys);\n this.currentScope.newSystemInstanceWithDefaults(sys);\n }\n }\n this.currentScope = scope.parent || null;\n return scope;\n }\n\n parseScopeUsing() {\n let instlist = this.parseList(this.parseSystemInstanceRef, ',');\n let params = {};\n if (this.peekToken().str == 'with') {\n this.consumeToken();\n params = this.parseSystemInstanceParameters();\n }\n for (let inst of instlist) {\n inst.params = params;\n this.currentScope?.newSystemInstance(inst);\n }\n }\n\n parseEntity(): Entity {\n if (!this.currentScope) { throw this.internalError(); }\n const scope = this.currentScope;\n let entname = '';\n if (this.peekToken().type == TokenType.Ident) {\n entname = this.expectIdent().str;\n }\n let etype = this.parseEntityArchetype();\n let entity = this.currentScope.newEntity(etype, entname);\n let cmd2: string;\n // TODO: remove init?\n while ((cmd2 = this.expectTokens(['const', 'init', 'var', 'decode', 'end']).str) != 'end') {\n let cmd = cmd2; // put in scope\n if (cmd == 'var') cmd = 'init'; // TODO: remove?\n if (cmd == 'init' || cmd == 'const') {\n this.parseInitConst(cmd, scope, entity);\n } else if (cmd == 'decode') {\n this.parseDecode(scope, entity);\n }\n }\n return entity;\n }\n\n parseInitConst(cmd: string, scope: EntityScope, entity: Entity) {\n // TODO: check data types\n let name = this.expectIdent().str;\n let { c, f } = this.getEntityField(entity, name);\n let symtype = scope.isConstOrInit(c, name);\n if (symtype && symtype != cmd)\n this.compileError(`I can't mix const and init values for a given field in a scope.`);\n this.expectToken('=');\n let valueOrRef = this.parseDataValue(f);\n if ((valueOrRef as ForwardRef).token != null) {\n this.deferred.push(() => {\n this.lasttoken = (valueOrRef as ForwardRef).token; // for errors\n let refvalue = this.resolveEntityRef(scope, valueOrRef as ForwardRef);\n if (cmd == 'const') scope.setConstValue(entity, c, f, refvalue);\n if (cmd == 'init') scope.setInitValue(entity, c, f, refvalue);\n });\n } else {\n if (cmd == 'const') scope.setConstValue(entity, c, f, valueOrRef as DataValue);\n if (cmd == 'init') scope.setInitValue(entity, c, f, valueOrRef as DataValue);\n }\n }\n\n parseDecode(scope: EntityScope, entity: Entity) {\n let decoderid = this.expectIdent().str;\n let codetok = this.expectTokenTypes([ECSTokenType.CodeFragment]);\n let code = codetok.str;\n code = code.substring(3, code.length - 3);\n let decoder = newDecoder(decoderid, code);\n if (!decoder) { throw this.compileError(`I can't find a \"${decoderid}\" decoder.`); }\n let result;\n try {\n result = decoder.parse();\n } catch (e) {\n throw new ECSError(e.message, decoder.getErrorLocation(codetok.$loc));\n }\n for (let entry of Object.entries(result.properties)) {\n let { c, f } = this.getEntityField(entity, entry[0]);\n scope.setConstValue(entity, c, f, entry[1] as DataValue);\n }\n }\n\n getEntityField(e: Entity, name: string): ComponentFieldPair {\n if (!this.currentScope) { throw this.internalError(); }\n let comps = this.em.componentsWithFieldName([e.etype], name);\n if (comps.length == 0) this.compileError(`I couldn't find a field named \"${name}\" for this entity.`)\n if (comps.length > 1) this.compileError(`I found more than one field named \"${name}\" for this entity.`)\n let component = comps[0];\n let field = component.fields.find(f => f.name == name);\n if (!field) { throw this.internalError(); }\n return { c: component, f: field };\n }\n\n parseEntityArchetype(): EntityArchetype {\n this.expectToken('[');\n let components = this.parseList(this.parseComponentRef, ',');\n this.expectToken(']');\n return { components };\n }\n\n parseComponentRef(): ComponentType {\n let name = this.expectIdent().str;\n let cref = this.em.getComponentByName(name);\n if (!cref) this.compileError(`I couldn't find a component named \"${name}\".`)\n return cref;\n }\n\n findEntityByName(scope: EntityScope, token: Token) {\n let name = token.str;\n let eref = scope.entities.find(e => e.name == name);\n if (!eref) {\n throw this.compileError(`I couldn't find an entity named \"${name}\" in this scope.`, token.$loc)\n }\n return eref;\n }\n\n resolveEntityRef(scope: EntityScope, ref: ForwardRef): number {\n let id = this.findEntityByName(scope, ref.token).id;\n if (ref.reftype) {\n // TODO: make this a function? elo ehi etc?\n let atypes = this.em.archetypesMatching(ref.reftype.query);\n let entities = scope.entitiesMatching(atypes);\n if (entities.length == 0)\n throw this.compileError(`This entity doesn't seem to fit the reference type.`, ref.token.$loc);\n id -= entities[0].id;\n }\n return id;\n }\n\n parseSystemInstanceRef(): SystemInstance {\n let name = this.expectIdent().str;\n let system = this.em.getSystemByName(name);\n if (!system) throw this.compileError(`I couldn't find a system named \"${name}\".`, this.lasttoken.$loc);\n let params = {};\n let inst = { system, params, id: 0 };\n return inst;\n }\n\n parseSystemInstanceParameters(): SystemInstanceParameters {\n let scope = this.currentScope;\n if (scope == null) throw this.internalError();\n if (this.peekToken().str == '[') {\n return { query: this.parseQuery() };\n }\n this.expectToken('#');\n let entname = this.expectIdent();\n this.expectToken('.');\n let fieldname = this.expectIdent();\n let entity = this.findEntityByName(scope, entname);\n let cf = this.getEntityField(entity, fieldname.str);\n return { refEntity: entity, refField: cf };\n }\n\n exportToFile(src: SourceFileExport) {\n this.em.exportToFile(src);\n }\n\n export() {\n let src = new SourceFileExport();\n src.line(this.em.dialect.debug_file(this.path));\n for (let path of Object.keys(this.em.imported))\n src.line(this.em.dialect.debug_file(path));\n this.exportToFile(src);\n return src.toString();\n }\n\n checkUpperLimit(value: number, upper: number, what: string) {\n if (value > upper) this.compileError(`This ${what} is too high; must be ${upper} or less`);\n }\n checkLowerLimit(value: number, lower: number, what: string) {\n if (value < lower) this.compileError(`This ${what} is too low; must be ${lower} or more`);\n }\n\n // expression stuff\n\n parseConstant(): DataValue {\n let expr = this.parseExpr();\n expr = this.em.evalExpr(expr, this.currentScope);\n if (isLiteral(expr)) return expr.value;\n throw this.compileError('This expression is not a constant.');\n }\n parseIntegerConstant(): number {\n let value = this.parseConstant();\n if (typeof value === 'number') return value;\n throw this.compileError('This expression is not an integer.');\n }\n parseExpr(): Expr {\n var startloc = this.peekToken().$loc;\n var expr = this.parseExpr1(this.parsePrimary(), 0);\n var endloc = this.lasttoken.$loc;\n expr.$loc = mergeLocs(startloc, endloc);\n return expr;\n }\n parseExpr1(left: Expr, minPred: number): Expr {\n let look = this.peekToken();\n while (getPrecedence(look) >= minPred) {\n let op = this.consumeToken();\n let right: Expr = this.parsePrimary();\n look = this.peekToken();\n while (getPrecedence(look) > getPrecedence(op)) {\n right = this.parseExpr1(right, getPrecedence(look));\n look = this.peekToken();\n }\n var opfn = getOperator(op.str).f;\n // use logical operators instead of bitwise?\n if (op.str == 'and') opfn = 'land';\n if (op.str == 'or') opfn = 'lor';\n var valtype = this.exprTypeForOp(opfn, left, right, op);\n left = { valtype:valtype, op:opfn, left: left, right: right };\n }\n return left;\n }\n parsePrimary(): Expr {\n let tok = this.consumeToken();\n switch (tok.type) {\n case ECSTokenType.Integer:\n this.pushbackToken(tok);\n let value = this.expectInteger();\n let valtype : IntType = { dtype: 'int', lo: value, hi: value };\n return { valtype, value };\n case TokenType.Ident:\n if (tok.str == 'not') {\n let expr = this.parsePrimary();\n let valtype : IntType = { dtype: 'int', lo: 0, hi: 1 };\n return { valtype, op: 'lnot', expr: expr };\n } else {\n this.pushbackToken(tok);\n return this.parseVarSubscriptOrFunc();\n }\n case ECSTokenType.Operator:\n if (tok.str == '(') {\n let expr = this.parseExpr();\n this.expectToken(')', `There should be another expression or a \")\" here.`);\n return expr;\n } else if (tok.str == '-') {\n let expr = this.parsePrimary(); // TODO: -2^2=-4 and -2-2=-4\n let valtype = (expr as ExprBase).valtype;\n if (valtype?.dtype == 'int') {\n let hi = Math.abs(valtype.hi);\n let negtype : IntType = { dtype: 'int', lo: -hi, hi: hi };\n return { valtype: negtype, op: 'neg', expr: expr };\n }\n } else if (tok.str == '+') {\n return this.parsePrimary(); // ignore unary +\n }\n default:\n throw this.compileError(`The expression is incomplete.`);\n }\n }\n parseVarSubscriptOrFunc(): LExpr {\n var tok = this.consumeToken();\n switch (tok.type) {\n case TokenType.Ident:\n // component:field\n if (this.ifToken(':')) {\n let ftok = this.consumeToken();\n let component = this.em.getComponentByName(tok.str);\n if (!component) throw this.compileError(`A component named \"${tok.str}\" has not been defined.`);\n let field = component.fields.find(f => f.name == ftok.str);\n if (!field) throw this.compileError(`There is no \"${ftok.str}\" field in the ${tok.str} component.`);\n if (!this.currentScope) throw this.compileError(`This operation only works inside of a scope.`);\n let atypes = this.em.archetypesMatching({ include: [component] })\n let entities = this.currentScope.entitiesMatching(atypes);\n return { entities, field } as EntityFieldOp;\n }\n // entity.field\n if (this.ifToken('.')) {\n let ftok = this.consumeToken();\n if (!this.currentScope) throw this.compileError(`This operation only works inside of a scope.`);\n let entity = this.currentScope.getEntityByName(tok.str);\n if (!entity) throw this.compileError(`An entity named \"${tok.str}\" has not been defined.`);\n let component = this.em.singleComponentWithFieldName([entity.etype], ftok.str, ftok);\n let field = component.fields.find(f => f.name == ftok.str);\n if (!field) throw this.compileError(`There is no \"${ftok.str}\" field in this entity.`);\n let entities = [entity];\n return { entities, field } as EntityFieldOp;\n }\n let args : Expr[] = [];\n if (this.ifToken('(')) {\n args = this.parseExprList();\n this.expectToken(')', `There should be another expression or a \")\" here.`);\n }\n var loc = mergeLocs(tok.$loc, this.lasttoken.$loc);\n var valtype = this.exprTypeForSubscript(tok.str, args, loc);\n return { valtype: valtype, name: tok.str, args: args, $loc:loc };\n default:\n throw this.compileError(`There should be a variable name here.`);\n }\n }\n parseLexpr(): LExpr {\n var lexpr = this.parseVarSubscriptOrFunc();\n //this.vardefs[lexpr.name] = lexpr;\n //this.validateVarName(lexpr);\n return lexpr;\n }\n exprTypeForOp(fnname: string, left: Expr, right: Expr, optok: Token) : DataType {\n return { dtype: 'int', lo:0, hi:255 }; // TODO?\n }\n exprTypeForSubscript(fnname: string, args: Expr[], loc: SourceLocation) : DataType {\n return { dtype: 'int', lo:0, hi:255 }; // TODO?\n }\n parseLexprList(): LExpr[] {\n return this.parseList(this.parseLexpr, ',');\n }\n parseExprList(): Expr[] {\n return this.parseList(this.parseExpr, ',');\n }\n // TODO: annotate with location\n parseBlockStatement(): Statement {\n let valtype : IntType = { dtype:'int', lo:0, hi: 0 } // TODO?\n if (this.peekToken().type == ECSTokenType.CodeFragment) {\n return { valtype, code: this.parseCode() };\n }\n if (this.ifToken('begin')) {\n let stmts = [];\n while (this.peekToken().str != 'end') {\n stmts.push(this.annotate(() => this.parseBlockStatement()));\n }\n this.expectToken('end');\n return { valtype, stmts };\n }\n let cmd = this.peekToken();\n if (SELECT_TYPE.includes(cmd.str as any)) {\n return this.parseQueryStatement();\n }\n throw this.compileError(`There should be a statement or \"end\" here.`, cmd.$loc);\n }\n parseQueryStatement() : QueryExpr {\n // TODO: include modifiers in error msg\n const select = this.expectTokens(SELECT_TYPE).str as SelectType; // TODO: type check?\n let all = this.ifToken('all') != null;\n let query = undefined;\n let join = undefined;\n if (select == 'once') {\n if (this.peekToken().str == '[') this.compileError(`A \"${select}\" action can't include a query.`)\n } else {\n query = this.parseQuery();\n }\n if (select == 'join') {\n this.expectToken('with');\n join = this.parseQuery();\n }\n if (this.ifToken('limit')) {\n if (!query) { this.compileError(`A \"${select}\" query can't include a limit.`); }\n else query.limit = this.parseIntegerConstant();\n }\n const all_modifiers = ['asc', 'desc']; // TODO\n const modifiers = this.parseModifiers(all_modifiers);\n let direction = undefined;\n if (modifiers['asc']) direction = 'asc';\n else if (modifiers['desc']) direction = 'desc';\n let body = this.annotate(() => this.parseBlockStatement());\n return { select, query, join, direction, all, stmts: [body], loop: select == 'foreach' } as QueryExpr;\n }\n}\n\n///\n\nexport class ECSActionCompiler extends Tokenizer {\n constructor(\n public readonly context: ActionContext) {\n super();\n this.setTokenRules([\n { type: ECSTokenType.Placeholder, regex: /\\{\\{.*?\\}\\}/ },\n { type: TokenType.CatchAll, regex: /[^{\\n]+\\n*/ },\n ]);\n this.errorOnCatchAll = false;\n }\n\n parseFile(text: string, path: string) {\n this.tokenizeFile(text, path);\n let nodes = [];\n while (!this.isEOF()) {\n let tok = this.consumeToken();\n if (tok.type == ECSTokenType.Placeholder) {\n let args = tok.str.substring(2, tok.str.length - 2).split(/\\s+/);\n nodes.push(new CodePlaceholderNode(this.context, tok.$loc, args));\n } else if (tok.type == TokenType.CatchAll) {\n nodes.push(new CodeLiteralNode(this.context, tok.$loc, tok.str));\n }\n }\n return nodes;\n }\n}\n", "import { ECSCompiler } from \"../../common/ecs/compiler\";\nimport { Dialect_CA65, ECSError, EntityManager } from \"../../common/ecs/ecs\";\nimport { CompileError } from \"../../common/tokenizer\";\nimport { CodeListingMap } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, getWorkFileAsString, gatherFiles, staleFiles, fixParamsWithDefines, putWorkFile } from \"../builder\";\n\nexport function assembleECS(step: BuildStep): BuildStepResult {\n let em = new EntityManager(new Dialect_CA65()); // TODO\n let compiler = new ECSCompiler(em, true);\n compiler.getImportFile = (path: string) => {\n return getWorkFileAsString(path);\n }\n gatherFiles(step, { mainFilePath: \"main.ecs\" });\n if (step.mainfile) em.mainPath = step.path;\n var destpath = step.prefix + '.ca65';\n if (staleFiles(step, [destpath])) {\n let code = getWorkFileAsString(step.path);\n fixParamsWithDefines(step.path, step.params);\n try {\n compiler.includeDebugInfo = true;\n compiler.parseFile(code, step.path);\n let outtext = compiler.export().toString();\n putWorkFile(destpath, outtext);\n var listings: CodeListingMap = {};\n listings[destpath] = {lines:[], text:outtext} // TODO\n var debuginfo = compiler.em.getDebugTree();\n } catch (e) {\n if (e instanceof ECSError) {\n compiler.addError(e.message, e.$loc);\n for (let obj of e.$sources) {\n let name = (obj as any).event;\n if (name == 'start') break;\n compiler.addError(`... ${name}`, obj.$loc); // TODO?\n }\n return { errors: compiler.errors };\n } else if (e instanceof CompileError) {\n return { errors: compiler.errors };\n } else {\n throw e;\n }\n }\n return {\n nexttool: \"ca65\",\n path: destpath,\n args: [destpath],\n files: [destpath].concat(step.files),\n listings,\n debuginfo\n };\n }\n}\n", "\nexport type FileData = string | Uint8Array;\n\nexport interface SourceLocation {\n line: number;\n label?: string;\n path?: string; // TODO: make mandatory?\n start?: number;\n end?: number;\n segment?:string;\n func?:string;\n}\n\n// actually it's a kind of SourceSnippet .. can have multiple per line\nexport interface SourceLine extends SourceLocation {\n offset:number;\n insns?:string;\n iscode?:boolean;\n cycles?:number;\n}\n\n// objects that have source code position info\nexport interface SourceLocated {\n $loc?: SourceLocation;\n}\n// statements also have the 'offset' (pc) field from SourceLine\nexport interface SourceLineLocated {\n $loc?: SourceLine;\n}\n\nexport class SourceFile {\n lines: SourceLine[];\n text: string;\n offset2loc: Map<number,SourceLine>; //{[offset:number]:number};\n line2offset: Map<number,number>; //{[line:number]:number};\n \n constructor(lines:SourceLine[], text:string) {\n lines = lines || [];\n this.lines = lines;\n this.text = text;\n this.offset2loc = new Map();\n this.line2offset = new Map();\n for (var info of lines) {\n if (info.offset >= 0) {\n // first line wins (is assigned to offset)\n // TODO: handle macros/includes w/ multiple offsets per line\n if (!this.offset2loc[info.offset])\n this.offset2loc[info.offset] = info;\n if (!this.line2offset[info.line])\n this.line2offset[info.line] = info.offset;\n }\n }\n }\n // TODO: smarter about looking for source lines between two addresses\n findLineForOffset(PC:number, lookbehind:number) : SourceLine {\n if (this.offset2loc) {\n for (var i=0; i<=lookbehind; i++) {\n var loc = this.offset2loc[PC];\n if (loc) {\n return loc;\n }\n PC--;\n }\n }\n return null;\n }\n lineCount():number { return this.lines.length; }\n}\n\nexport interface Dependency {\n path:string\n filename:string\n link:boolean\n data:FileData // TODO: or binary?\n}\n\nexport interface WorkerFileUpdate {\n path:string\n data:FileData\n};\nexport interface WorkerBuildStep {\n path?:string\n files?:string[]\n platform:string\n tool:string\n mainfile?:boolean\n};\nexport interface WorkerItemUpdate {\n key:string\n value:object\n};\n\n// TODO: split into different msg types\nexport interface WorkerMessage {\n preload?:string\n platform?:string\n tool?:string\n updates:WorkerFileUpdate[]\n buildsteps:WorkerBuildStep[]\n reset?:boolean\n code?:string\n setitems?:WorkerItemUpdate[]\n}\n\nexport interface WorkerError extends SourceLocation {\n msg:string,\n}\n\nexport interface CodeListing {\n lines:SourceLine[]\n asmlines?:SourceLine[]\n text?:string\n sourcefile?:SourceFile // not returned by worker\n assemblyfile?:SourceFile // not returned by worker\n}\n\nexport type CodeListingMap = {[path:string]:CodeListing};\n\n// TODO\nexport type VerilogOutput =\n {program_rom_variable:string, program_rom:Uint8Array, code:string, name:string, ports:any[], signals:any[]};\n\nexport type Segment = {\n name:string,\n start:number,\n size:number,\n last?:number,\n type?:string,\n source?:'native'|'linker'\n};\n\nexport type WorkerResult = WorkerErrorResult | WorkerOutputResult<any> | WorkerUnchangedResult;\n\nexport interface WorkerUnchangedResult {\n unchanged: true;\n}\n\nexport interface WorkerErrorResult {\n errors: WorkerError[]\n listings?: CodeListingMap\n}\n\nexport interface WorkerOutputResult<T> {\n output: T\n listings?: CodeListingMap\n symbolmap?: {[sym:string]:number}\n params?: {}\n segments?: Segment[]\n debuginfo?: {} // optional info\n}\n\nexport function isUnchanged(result: WorkerResult) : result is WorkerUnchangedResult {\n return ('unchanged' in result);\n}\n\nexport function isErrorResult(result: WorkerResult) : result is WorkerErrorResult {\n return ('errors' in result);\n}\n\nexport function isOutputResult(result: WorkerResult) : result is WorkerOutputResult<any> {\n return ('output' in result);\n}\n\nexport interface WorkingStore {\n getFileData(path:string) : FileData;\n}\n", "import { byteArrayToString, stringToByteArray } from \"../../common/util\";\nimport { WorkerFileUpdate, isErrorResult, isOutputResult, isUnchanged } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, gatherFiles, staleFiles, store } from \"../builder\";\n\n// create random UID\nconst sessionID = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);\n\n// TODO: #include links but #link doesnt link\nexport async function buildRemote(step: BuildStep): Promise<BuildStepResult> {\n // grab the remote URL from a remote.json file\n const { REMOTE_URL } = await (await fetch('../../remote.json')).json();\n if (typeof REMOTE_URL !== 'string') throw new Error(\"No REMOTE_URL in remote.json\");\n\n gatherFiles(step); // TODO?\n var binpath = \"a.out\"; // TODO?\n if (staleFiles(step, [binpath])) {\n // grab files from store\n let updates : WorkerFileUpdate[] = [];\n for (var i = 0; i < step.files.length; i++) {\n let path = step.files[i];\n let entry = store.workfs[path];\n // convert to base64\n let data = typeof entry.data === 'string' ? entry.data : btoa(byteArrayToString(entry.data));\n updates.push({ path, data });\n }\n // build the command\n let cmd = { buildStep: step, updates, sessionID };\n // do a POST to the remote server, sending step as JSON\n console.log('POST', cmd);\n let result = await fetch(REMOTE_URL, {\n method: \"POST\",\n mode: \"cors\",\n body: JSON.stringify(cmd),\n headers: {\n \"Content-Type\": \"application/json\"\n }\n });\n // return the result as JSON\n let json = await result.json();\n // parse the result as JSON\n if (isUnchanged(json)) return json;\n if (isErrorResult(json)) return json;\n if (isOutputResult(json)) {\n json.output = stringToByteArray(atob(json.output));\n return json;\n }\n throw new Error(`Unexpected result from remote build: ${JSON.stringify(json)}`);\n }\n}\n", "import { CodeListing, CodeListingMap } from \"../../common/workertypes\";\nimport { BuildStep, BuildStepResult, gatherFiles, staleFiles, populateFiles, fixParamsWithDefines, putWorkFile } from \"../builder\";\nimport { msvcErrorMatcher } from \"../listingutils\";\nimport { loadNative, moduleInstFn, print_fn, setupFS, execMain, emglobal, EmscriptenModule } from \"../wasmutils\";\n\nfunction parseACMESymbolTable(text: string) {\n var symbolmap = {};\n var lines = text.split(\"\\n\");\n for (var i = 0; i < lines.length; ++i) {\n var line = lines[i].trim();\n // \tinit_text\t= $81b\t; ?\n var m = line.match(/(\\w+)\\s*=\\s*[$]([0-9a-f]+)/i);\n if (m) {\n symbolmap[m[1]] = parseInt(m[2], 16);\n }\n }\n return symbolmap;\n}\n\nfunction parseACMEReportFile(text: string) {\n var listings : CodeListingMap = {};\n var listing : CodeListing;\n var lines = text.split(\"\\n\");\n for (var i = 0; i < lines.length; ++i) {\n var line = lines[i].trim();\n // ; ******** Source: hello.acme\n var m1 = line.match(/^;\\s*[*]+\\s*Source: (.+)$/);\n if (m1) {\n var file = m1[1];\n listings[file] = listing = {\n lines: [],\n };\n continue;\n }\n // 15 0815 201b08 \t\tjsr init_text\t\t; write line of text\n var m2 = line.match(/^(\\d+)\\s+([0-9a-f]+)\\s+([0-9a-f]+)/i);\n if (m2) {\n if (listing) {\n listing.lines.push({\n line: parseInt(m2[1]),\n offset: parseInt(m2[2], 16),\n insns: m2[3],\n });\n }\n }\n }\n return listings;\n}\n\nexport function assembleACME(step: BuildStep): BuildStepResult {\n loadNative(\"acme\");\n var errors = [];\n gatherFiles(step, { mainFilePath: \"main.acme\" });\n var binpath = step.prefix + \".bin\";\n var lstpath = step.prefix + \".lst\";\n var sympath = step.prefix + \".sym\";\n if (staleFiles(step, [binpath])) {\n var binout, lstout, symout;\n var ACME: EmscriptenModule = emglobal.acme({\n instantiateWasm: moduleInstFn('acme'),\n noInitialRun: true,\n print: print_fn,\n printErr: msvcErrorMatcher(errors),\n //printErr: makeErrorMatcher(errors, /(Error|Warning) - File (.+?), line (\\d+)[^:]+: (.+)/, 3, 4, step.path, 2),\n });\n var FS = ACME.FS;\n populateFiles(step, FS);\n fixParamsWithDefines(step.path, step.params);\n var args = ['--msvc', '--initmem', '0', '-o', binpath, '-r', lstpath, '-l', sympath, step.path];\n if (step.params?.acmeargs) {\n args.unshift.apply(args, step.params.acmeargs);\n } else {\n args.unshift.apply(args, ['-f', 'plain']);\n }\n args.unshift.apply(args, [\"-D__8BITWORKSHOP__=1\"]);\n if (step.mainfile) {\n args.unshift.apply(args, [\"-D__MAIN__=1\"]);\n }\n execMain(step, ACME, args);\n if (errors.length) {\n let listings: CodeListingMap = {};\n return { errors, listings };\n }\n binout = FS.readFile(binpath, { encoding: 'binary' });\n lstout = FS.readFile(lstpath, { encoding: 'utf8' });\n symout = FS.readFile(sympath, { encoding: 'utf8' });\n putWorkFile(binpath, binout);\n putWorkFile(lstpath, lstout);\n putWorkFile(sympath, symout);\n return {\n output: binout,\n listings: parseACMEReportFile(lstout),\n errors: errors,\n symbolmap: parseACMESymbolTable(symout),\n };\n }\n}\n", "import JSZip from 'jszip';\nimport { WASIMemoryFilesystem } from \"../common/wasi/wasishim\";\n\nexport function loadBlobSync(path: string) {\n var xhr = new XMLHttpRequest();\n xhr.responseType = 'blob';\n xhr.open(\"GET\", path, false); // synchronous request\n xhr.send(null);\n return xhr.response;\n}\n\nexport async function loadWASIFilesystemZip(zippath: string) {\n const jszip = new JSZip();\n const path = '../../src/worker/fs/' + zippath;\n const zipdata = loadBlobSync(path);\n console.log(zippath, zipdata);\n await jszip.loadAsync(zipdata);\n let fs = new WASIMemoryFilesystem();\n let promises = [];\n jszip.forEach(async (relativePath, zipEntry) => {\n if (zipEntry.dir) {\n fs.putDirectory(relativePath);\n } else {\n let path = './' + relativePath;\n let prom = zipEntry.async(\"uint8array\").then((data) => {\n fs.putFile(path, data);\n });\n promises.push(prom);\n }\n });\n await Promise.all(promises);\n return fs;\n}\n", "import { WASIFilesystem, WASIMemoryFilesystem, WASIRunner } from \"../../common/wasi/wasishim\";\nimport { BuildStep, BuildStepResult, gatherFiles, staleFiles, store, putWorkFile } from \"../builder\";\nimport { makeErrorMatcher } from \"../listingutils\";\nimport { loadWASIFilesystemZip } from \"../wasiutils\";\nimport { loadWASMBinary } from \"../wasmutils\";\n\nlet cc7800_fs: WASIFilesystem | null = null;\nlet wasiModule: WebAssembly.Module | null = null;\n\nexport async function compileCC7800(step: BuildStep): Promise<BuildStepResult> {\n const errors = [];\n gatherFiles(step, { mainFilePath: \"main.c\" });\n const destpath = \"./a.out\";\n if (staleFiles(step, [destpath])) {\n if (!cc7800_fs) {\n cc7800_fs = await loadWASIFilesystemZip(\"cc7800-fs.zip\");\n }\n if (!wasiModule) {\n wasiModule = new WebAssembly.Module(loadWASMBinary(\"cc7800\"));\n }\n const wasi = new WASIRunner();\n wasi.initSync(wasiModule);\n wasi.fs.setParent(cc7800_fs);\n for (let file of step.files) {\n wasi.fs.putFile(\"./\" + file, store.getFileData(file));\n }\n wasi.addPreopenDirectory(\"headers\");\n wasi.addPreopenDirectory(\".\");\n wasi.setArgs([\"cc7800\", \"-v\", \"-g\", \"-S\", \"-I\", \"headers\", step.path]);\n try {\n wasi.run();\n } catch (e) {\n errors.push(e);\n }\n // TODO\n let stdout = wasi.fds[1].getBytesAsString();\n let stderr = wasi.fds[2].getBytesAsString();\n console.log('stdout', stdout);\n console.log('stderr', stderr);\n // Syntax error: Unknown identifier cputes on line 11 of test.c78\n if (stderr.indexOf(\"Syntax error:\") >= 0) {\n const matcher = makeErrorMatcher(errors, /^Syntax error: (.+?) on line (\\d+) of (.+)/, 2, 1, step.path, 3);\n for (let line of stderr.split('\\n')) {\n matcher(line);\n }\n }\n if (errors.length) {\n return { errors };\n }\n const combinedasm = wasi.fs.getFile(destpath).getBytesAsString();\n putWorkFile(destpath, combinedasm);\n }\n return {\n nexttool: \"dasm\",\n path: destpath,\n args: [destpath],\n files: [destpath]\n };\n}\n", "import { BuildStep, BuildStepResult, gatherFiles, getWorkFileAsString, populateFiles, putWorkFile, staleFiles } from \"../builder\";\nimport { EmscriptenModule, emglobal, execMain, load, print_fn, setupFS, setupStdin } from \"../wasmutils\";\n\nfunction preprocessBatariBasic(code: string): string {\n load(\"bbpreprocess\");\n var bbout = \"\";\n function addbbout_fn(s) {\n bbout += s;\n bbout += \"\\n\";\n }\n var BBPRE: EmscriptenModule = emglobal.preprocess({\n noInitialRun: true,\n //logReadFiles:true,\n print: addbbout_fn,\n printErr: print_fn,\n noFSInit: true,\n });\n var FS = BBPRE.FS;\n setupStdin(FS, code);\n BBPRE.callMain([]);\n console.log(\"preprocess \" + code.length + \" -> \" + bbout.length + \" bytes\");\n return bbout;\n}\n\nexport function compileBatariBasic(step: BuildStep): BuildStepResult {\n load(\"bb2600basic\");\n var params = step.params;\n // stdout\n var asmout = \"\";\n function addasmout_fn(s) {\n asmout += s;\n asmout += \"\\n\";\n }\n // stderr\n var re_err1 = /[(](\\d+)[)]:?\\s*(.+)/;\n var errors = [];\n var errline = 0;\n function match_fn(s) {\n console.log(s);\n var matches = re_err1.exec(s);\n if (matches) {\n errline = parseInt(matches[1]);\n errors.push({\n line: errline,\n msg: matches[2]\n });\n }\n }\n gatherFiles(step, { mainFilePath: \"main.bas\" });\n var destpath = step.prefix + '.asm';\n if (staleFiles(step, [destpath])) {\n var BB: EmscriptenModule = emglobal.bb2600basic({\n noInitialRun: true,\n //logReadFiles:true,\n print: addasmout_fn,\n printErr: match_fn,\n noFSInit: true,\n TOTAL_MEMORY: 64 * 1024 * 1024,\n });\n var FS = BB.FS;\n populateFiles(step, FS);\n // preprocess, pipe file to stdin\n var code = getWorkFileAsString(step.path);\n code = preprocessBatariBasic(code);\n setupStdin(FS, code);\n setupFS(FS, '2600basic');\n execMain(step, BB, [\"-i\", \"/share\", step.path]);\n if (errors.length)\n return { errors: errors };\n // build final assembly output from include file list\n var includesout = FS.readFile(\"includes.bB\", { encoding: 'utf8' });\n var redefsout = FS.readFile(\"2600basic_variable_redefs.h\", { encoding: 'utf8' });\n var includes = includesout.trim().split(\"\\n\");\n var combinedasm = \"\";\n var splitasm = asmout.split(\"bB.asm file is split here\");\n for (var incfile of includes) {\n var inctext;\n if (incfile == \"bB.asm\")\n inctext = splitasm[0];\n else if (incfile == \"bB2.asm\")\n inctext = splitasm[1];\n else\n inctext = FS.readFile(\"/share/includes/\" + incfile, { encoding: 'utf8' });\n console.log(incfile, inctext.length);\n combinedasm += \"\\n\\n;;;\" + incfile + \"\\n\\n\";\n combinedasm += inctext;\n }\n // TODO: ; bB.asm file is split here\n putWorkFile(destpath, combinedasm);\n putWorkFile(\"2600basic.h\", FS.readFile(\"/share/includes/2600basic.h\"));\n putWorkFile(\"2600basic_variable_redefs.h\", redefsout);\n }\n return {\n nexttool: \"dasm\",\n path: destpath,\n args: [destpath],\n files: [destpath, \"2600basic.h\", \"2600basic_variable_redefs.h\"],\n bblines: true,\n };\n}", "\nimport * as misc from './tools/misc'\nimport * as cc65 from './tools/cc65'\nimport * as dasm from './tools/dasm'\nimport * as sdcc from './tools/sdcc'\nimport * as verilog from './tools/verilog'\nimport * as m6809 from './tools/m6809'\nimport * as m6502 from './tools/m6502'\nimport * as z80 from './tools/z80'\nimport * as x86 from './tools/x86'\nimport * as arm from './tools/arm'\nimport * as ecs from './tools/ecs'\nimport * as remote from './tools/remote'\nimport * as acme from './tools/acme'\nimport * as cc7800 from './tools/cc7800'\nimport * as bataribasic from './tools/bataribasic'\nimport { PLATFORM_PARAMS } from \"./platforms\";\n\nexport const TOOLS = {\n 'dasm': dasm.assembleDASM,\n 'acme': acme.assembleACME,\n 'cc65': cc65.compileCC65,\n 'ca65': cc65.assembleCA65,\n 'ld65': cc65.linkLD65,\n //'z80asm': assembleZ80ASM,\n //'sccz80': compileSCCZ80,\n 'sdasz80': sdcc.assembleSDASZ80,\n 'sdldz80': sdcc.linkSDLDZ80,\n 'sdcc': sdcc.compileSDCC,\n 'xasm6809': m6809.assembleXASM6809,\n 'cmoc': m6809.compileCMOC,\n 'lwasm': m6809.assembleLWASM,\n 'lwlink': m6809.linkLWLINK,\n //'naken': assembleNAKEN,\n 'verilator': verilog.compileVerilator,\n 'yosys': verilog.compileYosys,\n 'jsasm': verilog.compileJSASMStep,\n 'zmac': z80.assembleZMAC,\n 'nesasm': m6502.assembleNESASM,\n 'smlrc': x86.compileSmallerC,\n 'yasm': x86.assembleYASM,\n 'bataribasic': bataribasic.compileBatariBasic,\n 'markdown': misc.translateShowdown,\n 'inform6': misc.compileInform6,\n 'merlin32': m6502.assembleMerlin32,\n 'fastbasic': m6502.compileFastBasic,\n 'basic': misc.compileBASIC,\n 'silice': verilog.compileSilice,\n 'wiz': misc.compileWiz,\n 'armips': arm.assembleARMIPS,\n 'vasmarm': arm.assembleVASMARM,\n 'ecs': ecs.assembleECS,\n 'remote': remote.buildRemote,\n 'cc7800': cc7800.compileCC7800,\n}\n\nexport const TOOL_PRELOADFS = {\n 'cc65-apple2': '65-apple2',\n 'ca65-apple2': '65-apple2',\n 'cc65-c64': '65-c64',\n 'ca65-c64': '65-c64',\n 'cc65-vic20': '65-vic20',\n 'ca65-vic20': '65-vic20',\n 'cc65-nes': '65-nes',\n 'ca65-nes': '65-nes',\n 'cc65-atari8': '65-atari8',\n 'ca65-atari8': '65-atari8',\n 'cc65-vector': '65-none',\n 'ca65-vector': '65-none',\n 'cc65-atari7800': '65-none',\n 'ca65-atari7800': '65-none',\n 'cc65-devel': '65-none',\n 'ca65-devel': '65-none',\n 'cc65-vcs': '65-atari2600',\n 'ca65-vcs': '65-atari2600',\n 'cc65-pce': '65-pce',\n 'ca65-pce': '65-pce',\n 'cc65-exidy': '65-none',\n 'ca65-exidy': '65-none',\n 'sdasz80': 'sdcc',\n 'sdcc': 'sdcc',\n 'sccz80': 'sccz80',\n 'bataribasic': '2600basic',\n 'inform6': 'inform',\n 'fastbasic': '65-atari8',\n 'silice': 'Silice',\n 'wiz': 'wiz',\n 'ecs-vcs': '65-atari2600', // TODO: support multiple platforms\n 'ecs-nes': '65-nes', // TODO: support multiple platforms\n 'ecs-c64': '65-c64', // TODO: support multiple platforms\n}\n\n", "\nimport type { WorkerResult, WorkerMessage, WorkerError, SourceLine } from \"../common/workertypes\";\nimport { getBasePlatform, getRootBasePlatform } from \"../common/util\";\nimport { TOOL_PRELOADFS } from \"./workertools\";\nimport { store, builder, errorResult, getWorkFileAsString } from \"./builder\";\nimport { emglobal, fsMeta, loadFilesystem } from \"./wasmutils\";\n\ndeclare function importScripts(path: string);\ndeclare function postMessage(msg);\n\nexport function setupRequireFunction() {\n var exports = {};\n exports['jsdom'] = {\n JSDOM: function (a, b) {\n this.window = {};\n }\n };\n emglobal['require'] = (modname: string) => {\n console.log('require', modname, exports[modname] != null);\n return exports[modname];\n }\n}\n\n////////////////////////////\n\n//const waitFor = delay => new Promise(resolve => setTimeout(resolve, delay)); // for testing\n\nasync function handleMessage(data: WorkerMessage): Promise<WorkerResult> {\n // preload file system\n if (data.preload) {\n var fs = TOOL_PRELOADFS[data.preload];\n if (!fs && data.platform)\n fs = TOOL_PRELOADFS[data.preload + '-' + getBasePlatform(data.platform)];\n if (!fs && data.platform)\n fs = TOOL_PRELOADFS[data.preload + '-' + getRootBasePlatform(data.platform)];\n if (fs && !fsMeta[fs])\n loadFilesystem(fs);\n return;\n }\n // clear filesystem? (TODO: buildkey)\n if (data.reset) {\n store.reset();\n return;\n }\n return builder.handleMessage(data);\n}\n\nconst ENVIRONMENT_IS_WORKER = typeof importScripts === 'function';\nif (ENVIRONMENT_IS_WORKER) {\n var lastpromise = null;\n onmessage = async function (e) {\n await lastpromise; // wait for previous message to complete\n lastpromise = handleMessage(e.data);\n var result = await lastpromise;\n lastpromise = null;\n if (result) {\n try {\n postMessage(result);\n } catch (e) {\n console.log(e);\n postMessage(errorResult(`${e}`));\n }\n }\n }\n}\n"],
"mappings": "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",
"names": []
}