From f82bd51ec51f9d39af66bac166ecf5b18f593989 Mon Sep 17 00:00:00 2001 From: Zebulun McNeill Date: Mon, 2 Jun 2025 17:17:34 -0500 Subject: [PATCH] make doc site better with wasm --- Makefile | 29 +++- docs/gem.js | 20 +++ docs/gem.wasm | Bin 0 -> 122966 bytes docs/index.html | 121 +++++++++----- docs/script.js | 246 ++++++++++++++++++++++++++++- docs/styles.css | 365 +++++++++++++++++++++++++++++++++++++++++-- src/wasm_interface.c | 116 ++++++++++++++ 7 files changed, 848 insertions(+), 49 deletions(-) create mode 100644 docs/gem.js create mode 100755 docs/gem.wasm create mode 100644 src/wasm_interface.c diff --git a/Makefile b/Makefile index ee0943f..cc0ecd0 100644 --- a/Makefile +++ b/Makefile @@ -148,11 +148,32 @@ $(BIN_DIR)/gemch: $(SRC_FILES) $(VERSION_HEADER) $(CC) $(SRC_FILES) -o $(BIN_DIR)/gemch $(CFLAGS) $(LDFLAGS) @echo "Built: $(BIN_DIR)/gemch (without standard library) - version $(VERSION_STRING)" +# WASM build targets +EMCC = emcc +WASM_CFLAGS = -O3 -s WASM=1 -s EXPORTED_RUNTIME_METHODS='["ccall","cwrap"]' -s ALLOW_MEMORY_GROWTH=1 -s MODULARIZE=1 -s EXPORT_NAME="GemModule" -s ENVIRONMENT=web -s EXPORTED_FUNCTIONS='["_gem_init","_gem_cleanup","_gem_clear_output","_gem_get_output","_gem_add_to_output","_gem_interpret","_gem_get_version","_gem_is_initialized"]' +WASM_SRC_FILES = $(filter-out $(SRC_DIR)/main.c, $(SRC_FILES)) + +# Build WASM version with standard library +$(DOCS_DIR)/gem.js: $(WASM_SRC_FILES) $(EMBEDDED_STL_HEADER) $(VERSION_HEADER) + @echo "Building Gem interpreter for WebAssembly with standard library..." + $(EMCC) $(WASM_SRC_FILES) -o $(DOCS_DIR)/gem.js $(WASM_CFLAGS) -DWITH_STL -DSTL_PATH='"$(STL_DIR)"' + @echo "Built: $(DOCS_DIR)/gem.js and $(DOCS_DIR)/gem.wasm (with standard library) - version $(VERSION_STRING)" + +# Build WASM version without standard library +$(DOCS_DIR)/gem-no-stl.js: $(WASM_SRC_FILES) $(VERSION_HEADER) + @echo "Building Gem interpreter for WebAssembly without standard library..." + $(EMCC) $(WASM_SRC_FILES) -o $(DOCS_DIR)/gem-no-stl.js $(WASM_CFLAGS) + @echo "Built: $(DOCS_DIR)/gem-no-stl.js and $(DOCS_DIR)/gem-no-stl.wasm (without standard library) - version $(VERSION_STRING)" + # Convenience targets gemc: $(BIN_DIR)/gemc gemch: $(BIN_DIR)/gemch +wasm: $(DOCS_DIR)/gem.js + +wasm-no-stl: $(DOCS_DIR)/gem-no-stl.js + # Alternative target for --no-stl flag no-stl: $(BIN_DIR)/gemch @@ -170,6 +191,8 @@ clean: rm -rf $(BIN_DIR) rm -f $(EMBEDDED_STL_HEADER) rm -f $(VERSION_HEADER) + rm -f $(DOCS_DIR)/gem.js $(DOCS_DIR)/gem.wasm + rm -f $(DOCS_DIR)/gem-no-stl.js $(DOCS_DIR)/gem-no-stl.wasm # Install to system (optional) install: $(BIN_DIR)/gemc @@ -202,6 +225,8 @@ help: @echo " all - Build gemc with standard library (default)" @echo " gemc - Build gemc with standard library" @echo " gemch - Build gemch without standard library" + @echo " wasm - Build WebAssembly version with standard library" + @echo " wasm-no-stl - Build WebAssembly version without standard library" @echo " no-stl - Alias for gemch (without standard library)" @echo " version - Show current version information" @echo " version-update- Update version and rebuild everything" @@ -214,6 +239,7 @@ help: @echo "" @echo "Build output:" @echo " Binaries are built in the $(BIN_DIR)/ directory" + @echo " WASM files are built in the $(DOCS_DIR)/ directory" @echo "" @echo "Version management:" @echo " Edit $(VERSION_CONF) to change version" @@ -221,8 +247,9 @@ help: @echo "" @echo "Examples:" @echo " make # Build with standard library ($(BIN_DIR)/gemc)" + @echo " make wasm # Build WebAssembly version ($(DOCS_DIR)/gem.js)" @echo " make version # Show current version" @echo " make version-update# Update version and rebuild" @echo " make clean # Clean build artifacts" -.PHONY: gemc gemch clean install uninstall test help no-stl version version-update update-docs \ No newline at end of file +.PHONY: gemc gemch clean install uninstall test help no-stl version version-update update-docs wasm wasm-no-stl \ No newline at end of file diff --git a/docs/gem.js b/docs/gem.js new file mode 100644 index 0000000..ed2176d --- /dev/null +++ b/docs/gem.js @@ -0,0 +1,20 @@ +var GemModule = (() => { + var _scriptName = typeof document != 'undefined' ? document.currentScript?.src : undefined; + return ( +async function(moduleArg = {}) { + var moduleRtn; + +var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var ENVIRONMENT_IS_WEB=true;var ENVIRONMENT_IS_WORKER=false;var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(".",_scriptName).href}catch{}{readAsync=async url=>{var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var wasmMemory;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAP64,HEAPU64,HEAPF64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);HEAP32=new Int32Array(b);HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();wasmExports["o"]();FS.ignorePermissions=false}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}var runDependencies=0;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var wasmBinaryFile;function findWasmBinary(){return locateFile("gem.wasm")}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){return{a:wasmImports}}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["n"];updateMemoryViews();removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){return receiveInstance(result["instance"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(mod,inst)=>{resolve(receiveInstance(mod,inst))})})}wasmBinaryFile??=findWasmBinary();try{var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}catch(e){readyPromiseReject(e);return Promise.reject(e)}}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var syscallGetVarargI=()=>{var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret};var syscallGetVarargP=syscallGetVarargI;var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>view=>crypto.getRandomValues(view);var randomFill=view=>{(randomFill=initRandomFill())(view)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};var intArrayFromString=(stringy,dontAddNull,length)=>{var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array};var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var zeroMemory=(ptr,size)=>HEAPU8.fill(0,ptr,ptr+size);var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var mmapAlloc=size=>{size=alignMemory(size,65536);var ptr=_emscripten_builtin_memalign(65536,size);if(ptr)zeroMemory(ptr,size);return ptr};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw MEMFS.doesNotExistError},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{var arrayBuffer=await readAsync(url);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(...args)=>FS.createDataFile(...args);var preloadPlugins=[];var FS_handledByPreloadPlugin=(byteArray,fullname,finish,onerror)=>{if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}onload?.();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{onerror?.();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url).then(processData,onerror)}else{processData(url)}};var FS_modeStringToFlags=str=>{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,readFiles:{},ErrnoError:class{name="ErrnoError";constructor(errno){this.errno=errno}},FSStream:class{shared={};get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){if(!FS.isDir(dir.mode)){return 54}try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);setattr(arg,attr)},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type,opts,mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev(path,mode,dev){if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink(oldpath,newpath){if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);old_node.parent=new_dir}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return readdir(node)},unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},truncate(path,len){if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}if(Module["logReadFiles"]&&!(flags&1)){if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed(stream){return stream.fd===null},llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},mmap(stream,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}if(!length){throw new FS.ErrnoError(28)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error(`Invalid encoding type "${opts.encoding}"`)}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length,llseek:()=>0});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomFill(randomBuffer);randomLeft=randomBuffer.byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input){FS.createDevice("/dev","stdin",input)}else{FS.symlink("/dev/tty","/dev/stdin")}if(output){FS.createDevice("/dev","stdout",null,output)}else{FS.symlink("/dev/tty","/dev/stdout")}if(error){FS.createDevice("/dev","stderr",null,error)}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},staticInit(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},init(input,output,error){FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;for(var stream of FS.streams){if(stream){FS.close(stream)}}},findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath(parent,path,canRead,canWrite){parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){if(e.errno!=20)throw e}parent=current}return current},createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return dir+"/"+path},writeStat(buf,stat){HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAP32[buf+12>>2]=stat.uid;HEAP32[buf+16>>2]=stat.gid;HEAP32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAP32[buf+4>>2]=stats.bsize;HEAP32[buf+40>>2]=stats.bsize;HEAP32[buf+8>>2]=stats.blocks;HEAP32[buf+12>>2]=stats.bfree;HEAP32[buf+16>>2]=stats.bavail;HEAP32[buf+20>>2]=stats.files;HEAP32[buf+24>>2]=stats.ffree;HEAP32[buf+28>>2]=stats.fsid;HEAP32[buf+44>>2]=stats.flags;HEAP32[buf+36>>2]=stats.namelen},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();stream.flags|=arg;return 0}case 12:{var arg=syscallGetVarargP();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();HEAP32[argp>>2]=termios.c_iflag||0;HEAP32[argp+4>>2]=termios.c_oflag||0;HEAP32[argp+8>>2]=termios.c_cflag||0;HEAP32[argp+12>>2]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[argp+i+17]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=HEAP32[argp>>2];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();HEAP16[argp>>1]=winsize[0];HEAP16[argp+2>>1]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function __munmap_js(addr,len,prot,flags,fd,offset){offset=bigintToI53Checked(offset);try{var stream=SYSCALLS.getStreamFromFD(fd);if(prot&2){SYSCALLS.doMsync(addr,stream,len,flags,offset)}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var _emscripten_get_now=()=>performance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var getHeapMax=()=>2147483648;var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536|0;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignMemory(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var _exit=exitJS;function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var getCFunc=ident=>{var func=Module["_"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();MEMFS.doesNotExistError=new FS.ErrnoError(44);MEMFS.doesNotExistError.stack="";{if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(Module["preloadPlugins"])preloadPlugins=Module["preloadPlugins"];if(Module["print"])out=Module["print"];if(Module["printErr"])err=Module["printErr"];if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"]}Module["ccall"]=ccall;Module["cwrap"]=cwrap;var wasmImports={d:___syscall_fcntl64,f:___syscall_ioctl,g:___syscall_openat,j:__munmap_js,l:_clock_time_get,h:_emscripten_date_now,a:_emscripten_get_now,i:_emscripten_resize_heap,m:_exit,b:_fd_close,e:_fd_read,k:_fd_seek,c:_fd_write};var wasmExports=await createWasm();var ___wasm_call_ctors=wasmExports["o"];var _gem_init=Module["_gem_init"]=wasmExports["p"];var _gem_cleanup=Module["_gem_cleanup"]=wasmExports["q"];var _gem_clear_output=Module["_gem_clear_output"]=wasmExports["r"];var _gem_get_output=Module["_gem_get_output"]=wasmExports["s"];var _gem_add_to_output=Module["_gem_add_to_output"]=wasmExports["t"];var _gem_interpret=Module["_gem_interpret"]=wasmExports["u"];var _gem_get_version=Module["_gem_get_version"]=wasmExports["v"];var _gem_is_initialized=Module["_gem_is_initialized"]=wasmExports["w"];var _emscripten_builtin_memalign=wasmExports["x"];var __emscripten_stack_restore=wasmExports["y"];var __emscripten_stack_alloc=wasmExports["z"];var _emscripten_stack_get_current=wasmExports["A"];function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);Module["onRuntimeInitialized"]?.();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}function preInit(){if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].shift()()}}}preInit();run();moduleRtn=readyPromise; + + + return moduleRtn; +} +); +})(); +if (typeof exports === 'object' && typeof module === 'object') { + module.exports = GemModule; + // This default export looks redundant, but it allows TS to import this + // commonjs style module. + module.exports.default = GemModule; +} else if (typeof define === 'function' && define['amd']) + define([], () => GemModule); diff --git a/docs/gem.wasm b/docs/gem.wasm new file mode 100755 index 0000000000000000000000000000000000000000..d6b1b1cfa26e0d6ef67c8d2c1b8c886b09948173 GIT binary patch literal 122966 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 AZU6uP literal 0 HcmV?d00001 diff --git a/docs/index.html b/docs/index.html index b3d970f..d324567 100644 --- a/docs/index.html +++ b/docs/index.html @@ -6,6 +6,8 @@ Gem Programming Language + +