nadesiko3
Version:
Japanese Programming Language
1 lines • 68.5 kB
JavaScript
!function(){"use strict";var e={228:function(e,s){s.Z={version:"3.4.25",major:3,minor:4,patch:25}},297:function(e,s,n){n.d(s,{as:function(){return a},ih:function(){return u},k:function(){return t}});class t extends Error{constructor(e,s,n=void 0,t=void 0){const u=`${n||""}${void 0===t?"":`(${t+1}行目): `}`;super(`[${e}]${u}${s=s.replace(/『main__(.+?)』/g,"『$1』")}`),this.name="NakoError",this.type="NakoError",this.tag="["+e+"]",this.positionJa=u,this.msg=s}}class u extends t{static fromNode(e,s,n=void 0){if(!s)return new u(e,void 0,void 0,void 0,void 0);const t="number"==typeof s.startOffset?s.startOffset:void 0,a=n&&"number"==typeof n.endOffset?n.endOffset:"number"==typeof s.endOffset?s.endOffset:void 0;return new u(e,s.line,t,a,s.file)}constructor(e,s,n,t,u){super("文法エラー",e,u,s),this.type="NakoSyntaxError",this.file=u,this.line=s,this.startOffset=n,this.endOffset=t}}class a extends t{constructor(e,s){let n,u,o,i="unknown";"string"==typeof e?i=e:e instanceof a||e instanceof t?i=e.msg:e instanceof Error&&(i="Error"===e.name?e.message:`${e.name}: ${e.message}`),void 0===s?(n=void 0,u=void 0):(o=/^l(-?\d+):(.*)$/.exec(s))?(n=parseInt(o[1]),u=o[2]):(o=/^l(-?\d+)$/.exec(s))?(n=parseInt(o[1]),u="main.nako3"):(n=0,u=s),super("実行時エラー",i,u,n),this.type="NakoRuntimeError",this.lineNo=s,this.line=n,this.file=u}}},485:function(e,s,n){n.d(s,{Jc:function(){return u}});var t=n(297);class u{constructor(e){this.nakoFuncList={...e.getNakoFuncList()},this.nakoTestFuncs={},this.usedFuncSet=new Set,this.loopId=1,this.numAsyncFn=0,this.usedAsyncFn=!1,this.flagLoop=!1,this.__self=e,this.genMode="sync",this.lastLineNo=null,this.varslistSet=e.__varslist.map((e=>({isFunction:!1,names:new Set(Object.keys(e)),readonly:new Set}))),this.varsSet={isFunction:!1,names:new Set,readonly:new Set},this.varslistSet[2]=this.varsSet,this.speedMode={lineNumbers:0,implicitTypeCasting:0,invalidSore:0,forcePure:0},this.performanceMonitor={userFunction:0,systemFunction:0,systemFunctionBody:0,mumeiId:0},this.warnUndefinedVar=!0,this.constPools=[],this.constPoolsTemplate=[],this.warnUndefinedReturnUserFunc=1,this.warnUndefinedCallingUserFunc=1,this.warnUndefinedCallingSystemFunc=1,this.warnUndefinedCalledUserFuncArgs=1,this.debugOption=e.debugOption}static isValidIdentifier(e){return/^(?!(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$)[$A-Z_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc][$A-Z_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc0-9\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e4-\u08fe\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d02\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19b0-\u19c0\u19c8\u19c9\u19d0-\u19d9\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2-\u1cf4\u1dc0-\u1de6\u1dfc-\u1dff\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c4\ua8d0-\ua8d9\ua8e0-\ua8f1\ua900-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f]*$/.test(e)}convLineno(e,s=!1,n=0){if(this.speedMode.lineNumbers>0)return"";const t=e.line+n;let u;if(u="number"!=typeof e.line?"unknown":"string"!=typeof e.file?`l${t}`:`l${t}:${e.file}`,!s){if(u===this.lastLineNo)return"";this.lastLineNo=u}const a=JSON.stringify(u);let o="";return this.debugOption.useDebug&&(this.debugOption.messageAction&&(o+=`window.postMessage({action:'${this.debugOption.messageAction}',line: ${a}});`),t>=1&&(this.debugOption.waitTime>0&&(o+=`await __v0['秒待'](${this.debugOption.waitTime},__self);`),this.numAsyncFn+=1,this.usedAsyncFn=!0,o+=`await __v0['__DEBUG_BP_WAIT'](${t}, __self);`),o+="if(__v0.forceClose){return-1};"),`__v0.line=${a};`+o}varname(e){return 3===this.varslistSet.length?`__varslist[2][${JSON.stringify(e)}]`:u.isValidIdentifier(e)?e:`__vars[${JSON.stringify(e)}]`}static getFuncName(e){if(e.indexOf("__")>=0){const s=e.split("__");return`${s[0]}__${u.getFuncName(s[1])}`}let s=e.replace(/[ぁ-ん]+$/,"");return""===s&&(s=e),s}static convPrint(e){return`__print(${e});`}convRequire(e){const s=e.value;return this.convLineno(e,!1)+`__module['${s}'] = require('${s}');\n`}getDefFuncCode(e,s){let n="";n+=`const nakoVersion = { version: ${JSON.stringify(e.version)} }\n`,n+="const __self = self;\n",n+="self.__self = self;\n",n+="const __varslist = self.__varslist;\n",n+="const __module = self.__module;\n",n+="const __v0 = self.__v0 = self.__varslist[0];\n",n+="const __v1 = self.__v1 = self.__varslist[1];\n",n+="const __vars = self.__vars = self.__varslist[2];\n",n+=`const __modList = self.__modList = ${JSON.stringify(e.getModList())}\n`,n+="__v0.line = 0;\n",n+="__v0.forceClose = false;\n",n+=`__v0.useDebug = ${this.debugOption.useDebug};\n`,n+="self.constPools = "+JSON.stringify(this.constPools)+";\n",n+="self.constPoolsTemplate = "+JSON.stringify(this.constPoolsTemplate)+";\n";let t="";for(const e in this.nakoFuncList){const s=this.nakoFuncList[e].fn;t+=`//[DEF_FUNC name='${e}' asyncFn=${this.nakoFuncList[e].asyncFn?"true":"false"}]\nself.__varslist[1]["${e}"]=${s};\n;//[/DEF_FUNC name='${e}']\n`}if(""!==t&&(n+="__v0.line='関数の定義';\n"+t),s.isTest){let e="const __tests = [];\n";for(const s in this.nakoTestFuncs){e+=`${this.nakoTestFuncs[s].fn};\n;`}""!==e&&(n+="__v0.line='テストの定義';\n",n+=e+"\n")}return n}addPlugin(e){return this.__self.addPlugin(e)}addPluginObject(e,s){this.__self.addPluginObject(e,s)}addPluginFile(e,s,n){this.__self.addPluginFile(e,s,n)}addFunc(e,s,n){this.__self.addFunc(e,s,n)}getFunc(e){return this.__self.getFunc(e)}registerFunction(e){if("block"!==e.type)throw t.ih.fromNode("構文解析に失敗しています。構文は必ずblockが先頭になります",e);const s=[],n=e=>{if(!e.block)return;const t=e.block instanceof Array?e.block:[e.block];for(let e=0;e<t.length;e++){const u=t[e];if("def_func"===u.type){if(!u.name)throw new Error("[System Error] 関数の定義で関数名が指定されていない");const e=u.name.value;this.usedFuncSet.add(e),this.__self.__varslist[1][e]=function(){},this.varslistSet[1].names.add(e);const n=u.name.meta;this.nakoFuncList[e]={josi:n.josi,fn:()=>{},type:"func",asyncFn:u.asyncFn,isExport:u.isExport},s.push({name:e,node:u})}else if("speed_mode"===u.type){if(!u.block)continue;"block"===u.block.type?n(u.block):n(u)}else if("performance_monitor"===u.type){if(!u.block)continue;"block"===u.block.type?n(u.block):n(u)}}};n(e);const u=new Set;0===this.speedMode.invalidSore&&u.add("それ"),this.varsSet={isFunction:!1,names:u,readonly:new Set},this.varslistSet=this.__self.__varslist.map((e=>({isFunction:!1,names:new Set(Object.keys(e)),readonly:new Set}))),this.varslistSet[2]=this.varsSet}convGen(e,s){const n=this.convLineno(e,!1)+this._convGen(e,!0);return s.isTest?"":n}_convGen(e,s){if(!e)return"";let n="";if(e instanceof Array){for(let t=0;t<e.length;t++){const u=e[t];n+=this._convGen(u,s)}return n}if(null===e)return"null";if(void 0===e)return"undefined";if("object"!=typeof e)return""+e;switch(e.type){case"nop":break;case"block":if(!e.block)return n;const t=e.block instanceof Array?e.block:[e.block];for(let e=0;e<t.length;e++){const s=t[e];n+=this._convGen(s,!1)}break;case"comment":case"eol":n+=this.convComment(e);break;case"break":n+=this.convCheckLoop(e,"break");break;case"continue":n+=this.convCheckLoop(e,"continue");break;case"end":n+="__v0['終'](__self);";break;case"number":case"bigint":n+=e.value;break;case"string":n+=this.convString(e);break;case"def_local_var":n+=this.convDefLocalVar(e);break;case"def_local_varlist":n+=this.convDefLocalVarlist(e);break;case"let":n+=this.convLet(e);break;case"inc":n+=this.convInc(e);break;case"word":case"variable":n+=this.convGetVar(e);break;case"op":case"calc":n+=this.convOp(e);break;case"renbun":n+=this.convRenbun(e);break;case"not":n+="(("+this._convGen(e.value,!0)+")?false:true)";break;case"func":case"func_pointer":case"calc_func":n+=this.convCallFunc(e,s);break;case"if":n+=this.convIf(e);break;case"tikuji":n+=this.convTikuji(e);break;case"for":n+=this.convFor(e);break;case"foreach":n+=this.convForeach(e);break;case"repeat_times":n+=this.convRepeatTimes(e);break;case"speed_mode":n+=this.convSpeedMode(e,s);break;case"performance_monitor":n+=this.convPerformanceMonitor(e,s);break;case"while":n+=this.convWhile(e);break;case"atohantei":n+=this.convAtohantei(e);break;case"switch":n+=this.convSwitch(e);break;case"let_array":n+=this.convLetArray(e);break;case"配列参照":n+=this.convRefArray(e);break;case"json_array":n+=this.convJsonArray(e);break;case"json_obj":n+=this.convJsonObj(e);break;case"func_obj":n+=this.convFuncObj(e);break;case"bool":n+=e.value?"true":"false";break;case"null":n+="null";break;case"def_test":n+=this.convDefTest(e);break;case"def_func":n+=this.convDefFunc(e);break;case"return":n+=this.convReturn(e);break;case"try_except":n+=this.convTryExcept(e);break;case"require":n+=this.convRequire(e);break;default:throw new Error("System Error: unknown_type="+e.type)}return n}findVar(e){if(this.varslistSet.length>3&&this.varsSet.names.has(e))return{i:this.varslistSet.length-1,name:e,isTop:!0,js:this.varname(e)};for(let s=2;s>=0;s--)if(this.varslistSet[s].names.has(e))return{i:s,name:e,isTop:!1,js:`__varslist[${s}][${JSON.stringify(e)}]`};return null}genVar(e,s){const n=this.findVar(e),u=s.line;if(null===n){if("引数"===e||"それ"===e||"対象"===e||"対象キー"===e);else if(this.warnUndefinedVar){const n=e.replace(/^main__(.+)$/,"$1");this.__self.getLogger().warn(`変数『${n}』は定義されていません。`,s)}return this.varsSet.names.add(e),this.varname(e)}if(0===n.i){const a=this.__self.getNakoFunc(e);if(!a)return`${n.js}/*err:${u}*/`;if("const"===a.type||"var"===a.type)return n.js;if("func"===a.type){if(!a.josi||0===a.josi.length)return`(${n.js}())`;throw t.ih.fromNode(`『${e}』が複文で使われました。単文で記述してください。(v1非互換)`,s)}throw t.ih.fromNode(`『${e}』は関数であり参照できません。`,s)}return n.js}convGetVar(e){const s=e.value;return this.genVar(s,e)}convComment(e){let s=String(e.value);s=s.replace(/\n/g,"¶");const n=this.convLineno(e,!1);return""===s&&""===n?";":""===s?";"+n+"\n":";"+n+"//"+s+"\n"}convReturn(e){if(this.varsSet.names.has("!関数"))throw t.ih.fromNode("『戻る』がありますが、関数定義内のみで使用可能です。",e);const s=this.convLineno(e,!1);let n;if(e.value)n=this._convGen(e.value,!0);else{if(0!==this.speedMode.invalidSore)return s+"return;";n=this.varname("それ")}if(0===this.warnUndefinedReturnUserFunc)return s+`return ${n};`;return s+`return (__self.chk(${n}, ${this.addConstPool("ユーザ関数からundefinedが返されています",[],e.file,e.line)}));`}getConstPoolsTemplateId(e){let s=this.constPoolsTemplate.indexOf(e);return s<0&&(s=this.constPoolsTemplate.length,this.constPoolsTemplate[s]=e),s}addConstPool(e,s,n,t){n=""+n;const u=this.getConstPoolsTemplateId(n),a=this.getConstPoolsTemplateId(e),o=[];for(const e in s){const n=""+s[e],t=this.getConstPoolsTemplateId(n);o.push(t)}const i=this.constPools.length;return this.constPools.push([a,o,u,t]),i}convCheckLoop(e,s){if(!this.flagLoop){const n="continue"===s?"続ける":"抜ける";throw t.ih.fromNode(`『${n}』文がありますが、それは繰り返しの中で利用してください。`,e)}return this.convLineno(e)+s+";"}convDefFuncCommon(e,s){let n="",t="";if(0!==this.performanceMonitor.userFunction){let e=s;e||(void 0===this.performanceMonitor.mumeiId&&(this.performanceMonitor.mumeiId=0),this.performanceMonitor.mumeiId++,e=`anous_${this.performanceMonitor.mumeiId}`),n=`const performanceMonitorEnd = (function (key, type) {\nconst uf_start = performance.now() * 1000;\nreturn function () {\nconst el_time = performance.now() * 1000 - uf_start;\nif (!__self.__performance_monitor) {\n__self.__performance_monitor={};\n__self.__performance_monitor[key] = { called:1, totel_usec: el_time, min_usec: el_time, max_usec: el_time, type: type };\n} else if (!__self.__performance_monitor[key]) {\n__self.__performance_monitor[key] = { called:1, totel_usec: el_time, min_usec: el_time, max_usec: el_time, type: type };\n} else {\n__self.__performance_monitor[key].called++;\n__self.__performance_monitor[key].totel_usec+=el_time;\nif(__self.__performance_monitor[key].min_usec>el_time){__self.__performance_monitor[key].min_usec=el_time;}\nif(__self.__performance_monitor[key].max_usec<el_time){__self.__performance_monitor[key].max_usec=el_time;}\n}};})('${e}', 'user');try {\n`,t="} finally { performanceMonitorEnd(); }\n"}let a="";const o=new Set;0===this.speedMode.invalidSore&&o.add("それ"),this.varsSet={isFunction:!0,names:o,readonly:new Set},this.varslistSet.push(this.varsSet),a+=" var 引数 = arguments;\n",a+=" var __vars = {};\n";const i=Array.from(this.varsSet.names.values());let r="";const c=s?e.name.meta:e.meta;for(let n=0;n<c.varnames.length;n++){const t=c.varnames[n];0===this.warnUndefinedCalledUserFuncArgs?r+=` ${this.varname(t)} = arguments[${n}];\n`:r+=s?` ${this.varname(t)} = (function(a){if(a===undefined){__self.logger.warn('ユーザ関数(${s})の引数(${this.varname(t)})にundefinedが渡されました',{file:'${e.file}',line:${e.line}});};return a;})(arguments[${n}]);\n`:` ${this.varname(t)} = (function(a){if(a===undefined){__self.logger.warn('匿名関数の引数(${this.varname(t)})にundefinedが渡されました',{file:'${e.file}',line:${e.line}});};return a;})(arguments[${n}]);\n`,this.varsSet.names.add(t)}s&&(this.usedFuncSet.add(s),this.varslistSet[1].names.add(s),void 0===this.nakoFuncList[s]&&(this.nakoFuncList[s]={josi:e.name.meta.josi,fn:()=>{},type:"func",asyncFn:!1,isExport:null},this.__self.getLogger().warn(`generateで未定義の状態の関数『${s}』が動的に登録されています。`)));const d=this.usedAsyncFn;this.usedAsyncFn=this.debugOption.useDebug;r+=this._convGen(e.block,!1).split("\n").map((e=>" "+e)).join("\n")+"\n",0===this.speedMode.invalidSore&&(r+=` return (${this.varname("それ")});\n`),r+=t,s&&this.usedAsyncFn&&(this.nakoFuncList[s].asyncFn=!0);for(const e of Array.from(this.varsSet.names.values()))i.includes(e)||u.isValidIdentifier(e)&&(a+=` var ${e};\n`);0===this.speedMode.invalidSore&&(u.isValidIdentifier("それ")?a+=" var それ = '';\n":a+=` ${this.varname("それ")} = '';`);return r=(this.usedAsyncFn?"(async function(){\n":"(function(){\n")+n+a+(" "+this.convLineno(e,!0,1)+"\n")+r+"",r+="})",s&&(this.nakoFuncList[s].fn=r,this.nakoFuncList[s].asyncFn=this.usedAsyncFn,c.asyncFn=this.usedAsyncFn),this.usedAsyncFn=d,this.varslistSet.pop(),this.varsSet=this.varslistSet[this.varslistSet.length-1],s&&(this.__self.__varslist[1][s]=r),r}convDefTest(e){const s=e.name.value;let n=`__tests.push({ name: '${s}', f: () => {\n`;return n+=` ${this._convGen(e.block,!1)}\n}});`,this.nakoTestFuncs[s]={josi:e.name.meta.josi,fn:n,type:"test_func"},""}convDefFunc(e){if(!e.name)return"";const s=u.getFuncName(e.name.value);return this.convDefFuncCommon(e,s),""}convFuncObj(e){return this.convDefFuncCommon(e,"")}convJsonObj(e){return"{"+e.value.map((e=>`${this._convGen(e.key,!0)}:${this._convGen(e.value,!0)}`)).join(",")+"}"}convJsonArray(e){return"["+e.value.map((e=>this._convGen(e,!0))).join(",")+"]"}convRefArray(e){const s=this._convGen(e.name,!0),n=e.index;let t=s;if(!n)return t;for(let e=0;e<n.length;e++){t+="["+this._convGen(n[e],!0)+"]"}return t}convLetArray(e){const s=this._convGen(e.name,!0),n=e.index||[];let u="",a=s,o="";if(e.checkInit){const e="[0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0]";u+=`\n/*配列初期化*/if (!(${s} instanceof Array)) { ${s} = ${e}; /*console.log('初期化:${s}')*/ };`;for(let t=0;t<n.length-1;t++){o+=`[${this._convGen(n[t],!0)}]`,u+=`\n/*配列初期化${t}*/if (!(${s}${o} instanceof Array)) { ${s}${o} = ${e}; };`}u+="\n"}for(let e=0;e<n.length;e++){a+="["+this._convGen(n[e],!0)+"]"}let i=null;if(0===this.speedMode.invalidSore&&(i=this.varname("それ")),e.value&&(i=this._convGen(e.value,!0)),null==i)throw t.ih.fromNode("代入する先の変数名がありません。",e);a+=" = "+i+";\n";return this.convLineno(e,!1)+u+a}convGenLoop(e){const s=this.flagLoop;this.flagLoop=!0;try{return this._convGen(e,!1)}finally{this.flagLoop=s}}convFor(e){let s;if(null!==e.word){const n=e.word.value;this.varsSet.names.add(n),s=this.varname(n)}else this.varsSet.names.add("dummy"),s=this.varname("dummy");const n=this.loopId++,t=`$nako_i${n}`,u=this._convGen(e.from,!0),a=this._convGen(e.to,!0),o=e.flagDown;let i="1";e.inc&&"null"!==e.inc&&(i=this._convGen(e.inc,!0));const r=this.convGenLoop(e.block),c=`$nako_from${n}`,d=`$nako_to${n}`;let l="";0===this.speedMode.invalidSore&&(l=`${this.varname("それ")} = `);const f=`\n//[FOR id=${n}]\nconst ${c} = ${u};\nconst ${d} = ${a};\nif (${c} <= ${d}) { // up\n for (let ${t} = ${c}; ${t} <= ${d}; ${t}+= ${i}) {\n ${l}${s} = ${t};\n ${r}\n };\n} else { // down\n if (${o}) { for (let ${t} = ${c}; ${t} >= ${d}; ${t}-= ${i}) {\n ${l}${s} = ${t};\n ${r}\n }\n };\n};\n//[/FOR id=${n}]\n`;return this.convLineno(e,!1)+f}convForeach(e){let s;if(null===e.target){if(0!==this.speedMode.invalidSore)throw t.ih.fromNode("『反復』の対象がありません。",e);s=this.varname("それ")}else s=this._convGen(e.target,!0);let n='__v0["対象"]';e.name&&(n=this.varname(e.name.value),this.varsSet.names.add(e.name.value));const u=this.convGenLoop(e.block),a=this.loopId++;let o="";0===this.speedMode.invalidSore&&(o=`${this.varname("それ")} = `);const i=`let $nako_foreach_v${a}=${s};\nfor (let $nako_i${a} in $nako_foreach_v${a}){\n if ($nako_foreach_v${a}.hasOwnProperty($nako_i${a})) {\n ${n} = ${o}$nako_foreach_v${a}[$nako_i${a}];\n __v0["対象キー"] = $nako_i${a};\n ${u}\n }\n};\n`;return this.convLineno(e,!1)+i}convRepeatTimes(e){const s=this.loopId++,n=this._convGen(e.value,!0),t=this.convGenLoop(e.block);let u="";0===this.speedMode.invalidSore&&(u=`${this.varname("それ")} = `);const a=`let $nako_times_v${s} = ${n};\nfor(var $nako_i${s} = 1; $nako_i${s} <= $nako_times_v${s}; $nako_i${s}++){\n ${u}__v0["回数"] = $nako_i${s};\n `+t+"\n}\n";return this.convLineno(e,!1)+a}convSpeedMode(e,s){if(!e.options)return"";const n={...this.speedMode};e.options["行番号無し"]&&this.speedMode.lineNumbers++,e.options["暗黙の型変換無し"]&&this.speedMode.implicitTypeCasting++,e.options["強制ピュア"]&&this.speedMode.forcePure++,e.options["それ無効"]&&this.speedMode.invalidSore++;try{return this._convGen(e.block,s)}finally{this.speedMode=n}}convPerformanceMonitor(e,s){const n={...this.performanceMonitor};if(!e.options)return"";e.options["ユーザ関数"]&&this.performanceMonitor.userFunction++,e.options["システム関数本体"]&&this.performanceMonitor.systemFunctionBody++,e.options["システム関数"]&&this.performanceMonitor.systemFunction++;try{return this._convGen(e.block,s)}finally{this.performanceMonitor=n}}convWhile(e){const s=`while (${this._convGen(e.cond,!0)}){\n ${this.convGenLoop(e.block)}\n}\n`;return this.convLineno(e,!1)+s}convAtohantei(e){const s=`$nako_i${this.loopId++}`,n=this._convGen(e.cond,!0),t=`for(;;) {\n ${this.convGenLoop(e.block)}\n let ${s} = ${n};\n if (${s}) { continue } else { break }\n}\n\n`;return this.convLineno(e,!1)+t}convSwitch(e){const s=this._convGen(e.value,!0),n=e.cases||[];let t="";for(let e=0;e<n.length;e++){const s=n[e][0],u=this.convGenLoop(n[e][1]);if("違えば"===s.type)t+=" default:\n";else{t+=` case ${this._convGen(s,!0)}:\n`}t+=` ${u}\n break\n`}const u=`switch (${s}){\n${t}\n}\n`;return this.convLineno(e,!1)+u}convIf(e){const s=this._convGen(e.expr,!0),n=this._convGen(e.block,!1),t=null===e.false_block?"":"else {"+this._convGen(e.false_block,!1)+"};\n";return this.convLineno(e,!1)+`if (${s}) {\n ${n}\n}`+t+";\n"}convTikuji(e){const s=`__tikuji${this.loopId++}`;let n=`const ${s} = []\n`;const t=e.blocks?e.blocks:[];for(let e=0;e<t.length;e++){const u=this._convGen(t[e],!1).replace(/\s+$/,"")+"\n";n+=`${s}.push(async function(resolve, reject) {\n __self.resolve = resolve;\n __self.reject = reject;\n __self.resolveCount = 0;\n ${this.convLineno(t[e],!0)}\n ${u} if (__self.resolveCount === 0) resolve();\n}); // end of tikuji__\${pid}[{$i}]\n`}n+=`// end of ${s} \n`;let u=` ${s}.splice(0);\n __v0["エラーメッセージ"]=errMsg;\n`;if(null!=e.errorBlock){u+=this._convGen(e.errorBlock,!1).replace(/\s+$/,"")+"\n"}return n+=`const ${s}__reject = function(errMsg){\n${u}};\n`,n+="__self.resolve = undefined;\n",n+=`const ${s}__resolve = function(){\n`,n+=" setTimeout(async function(){\n",n+=` if (${s}.length == 0) {return}\n`,n+=` const f = ${s}.shift()\n`,n+=` await f(${s}__resolve, ${s}__reject);\n`,n+=" }, 0);\n",n+="};\n",n+=`${s}__resolve()\n`,this.convLineno(e,!1)+n}convFuncGetArgsCalcType(e,s,n){const t=[],u={},a=n.args?n.args:[];for(let e=0;e<a.length;e++){const s=a[e];0===e&&null===s&&0===this.speedMode.invalidSore?(t.push(this.varname("それ")),u.sore=!0):t.push(this._convGen(s,!0))}return[t,u]}getPluginList(){const e=[];for(const s in this.__self.__module)e.push(s);return e}convCallFunc(e,s){const n=u.getFuncName(e.name),a=this.findVar(n);if(null===a)throw t.ih.fromNode(`関数『${n}』が見当たりません。有効プラグイン=[`+this.getPluginList().join(", ")+"]",e);let o;if(0===a.i){if(o=this.__self.getFunc(n),!o)throw new Error(`[System Error] 関数「${n}」NakoCompiler.nakoFuncList の不整合があります。`);if("func"!==o.type)throw t.ih.fromNode(`『${n}』は関数ではありません。`,e)}else o=this.nakoFuncList[n],void 0===o&&(o={return_none:!1});if("func_pointer"===e.type)return a.js;const i=this.convFuncGetArgsCalcType(n,o,e),r=i[0],c=i[1];if(this.usedFuncSet.add(n),"名前空間設定"===n)return`\n// --- 名前空間(${r[0]}) ---\n__varslist[0]['名前空間設定'](${r[0]}, __self);__self.__modName=${r[0]};\n`;if("プラグイン名設定"===n)return`\n__varslist[0]['プラグイン名設定'](${r[0]}, __self);\n`;r.push("__self");let d="function",l="",f="";if(e.setter&&(l+=";__self.isSetter = true;\n",f+=";__self.isSetter = false;\n"),0===a.i&&this.varslistSet.length>3&&!0!==o.pure&&0===this.speedMode.forcePure){const e=[];for(const s of Array.from(this.varsSet.names.values()))u.isValidIdentifier(s)&&e.push({str:JSON.stringify(s),js:this.varname(s)});l+="__self.__locals = __vars;\n";for(const s of e)l+=`__self.__locals[${s.str}] = ${s.js};\n`;for(const s of e)"それ"!==s.js&&(f+=`${s.js} = __self.__locals[${s.str}];\n`)}c.sore&&(l+="/*[sore]*/");const _=(e,s)=>{let n="";for(const t of e.split("\n"))""!==t&&(n+=" ".repeat(s)+t+"\n");return n},h={TYPEOF:!0,"変数型確認":!0};let v;if(0===this.warnUndefinedCallingUserFunc&&0!==a.i||0===this.warnUndefinedCallingSystemFunc&&0===a.i)v=r.join(",");else{const s=[];r.forEach((t=>{if("__self"===t||!0===h[n])s.push(`${t}`);else{const u=0===a.i?"命令『$0』の引数にundefinedを渡しています。":"ユーザ命令『$0』の引数にundefinedを渡しています。",o=this.addConstPool(u,[n],e.file,e.line),i=""===t?'""':t;s.push(`(__self.chk(${i}, ${o}))`)}})),v=s.join(", ")}let b=`${a.js}(${v})`;if(o.asyncFn&&(d=`async ${d}`,b=`await ${b}`,this.numAsyncFn++,this.usedAsyncFn=!0),0===a.i&&0!==this.performanceMonitor.systemFunctionBody){let e=n;e||(void 0===this.performanceMonitor.mumeiId&&(this.performanceMonitor.mumeiId=0),this.performanceMonitor.mumeiId++,e=`anous_${this.performanceMonitor.mumeiId}`),b=`(${d} (key, type) {\nconst sbf_start = performance.now() * 1000;\ntry {\nreturn `+b+";\n} finally {\nconst sbl_time = performance.now() * 1000 - sbf_start;\nif (!__self.__performance_monitor) {\n__self.__performance_monitor={};\n__self.__performance_monitor[key] = { called:1, totel_usec: sbl_time, min_usec: sbl_time, max_usec: sbl_time, type: type };\n} else if (!__self.__performance_monitor[key]) {\n__self.__performance_monitor[key] = { called:1, totel_usec: sbl_time, min_usec: sbl_time, max_usec: sbl_time, type: type };\n} else {\n__self.__performance_monitor[key].called++;\n__self.__performance_monitor[key].totel_usec+=sbl_time;\nif(__self.__performance_monitor[key].min_usec>sbl_time){__self.__performance_monitor[key].min_usec=sbl_time;}\nif(__self.__performance_monitor[key].max_usec<sbl_time){__self.__performance_monitor[key].max_usec=sbl_time;}\n"+`}}})('${n}_body', 'sysbody')\n`}let y="";if(o.return_none)y=""===f?""===l?`${b};\n`:`${l} ${b};\n`:`${l}try {\n${_(b,1)};\n} finally {\n${_(f,1)}}\n`;else{let n="";0===this.speedMode.invalidSore&&(n=`${this.varname("それ")} = `),y=""===l&&""===f?`(${n}${b})`:""===f?`(${d}(){\n${_(`${l};\nreturn ${n} ${b}`,1)}}).call(this)`:`(${d}(){\n${_(`${l}try {\n${_(`return ${n}${b};`,1)}\n} finally {\n${_(f,1)}}`,1)}}).call(this)`,("して"===e.josi||""===e.josi&&!s)&&(y+=";\n")}return 0===a.i&&0!==this.performanceMonitor.systemFunction&&(y="(function (key, type) {\nconst sf_start = performance.now() * 1000;\ntry {\nreturn "+y+";\n} finally {\nconst sl_time = performance.now() * 1000 - sf_start;\nif (!__self.__performance_monitor) {\n__self.__performance_monitor={};\n__self.__performance_monitor[key] = { called:1, totel_usec: sl_time, min_usec: sl_time, max_usec: sl_time, type: type };\n} else if (!__self.__performance_monitor[key]) {\n__self.__performance_monitor[key] = { called:1, totel_usec: sl_time, min_usec: sl_time, max_usec: sl_time, type: type };\n} else {\n__self.__performance_monitor[key].called++;\n__self.__performance_monitor[key].totel_usec+=sl_time;\nif(__self.__performance_monitor[key].min_usec>sl_time){__self.__performance_monitor[key].min_usec=sl_time;}\nif(__self.__performance_monitor[key].max_usec<sl_time){__self.__performance_monitor[key].max_usec=sl_time;}\n"+`}}})('${n}_sys', 'system')\n`),y}convRenbun(e){const s=this._convGen(e.right,!0),n=this._convGen(e.left,!1);return this.numAsyncFn++,this.usedAsyncFn=!0,`/*連文*/await (async function(){ ${n}; return ${s} }).call(this)`}convOp(e){const s={"&":'+""+',eq:"==",noteq:"!=","===":"===","!==":"!==",gt:">",lt:"<",gteq:">=",lteq:"<=",and:"&&",or:"||",shift_l:"<<",shift_r:">>",shift_r0:">>>","÷":"/"};let n=e.operator||"",t=this._convGen(e.right,!0),u=this._convGen(e.left,!0);return"+"===n&&0===this.speedMode.implicitTypeCasting&&(e.left&&"number"!==e.left.type&&"bigint"!==e.left.type&&(u=`self.__parseFloatOrBigint(${u})`),e.right&&"number"!==e.right.type&&"bigint"!==e.right.type&&(t=`self.__parseFloatOrBigint(${t})`)),"^"===n||"**"===n?`((${u}) ** (${t}))`:"÷÷"===n?`(Math.floor(${u} / ${t}))`:(s[n]&&(n=s[n]),`(${u} ${n} ${t})`)}convInc(e){let s=null;if(0===this.speedMode.invalidSore&&(s=this.varname("それ")),e.value&&(s=this._convGen(e.value,!0)),null==s)throw t.ih.fromNode("加算する先の変数名がありません。",e);let n,u="";const a=e.name;if("配列参照"===a.type)n=this.convRefArray(a);else{const e=a.value;let s=this.findVar(e);if(null===s&&(this.varsSet.names.add(e),s=this.findVar(e),!s))throw new Error("『増』または『減』で変数が見当たりません。");n=s.js}return u+=`if (typeof(${n}) === 'undefined') { ${n} = 0; }`,u+=`${n} += ${s}`,";"+this.convLineno(e,!1)+u+"\n"}convLet(e){let s=null;if(0===this.speedMode.invalidSore&&(s=this.varname("それ")),e.value&&(s=this._convGen(e.value,!0)),null==s)throw t.ih.fromNode("代入する先の変数名がありません。",e);const n=e.name.value,u=this.findVar(n);let a="";if(null===u)this.varsSet.names.add(n),a=`${this.varname(n)} = ${s};`;else{if(this.varslistSet[u.i].readonly.has(n))throw t.ih.fromNode(`定数『${n}』は既に定義済みなので、値を代入することはできません。`,e);a=`${u.js} = ${s};`}return";"+this.convLineno(e,!1)+a+"\n"}convDefLocalVar(e){const s=null===e.value?"null":this._convGen(e.value,!0),n=e.name.value,u=e.vartype;if(this.varsSet.names.has(n))throw t.ih.fromNode(`${u}『${n}』の二重定義はできません。`,e);this.varsSet.names.add(n),"定数"===u&&this.varsSet.readonly.add(n);const a=`${this.varname(n)}=${s};\n`;return this.convLineno(e,!1)+a}convDefLocalVarlist(e){let s="";const n=e.vartype,t=null===e.value?"null":this._convGen(e.value,!0),u=`$nako_i${this.loopId++}`;s+=`const ${u}=${t}\n`,s+=`if (!(${u} instanceof Array)) { ${u}=[${u}] }\n`;const a=e.names?e.names:[];for(let e=0;e<a.length;e++){const t=a[e].value;this.varsSet.names.has(t),this.varsSet.names.add(t),"定数"===n&&this.varsSet.readonly.add(t);s+=`${this.varname(t)}=${u}[${e}];\n`}return this.convLineno(e,!1)+s}convString(e){let s=""+e.value;const n=e.mode;if(s=s.replace(/\\/g,"\\\\"),s=s.replace(/"/g,'\\"'),s=s.replace(/\r/g,"\\r"),s=s.replace(/\n/g,"\\n"),"ex"===n){const n=(s,n)=>'"+'+this.genVar(n,e)+'+"';s=s.replace(/\{(.+?)\}/g,n),s=s.replace(/{(.+?)}/g,n)}return'"'+s+'"'}convTryExcept(e){const s=this._convGen(e.block,!1),n=this._convGen(e.errBlock,!1);return this.convLineno(e,!1)+`try {\n${s}\n} catch (e) {\n __v0["エラーメッセージ"] = e.message;\n;\n`+`${n}}\n`}getUsedFuncSet(){return this.usedFuncSet}getPluginInitCode(){let e="",s="";for(const e in this.__self.__module){const n=`!${e}:初期化`;this.varslistSet[0].names.has(n)&&(this.usedFuncSet.add(`!${e}:初期化`),s+=`__v0["!${e}:初期化"](__self);\n`)}return""!==s&&(e+="__v0.line='l0:プラグインの初期化';\n"+s),e}}}},s={};function n(t){var u=s[t];if(void 0!==u)return u.exports;var a=s[t]={exports:{}};return e[t](a,a.exports,n),a.exports}n.d=function(e,s){for(var t in s)n.o(s,t)&&!n.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:s[t]})},n.o=function(e,s){return Object.prototype.hasOwnProperty.call(e,s)},function(){var e=n(297),s=n(228),t=n(485);const u="NOP",a="LBL",o="EOL",i="JMP",r="JMP_T",c="JMP_F",d="CALL",l="CALL_OBJ",f="RET",_="TRY",h="CODE";class v{constructor(e,s){this.type=e,this.value=s,this.no=-1,this.tag=0}}class b{static generate(n,t,u){const a=new b(n);a.registerFunction(t);let o=a.convGen(t,!!u);return o=a.getDefFuncCode(u)+o,n.getLogger().trace("--- generate(非同期モード) ---\n"+o),o&&u&&(o+="\n__self._runTests(__tests);\n"),{runtimeEnv:o,standalone:`const nakoVersion = ${JSON.stringify(s.Z)};\n${e.k.toString()}\n${e.as.toString()}\nthis.logger = {\n error(message) { console.error(message) },\n send(level, message) { console.log(message) },\n};\nthis.__varslist = [{}, {}, {}];\nthis.__vars = this.__varslist[2];\nthis.__module = {};\nthis.__locals = {};\nthis.__labels = {};\nthis.__code = [];\nthis.__callstack = [];\nthis.__stack = [];\nthis.__genMode = '非同期モード';\ntry {\n ${a.getVarsCode()}\n ${o}\n} catch (err) {\n if (!(err instanceof NakoRuntimeError)) {\n err = new NakoRuntimeError(err, this.__varslist[0].line);\n }\n this.logger.error(err);\n throw err;\n}`,gen:a}}constructor(e){this.com=e,this.nakoFuncList={...e.getNakoFuncList()},this.nakoTestList={},this.usedFuncSet=new Set,this.loopId=1,this.flagLoop=!1,this.codeId=0,this.codeArray=[],this.labelContinue=null,this.labelBreak=null,this.labels={},this.__self=e,this.genMode="非同期モード",this.lastLineNo=null,this.varslistSet=e.__varslist.map((e=>({isFunction:!1,names:new Set(Object.keys(e)),readonly:new Set}))),this.varsSet={isFunction:!1,names:new Set,readonly:new Set},this.varslistSet[2]=this.varsSet,this.speedMode={lineNumbers:0,implicitTypeCasting:0,invalidSore:0,forcePure:0},this.performanceMonitor={userFunction:0,systemFunction:0,systemFunctionBody:0}}convLineno(e,s){if(this.speedMode.lineNumbers>0)return"";let n;if(n="number"!=typeof e.line?"unknown":"string"!=typeof e.file?`l${e.line}`:`l${e.line}:${e.file}`,!s){if(n===this.lastLineNo)return"";this.lastLineNo=n}return`__v0.line=${JSON.stringify(n)};`}varname(e){return`sys.__vars[${JSON.stringify(e)}]`}getVarsCode(){let e="";for(const s of Array.from(this.usedFuncSet.values())){const n=this.__self.__varslist[0][s],t=`this.__varslist[0]["${s}"]`;e+="function"==typeof n?t+"="+n.toString()+";\n":t+"="+JSON.stringify(n)+";\n"}return e}getDefFuncCode(e){let s="";s+="const __self = this.__self = this;\n",s+="const __varslist = this.__varslist;\n",s+="const __module = this.__module;\n",s+="const __v0 = this.__v0 = this.__varslist[0];\n",s+="const __v1 = this.__v1 = this.__varslist[1];\n",s+="const __vars = this.__vars = this.__varslist[2];\n",s+="const __code = this.__code;\n";let n="";for(const e in this.nakoFuncList){n+=`//[DEF_FUNC name='${e}']\n__v1["${e}"]=${this.nakoFuncList[e].fn};\n;//[/DEF_FUNC name='${e}']\n`}""!==n&&(s+="__v0.line='関数の定義';\n"+n);let t="";for(const e in this.__self.__module){const s=`!${e}:初期化`;this.varslistSet[0].names.has(s)&&(this.usedFuncSet.add(`!${e}:初期化`),t+=`__v0["!${e}:初期化"](__self);\n`)}if(""!==t&&(s+="__v0.line='プラグインの初期化';\n"+t),e){let n="const __tests = [];\n";for(const s in this.nakoTestList)if(!0===e||"string"==typeof e&&e===s){n+=`${this.nakoTestList[s].fn};\n;`}""!==n&&(s+="__v0.line='テストの定義';\n",s+=n+"\n")}return s}addPlugin(e){return this.__self.addPlugin(e)}addPluginObject(e,s){this.__self.addPluginObject(e,s)}addPluginFile(e,s,n){this.__self.addPluginFile(e,s,n)}addFunc(e,s,n){this.__self.addFunc(e,s,n)}getFunc(e){return this.__self.getFunc(e)}registerFunction(s){if("block"!==s.type)throw e.ih.fromNode("構文解析に失敗しています。構文は必ずblockが先頭になります",s);const n=e=>{for(let s=0;s<e.block.length;s++){const t=e.block[s];if("def_func"===t.type){const e=t.name.value;this.usedFuncSet.add(e),this.__self.__varslist[1][e]=function(){},this.nakoFuncList[e]={josi:t.name.meta.josi,fn:"",type:"func"}}else("speed_mode"===t.type||"performance_monitor"===t.type)&&("block"===t.block.type?n(t.block):n(t))}};n(s);const t=new Set;0===this.speedMode.invalidSore&&t.add("それ"),this.varsSet={isFunction:!1,names:t,readonly:new Set},this.varslistSet=this.__self.__varslist.map((e=>({isFunction:!1,names:new Set(Object.keys(e)),readonly:new Set}))),this.varslistSet[2]=this.varsSet}convGen(e,s){this._convGen(e,!0);const n=new Set([i,r,c,d,_]);let t=this.codeArray;{t=t.filter((e=>e.type!==u));const e=new Set;t.forEach((s=>{n.has(s.type)&&e.add(s.value)})),t=t.filter((s=>s.type!==a||(15===s.tag||e.has(s.value))));let s=0;for(;s<t.length-1;)t[s].type!==o||t[s+1].type!==o?s++:t.splice(s+1,1);this.codeArray=t}t.forEach(((e,s)=>{e.type===a&&(this.labels[e.value]=s)})),t.forEach((e=>{n.has(e.type)&&e.no<0&&(e.no=this.labels[e.value])}));let v="";return t.forEach(((e,s)=>{switch(e.type){case u:v+=`case ${s}: break; // [NOP] ${e.value}\n`;break;case a:v+=`case ${s}: break; // [LABEL] ${e.value}\n`;break;case o:v+=`case ${s}: ${e.value}; break; // [EOL]\n`;break;case i:v+=`case ${s}: sys.nextIndex = ${e.no}; break; // ${e.value}\n`;break;case r:v+=`case ${s}: if (sys.__stack.pop()) { sys.nextIndex = ${e.no};} break; // ${e.value}\n`;break;case c:v+=`case ${s}: if (!sys.__stack.pop()) { sys.nextIndex = ${e.no}} break; // ${e.value}\n`;break;case f:v+=`case ${s}: sys.__return(sys); break;\n`;break;case d:v+=`case ${s}: sys.__call(${e.no}, sys); break; // ${e.value}\n`;break;case l:v+=`case ${s}: sys.__callObj('${e.value}', ${s}, sys); break; // ${e.value}\n`;break;case _:v+=`case ${s}: sys.tryIndex = ${e.no}; break; // TRY \n`;break;case h:{const n=e.value.replace(/\s+$/,"");v+=`case ${s}: {\n${n}\n};break;\n`;break}default:throw new Error("invalid code type")}})),v=`\n //-------------------------\n // main_code\n this.__labels = ${JSON.stringify(this.labels)};\n this.nextAsync = (sys) => {\n if (sys.index >= sys.codeSize || sys.index < 0) {return}\n const __v0 = sys.__v0\n try {\n sys.inLoop = true\n while (sys.index < sys.codeSize && sys.index >= 0) {\n // console.log('@@[run]', sys.index)\n switch (sys.index) {\n // --- CODE.BEGIN ---\n ${v}\n // --- CODE.END ---\n default:\n sys.inLoop = false\n console.log(sys.index, sys.__stack)\n throw new Error('Invalid sys.index:' + sys.index)\n break\n }\n // check next\n if (sys.nextIndex >= 0) {\n sys.index = sys.nextIndex\n sys.nextIndex = -1\n } else {\n sys.index++\n }\n if (sys.async) {\n sys.__saveSysenv(sys)\n sys.async = false\n break\n }\n } // end of while\n sys.inLoop = false\n } catch (e) {\n sys.__errorAsync(e, sys)\n }\n }\n this.__errorAsync = (e, sys) => { // エラーが起きた時呼び出す\n sys.__v0["エラーメッセージ"] = e.message;\n if (e.message == '__終わる__') {\n sys.__stopAsync(sys)\n return\n }\n if (sys.tryIndex >= 0) {\n sys.index = sys.tryIndex;\n setTimeout(() => {sys.nextAsync(sys)}, 1)\n } else {\n throw e\n }\n }\n this.__call = (no, sys) => {\n const info = {lastVars:sys.__vars, backNo: this.index + 1}\n sys.__callstack.push(info);\n sys.__vars = {"それ":""}\n sys.__varslist.push(sys.__vars)\n sys.nextIndex = no;\n }\n this.__return = sys => {\n if (sys.__callstack.length === 0) {\n sys.__destroySysenv(sys, sys.curSysenv.envid)\n sys.index = -2\n sys.nextIndex = -1\n return\n }\n const sore = sys.__vars['それ'];\n sys.__varslist.pop();\n const info = sys.__callstack.pop();\n sys.nextIndex = info.backNo;\n sys.__vars = info.lastVars;\n sys.__vars['それ'] = sore\n sys.__stack.push(sore);\n }\n this.__resetAsync = sys => {\n sys.index = 0\n sys.codeSize = ${t.length};\n sys.async = false\n sys.nextIndex = -1\n sys.tryIndex = -1\n }\n this.__stopAsync = sys => {\n sys.__resetAsync(sys)\n sys.index = -1 // force stop!!\n }\n this.__callNakoCode = (no, backNo, sys) => {\n this.__call(backNo, sys)\n sys.nextIndex = no\n const sysenv = sys.setAsync(sys)\n setTimeout(() => {\n // console.log('//__callNakoCode, back=', backNo, 'no=', no)\n sys.compAsync(sys, sysenv)\n } ,1)\n }\n this.__callNakoCodeEntry = (no, sys) => {\n sys.__saveSysenv(sys)\n sys.curSysenv = sys.__generateSysenv(sys)\n sys.__restoreSysenv(sys)\n sys.__vars = {"それ":""}\n sys.__varslist.push(sys.__vars)\n sys.index = no;\n sys.nextAsync(sys)\n }\n this.__callObj = (vname, curNo, sys) => {\n if (sys.__vars[vname]) {\n const fname = sys.__vars[vname]\n // console.log(sys.__labels)\n if (fname && sys.__labels[fname]) {\n const no = sys.__labels[fname]\n sys.__call(no, sys)\n return\n } else {\n console.log('vname=', vname, 'label=', fname)\n }\n }\n throw new Error('async error in __callObj::', vname)\n }\n this.__generateSysenv = sys => {\n sys.envid = ( sys.envid == null ? 0 : sys.envid ) + 1\n const sysenv = {\n callstack: [],\n varstack: [],\n varslist: [sys.__varslist[0], sys.__varslist[1], sys.__varslist[2]],\n index: -1,\n nextIndex: -1,\n tryIndex: -1,\n envid: sys.envid\n }\n sysenv.vars = sysenv.varslist[2]\n if (sys.sysenvs == null) { sys.sysenvs={} }\n sys.sysenvs[sys.envid] = sysenv\n // console.log('generete envid '+sys.envid)\n return sysenv\n }\n this.__destroySysenv = (sys, envid) => {\n delete sys.sysenvs[envid]\n // console.log('destroy envid '+envid)\n }\n this.__saveSysenv = sys => {\n const sysenv = sys.curSysenv\n sysenv.callstack = sys.__callstack\n sysenv.varstack = sys.__stack\n sysenv.varslist = sys.__varslist\n sysenv.vars = sys.__vars\n sysenv.index = sys.index\n sysenv.nextIndex = sys.nextIndex\n sysenv.tryIndex = sys.tryIndex\n }\n this.__restoreSysenv = sys => {\n const sysenv = sys.curSysenv\n sys.__callstack = sysenv.callstack\n sys.__stack = sysenv.varstack\n sys.__varslist = sysenv.varslist\n sys.__vars = sysenv.vars\n ___vars = sys.__vars\n sys.index = sysenv.index\n sys.nextIndex = sysenv.nextIndex\n sys.tryIndex = sysenv.tryIndex\n }\n this.setAsync = sys => {\n sys.async = true\n return sys.curSysenv\n }\n this.compAsync = (sys,sysenv) => {\n if (sys.async && sys.curSysenv != null && sysenv != null && sys.curSysenv.envid === sysenv.envid) {\n sys.async = false\n } else {\n if (sys.curSysenv == null || sysenv == null || sys.curSysenv.envid !== sysenv.envid) {\n sys.__saveSysenv(sys)\n const envid = sys.curSysenv.envid\n sys.curSysenv = sysenv\n sys.__restoreSysenv(sys)\n // console.log('switch envid '+envid+' to '+sys.curSysenv.envid)\n }\n sys.nextAsync(sys)\n }\n }\n\n this.__resetAsync(this)\n this.curSysenv = this.__generateSysenv(this)\n this