nadesiko3 3.3.65 → 3.3.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/src/nako_indent_chars.mjs +3 -0
- package/core/src/nako_indent_chars.mts +1 -0
- package/core/test/inline_indent_test.mjs +5 -0
- package/package.json +1 -1
- package/release/_hash.txt +16 -16
- package/release/_script-tags.txt +14 -14
- package/release/nako_gen_async.js +1 -1
- package/release/stats.json +1 -1
- package/release/version.js +1 -1
- package/release/wnako3.js +1 -1
- package/release/wnako3webworker.js +1 -1
- package/src/nako_version.mjs +2 -2
- package/src/nako_version.mts +2 -2
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
export function isIndentChars (ch: string): number {
|
|
5
5
|
const code = ch.charCodeAt(0)
|
|
6
6
|
// 特別なコード
|
|
7
|
+
if (ch === '\t') { return 4 }
|
|
7
8
|
if (ch === ' ' || ch === '|') { return 1 }
|
|
8
9
|
if (ch === '・' || ch === ' ') { return 2 }
|
|
9
10
|
if (ch === '⏋' || ch === '⏌') { return 2 } // 0x23CB, 0x23CC
|
|
@@ -152,6 +152,11 @@ describe('inline_indent_test', async () => {
|
|
|
152
152
|
'3回:\n' +
|
|
153
153
|
' ┗━「1」と表示。\n' +
|
|
154
154
|
'', '1\n1\n1')
|
|
155
|
+
await cmp('' +
|
|
156
|
+
'3回:\n' +
|
|
157
|
+
' 「1」と表示。\n' +
|
|
158
|
+
'\t「2」と表示。\n' +
|
|
159
|
+
'', '1\n2\n1\n2\n1\n2')
|
|
155
160
|
await cmp('' +
|
|
156
161
|
'3回:\n' +
|
|
157
162
|
' ┗━「1」と表示。\n' +
|
package/package.json
CHANGED
package/release/_hash.txt
CHANGED
|
@@ -9,10 +9,10 @@ editor.js:
|
|
|
9
9
|
sha256(base64): meY0nvrwNcht1QBIC5BP8hDvLnMGjZCTqklZ4O0ibeo=
|
|
10
10
|
sha512(base64): IckQnpyhPJ4H5l2ID6ZePflH18kAmm8e/o/tlAbwAHwzhKWQMai+L1ThLPpuKHBP/LTqBOmW0UE5MeYUtnXg4Q==
|
|
11
11
|
nako_gen_async.js:
|
|
12
|
-
md5(hex):
|
|
13
|
-
sha256(hex):
|
|
14
|
-
sha256(base64):
|
|
15
|
-
sha512(base64):
|
|
12
|
+
md5(hex): b1c581efd01bac1f3ce8f4c09362a3c0
|
|
13
|
+
sha256(hex): 2b3d669dd4ea5edfbd3a8f460f72954fbb5934f6ac705a26c726d097ee672c8d
|
|
14
|
+
sha256(base64): Kz1mndTqXt+9Oo9GD3KVT7tZNPascFomxybQl+5nLI0=
|
|
15
|
+
sha512(base64): yCOOfusBLt4RAMKDaa6K9SO4JwavUdoUHUZTusICJW0+gAGs4qWuDJyQQ8mVJ2+j4f5fNmp5XBRim/54n8Fo/w==
|
|
16
16
|
plugin_caniuse.js:
|
|
17
17
|
md5(hex): 95a7a5c98a92a46b6435e577daba3241
|
|
18
18
|
sha256(hex): 57638b3979be70b45ab8085861f6b2ece43200bd6aa92765d73caf76b9e6fea9
|
|
@@ -54,17 +54,17 @@ plugin_weykturtle3d.js:
|
|
|
54
54
|
sha256(base64): ND/1JqYrFVGTIPYsbBk+tScnF8RVzgYPM0/E2aE8GRw=
|
|
55
55
|
sha512(base64): T4B8Cvhn9j5YdMGk4rwPInfqmcXtGEjD2g6X6wSqXvYyIXuSy+t1RVf1viZ2zljHlk3wN6pwKvvg/NIJvfMAzw==
|
|
56
56
|
version.js:
|
|
57
|
-
md5(hex):
|
|
58
|
-
sha256(hex):
|
|
59
|
-
sha256(base64):
|
|
60
|
-
sha512(base64):
|
|
57
|
+
md5(hex): da7fd7706da7ecbe6b92b659a9871657
|
|
58
|
+
sha256(hex): d6c09c27b1c894754e5263f09a2bfa89014b7b097cefdc68cc21e9b5ee54071c
|
|
59
|
+
sha256(base64): 1sCcJ7HIlHVOUmPwmiv6iQFLewl879xozCHpte5UBxw=
|
|
60
|
+
sha512(base64): I3YnORTG7WAi2KXi618sTuKoR+nxnDTDyDpdAXzXbO16JCOA42ZhvO+tEuhiSoc+cv+OcReISJUW6bDaoFZvOQ==
|
|
61
61
|
wnako3.js:
|
|
62
|
-
md5(hex):
|
|
63
|
-
sha256(hex):
|
|
64
|
-
sha256(base64):
|
|
65
|
-
sha512(base64):
|
|
62
|
+
md5(hex): 09bbe6f220324b19b3fe19a2249ab63a
|
|
63
|
+
sha256(hex): ba1712a4bc1bdbc4be3d34142366fa01d6886aa512e0656540a601e46f1dba30
|
|
64
|
+
sha256(base64): uhcSpLwb28S+PTQUI2b6AdaIaqUS4GVlQKYB5G8dujA=
|
|
65
|
+
sha512(base64): Jk13yQ0OBsgGn2NWGUwrPhr/7EgXcOkfrnJtLi6Lts13b7k/uaHQriOx89uj0Z+E5PtAJuuv/cRjZet7rfAkaw==
|
|
66
66
|
wnako3webworker.js:
|
|
67
|
-
md5(hex):
|
|
68
|
-
sha256(hex):
|
|
69
|
-
sha256(base64):
|
|
70
|
-
sha512(base64):
|
|
67
|
+
md5(hex): 9b72a086332fd445ed9067e7e224daac
|
|
68
|
+
sha256(hex): 3ee2f14535f814efdd1af78794d0854d03363c9b7b5f160159da7e3ac5432573
|
|
69
|
+
sha256(base64): PuLxRTX4FO/dGveHlNCFTQM2PJt7XxYBWdp+OsVDJXM=
|
|
70
|
+
sha512(base64): PQuNXfW+5GFHwHDbYqBAnpghAyp3NOB59wuT8oJOaH+e3gUM1crtcivp2YMFO1v3Y7DM506qCnoIjXbxk1pvEA==
|
package/release/_script-tags.txt
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.
|
|
2
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.
|
|
3
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.
|
|
4
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.
|
|
5
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.
|
|
6
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.
|
|
7
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.
|
|
8
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.
|
|
9
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.
|
|
10
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.
|
|
11
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.
|
|
12
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.
|
|
13
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.
|
|
14
|
-
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.
|
|
1
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.66&f=release/command.json.js" integrity="sha512-AivQgz9aYmlGgnj6n5APSr5a77xVlEZi8YVh8OTrLTDE57FRkKKeY9DHB0mkL4CoDPaBsXjuSFIzm7rko9cZTg==" crossorigin="anonymous"></script>
|
|
2
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.66&f=release/editor.js" integrity="sha512-IckQnpyhPJ4H5l2ID6ZePflH18kAmm8e/o/tlAbwAHwzhKWQMai+L1ThLPpuKHBP/LTqBOmW0UE5MeYUtnXg4Q==" crossorigin="anonymous"></script>
|
|
3
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.66&f=release/nako_gen_async.js" integrity="sha512-yCOOfusBLt4RAMKDaa6K9SO4JwavUdoUHUZTusICJW0+gAGs4qWuDJyQQ8mVJ2+j4f5fNmp5XBRim/54n8Fo/w==" crossorigin="anonymous"></script>
|
|
4
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.66&f=release/plugin_caniuse.js" integrity="sha512-NbX6BKUNq1J8xwtv5CThQC54Lb/KxaPlimRpsF745nxqjYeuGD7S70j4yOgNm4Uwd7AN5FgezS6NDyhlvoJF2w==" crossorigin="anonymous"></script>
|
|
5
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.66&f=release/plugin_csv.js" integrity="sha512-mQvmj25L2Nc2L7gN1rTjayHVMMPhc7TCSiBsuKS4JKOQqN+91uj9qpLAOejzR1ib5jIOBdtrhN+secNTU9BJtw==" crossorigin="anonymous"></script>
|
|
6
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.66&f=release/plugin_datetime.js" integrity="sha512-1ADTZFkcfU6vpEEJZEYmIbqS6G2XViooDFD4198P61n7VKZ0PhEVj9l8ULFGrW7woSbDqfSPZmkZ7yvcRqPKYA==" crossorigin="anonymous"></script>
|
|
7
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.66&f=release/plugin_kansuji.js" integrity="sha512-tXC9Q6LejwYG+HUbXcwBHFmhwTsqiMHOBohLNcSx8b02hxk3waPUEQRWeNP7QxAFMv5BOAY+Grruf+XKmmU26g==" crossorigin="anonymous"></script>
|
|
8
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.66&f=release/plugin_markup.js" integrity="sha512-pvb+QYO9LMUH055nPJJ5QaWyEYR3wDkHHilV5LLNyxObs7enlHGiF7Jt3Csd93JTdJ3n9hxFbTqWa1QuzVmTfQ==" crossorigin="anonymous"></script>
|
|
9
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.66&f=release/plugin_turtle.js" integrity="sha512-3/BlAe3uVDBgJrgFWzLJa3bvNQVhAQuL343Icict5hI3LndcPjV6mAD8KoWRlxmF8A8S6n8eKnmrh6NFWTjyEw==" crossorigin="anonymous"></script>
|
|
10
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.66&f=release/plugin_webworker.js" integrity="sha512-JLlIg9cW9UgM2AT+qMgEuKvea3t8R+1jihhlN/QGDQe7iCaGEfXfKG5gpvRb0IUyisNfzncUN8AfLn9wyxGGiw==" crossorigin="anonymous"></script>
|
|
11
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.66&f=release/plugin_weykturtle3d.js" integrity="sha512-T4B8Cvhn9j5YdMGk4rwPInfqmcXtGEjD2g6X6wSqXvYyIXuSy+t1RVf1viZ2zljHlk3wN6pwKvvg/NIJvfMAzw==" crossorigin="anonymous"></script>
|
|
12
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.66&f=release/version.js" integrity="sha512-I3YnORTG7WAi2KXi618sTuKoR+nxnDTDyDpdAXzXbO16JCOA42ZhvO+tEuhiSoc+cv+OcReISJUW6bDaoFZvOQ==" crossorigin="anonymous"></script>
|
|
13
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.66&f=release/wnako3.js" integrity="sha512-Jk13yQ0OBsgGn2NWGUwrPhr/7EgXcOkfrnJtLi6Lts13b7k/uaHQriOx89uj0Z+E5PtAJuuv/cRjZet7rfAkaw==" crossorigin="anonymous"></script>
|
|
14
|
+
<script defer src="https://nadesi.com/v3/cdn.php?v=3.3.66&f=release/wnako3webworker.js" integrity="sha512-PQuNXfW+5GFHwHDbYqBAnpghAyp3NOB59wuT8oJOaH+e3gUM1crtcivp2YMFO1v3Y7DM506qCnoIjXbxk1pvEA==" crossorigin="anonymous"></script>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(){"use strict";var e={4228:function(e,n){n.Z={version:"3.3.65",major:3,minor:3,patch:65}},6297:function(e,n,s){s.d(n,{as:function(){return i},cg:function(){return u},ih:function(){return o},k:function(){return t},tO:function(){return a}});class t extends Error{constructor(e,n,s,t){const u=`${s||""}${void 0===t?"":`(${t+1}行目): `}`;super(`[${e}]${u}${n=n.replace(/『main__(.+?)』/g,"『$1』")}`),this.name="NakoError",this.type="NakoError",this.tag="["+e+"]",this.positionJa=u,this.msg=n}}class u extends t{constructor(e,n,s,t,u){super("字句解析エラー(内部エラー)",e,u,t),this.type="InternalLexerError",this.preprocessedCodeStartOffset=n,this.preprocessedCodeEndOffset=s,this.line=t,this.file=u}}class a extends t{constructor(e,n,s,t,u){super("字句解析エラー",e,u,t),this.type="NakoLexerError",this.startOffset=n,this.endOffset=s,this.line=t,this.file=u}}class o extends t{constructor(e,n,s,t,u){super("文法エラー",e,u,n),this.type="NakoSyntaxError",this.file=u,this.line=n,this.startOffset=s,this.endOffset=t}static fromNode(e,n,s){if(!n)return new o(e,void 0,void 0,void 0,void 0);const t="number"==typeof n.startOffset?n.startOffset:void 0,u=s&&"number"==typeof s.endOffset?s.endOffset:"number"==typeof n.endOffset?n.endOffset:void 0;return new o(e,n.line,t,u,n.file)}}class i extends t{constructor(e,n){let s,u,a,o="unknown";"string"==typeof e?o=e:e instanceof i||e instanceof t?o=e.msg:e instanceof Error&&(o="Error"===e.name?e.message:`${e.name}: ${e.message}`),void 0===n?(s=void 0,u=void 0):(a=/^l(-?\d+):(.*)$/.exec(n))?(s=parseInt(a[1]),u=a[2]):(a=/^l(-?\d+)$/.exec(n))?(s=parseInt(a[1]),u="main.nako3"):(s=0,u=n),super("実行時エラー",o,u,s),this.type="NakoRuntimeError",this.lineNo=n,this.line=s,this.file=u}}},9485:function(e,n,s){s.d(n,{Jc:function(){return a}});var t=s(6297),u=s(3221);class a{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.warnUndefinedReturnUserFunc=1,this.warnUndefinedCallingUserFunc=1,this.warnUndefinedCallingSystemFunc=1,this.warnUndefinedCalledUserFuncArgs=1}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,n=!1,s=0){if(this.speedMode.lineNumbers>0)return"";let t;if(t="number"!=typeof e.line?"unknown":"string"!=typeof e.file?`l${e.line+s}`:`l${e.line+s}:${e.file}`,!n){if(t===this.lastLineNo)return"";this.lastLineNo=t}return`__v0.line=${JSON.stringify(t)};`}varname(e){return 3===this.varslistSet.length?`__varslist[2][${JSON.stringify(e)}]`:a.isValidIdentifier(e)?e:`__vars[${JSON.stringify(e)}]`}static getFuncName(e){if(e.indexOf("__")>=0){const n=e.split("__");return`${n[0]}__${a.getFuncName(n[1])}`}let n=e.replace(/[ぁ-ん]+$/,"");return""===n&&(n=e),n}static convPrint(e){return`__print(${e});`}convRequire(e){const n=e.value;return this.convLineno(e,!1)+`__module['${n}'] = require('${n}');\n`}getDefFuncCode(e,n){let s="";s+=`const nakoVersion = { version: ${JSON.stringify(e.version)} }\n`,s+="const __self = self;\n",s+="self.__self = self;\n",s+="const __varslist = self.__varslist;\n",s+="const __module = self.__module;\n",s+="const __v0 = self.__v0 = self.__varslist[0];\n",s+="const __v1 = self.__v1 = self.__varslist[1];\n",s+="const __vars = self.__vars = self.__varslist[2];\n",s+="self.constPools = "+JSON.stringify(this.constPools)+";\n";let t="";for(const e in this.nakoFuncList){const n=this.nakoFuncList[e].fn;t+=`//[DEF_FUNC name='${e}' asyncFn=${this.nakoFuncList[e].asyncFn?"true":"false"}]\nself.__varslist[1]["${e}"]=${n};\n;//[/DEF_FUNC name='${e}']\n`}if(""!==t&&(s+="__v0.line='関数の定義';\n"+t),n.isTest){let e="const __tests = [];\n";for(const n in this.nakoTestFuncs){e+=`${this.nakoTestFuncs[n].fn};\n;`}""!==e&&(s+="__v0.line='テストの定義';\n",s+=e+"\n")}return s}addPlugin(e){return this.__self.addPlugin(e)}addPluginObject(e,n){this.__self.addPluginObject(e,n)}addPluginFile(e,n,s){this.__self.addPluginFile(e,n,s)}addFunc(e,n,s){this.__self.addFunc(e,n,s)}getFunc(e){return this.__self.getFunc(e)}registerFunction(e){if("block"!==e.type)throw t.ih.fromNode("構文解析に失敗しています。構文は必ずblockが先頭になります",e);const n=[],s=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 s=u.name.meta;this.nakoFuncList[e]={josi:s.josi,fn:()=>{},type:"func",asyncFn:u.asyncFn},n.push({name:e,node:u})}else if("speed_mode"===u.type){if(!u.block)continue;"block"===u.block.type?s(u.block):s(u)}else if("performance_monitor"===u.type){if(!u.block)continue;"block"===u.block.type?s(u.block):s(u)}}};s(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,n){const s=this.convLineno(e,!1)+this._convGen(e,!0);return n.isTest?"":s}_convGen(e,n){if(!e)return"";let s="";if(e instanceof Array){for(let t=0;t<e.length;t++){const u=e[t];s+=this._convGen(u,n)}return s}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(s+=`;__self.__modName='${u.S.filenameToModName(e.file||"")}';\n`,!e.block)return s;const t=e.block instanceof Array?e.block:[e.block];for(let e=0;e<t.length;e++){const n=t[e];s+=this._convGen(n,!1)}break;case"comment":case"eol":s+=this.convComment(e);break;case"break":s+=this.convCheckLoop(e,"break");break;case"continue":s+=this.convCheckLoop(e,"continue");break;case"end":s+="__varslist[0]['終']();";break;case"number":s+=e.value;break;case"string":s+=this.convString(e);break;case"def_local_var":s+=this.convDefLocalVar(e);break;case"def_local_varlist":s+=this.convDefLocalVarlist(e);break;case"let":s+=this.convLet(e);break;case"inc":s+=this.convInc(e);break;case"word":case"variable":s+=this.convGetVar(e);break;case"op":case"calc":s+=this.convOp(e);break;case"renbun":s+=this.convRenbun(e);break;case"not":s+="(("+this._convGen(e.value,!0)+")?0:1)";break;case"func":case"func_pointer":case"calc_func":s+=this.convCallFunc(e,n);break;case"if":s+=this.convIf(e);break;case"tikuji":s+=this.convTikuji(e);break;case"for":s+=this.convFor(e);break;case"foreach":s+=this.convForeach(e);break;case"repeat_times":s+=this.convRepeatTimes(e);break;case"speed_mode":s+=this.convSpeedMode(e,n);break;case"performance_monitor":s+=this.convPerformanceMonitor(e,n);break;case"while":s+=this.convWhile(e);break;case"atohantei":s+=this.convAtohantei(e);break;case"switch":s+=this.convSwitch(e);break;case"let_array":s+=this.convLetArray(e);break;case"配列参照":s+=this.convRefArray(e);break;case"json_array":s+=this.convJsonArray(e);break;case"json_obj":s+=this.convJsonObj(e);break;case"func_obj":s+=this.convFuncObj(e);break;case"bool":s+=e.value?"true":"false";break;case"null":s+="null";break;case"def_test":s+=this.convDefTest(e);break;case"def_func":s+=this.convDefFunc(e);break;case"return":s+=this.convReturn(e);break;case"try_except":s+=this.convTryExcept(e);break;case"require":s+=this.convRequire(e);break;default:throw new Error("System Error: unknown_type="+e.type)}return s}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 n=2;n>=0;n--)if(this.varslistSet[n].names.has(e))return{i:n,name:e,isTop:!1,js:`__varslist[${n}][${JSON.stringify(e)}]`};return null}genVar(e,n){const s=this.findVar(e),u=n.line;if(null===s){if("引数"===e||"それ"===e||"対象"===e||"対象キー"===e);else if(this.warnUndefinedVar){const s=e.replace(/^main__(.+)$/,"$1");this.__self.getLogger().warn(`変数『${s}』は定義されていません。`,n)}return this.varsSet.names.add(e),this.varname(e)}if(0===s.i){const a=this.__self.getNakoFunc(e);if(!a)return`${s.js}/*err:${u}*/`;if("const"===a.type||"var"===a.type)return s.js;if("func"===a.type){if(!a.josi||0===a.josi.length)return`(${s.js}())`;throw t.ih.fromNode(`『${e}』が複文で使われました。単文で記述してください。(v1非互換)`,n)}throw t.ih.fromNode(`『${e}』は関数であり参照できません。`,n)}return s.js}convGetVar(e){const n=e.value;return this.genVar(n,e)}convComment(e){let n=String(e.value);n=n.replace(/\n/g,"¶");const s=this.convLineno(e,!1);return""===n&&""===s?";":""===n?";"+s+"\n":";"+s+"//"+n+"\n"}convReturn(e){if(this.varsSet.names.has("!関数"))throw t.ih.fromNode("『戻る』がありますが、関数定義内のみで使用可能です。",e);const n=this.convLineno(e,!1);let s;if(e.value)s=this._convGen(e.value,!0);else{if(0!==this.speedMode.invalidSore)return n+"return;";s=this.varname("それ")}if(0===this.warnUndefinedReturnUserFunc)return n+`return ${s};`;{const t=this.constPools.length;return this.constPools.push({msg:"ユーザ関数からundefinedが返されています",file:e.file,line:e.line}),n+`return (__self.chk(${s}, ${t}));`}}convCheckLoop(e,n){if(!this.flagLoop){const s="continue"===n?"続ける":"抜ける";throw t.ih.fromNode(`『${s}』文がありますが、それは繰り返しの中で利用してください。`,e)}return this.convLineno(e)+n+";"}convDefFuncCommon(e,n){let s="",t="";if(0!==this.performanceMonitor.userFunction){let e=n;e||(void 0===this.performanceMonitor.mumeiId&&(this.performanceMonitor.mumeiId=0),this.performanceMonitor.mumeiId++,e=`anous_${this.performanceMonitor.mumeiId}`),s=`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 u="";const o=new Set;0===this.speedMode.invalidSore&&o.add("それ"),this.varsSet={isFunction:!0,names:o,readonly:new Set},this.varslistSet.push(this.varsSet),u+=" var 引数 = arguments;\n",u+=" var __vars = {};\n";const i=Array.from(this.varsSet.names.values());let r="";const c=n?e.name.meta:e.meta;for(let s=0;s<c.varnames.length;s++){const t=c.varnames[s];0===this.warnUndefinedCalledUserFuncArgs?r+=` ${this.varname(t)} = arguments[${s}];\n`:r+=n?` ${this.varname(t)} = (function(a){if(a===undefined){__self.logger.warn('ユーザ関数(${n})の引数(${this.varname(t)})にundefinedが渡されました',{file:'${e.file}',line:${e.line}});};return a;})(arguments[${s}]);\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[${s}]);\n`,this.varsSet.names.add(t)}n&&(this.usedFuncSet.add(n),this.varslistSet[1].names.add(n),void 0===this.nakoFuncList[n]&&(this.nakoFuncList[n]={josi:e.name.meta.josi,fn:()=>{},type:"func",asyncFn:!1}));const l=this.usedAsyncFn;this.usedAsyncFn=!1;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,n&&this.usedAsyncFn&&(this.nakoFuncList[n].asyncFn=!0);for(const e of Array.from(this.varsSet.names.values()))i.includes(e)||a.isValidIdentifier(e)&&(u+=` var ${e};\n`);0===this.speedMode.invalidSore&&(a.isValidIdentifier("それ")?u+=" var それ = '';\n":u+=` ${this.varname("それ")} = '';`);return r=(this.usedAsyncFn?"(async function(){\n":"(function(){\n")+s+u+(" "+this.convLineno(e,!0,1)+"\n")+r+"",r+="})",n&&(this.nakoFuncList[n].fn=r,this.nakoFuncList[n].asyncFn=this.usedAsyncFn,c.asyncFn=this.usedAsyncFn),this.usedAsyncFn=l,this.varslistSet.pop(),this.varsSet=this.varslistSet[this.varslistSet.length-1],n&&(this.__self.__varslist[1][n]=r),r}convDefTest(e){const n=e.name.value;let s=`__tests.push({ name: '${n}', f: () => {\n`;return s+=` ${this._convGen(e.block,!1)}\n}});`,this.nakoTestFuncs[n]={josi:e.name.meta.josi,fn:s,type:"test_func"},""}convDefFunc(e){if(!e.name)return"";const n=a.getFuncName(e.name.value);return this.convDefFuncCommon(e,n),""}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 n=this._convGen(e.name,!0),s=e.index;let t=n;if(!s)return t;for(let e=0;e<s.length;e++){t+="["+this._convGen(s[e],!0)+"]"}return t}convLetArray(e){const n=this._convGen(e.name,!0),s=e.index||[];let t="",u=n,a="";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]";t+=`\n/*配列初期化*/if (!(${n} instanceof Array)) { ${n} = ${e}; /*console.log('初期化:${n}')*/ };`;for(let u=0;u<s.length-1;u++){a+=`[${this._convGen(s[u],!0)}]`,t+=`\n/*配列初期化${u}*/if (!(${n}${a} instanceof Array)) { ${n}${a} = ${e}; };`}t+="\n"}for(let e=0;e<s.length;e++){u+="["+this._convGen(s[e],!0)+"]"}u+=" = "+this._convGen(e.value,!0)+";\n";return this.convLineno(e,!1)+t+u}convGenLoop(e){const n=this.flagLoop;this.flagLoop=!0;try{return this._convGen(e,!1)}finally{this.flagLoop=n}}convFor(e){let n;if(null!==e.word){const s=e.word.value;this.varsSet.names.add(s),n=this.varname(s)}else this.varsSet.names.add("dummy"),n=this.varname("dummy");const s=this.loopId++,t=`$nako_i${s}`,u=this._convGen(e.from,!0),a=this._convGen(e.to,!0);let o="1";null===e.inc&&void 0!==e.inc&&"null"!==e.inc||(o=this._convGen(e.inc,!0));const i=this.convGenLoop(e.block),r=`$nako_from${s}`,c=`$nako_to${s}`;let l="";0===this.speedMode.invalidSore&&(l=`${this.varname("それ")} = `);const f=`\n//[FOR id=${s}]\nconst ${r} = ${u};\nconst ${c} = ${a};\nif (${r} <= ${c}) { // up\n for (let ${t} = ${r}; ${t} <= ${c}; ${t}+= ${o}) {\n ${l}${n} = ${t};\n ${i}\n };\n} else { // down\n for (let ${t} = ${r}; ${t} >= ${c}; ${t}-= ${o}) {\n ${l}${n} = ${t};\n ${i}\n };\n};\n//[/FOR id=${s}]\n`;return this.convLineno(e,!1)+f}convForeach(e){let n;if(null===e.target){if(0!==this.speedMode.invalidSore)throw t.ih.fromNode("『反復』の対象がありません。",e);n=this.varname("それ")}else n=this._convGen(e.target,!0);let s='__v0["対象"]';e.name&&(s=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}=${n};\nfor (let $nako_i${a} in $nako_foreach_v${a}){\n if ($nako_foreach_v${a}.hasOwnProperty($nako_i${a})) {\n ${s} = ${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 n=this.loopId++,s=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${n} = ${s};\nfor(var $nako_i${n} = 1; $nako_i${n} <= $nako_times_v${n}; $nako_i${n}++){\n ${u}__v0["回数"] = $nako_i${n};\n `+t+"\n}\n";return this.convLineno(e,!1)+a}convSpeedMode(e,n){if(!e.options)return"";const s={...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,n)}finally{this.speedMode=s}}convPerformanceMonitor(e,n){const s={...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,n)}finally{this.performanceMonitor=s}}convWhile(e){const n=`while (${this._convGen(e.cond,!0)}){\n ${this.convGenLoop(e.block)}\n}\n`;return this.convLineno(e,!1)+n}convAtohantei(e){const n=`$nako_i${this.loopId++}`,s=this._convGen(e.cond,!0),t=`for(;;) {\n ${this.convGenLoop(e.block)}\n let ${n} = ${s};\n if (${n}) { continue } else { break }\n}\n\n`;return this.convLineno(e,!1)+t}convSwitch(e){const n=this._convGen(e.value,!0),s=e.cases||[];let t="";for(let e=0;e<s.length;e++){const n=s[e][0],u=this.convGenLoop(s[e][1]);if("違えば"===n.type)t+=" default:\n";else{t+=` case ${this._convGen(n,!0)}:\n`}t+=` ${u}\n break\n`}const u=`switch (${n}){\n${t}\n}\n`;return this.convLineno(e,!1)+u}convIf(e){const n=this._convGen(e.expr,!0),s=this._convGen(e.block,!1),t=null===e.false_block?"":"else {"+this._convGen(e.false_block,!1)+"};\n";return this.convLineno(e,!1)+`if (${n}) {\n ${s}\n}`+t+";\n"}convTikuji(e){const n=`__tikuji${this.loopId++}`;let s=`const ${n} = []\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";s+=`${n}.push(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`}s+=`// end of ${n} \n`;let u=` ${n}.splice(0);\n __v0["エラーメッセージ"]=errMsg;\n`;if(null!=e.errorBlock){u+=this._convGen(e.errorBlock,!1).replace(/\s+$/,"")+"\n"}return s+=`const ${n}__reject = function(errMsg){\n${u}};\n`,s+="__self.resolve = undefined;\n",s+=`const ${n}__resolve = function(){\n`,s+=" setTimeout(function(){\n",s+=` if (${n}.length == 0) {return}\n`,s+=` const f = ${n}.shift()\n`,s+=` f(${n}__resolve, ${n}__reject);\n`,s+=" }, 0);\n",s+="};\n",s+=`${n}__resolve()\n`,this.convLineno(e,!1)+s}convFuncGetArgsCalcType(e,n,s){const t=[],u={},a=s.args?s.args:[];for(let e=0;e<a.length;e++){const n=a[e];0===e&&null===n&&0===this.speedMode.invalidSore?(t.push(this.varname("それ")),u.sore=!0):t.push(this._convGen(n,!0))}return[t,u]}getPluginList(){const e=[];for(const n in this.__self.__module)e.push(n);return e}convCallFunc(e,n){const s=a.getFuncName(e.name),u=this.findVar(s);if(null===u)throw t.ih.fromNode(`関数『${s}』が見当たりません。有効プラグイン=[`+this.getPluginList().join(", ")+"]",e);let o;if(0===u.i){if(o=this.__self.getFunc(s),!o)throw new Error(`[System Error] 関数「${s}」NakoCompiler.nakoFuncList の不整合があります。`);if("func"!==o.type)throw t.ih.fromNode(`『${s}』は関数ではありません。`,e)}else o=this.nakoFuncList[s],void 0===o&&(o={return_none:!1});if("func_pointer"===e.type)return u.js;const i=this.convFuncGetArgsCalcType(s,o,e),r=i[0],c=i[1];this.usedFuncSet.add(s),r.push("__self");let l="function",f="",d="";if(e.setter&&(f+=";__self.isSetter = true;\n",d+=";__self.isSetter = false;\n"),0===u.i&&this.varslistSet.length>3&&!0!==o.pure&&0===this.speedMode.forcePure){const e=[];for(const n of Array.from(this.varsSet.names.values()))a.isValidIdentifier(n)&&e.push({str:JSON.stringify(n),js:this.varname(n)});f+="__self.__locals = __vars;\n";for(const n of e)f+=`__self.__locals[${n.str}] = ${n.js};\n`;for(const n of e)"それ"!==n.js&&(d+=`${n.js} = __self.__locals[${n.str}];\n`)}c.sore&&(f+="/*[sore]*/");const h=(e,n)=>{let s="";for(const t of e.split("\n"))""!==t&&(s+=" ".repeat(n)+t+"\n");return s},_={TYPEOF:!0,"変数型確認":!0};let v;if(0===this.warnUndefinedCallingUserFunc&&0!==u.i||0===this.warnUndefinedCallingSystemFunc&&0===u.i)v=r.join(",");else{const n=[];r.forEach((t=>{if("__self"===t||!0===_[s])n.push(`${t}`);else{const a=this.constPools.length;0===u.i?this.constPools.push({msg:`命令『${s}』の引数にundefinedを渡しています。`,file:e.file,line:e.line}):this.constPools.push({msg:`ユーザ関数『『${s}』の引数にundefinedを渡しています。`,file:e.file,line:e.line});const o=""===t?'""':t;n.push(`(__self.chk(${o}, ${a}))`)}})),v=n.join(", ")}let m=`${u.js}(${v})`;if(o.asyncFn&&(l=`async ${l}`,m=`await ${m}`,this.numAsyncFn++,this.usedAsyncFn=!0),0===u.i&&0!==this.performanceMonitor.systemFunctionBody){let e=s;e||(void 0===this.performanceMonitor.mumeiId&&(this.performanceMonitor.mumeiId=0),this.performanceMonitor.mumeiId++,e=`anous_${this.performanceMonitor.mumeiId}`),m=`(${l} (key, type) {\nconst sbf_start = performance.now() * 1000;\ntry {\nreturn `+m+";\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"+`}}})('${s}_body', 'sysbody')\n`}let b="";if(o.return_none)b=""===d?""===f?`${m};\n`:`${f} ${m};\n`:`${f}try {\n${h(m,1)};\n} finally {\n${h(d,1)}}\n`;else{let s="";0===this.speedMode.invalidSore&&(s=`${this.varname("それ")} = `),b=""===f&&""===d?`(${s}${m})`:""===d?`(${l}(){\n${h(`${f};\nreturn ${s} ${m}`,1)}}).call(this)`:`(${l}(){\n${h(`${f}try {\n${h(`return ${s}${m};`,1)}\n} finally {\n${h(d,1)}}`,1)}}).call(this)`,("して"===e.josi||""===e.josi&&!n)&&(b+=";\n")}return 0===u.i&&0!==this.performanceMonitor.systemFunction&&(b="(function (key, type) {\nconst sf_start = performance.now() * 1000;\ntry {\nreturn "+b+";\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"+`}}})('${s}_sys', 'system')\n`),b}convRenbun(e){const n=this._convGen(e.right,!0);return`(function(){${this._convGen(e.left,!1)}; return ${n}}).call(this)`}convOp(e){const n={"&":'+""+',eq:"==",noteq:"!=","===":"===","!==":"!==",gt:">",lt:"<",gteq:">=",lteq:"<=",and:"&&",or:"||",shift_l:"<<",shift_r:">>",shift_r0:">>>","÷":"/"};let s=e.operator||"",t=this._convGen(e.right,!0),u=this._convGen(e.left,!0);return"+"===s&&0===this.speedMode.implicitTypeCasting&&(e.left&&"number"!==e.left.type&&(u=`parseFloat(${u})`),e.right&&"number"!==e.right.type&&(t=`parseFloat(${t})`)),"^"===s?`(Math.pow(${u}, ${t}))`:"÷÷"===s?`(Math.floor(${u} / ${t}))`:(n[s]&&(s=n[s]),`(${u} ${s} ${t})`)}convInc(e){let n=null;if(0===this.speedMode.invalidSore&&(n=this.varname("それ")),e.value&&(n=this._convGen(e.value,!0)),null==n)throw t.ih.fromNode("加算する先の変数名がありません。",e);const s=e.name.value;let u=this.findVar(s),a="";if(null===u&&(this.varsSet.names.add(s),u=this.findVar(s),!u))throw new Error("『増』または『減』で変数が見当たりません。");const o=u.js;return a+=`if (typeof(${o}) === 'undefined') { ${o} = 0; }`,a+=`${o} += ${n}`,";"+this.convLineno(e,!1)+a+"\n"}convLet(e){let n=null;if(0===this.speedMode.invalidSore&&(n=this.varname("それ")),e.value&&(n=this._convGen(e.value,!0)),null==n)throw t.ih.fromNode("代入する先の変数名がありません。",e);const s=e.name.value,u=this.findVar(s);let a="";if(null===u)this.varsSet.names.add(s),a=`${this.varname(s)} = ${n};`;else{if(this.varslistSet[u.i].readonly.has(s))throw t.ih.fromNode(`定数『${s}』は既に定義済みなので、値を代入することはできません。`,e);a=`${u.js} = ${n};`}return";"+this.convLineno(e,!1)+a+"\n"}convDefLocalVar(e){const n=null===e.value?"null":this._convGen(e.value,!0),s=e.name.value,u=e.vartype;if(this.varsSet.names.has(s))throw t.ih.fromNode(`${u}『${s}』の二重定義はできません。`,e);this.varsSet.names.add(s),"定数"===u&&this.varsSet.readonly.add(s);const a=`${this.varname(s)}=${n};\n`;return this.convLineno(e,!1)+a}convDefLocalVarlist(e){let n="";const s=e.vartype,t=null===e.value?"null":this._convGen(e.value,!0);this.loopId++;const u=`$nako_i${this.loopId}`;n+=`${u}=${t}\n`,n+=`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),"定数"===s&&this.varsSet.readonly.add(t);n+=`${this.varname(t)}=${u}[${e}];\n`}return this.convLineno(e,!1)+n}convString(e){let n=""+e.value;const s=e.mode;if(n=n.replace(/\\/g,"\\\\"),n=n.replace(/"/g,'\\"'),n=n.replace(/\r/g,"\\r"),n=n.replace(/\n/g,"\\n"),"ex"===s){const s=(n,s)=>'"+'+this.genVar(s,e)+'+"';n=n.replace(/\{(.+?)\}/g,s),n=n.replace(/{(.+?)}/g,s)}return'"'+n+'"'}convTryExcept(e){const n=this._convGen(e.block,!1),s=this._convGen(e.errBlock,!1);return this.convLineno(e,!1)+`try {\n${n}\n} catch (e) {\n __v0["エラーメッセージ"] = e.message;\n;\n`+`${s}}\n`}getUsedFuncSet(){return this.usedFuncSet}getPluginInitCode(){let e="",n="";for(const e in this.__self.__module){const s=`!${e}:初期化`;this.varslistSet[0].names.has(s)&&(this.usedFuncSet.add(`!${e}:初期化`),n+=`__v0["!${e}:初期化"](__self);\n`)}return""!==n&&(e+="__v0.line='l0:プラグインの初期化';\n"+n),e}}},8775:function(e,n,s){s.d(n,{josiRE:function(){return o},removeJosiMap:function(){return a},tararebaMap:function(){return u}});const t=["について","くらい","なのか","までを","までの","による","とは","から","まで","だけ","より","ほど","など","いて","えて","きて","けて","して","って","にて","みて","めて","ねて","では","には","は~","んで","ずつ","は","を","に","へ","で","と","が","の"],u={};["でなければ","なければ","ならば","なら","たら","れば"].forEach((e=>{t.push(e),u[e]=!0}));const a={};["こと","である","です","します","でした"].forEach((e=>{t.push(e),a[e]=!0})),t.sort(((e,n)=>n.length-e.length));const o=new RegExp("^[\\t ]*("+t.join("|")+")")},3221:function(e,n,s){s.d(n,{S:function(){return b}});var t=s(7206),u=s(515);function a(e){const n=e.charCodeAt(0);return" "===e||"|"===e?1:"・"===e||" "===e||"⏋"===e||"⏌"===e||n>=9472&&n<=9599||n>=9120&&n<=9135||n>=9144&&n<=9151?2:0}var o=s(8775);const i=/^[\u3005\u4E00-\u9FCF_a-zA-Z0-9ァ-ヶー\u2460-\u24FF\u2776-\u277F\u3251-\u32BF]+/,r=/^[ぁ-ん]/,c=/^[ぁ-ん]+$/,l=/^.+(以上|以下|超|未満)$/,f=e=>function(){throw new Error("突然の『"+e+"』があります。")},d=/^(円|ドル|元|歩|㎡|坪|度|℃|°|個|つ|本|冊|才|歳|匹|枚|皿|セット|羽|人|件|行|列|機|品|m|mm|cm|km|g|kg|t|px|dot|pt|em|b|mb|kb|gb)/,h=[{name:"ここまで",pattern:/^;;;/},{name:"eol",pattern:/^\n/},{name:"eol",pattern:/^;/},{name:"space",pattern:/^(\x20|\x09|・|⎿ |└||)+/},{name:"comma",pattern:/^,/},{name:"line_comment",pattern:/^#[^\n]*/},{name:"line_comment",pattern:/^\/\/[^\n]*/},{name:"range_comment",pattern:/^\/\*/,cbParser:function(e){let n="";let s=0;const t=(e=e.substring(2)).indexOf("*/");t<0?(n=e,e=""):(n=e.substring(0,t),e=e.substring(t+2));for(let e=0;e<n.length;e++)"\n"===n.charAt(e)&&s++;return n=n.replace(/(^\s+|\s+$)/,""),{src:e,res:n,josi:"",numEOL:s}}},{name:"def_test",pattern:/^●テスト:/},{name:"def_func",pattern:/^●/},{name:"number",pattern:/^0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)*/,readJosi:!0,cb:v},{name:"number",pattern:/^0[oO][0-7]+(_[0-7]+)*/,readJosi:!0,cb:v},{name:"number",pattern:/^0[bB][0-1]+(_[0-1]+)*/,readJosi:!0,cb:v},{name:"number",pattern:/^\d+(_\d+)*\.(\d+(_\d+)*)?([eE][+|-]?\d+(_\d+)*)?/,readJosi:!0,cb:v},{name:"number",pattern:/^\.\d+(_\d+)*([eE][+|-]?\d+(_\d+)*)?/,readJosi:!0,cb:v},{name:"number",pattern:/^\d+(_\d+)*([eE][+|-]?\d+(_\d+)*)?/,readJosi:!0,cb:v},{name:"ここから",pattern:/^(ここから),?/},{name:"ここまで",pattern:/^(ここまで|💧)/},{name:"もし",pattern:/^もしも?/},{name:"違えば",pattern:/^違(えば)?/},{name:"shift_r0",pattern:/^>>>/},{name:"shift_r",pattern:/^>>/},{name:"shift_l",pattern:/^<</},{name:"===",pattern:/^===/},{name:"!==",pattern:/^!==/},{name:"gteq",pattern:/^(≧|>=|=>)/},{name:"lteq",pattern:/^(≦|<=|=<)/},{name:"noteq",pattern:/^(≠|<>|!=)/},{name:"←",pattern:/^(←|<--)/},{name:"eq",pattern:/^(==|🟰🟰)/},{name:"eq",pattern:/^(=|🟰)/},{name:"line_comment",pattern:/^(!|💡)(インデント構文|ここまでだるい|DNCLモード|DNCL2モード|DNCL2)[^\n]*/},{name:"not",pattern:/^(!|💡)/},{name:"gt",pattern:/^>/},{name:"lt",pattern:/^</},{name:"and",pattern:/^(かつ|&&)/},{name:"or",pattern:/^(または|或いは|あるいは|\|\|)/},{name:"@",pattern:/^@/},{name:"+",pattern:/^\+/},{name:"-",pattern:/^-/},{name:"*",pattern:/^(×|\*)/},{name:"÷÷",pattern:/^÷÷/},{name:"÷",pattern:/^(÷|\/)/},{name:"%",pattern:/^%/},{name:"^",pattern:/^\^/},{name:"&",pattern:/^&/},{name:"[",pattern:/^\[/},{name:"]",pattern:/^]/,readJosi:!0},{name:"(",pattern:/^\(/},{name:")",pattern:/^\)/,readJosi:!0},{name:"|",pattern:/^\|/},{name:"string",pattern:/^🌿/,cbParser:e=>_("🌿","🌿",e)},{name:"string_ex",pattern:/^🌴/,cbParser:e=>_("🌴","🌴",e)},{name:"string_ex",pattern:/^「/,cbParser:e=>_("「","」",e)},{name:"string",pattern:/^『/,cbParser:e=>_("『","』",e)},{name:"string_ex",pattern:/^“/,cbParser:e=>_("“","”",e)},{name:"string_ex",pattern:/^"/,cbParser:e=>_('"','"',e)},{name:"string",pattern:/^'/,cbParser:e=>_("'","'",e)},{name:"」",pattern:/^」/,cbParser:f("」")},{name:"』",pattern:/^』/,cbParser:f("』")},{name:"func",pattern:/^\{関数\},?/},{name:"{",pattern:/^\{/},{name:"}",pattern:/^\}/,readJosi:!0},{name:":",pattern:/^:/},{name:"_eol",pattern:/^_\s*\n/},{name:"dec_lineno",pattern:/^‰/},{name:"word",pattern:/^[\uD800-\uDBFF][\uDC00-\uDFFF][_a-zA-Z0-9]*/,readJosi:!0},{name:"word",pattern:/^[\u1F60-\u1F6F][_a-zA-Z0-9]*/,readJosi:!0},{name:"word",pattern:/^《.+?》/,readJosi:!0},{name:"word",pattern:/^[_a-zA-Z\u3005\u4E00-\u9FCFぁ-んァ-ヶ\u2460-\u24FF\u2776-\u277F\u3251-\u32BF]/,cbParser:function(e,n=!0){let s="",t="";for(;""!==e;){if(s.length>0){const n=o.josiRE.exec(e);if(n){t=n[0].replace(/^\s+/,""),","===(e=e.substr(n[0].length)).charAt(0)&&(e=e.substr(1));break}}const n=i.exec(e);if(n){s+=n[0],e=e.substr(n[0].length);continue}if(!r.test(e))break;s+=e.charAt(0),e=e.substr(1)}/[ぁ-ん]間$/.test(s)&&(e=s.charAt(s.length-1)+e,s=s.slice(0,-1));const u=l.exec(s);u&&(e=u[1]+t+e,t="",s=s.substr(0,s.length-u[1].length));o.removeJosiMap[t]&&(t="");n&&(s=function(e){if(!r.test(e))return e.replace(/[ぁ-ん]+/g,"");if(c.test(e))return e;return e.replace(/[ぁ-ん]+$/g,"")}(s));""===s&&""!==t&&(s=t,t="");return{src:e,res:s,josi:t,numEOL:0}}}];function _(e,n,s){let t="",u="",a=0;const i=(s=s.substr(e.length)).indexOf(n);if(i<0)t=s,s="";else if(t=s.substr(0,i),s=s.substr(i+n.length),t.indexOf(e)>=0)throw"『"===e?new Error("「『」で始めた文字列の中に「『」を含めることはできません。"):new Error(`『${e}』で始めた文字列の中に『${e}』を含めることはできません。`);const r=o.josiRE.exec(s);r&&(u=r[0].replace(/^\s+/,""),","===(s=s.substr(r[0].length)).charAt(0)&&(s=s.substr(1))),o.removeJosiMap[u]&&(u="");for(let e=0;e<t.length;e++)"\n"===t.charAt(e)&&a++;return{src:s,res:t,josi:u,numEOL:a}}function v(e){return Number(e.replace(/_/g,""))}var m=s(6297);class b{constructor(e){this.logger=e,this.funclist={},this.modList=[],this.result=[],this.modName="main.nako3"}setFuncList(e){this.funclist=e}replaceTokens(e,n,s){if(this.result=e,this.modName=b.filenameToModName(s),b.preDefineFunc(e,this.logger,this.funclist),this._replaceWord(this.result),n)if(this.result.length>0){const e=this.result[this.result.length-1];this.result.push({type:"eol",line:e.line,column:0,indent:-1,file:e.file,josi:"",value:"---",startOffset:e.startOffset,endOffset:e.endOffset,rawJosi:""}),this.result.push({type:"eof",line:e.line,indent:-1,column:0,file:e.file,josi:"",value:"",startOffset:e.startOffset,endOffset:e.endOffset,rawJosi:""})}else this.result.push({type:"eol",line:0,column:0,indent:-1,file:"",josi:"",value:"---",startOffset:0,endOffset:0,rawJosi:""}),this.result.push({type:"eof",line:0,column:0,indent:-1,file:"",josi:"",value:"",startOffset:0,endOffset:0,rawJosi:""});return this.result}static preDefineFunc(e,n,s){let t=0,a=!1;const o=()=>{const n=[],s={};if("("!==e[t].type)return[];for(t++;e[t];){const u=e[t];if(t++,")"===u.type)break;"func"===u.type?a=!0:"|"!==u.type&&"comma"!==u.type&&(a&&(u.funcPointer=!0,a=!1),n.push(u),s[u.value]||(s[u.value]=[]),s[u.value].push(u.josi))}const u=[],o=[],i=[],r={};for(const e of n)if(!r[e.value]){const n=s[e.value];i.push(n),u.push(e.value),e.funcPointer?o.push(e.value):o.push(null),r[e.value]=!0}return[i,u,o]};for(;t<e.length;){const a=e[t];if("word"===a.type&&"には"===a.josi||"word"===a.type&&"は~"===a.josi){a.josi="には",e.splice(t+1,0,{type:"def_func",value:"関数",indent:a.indent,line:a.line,column:a.column,file:a.file,josi:"",startOffset:a.endOffset,endOffset:a.endOffset,rawJosi:"",tag:"無名関数"}),t++;continue}if("word"===a.type&&""===a.josi&&a.value.length>=2&&a.value.match(/回$/)){a.value=a.value.substring(0,a.value.length-1),a.endOffset||(a.endOffset=1);const n={type:"回",value:"回",indent:a.indent,line:a.line,column:a.column,file:a.file,josi:"",startOffset:a.endOffset-1,endOffset:a.endOffset,rawJosi:""};e.splice(t+1,0,n),a.endOffset--,t++}if("word"===a.type&&u.default[a.value]&&(a.type=u.default[a.value],"そう"===a.value&&(a.value="それ")),"def_test"!==a.type&&"def_func"!==a.type){t++;continue}let i=!0,r={type:"eol"};t>=1&&(r=e[t-1]),"eol"===r.type&&(i=!1);const c=a;t++;let l=[],f=[],d=[],h="",_=null;if(e[t]&&"("===e[t].type&&([l,f,d]=o()),!i&&e[t]&&"word"===e[t].type&&(_=e[t++],h=_.value),0===l.length&&e[t]&&"("===e[t].type&&([l,f,d]=o()),""!==h&&_){if(h=b.filenameToModName(a.file)+"__"+h,h in s){const e=h.replace(/^main__/,"");n.warn(`関数『${e}』は既に定義されています。`,c)}_.value=h,s[h]={type:"func",josi:l,fn:null,asyncFn:!1,varnames:f,funcPointers:d}}c.meta={type:"func",josi:l,varnames:f,funcPointers:d}}}splitStringEx(e){const n=[],s=e.split(/[{{]/);n.push(s[0]);for(const e of s.slice(1)){const s=e.replace("}","}").indexOf("}");if(-1===s)return null;n.push(e.slice(0,s),e.slice(s+1))}return n}_replaceWord(e){let n=[],s=0;const u=e.length>0?b.filenameToModName(e[0].file):"main.nako3";for(;s<e.length;){const a=e[s];if("word"===a.type&&"それ"!==a.value){const e=a.value;if(e.indexOf("__")<0){const n=`${u}__${e}`,s=this.funclist[n];if(s&&"func"===s.type){a.type="func",a.meta=s,a.value=n;continue}for(const n of this.modList){const s=`${n}__${e}`,t=this.funclist[s];if(t&&"func"===t.type){a.type="func",a.meta=t,a.value=s;break}}if("func"===a.type)continue}const n=this.funclist[e];n&&"func"===n.type&&(a.type="func",a.meta=n)}if("-"===a.type&&e[s+1]&&"number"===e[s+1].type){const n=s<=0?"eol":e[s-1].type;("eol"===n||t.bW[n]||""!==e[s-1].josi)&&(e.splice(s,1),e[s].value*=-1)}if(void 0===a.josi&&(a.josi=""),"は"!==a.josi)if("とは"!==a.josi)if(o.tararebaMap[a.josi]){const n="でなければ"===a.josi||"なければ"===a.josi?"でなければ":"ならば";a.rawJosi||(a.rawJosi=n);const t=void 0===a.endOffset?void 0:a.endOffset-a.rawJosi.length;e.splice(s+1,0,{type:"ならば",value:n,indent:a.indent,line:a.line,column:a.column,file:a.file,startOffset:t,endOffset:a.endOffset,josi:"",rawJosi:""}),a.josi=a.rawJosi="",a.endOffset=t,s+=2}else"_eol"!==a.type?"line_comment"!==a.type&&"range_comment"!==a.type?("eol"===a.type&&(a.value=n.join("/"),n=[]),s++):(n.push(a.value),e.splice(s,1)):e.splice(s,1);else{a.rawJosi||(a.rawJosi=a.josi);const n=void 0===a.endOffset?void 0:a.endOffset-a.rawJosi.length;e.splice(s+1,0,{type:a.josi,indent:a.indent,line:a.line,column:a.column,file:a.file,startOffset:n,endOffset:a.endOffset,josi:"",rawJosi:"",value:void 0}),a.josi=a.rawJosi="",a.endOffset=n,s+=2}else{a.rawJosi||(a.rawJosi=a.josi);const n=void 0===a.endOffset?void 0:a.endOffset-a.rawJosi.length;e.splice(s+1,0,{type:"eq",indent:a.indent,line:a.line,column:a.column,file:a.file,startOffset:n,endOffset:a.endOffset,josi:"",rawJosi:"",value:void 0}),s+=2,a.josi=a.rawJosi="",a.endOffset=n}}}countIndent(e){let n=0;for(let s=0;s<e.length;s++){const t=a(e.charAt(s));if(0===t)return[n,s];n+=t}return[n,e.length]}tokenize(e,n,s){const t=e.length,u=[];let a,i,r=1,c=!1,l=0;const f=this.countIndent(e);for(l=f[0],e=e.substring(f[1]),r+=f[1];""!==e;){let f=!1;for(const _ of h){const h=_.pattern.exec(e);if(!h)continue;if(f=!0,"space"===_.name){r+=h[0].length,e=e.substring(h[0].length);continue}if(_.cbParser){let o;if(c&&"word"===_.name)o=_.cbParser(e,!1);else try{o=_.cbParser(e)}catch(u){throw new m.tO(u.message,t-e.length,t-e.length+1,n,s)}if("string_ex"===_.name){const a=this.splitStringEx(o.res);if(null===a)throw new m.cg("展開あり文字列で値の埋め込み{...}が対応していません。",t-e.length,t-o.src.length,n,s);let i=0;for(let c=0;c<a.length;c++){const f=c===a.length-1?o.josi:"";c%2==0?(u.push({type:"string",value:a[c],file:s,josi:f,indent:l,line:n,column:r,preprocessedCodeOffset:t-e.length+i,preprocessedCodeLength:a[c].length+2+f.length}),i+=a[c].length+2):(u.push({type:"&",value:"&",josi:"",indent:l,file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i,preprocessedCodeLength:0}),u.push({type:"(",value:"(",josi:"",indent:l,file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i,preprocessedCodeLength:0}),u.push({type:"code",value:a[c],josi:"",indent:l,file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i,preprocessedCodeLength:a[c].length}),u.push({type:")",value:")",josi:"",indent:l,file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i+a[c].length,preprocessedCodeLength:0}),u.push({type:"&",value:"&",josi:"",indent:l,file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i+a[c].length,preprocessedCodeLength:0}),i+=a[c].length)}n+=o.numEOL,r+=e.length-o.src.length,e=o.src,o.numEOL>0&&(r=1);break}a=r,r+=e.length-o.src.length,u.push({type:_.name,value:o.res,josi:o.josi,indent:l,line:n,column:a,file:s,preprocessedCodeOffset:t-e.length,preprocessedCodeLength:e.length-o.src.length}),e=o.src,n+=o.numEOL,o.numEOL>0&&(r=1);break}const v=t-e.length;let b=h[0];if(_.cb&&(b=_.cb(b)),a=r,i=n,r+=h[0].length,e=e.substring(h[0].length),("eol"===_.name&&"\n"===b||"_eol"===_.name)&&(b=n++,r=1),"number"===_.name){const n=d.exec(e);n&&(e=e.substring(n[0].length),r+=h[0].length)}let p="";if(_.readJosi){const n=o.josiRE.exec(e);n&&(p=n[0].replace(/^\s+/,""),r+=n[0].length,","===(e=e.substring(n[0].length)).charAt(0)&&(e=e.substring(1)),o.removeJosiMap[p]&&(p=""))}switch(_.name){case"def_test":c=!0;break;case"eol":c=!1}if("dec_lineno"!==_.name){if(u.push({type:_.name,value:b,indent:l,line:i,column:a,file:s,josi:p,preprocessedCodeOffset:v,preprocessedCodeLength:t-e.length-v}),"eol"===_.name){const n=this.countIndent(e);l=n[0],r+=n[1],e=e.substring(n[1])}break}n--}if(!f)throw new m.cg("未知の語句: "+e.substring(0,3)+"...",t-e.length,t-t+3,n,s)}return u}static tokensToTypeStr(e,n){return e.map((e=>e.type)).join(n)}static filenameToModName(e){if(!e)return"main";if((e=e.replace(/[\\:]/g,"/")).indexOf("/")>=0){const n=e.split("/");e=n[n.length-1]}return e=e.replace(/\.nako3?$/,"")}}},7206:function(e,n,s){s.d(n,{bW:function(){return t}});const t={and:1,or:1,eq:2,noteq:2,"===":2,"!==":2,gt:2,gteq:2,lt:2,lteq:2,"&":3,"+":4,"-":4,shift_l:4,shift_r:4,shift_r0:4,"*":5,"/":5,"÷":5,"÷÷":5,"%":5,"^":6},u=[];for(const e in t)u.push(e)},515:function(e,n){n.default={"回":"回","回繰返":"回","間":"間","間繰返":"間","繰返":"繰返","増繰返":"増繰返","減繰返":"減繰返","後判定":"後判定","反復":"反復","抜":"抜ける","続":"続ける","戻":"戻る","先":"先に","次":"次に","代入":"代入","実行速度優先":"実行速度優先","パフォーマンスモニタ適用":"パフォーマンスモニタ適用","定":"定める","逐次実行":"逐次実行","条件分岐":"条件分岐","増":"増","減":"減","変数":"変数","定数":"定数","エラー監視":"エラー監視","エラー":"エラー","それ":"word","そう":"word","関数":"def_func","インデント構文":"インデント構文","非同期モード":"非同期モード","DNCLモード":"DNCLモード","モード設定":"モード設定","取込":"取込"}}},n={};function s(t){var u=n[t];if(void 0!==u)return u.exports;var a=n[t]={exports:{}};return e[t](a,a.exports,s),a.exports}s.d=function(e,n){for(var t in n)s.o(n,t)&&!s.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},s.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},function(){var e=s(6297),n=s(4228),t=s(9485);const u="NOP",a="LBL",o="EOL",i="JMP",r="JMP_T",c="JMP_F",l="CALL",f="CALL_OBJ",d="RET",h="TRY",_="CODE";class v{constructor(e,n){this.type=e,this.value=n,this.no=-1,this.tag=0}}class m{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}}static generate(s,t,u){const a=new m(s);a.registerFunction(t);let o=a.convGen(t,!!u);return o=a.getDefFuncCode(u)+o,s.getLogger().trace("--- generate(非同期モード) ---\n"+o),o&&u&&(o+="\n__self._runTests(__tests);\n"),{runtimeEnv:o,standalone:`const nakoVersion = ${JSON.stringify(n.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}}convLineno(e,n){if(this.speedMode.lineNumbers>0)return"";let s;if(s="number"!=typeof e.line?"unknown":"string"!=typeof e.file?`l${e.line}`:`l${e.line}:${e.file}`,!n){if(s===this.lastLineNo)return"";this.lastLineNo=s}return`__v0.line=${JSON.stringify(s)};`}varname(e){return`sys.__vars[${JSON.stringify(e)}]`}getVarsCode(){let e="";for(const n of Array.from(this.usedFuncSet.values())){const s=this.__self.__varslist[0][n],t=`this.__varslist[0]["${n}"]`;e+="function"==typeof s?t+"="+s.toString()+";\n":t+"="+JSON.stringify(s)+";\n"}return e}getDefFuncCode(e){let n="";n+="const __self = this.__self = this;\n",n+="const __varslist = this.__varslist;\n",n+="const __module = this.__module;\n",n+="const __v0 = this.__v0 = this.__varslist[0];\n",n+="const __v1 = this.__v1 = this.__varslist[1];\n",n+="const __vars = this.__vars = this.__varslist[2];\n",n+="const __code = this.__code;\n";let s="";for(const e in this.nakoFuncList){s+=`//[DEF_FUNC name='${e}']\n__v1["${e}"]=${this.nakoFuncList[e].fn};\n;//[/DEF_FUNC name='${e}']\n`}""!==s&&(n+="__v0.line='関数の定義';\n"+s);let t="";for(const e in this.__self.__module){const n=`!${e}:初期化`;this.varslistSet[0].names.has(n)&&(this.usedFuncSet.add(`!${e}:初期化`),t+=`__v0["!${e}:初期化"](__self);\n`)}if(""!==t&&(n+="__v0.line='プラグインの初期化';\n"+t),e){let s="const __tests = [];\n";for(const n in this.nakoTestList)if(!0===e||"string"==typeof e&&e===n){s+=`${this.nakoTestList[n].fn};\n;`}""!==s&&(n+="__v0.line='テストの定義';\n",n+=s+"\n")}return n}addPlugin(e){return this.__self.addPlugin(e)}addPluginObject(e,n){this.__self.addPluginObject(e,n)}addPluginFile(e,n,s){this.__self.addPluginFile(e,n,s)}addFunc(e,n,s){this.__self.addFunc(e,n,s)}getFunc(e){return this.__self.getFunc(e)}registerFunction(n){if("block"!==n.type)throw e.ih.fromNode("構文解析に失敗しています。構文は必ずblockが先頭になります",n);const s=e=>{for(let n=0;n<e.block.length;n++){const t=e.block[n];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?s(t.block):s(t))}};s(n);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,n){this._convGen(e,!0);const s=new Set([i,r,c,l,h]);let t=this.codeArray;{t=t.filter((e=>e.type!==u));const e=new Set;t.forEach((n=>{s.has(n.type)&&e.add(n.value)})),t=t.filter((n=>n.type!==a||(15===n.tag||e.has(n.value))));let n=0;for(;n<t.length-1;)t[n].type!==o||t[n+1].type!==o?n++:t.splice(n+1,1);this.codeArray=t}t.forEach(((e,n)=>{e.type===a&&(this.labels[e.value]=n)})),t.forEach((e=>{s.has(e.type)&&e.no<0&&(e.no=this.labels[e.value])}));let v="";return t.forEach(((e,n)=>{switch(e.type){case u:v+=`case ${n}: break; // [NOP] ${e.value}\n`;break;case a:v+=`case ${n}: break; // [LABEL] ${e.value}\n`;break;case o:v+=`case ${n}: ${e.value}; break; // [EOL]\n`;break;case i:v+=`case ${n}: sys.nextIndex = ${e.no}; break; // ${e.value}\n`;break;case r:v+=`case ${n}: if (sys.__stack.pop()) { sys.nextIndex = ${e.no};} break; // ${e.value}\n`;break;case c:v+=`case ${n}: if (!sys.__stack.pop()) { sys.nextIndex = ${e.no}} break; // ${e.value}\n`;break;case d:v+=`case ${n}: sys.__return(sys); break;\n`;break;case l:v+=`case ${n}: sys.__call(${e.no}, sys); break; // ${e.value}\n`;break;case f:v+=`case ${n}: sys.__callObj('${e.value}', ${n}, sys); break; // ${e.value}\n`;break;case h:v+=`case ${n}: sys.tryIndex = ${e.no}; break; // TRY \n`;break;case _:{const s=e.value.replace(/\s+$/,"");v+=`case ${n}: {\n${s}\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.nextAsync(this)\n //-------------------------\n `,n?"":v}_convGen(n,s){let t="";if(n instanceof Array){for(let e=0;e<n.length;e++){const u=n[e];t+=this._convGen(u,s)}return t}if(null===n)return"null";if(void 0===n)return"undefined";if("object"!=typeof n)return""+n;switch(n.type){case"nop":break;case"comment":n.value||(n.value=""),this.addCode(new v(u,n.value));break;case"eol":this.addCode(new v(o,this.convLineno(n,!0)));break;case"number":this.addCodeStr(`sys.__stack.push(${n.value});//number`);break;case"string":this.convString(n);break;case"word":case"variable":this.convGetVar(n);break;case"op":case"calc":this.convOp(n);break;case"renbun":this.convRenbun(n);break;case"not":this._convGen(n.value,!0),this.addCodeStr("if (sys.__stack.length==0) throw new Error('NOTでスタックに値がありません');sys.__stack[sys.__stack.length-1] = (sys.__stack[sys.__stack.length-1]) ? 0:1");break;case"配列参照":this.convRefArray(n);break;case"json_array":this.convJsonArray(n);break;case"json_obj":this.convJsonObj(n);break;case"bool":{const e=n.value?"true":"false";this.addCodeStr(`sys.__stack.push(${e})`);break}case"null":this.addCodeStr("sys.__stack.push(null)");break;case"func":case"func_pointer":case"calc_func":this.convFunc(n,s);break;case"let":this.convLet(n);break;case"let_array":this.convLetArray(n);break;case"block":for(let e=0;e<n.block.length;e++){const s=n.block[e];this._convGen(s,!1)}break;case"if":this.convIf(n);break;case"repeat_times":this.convRepeatTimes(n);break;case"break":this.addCodeStr(this.convCheckLoop(n,"break"));break;case"continue":this.addCodeStr(this.convCheckLoop(n,"continue"));break;case"for":this.convFor(n);break;case"foreach":this.convForeach(n);break;case"while":this.convWhile(n);break;case"switch":this.convSwitch(n);break;case"return":this.convReturn(n);break;case"end":t+=this.addCodeStr("__varslist[0]['終']();");break;case"def_local_var":this.convDefLocalVar(n);break;case"def_local_varlist":t+=this.addCodeStr(this.convDefLocalVarlist(n));break;case"tikuji":throw e.ih.fromNode("「逐次実行」構文は「!非同期モード」では使えません。",n);case"speed_mode":throw e.ih.fromNode("「速度有線」構文は「!非同期モード」では使えません。",n);case"performance_monitor":this.convPerformanceMonitor(n,s);break;case"func_obj":this.convFuncObj(n);break;case"def_test":this.convDefTest(n);break;case"def_func":t+=this.addCodeStr(this.convDefFunc(n));break;case"try_except":t+=this.convTryExcept(n);break;case"require":t+=this.convRequire(n);break;default:throw new Error("System Error: unknown_type="+n.type)}return t}convRequire(e){const n=new t.Jc(this.com);return this.addCodeStr(n.convRequire(e)),""}addCodeStr(e){if(""===e)return"";const n=e.split("\n").map((e=>" "+e.replace(/\s+$/,""))),s=new v(_,n.join("\n"));return this.addCode(s)}addCode(e){return this.codeArray[this.codeId]=e,this.codeId++,""}makeLabel(e){const n=e+"_"+this.loopId++;return this.makeLabelDirectly(n)}makeLabelDirectly(e){const n=new v(a,e);return this.labels[e]=-1,n}makeJump(e){return new v(i,e.value)}makeJumpIfTrue(e){return new v(r,e.value)}makeJumpIfFalse(e){return new v(c,e.value)}convIf(e){const n=this.makeLabel("もし:ここから"),s=this.makeLabel("もし:ここまで"),t=this.makeLabel("もし:違えば");return this.addCode(n),this._convGen(e.expr,!0),this.addCode(this.makeJumpIfFalse(t)),this._convGen(e.block,!1),this.addCode(this.makeJump(s)),this.addCode(t),e.falseBlock&&this._convGen(e.falseBlock,!1),this.addCode(s),""}convRepeatTimes(e){this.flagLoop=!0,this.varsSet.names.add("回数"),this.varsSet.readonly.add("回数");const n=`sys.__tmp_i${this.loopId}`;this.loopId++;const s=`sys.__tmp_count${this.loopId}`;this.loopId++,this._convGen(e.value,!0),this.addCodeStr(`${s} = sys.__stack.pop(); ${n} = 0;`);const t=this.makeLabel("回:条件チェック");this.addCode(t);const u=this.makeLabel("回:ここまで");this.labelBreak=u,this.labelContinue=t;const a=`sys.__vars["回数"] = ++${n}\nsys.__stack.push(${n} > ${s})\n`;return this.addCodeStr(a),this.addCode(this.makeJumpIfTrue(u)),this.convGenLoop(e.block),this.addCode(this.makeJump(t)),this.addCode(u),this.flagLoop=!1,""}findVar(e){if(this.varsSet.names.has(e))return{i:this.varslistSet.length-1,name:e,isTop:!0,js:`sys.__vars[${JSON.stringify(e)}]`};for(let n=2;n>=0;n--)if(this.varslistSet[n].names.has(e))return{i:n,name:e,isTop:!1,js:`sys.__varslist[${n}][${JSON.stringify(e)}]`};return null}genVar(n,s){const t=this.findVar(n),u=s.line;if(null===t)return"引数"===n||"それ"===n||"対象"===n||"対象キー"===n||"回数"===n||this.__self.getLogger().warn(`変数『${n}』は定義されていません。`,s),this.varsSet.names.add(n),this.varname(n);if(0===t.i){const a=this.__self.getFunc(n);if(!a)return`${t.js}/*err:${u}*/`;if("const"===a.type||"var"===a.type)return t.js;if("func"===a.type){if(!a.josi)throw new Error("[System Error]");if(0===a.josi.length)return`(${t.js}())`;throw e.ih.fromNode(`『${n}』が複文で使われました。単文で記述してください。(v1非互換)`,s)}throw e.ih.fromNode(`『${n}』は関数であり参照できません。`,s)}return t.js}convGetVar(e){const n=e.value;let s=`sys.__vars[${JSON.stringify(n)}]`;const t=this.findVar(n);null!=t&&(s=t.js),this.addCodeStr(`sys.__stack.push(${s});`)}convComment(e){let n=String(e.value);n=n.replace(/\n/g,"¶");const s=this.convLineno(e,!1);return""===n&&""===s?";":""===n?";"+s+"\n":";"+s+"//"+n+"\n"}convReturn(n){if(this.varsSet.names.has("!関数"))throw e.ih.fromNode("『戻る』がありますが、関数定義内のみで使用可能です。",n);return n.value&&(this._convGen(n.value,!0),this.addCodeStr('sys.__vars["それ"] = sys.__stack.pop()')),this.addCode(new v(d,"")),""}convCheckLoop(n,s){if(!this.flagLoop){const t="continue"===s?"続ける":"抜ける";throw e.ih.fromNode(`『${t}』文がありますが、それは繰り返しの中で利用してください。`,n)}return"continue"===s?this.labelContinue&&this.addCode(this.makeJump(this.labelContinue)):this.labelBreak&&this.addCode(this.makeJump(this.labelBreak)),""}convDefFuncCommon(e,n){const s=""===n;let t=n;s&&(t="無名関数:"+this.loopId++);const u=this.makeLabel(`関数「${t}」:ここまで`);this.addCode(this.makeJump(u));const a=this.makeLabelDirectly(t);a.tag=15,this.addCode(a);const o=new Set;this.varsSet={isFunction:!0,names:o,readonly:new Set},this.varsSet.names.add("それ"),this.varslistSet.push(this.varsSet);const i=s?e.meta:e.name.meta;let r="",c="";r+=`//関数『${t}』の初期化処理\n`,r+="// 引数をローカル変数として登録\n";for(let e=i.varnames.length-1;e>=0;e--){const n=i.varnames[e];r+=` ${this.varname(n)} = sys.__stack.pop();\n`,this.varsSet.names.add(n),c+=""}return r+="// ここまで:引数をローカル変数として登録\n",this.addCodeStr(r),this.usedFuncSet.add(t),this.varslistSet[1].names.add(t),this.nakoFuncList[t]={josi:i.josi,fn:`(function(){\n const sys = (arguments.length > 0) ? arguments[arguments.length-1] : {}; \n if (sys.newenv) { \n sys.newenv = false\n sys.__callNakoCodeEntry(sys.__labels['${t}'], sys);\n } else {\n `+c+"\n"+` sys.__callNakoCode(sys.__labels['${t}'], sys.nextIndex, sys);\n if (!sys.inLoop) { sys.nextAsync(sys) }\n } })`,type:"func"},this._convGen(e.block,!1),this.varslistSet.pop(),this.varsSet=this.varslistSet[this.varslistSet.length-1],this.__self.__varslist[1][t]=function(){},this.addCode(new v(d,"")),this.addCode(u),n||this.addCodeStr(`sys.__stack.push('${t}')`),""}convDefTest(n){throw e.ih.fromNode("テスト構文は!非同期モードでは使えません。",n)}convDefFunc(e){const n=t.Jc.getFuncName(e.name.value);return this.convDefFuncCommon(e,n),""}convFuncObj(e){return this.convDefFuncCommon(e,"")}convJsonObj(e){const n=e.value,s="sys.__tmp_obj"+this.loopId++;return this.addCodeStr(s+"={}; // convJsonObj::ここから"),n.forEach((e=>{this._convGen(e.value,!0),this._convGen(e.key,!0),this.addCodeStr(`${s}[sys.__stack.pop()]=sys.__stack.pop()`)})),this.addCodeStr(`this.__stack.push(${s}); delete $objName; // convJsonObj::ここまで`),""}convJsonArray(e){const n=e.value;this.addCode(this.makeLabel("convJsonArray::ここから")),n.forEach((e=>this._convGen(e,!0)));const s=n.length;return this.addCodeStr(`sys.__stack.push(sys.__stack.splice(sys.__stack.length-${s},${s}))`),""}convRefArray(e){this._convGen(e.name,!0);const n=e.index;for(let e=0;e<n.length;e++)this._convGen(n[e],!0),this.addCodeStr("const idx = sys.__stack.pop();\nconst obj = sys.__stack.pop();\nsys.__stack.push(obj[idx]);");return""}convLetArray(e){this._convGen(e.value,!0),this._convGen(e.name,!0);const n=e.index;for(let e=0;e<n.length;e++){if(this._convGen(n[e],!0),e===n.length-1){this.addCodeStr("const idx = this.__stack.pop();const obj = this.__stack.pop();const val = this.__stack.pop();obj[idx]=val;");break}this.addCodeStr("const idx = sys.__stack.pop();\nconst obj = sys.__stack.pop();\nsys.__stack.push(obj[idx]);")}return""}convGenLoop(e){const n=this.flagLoop;this.flagLoop=!0;try{return this._convGen(e,!1)}finally{this.flagLoop=n}}convFor(e){let n;if(this.flagLoop=!0,null!==e.word){const s=e.word.value;this.varsSet.names.add(s),n=this.varname(s)}else this.varsSet.names.add("dummy"),n=this.varname("dummy");const s=this.varname("それ"),t=this.loopId++,u=`sys.__tmp__i${t}`,a=`sys.__tmp__to${t}`;this._convGen(e.from,!0),this._convGen(e.to,!0),this.addCodeStr(`${a}=sys.__stack.pop();${u}=sys.__stack.pop();`),this.addCodeStr(`${s} = ${n} = ${u}`);const o=this.makeLabel("繰返:条件確認"),i=this.makeLabel("繰返:加算");this.addCode(o);const r=this.makeLabel("繰返:ここまで");return this.addCodeStr(`sys.__stack.push(${n} <= ${a})`),this.addCode(this.makeJumpIfFalse(r)),this.labelContinue=i,this.labelBreak=r,this.convGenLoop(e.block),this.addCode(i),this.addCodeStr(`${s} = ++${n};`),this.addCode(this.makeJump(o)),this.addCode(r),this.addCodeStr(`delete ${u};delete ${a};//繰返:掃除`),this.flagLoop=!1,""}convForeach(n){this.flagLoop=!0;let s='__v0["対象"]';n.name&&(s=this.varname(n.name.value),this.varsSet.names.add(n.name.value));if(null===n.target)throw e.ih.fromNode("『反復』の対象がありません。",n);const t=this.varname("それ"),u="sys.__tmp__target"+this.loopId++,a="sys.__tmp__keys"+this.loopId++,o="sys.__tmp__i"+this.loopId++,i="sys.__tmp__count"+this.loopId++;this._convGen(n.target,!0);const r=`// 反復: 初期化\n${u} = sys.__stack.pop();\n${o} = 0;\nif (typeof(${u}) == 'string' || typeof(${u}) == 'number') { ${u} = [${u}]; }\nif (${u} instanceof Array) { ${i} = ${u}.length; }\nelse { // キーの一覧を得る\n ${a} = Object.keys(${u}); \n // hasOwnPropertyがfalseならばkeyを消す処理\n ${a} = ${a}.filter((key)=>{ return ${u}.hasOwnProperty(key) })\n ${i} = ${a}.length;\n}\n`;this.addCodeStr(r);const c=this.makeLabel("反復:条件確認"),l=this.makeLabel("反復:加算"),f=this.makeLabel("反復:ここまで");this.labelBreak=f,this.labelContinue=l,this.addCode(c);const d=`if (${u} instanceof Array) {\n ${s} = ${t} = ${u}[${o}]; __v0["対象キー"] = ${o};\n} else {\n __v0["対象キー"] = ${a}[${o}]; ${s} = ${t} = ${u}[__v0["対象キー"]];\n}\n`;return this.addCodeStr(`${d}\nsys.__stack.push(${o} < ${i});`),this.addCode(this.makeJumpIfFalse(f)),this.convGenLoop(n.block),this.addCode(l),this.addCodeStr(`${o}++`),this.addCode(this.makeJump(c)),this.addCode(f),this.flagLoop=!1,""}convWhile(e){this.flagLoop=!0;const n=this.makeLabel("間:ここから"),s=this.makeLabel("間:ここまで");return this.labelContinue=n,this.labelBreak=s,this.addCode(n),this._convGen(e.cond,!0),this.addCode(this.makeJumpIfFalse(s)),this.convGenLoop(e.block),this.addCode(this.makeJump(n)),this.addCode(s),this.flagLoop=!1,""}convSpeedMode(e,n){return""}convPerformanceMonitor(e,n){const s={...this.performanceMonitor};e.options["ユーザ関数"]&&this.performanceMonitor.userFunction++,e.options["システム関数本体"]&&this.performanceMonitor.systemFunctionBody++,e.options["システム関数"]&&this.performanceMonitor.systemFunction++,this._convGen(e.block,n),this.performanceMonitor=s}convSwitch(e){this._convGen(e.value,!0);const n="sys.__tmp__i"+this.loopId++;this.addCodeStr(`${n} = sys.__stack.pop()`);const s=this.makeLabel("条件分岐:ここまで"),t=e.cases;for(let e=0;e<t.length;e++){const u=t[e][0];if("違えば"===u.type)this.convGenLoop(t[e][1]);else{const a=this.makeLabel("条件分岐:次");this._convGen(u,!0),this.addCodeStr(`sys.__stack.push(sys.__stack.pop() == ${n})`),this.addCode(this.makeJumpIfFalse(a)),this.convGenLoop(t[e][1]),this.addCode(this.makeJump(s)),this.addCode(a)}}return this.addCode(s),this.addCodeStr(`delete ${n}//条件分岐:掃除`),""}convFuncGetArgsCalcType(e,n,s){const t={};for(let e=0;e<s.args.length;e++){const n=s.args[e];0===e&&null===n?(this.addCodeStr("sys.__stack.push(sys.__vars['それ'])"),t.sore=!0):this._convGen(n,!0)}return t}getPluginList(){const e=[];for(const n in this.__self.__module)e.push(n);return e}convFunc(n,s){let u=!1,a=!1;const o=t.Jc.getFuncName(n.name),i=this.findVar(o);if(null===i)throw e.ih.fromNode(`関数『${o}』が見当たりません。有効プラグイン=[`+this.getPluginList().join(", ")+"]",n);let r;if(0===i.i){if(r=this.__self.getFunc(o),"func"!==r.type)throw e.ih.fromNode(`『${o}』は関数ではありません。`,n);u=!0}else r=this.nakoFuncList[o],void 0===r&&(a=!0,r={return_none:!1});if("func_pointer"===n.type)return i.js;const c=this.convFuncGetArgsCalcType(o,r,n);this.usedFuncSet.add(o);let d="",h="";n.setter&&(d+=";__self.isSetter = true;\n",h+=";__self.isSetter = false;\n"),c.sore&&(d+="/*[sore]*/");const _=n.args.length;let m="";u?(m+=d,m+=`const args = sys.__stack.splice(sys.__stack.length - ${_}, ${_});\n`,m+="args.push(sys);\n",m+=`const ret = ${i.js}.apply(sys, args);\n`,r.return_none||(m+="sys.__vars['それ'] = ret;\n",s&&(m+="sys.__stack.push(ret);\n")),m+=h,this.addCodeStr(m)):(a?this.addCode(new v(f,o)):this.addCode(new v(l,o)),s||this.addCodeStr("sys.__stack.pop();// 戻り値を利用しない関数呼出"))}convRenbun(e){this._convGen(e.left,!1),this._convGen(e.right,!0)}convOp(e){const n={"&":'+""+',eq:"==",noteq:"!=","===":"===","!==":"!==",gt:">",lt:"<",gteq:">=",lteq:"<=",and:"&&",or:"||",shift_l:"<<",shift_r:">>",shift_r0:">>>","÷":"/"},s=e.operator;this._convGen(e.left,!0),this._convGen(e.right,!0);let t="const rv = sys.__stack.pop();\nconst lv = sys.__stack.pop();\n";if("^"===s)t+="const v = (Math.pow(lv, rv))\n";else{t+=`const v = ((lv) ${n[s]||s} (rv));\n`}t+=`sys.__stack.push(v); //op:${s}\n`,this.addCodeStr(t)}convLet(n){let s="";null===n.value?this.addCodeStr("sys.__stack.push(sys.__vars['それ'])"):this._convGen(n.value,!0);const t=n.name.value,u=this.findVar(t);if(null===u)this.varsSet.names.add(t),s=`${this.varname(t)}=sys.__stack.pop();`;else{if(this.varslistSet[u.i].readonly.has(t))throw e.ih.fromNode(`定数『${t}』は既に定義済みなので、値を代入することはできません。`,n);s=`${u.js}=sys.__stack.pop();`}this.addCodeStr(s+"//let")}convDefLocalVar(n){null===n.value?this.addCodeStr("sys.__stack.push(null)"):this._convGen(n.value,!0);const s=n.name.value,t=n.vartype;if(this.varsSet.names.has(s))throw e.ih.fromNode(`${t}『${s}』の二重定義はできません。`,n);return this.varsSet.names.add(s),"定数"===t&&this.varsSet.readonly.add(s),this.addCodeStr(`${this.varname(s)}=sys.__stack.pop()`),""}convDefLocalVarlist(n){const s=n.vartype;null===n.value?this.addCodeStr("sys.__stack.push(null)"):this._convGen(n.value,!0);const t=`sys.__tmp_i${this.loopId}`;this.loopId++,this.addCodeStr(`${t}=sys.__stack.pop();if (!(${t} instanceof Array)) { ${t}=[${t}] }`);for(const u of n.names){const a=u.value;if(this.varsSet.names.has(a))throw e.ih.fromNode(`${s}『${a}』の二重定義はできません。`,n);this.varsSet.names.add(a),"定数"===s&&this.varsSet.readonly.add(a);const o=this.varname(a);this.addCodeStr(`${o}=${t}.pop()`)}return this.addCodeStr(`delete ${t}//複数代入:掃除`),""}convString(e){let n=""+e.value;const s=e.mode;if(n=n.replace(/\\/g,"\\\\"),n=n.replace(/"/g,'\\"'),n=n.replace(/\r/g,"\\r"),n=n.replace(/\n/g,"\\n"),"ex"===s)throw new Error("[システムエラー] ジェネレーターでの文字列の展開はサポートしていません");return this.addCodeStr(`sys.__stack.push("${n}")//string`),'"'+n+'"'}convTryExcept(e){const n=this.makeLabel("エラー監視:ならば"),s=this.makeLabel("エラー監視:ここまで");this.addCode(new v(h,n.value)),this._convGen(e.block,!1),this.addCode(this.makeJump(s)),this.addCode(n),this._convGen(e.errBlock,!1),this.addCode(s)}}if("object"==typeof navigator&&"object"==typeof navigator.nako3){const e=navigator.nako3;e.addCodeGenerator&&e.addCodeGenerator("非同期モード",m)}}()}();
|
|
1
|
+
!function(){"use strict";var e={4228:function(e,n){n.Z={version:"3.3.65",major:3,minor:3,patch:65}},6297:function(e,n,s){s.d(n,{as:function(){return i},cg:function(){return u},ih:function(){return o},k:function(){return t},tO:function(){return a}});class t extends Error{constructor(e,n,s,t){const u=`${s||""}${void 0===t?"":`(${t+1}行目): `}`;super(`[${e}]${u}${n=n.replace(/『main__(.+?)』/g,"『$1』")}`),this.name="NakoError",this.type="NakoError",this.tag="["+e+"]",this.positionJa=u,this.msg=n}}class u extends t{constructor(e,n,s,t,u){super("字句解析エラー(内部エラー)",e,u,t),this.type="InternalLexerError",this.preprocessedCodeStartOffset=n,this.preprocessedCodeEndOffset=s,this.line=t,this.file=u}}class a extends t{constructor(e,n,s,t,u){super("字句解析エラー",e,u,t),this.type="NakoLexerError",this.startOffset=n,this.endOffset=s,this.line=t,this.file=u}}class o extends t{constructor(e,n,s,t,u){super("文法エラー",e,u,n),this.type="NakoSyntaxError",this.file=u,this.line=n,this.startOffset=s,this.endOffset=t}static fromNode(e,n,s){if(!n)return new o(e,void 0,void 0,void 0,void 0);const t="number"==typeof n.startOffset?n.startOffset:void 0,u=s&&"number"==typeof s.endOffset?s.endOffset:"number"==typeof n.endOffset?n.endOffset:void 0;return new o(e,n.line,t,u,n.file)}}class i extends t{constructor(e,n){let s,u,a,o="unknown";"string"==typeof e?o=e:e instanceof i||e instanceof t?o=e.msg:e instanceof Error&&(o="Error"===e.name?e.message:`${e.name}: ${e.message}`),void 0===n?(s=void 0,u=void 0):(a=/^l(-?\d+):(.*)$/.exec(n))?(s=parseInt(a[1]),u=a[2]):(a=/^l(-?\d+)$/.exec(n))?(s=parseInt(a[1]),u="main.nako3"):(s=0,u=n),super("実行時エラー",o,u,s),this.type="NakoRuntimeError",this.lineNo=n,this.line=s,this.file=u}}},9485:function(e,n,s){s.d(n,{Jc:function(){return a}});var t=s(6297),u=s(3221);class a{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.warnUndefinedReturnUserFunc=1,this.warnUndefinedCallingUserFunc=1,this.warnUndefinedCallingSystemFunc=1,this.warnUndefinedCalledUserFuncArgs=1}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,n=!1,s=0){if(this.speedMode.lineNumbers>0)return"";let t;if(t="number"!=typeof e.line?"unknown":"string"!=typeof e.file?`l${e.line+s}`:`l${e.line+s}:${e.file}`,!n){if(t===this.lastLineNo)return"";this.lastLineNo=t}return`__v0.line=${JSON.stringify(t)};`}varname(e){return 3===this.varslistSet.length?`__varslist[2][${JSON.stringify(e)}]`:a.isValidIdentifier(e)?e:`__vars[${JSON.stringify(e)}]`}static getFuncName(e){if(e.indexOf("__")>=0){const n=e.split("__");return`${n[0]}__${a.getFuncName(n[1])}`}let n=e.replace(/[ぁ-ん]+$/,"");return""===n&&(n=e),n}static convPrint(e){return`__print(${e});`}convRequire(e){const n=e.value;return this.convLineno(e,!1)+`__module['${n}'] = require('${n}');\n`}getDefFuncCode(e,n){let s="";s+=`const nakoVersion = { version: ${JSON.stringify(e.version)} }\n`,s+="const __self = self;\n",s+="self.__self = self;\n",s+="const __varslist = self.__varslist;\n",s+="const __module = self.__module;\n",s+="const __v0 = self.__v0 = self.__varslist[0];\n",s+="const __v1 = self.__v1 = self.__varslist[1];\n",s+="const __vars = self.__vars = self.__varslist[2];\n",s+="self.constPools = "+JSON.stringify(this.constPools)+";\n";let t="";for(const e in this.nakoFuncList){const n=this.nakoFuncList[e].fn;t+=`//[DEF_FUNC name='${e}' asyncFn=${this.nakoFuncList[e].asyncFn?"true":"false"}]\nself.__varslist[1]["${e}"]=${n};\n;//[/DEF_FUNC name='${e}']\n`}if(""!==t&&(s+="__v0.line='関数の定義';\n"+t),n.isTest){let e="const __tests = [];\n";for(const n in this.nakoTestFuncs){e+=`${this.nakoTestFuncs[n].fn};\n;`}""!==e&&(s+="__v0.line='テストの定義';\n",s+=e+"\n")}return s}addPlugin(e){return this.__self.addPlugin(e)}addPluginObject(e,n){this.__self.addPluginObject(e,n)}addPluginFile(e,n,s){this.__self.addPluginFile(e,n,s)}addFunc(e,n,s){this.__self.addFunc(e,n,s)}getFunc(e){return this.__self.getFunc(e)}registerFunction(e){if("block"!==e.type)throw t.ih.fromNode("構文解析に失敗しています。構文は必ずblockが先頭になります",e);const n=[],s=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 s=u.name.meta;this.nakoFuncList[e]={josi:s.josi,fn:()=>{},type:"func",asyncFn:u.asyncFn},n.push({name:e,node:u})}else if("speed_mode"===u.type){if(!u.block)continue;"block"===u.block.type?s(u.block):s(u)}else if("performance_monitor"===u.type){if(!u.block)continue;"block"===u.block.type?s(u.block):s(u)}}};s(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,n){const s=this.convLineno(e,!1)+this._convGen(e,!0);return n.isTest?"":s}_convGen(e,n){if(!e)return"";let s="";if(e instanceof Array){for(let t=0;t<e.length;t++){const u=e[t];s+=this._convGen(u,n)}return s}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(s+=`;__self.__modName='${u.S.filenameToModName(e.file||"")}';\n`,!e.block)return s;const t=e.block instanceof Array?e.block:[e.block];for(let e=0;e<t.length;e++){const n=t[e];s+=this._convGen(n,!1)}break;case"comment":case"eol":s+=this.convComment(e);break;case"break":s+=this.convCheckLoop(e,"break");break;case"continue":s+=this.convCheckLoop(e,"continue");break;case"end":s+="__varslist[0]['終']();";break;case"number":s+=e.value;break;case"string":s+=this.convString(e);break;case"def_local_var":s+=this.convDefLocalVar(e);break;case"def_local_varlist":s+=this.convDefLocalVarlist(e);break;case"let":s+=this.convLet(e);break;case"inc":s+=this.convInc(e);break;case"word":case"variable":s+=this.convGetVar(e);break;case"op":case"calc":s+=this.convOp(e);break;case"renbun":s+=this.convRenbun(e);break;case"not":s+="(("+this._convGen(e.value,!0)+")?0:1)";break;case"func":case"func_pointer":case"calc_func":s+=this.convCallFunc(e,n);break;case"if":s+=this.convIf(e);break;case"tikuji":s+=this.convTikuji(e);break;case"for":s+=this.convFor(e);break;case"foreach":s+=this.convForeach(e);break;case"repeat_times":s+=this.convRepeatTimes(e);break;case"speed_mode":s+=this.convSpeedMode(e,n);break;case"performance_monitor":s+=this.convPerformanceMonitor(e,n);break;case"while":s+=this.convWhile(e);break;case"atohantei":s+=this.convAtohantei(e);break;case"switch":s+=this.convSwitch(e);break;case"let_array":s+=this.convLetArray(e);break;case"配列参照":s+=this.convRefArray(e);break;case"json_array":s+=this.convJsonArray(e);break;case"json_obj":s+=this.convJsonObj(e);break;case"func_obj":s+=this.convFuncObj(e);break;case"bool":s+=e.value?"true":"false";break;case"null":s+="null";break;case"def_test":s+=this.convDefTest(e);break;case"def_func":s+=this.convDefFunc(e);break;case"return":s+=this.convReturn(e);break;case"try_except":s+=this.convTryExcept(e);break;case"require":s+=this.convRequire(e);break;default:throw new Error("System Error: unknown_type="+e.type)}return s}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 n=2;n>=0;n--)if(this.varslistSet[n].names.has(e))return{i:n,name:e,isTop:!1,js:`__varslist[${n}][${JSON.stringify(e)}]`};return null}genVar(e,n){const s=this.findVar(e),u=n.line;if(null===s){if("引数"===e||"それ"===e||"対象"===e||"対象キー"===e);else if(this.warnUndefinedVar){const s=e.replace(/^main__(.+)$/,"$1");this.__self.getLogger().warn(`変数『${s}』は定義されていません。`,n)}return this.varsSet.names.add(e),this.varname(e)}if(0===s.i){const a=this.__self.getNakoFunc(e);if(!a)return`${s.js}/*err:${u}*/`;if("const"===a.type||"var"===a.type)return s.js;if("func"===a.type){if(!a.josi||0===a.josi.length)return`(${s.js}())`;throw t.ih.fromNode(`『${e}』が複文で使われました。単文で記述してください。(v1非互換)`,n)}throw t.ih.fromNode(`『${e}』は関数であり参照できません。`,n)}return s.js}convGetVar(e){const n=e.value;return this.genVar(n,e)}convComment(e){let n=String(e.value);n=n.replace(/\n/g,"¶");const s=this.convLineno(e,!1);return""===n&&""===s?";":""===n?";"+s+"\n":";"+s+"//"+n+"\n"}convReturn(e){if(this.varsSet.names.has("!関数"))throw t.ih.fromNode("『戻る』がありますが、関数定義内のみで使用可能です。",e);const n=this.convLineno(e,!1);let s;if(e.value)s=this._convGen(e.value,!0);else{if(0!==this.speedMode.invalidSore)return n+"return;";s=this.varname("それ")}if(0===this.warnUndefinedReturnUserFunc)return n+`return ${s};`;{const t=this.constPools.length;return this.constPools.push({msg:"ユーザ関数からundefinedが返されています",file:e.file,line:e.line}),n+`return (__self.chk(${s}, ${t}));`}}convCheckLoop(e,n){if(!this.flagLoop){const s="continue"===n?"続ける":"抜ける";throw t.ih.fromNode(`『${s}』文がありますが、それは繰り返しの中で利用してください。`,e)}return this.convLineno(e)+n+";"}convDefFuncCommon(e,n){let s="",t="";if(0!==this.performanceMonitor.userFunction){let e=n;e||(void 0===this.performanceMonitor.mumeiId&&(this.performanceMonitor.mumeiId=0),this.performanceMonitor.mumeiId++,e=`anous_${this.performanceMonitor.mumeiId}`),s=`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 u="";const o=new Set;0===this.speedMode.invalidSore&&o.add("それ"),this.varsSet={isFunction:!0,names:o,readonly:new Set},this.varslistSet.push(this.varsSet),u+=" var 引数 = arguments;\n",u+=" var __vars = {};\n";const i=Array.from(this.varsSet.names.values());let r="";const c=n?e.name.meta:e.meta;for(let s=0;s<c.varnames.length;s++){const t=c.varnames[s];0===this.warnUndefinedCalledUserFuncArgs?r+=` ${this.varname(t)} = arguments[${s}];\n`:r+=n?` ${this.varname(t)} = (function(a){if(a===undefined){__self.logger.warn('ユーザ関数(${n})の引数(${this.varname(t)})にundefinedが渡されました',{file:'${e.file}',line:${e.line}});};return a;})(arguments[${s}]);\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[${s}]);\n`,this.varsSet.names.add(t)}n&&(this.usedFuncSet.add(n),this.varslistSet[1].names.add(n),void 0===this.nakoFuncList[n]&&(this.nakoFuncList[n]={josi:e.name.meta.josi,fn:()=>{},type:"func",asyncFn:!1}));const l=this.usedAsyncFn;this.usedAsyncFn=!1;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,n&&this.usedAsyncFn&&(this.nakoFuncList[n].asyncFn=!0);for(const e of Array.from(this.varsSet.names.values()))i.includes(e)||a.isValidIdentifier(e)&&(u+=` var ${e};\n`);0===this.speedMode.invalidSore&&(a.isValidIdentifier("それ")?u+=" var それ = '';\n":u+=` ${this.varname("それ")} = '';`);return r=(this.usedAsyncFn?"(async function(){\n":"(function(){\n")+s+u+(" "+this.convLineno(e,!0,1)+"\n")+r+"",r+="})",n&&(this.nakoFuncList[n].fn=r,this.nakoFuncList[n].asyncFn=this.usedAsyncFn,c.asyncFn=this.usedAsyncFn),this.usedAsyncFn=l,this.varslistSet.pop(),this.varsSet=this.varslistSet[this.varslistSet.length-1],n&&(this.__self.__varslist[1][n]=r),r}convDefTest(e){const n=e.name.value;let s=`__tests.push({ name: '${n}', f: () => {\n`;return s+=` ${this._convGen(e.block,!1)}\n}});`,this.nakoTestFuncs[n]={josi:e.name.meta.josi,fn:s,type:"test_func"},""}convDefFunc(e){if(!e.name)return"";const n=a.getFuncName(e.name.value);return this.convDefFuncCommon(e,n),""}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 n=this._convGen(e.name,!0),s=e.index;let t=n;if(!s)return t;for(let e=0;e<s.length;e++){t+="["+this._convGen(s[e],!0)+"]"}return t}convLetArray(e){const n=this._convGen(e.name,!0),s=e.index||[];let t="",u=n,a="";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]";t+=`\n/*配列初期化*/if (!(${n} instanceof Array)) { ${n} = ${e}; /*console.log('初期化:${n}')*/ };`;for(let u=0;u<s.length-1;u++){a+=`[${this._convGen(s[u],!0)}]`,t+=`\n/*配列初期化${u}*/if (!(${n}${a} instanceof Array)) { ${n}${a} = ${e}; };`}t+="\n"}for(let e=0;e<s.length;e++){u+="["+this._convGen(s[e],!0)+"]"}u+=" = "+this._convGen(e.value,!0)+";\n";return this.convLineno(e,!1)+t+u}convGenLoop(e){const n=this.flagLoop;this.flagLoop=!0;try{return this._convGen(e,!1)}finally{this.flagLoop=n}}convFor(e){let n;if(null!==e.word){const s=e.word.value;this.varsSet.names.add(s),n=this.varname(s)}else this.varsSet.names.add("dummy"),n=this.varname("dummy");const s=this.loopId++,t=`$nako_i${s}`,u=this._convGen(e.from,!0),a=this._convGen(e.to,!0);let o="1";null===e.inc&&void 0!==e.inc&&"null"!==e.inc||(o=this._convGen(e.inc,!0));const i=this.convGenLoop(e.block),r=`$nako_from${s}`,c=`$nako_to${s}`;let l="";0===this.speedMode.invalidSore&&(l=`${this.varname("それ")} = `);const f=`\n//[FOR id=${s}]\nconst ${r} = ${u};\nconst ${c} = ${a};\nif (${r} <= ${c}) { // up\n for (let ${t} = ${r}; ${t} <= ${c}; ${t}+= ${o}) {\n ${l}${n} = ${t};\n ${i}\n };\n} else { // down\n for (let ${t} = ${r}; ${t} >= ${c}; ${t}-= ${o}) {\n ${l}${n} = ${t};\n ${i}\n };\n};\n//[/FOR id=${s}]\n`;return this.convLineno(e,!1)+f}convForeach(e){let n;if(null===e.target){if(0!==this.speedMode.invalidSore)throw t.ih.fromNode("『反復』の対象がありません。",e);n=this.varname("それ")}else n=this._convGen(e.target,!0);let s='__v0["対象"]';e.name&&(s=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}=${n};\nfor (let $nako_i${a} in $nako_foreach_v${a}){\n if ($nako_foreach_v${a}.hasOwnProperty($nako_i${a})) {\n ${s} = ${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 n=this.loopId++,s=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${n} = ${s};\nfor(var $nako_i${n} = 1; $nako_i${n} <= $nako_times_v${n}; $nako_i${n}++){\n ${u}__v0["回数"] = $nako_i${n};\n `+t+"\n}\n";return this.convLineno(e,!1)+a}convSpeedMode(e,n){if(!e.options)return"";const s={...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,n)}finally{this.speedMode=s}}convPerformanceMonitor(e,n){const s={...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,n)}finally{this.performanceMonitor=s}}convWhile(e){const n=`while (${this._convGen(e.cond,!0)}){\n ${this.convGenLoop(e.block)}\n}\n`;return this.convLineno(e,!1)+n}convAtohantei(e){const n=`$nako_i${this.loopId++}`,s=this._convGen(e.cond,!0),t=`for(;;) {\n ${this.convGenLoop(e.block)}\n let ${n} = ${s};\n if (${n}) { continue } else { break }\n}\n\n`;return this.convLineno(e,!1)+t}convSwitch(e){const n=this._convGen(e.value,!0),s=e.cases||[];let t="";for(let e=0;e<s.length;e++){const n=s[e][0],u=this.convGenLoop(s[e][1]);if("違えば"===n.type)t+=" default:\n";else{t+=` case ${this._convGen(n,!0)}:\n`}t+=` ${u}\n break\n`}const u=`switch (${n}){\n${t}\n}\n`;return this.convLineno(e,!1)+u}convIf(e){const n=this._convGen(e.expr,!0),s=this._convGen(e.block,!1),t=null===e.false_block?"":"else {"+this._convGen(e.false_block,!1)+"};\n";return this.convLineno(e,!1)+`if (${n}) {\n ${s}\n}`+t+";\n"}convTikuji(e){const n=`__tikuji${this.loopId++}`;let s=`const ${n} = []\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";s+=`${n}.push(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`}s+=`// end of ${n} \n`;let u=` ${n}.splice(0);\n __v0["エラーメッセージ"]=errMsg;\n`;if(null!=e.errorBlock){u+=this._convGen(e.errorBlock,!1).replace(/\s+$/,"")+"\n"}return s+=`const ${n}__reject = function(errMsg){\n${u}};\n`,s+="__self.resolve = undefined;\n",s+=`const ${n}__resolve = function(){\n`,s+=" setTimeout(function(){\n",s+=` if (${n}.length == 0) {return}\n`,s+=` const f = ${n}.shift()\n`,s+=` f(${n}__resolve, ${n}__reject);\n`,s+=" }, 0);\n",s+="};\n",s+=`${n}__resolve()\n`,this.convLineno(e,!1)+s}convFuncGetArgsCalcType(e,n,s){const t=[],u={},a=s.args?s.args:[];for(let e=0;e<a.length;e++){const n=a[e];0===e&&null===n&&0===this.speedMode.invalidSore?(t.push(this.varname("それ")),u.sore=!0):t.push(this._convGen(n,!0))}return[t,u]}getPluginList(){const e=[];for(const n in this.__self.__module)e.push(n);return e}convCallFunc(e,n){const s=a.getFuncName(e.name),u=this.findVar(s);if(null===u)throw t.ih.fromNode(`関数『${s}』が見当たりません。有効プラグイン=[`+this.getPluginList().join(", ")+"]",e);let o;if(0===u.i){if(o=this.__self.getFunc(s),!o)throw new Error(`[System Error] 関数「${s}」NakoCompiler.nakoFuncList の不整合があります。`);if("func"!==o.type)throw t.ih.fromNode(`『${s}』は関数ではありません。`,e)}else o=this.nakoFuncList[s],void 0===o&&(o={return_none:!1});if("func_pointer"===e.type)return u.js;const i=this.convFuncGetArgsCalcType(s,o,e),r=i[0],c=i[1];this.usedFuncSet.add(s),r.push("__self");let l="function",f="",d="";if(e.setter&&(f+=";__self.isSetter = true;\n",d+=";__self.isSetter = false;\n"),0===u.i&&this.varslistSet.length>3&&!0!==o.pure&&0===this.speedMode.forcePure){const e=[];for(const n of Array.from(this.varsSet.names.values()))a.isValidIdentifier(n)&&e.push({str:JSON.stringify(n),js:this.varname(n)});f+="__self.__locals = __vars;\n";for(const n of e)f+=`__self.__locals[${n.str}] = ${n.js};\n`;for(const n of e)"それ"!==n.js&&(d+=`${n.js} = __self.__locals[${n.str}];\n`)}c.sore&&(f+="/*[sore]*/");const h=(e,n)=>{let s="";for(const t of e.split("\n"))""!==t&&(s+=" ".repeat(n)+t+"\n");return s},_={TYPEOF:!0,"変数型確認":!0};let v;if(0===this.warnUndefinedCallingUserFunc&&0!==u.i||0===this.warnUndefinedCallingSystemFunc&&0===u.i)v=r.join(",");else{const n=[];r.forEach((t=>{if("__self"===t||!0===_[s])n.push(`${t}`);else{const a=this.constPools.length;0===u.i?this.constPools.push({msg:`命令『${s}』の引数にundefinedを渡しています。`,file:e.file,line:e.line}):this.constPools.push({msg:`ユーザ関数『『${s}』の引数にundefinedを渡しています。`,file:e.file,line:e.line});const o=""===t?'""':t;n.push(`(__self.chk(${o}, ${a}))`)}})),v=n.join(", ")}let m=`${u.js}(${v})`;if(o.asyncFn&&(l=`async ${l}`,m=`await ${m}`,this.numAsyncFn++,this.usedAsyncFn=!0),0===u.i&&0!==this.performanceMonitor.systemFunctionBody){let e=s;e||(void 0===this.performanceMonitor.mumeiId&&(this.performanceMonitor.mumeiId=0),this.performanceMonitor.mumeiId++,e=`anous_${this.performanceMonitor.mumeiId}`),m=`(${l} (key, type) {\nconst sbf_start = performance.now() * 1000;\ntry {\nreturn `+m+";\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"+`}}})('${s}_body', 'sysbody')\n`}let b="";if(o.return_none)b=""===d?""===f?`${m};\n`:`${f} ${m};\n`:`${f}try {\n${h(m,1)};\n} finally {\n${h(d,1)}}\n`;else{let s="";0===this.speedMode.invalidSore&&(s=`${this.varname("それ")} = `),b=""===f&&""===d?`(${s}${m})`:""===d?`(${l}(){\n${h(`${f};\nreturn ${s} ${m}`,1)}}).call(this)`:`(${l}(){\n${h(`${f}try {\n${h(`return ${s}${m};`,1)}\n} finally {\n${h(d,1)}}`,1)}}).call(this)`,("して"===e.josi||""===e.josi&&!n)&&(b+=";\n")}return 0===u.i&&0!==this.performanceMonitor.systemFunction&&(b="(function (key, type) {\nconst sf_start = performance.now() * 1000;\ntry {\nreturn "+b+";\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"+`}}})('${s}_sys', 'system')\n`),b}convRenbun(e){const n=this._convGen(e.right,!0);return`(function(){${this._convGen(e.left,!1)}; return ${n}}).call(this)`}convOp(e){const n={"&":'+""+',eq:"==",noteq:"!=","===":"===","!==":"!==",gt:">",lt:"<",gteq:">=",lteq:"<=",and:"&&",or:"||",shift_l:"<<",shift_r:">>",shift_r0:">>>","÷":"/"};let s=e.operator||"",t=this._convGen(e.right,!0),u=this._convGen(e.left,!0);return"+"===s&&0===this.speedMode.implicitTypeCasting&&(e.left&&"number"!==e.left.type&&(u=`parseFloat(${u})`),e.right&&"number"!==e.right.type&&(t=`parseFloat(${t})`)),"^"===s?`(Math.pow(${u}, ${t}))`:"÷÷"===s?`(Math.floor(${u} / ${t}))`:(n[s]&&(s=n[s]),`(${u} ${s} ${t})`)}convInc(e){let n=null;if(0===this.speedMode.invalidSore&&(n=this.varname("それ")),e.value&&(n=this._convGen(e.value,!0)),null==n)throw t.ih.fromNode("加算する先の変数名がありません。",e);const s=e.name.value;let u=this.findVar(s),a="";if(null===u&&(this.varsSet.names.add(s),u=this.findVar(s),!u))throw new Error("『増』または『減』で変数が見当たりません。");const o=u.js;return a+=`if (typeof(${o}) === 'undefined') { ${o} = 0; }`,a+=`${o} += ${n}`,";"+this.convLineno(e,!1)+a+"\n"}convLet(e){let n=null;if(0===this.speedMode.invalidSore&&(n=this.varname("それ")),e.value&&(n=this._convGen(e.value,!0)),null==n)throw t.ih.fromNode("代入する先の変数名がありません。",e);const s=e.name.value,u=this.findVar(s);let a="";if(null===u)this.varsSet.names.add(s),a=`${this.varname(s)} = ${n};`;else{if(this.varslistSet[u.i].readonly.has(s))throw t.ih.fromNode(`定数『${s}』は既に定義済みなので、値を代入することはできません。`,e);a=`${u.js} = ${n};`}return";"+this.convLineno(e,!1)+a+"\n"}convDefLocalVar(e){const n=null===e.value?"null":this._convGen(e.value,!0),s=e.name.value,u=e.vartype;if(this.varsSet.names.has(s))throw t.ih.fromNode(`${u}『${s}』の二重定義はできません。`,e);this.varsSet.names.add(s),"定数"===u&&this.varsSet.readonly.add(s);const a=`${this.varname(s)}=${n};\n`;return this.convLineno(e,!1)+a}convDefLocalVarlist(e){let n="";const s=e.vartype,t=null===e.value?"null":this._convGen(e.value,!0);this.loopId++;const u=`$nako_i${this.loopId}`;n+=`${u}=${t}\n`,n+=`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),"定数"===s&&this.varsSet.readonly.add(t);n+=`${this.varname(t)}=${u}[${e}];\n`}return this.convLineno(e,!1)+n}convString(e){let n=""+e.value;const s=e.mode;if(n=n.replace(/\\/g,"\\\\"),n=n.replace(/"/g,'\\"'),n=n.replace(/\r/g,"\\r"),n=n.replace(/\n/g,"\\n"),"ex"===s){const s=(n,s)=>'"+'+this.genVar(s,e)+'+"';n=n.replace(/\{(.+?)\}/g,s),n=n.replace(/{(.+?)}/g,s)}return'"'+n+'"'}convTryExcept(e){const n=this._convGen(e.block,!1),s=this._convGen(e.errBlock,!1);return this.convLineno(e,!1)+`try {\n${n}\n} catch (e) {\n __v0["エラーメッセージ"] = e.message;\n;\n`+`${s}}\n`}getUsedFuncSet(){return this.usedFuncSet}getPluginInitCode(){let e="",n="";for(const e in this.__self.__module){const s=`!${e}:初期化`;this.varslistSet[0].names.has(s)&&(this.usedFuncSet.add(`!${e}:初期化`),n+=`__v0["!${e}:初期化"](__self);\n`)}return""!==n&&(e+="__v0.line='l0:プラグインの初期化';\n"+n),e}}},8775:function(e,n,s){s.d(n,{josiRE:function(){return o},removeJosiMap:function(){return a},tararebaMap:function(){return u}});const t=["について","くらい","なのか","までを","までの","による","とは","から","まで","だけ","より","ほど","など","いて","えて","きて","けて","して","って","にて","みて","めて","ねて","では","には","は~","んで","ずつ","は","を","に","へ","で","と","が","の"],u={};["でなければ","なければ","ならば","なら","たら","れば"].forEach((e=>{t.push(e),u[e]=!0}));const a={};["こと","である","です","します","でした"].forEach((e=>{t.push(e),a[e]=!0})),t.sort(((e,n)=>n.length-e.length));const o=new RegExp("^[\\t ]*("+t.join("|")+")")},3221:function(e,n,s){s.d(n,{S:function(){return b}});var t=s(7206),u=s(515);function a(e){const n=e.charCodeAt(0);return"\t"===e?4:" "===e||"|"===e?1:"・"===e||" "===e||"⏋"===e||"⏌"===e||n>=9472&&n<=9599||n>=9120&&n<=9135||n>=9144&&n<=9151?2:0}var o=s(8775);const i=/^[\u3005\u4E00-\u9FCF_a-zA-Z0-9ァ-ヶー\u2460-\u24FF\u2776-\u277F\u3251-\u32BF]+/,r=/^[ぁ-ん]/,c=/^[ぁ-ん]+$/,l=/^.+(以上|以下|超|未満)$/,f=e=>function(){throw new Error("突然の『"+e+"』があります。")},d=/^(円|ドル|元|歩|㎡|坪|度|℃|°|個|つ|本|冊|才|歳|匹|枚|皿|セット|羽|人|件|行|列|機|品|m|mm|cm|km|g|kg|t|px|dot|pt|em|b|mb|kb|gb)/,h=[{name:"ここまで",pattern:/^;;;/},{name:"eol",pattern:/^\n/},{name:"eol",pattern:/^;/},{name:"space",pattern:/^(\x20|\x09|・|⎿ |└||)+/},{name:"comma",pattern:/^,/},{name:"line_comment",pattern:/^#[^\n]*/},{name:"line_comment",pattern:/^\/\/[^\n]*/},{name:"range_comment",pattern:/^\/\*/,cbParser:function(e){let n="";let s=0;const t=(e=e.substring(2)).indexOf("*/");t<0?(n=e,e=""):(n=e.substring(0,t),e=e.substring(t+2));for(let e=0;e<n.length;e++)"\n"===n.charAt(e)&&s++;return n=n.replace(/(^\s+|\s+$)/,""),{src:e,res:n,josi:"",numEOL:s}}},{name:"def_test",pattern:/^●テスト:/},{name:"def_func",pattern:/^●/},{name:"number",pattern:/^0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)*/,readJosi:!0,cb:v},{name:"number",pattern:/^0[oO][0-7]+(_[0-7]+)*/,readJosi:!0,cb:v},{name:"number",pattern:/^0[bB][0-1]+(_[0-1]+)*/,readJosi:!0,cb:v},{name:"number",pattern:/^\d+(_\d+)*\.(\d+(_\d+)*)?([eE][+|-]?\d+(_\d+)*)?/,readJosi:!0,cb:v},{name:"number",pattern:/^\.\d+(_\d+)*([eE][+|-]?\d+(_\d+)*)?/,readJosi:!0,cb:v},{name:"number",pattern:/^\d+(_\d+)*([eE][+|-]?\d+(_\d+)*)?/,readJosi:!0,cb:v},{name:"ここから",pattern:/^(ここから),?/},{name:"ここまで",pattern:/^(ここまで|💧)/},{name:"もし",pattern:/^もしも?/},{name:"違えば",pattern:/^違(えば)?/},{name:"shift_r0",pattern:/^>>>/},{name:"shift_r",pattern:/^>>/},{name:"shift_l",pattern:/^<</},{name:"===",pattern:/^===/},{name:"!==",pattern:/^!==/},{name:"gteq",pattern:/^(≧|>=|=>)/},{name:"lteq",pattern:/^(≦|<=|=<)/},{name:"noteq",pattern:/^(≠|<>|!=)/},{name:"←",pattern:/^(←|<--)/},{name:"eq",pattern:/^(==|🟰🟰)/},{name:"eq",pattern:/^(=|🟰)/},{name:"line_comment",pattern:/^(!|💡)(インデント構文|ここまでだるい|DNCLモード|DNCL2モード|DNCL2)[^\n]*/},{name:"not",pattern:/^(!|💡)/},{name:"gt",pattern:/^>/},{name:"lt",pattern:/^</},{name:"and",pattern:/^(かつ|&&)/},{name:"or",pattern:/^(または|或いは|あるいは|\|\|)/},{name:"@",pattern:/^@/},{name:"+",pattern:/^\+/},{name:"-",pattern:/^-/},{name:"*",pattern:/^(×|\*)/},{name:"÷÷",pattern:/^÷÷/},{name:"÷",pattern:/^(÷|\/)/},{name:"%",pattern:/^%/},{name:"^",pattern:/^\^/},{name:"&",pattern:/^&/},{name:"[",pattern:/^\[/},{name:"]",pattern:/^]/,readJosi:!0},{name:"(",pattern:/^\(/},{name:")",pattern:/^\)/,readJosi:!0},{name:"|",pattern:/^\|/},{name:"string",pattern:/^🌿/,cbParser:e=>_("🌿","🌿",e)},{name:"string_ex",pattern:/^🌴/,cbParser:e=>_("🌴","🌴",e)},{name:"string_ex",pattern:/^「/,cbParser:e=>_("「","」",e)},{name:"string",pattern:/^『/,cbParser:e=>_("『","』",e)},{name:"string_ex",pattern:/^“/,cbParser:e=>_("“","”",e)},{name:"string_ex",pattern:/^"/,cbParser:e=>_('"','"',e)},{name:"string",pattern:/^'/,cbParser:e=>_("'","'",e)},{name:"」",pattern:/^」/,cbParser:f("」")},{name:"』",pattern:/^』/,cbParser:f("』")},{name:"func",pattern:/^\{関数\},?/},{name:"{",pattern:/^\{/},{name:"}",pattern:/^\}/,readJosi:!0},{name:":",pattern:/^:/},{name:"_eol",pattern:/^_\s*\n/},{name:"dec_lineno",pattern:/^‰/},{name:"word",pattern:/^[\uD800-\uDBFF][\uDC00-\uDFFF][_a-zA-Z0-9]*/,readJosi:!0},{name:"word",pattern:/^[\u1F60-\u1F6F][_a-zA-Z0-9]*/,readJosi:!0},{name:"word",pattern:/^《.+?》/,readJosi:!0},{name:"word",pattern:/^[_a-zA-Z\u3005\u4E00-\u9FCFぁ-んァ-ヶ\u2460-\u24FF\u2776-\u277F\u3251-\u32BF]/,cbParser:function(e,n=!0){let s="",t="";for(;""!==e;){if(s.length>0){const n=o.josiRE.exec(e);if(n){t=n[0].replace(/^\s+/,""),","===(e=e.substr(n[0].length)).charAt(0)&&(e=e.substr(1));break}}const n=i.exec(e);if(n){s+=n[0],e=e.substr(n[0].length);continue}if(!r.test(e))break;s+=e.charAt(0),e=e.substr(1)}/[ぁ-ん]間$/.test(s)&&(e=s.charAt(s.length-1)+e,s=s.slice(0,-1));const u=l.exec(s);u&&(e=u[1]+t+e,t="",s=s.substr(0,s.length-u[1].length));o.removeJosiMap[t]&&(t="");n&&(s=function(e){if(!r.test(e))return e.replace(/[ぁ-ん]+/g,"");if(c.test(e))return e;return e.replace(/[ぁ-ん]+$/g,"")}(s));""===s&&""!==t&&(s=t,t="");return{src:e,res:s,josi:t,numEOL:0}}}];function _(e,n,s){let t="",u="",a=0;const i=(s=s.substr(e.length)).indexOf(n);if(i<0)t=s,s="";else if(t=s.substr(0,i),s=s.substr(i+n.length),t.indexOf(e)>=0)throw"『"===e?new Error("「『」で始めた文字列の中に「『」を含めることはできません。"):new Error(`『${e}』で始めた文字列の中に『${e}』を含めることはできません。`);const r=o.josiRE.exec(s);r&&(u=r[0].replace(/^\s+/,""),","===(s=s.substr(r[0].length)).charAt(0)&&(s=s.substr(1))),o.removeJosiMap[u]&&(u="");for(let e=0;e<t.length;e++)"\n"===t.charAt(e)&&a++;return{src:s,res:t,josi:u,numEOL:a}}function v(e){return Number(e.replace(/_/g,""))}var m=s(6297);class b{constructor(e){this.logger=e,this.funclist={},this.modList=[],this.result=[],this.modName="main.nako3"}setFuncList(e){this.funclist=e}replaceTokens(e,n,s){if(this.result=e,this.modName=b.filenameToModName(s),b.preDefineFunc(e,this.logger,this.funclist),this._replaceWord(this.result),n)if(this.result.length>0){const e=this.result[this.result.length-1];this.result.push({type:"eol",line:e.line,column:0,indent:-1,file:e.file,josi:"",value:"---",startOffset:e.startOffset,endOffset:e.endOffset,rawJosi:""}),this.result.push({type:"eof",line:e.line,indent:-1,column:0,file:e.file,josi:"",value:"",startOffset:e.startOffset,endOffset:e.endOffset,rawJosi:""})}else this.result.push({type:"eol",line:0,column:0,indent:-1,file:"",josi:"",value:"---",startOffset:0,endOffset:0,rawJosi:""}),this.result.push({type:"eof",line:0,column:0,indent:-1,file:"",josi:"",value:"",startOffset:0,endOffset:0,rawJosi:""});return this.result}static preDefineFunc(e,n,s){let t=0,a=!1;const o=()=>{const n=[],s={};if("("!==e[t].type)return[];for(t++;e[t];){const u=e[t];if(t++,")"===u.type)break;"func"===u.type?a=!0:"|"!==u.type&&"comma"!==u.type&&(a&&(u.funcPointer=!0,a=!1),n.push(u),s[u.value]||(s[u.value]=[]),s[u.value].push(u.josi))}const u=[],o=[],i=[],r={};for(const e of n)if(!r[e.value]){const n=s[e.value];i.push(n),u.push(e.value),e.funcPointer?o.push(e.value):o.push(null),r[e.value]=!0}return[i,u,o]};for(;t<e.length;){const a=e[t];if("word"===a.type&&"には"===a.josi||"word"===a.type&&"は~"===a.josi){a.josi="には",e.splice(t+1,0,{type:"def_func",value:"関数",indent:a.indent,line:a.line,column:a.column,file:a.file,josi:"",startOffset:a.endOffset,endOffset:a.endOffset,rawJosi:"",tag:"無名関数"}),t++;continue}if("word"===a.type&&""===a.josi&&a.value.length>=2&&a.value.match(/回$/)){a.value=a.value.substring(0,a.value.length-1),a.endOffset||(a.endOffset=1);const n={type:"回",value:"回",indent:a.indent,line:a.line,column:a.column,file:a.file,josi:"",startOffset:a.endOffset-1,endOffset:a.endOffset,rawJosi:""};e.splice(t+1,0,n),a.endOffset--,t++}if("word"===a.type&&u.default[a.value]&&(a.type=u.default[a.value],"そう"===a.value&&(a.value="それ")),"def_test"!==a.type&&"def_func"!==a.type){t++;continue}let i=!0,r={type:"eol"};t>=1&&(r=e[t-1]),"eol"===r.type&&(i=!1);const c=a;t++;let l=[],f=[],d=[],h="",_=null;if(e[t]&&"("===e[t].type&&([l,f,d]=o()),!i&&e[t]&&"word"===e[t].type&&(_=e[t++],h=_.value),0===l.length&&e[t]&&"("===e[t].type&&([l,f,d]=o()),""!==h&&_){if(h=b.filenameToModName(a.file)+"__"+h,h in s){const e=h.replace(/^main__/,"");n.warn(`関数『${e}』は既に定義されています。`,c)}_.value=h,s[h]={type:"func",josi:l,fn:null,asyncFn:!1,varnames:f,funcPointers:d}}c.meta={type:"func",josi:l,varnames:f,funcPointers:d}}}splitStringEx(e){const n=[],s=e.split(/[{{]/);n.push(s[0]);for(const e of s.slice(1)){const s=e.replace("}","}").indexOf("}");if(-1===s)return null;n.push(e.slice(0,s),e.slice(s+1))}return n}_replaceWord(e){let n=[],s=0;const u=e.length>0?b.filenameToModName(e[0].file):"main.nako3";for(;s<e.length;){const a=e[s];if("word"===a.type&&"それ"!==a.value){const e=a.value;if(e.indexOf("__")<0){const n=`${u}__${e}`,s=this.funclist[n];if(s&&"func"===s.type){a.type="func",a.meta=s,a.value=n;continue}for(const n of this.modList){const s=`${n}__${e}`,t=this.funclist[s];if(t&&"func"===t.type){a.type="func",a.meta=t,a.value=s;break}}if("func"===a.type)continue}const n=this.funclist[e];n&&"func"===n.type&&(a.type="func",a.meta=n)}if("-"===a.type&&e[s+1]&&"number"===e[s+1].type){const n=s<=0?"eol":e[s-1].type;("eol"===n||t.bW[n]||""!==e[s-1].josi)&&(e.splice(s,1),e[s].value*=-1)}if(void 0===a.josi&&(a.josi=""),"は"!==a.josi)if("とは"!==a.josi)if(o.tararebaMap[a.josi]){const n="でなければ"===a.josi||"なければ"===a.josi?"でなければ":"ならば";a.rawJosi||(a.rawJosi=n);const t=void 0===a.endOffset?void 0:a.endOffset-a.rawJosi.length;e.splice(s+1,0,{type:"ならば",value:n,indent:a.indent,line:a.line,column:a.column,file:a.file,startOffset:t,endOffset:a.endOffset,josi:"",rawJosi:""}),a.josi=a.rawJosi="",a.endOffset=t,s+=2}else"_eol"!==a.type?"line_comment"!==a.type&&"range_comment"!==a.type?("eol"===a.type&&(a.value=n.join("/"),n=[]),s++):(n.push(a.value),e.splice(s,1)):e.splice(s,1);else{a.rawJosi||(a.rawJosi=a.josi);const n=void 0===a.endOffset?void 0:a.endOffset-a.rawJosi.length;e.splice(s+1,0,{type:a.josi,indent:a.indent,line:a.line,column:a.column,file:a.file,startOffset:n,endOffset:a.endOffset,josi:"",rawJosi:"",value:void 0}),a.josi=a.rawJosi="",a.endOffset=n,s+=2}else{a.rawJosi||(a.rawJosi=a.josi);const n=void 0===a.endOffset?void 0:a.endOffset-a.rawJosi.length;e.splice(s+1,0,{type:"eq",indent:a.indent,line:a.line,column:a.column,file:a.file,startOffset:n,endOffset:a.endOffset,josi:"",rawJosi:"",value:void 0}),s+=2,a.josi=a.rawJosi="",a.endOffset=n}}}countIndent(e){let n=0;for(let s=0;s<e.length;s++){const t=a(e.charAt(s));if(0===t)return[n,s];n+=t}return[n,e.length]}tokenize(e,n,s){const t=e.length,u=[];let a,i,r=1,c=!1,l=0;const f=this.countIndent(e);for(l=f[0],e=e.substring(f[1]),r+=f[1];""!==e;){let f=!1;for(const _ of h){const h=_.pattern.exec(e);if(!h)continue;if(f=!0,"space"===_.name){r+=h[0].length,e=e.substring(h[0].length);continue}if(_.cbParser){let o;if(c&&"word"===_.name)o=_.cbParser(e,!1);else try{o=_.cbParser(e)}catch(u){throw new m.tO(u.message,t-e.length,t-e.length+1,n,s)}if("string_ex"===_.name){const a=this.splitStringEx(o.res);if(null===a)throw new m.cg("展開あり文字列で値の埋め込み{...}が対応していません。",t-e.length,t-o.src.length,n,s);let i=0;for(let c=0;c<a.length;c++){const f=c===a.length-1?o.josi:"";c%2==0?(u.push({type:"string",value:a[c],file:s,josi:f,indent:l,line:n,column:r,preprocessedCodeOffset:t-e.length+i,preprocessedCodeLength:a[c].length+2+f.length}),i+=a[c].length+2):(u.push({type:"&",value:"&",josi:"",indent:l,file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i,preprocessedCodeLength:0}),u.push({type:"(",value:"(",josi:"",indent:l,file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i,preprocessedCodeLength:0}),u.push({type:"code",value:a[c],josi:"",indent:l,file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i,preprocessedCodeLength:a[c].length}),u.push({type:")",value:")",josi:"",indent:l,file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i+a[c].length,preprocessedCodeLength:0}),u.push({type:"&",value:"&",josi:"",indent:l,file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i+a[c].length,preprocessedCodeLength:0}),i+=a[c].length)}n+=o.numEOL,r+=e.length-o.src.length,e=o.src,o.numEOL>0&&(r=1);break}a=r,r+=e.length-o.src.length,u.push({type:_.name,value:o.res,josi:o.josi,indent:l,line:n,column:a,file:s,preprocessedCodeOffset:t-e.length,preprocessedCodeLength:e.length-o.src.length}),e=o.src,n+=o.numEOL,o.numEOL>0&&(r=1);break}const v=t-e.length;let b=h[0];if(_.cb&&(b=_.cb(b)),a=r,i=n,r+=h[0].length,e=e.substring(h[0].length),("eol"===_.name&&"\n"===b||"_eol"===_.name)&&(b=n++,r=1),"number"===_.name){const n=d.exec(e);n&&(e=e.substring(n[0].length),r+=h[0].length)}let p="";if(_.readJosi){const n=o.josiRE.exec(e);n&&(p=n[0].replace(/^\s+/,""),r+=n[0].length,","===(e=e.substring(n[0].length)).charAt(0)&&(e=e.substring(1)),o.removeJosiMap[p]&&(p=""))}switch(_.name){case"def_test":c=!0;break;case"eol":c=!1}if("dec_lineno"!==_.name){if(u.push({type:_.name,value:b,indent:l,line:i,column:a,file:s,josi:p,preprocessedCodeOffset:v,preprocessedCodeLength:t-e.length-v}),"eol"===_.name){const n=this.countIndent(e);l=n[0],r+=n[1],e=e.substring(n[1])}break}n--}if(!f)throw new m.cg("未知の語句: "+e.substring(0,3)+"...",t-e.length,t-t+3,n,s)}return u}static tokensToTypeStr(e,n){return e.map((e=>e.type)).join(n)}static filenameToModName(e){if(!e)return"main";if((e=e.replace(/[\\:]/g,"/")).indexOf("/")>=0){const n=e.split("/");e=n[n.length-1]}return e=e.replace(/\.nako3?$/,"")}}},7206:function(e,n,s){s.d(n,{bW:function(){return t}});const t={and:1,or:1,eq:2,noteq:2,"===":2,"!==":2,gt:2,gteq:2,lt:2,lteq:2,"&":3,"+":4,"-":4,shift_l:4,shift_r:4,shift_r0:4,"*":5,"/":5,"÷":5,"÷÷":5,"%":5,"^":6},u=[];for(const e in t)u.push(e)},515:function(e,n){n.default={"回":"回","回繰返":"回","間":"間","間繰返":"間","繰返":"繰返","増繰返":"増繰返","減繰返":"減繰返","後判定":"後判定","反復":"反復","抜":"抜ける","続":"続ける","戻":"戻る","先":"先に","次":"次に","代入":"代入","実行速度優先":"実行速度優先","パフォーマンスモニタ適用":"パフォーマンスモニタ適用","定":"定める","逐次実行":"逐次実行","条件分岐":"条件分岐","増":"増","減":"減","変数":"変数","定数":"定数","エラー監視":"エラー監視","エラー":"エラー","それ":"word","そう":"word","関数":"def_func","インデント構文":"インデント構文","非同期モード":"非同期モード","DNCLモード":"DNCLモード","モード設定":"モード設定","取込":"取込"}}},n={};function s(t){var u=n[t];if(void 0!==u)return u.exports;var a=n[t]={exports:{}};return e[t](a,a.exports,s),a.exports}s.d=function(e,n){for(var t in n)s.o(n,t)&&!s.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:n[t]})},s.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},function(){var e=s(6297),n=s(4228),t=s(9485);const u="NOP",a="LBL",o="EOL",i="JMP",r="JMP_T",c="JMP_F",l="CALL",f="CALL_OBJ",d="RET",h="TRY",_="CODE";class v{constructor(e,n){this.type=e,this.value=n,this.no=-1,this.tag=0}}class m{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}}static generate(s,t,u){const a=new m(s);a.registerFunction(t);let o=a.convGen(t,!!u);return o=a.getDefFuncCode(u)+o,s.getLogger().trace("--- generate(非同期モード) ---\n"+o),o&&u&&(o+="\n__self._runTests(__tests);\n"),{runtimeEnv:o,standalone:`const nakoVersion = ${JSON.stringify(n.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}}convLineno(e,n){if(this.speedMode.lineNumbers>0)return"";let s;if(s="number"!=typeof e.line?"unknown":"string"!=typeof e.file?`l${e.line}`:`l${e.line}:${e.file}`,!n){if(s===this.lastLineNo)return"";this.lastLineNo=s}return`__v0.line=${JSON.stringify(s)};`}varname(e){return`sys.__vars[${JSON.stringify(e)}]`}getVarsCode(){let e="";for(const n of Array.from(this.usedFuncSet.values())){const s=this.__self.__varslist[0][n],t=`this.__varslist[0]["${n}"]`;e+="function"==typeof s?t+"="+s.toString()+";\n":t+"="+JSON.stringify(s)+";\n"}return e}getDefFuncCode(e){let n="";n+="const __self = this.__self = this;\n",n+="const __varslist = this.__varslist;\n",n+="const __module = this.__module;\n",n+="const __v0 = this.__v0 = this.__varslist[0];\n",n+="const __v1 = this.__v1 = this.__varslist[1];\n",n+="const __vars = this.__vars = this.__varslist[2];\n",n+="const __code = this.__code;\n";let s="";for(const e in this.nakoFuncList){s+=`//[DEF_FUNC name='${e}']\n__v1["${e}"]=${this.nakoFuncList[e].fn};\n;//[/DEF_FUNC name='${e}']\n`}""!==s&&(n+="__v0.line='関数の定義';\n"+s);let t="";for(const e in this.__self.__module){const n=`!${e}:初期化`;this.varslistSet[0].names.has(n)&&(this.usedFuncSet.add(`!${e}:初期化`),t+=`__v0["!${e}:初期化"](__self);\n`)}if(""!==t&&(n+="__v0.line='プラグインの初期化';\n"+t),e){let s="const __tests = [];\n";for(const n in this.nakoTestList)if(!0===e||"string"==typeof e&&e===n){s+=`${this.nakoTestList[n].fn};\n;`}""!==s&&(n+="__v0.line='テストの定義';\n",n+=s+"\n")}return n}addPlugin(e){return this.__self.addPlugin(e)}addPluginObject(e,n){this.__self.addPluginObject(e,n)}addPluginFile(e,n,s){this.__self.addPluginFile(e,n,s)}addFunc(e,n,s){this.__self.addFunc(e,n,s)}getFunc(e){return this.__self.getFunc(e)}registerFunction(n){if("block"!==n.type)throw e.ih.fromNode("構文解析に失敗しています。構文は必ずblockが先頭になります",n);const s=e=>{for(let n=0;n<e.block.length;n++){const t=e.block[n];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?s(t.block):s(t))}};s(n);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,n){this._convGen(e,!0);const s=new Set([i,r,c,l,h]);let t=this.codeArray;{t=t.filter((e=>e.type!==u));const e=new Set;t.forEach((n=>{s.has(n.type)&&e.add(n.value)})),t=t.filter((n=>n.type!==a||(15===n.tag||e.has(n.value))));let n=0;for(;n<t.length-1;)t[n].type!==o||t[n+1].type!==o?n++:t.splice(n+1,1);this.codeArray=t}t.forEach(((e,n)=>{e.type===a&&(this.labels[e.value]=n)})),t.forEach((e=>{s.has(e.type)&&e.no<0&&(e.no=this.labels[e.value])}));let v="";return t.forEach(((e,n)=>{switch(e.type){case u:v+=`case ${n}: break; // [NOP] ${e.value}\n`;break;case a:v+=`case ${n}: break; // [LABEL] ${e.value}\n`;break;case o:v+=`case ${n}: ${e.value}; break; // [EOL]\n`;break;case i:v+=`case ${n}: sys.nextIndex = ${e.no}; break; // ${e.value}\n`;break;case r:v+=`case ${n}: if (sys.__stack.pop()) { sys.nextIndex = ${e.no};} break; // ${e.value}\n`;break;case c:v+=`case ${n}: if (!sys.__stack.pop()) { sys.nextIndex = ${e.no}} break; // ${e.value}\n`;break;case d:v+=`case ${n}: sys.__return(sys); break;\n`;break;case l:v+=`case ${n}: sys.__call(${e.no}, sys); break; // ${e.value}\n`;break;case f:v+=`case ${n}: sys.__callObj('${e.value}', ${n}, sys); break; // ${e.value}\n`;break;case h:v+=`case ${n}: sys.tryIndex = ${e.no}; break; // TRY \n`;break;case _:{const s=e.value.replace(/\s+$/,"");v+=`case ${n}: {\n${s}\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.nextAsync(this)\n //-------------------------\n `,n?"":v}_convGen(n,s){let t="";if(n instanceof Array){for(let e=0;e<n.length;e++){const u=n[e];t+=this._convGen(u,s)}return t}if(null===n)return"null";if(void 0===n)return"undefined";if("object"!=typeof n)return""+n;switch(n.type){case"nop":break;case"comment":n.value||(n.value=""),this.addCode(new v(u,n.value));break;case"eol":this.addCode(new v(o,this.convLineno(n,!0)));break;case"number":this.addCodeStr(`sys.__stack.push(${n.value});//number`);break;case"string":this.convString(n);break;case"word":case"variable":this.convGetVar(n);break;case"op":case"calc":this.convOp(n);break;case"renbun":this.convRenbun(n);break;case"not":this._convGen(n.value,!0),this.addCodeStr("if (sys.__stack.length==0) throw new Error('NOTでスタックに値がありません');sys.__stack[sys.__stack.length-1] = (sys.__stack[sys.__stack.length-1]) ? 0:1");break;case"配列参照":this.convRefArray(n);break;case"json_array":this.convJsonArray(n);break;case"json_obj":this.convJsonObj(n);break;case"bool":{const e=n.value?"true":"false";this.addCodeStr(`sys.__stack.push(${e})`);break}case"null":this.addCodeStr("sys.__stack.push(null)");break;case"func":case"func_pointer":case"calc_func":this.convFunc(n,s);break;case"let":this.convLet(n);break;case"let_array":this.convLetArray(n);break;case"block":for(let e=0;e<n.block.length;e++){const s=n.block[e];this._convGen(s,!1)}break;case"if":this.convIf(n);break;case"repeat_times":this.convRepeatTimes(n);break;case"break":this.addCodeStr(this.convCheckLoop(n,"break"));break;case"continue":this.addCodeStr(this.convCheckLoop(n,"continue"));break;case"for":this.convFor(n);break;case"foreach":this.convForeach(n);break;case"while":this.convWhile(n);break;case"switch":this.convSwitch(n);break;case"return":this.convReturn(n);break;case"end":t+=this.addCodeStr("__varslist[0]['終']();");break;case"def_local_var":this.convDefLocalVar(n);break;case"def_local_varlist":t+=this.addCodeStr(this.convDefLocalVarlist(n));break;case"tikuji":throw e.ih.fromNode("「逐次実行」構文は「!非同期モード」では使えません。",n);case"speed_mode":throw e.ih.fromNode("「速度有線」構文は「!非同期モード」では使えません。",n);case"performance_monitor":this.convPerformanceMonitor(n,s);break;case"func_obj":this.convFuncObj(n);break;case"def_test":this.convDefTest(n);break;case"def_func":t+=this.addCodeStr(this.convDefFunc(n));break;case"try_except":t+=this.convTryExcept(n);break;case"require":t+=this.convRequire(n);break;default:throw new Error("System Error: unknown_type="+n.type)}return t}convRequire(e){const n=new t.Jc(this.com);return this.addCodeStr(n.convRequire(e)),""}addCodeStr(e){if(""===e)return"";const n=e.split("\n").map((e=>" "+e.replace(/\s+$/,""))),s=new v(_,n.join("\n"));return this.addCode(s)}addCode(e){return this.codeArray[this.codeId]=e,this.codeId++,""}makeLabel(e){const n=e+"_"+this.loopId++;return this.makeLabelDirectly(n)}makeLabelDirectly(e){const n=new v(a,e);return this.labels[e]=-1,n}makeJump(e){return new v(i,e.value)}makeJumpIfTrue(e){return new v(r,e.value)}makeJumpIfFalse(e){return new v(c,e.value)}convIf(e){const n=this.makeLabel("もし:ここから"),s=this.makeLabel("もし:ここまで"),t=this.makeLabel("もし:違えば");return this.addCode(n),this._convGen(e.expr,!0),this.addCode(this.makeJumpIfFalse(t)),this._convGen(e.block,!1),this.addCode(this.makeJump(s)),this.addCode(t),e.falseBlock&&this._convGen(e.falseBlock,!1),this.addCode(s),""}convRepeatTimes(e){this.flagLoop=!0,this.varsSet.names.add("回数"),this.varsSet.readonly.add("回数");const n=`sys.__tmp_i${this.loopId}`;this.loopId++;const s=`sys.__tmp_count${this.loopId}`;this.loopId++,this._convGen(e.value,!0),this.addCodeStr(`${s} = sys.__stack.pop(); ${n} = 0;`);const t=this.makeLabel("回:条件チェック");this.addCode(t);const u=this.makeLabel("回:ここまで");this.labelBreak=u,this.labelContinue=t;const a=`sys.__vars["回数"] = ++${n}\nsys.__stack.push(${n} > ${s})\n`;return this.addCodeStr(a),this.addCode(this.makeJumpIfTrue(u)),this.convGenLoop(e.block),this.addCode(this.makeJump(t)),this.addCode(u),this.flagLoop=!1,""}findVar(e){if(this.varsSet.names.has(e))return{i:this.varslistSet.length-1,name:e,isTop:!0,js:`sys.__vars[${JSON.stringify(e)}]`};for(let n=2;n>=0;n--)if(this.varslistSet[n].names.has(e))return{i:n,name:e,isTop:!1,js:`sys.__varslist[${n}][${JSON.stringify(e)}]`};return null}genVar(n,s){const t=this.findVar(n),u=s.line;if(null===t)return"引数"===n||"それ"===n||"対象"===n||"対象キー"===n||"回数"===n||this.__self.getLogger().warn(`変数『${n}』は定義されていません。`,s),this.varsSet.names.add(n),this.varname(n);if(0===t.i){const a=this.__self.getFunc(n);if(!a)return`${t.js}/*err:${u}*/`;if("const"===a.type||"var"===a.type)return t.js;if("func"===a.type){if(!a.josi)throw new Error("[System Error]");if(0===a.josi.length)return`(${t.js}())`;throw e.ih.fromNode(`『${n}』が複文で使われました。単文で記述してください。(v1非互換)`,s)}throw e.ih.fromNode(`『${n}』は関数であり参照できません。`,s)}return t.js}convGetVar(e){const n=e.value;let s=`sys.__vars[${JSON.stringify(n)}]`;const t=this.findVar(n);null!=t&&(s=t.js),this.addCodeStr(`sys.__stack.push(${s});`)}convComment(e){let n=String(e.value);n=n.replace(/\n/g,"¶");const s=this.convLineno(e,!1);return""===n&&""===s?";":""===n?";"+s+"\n":";"+s+"//"+n+"\n"}convReturn(n){if(this.varsSet.names.has("!関数"))throw e.ih.fromNode("『戻る』がありますが、関数定義内のみで使用可能です。",n);return n.value&&(this._convGen(n.value,!0),this.addCodeStr('sys.__vars["それ"] = sys.__stack.pop()')),this.addCode(new v(d,"")),""}convCheckLoop(n,s){if(!this.flagLoop){const t="continue"===s?"続ける":"抜ける";throw e.ih.fromNode(`『${t}』文がありますが、それは繰り返しの中で利用してください。`,n)}return"continue"===s?this.labelContinue&&this.addCode(this.makeJump(this.labelContinue)):this.labelBreak&&this.addCode(this.makeJump(this.labelBreak)),""}convDefFuncCommon(e,n){const s=""===n;let t=n;s&&(t="無名関数:"+this.loopId++);const u=this.makeLabel(`関数「${t}」:ここまで`);this.addCode(this.makeJump(u));const a=this.makeLabelDirectly(t);a.tag=15,this.addCode(a);const o=new Set;this.varsSet={isFunction:!0,names:o,readonly:new Set},this.varsSet.names.add("それ"),this.varslistSet.push(this.varsSet);const i=s?e.meta:e.name.meta;let r="",c="";r+=`//関数『${t}』の初期化処理\n`,r+="// 引数をローカル変数として登録\n";for(let e=i.varnames.length-1;e>=0;e--){const n=i.varnames[e];r+=` ${this.varname(n)} = sys.__stack.pop();\n`,this.varsSet.names.add(n),c+=""}return r+="// ここまで:引数をローカル変数として登録\n",this.addCodeStr(r),this.usedFuncSet.add(t),this.varslistSet[1].names.add(t),this.nakoFuncList[t]={josi:i.josi,fn:`(function(){\n const sys = (arguments.length > 0) ? arguments[arguments.length-1] : {}; \n if (sys.newenv) { \n sys.newenv = false\n sys.__callNakoCodeEntry(sys.__labels['${t}'], sys);\n } else {\n `+c+"\n"+` sys.__callNakoCode(sys.__labels['${t}'], sys.nextIndex, sys);\n if (!sys.inLoop) { sys.nextAsync(sys) }\n } })`,type:"func"},this._convGen(e.block,!1),this.varslistSet.pop(),this.varsSet=this.varslistSet[this.varslistSet.length-1],this.__self.__varslist[1][t]=function(){},this.addCode(new v(d,"")),this.addCode(u),n||this.addCodeStr(`sys.__stack.push('${t}')`),""}convDefTest(n){throw e.ih.fromNode("テスト構文は!非同期モードでは使えません。",n)}convDefFunc(e){const n=t.Jc.getFuncName(e.name.value);return this.convDefFuncCommon(e,n),""}convFuncObj(e){return this.convDefFuncCommon(e,"")}convJsonObj(e){const n=e.value,s="sys.__tmp_obj"+this.loopId++;return this.addCodeStr(s+"={}; // convJsonObj::ここから"),n.forEach((e=>{this._convGen(e.value,!0),this._convGen(e.key,!0),this.addCodeStr(`${s}[sys.__stack.pop()]=sys.__stack.pop()`)})),this.addCodeStr(`this.__stack.push(${s}); delete $objName; // convJsonObj::ここまで`),""}convJsonArray(e){const n=e.value;this.addCode(this.makeLabel("convJsonArray::ここから")),n.forEach((e=>this._convGen(e,!0)));const s=n.length;return this.addCodeStr(`sys.__stack.push(sys.__stack.splice(sys.__stack.length-${s},${s}))`),""}convRefArray(e){this._convGen(e.name,!0);const n=e.index;for(let e=0;e<n.length;e++)this._convGen(n[e],!0),this.addCodeStr("const idx = sys.__stack.pop();\nconst obj = sys.__stack.pop();\nsys.__stack.push(obj[idx]);");return""}convLetArray(e){this._convGen(e.value,!0),this._convGen(e.name,!0);const n=e.index;for(let e=0;e<n.length;e++){if(this._convGen(n[e],!0),e===n.length-1){this.addCodeStr("const idx = this.__stack.pop();const obj = this.__stack.pop();const val = this.__stack.pop();obj[idx]=val;");break}this.addCodeStr("const idx = sys.__stack.pop();\nconst obj = sys.__stack.pop();\nsys.__stack.push(obj[idx]);")}return""}convGenLoop(e){const n=this.flagLoop;this.flagLoop=!0;try{return this._convGen(e,!1)}finally{this.flagLoop=n}}convFor(e){let n;if(this.flagLoop=!0,null!==e.word){const s=e.word.value;this.varsSet.names.add(s),n=this.varname(s)}else this.varsSet.names.add("dummy"),n=this.varname("dummy");const s=this.varname("それ"),t=this.loopId++,u=`sys.__tmp__i${t}`,a=`sys.__tmp__to${t}`;this._convGen(e.from,!0),this._convGen(e.to,!0),this.addCodeStr(`${a}=sys.__stack.pop();${u}=sys.__stack.pop();`),this.addCodeStr(`${s} = ${n} = ${u}`);const o=this.makeLabel("繰返:条件確認"),i=this.makeLabel("繰返:加算");this.addCode(o);const r=this.makeLabel("繰返:ここまで");return this.addCodeStr(`sys.__stack.push(${n} <= ${a})`),this.addCode(this.makeJumpIfFalse(r)),this.labelContinue=i,this.labelBreak=r,this.convGenLoop(e.block),this.addCode(i),this.addCodeStr(`${s} = ++${n};`),this.addCode(this.makeJump(o)),this.addCode(r),this.addCodeStr(`delete ${u};delete ${a};//繰返:掃除`),this.flagLoop=!1,""}convForeach(n){this.flagLoop=!0;let s='__v0["対象"]';n.name&&(s=this.varname(n.name.value),this.varsSet.names.add(n.name.value));if(null===n.target)throw e.ih.fromNode("『反復』の対象がありません。",n);const t=this.varname("それ"),u="sys.__tmp__target"+this.loopId++,a="sys.__tmp__keys"+this.loopId++,o="sys.__tmp__i"+this.loopId++,i="sys.__tmp__count"+this.loopId++;this._convGen(n.target,!0);const r=`// 反復: 初期化\n${u} = sys.__stack.pop();\n${o} = 0;\nif (typeof(${u}) == 'string' || typeof(${u}) == 'number') { ${u} = [${u}]; }\nif (${u} instanceof Array) { ${i} = ${u}.length; }\nelse { // キーの一覧を得る\n ${a} = Object.keys(${u}); \n // hasOwnPropertyがfalseならばkeyを消す処理\n ${a} = ${a}.filter((key)=>{ return ${u}.hasOwnProperty(key) })\n ${i} = ${a}.length;\n}\n`;this.addCodeStr(r);const c=this.makeLabel("反復:条件確認"),l=this.makeLabel("反復:加算"),f=this.makeLabel("反復:ここまで");this.labelBreak=f,this.labelContinue=l,this.addCode(c);const d=`if (${u} instanceof Array) {\n ${s} = ${t} = ${u}[${o}]; __v0["対象キー"] = ${o};\n} else {\n __v0["対象キー"] = ${a}[${o}]; ${s} = ${t} = ${u}[__v0["対象キー"]];\n}\n`;return this.addCodeStr(`${d}\nsys.__stack.push(${o} < ${i});`),this.addCode(this.makeJumpIfFalse(f)),this.convGenLoop(n.block),this.addCode(l),this.addCodeStr(`${o}++`),this.addCode(this.makeJump(c)),this.addCode(f),this.flagLoop=!1,""}convWhile(e){this.flagLoop=!0;const n=this.makeLabel("間:ここから"),s=this.makeLabel("間:ここまで");return this.labelContinue=n,this.labelBreak=s,this.addCode(n),this._convGen(e.cond,!0),this.addCode(this.makeJumpIfFalse(s)),this.convGenLoop(e.block),this.addCode(this.makeJump(n)),this.addCode(s),this.flagLoop=!1,""}convSpeedMode(e,n){return""}convPerformanceMonitor(e,n){const s={...this.performanceMonitor};e.options["ユーザ関数"]&&this.performanceMonitor.userFunction++,e.options["システム関数本体"]&&this.performanceMonitor.systemFunctionBody++,e.options["システム関数"]&&this.performanceMonitor.systemFunction++,this._convGen(e.block,n),this.performanceMonitor=s}convSwitch(e){this._convGen(e.value,!0);const n="sys.__tmp__i"+this.loopId++;this.addCodeStr(`${n} = sys.__stack.pop()`);const s=this.makeLabel("条件分岐:ここまで"),t=e.cases;for(let e=0;e<t.length;e++){const u=t[e][0];if("違えば"===u.type)this.convGenLoop(t[e][1]);else{const a=this.makeLabel("条件分岐:次");this._convGen(u,!0),this.addCodeStr(`sys.__stack.push(sys.__stack.pop() == ${n})`),this.addCode(this.makeJumpIfFalse(a)),this.convGenLoop(t[e][1]),this.addCode(this.makeJump(s)),this.addCode(a)}}return this.addCode(s),this.addCodeStr(`delete ${n}//条件分岐:掃除`),""}convFuncGetArgsCalcType(e,n,s){const t={};for(let e=0;e<s.args.length;e++){const n=s.args[e];0===e&&null===n?(this.addCodeStr("sys.__stack.push(sys.__vars['それ'])"),t.sore=!0):this._convGen(n,!0)}return t}getPluginList(){const e=[];for(const n in this.__self.__module)e.push(n);return e}convFunc(n,s){let u=!1,a=!1;const o=t.Jc.getFuncName(n.name),i=this.findVar(o);if(null===i)throw e.ih.fromNode(`関数『${o}』が見当たりません。有効プラグイン=[`+this.getPluginList().join(", ")+"]",n);let r;if(0===i.i){if(r=this.__self.getFunc(o),"func"!==r.type)throw e.ih.fromNode(`『${o}』は関数ではありません。`,n);u=!0}else r=this.nakoFuncList[o],void 0===r&&(a=!0,r={return_none:!1});if("func_pointer"===n.type)return i.js;const c=this.convFuncGetArgsCalcType(o,r,n);this.usedFuncSet.add(o);let d="",h="";n.setter&&(d+=";__self.isSetter = true;\n",h+=";__self.isSetter = false;\n"),c.sore&&(d+="/*[sore]*/");const _=n.args.length;let m="";u?(m+=d,m+=`const args = sys.__stack.splice(sys.__stack.length - ${_}, ${_});\n`,m+="args.push(sys);\n",m+=`const ret = ${i.js}.apply(sys, args);\n`,r.return_none||(m+="sys.__vars['それ'] = ret;\n",s&&(m+="sys.__stack.push(ret);\n")),m+=h,this.addCodeStr(m)):(a?this.addCode(new v(f,o)):this.addCode(new v(l,o)),s||this.addCodeStr("sys.__stack.pop();// 戻り値を利用しない関数呼出"))}convRenbun(e){this._convGen(e.left,!1),this._convGen(e.right,!0)}convOp(e){const n={"&":'+""+',eq:"==",noteq:"!=","===":"===","!==":"!==",gt:">",lt:"<",gteq:">=",lteq:"<=",and:"&&",or:"||",shift_l:"<<",shift_r:">>",shift_r0:">>>","÷":"/"},s=e.operator;this._convGen(e.left,!0),this._convGen(e.right,!0);let t="const rv = sys.__stack.pop();\nconst lv = sys.__stack.pop();\n";if("^"===s)t+="const v = (Math.pow(lv, rv))\n";else{t+=`const v = ((lv) ${n[s]||s} (rv));\n`}t+=`sys.__stack.push(v); //op:${s}\n`,this.addCodeStr(t)}convLet(n){let s="";null===n.value?this.addCodeStr("sys.__stack.push(sys.__vars['それ'])"):this._convGen(n.value,!0);const t=n.name.value,u=this.findVar(t);if(null===u)this.varsSet.names.add(t),s=`${this.varname(t)}=sys.__stack.pop();`;else{if(this.varslistSet[u.i].readonly.has(t))throw e.ih.fromNode(`定数『${t}』は既に定義済みなので、値を代入することはできません。`,n);s=`${u.js}=sys.__stack.pop();`}this.addCodeStr(s+"//let")}convDefLocalVar(n){null===n.value?this.addCodeStr("sys.__stack.push(null)"):this._convGen(n.value,!0);const s=n.name.value,t=n.vartype;if(this.varsSet.names.has(s))throw e.ih.fromNode(`${t}『${s}』の二重定義はできません。`,n);return this.varsSet.names.add(s),"定数"===t&&this.varsSet.readonly.add(s),this.addCodeStr(`${this.varname(s)}=sys.__stack.pop()`),""}convDefLocalVarlist(n){const s=n.vartype;null===n.value?this.addCodeStr("sys.__stack.push(null)"):this._convGen(n.value,!0);const t=`sys.__tmp_i${this.loopId}`;this.loopId++,this.addCodeStr(`${t}=sys.__stack.pop();if (!(${t} instanceof Array)) { ${t}=[${t}] }`);for(const u of n.names){const a=u.value;if(this.varsSet.names.has(a))throw e.ih.fromNode(`${s}『${a}』の二重定義はできません。`,n);this.varsSet.names.add(a),"定数"===s&&this.varsSet.readonly.add(a);const o=this.varname(a);this.addCodeStr(`${o}=${t}.pop()`)}return this.addCodeStr(`delete ${t}//複数代入:掃除`),""}convString(e){let n=""+e.value;const s=e.mode;if(n=n.replace(/\\/g,"\\\\"),n=n.replace(/"/g,'\\"'),n=n.replace(/\r/g,"\\r"),n=n.replace(/\n/g,"\\n"),"ex"===s)throw new Error("[システムエラー] ジェネレーターでの文字列の展開はサポートしていません");return this.addCodeStr(`sys.__stack.push("${n}")//string`),'"'+n+'"'}convTryExcept(e){const n=this.makeLabel("エラー監視:ならば"),s=this.makeLabel("エラー監視:ここまで");this.addCode(new v(h,n.value)),this._convGen(e.block,!1),this.addCode(this.makeJump(s)),this.addCode(n),this._convGen(e.errBlock,!1),this.addCode(s)}}if("object"==typeof navigator&&"object"==typeof navigator.nako3){const e=navigator.nako3;e.addCodeGenerator&&e.addCodeGenerator("非同期モード",m)}}()}();
|