From d2a2eb3cf6c7d5e376c21fcedae3769927f0bedc Mon Sep 17 00:00:00 2001 From: yhirose Date: Mon, 25 Jan 2021 22:46:28 -0500 Subject: [PATCH] Cut operator support --- README.md | 15 +++++- docs/native.js | 2 +- docs/native.wasm | Bin 359569 -> 363603 bytes peglib.h | 123 +++++++++++++++++++++++++++++++++++------------ test/test2.cc | 4 +- 5 files changed, 110 insertions(+), 34 deletions(-) diff --git a/README.md b/README.md index 0e87af4..513e788 100644 --- a/README.md +++ b/README.md @@ -25,10 +25,11 @@ The PEG syntax is well described on page 2 in the [document](http://www.brynosau * `$name<` ... `>` (Named capture operator) * `$name` (Backreference operator) * `|` (Dictionary operator) + * `↑` (Cut operator) * `MACRO_NAME(` ... `)` (Parameterized rule or Macro) * `{ precedence L - + L / * }` (Parsing infix expression) * `%recovery(` ... `)` (Error recovery operator) - * `exp^label` (Syntax sugar for `(exp / %recover(label))`) + * `exp⇑label` (Syntax sugar for `(exp / %recover(label))`) * `label { message "..." }` (Error message instruction) This library supports the linear-time parsing known as the [*Packrat*](http://pdos.csail.mit.edu/~baford/packrat/thesis/thesis.pdf) parsing. @@ -324,6 +325,18 @@ START <- 'This month is ' MONTH '.' MONTH <- 'Jan' | 'January' | 'Feb' | 'February' | '...' ``` +Cut operator +------------ + +`↑` operator could mitigate backtrack performance problem, but has a risk to change the meaning of grammar. + +```peg +S <- '(' ↑ P ')' / '"' ↑ P '"' / P +P <- 'a' / 'b' / 'c' +``` + +When we parse `(z` with the above grammar, we don't have to backtrack in `S` after `(` is matched because a cut operator is inserted there. + Parameterized Rule or Macro --------------------------- diff --git a/docs/native.js b/docs/native.js index 30e9bf9..6ccc2d4 100644 --- a/docs/native.js +++ b/docs/native.js @@ -1 +1 @@ -var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable=new WebAssembly.Table({"initial":761,"maximum":761+0,"element":"anyfunc"});var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function 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}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var i=0;var str="";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0||i==maxBytesToRead/2)return str;++i;str+=String.fromCharCode(codeUnit)}}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var DYNAMIC_BASE=5279552,DYNAMICTOP_PTR=36512;var INITIAL_INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";out(what);err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";throw new WebAssembly.RuntimeError(what)}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="native.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;__ATINIT__.push({func:function(){___wasm_call_ctors()}});function demangle(func){return func}function demangleAll(text){var regex=/\b_Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___cxa_allocate_exception(size){return _malloc(size)}var ___exception_infos={};var ___exception_last=0;function __ZSt18uncaught_exceptionv(){return __ZSt18uncaught_exceptionv.uncaught_exceptions>0}function ___cxa_throw(ptr,type,destructor){___exception_infos[ptr]={ptr:ptr,adjusted:[ptr],type:type,destructor:destructor,refcount:0,caught:false,rethrown:false};___exception_last=ptr;if(!("uncaught_exception"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exceptions=1}else{__ZSt18uncaught_exceptionv.uncaught_exceptions++}throw ptr}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}function ___map_file(pathname,size){setErrNo(63);return-1}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(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:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[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.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(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;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){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,allocate:MEMFS.stream_ops.allocate,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.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=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);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){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;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=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+length8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(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:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}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:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(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:function(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){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(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(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(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:type,opts:opts,mountpoint: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:function(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(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}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)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_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=function(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);if(typeof Uint8Array!="undefined")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||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(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};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;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url: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(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29)}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>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function syscallMunmap(addr,len){if((addr|0)===-1||len===0){return-28}var info=SYSCALLS.mappings[addr];if(!info)return 0;if(len===info.len){var stream=FS.getStream(info.fd);if(info.prot&2){SYSCALLS.doMsync(addr,stream,len,info.flags,info.offset)}FS.munmap(stream);SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}function ___sys_munmap(addr,len){try{return syscallMunmap(addr,len)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])},destructorFunction:null})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>2])}function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(handle){var rv=emval_handle_array[handle].value;__emval_decref(handle);return rv},"toWireType":function(destructors,value){return __emval_register(value)},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=function(value){return value};if(minRange===0){var bitshift=32-8*size;fromWireType=function(value){return value<>>bitshift}}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0},"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(HEAPU8[currentBytePtr]==0||i==length){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;i>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(HEAP[currentBytePtr>>shift]==0||i==length){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function _abort(){abort()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var ENV={};function __getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":(typeof navigator==="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8","_":__getExecutableName()};for(var x in ENV){env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value==="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};for(var rule in EXPANSION_RULES_2){if(pattern.indexOf(rule)>=0){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_emval();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");function 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 asmLibraryArg={"b":___assert_fail,"e":___cxa_allocate_exception,"d":___cxa_throw,"q":___map_file,"p":___sys_munmap,"k":__embind_register_bool,"j":__embind_register_emval,"i":__embind_register_float,"t":__embind_register_function,"c":__embind_register_integer,"a":__embind_register_memory_view,"g":__embind_register_std_string,"f":__embind_register_std_wstring,"l":__embind_register_void,"h":_abort,"m":_emscripten_memcpy_big,"n":_emscripten_resize_heap,"r":_environ_get,"s":_environ_sizes_get,"memory":wasmMemory,"o":_strftime_l,"table":wasmTable};var asm=createWasm();Module["asm"]=asm;var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["u"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["v"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["w"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["x"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["y"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["z"]).apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return(dynCall_viiii=Module["dynCall_viiii"]=Module["asm"]["A"]).apply(null,arguments)};var dynCall_iiiiii=Module["dynCall_iiiiii"]=function(){return(dynCall_iiiiii=Module["dynCall_iiiiii"]=Module["asm"]["B"]).apply(null,arguments)};var dynCall_viiiiii=Module["dynCall_viiiiii"]=function(){return(dynCall_viiiiii=Module["dynCall_viiiiii"]=Module["asm"]["C"]).apply(null,arguments)};var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=function(){return(dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=Module["asm"]["D"]).apply(null,arguments)};var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=function(){return(dynCall_viiiiiii=Module["dynCall_viiiiiii"]=Module["asm"]["E"]).apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return(dynCall_vi=Module["dynCall_vi"]=Module["asm"]["F"]).apply(null,arguments)};var dynCall_ii=Module["dynCall_ii"]=function(){return(dynCall_ii=Module["dynCall_ii"]=Module["asm"]["G"]).apply(null,arguments)};var dynCall_iiiii=Module["dynCall_iiiii"]=function(){return(dynCall_iiiii=Module["dynCall_iiiii"]=Module["asm"]["H"]).apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return(dynCall_vii=Module["dynCall_vii"]=Module["asm"]["I"]).apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return(dynCall_iiii=Module["dynCall_iiii"]=Module["asm"]["J"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["K"]).apply(null,arguments)};var dynCall_iii=Module["dynCall_iii"]=function(){return(dynCall_iii=Module["dynCall_iii"]=Module["asm"]["L"]).apply(null,arguments)};var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=function(){return(dynCall_iiiiiii=Module["dynCall_iiiiiii"]=Module["asm"]["M"]).apply(null,arguments)};var dynCall_iidiiii=Module["dynCall_iidiiii"]=function(){return(dynCall_iidiiii=Module["dynCall_iidiiii"]=Module["asm"]["N"]).apply(null,arguments)};var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=function(){return(dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=Module["asm"]["O"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["P"]).apply(null,arguments)};var dynCall_iiiiid=Module["dynCall_iiiiid"]=function(){return(dynCall_iiiiid=Module["dynCall_iiiiid"]=Module["asm"]["Q"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["R"]).apply(null,arguments)};var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=function(){return(dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=Module["asm"]["S"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["T"]).apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return(dynCall_v=Module["dynCall_v"]=Module["asm"]["U"]).apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return(dynCall_viiiii=Module["dynCall_viiiii"]=Module["asm"]["V"]).apply(null,arguments)};Module["asm"]=asm;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run(); +var Module=typeof Module!=="undefined"?Module:{};var moduleOverrides={};var key;for(key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var arguments_=[];var thisProgram="./this.program";var quit_=function(status,toThrow){throw toThrow};var ENVIRONMENT_IS_WEB=false;var ENVIRONMENT_IS_WORKER=false;var ENVIRONMENT_IS_NODE=false;var ENVIRONMENT_IS_SHELL=false;ENVIRONMENT_IS_WEB=typeof window==="object";ENVIRONMENT_IS_WORKER=typeof importScripts==="function";ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary,setWindowTitle;var nodeFS;var nodePath;if(ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){scriptDirectory=require("path").dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=function shell_read(filename,binary){if(!nodeFS)nodeFS=require("fs");if(!nodePath)nodePath=require("path");filename=nodePath["normalize"](filename);return nodeFS["readFileSync"](filename,binary?null:"utf8")};readBinary=function readBinary(filename){var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}assert(ret.buffer);return ret};if(process["argv"].length>1){thisProgram=process["argv"][1].replace(/\\/g,"/")}arguments_=process["argv"].slice(2);if(typeof module!=="undefined"){module["exports"]=Module}process["on"]("uncaughtException",function(ex){if(!(ex instanceof ExitStatus)){throw ex}});process["on"]("unhandledRejection",abort);quit_=function(status){process["exit"](status)};Module["inspect"]=function(){return"[Emscripten Module object]"}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=function shell_read(f){return read(f)}}readBinary=function readBinary(f){var data;if(typeof readbuffer==="function"){return new Uint8Array(readbuffer(f))}data=read(f,"binary");assert(typeof data==="object");return data};if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit==="function"){quit_=function(status){quit(status)}}if(typeof print!=="undefined"){if(typeof console==="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!=="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=function shell_read(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=function readBinary(url){var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=function readAsync(url,onload,onerror){var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=function xhr_onload(){if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}setWindowTitle=function(title){document.title=title}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.warn.bind(console);for(key in moduleOverrides){if(moduleOverrides.hasOwnProperty(key)){Module[key]=moduleOverrides[key]}}moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];var noExitRuntime;if(Module["noExitRuntime"])noExitRuntime=Module["noExitRuntime"];if(typeof WebAssembly!=="object"){err("no native wasm support detected")}var wasmMemory;var wasmTable=new WebAssembly.Table({"initial":773,"maximum":773+0,"element":"anyfunc"});var ABORT=false;var EXITSTATUS=0;function assert(condition,text){if(!condition){abort("Assertion failed: "+text)}}var UTF8Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf8"):undefined;function UTF8ArrayToString(heap,idx,maxBytesToRead){var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heap[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heap.subarray&&UTF8Decoder){return UTF8Decoder.decode(heap.subarray(idx,endPtr))}else{var str="";while(idx>10,56320|ch&1023)}}}return str}function UTF8ToString(ptr,maxBytesToRead){return ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):""}function 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}function stringToUTF8(str,outPtr,maxBytesToWrite){return stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite)}function lengthBytesUTF8(str){var len=0;for(var i=0;i=55296&&u<=57343)u=65536+((u&1023)<<10)|str.charCodeAt(++i)&1023;if(u<=127)++len;else if(u<=2047)len+=2;else if(u<=65535)len+=3;else len+=4}return len}var UTF16Decoder=typeof TextDecoder!=="undefined"?new TextDecoder("utf-16le"):undefined;function UTF16ToString(ptr,maxBytesToRead){var endPtr=ptr;var idx=endPtr>>1;var maxIdx=idx+maxBytesToRead/2;while(!(idx>=maxIdx)&&HEAPU16[idx])++idx;endPtr=idx<<1;if(endPtr-ptr>32&&UTF16Decoder){return UTF16Decoder.decode(HEAPU8.subarray(ptr,endPtr))}else{var i=0;var str="";while(1){var codeUnit=HEAP16[ptr+i*2>>1];if(codeUnit==0||i==maxBytesToRead/2)return str;++i;str+=String.fromCharCode(codeUnit)}}}function stringToUTF16(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<2)return 0;maxBytesToWrite-=2;var startPtr=outPtr;var numCharsToWrite=maxBytesToWrite>1]=codeUnit;outPtr+=2}HEAP16[outPtr>>1]=0;return outPtr-startPtr}function lengthBytesUTF16(str){return str.length*2}function UTF32ToString(ptr,maxBytesToRead){var i=0;var str="";while(!(i>=maxBytesToRead/4)){var utf32=HEAP32[ptr+i*4>>2];if(utf32==0)break;++i;if(utf32>=65536){var ch=utf32-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}else{str+=String.fromCharCode(utf32)}}return str}function stringToUTF32(str,outPtr,maxBytesToWrite){if(maxBytesToWrite===undefined){maxBytesToWrite=2147483647}if(maxBytesToWrite<4)return 0;var startPtr=outPtr;var endPtr=startPtr+maxBytesToWrite-4;for(var i=0;i=55296&&codeUnit<=57343){var trailSurrogate=str.charCodeAt(++i);codeUnit=65536+((codeUnit&1023)<<10)|trailSurrogate&1023}HEAP32[outPtr>>2]=codeUnit;outPtr+=4;if(outPtr+4>endPtr)break}HEAP32[outPtr>>2]=0;return outPtr-startPtr}function lengthBytesUTF32(str){var len=0;for(var i=0;i=55296&&codeUnit<=57343)++i;len+=4}return len}function writeArrayToMemory(array,buffer){HEAP8.set(array,buffer)}function writeAsciiToMemory(str,buffer,dontAddNull){for(var i=0;i>0]=str.charCodeAt(i)}if(!dontAddNull)HEAP8[buffer>>0]=0}var WASM_PAGE_SIZE=65536;var buffer,HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;function updateGlobalBufferAndViews(buf){buffer=buf;Module["HEAP8"]=HEAP8=new Int8Array(buf);Module["HEAP16"]=HEAP16=new Int16Array(buf);Module["HEAP32"]=HEAP32=new Int32Array(buf);Module["HEAPU8"]=HEAPU8=new Uint8Array(buf);Module["HEAPU16"]=HEAPU16=new Uint16Array(buf);Module["HEAPU32"]=HEAPU32=new Uint32Array(buf);Module["HEAPF32"]=HEAPF32=new Float32Array(buf);Module["HEAPF64"]=HEAPF64=new Float64Array(buf)}var DYNAMIC_BASE=5280016,DYNAMICTOP_PTR=36976;var INITIAL_INITIAL_MEMORY=Module["INITIAL_MEMORY"]||16777216;if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{wasmMemory=new WebAssembly.Memory({"initial":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE,"maximum":INITIAL_INITIAL_MEMORY/WASM_PAGE_SIZE})}if(wasmMemory){buffer=wasmMemory.buffer}INITIAL_INITIAL_MEMORY=buffer.byteLength;updateGlobalBufferAndViews(buffer);HEAP32[DYNAMICTOP_PTR>>2]=DYNAMIC_BASE;function callRuntimeCallbacks(callbacks){while(callbacks.length>0){var callback=callbacks.shift();if(typeof callback=="function"){callback(Module);continue}var func=callback.func;if(typeof func==="number"){if(callback.arg===undefined){Module["dynCall_v"](func)}else{Module["dynCall_vi"](func,callback.arg)}}else{func(callback.arg===undefined?null:callback.arg)}}}var __ATPRERUN__=[];var __ATINIT__=[];var __ATMAIN__=[];var __ATPOSTRUN__=[];var runtimeInitialized=false;function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;if(!Module["noFSInit"]&&!FS.init.initialized)FS.init();TTY.init();callRuntimeCallbacks(__ATINIT__)}function preMain(){FS.ignorePermissions=false;callRuntimeCallbacks(__ATMAIN__)}function postRun(){if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var Math_abs=Math.abs;var Math_ceil=Math.ceil;var Math_floor=Math.floor;var Math_min=Math.min;var runDependencies=0;var runDependencyWatcher=null;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}}function removeRunDependency(id){runDependencies--;if(Module["monitorRunDependencies"]){Module["monitorRunDependencies"](runDependencies)}if(runDependencies==0){if(runDependencyWatcher!==null){clearInterval(runDependencyWatcher);runDependencyWatcher=null}if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}Module["preloadedImages"]={};Module["preloadedAudios"]={};function abort(what){if(Module["onAbort"]){Module["onAbort"](what)}what+="";out(what);err(what);ABORT=true;EXITSTATUS=1;what="abort("+what+"). Build with -s ASSERTIONS=1 for more info.";throw new WebAssembly.RuntimeError(what)}function hasPrefix(str,prefix){return String.prototype.startsWith?str.startsWith(prefix):str.indexOf(prefix)===0}var dataURIPrefix="data:application/octet-stream;base64,";function isDataURI(filename){return hasPrefix(filename,dataURIPrefix)}var fileURIPrefix="file://";function isFileURI(filename){return hasPrefix(filename,fileURIPrefix)}var wasmBinaryFile="native.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinary(){try{if(wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(wasmBinaryFile)}else{throw"both async and sync fetching of the wasm failed"}}catch(err){abort(err)}}function getBinaryPromise(){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)&&typeof fetch==="function"&&!isFileURI(wasmBinaryFile)){return fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){if(!response["ok"]){throw"failed to load wasm binary file at '"+wasmBinaryFile+"'"}return response["arrayBuffer"]()}).catch(function(){return getBinary()})}return new Promise(function(resolve,reject){resolve(getBinary())})}function createWasm(){var info={"a":asmLibraryArg};function receiveInstance(instance,module){var exports=instance.exports;Module["asm"]=exports;removeRunDependency("wasm-instantiate")}addRunDependency("wasm-instantiate");function receiveInstantiatedSource(output){receiveInstance(output["instance"])}function instantiateArrayBuffer(receiver){return getBinaryPromise().then(function(binary){return WebAssembly.instantiate(binary,info)}).then(receiver,function(reason){err("failed to asynchronously prepare wasm: "+reason);abort(reason)})}function instantiateAsync(){if(!wasmBinary&&typeof WebAssembly.instantiateStreaming==="function"&&!isDataURI(wasmBinaryFile)&&!isFileURI(wasmBinaryFile)&&typeof fetch==="function"){fetch(wasmBinaryFile,{credentials:"same-origin"}).then(function(response){var result=WebAssembly.instantiateStreaming(response,info);return result.then(receiveInstantiatedSource,function(reason){err("wasm streaming compile failed: "+reason);err("falling back to ArrayBuffer instantiation");instantiateArrayBuffer(receiveInstantiatedSource)})})}else{return instantiateArrayBuffer(receiveInstantiatedSource)}}if(Module["instantiateWasm"]){try{var exports=Module["instantiateWasm"](info,receiveInstance);return exports}catch(e){err("Module.instantiateWasm callback failed with error: "+e);return false}}instantiateAsync();return{}}var tempDouble;var tempI64;__ATINIT__.push({func:function(){___wasm_call_ctors()}});function demangle(func){return func}function demangleAll(text){var regex=/\b_Z[\w\d_]+/g;return text.replace(regex,function(x){var y=demangle(x);return x===y?x:y+" ["+x+"]"})}function jsStackTrace(){var err=new Error;if(!err.stack){try{throw new Error}catch(e){err=e}if(!err.stack){return"(no stack trace available)"}}return err.stack.toString()}function stackTrace(){var js=jsStackTrace();if(Module["extraStackTrace"])js+="\n"+Module["extraStackTrace"]();return demangleAll(js)}function ___assert_fail(condition,filename,line,func){abort("Assertion failed: "+UTF8ToString(condition)+", at: "+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])}function ___cxa_allocate_exception(size){return _malloc(size)}var ___exception_infos={};var ___exception_last=0;function __ZSt18uncaught_exceptionv(){return __ZSt18uncaught_exceptionv.uncaught_exceptions>0}function ___cxa_throw(ptr,type,destructor){___exception_infos[ptr]={ptr:ptr,adjusted:[ptr],type:type,destructor:destructor,refcount:0,caught:false,rethrown:false};___exception_last=ptr;if(!("uncaught_exception"in __ZSt18uncaught_exceptionv)){__ZSt18uncaught_exceptionv.uncaught_exceptions=1}else{__ZSt18uncaught_exceptionv.uncaught_exceptions++}throw ptr}function setErrNo(value){HEAP32[___errno_location()>>2]=value;return value}function ___map_file(pathname,size){setErrNo(63);return-1}var PATH={splitPath:function(filename){var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:function(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:function(path){var isAbsolute=path.charAt(0)==="/",trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:function(path){var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:function(path){if(path==="/")return"/";var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},extname:function(path){return PATH.splitPath(path)[3]},join:function(){var paths=Array.prototype.slice.call(arguments,0);return PATH.normalize(paths.join("/"))},join2:function(l,r){return PATH.normalize(l+"/"+r)}};var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[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.charAt(0)==="/"}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(function(p){return!!p}),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:function(from,to){from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(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;i0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}tty.input=intArrayFromString(result,true)}return tty.input.shift()},put_char:function(tty,val){if(val===null||val===10){out(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}}},default_tty1_ops:{put_char:function(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},flush:function(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var MEMFS={ops_table:null,mount:function(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode:function(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){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,allocate:MEMFS.stream_ops.allocate,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.timestamp=Date.now();if(parent){parent.contents[name]=node}return node},getFileDataAsRegularArray:function(node){if(node.contents&&node.contents.subarray){var arr=[];for(var i=0;i=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);return},resizeFileStorage:function(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0;return}if(!node.contents||node.contents.subarray){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;return}if(!node.contents)node.contents=[];if(node.contents.length>newSize)node.contents.length=newSize;else while(node.contents.length=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+length8){throw new FS.ErrnoError(32)}var parts=PATH.normalizeArray(path.split("/").filter(function(p){return!!p}),false);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath:function(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?mount+"/"+path:mount+path}path=path?node.name+"/"+path:node.name;node=node.parent}},hashName:function(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode:function(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode:function(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:function(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}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:function(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode:function(node){FS.hashRemoveNode(node)},isRoot:function(node){return node===node.parent},isMountpoint:function(node){return!!node.mounted},isFile:function(mode){return(mode&61440)===32768},isDir:function(mode){return(mode&61440)===16384},isLink:function(mode){return(mode&61440)===40960},isChrdev:function(mode){return(mode&61440)===8192},isBlkdev:function(mode){return(mode&61440)===24576},isFIFO:function(mode){return(mode&61440)===4096},isSocket:function(mode){return(mode&49152)===49152},flagModes:{"r":0,"rs":1052672,"r+":2,"w":577,"wx":705,"xw":705,"w+":578,"wx+":706,"xw+":706,"a":1089,"ax":1217,"xa":1217,"a+":1090,"ax+":1218,"xa+":1218},modeStringToFlags:function(str){var flags=FS.flagModes[str];if(typeof flags==="undefined"){throw new Error("Unknown file open mode: "+str)}return flags},flagsToPermissionString:function(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions:function(node,perms){if(FS.ignorePermissions){return 0}if(perms.indexOf("r")!==-1&&!(node.mode&292)){return 2}else if(perms.indexOf("w")!==-1&&!(node.mode&146)){return 2}else if(perms.indexOf("x")!==-1&&!(node.mode&73)){return 2}return 0},mayLookup:function(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate:function(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete:function(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:function(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){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd:function(fd_start,fd_end){fd_start=fd_start||0;fd_end=fd_end||FS.MAX_OPEN_FDS;for(var fd=fd_start;fd<=fd_end;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStream:function(fd){return FS.streams[fd]},createStream:function(stream,fd_start,fd_end){if(!FS.FSStream){FS.FSStream=function(){};FS.FSStream.prototype={object:{get:function(){return this.node},set:function(val){this.node=val}},isRead:{get:function(){return(this.flags&2097155)!==1}},isWrite:{get:function(){return(this.flags&2097155)!==0}},isAppend:{get:function(){return this.flags&1024}}}}var newStream=new FS.FSStream;for(var p in stream){newStream[p]=stream[p]}stream=newStream;var fd=FS.nextfd(fd_start,fd_end);stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream:function(fd){FS.streams[fd]=null},chrdev_stream_ops:{open:function(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek:function(){throw new FS.ErrnoError(70)}},major:function(dev){return dev>>8},minor:function(dev){return dev&255},makedev:function(ma,mi){return ma<<8|mi},registerDevice:function(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:function(dev){return FS.devices[dev]},getMounts:function(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs:function(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(function(mount){if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount:function(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:type,opts:opts,mountpoint: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:function(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(function(hash){var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.indexOf(current.mount)!==-1){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup:function(parent,name){return parent.node_ops.lookup(parent,name)},mknod:function(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}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)},create:function(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir:function(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree:function(path,mode){var dirs=path.split("/");var d="";for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_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=function(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);if(typeof Uint8Array!="undefined")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||[])}else{return intArrayFromString(xhr.responseText||"",true)}};var lazyArray=this;lazyArray.setDataGetter(function(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};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;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url: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(function(key){var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29)}return fn.apply(null,arguments)}});stream_ops.read=function stream_ops_read(stream,buffer,offset,length,position){if(!FS.forceLoadFile(node)){throw new FS.ErrnoError(29)}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>2]=stat.dev;HEAP32[buf+4>>2]=0;HEAP32[buf+8>>2]=stat.ino;HEAP32[buf+12>>2]=stat.mode;HEAP32[buf+16>>2]=stat.nlink;HEAP32[buf+20>>2]=stat.uid;HEAP32[buf+24>>2]=stat.gid;HEAP32[buf+28>>2]=stat.rdev;HEAP32[buf+32>>2]=0;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAP32[buf+48>>2]=4096;HEAP32[buf+52>>2]=stat.blocks;HEAP32[buf+56>>2]=stat.atime.getTime()/1e3|0;HEAP32[buf+60>>2]=0;HEAP32[buf+64>>2]=stat.mtime.getTime()/1e3|0;HEAP32[buf+68>>2]=0;HEAP32[buf+72>>2]=stat.ctime.getTime()/1e3|0;HEAP32[buf+76>>2]=0;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math_abs(tempDouble)>=1?tempDouble>0?(Math_min(+Math_floor(tempDouble/4294967296),4294967295)|0)>>>0:~~+Math_ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+80>>2]=tempI64[0],HEAP32[buf+84>>2]=tempI64[1];return 0},doMsync:function(addr,stream,len,flags,offset){var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},doMkdir:function(path,mode){path=PATH.normalize(path);if(path[path.length-1]==="/")path=path.substr(0,path.length-1);FS.mkdir(path,mode,0);return 0},doMknod:function(path,mode,dev){switch(mode&61440){case 32768:case 8192:case 24576:case 4096:case 49152:break;default:return-28}FS.mknod(path,mode,dev);return 0},doReadlink:function(path,buf,bufsize){if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len},doAccess:function(path,amode){if(amode&~7){return-28}var node;var lookup=FS.lookupPath(path,{follow:true});node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0},doDup:function(path,flags,suggestFD){var suggest=FS.getStream(suggestFD);if(suggest)FS.close(suggest);return FS.open(path,flags,0,suggestFD,suggestFD).fd},doReadv:function(stream,iov,iovcnt,offset){var ret=0;for(var i=0;i>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2];var len=HEAP32[iov+(i*8+4)>>2];var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr}return ret},varargs:undefined,get:function(){SYSCALLS.varargs+=4;var ret=HEAP32[SYSCALLS.varargs-4>>2];return ret},getStr:function(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD:function(fd){var stream=FS.getStream(fd);if(!stream)throw new FS.ErrnoError(8);return stream},get64:function(low,high){return low}};function syscallMunmap(addr,len){if((addr|0)===-1||len===0){return-28}var info=SYSCALLS.mappings[addr];if(!info)return 0;if(len===info.len){var stream=FS.getStream(info.fd);if(info.prot&2){SYSCALLS.doMsync(addr,stream,len,info.flags,info.offset)}FS.munmap(stream);SYSCALLS.mappings[addr]=null;if(info.allocated){_free(info.malloc)}}return 0}function ___sys_munmap(addr,len){try{return syscallMunmap(addr,len)}catch(e){if(typeof FS==="undefined"||!(e instanceof FS.ErrnoError))abort(e);return-e.errno}}function getShiftFromSize(size){switch(size){case 1:return 0;case 2:return 1;case 4:return 2;case 8:return 3;default:throw new TypeError("Unknown type size: "+size)}}function embind_init_charCodes(){var codes=new Array(256);for(var i=0;i<256;++i){codes[i]=String.fromCharCode(i)}embind_charCodes=codes}var embind_charCodes=undefined;function readLatin1String(ptr){var ret="";var c=ptr;while(HEAPU8[c]){ret+=embind_charCodes[HEAPU8[c++]]}return ret}var awaitingDependencies={};var registeredTypes={};var typeDependencies={};var char_0=48;var char_9=57;function makeLegalFunctionName(name){if(undefined===name){return"_unknown"}name=name.replace(/[^a-zA-Z0-9_]/g,"$");var f=name.charCodeAt(0);if(f>=char_0&&f<=char_9){return"_"+name}else{return name}}function createNamedFunction(name,body){name=makeLegalFunctionName(name);return new Function("body","return function "+name+"() {\n"+' "use strict";'+" return body.apply(this, arguments);\n"+"};\n")(body)}function extendError(baseErrorType,errorName){var errorClass=createNamedFunction(errorName,function(message){this.name=errorName;this.message=message;var stack=new Error(message).stack;if(stack!==undefined){this.stack=this.toString()+"\n"+stack.replace(/^Error(:[^\n]*)?\n/,"")}});errorClass.prototype=Object.create(baseErrorType.prototype);errorClass.prototype.constructor=errorClass;errorClass.prototype.toString=function(){if(this.message===undefined){return this.name}else{return this.name+": "+this.message}};return errorClass}var BindingError=undefined;function throwBindingError(message){throw new BindingError(message)}var InternalError=undefined;function throwInternalError(message){throw new InternalError(message)}function whenDependentTypesAreResolved(myTypes,dependentTypes,getTypeConverters){myTypes.forEach(function(type){typeDependencies[type]=dependentTypes});function onComplete(typeConverters){var myTypeConverters=getTypeConverters(typeConverters);if(myTypeConverters.length!==myTypes.length){throwInternalError("Mismatched type converter count")}for(var i=0;i>shift])},destructorFunction:null})}var emval_free_list=[];var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle){if(handle>4&&0===--emval_handle_array[handle].refcount){emval_handle_array[handle]=undefined;emval_free_list.push(handle)}}function count_emval_handles(){var count=0;for(var i=5;i>2])}function __embind_register_emval(rawType,name){name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(handle){var rv=emval_handle_array[handle].value;__emval_decref(handle);return rv},"toWireType":function(destructors,value){return __emval_register(value)},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:null})}function _embind_repr(v){if(v===null){return"null"}var t=typeof v;if(t==="object"||t==="array"||t==="function"){return v.toString()}else{return""+v}}function floatReadValueFromPointer(name,shift){switch(shift){case 2:return function(pointer){return this["fromWireType"](HEAPF32[pointer>>2])};case 3:return function(pointer){return this["fromWireType"](HEAPF64[pointer>>3])};default:throw new TypeError("Unknown float type: "+name)}}function __embind_register_float(rawType,name,size){var shift=getShiftFromSize(size);name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":function(value){return value},"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}return value},"argPackAdvance":8,"readValueFromPointer":floatReadValueFromPointer(name,shift),destructorFunction:null})}function new_(constructor,argumentList){if(!(constructor instanceof Function)){throw new TypeError("new_ called with constructor type "+typeof constructor+" which is not a function")}var dummy=createNamedFunction(constructor.name||"unknownFunctionName",function(){});dummy.prototype=constructor.prototype;var obj=new dummy;var r=constructor.apply(obj,argumentList);return r instanceof Object?r:obj}function runDestructors(destructors){while(destructors.length){var ptr=destructors.pop();var del=destructors.pop();del(ptr)}}function craftInvokerFunction(humanName,argTypes,classType,cppInvokerFunc,cppTargetFunc){var argCount=argTypes.length;if(argCount<2){throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!")}var isClassMethodFunc=argTypes[1]!==null&&classType!==null;var needsDestructorStack=false;for(var i=1;i0?", ":"")+argsListWired}invokerFnBody+=(returns?"var rv = ":"")+"invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n";if(needsDestructorStack){invokerFnBody+="runDestructors(destructors);\n"}else{for(var i=isClassMethodFunc?1:2;i>2)+i])}return array}function replacePublicSymbol(name,value,numArguments){if(!Module.hasOwnProperty(name)){throwInternalError("Replacing nonexistant public symbol")}if(undefined!==Module[name].overloadTable&&undefined!==numArguments){Module[name].overloadTable[numArguments]=value}else{Module[name]=value;Module[name].argCount=numArguments}}function embind__requireFunction(signature,rawFunction){signature=readLatin1String(signature);function makeDynCaller(dynCall){var args=[];for(var i=1;i>1]}:function readU16FromPointer(pointer){return HEAPU16[pointer>>1]};case 2:return signed?function readS32FromPointer(pointer){return HEAP32[pointer>>2]}:function readU32FromPointer(pointer){return HEAPU32[pointer>>2]};default:throw new TypeError("Unknown integer type: "+name)}}function __embind_register_integer(primitiveType,name,size,minRange,maxRange){name=readLatin1String(name);if(maxRange===-1){maxRange=4294967295}var shift=getShiftFromSize(size);var fromWireType=function(value){return value};if(minRange===0){var bitshift=32-8*size;fromWireType=function(value){return value<>>bitshift}}var isUnsignedType=name.indexOf("unsigned")!=-1;registerType(primitiveType,{name:name,"fromWireType":fromWireType,"toWireType":function(destructors,value){if(typeof value!=="number"&&typeof value!=="boolean"){throw new TypeError('Cannot convert "'+_embind_repr(value)+'" to '+this.name)}if(valuemaxRange){throw new TypeError('Passing a number "'+_embind_repr(value)+'" from JS side to C/C++ side to an argument of type "'+name+'", which is outside the valid range ['+minRange+", "+maxRange+"]!")}return isUnsignedType?value>>>0:value|0},"argPackAdvance":8,"readValueFromPointer":integerReadValueFromPointer(name,shift,minRange!==0),destructorFunction:null})}function __embind_register_memory_view(rawType,dataTypeIndex,name){var typeMapping=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];var TA=typeMapping[dataTypeIndex];function decodeMemoryView(handle){handle=handle>>2;var heap=HEAPU32;var size=heap[handle];var data=heap[handle+1];return new TA(buffer,data,size)}name=readLatin1String(name);registerType(rawType,{name:name,"fromWireType":decodeMemoryView,"argPackAdvance":8,"readValueFromPointer":decodeMemoryView},{ignoreDuplicateRegistrations:true})}function __embind_register_std_string(rawType,name){name=readLatin1String(name);var stdStringIsUTF8=name==="std::string";registerType(rawType,{name:name,"fromWireType":function(value){var length=HEAPU32[value>>2];var str;if(stdStringIsUTF8){var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i;if(HEAPU8[currentBytePtr]==0||i==length){var maxRead=currentBytePtr-decodeStartPtr;var stringSegment=UTF8ToString(decodeStartPtr,maxRead);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+1}}}else{var a=new Array(length);for(var i=0;i>2]=length;if(stdStringIsUTF8&&valueIsOfTypeString){stringToUTF8(value,ptr+4,length+1)}else{if(valueIsOfTypeString){for(var i=0;i255){_free(ptr);throwBindingError("String has UTF-16 code units that do not fit in 8 bits")}HEAPU8[ptr+4+i]=charCode}}else{for(var i=0;i>2];var HEAP=getHeap();var str;var decodeStartPtr=value+4;for(var i=0;i<=length;++i){var currentBytePtr=value+4+i*charSize;if(HEAP[currentBytePtr>>shift]==0||i==length){var maxReadBytes=currentBytePtr-decodeStartPtr;var stringSegment=decodeString(decodeStartPtr,maxReadBytes);if(str===undefined){str=stringSegment}else{str+=String.fromCharCode(0);str+=stringSegment}decodeStartPtr=currentBytePtr+charSize}}_free(value);return str},"toWireType":function(destructors,value){if(!(typeof value==="string")){throwBindingError("Cannot pass non-string to C++ string type "+name)}var length=lengthBytesUTF(value);var ptr=_malloc(4+length+charSize);HEAPU32[ptr>>2]=length>>shift;encodeString(value,ptr+4,length+charSize);if(destructors!==null){destructors.push(_free,ptr)}return ptr},"argPackAdvance":8,"readValueFromPointer":simpleReadValueFromPointer,destructorFunction:function(ptr){_free(ptr)}})}function __embind_register_void(rawType,name){name=readLatin1String(name);registerType(rawType,{isVoid:true,name:name,"argPackAdvance":0,"fromWireType":function(){return undefined},"toWireType":function(destructors,o){return undefined}})}function _abort(){abort()}function _emscripten_memcpy_big(dest,src,num){HEAPU8.copyWithin(dest,src,src+num)}function abortOnCannotGrowMemory(requestedSize){abort("OOM")}function _emscripten_resize_heap(requestedSize){requestedSize=requestedSize>>>0;abortOnCannotGrowMemory(requestedSize)}var ENV={};function __getExecutableName(){return thisProgram||"./this.program"}function getEnvStrings(){if(!getEnvStrings.strings){var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":(typeof navigator==="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8","_":__getExecutableName()};for(var x in ENV){env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(x+"="+env[x])}getEnvStrings.strings=strings}return getEnvStrings.strings}function _environ_get(__environ,environ_buf){var bufSize=0;getEnvStrings().forEach(function(string,i){var ptr=environ_buf+bufSize;HEAP32[__environ+i*4>>2]=ptr;writeAsciiToMemory(string,ptr);bufSize+=string.length+1});return 0}function _environ_sizes_get(penviron_count,penviron_buf_size){var strings=getEnvStrings();HEAP32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(function(string){bufSize+=string.length+1});HEAP32[penviron_buf_size>>2]=bufSize;return 0}function __isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function __arraySum(array,index){var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum}var __MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var __MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];function __addDays(date,days){var newDate=new Date(date.getTime());while(days>0){var leap=__isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate}function _strftime(s,maxsize,format,tm){var tm_zone=HEAP32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value==="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}else{return thisDate.getFullYear()}}else{return thisDate.getFullYear()-1}}var EXPANSION_RULES_2={"%a":function(date){return WEEKDAYS[date.tm_wday].substring(0,3)},"%A":function(date){return WEEKDAYS[date.tm_wday]},"%b":function(date){return MONTHS[date.tm_mon].substring(0,3)},"%B":function(date){return MONTHS[date.tm_mon]},"%C":function(date){var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":function(date){return leadingNulls(date.tm_mday,2)},"%e":function(date){return leadingSomething(date.tm_mday,2," ")},"%g":function(date){return getWeekBasedYear(date).toString().substring(2)},"%G":function(date){return getWeekBasedYear(date)},"%H":function(date){return leadingNulls(date.tm_hour,2)},"%I":function(date){var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":function(date){return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900)?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,date.tm_mon-1),3)},"%m":function(date){return leadingNulls(date.tm_mon+1,2)},"%M":function(date){return leadingNulls(date.tm_min,2)},"%n":function(){return"\n"},"%p":function(date){if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}else{return"PM"}},"%S":function(date){return leadingNulls(date.tm_sec,2)},"%t":function(){return"\t"},"%u":function(date){return date.tm_wday||7},"%U":function(date){var janFirst=new Date(date.tm_year+1900,0,1);var firstSunday=janFirst.getDay()===0?janFirst:__addDays(janFirst,7-janFirst.getDay());var endDate=new Date(date.tm_year+1900,date.tm_mon,date.tm_mday);if(compareByDay(firstSunday,endDate)<0){var februaryFirstUntilEndMonth=__arraySum(__isLeapYear(endDate.getFullYear())?__MONTH_DAYS_LEAP:__MONTH_DAYS_REGULAR,endDate.getMonth()-1)-31;var firstSundayUntilEndJanuary=31-firstSunday.getDate();var days=firstSundayUntilEndJanuary+februaryFirstUntilEndMonth+endDate.getDate();return leadingNulls(Math.ceil(days/7),2)}return compareByDay(firstSunday,janFirst)===0?"01":"00"},"%V":function(date){var janFourthThisYear=new Date(date.tm_year+1900,0,4);var janFourthNextYear=new Date(date.tm_year+1901,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);var endDate=__addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);if(compareByDay(endDate,firstWeekStartThisYear)<0){return"53"}if(compareByDay(firstWeekStartNextYear,endDate)<=0){return"01"}var daysDifference;if(firstWeekStartThisYear.getFullYear()=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":function(date){return date.tm_zone},"%%":function(){return"%"}};for(var rule in EXPANSION_RULES_2){if(pattern.indexOf(rule)>=0){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1}function _strftime_l(s,maxsize,format,tm){return _strftime(s,maxsize,format,tm)}var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.staticInit();embind_init_charCodes();BindingError=Module["BindingError"]=extendError(Error,"BindingError");InternalError=Module["InternalError"]=extendError(Error,"InternalError");init_emval();UnboundTypeError=Module["UnboundTypeError"]=extendError(Error,"UnboundTypeError");function 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 asmLibraryArg={"b":___assert_fail,"e":___cxa_allocate_exception,"d":___cxa_throw,"q":___map_file,"p":___sys_munmap,"k":__embind_register_bool,"j":__embind_register_emval,"i":__embind_register_float,"t":__embind_register_function,"c":__embind_register_integer,"a":__embind_register_memory_view,"g":__embind_register_std_string,"f":__embind_register_std_wstring,"l":__embind_register_void,"h":_abort,"m":_emscripten_memcpy_big,"n":_emscripten_resize_heap,"r":_environ_get,"s":_environ_sizes_get,"memory":wasmMemory,"o":_strftime_l,"table":wasmTable};var asm=createWasm();Module["asm"]=asm;var ___wasm_call_ctors=Module["___wasm_call_ctors"]=function(){return(___wasm_call_ctors=Module["___wasm_call_ctors"]=Module["asm"]["u"]).apply(null,arguments)};var _malloc=Module["_malloc"]=function(){return(_malloc=Module["_malloc"]=Module["asm"]["v"]).apply(null,arguments)};var ___getTypeName=Module["___getTypeName"]=function(){return(___getTypeName=Module["___getTypeName"]=Module["asm"]["w"]).apply(null,arguments)};var ___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=function(){return(___embind_register_native_and_builtin_types=Module["___embind_register_native_and_builtin_types"]=Module["asm"]["x"]).apply(null,arguments)};var ___errno_location=Module["___errno_location"]=function(){return(___errno_location=Module["___errno_location"]=Module["asm"]["y"]).apply(null,arguments)};var _free=Module["_free"]=function(){return(_free=Module["_free"]=Module["asm"]["z"]).apply(null,arguments)};var dynCall_viiii=Module["dynCall_viiii"]=function(){return(dynCall_viiii=Module["dynCall_viiii"]=Module["asm"]["A"]).apply(null,arguments)};var dynCall_iiiiii=Module["dynCall_iiiiii"]=function(){return(dynCall_iiiiii=Module["dynCall_iiiiii"]=Module["asm"]["B"]).apply(null,arguments)};var dynCall_viiiiii=Module["dynCall_viiiiii"]=function(){return(dynCall_viiiiii=Module["dynCall_viiiiii"]=Module["asm"]["C"]).apply(null,arguments)};var dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=function(){return(dynCall_viiiiiiii=Module["dynCall_viiiiiiii"]=Module["asm"]["D"]).apply(null,arguments)};var dynCall_viiiiiii=Module["dynCall_viiiiiii"]=function(){return(dynCall_viiiiiii=Module["dynCall_viiiiiii"]=Module["asm"]["E"]).apply(null,arguments)};var dynCall_vi=Module["dynCall_vi"]=function(){return(dynCall_vi=Module["dynCall_vi"]=Module["asm"]["F"]).apply(null,arguments)};var dynCall_ii=Module["dynCall_ii"]=function(){return(dynCall_ii=Module["dynCall_ii"]=Module["asm"]["G"]).apply(null,arguments)};var dynCall_iiiii=Module["dynCall_iiiii"]=function(){return(dynCall_iiiii=Module["dynCall_iiiii"]=Module["asm"]["H"]).apply(null,arguments)};var dynCall_vii=Module["dynCall_vii"]=function(){return(dynCall_vii=Module["dynCall_vii"]=Module["asm"]["I"]).apply(null,arguments)};var dynCall_iiii=Module["dynCall_iiii"]=function(){return(dynCall_iiii=Module["dynCall_iiii"]=Module["asm"]["J"]).apply(null,arguments)};var dynCall_viijii=Module["dynCall_viijii"]=function(){return(dynCall_viijii=Module["dynCall_viijii"]=Module["asm"]["K"]).apply(null,arguments)};var dynCall_iii=Module["dynCall_iii"]=function(){return(dynCall_iii=Module["dynCall_iii"]=Module["asm"]["L"]).apply(null,arguments)};var dynCall_iiiiiii=Module["dynCall_iiiiiii"]=function(){return(dynCall_iiiiiii=Module["dynCall_iiiiiii"]=Module["asm"]["M"]).apply(null,arguments)};var dynCall_iidiiii=Module["dynCall_iidiiii"]=function(){return(dynCall_iidiiii=Module["dynCall_iidiiii"]=Module["asm"]["N"]).apply(null,arguments)};var dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=function(){return(dynCall_iiiiiiiii=Module["dynCall_iiiiiiiii"]=Module["asm"]["O"]).apply(null,arguments)};var dynCall_iiiiij=Module["dynCall_iiiiij"]=function(){return(dynCall_iiiiij=Module["dynCall_iiiiij"]=Module["asm"]["P"]).apply(null,arguments)};var dynCall_iiiiid=Module["dynCall_iiiiid"]=function(){return(dynCall_iiiiid=Module["dynCall_iiiiid"]=Module["asm"]["Q"]).apply(null,arguments)};var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=function(){return(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=Module["asm"]["R"]).apply(null,arguments)};var dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=function(){return(dynCall_iiiiiiii=Module["dynCall_iiiiiiii"]=Module["asm"]["S"]).apply(null,arguments)};var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=function(){return(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=Module["asm"]["T"]).apply(null,arguments)};var dynCall_v=Module["dynCall_v"]=function(){return(dynCall_v=Module["dynCall_v"]=Module["asm"]["U"]).apply(null,arguments)};var dynCall_viiiii=Module["dynCall_viiiii"]=function(){return(dynCall_viiiii=Module["dynCall_viiiii"]=Module["asm"]["V"]).apply(null,arguments)};Module["asm"]=asm;var calledRun;function ExitStatus(status){this.name="ExitStatus";this.message="Program terminated with exit("+status+")";this.status=status}dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(args){args=args||arguments_;if(runDependencies>0){return}preRun();if(runDependencies>0)return;function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}Module["run"]=run;if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}noExitRuntime=true;run(); diff --git a/docs/native.wasm b/docs/native.wasm index b939c7424ca46fde046afc74bac946d8957eb9eb..1270e5e818fb423966478aab130a2f5961fc2105 100644 GIT binary patch delta 61277 zcmb@v2Vhmj@;`oO_uP`)loNUgkef>jJ#?fW6ct4Q!TK!dvjz+Jz-Lboq)33k0XFoY zfQTT`pf@UNKtPlhAR?WBs2~VI0qOidv*)HEuY7<1N6Go@?#$NN-PzsQ&7^Zxw`En! zc}b+a>5<>~*7#g5VF+@&JQ3s(M5400lFuc8g*Sr8B>>#+2z>4LM4L(;AGw>84|IZj zk<~;s!#*ym4T$s^hG9myeFFY5o|xEJ!!O$TncZi&d=cc1B#%4NLx@h2;Yo_bKcl+z zRYK}6H=;w52FMBI1{qPUjVSvrnNm4GZXqIl6hJ6NMMgzM8uoOVXn!i}r;#s)-0+Ve z!&NQb12&4RL~g?+ToI8b5gCTt?eQ3HGych9JQMTJ(b<$iSQujF;R6J zRTd(OTqtymOSn;0Xnl`S)x&k*0Tu$KiSYA}2>VfY%``99BPt62`HQxT;(9}qN<@PS zWN#P#uwY33YeX^D>!uf7#|6FQTI;5lT~*0)z3-zQuEjpO-u0f3Zg4H~QBPOe zLLc4eTHvFbT=RW&v+Ern^>V%Kqg!0_d~~Zz`KY%m+ef##=KAP%*Bl@9an1HoU)MAr z^>fYi(H*X-KI-q9;iCbrDL%T>HQh&dxw3o_QzOY`k$i>%$<^{x`GH(4-+bIbdUD_;J)bD z?k@I>_Kos&oFx<9^o{h5@D2A3NJzQ*PZnvPE8ffAOWuS8I4^oHcsnMX_nz~f_5SHS z<2?=6DeoWN-@PZj$GyM7bXdzn)k5x7dU_R{^b49d%(NTyBDrK-re3^-ksir z9p3o(AH4C~z2C!kn|F)1z`NPI$-5D*4c_(M@4Vl7*Ll~%wZ^;J`?YtK_e<{=a2=o` zTH*cN`XM1OPXL@IN zr+bxmns=&qir4l|hG>=iy&y8Z6TK6>FU61dW_T}%aR__MI~JT{yraBtdPjOkc;A3) zxHsK<#dFzn$#cPjdhnd{ob~+aIpaAE*D22*p5HwuJVl=Uo{nh=dp&zRyFI%+TRa5_ z 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

+$eTP-3R$#B^0+vT~=AF>S^}F%`E;?=D5L*_3ul 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�*O_&sjc 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 a@%g)im6ONsayT6mmOui*t>umn9sdJ> capture_scope_stack; size_t capture_scope_stack_size = 0; + std::vector cut_stack; + const size_t def_count; const bool enablePackratParsing; std::vector cache_registered; @@ -971,24 +973,33 @@ public: class PrioritizedChoice : public Ope { public: template - PrioritizedChoice(const Args &... args) - : opes_{static_cast>(args)...} {} + PrioritizedChoice(bool for_label, const Args &... args) + : opes_{static_cast>(args)...}, + for_label_(for_label) {} PrioritizedChoice(const std::vector> &opes) : opes_(opes) {} PrioritizedChoice(std::vector> &&opes) : opes_(opes) {} size_t parse_core(const char *s, size_t n, SemanticValues &vs, Context &c, std::any &dt) const override { + size_t len = static_cast(-1); + + if (!for_label_) { c.cut_stack.push_back(false); } + size_t id = 0; for (const auto &ope : opes_) { + if (!c.cut_stack.empty()) { c.cut_stack.back() = false; } + auto &chldsv = c.push(); c.push_capture_scope(); + auto se = scope_exit([&]() { c.pop(); c.pop_capture_scope(); }); - auto len = ope->parse(s, n, chldsv, c, dt); + len = ope->parse(s, n, chldsv, c, dt); + if (success(len)) { if (!chldsv.empty()) { for (size_t i = 0; i < chldsv.size(); i++) { @@ -1008,14 +1019,18 @@ public: vs.tokens.emplace_back(std::move(chldsv.tokens[i])); } } - c.shift_capture_values(); - return len; + break; + } else if (!c.cut_stack.empty() && c.cut_stack.back()) { + break; } id++; } - return static_cast(-1); + + if (!for_label_) { c.cut_stack.pop_back(); } + + return len; } void accept(Visitor &v) override; @@ -1023,6 +1038,7 @@ public: size_t size() const { return opes_.size(); } std::vector> opes_; + bool for_label_ = false; }; class Repetition : public Ope { @@ -1501,6 +1517,17 @@ public: std::shared_ptr ope_; }; +class Cut : public Ope, public std::enable_shared_from_this { +public: + size_t parse_core(const char * /*s*/, size_t /*n*/, SemanticValues & /*vs*/, + Context &c, std::any & /*dt*/) const override { + c.cut_stack.back() = true; + return 0; + } + + void accept(Visitor &v) override; +}; + /* * Factories */ @@ -1510,7 +1537,12 @@ template std::shared_ptr seq(Args &&... args) { template std::shared_ptr cho(Args &&... args) { return std::make_shared( - static_cast>(args)...); + false, static_cast>(args)...); +} + +template std::shared_ptr cho4label_(Args &&... args) { + return std::make_shared( + true, static_cast>(args)...); } inline std::shared_ptr zom(const std::shared_ptr &ope) { @@ -1623,6 +1655,8 @@ inline std::shared_ptr rec(const std::shared_ptr &ope) { return std::make_shared(ope); } +inline std::shared_ptr cut() { return std::make_shared(); } + /* * Visitor */ @@ -1650,6 +1684,7 @@ struct Ope::Visitor { virtual void visit(BackReference &) {} virtual void visit(PrecedenceClimbing &) {} virtual void visit(Recovery &) {} + virtual void visit(Cut &) {} }; struct IsReference : public Ope::Visitor { @@ -1688,6 +1723,7 @@ struct TraceOpeName : public Ope::Visitor { void visit(BackReference &) override { name_ = "BackReference"; } void visit(PrecedenceClimbing &) override { name_ = "PrecedenceClimbing"; } void visit(Recovery &) override { name_ = "Recovery"; } + void visit(Cut &) override { name_ = "Cut"; } static std::string get(Ope &ope) { TraceOpeName vis; @@ -1853,6 +1889,7 @@ struct DetectLeftRecursion : public Ope::Visitor { void visit(BackReference &) override { done_ = true; } void visit(PrecedenceClimbing &ope) override { ope.atom_->accept(*this); } void visit(Recovery &ope) override { ope.ope_->accept(*this); } + void visit(Cut &) override { done_ = true; } const char *error_s = nullptr; @@ -2119,6 +2156,7 @@ struct FindReference : public Ope::Visitor { ope.ope_->accept(*this); found_ope = rec(found_ope); } + void visit(Cut &ope) override { found_ope = ope.shared_from_this(); } std::shared_ptr found_ope; @@ -2516,10 +2554,12 @@ inline size_t Holder::parse_core(const char *s, size_t n, SemanticValues &vs, try { a_val = reduce(chldsv, dt); } catch (const parse_error &e) { - if (e.what()) { - if (c.error_info.message_pos < s) { - c.error_info.message_pos = s; - c.error_info.message = e.what(); + if (c.log) { + if (e.what()) { + if (c.error_info.message_pos < s) { + c.error_info.message_pos = s; + c.error_info.message = e.what(); + } } } len = static_cast(-1); @@ -2696,31 +2736,49 @@ inline size_t PrecedenceClimbing::parse_expression(const char *s, size_t n, inline size_t Recovery::parse_core(const char *s, size_t n, SemanticValues & /*vs*/, Context &c, std::any & /*dt*/) const { - auto save_log = c.log; - c.log = nullptr; - const auto &rule = dynamic_cast(*ope_); - SemanticValues dummy_vs; - std::any dummy_dt; - auto len = rule.parse(s, n, dummy_vs, c, dummy_dt); + // Custom error message + if (c.log) { + auto label = dynamic_cast(rule.args_[0].get()); + if (label) { + if (!label->rule_->error_message.empty()) { + c.error_info.message_pos = c.error_info.error_pos; + c.error_info.message = label->rule_->error_message; + } + } + } - c.log = save_log; + // Recovery + size_t len = static_cast(-1); + { + auto save_log = c.log; + c.log = nullptr; + auto se = scope_exit([&]() { c.log = save_log; }); + + SemanticValues dummy_vs; + std::any dummy_dt; + + len = rule.parse(s, n, dummy_vs, c, dummy_dt); + } if (success(len)) { c.recovered = true; + if (c.log) { - auto label = dynamic_cast(rule.args_[0].get()); - if (label) { - if (!label->rule_->error_message.empty()) { - c.error_info.message_pos = c.error_info.error_pos; - c.error_info.message = label->rule_->error_message; - } - } c.error_info.output_log(c.log, c.s, c.l); + c.error_info.clear(); + } + } + + // Cut + if (!c.cut_stack.empty()) { + c.cut_stack.back() = true; + + if (c.cut_stack.size() == 1) { + // TODO: Remove unneeded entries in packrat memoise table } } - c.error_info.clear(); return len; } @@ -2747,6 +2805,7 @@ inline void Whitespace::accept(Visitor &v) { v.visit(*this); } inline void BackReference::accept(Visitor &v) { v.visit(*this); } inline void PrecedenceClimbing::accept(Visitor &v) { v.visit(*this); } inline void Recovery::accept(Visitor &v) { v.visit(*this); } +inline void Cut::accept(Visitor &v) { v.visit(*this); } inline void AssignIDToDefinition::visit(Holder &ope) { auto p = static_cast(ope.outer_); @@ -2947,10 +3006,10 @@ private: seq(g["Ignore"], g["Identifier"], g["LEFTARROW"], g["Expression"], opt(g["Instruction"]))); g["Expression"] <= seq(g["Sequence"], zom(seq(g["SLASH"], g["Sequence"]))); - g["Sequence"] <= zom(g["Prefix"]); + g["Sequence"] <= zom(cho(g["CUT"], g["Prefix"])); g["Prefix"] <= seq(opt(cho(g["AND"], g["NOT"])), g["SuffixWithLabel"]); g["SuffixWithLabel"] <= - seq(g["Suffix"], opt(seq(g["HAT"], g["Identifier"]))); + seq(g["Suffix"], opt(seq(g["LABEL"], g["Identifier"]))); g["Suffix"] <= seq(g["Primary"], opt(g["Loop"])); g["Loop"] <= cho(g["QUESTION"], g["STAR"], g["PLUS"], g["Repetition"]); g["Primary"] <= @@ -3023,7 +3082,6 @@ private: ~g["PIPE"] <= seq(chr('|'), g["Spacing"]); g["AND"] <= seq(chr('&'), g["Spacing"]); g["NOT"] <= seq(chr('!'), g["Spacing"]); - ~g["HAT"] <= seq(chr('^'), g["Spacing"]); g["QUESTION"] <= seq(chr('?'), g["Spacing"]); g["STAR"] <= seq(chr('*'), g["Spacing"]); g["PLUS"] <= seq(chr('+'), g["Spacing"]); @@ -3031,6 +3089,9 @@ private: ~g["CLOSE"] <= seq(chr(')'), g["Spacing"]); g["DOT"] <= seq(chr('.'), g["Spacing"]); + g["CUT"] <= seq(lit(u8"↑"), g["Spacing"]); + ~g["LABEL"] <= seq(cho(chr('^'), lit(u8"⇑")), g["Spacing"]); + ~g["Spacing"] <= zom(cho(g["Space"], g["Comment"])); g["Comment"] <= seq(chr('#'), zom(seq(npd(g["EndOfLine"]), dot())), g["EndOfLine"]); @@ -3193,7 +3254,7 @@ private: auto label = ref(*data.grammar, ident, vs.sv().data(), false, {}); auto recovery = rec(ref(*data.grammar, RECOVER_DEFINITION_NAME, vs.sv().data(), true, {label})); - return cho(ope, recovery); + return cho4label_(ope, recovery); } }; @@ -3363,6 +3424,8 @@ private: g["DOT"] = [](const SemanticValues & /*vs*/) { return dot(); }; + g["CUT"] = [](const SemanticValues & /*vs*/) { return cut(); }; + g["BeginCap"] = [](const SemanticValues &vs) { return vs.token(); }; g["BackRef"] = [&](const SemanticValues &vs) { diff --git a/test/test2.cc b/test/test2.cc index 1663a09..06cf814 100644 --- a/test/test2.cc +++ b/test/test2.cc @@ -1239,7 +1239,7 @@ R"(+ START TEST_CASE("Error recovery 2", "[error]") { parser pg(R"( - START <- ENTRY ((',' ENTRY) / %recover((!(',' / Space) .)+))* (_ / %recover((!'!.' .)+)) + START <- ENTRY ((',' ENTRY) / %recover((!(',' / Space) .)+))* (_ / %recover(.*)) ENTRY <- '[' ITEM (',' ITEM)* ']' ITEM <- WORD / NUM / %recover((!(',' / ']') .)+) NUM <- [0-9]+ ![a-z] @@ -1259,7 +1259,7 @@ TEST_CASE("Error recovery 2", "[error]") { R"(1:38: syntax error, unexpected 'ddd', expecting .)", R"(1:55: syntax error, unexpected ']', expecting .)", R"(1:58: syntax error, unexpected '\n', expecting .)", - R"(1:56: syntax error, unexpected ',', expecting .)", + R"(2:3: syntax error.)", }; size_t i = 0;