nadesiko3 3.3.45 → 3.3.49
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/LICENSE +21 -21
- package/README.md +143 -132
- package/batch/browsers.template.md +3 -3
- package/batch/build_browsers.nako3 +72 -72
- package/batch/build_command.nako3 +44 -44
- package/batch/build_nako_version.nako3 +42 -42
- package/batch/calc_hash.nako3 +29 -29
- package/batch/cmd_txt2json.nako3 +74 -74
- package/batch/command.txt +270 -338
- package/batch/command_nakopad.txt +9 -69
- package/batch/download-extlib.nako3 +43 -43
- package/batch/gen_command_nakopad.nako3 +57 -57
- package/batch/jsplugin2text.nako3 +285 -285
- package/batch/pickup_command.nako3 +110 -110
- package/batch/pickup_reserved_words.nako3 +11 -11
- package/batch/publish_version.nako3 +46 -46
- package/batch/show_agents.js +14 -14
- package/batch/turtle2js.nako3 +21 -21
- package/bin/cnako3 +10 -10
- package/core/.editorconfig +6 -0
- package/core/.eslintrc.cjs +33 -0
- package/core/.github/dependabot.yml +7 -0
- package/core/.github/workflows/nodejs.yml +37 -0
- package/core/.github/workflows/super-linter.yml +61 -0
- package/core/.github/workflows/textlint.yml +199 -0
- package/core/LICENSE +21 -0
- package/core/README.md +66 -0
- package/core/batch/build_nako_version.nako3 +42 -0
- package/core/command/snako.mjs +105 -0
- package/core/command/snako.mts +116 -0
- package/core/index.mjs +21 -0
- package/core/index.mts +21 -0
- package/core/package.json +47 -0
- package/core/sample/hello.nako3 +7 -0
- package/core/sample/hoge.mjs +4 -0
- package/core/sample/hoge.mts +6 -0
- package/core/src/nako3.mjs +858 -0
- package/core/src/nako3.mts +967 -0
- package/core/src/nako_colors.mjs +78 -0
- package/core/src/nako_colors.mts +86 -0
- package/core/src/nako_core_version.mjs +8 -0
- package/core/src/nako_core_version.mts +19 -0
- package/core/src/nako_csv.mjs +185 -0
- package/core/src/nako_csv.mts +188 -0
- package/core/src/nako_errors.mjs +173 -0
- package/core/src/nako_errors.mts +197 -0
- package/core/src/nako_from_dncl.mjs +255 -0
- package/core/src/nako_from_dncl.mts +250 -0
- package/core/src/nako_gen.mjs +1648 -0
- package/core/src/nako_gen.mts +1719 -0
- package/core/src/nako_gen_async.mjs +1659 -0
- package/core/src/nako_gen_async.mts +1732 -0
- package/core/src/nako_global.mjs +107 -0
- package/core/src/nako_global.mts +138 -0
- package/core/src/nako_indent.mjs +445 -0
- package/core/src/nako_indent.mts +492 -0
- package/core/src/nako_josi_list.mjs +38 -0
- package/core/src/nako_josi_list.mts +45 -0
- package/core/src/nako_lex_rules.mjs +253 -0
- package/core/src/nako_lex_rules.mts +260 -0
- package/core/src/nako_lexer.mjs +609 -0
- package/core/src/nako_lexer.mts +612 -0
- package/core/src/nako_logger.mjs +199 -0
- package/core/src/nako_logger.mts +232 -0
- package/core/src/nako_parser3.mjs +2439 -0
- package/core/src/nako_parser3.mts +2195 -0
- package/core/src/nako_parser_base.mjs +370 -0
- package/core/src/nako_parser_base.mts +370 -0
- package/core/src/nako_parser_const.mjs +37 -0
- package/core/src/nako_parser_const.mts +37 -0
- package/core/src/nako_prepare.mjs +304 -0
- package/core/src/nako_prepare.mts +315 -0
- package/core/src/nako_reserved_words.mjs +38 -0
- package/core/src/nako_reserved_words.mts +38 -0
- package/core/src/nako_source_mapping.mjs +207 -0
- package/core/src/nako_source_mapping.mts +262 -0
- package/core/src/nako_test.mjs +37 -0
- package/core/src/nako_types.mjs +25 -0
- package/core/src/nako_types.mts +151 -0
- package/core/src/plugin_csv.mjs +49 -0
- package/core/src/plugin_csv.mts +50 -0
- package/core/src/plugin_math.mjs +328 -0
- package/core/src/plugin_math.mts +326 -0
- package/core/src/plugin_promise.mjs +91 -0
- package/core/src/plugin_promise.mts +91 -0
- package/core/src/plugin_system.mjs +2832 -0
- package/core/src/plugin_system.mts +2690 -0
- package/core/src/plugin_test.mjs +34 -0
- package/core/src/plugin_test.mts +34 -0
- package/core/test/array_test.mjs +34 -0
- package/core/test/basic_test.mjs +344 -0
- package/core/test/calc_test.mjs +140 -0
- package/core/test/core_module_test.mjs +23 -0
- package/core/test/debug_test.mjs +16 -0
- package/core/test/dncl_test.mjs +94 -0
- package/core/test/error_message_test.mjs +210 -0
- package/core/test/error_test.mjs +16 -0
- package/core/test/flow_test.mjs +373 -0
- package/core/test/func_call.mjs +160 -0
- package/core/test/func_test.mjs +149 -0
- package/core/test/indent_test.mjs +364 -0
- package/core/test/lex_test.mjs +168 -0
- package/core/test/literal_test.mjs +73 -0
- package/core/test/nako_lexer_test.mjs +35 -0
- package/core/test/nako_logger_test.mjs +76 -0
- package/core/test/nako_logger_test.mts +78 -0
- package/core/test/plugin_csv_test.mjs +38 -0
- package/core/test/plugin_promise_test.mjs +18 -0
- package/core/test/plugin_system_test.mjs +630 -0
- package/core/test/prepare_test.mjs +96 -0
- package/core/test/re_test.mjs +22 -0
- package/core/test/side_effects_test.mjs +92 -0
- package/core/test/variable_scope_test.mjs +149 -0
- package/core/tsconfig.json +101 -0
- package/demo/ace_editor.html +89 -89
- package/demo/ace_editor_tabs.html +161 -161
- package/demo/basic.html +71 -71
- package/demo/browsers.html +9 -10
- package/demo/css/basic.css +3 -3
- package/demo/css/common.css +157 -157
- package/demo/css/editor.css +8 -8
- package/demo/css/flow.css +3 -3
- package/demo/css/index.css +3 -3
- package/demo/flow.html +98 -98
- package/demo/graph.html +53 -53
- package/demo/image/nakopad-icon256.png +0 -0
- package/demo/index.html +133 -133
- package/demo/js/common.js +17 -17
- package/demo/js/turtle3d_test.js +44 -44
- package/demo/js/turtle_test.js +45 -45
- package/demo/nako3/calc.nako3 +4 -4
- package/demo/runscript.html +47 -47
- package/demo/runscript2.html +33 -33
- package/demo/runscript3.html +35 -35
- package/demo/runscript4.html +33 -33
- package/demo/turtle.html +58 -58
- package/demo/turtle2.html +141 -141
- package/demo/turtle3.html +279 -279
- package/demo/turtle3d.html +58 -58
- package/demo/turtle3d2.html +107 -107
- package/demo/version.html +24 -24
- package/doc/SETUP.md +157 -157
- package/doc/about.md +17 -17
- package/doc/browsers.md +26 -26
- package/doc/docgen.md +21 -21
- package/doc/editor.md +44 -44
- package/doc/files.md +39 -39
- package/doc/plugins.md +234 -234
- package/doc/release.md +79 -79
- package/doc/textlint.md +43 -43
- package/doc/win32.md +57 -57
- package/package.json +195 -192
- package/release/_hash.txt +28 -28
- package/release/_script-tags.txt +14 -14
- package/release/command.json +1 -1
- package/release/command.json.js +1 -1
- package/release/command_cnako3.json +1 -1
- package/release/command_list.json +1 -1
- package/release/editor.js +1 -1
- package/release/nako_gen_async.js +1 -1
- package/release/plugin_csv.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/browsers.txt +11 -12
- package/src/browsers_agents.json +2 -2
- package/src/browsers_agents.mjs +1 -1
- package/src/cnako3.mjs +17 -10
- package/src/cnako3.mts +18 -12
- package/src/cnako3mod.mjs +707 -687
- package/src/cnako3mod.mts +712 -696
- package/src/commander_ja.mjs +164 -164
- package/src/commander_ja.mts +161 -161
- package/src/enako3.mjs +68 -69
- package/src/era.mjs +22 -22
- package/src/image_turtle-elephant.mjs +2 -5
- package/src/image_turtle-panda.mjs +2 -5
- package/src/image_turtle64.mjs +2 -5
- package/src/index.mjs +9 -9
- package/src/index.mts +10 -11
- package/src/nako3editorfix.sfd +106 -106
- package/src/nako_version.mjs +8 -8
- package/src/nako_version.mts +2 -2
- package/src/plugin_browser.mjs +213 -212
- package/src/plugin_browser.mts +206 -205
- package/src/plugin_browser_ajax.mjs +399 -399
- package/src/plugin_browser_audio.mjs +109 -109
- package/src/plugin_browser_canvas.mjs +449 -449
- package/src/plugin_browser_chart.mjs +294 -294
- package/src/plugin_browser_color.mjs +49 -49
- package/src/plugin_browser_crypto.mjs +26 -26
- package/src/plugin_browser_dialog.mjs +53 -53
- package/src/plugin_browser_dom_basic.mjs +336 -336
- package/src/plugin_browser_dom_event.mjs +193 -193
- package/src/plugin_browser_dom_parts.mjs +396 -396
- package/src/plugin_browser_geolocation.mjs +51 -51
- package/src/plugin_browser_hotkey.mjs +25 -25
- package/src/plugin_browser_html.mjs +59 -59
- package/src/plugin_browser_in_worker.mjs +45 -45
- package/src/plugin_browser_location.mjs +21 -21
- package/src/plugin_browser_speech.mjs +111 -111
- package/src/plugin_browser_storage.mjs +121 -121
- package/src/plugin_browser_system.mjs +31 -31
- package/src/plugin_browser_websocket.mjs +73 -73
- package/src/plugin_caniuse.mjs +29 -29
- package/src/plugin_datetime.mjs +394 -394
- package/src/plugin_httpserver.mjs +277 -0
- package/src/plugin_httpserver.mts +286 -0
- package/src/plugin_kansuji.mjs +224 -224
- package/src/plugin_keigo.mjs +55 -55
- package/src/plugin_markup.mjs +32 -32
- package/src/plugin_node.mjs +1047 -1047
- package/src/plugin_node.mts +980 -980
- package/src/plugin_turtle.mjs +647 -647
- package/src/plugin_webworker.mjs +334 -334
- package/src/plugin_weykturtle3d.mjs +1214 -1214
- package/src/plugin_worker.mjs +95 -95
- package/src/repl.nako3 +63 -63
- package/src/wnako3.mjs +12 -12
- package/src/wnako3.mts +11 -11
- package/src/wnako3_editor.css +215 -215
- package/src/wnako3_editor.mjs +1542 -1542
- package/src/wnako3_editor.mts +1657 -1656
- package/src/wnako3mod.mjs +213 -213
- package/src/wnako3mod.mts +214 -214
- package/src/wnako3webworker.mjs +69 -68
- package/test/ace_editor/karma.config.js +94 -94
- package/test/ace_editor/test/.babelrc.json +3 -3
- package/test/ace_editor/test/ace_editor_test.js +178 -178
- package/test/ace_editor/test/html/custom_context.html +139 -139
- package/test/async/async_basic_test.mjs +122 -122
- package/test/browser/karma.config.js +221 -221
- package/test/browser/test/.babelrc.json +3 -3
- package/test/browser/test/compare_util.js +50 -50
- package/test/browser/test/html/div_basic.html +2 -2
- package/test/browser/test/html/event_dom_form.html +4 -4
- package/test/browser/test/html/event_dom_scrolldiv.html +5 -5
- package/test/browser/test/import_plugin_checker.js +24 -24
- package/test/browser/test/plugin_browser_test.js +51 -51
- package/test/browser/test/plugin_browser_test_ajax.js +123 -123
- package/test/browser/test/plugin_browser_test_color.js +18 -18
- package/test/browser/test/plugin_browser_test_dialog.js +72 -72
- package/test/browser/test/plugin_browser_test_dom_event.js +598 -598
- package/test/browser/test/plugin_browser_test_dom_parts.js +125 -125
- package/test/browser/test/plugin_browser_test_system.js +9 -9
- package/test/browser/test/plugin_turtle_test.js +817 -817
- package/test/browser/test/plugin_webworker_test.js +86 -86
- package/test/browser/test/require_test.js +68 -68
- package/test/bundled/karma.config.base.js +117 -117
- package/test/bundled/karma.config.js +86 -86
- package/test/bundled/test/.babelrc.json +3 -3
- package/test/bundled/test/bundled_test.js +69 -69
- package/test/bundled/test/html/custom_context.html +65 -65
- package/test/bundled/test/html/custom_debug.html +66 -66
- package/test/bundled/test4b.cmd +52 -52
- package/test/bundled/test_base/.babelrc.json +3 -3
- package/test/bundled/test_base/_checktool_test.js +25 -25
- package/test/bundled/test_base/basic_ajax_test.js +56 -56
- package/test/bundled/test_base/basic_async_test.js +18 -18
- package/test/bundled/test_base/basic_test.js +153 -153
- package/test/bundled/test_base/calc_test.js +132 -132
- package/test/bundled/test_base/css/browsers_box.css +114 -114
- package/test/bundled/test_base/html/custom_context.html +69 -69
- package/test/bundled/test_base/html/custom_debug.html +71 -71
- package/test/bundled/test_base/js/browsers_box.js +72 -72
- package/test/bundled/test_base/plugin_csv_test.js +37 -37
- package/test/bundled/test_base/plugin_datetime_test.js +115 -115
- package/test/bundled/test_base/plugin_kansuji_test.js +49 -49
- package/test/bundled/test_base/plugin_system_test.js +410 -410
- package/test/bundled/test_base/plugin_webworker_test.js +53 -53
- package/test/bundled/test_base/test_utils.js +191 -191
- package/test/common/plugin_browser_test.mjs +22 -24
- package/test/common/plugin_browser_ut_audio_test.mjs +108 -108
- package/test/common/plugin_browser_ut_color_test.mjs +21 -21
- package/test/common/plugin_browser_ut_dialog_test.mjs +100 -100
- package/test/common/plugin_browser_ut_html_test.mjs +13 -13
- package/test/common/plugin_browser_ut_system_test.mjs +10 -10
- package/test/common/plugin_markup_test.mjs +23 -23
- package/test/jsconfig.json +19 -19
- package/test/karma.config.js +91 -91
- package/test/node/async_test.mjs +96 -82
- package/test/node/commander_ja_test.mjs +89 -89
- package/test/node/error_message_test.mjs +243 -253
- package/test/node/kai_test.nako3 +6 -6
- package/test/node/node_test.mjs +60 -60
- package/test/node/plugin_broken.js.txt +3 -3
- package/test/node/plugin_browser_ut_ajax_test.mjs.todo +357 -357
- package/test/node/plugin_browser_ut_location_test.mjs +42 -42
- package/test/node/plugin_markup_test.mjs +47 -46
- package/test/node/plugin_math_test.mjs +45 -44
- package/test/node/plugin_node_test.mjs +98 -97
- package/test/node/plugin_test.mjs +44 -43
- package/test/node/relative_import_test_1.nako3 +1 -1
- package/test/node/relative_import_test_2.nako3 +2 -2
- package/test/node/require_nako3_test.mjs +67 -66
- package/test/node/requiretest.nako3 +4 -4
- package/test/node/requiretest_indirect.nako3 +1 -1
- package/test/node/requiretest_name.nako3 +5 -5
- package/test/node/runtime_error.nako3 +2 -2
- package/test/node/scope1.nako3 +10 -10
- package/test/node/scope2.nako3 +12 -12
- package/test/node/side_effects_test.mjs +39 -119
- package/test/node/sjis.txt +5 -5
- package/test/node/syntax_error.nako3 +1 -1
- package/test/node/wnako3_editor_test.mjs +384 -384
- package/tools/README.md +12 -7
- package/tools/check_new_version.nako3 +25 -25
- package/tools/nako3edit/html/daisyui/LICENSE +22 -22
- package/tools/nako3edit/html/daisyui/version_2.14.1 +1 -1
- package/tools/nako3edit/html/edit.html +170 -170
- package/tools/nako3edit/html/edit_plugin.js +6 -6
- package/tools/nako3edit/html/files.html +125 -125
- package/tools/nako3edit/html/nako3edit.css +65 -65
- package/tools/nako3edit/index.mjs +248 -244
- package/tools/nako3server/index.html +10 -0
- package/tools/nako3server/index.mjs +116 -116
- package/tools/nako3server/index.nako3 +34 -0
- package/release/nako_gen_async.js.LICENSE.txt +0 -35
- package/release/plugin_caniuse.js.LICENSE.txt +0 -11
- package/release/plugin_csv.js.LICENSE.txt +0 -15
- package/release/plugin_datetime.js.LICENSE.txt +0 -15
- package/release/plugin_kansuji.js.LICENSE.txt +0 -3
- package/release/plugin_markup.js.LICENSE.txt +0 -11
- package/release/plugin_turtle.js.LICENSE.txt +0 -15
- package/release/plugin_webworker.js.LICENSE.txt +0 -3
- package/release/plugin_weykturtle3d.js.LICENSE.txt +0 -3
- package/release/wnako3webworker.js.LICENSE.txt +0 -131
- package/tools/nako3edit/a.sqlite3 +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(){"use strict";var e={6211:function(e,n){n.Z={version:"3.3.45",major:3,minor:3,patch:45}},5154:function(e,n,s){s.d(n,{as:function(){return r},cg:function(){return a},ih:function(){return i},k:function(){return u},tO:function(){return o}});var t=s(6211);class u extends Error{constructor(e,n,s,u){const a=`${s||""}${void 0===u?"":`(${u+1}行目): `}`;super(`[${e}]${a}${n}\n[バージョン] ${t.Z.version}`),this.tag="["+e+"]",this.positionJa=a,n=n.replace(/『main__(.+?)』/g,"『$1』"),this.msg=n}}class a extends u{constructor(e,n,s,t,u){super("字句解析エラー(内部エラー)",e,u,t),this.preprocessedCodeStartOffset=n,this.preprocessedCodeEndOffset=s,this.line=t,this.file=u}}class o extends u{constructor(e,n,s,t,u){super("字句解析エラー",e,u,t),this.startOffset=n,this.endOffset=s,this.line=t,this.file=u}}class i extends u{constructor(e,n,s,t,u){super("文法エラー",e,u,n),this.file=u,this.line=n,this.startOffset=s,this.endOffset=t}static fromNode(e,n,s){if(!n)return new i(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 i(e,n.line,t,u,n.file)}}class r extends u{constructor(e,n){const s=e instanceof Error&&e.constructor!==Error&&e.constructor!==r?e.constructor.name+": ":"",t=e instanceof Error?e.message:e+"";let u,a,o;void 0===n?(u=void 0,a=void 0):(o=/^l(-?\d+):(.*)$/.exec(n))?(u=+o[1],a=o[2]):(o=/^l(-?\d+)$/.exec(n))?(u=+o[1],a=void 0):(u=void 0,a=n),super("実行時エラー",`エラー『${s}${t}』が発生しました。`,a,u),this.error=e,this.lineNo=n,this.line=u,this.file=a}}},7636:function(e,n,s){s.d(n,{Jc:function(){return a}});var t=s(5154),u=s(4392);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.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){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 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";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("それ")}return 0===this.warnUndefinedReturnUserFunc?n+`return ${s};`:n+`return (function(a){if(a===undefined){__self.logger.warn('ユーザ関数からundefinedが返されています',{file:'${e.file}',line:${e.line}});};return a;})(${s});`}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+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};let _;0===this.warnUndefinedCallingUserFunc&&0!==u.i||0===this.warnUndefinedCallingSystemFunc&&0===u.i?_=r.join(","):(_="",r.forEach((n=>{"__self"===n?_+=`,${n}`:0===u.i?_+=`,(function(a){if(a===undefined){__self.logger.warn('命令『${s}』の引数にundefinedを渡しています。',{file:'${e.file}',line:${e.line}});};return a;})(${n})`:_+=`,(function(a){if(a===undefined){__self.logger.warn('ユーザ関数『${s}』の引数にundefinedを渡しています。',{file:'${e.file}',line:${e.line}});};return a;})(${n})`})),_=_.substring(1));let v=`${u.js}(${_})`;if(o.asyncFn&&(l=`async ${l}`,v=`await ${v}`,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}`),v=`(${l} (key, type) {\nconst sbf_start = performance.now() * 1000;\ntry {\nreturn `+v+";\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 m="";if(o.return_none)m=""===d?""===f?`${v};\n`:`${f} ${v};\n`:`${f}try {\n${h(v,1)};\n} finally {\n${h(d,1)}}\n`;else{let s="";0===this.speedMode.invalidSore&&(s=`${this.varname("それ")} = `),m=""===f&&""===d?`(${s}${v})`:""===d?`(${l}(){\n${h(`${f};\nreturn ${s} ${v}`,1)}}).call(this)`:`(${l}(){\n${h(`${f}try {\n${h(`return ${s}${v};`,1)}\n} finally {\n${h(d,1)}}`,1)}}).call(this)`,("して"===e.josi||""===e.josi&&!n)&&(m+=";\n")}return 0===u.i&&0!==this.performanceMonitor.systemFunction&&(m="(function (key, type) {\nconst sf_start = performance.now() * 1000;\ntry {\nreturn "+m+";\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`),m}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='プラグインの初期化';\n"+n),e}}},5564: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("|")+")")},4392:function(e,n,s){s.d(n,{S:function(){return m}});var t=s(9493),u=s(9078),a=s(5564);const o=/^[\u3005\u4E00-\u9FCF_a-zA-Z0-9ァ-ヶー\u2460-\u24FF\u2776-\u277F\u3251-\u32BF]+/,i=/^[ぁ-ん]/,r=/^[ぁ-ん]+$/,c=/^.+(以上|以下|超|未満)$/,l=e=>function(){throw new Error("突然の『"+e+"』があります。")},f=/^(円|ドル|元|歩|㎡|坪|度|℃|°|個|つ|本|冊|才|歳|匹|枚|皿|セット|羽|人|件|行|列|機|品|m|mm|cm|km|g|kg|t|px|dot|pt|em|b|mb|kb|gb)/,d=[{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:_},{name:"number",pattern:/^0[oO][0-7]+(_[0-7]+)*/,readJosi:!0,cb:_},{name:"number",pattern:/^0[bB][0-1]+(_[0-1]+)*/,readJosi:!0,cb:_},{name:"number",pattern:/^\d+(_\d+)*\.(\d+(_\d+)*)?([eE][+|-]?\d+(_\d+)*)?/,readJosi:!0,cb:_},{name:"number",pattern:/^\.\d+(_\d+)*([eE][+|-]?\d+(_\d+)*)?/,readJosi:!0,cb:_},{name:"number",pattern:/^\d+(_\d+)*([eE][+|-]?\d+(_\d+)*)?/,readJosi:!0,cb:_},{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:"line_comment",pattern:/^(!|💡)(インデント構文|ここまでだるい)[^\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=>h("🌿","🌿",e)},{name:"string_ex",pattern:/^🌴/,cbParser:e=>h("🌴","🌴",e)},{name:"string_ex",pattern:/^「/,cbParser:e=>h("「","」",e)},{name:"string",pattern:/^『/,cbParser:e=>h("『","』",e)},{name:"string_ex",pattern:/^“/,cbParser:e=>h("“","”",e)},{name:"string_ex",pattern:/^"/,cbParser:e=>h('"','"',e)},{name:"string",pattern:/^'/,cbParser:e=>h("'","'",e)},{name:"」",pattern:/^」/,cbParser:l("」")},{name:"』",pattern:/^』/,cbParser:l("』")},{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=a.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=o.exec(e);if(n){s+=n[0],e=e.substr(n[0].length);continue}if(!i.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=c.exec(s);u&&(e=u[1]+t+e,t="",s=s.substr(0,s.length-u[1].length));a.removeJosiMap[t]&&(t="");n&&(s=function(e){if(!i.test(e))return e.replace(/[ぁ-ん]+/g,"");if(r.test(e))return e;return e.replace(/[ぁ-ん]+$/g,"")}(s));""===s&&""!==t&&(s=t,t="");return{src:e,res:s,josi:t,numEOL:0}}}];function h(e,n,s){let t="",u="",o=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=a.josiRE.exec(s);r&&(u=r[0].replace(/^\s+/,""),","===(s=s.substr(r[0].length)).charAt(0)&&(s=s.substr(1))),a.removeJosiMap[u]&&(u="");for(let e=0;e<t.length;e++)"\n"===t.charAt(e)&&o++;return{src:s,res:t,josi:u,numEOL:o}}function _(e){return Number(e.replace(/_/g,""))}var v=s(5154);class m{constructor(e){this.logger=e,this.funclist={},this.modList=[],this.result=[],this.modName="inline"}setFuncList(e){this.funclist=e}replaceTokens(e,n,s){if(this.result=e,this.modName=m.filenameToModName(s),m.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,file:e.file,josi:"",value:"---",startOffset:e.startOffset,endOffset:e.endOffset,rawJosi:""}),this.result.push({type:"eof",line:e.line,column:0,file:e.file,josi:"",value:"",startOffset:e.startOffset,endOffset:e.endOffset,rawJosi:""})}else this.result.push({type:"eol",line:0,column:0,file:"",josi:"",value:"---",startOffset:0,endOffset:0,rawJosi:""}),this.result.push({type:"eof",line:0,column:0,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:"関数",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:"回",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=m.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?m.filenameToModName(e[0].file):"inline";for(;s<e.length;){const o=e[s];if("word"===o.type&&"それ"!==o.value){const e=o.value;if(e.indexOf("__")<0){const n=`${u}__${e}`,s=this.funclist[n];if(s&&"func"===s.type){o.type="func",o.meta=s,o.value=n;continue}for(const n of this.modList){const s=`${n}__${e}`,t=this.funclist[s];if(t&&"func"===t.type){o.type="func",o.meta=t,o.value=s;break}}if("func"===o.type)continue}const n=this.funclist[e];n&&"func"===n.type&&(o.type="func",o.meta=n)}if("-"===o.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===o.josi&&(o.josi=""),"は"!==o.josi)if("とは"!==o.josi)if(a.tararebaMap[o.josi]){const n="でなければ"===o.josi||"なければ"===o.josi?"でなければ":"ならば";o.rawJosi||(o.rawJosi=n);const t=void 0===o.endOffset?void 0:o.endOffset-o.rawJosi.length;e.splice(s+1,0,{type:"ならば",value:n,line:o.line,column:o.column,file:o.file,startOffset:t,endOffset:o.endOffset,josi:"",rawJosi:""}),o.josi=o.rawJosi="",o.endOffset=t,s+=2}else"_eol"!==o.type?"line_comment"!==o.type&&"range_comment"!==o.type?("eol"===o.type&&(o.value=n.join("/"),n=[]),s++):(n.push(o.value),e.splice(s,1)):e.splice(s,1);else{o.rawJosi||(o.rawJosi=o.josi);const n=void 0===o.endOffset?void 0:o.endOffset-o.rawJosi.length;e.splice(s+1,0,{type:o.josi,line:o.line,column:o.column,file:o.file,startOffset:n,endOffset:o.endOffset,josi:"",rawJosi:"",value:void 0}),o.josi=o.rawJosi="",o.endOffset=n,s+=2}else{o.rawJosi||(o.rawJosi=o.josi);const n=void 0===o.endOffset?void 0:o.endOffset-o.rawJosi.length;e.splice(s+1,0,{type:"eq",line:o.line,column:o.column,file:o.file,startOffset:n,endOffset:o.endOffset,josi:"",rawJosi:"",value:void 0}),s+=2,o.josi=o.rawJosi="",o.endOffset=n}}}tokenize(e,n,s){const t=e.length,u=[];let o,i,r=1,c=!1;for(;""!==e;){let l=!1;for(const h of d){const d=h.pattern.exec(e);if(!d)continue;if(l=!0,"space"===h.name){r+=d[0].length,e=e.substring(d[0].length);continue}if(h.cbParser){let a;if(c&&"word"===h.name)a=h.cbParser(e,!1);else try{a=h.cbParser(e)}catch(u){throw new v.tO(u.message,t-e.length,t-e.length+1,n,s)}if("string_ex"===h.name){const o=this.splitStringEx(a.res);if(null===o)throw new v.cg("展開あり文字列で値の埋め込み{...}が対応していません。",t-e.length,t-a.src.length,n,s);let i=0;for(let c=0;c<o.length;c++){const l=c===o.length-1?a.josi:"";c%2==0?(u.push({type:"string",value:o[c],file:s,josi:l,line:n,column:r,preprocessedCodeOffset:t-e.length+i,preprocessedCodeLength:o[c].length+2+l.length}),i+=o[c].length+2):(u.push({type:"&",value:"&",josi:"",file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i,preprocessedCodeLength:0}),u.push({type:"(",value:"(",josi:"",file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i,preprocessedCodeLength:0}),u.push({type:"code",value:o[c],josi:"",file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i,preprocessedCodeLength:o[c].length}),u.push({type:")",value:")",josi:"",file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i+o[c].length,preprocessedCodeLength:0}),u.push({type:"&",value:"&",josi:"",file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i+o[c].length,preprocessedCodeLength:0}),i+=o[c].length)}n+=a.numEOL,r+=e.length-a.src.length,e=a.src,a.numEOL>0&&(r=1);break}o=r,r+=e.length-a.src.length,u.push({type:h.name,value:a.res,josi:a.josi,line:n,column:o,file:s,preprocessedCodeOffset:t-e.length,preprocessedCodeLength:e.length-a.src.length}),e=a.src,n+=a.numEOL,a.numEOL>0&&(r=1);break}const _=t-e.length;let m=d[0];if(h.cb&&(m=h.cb(m)),o=r,i=n,r+=d[0].length,e=e.substring(d[0].length),("eol"===h.name&&"\n"===m||"_eol"===h.name)&&(m=n++,r=1),"number"===h.name){const n=f.exec(e);n&&(e=e.substring(n[0].length),r+=d[0].length)}let b="";if(h.readJosi){const n=a.josiRE.exec(e);n&&(b=n[0].replace(/^\s+/,""),r+=n[0].length,","===(e=e.substring(n[0].length)).charAt(0)&&(e=e.substring(1)),a.removeJosiMap[b]&&(b=""))}switch(h.name){case"def_test":c=!0;break;case"eol":c=!1}if("dec_lineno"!==h.name){u.push({type:h.name,value:m,line:i,column:o,file:s,josi:b,preprocessedCodeOffset:_,preprocessedCodeLength:t-e.length-_});break}n--}if(!l)throw new v.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"inline";if((e=e.replace(/[\\:]/g,"/")).indexOf("/")>=0){const n=e.split("/");e=n[n.length-1]}return e=e.replace(/\.nako3?$/,"")}}},9493: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)},9078: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(5154),n=s(6211),t=s(7636);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.47",major:3,minor:3,patch:47}},6297:function(e,n,s){s.d(n,{as:function(){return r},cg:function(){return a},ih:function(){return i},k:function(){return u},tO:function(){return o}});var t=s(4228);class u extends Error{constructor(e,n,s,u){const a=`${s||""}${void 0===u?"":`(${u+1}行目): `}`;super(`[${e}]${a}${n=n.replace(/『main__(.+?)』/g,"『$1』")}\n[バージョン] ${t.Z.version}`),this.name="NakoError",this.type="NakoError",this.tag="["+e+"]",this.positionJa=a,this.msg=n}}class a extends u{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 o extends u{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 i extends u{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 i(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 i(e,n.line,t,u,n.file)}}class r extends u{constructor(e,n){let s,t,a,o="unknown";"string"==typeof e?o=e:e instanceof r||e instanceof u?o=e.msg:e instanceof Error&&(o="Error"===e.name?e.message:`${e.name}: ${e.message}`),void 0===n?(s=void 0,t=void 0):(a=/^l(-?\d+):(.*)$/.exec(n))?(s=parseInt(a[1]),t=a[2]):(a=/^l(-?\d+)$/.exec(n))?(s=parseInt(a[1]),t="main.nako3"):(s=0,t=n),super("実行時エラー",o,t,s),this.type="NakoRuntimeError",this.lineNo=n,this.line=s,this.file=t}}},9485:function(e,n,s){s.d(n,{Jc:function(){return a}});var t=s(6297),u=s(8294);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.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){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 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";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("それ")}return 0===this.warnUndefinedReturnUserFunc?n+`return ${s};`:n+`return (function(a){if(a===undefined){__self.logger.warn('ユーザ関数からundefinedが返されています',{file:'${e.file}',line:${e.line}});};return a;})(${s});`}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+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};let _;0===this.warnUndefinedCallingUserFunc&&0!==u.i||0===this.warnUndefinedCallingSystemFunc&&0===u.i?_=r.join(","):(_="",r.forEach((n=>{"__self"===n?_+=`,${n}`:0===u.i?_+=`,(function(a){if(a===undefined){__self.logger.warn('命令『${s}』の引数にundefinedを渡しています。',{file:'${e.file}',line:${e.line}});};return a;})(${n})`:_+=`,(function(a){if(a===undefined){__self.logger.warn('ユーザ関数『${s}』の引数にundefinedを渡しています。',{file:'${e.file}',line:${e.line}});};return a;})(${n})`})),_=_.substring(1));let v=`${u.js}(${_})`;if(o.asyncFn&&(l=`async ${l}`,v=`await ${v}`,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}`),v=`(${l} (key, type) {\nconst sbf_start = performance.now() * 1000;\ntry {\nreturn `+v+";\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 m="";if(o.return_none)m=""===d?""===f?`${v};\n`:`${f} ${v};\n`:`${f}try {\n${h(v,1)};\n} finally {\n${h(d,1)}}\n`;else{let s="";0===this.speedMode.invalidSore&&(s=`${this.varname("それ")} = `),m=""===f&&""===d?`(${s}${v})`:""===d?`(${l}(){\n${h(`${f};\nreturn ${s} ${v}`,1)}}).call(this)`:`(${l}(){\n${h(`${f}try {\n${h(`return ${s}${v};`,1)}\n} finally {\n${h(d,1)}}`,1)}}).call(this)`,("して"===e.josi||""===e.josi&&!n)&&(m+=";\n")}return 0===u.i&&0!==this.performanceMonitor.systemFunction&&(m="(function (key, type) {\nconst sf_start = performance.now() * 1000;\ntry {\nreturn "+m+";\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`),m}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("|")+")")},8294:function(e,n,s){s.d(n,{S:function(){return m}});var t=s(7206),u=s(515),a=s(8775);const o=/^[\u3005\u4E00-\u9FCF_a-zA-Z0-9ァ-ヶー\u2460-\u24FF\u2776-\u277F\u3251-\u32BF]+/,i=/^[ぁ-ん]/,r=/^[ぁ-ん]+$/,c=/^.+(以上|以下|超|未満)$/,l=e=>function(){throw new Error("突然の『"+e+"』があります。")},f=/^(円|ドル|元|歩|㎡|坪|度|℃|°|個|つ|本|冊|才|歳|匹|枚|皿|セット|羽|人|件|行|列|機|品|m|mm|cm|km|g|kg|t|px|dot|pt|em|b|mb|kb|gb)/,d=[{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:_},{name:"number",pattern:/^0[oO][0-7]+(_[0-7]+)*/,readJosi:!0,cb:_},{name:"number",pattern:/^0[bB][0-1]+(_[0-1]+)*/,readJosi:!0,cb:_},{name:"number",pattern:/^\d+(_\d+)*\.(\d+(_\d+)*)?([eE][+|-]?\d+(_\d+)*)?/,readJosi:!0,cb:_},{name:"number",pattern:/^\.\d+(_\d+)*([eE][+|-]?\d+(_\d+)*)?/,readJosi:!0,cb:_},{name:"number",pattern:/^\d+(_\d+)*([eE][+|-]?\d+(_\d+)*)?/,readJosi:!0,cb:_},{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:"line_comment",pattern:/^(!|💡)(インデント構文|ここまでだるい)[^\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=>h("🌿","🌿",e)},{name:"string_ex",pattern:/^🌴/,cbParser:e=>h("🌴","🌴",e)},{name:"string_ex",pattern:/^「/,cbParser:e=>h("「","」",e)},{name:"string",pattern:/^『/,cbParser:e=>h("『","』",e)},{name:"string_ex",pattern:/^“/,cbParser:e=>h("“","”",e)},{name:"string_ex",pattern:/^"/,cbParser:e=>h('"','"',e)},{name:"string",pattern:/^'/,cbParser:e=>h("'","'",e)},{name:"」",pattern:/^」/,cbParser:l("」")},{name:"』",pattern:/^』/,cbParser:l("』")},{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=a.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=o.exec(e);if(n){s+=n[0],e=e.substr(n[0].length);continue}if(!i.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=c.exec(s);u&&(e=u[1]+t+e,t="",s=s.substr(0,s.length-u[1].length));a.removeJosiMap[t]&&(t="");n&&(s=function(e){if(!i.test(e))return e.replace(/[ぁ-ん]+/g,"");if(r.test(e))return e;return e.replace(/[ぁ-ん]+$/g,"")}(s));""===s&&""!==t&&(s=t,t="");return{src:e,res:s,josi:t,numEOL:0}}}];function h(e,n,s){let t="",u="",o=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=a.josiRE.exec(s);r&&(u=r[0].replace(/^\s+/,""),","===(s=s.substr(r[0].length)).charAt(0)&&(s=s.substr(1))),a.removeJosiMap[u]&&(u="");for(let e=0;e<t.length;e++)"\n"===t.charAt(e)&&o++;return{src:s,res:t,josi:u,numEOL:o}}function _(e){return Number(e.replace(/_/g,""))}var v=s(6297);class m{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=m.filenameToModName(s),m.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,file:e.file,josi:"",value:"---",startOffset:e.startOffset,endOffset:e.endOffset,rawJosi:""}),this.result.push({type:"eof",line:e.line,column:0,file:e.file,josi:"",value:"",startOffset:e.startOffset,endOffset:e.endOffset,rawJosi:""})}else this.result.push({type:"eol",line:0,column:0,file:"",josi:"",value:"---",startOffset:0,endOffset:0,rawJosi:""}),this.result.push({type:"eof",line:0,column:0,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:"関数",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:"回",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=m.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?m.filenameToModName(e[0].file):"main.nako3";for(;s<e.length;){const o=e[s];if("word"===o.type&&"それ"!==o.value){const e=o.value;if(e.indexOf("__")<0){const n=`${u}__${e}`,s=this.funclist[n];if(s&&"func"===s.type){o.type="func",o.meta=s,o.value=n;continue}for(const n of this.modList){const s=`${n}__${e}`,t=this.funclist[s];if(t&&"func"===t.type){o.type="func",o.meta=t,o.value=s;break}}if("func"===o.type)continue}const n=this.funclist[e];n&&"func"===n.type&&(o.type="func",o.meta=n)}if("-"===o.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===o.josi&&(o.josi=""),"は"!==o.josi)if("とは"!==o.josi)if(a.tararebaMap[o.josi]){const n="でなければ"===o.josi||"なければ"===o.josi?"でなければ":"ならば";o.rawJosi||(o.rawJosi=n);const t=void 0===o.endOffset?void 0:o.endOffset-o.rawJosi.length;e.splice(s+1,0,{type:"ならば",value:n,line:o.line,column:o.column,file:o.file,startOffset:t,endOffset:o.endOffset,josi:"",rawJosi:""}),o.josi=o.rawJosi="",o.endOffset=t,s+=2}else"_eol"!==o.type?"line_comment"!==o.type&&"range_comment"!==o.type?("eol"===o.type&&(o.value=n.join("/"),n=[]),s++):(n.push(o.value),e.splice(s,1)):e.splice(s,1);else{o.rawJosi||(o.rawJosi=o.josi);const n=void 0===o.endOffset?void 0:o.endOffset-o.rawJosi.length;e.splice(s+1,0,{type:o.josi,line:o.line,column:o.column,file:o.file,startOffset:n,endOffset:o.endOffset,josi:"",rawJosi:"",value:void 0}),o.josi=o.rawJosi="",o.endOffset=n,s+=2}else{o.rawJosi||(o.rawJosi=o.josi);const n=void 0===o.endOffset?void 0:o.endOffset-o.rawJosi.length;e.splice(s+1,0,{type:"eq",line:o.line,column:o.column,file:o.file,startOffset:n,endOffset:o.endOffset,josi:"",rawJosi:"",value:void 0}),s+=2,o.josi=o.rawJosi="",o.endOffset=n}}}tokenize(e,n,s){const t=e.length,u=[];let o,i,r=1,c=!1;for(;""!==e;){let l=!1;for(const h of d){const d=h.pattern.exec(e);if(!d)continue;if(l=!0,"space"===h.name){r+=d[0].length,e=e.substring(d[0].length);continue}if(h.cbParser){let a;if(c&&"word"===h.name)a=h.cbParser(e,!1);else try{a=h.cbParser(e)}catch(u){throw new v.tO(u.message,t-e.length,t-e.length+1,n,s)}if("string_ex"===h.name){const o=this.splitStringEx(a.res);if(null===o)throw new v.cg("展開あり文字列で値の埋め込み{...}が対応していません。",t-e.length,t-a.src.length,n,s);let i=0;for(let c=0;c<o.length;c++){const l=c===o.length-1?a.josi:"";c%2==0?(u.push({type:"string",value:o[c],file:s,josi:l,line:n,column:r,preprocessedCodeOffset:t-e.length+i,preprocessedCodeLength:o[c].length+2+l.length}),i+=o[c].length+2):(u.push({type:"&",value:"&",josi:"",file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i,preprocessedCodeLength:0}),u.push({type:"(",value:"(",josi:"",file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i,preprocessedCodeLength:0}),u.push({type:"code",value:o[c],josi:"",file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i,preprocessedCodeLength:o[c].length}),u.push({type:")",value:")",josi:"",file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i+o[c].length,preprocessedCodeLength:0}),u.push({type:"&",value:"&",josi:"",file:s,line:n,column:r,preprocessedCodeOffset:t-e.length+i+o[c].length,preprocessedCodeLength:0}),i+=o[c].length)}n+=a.numEOL,r+=e.length-a.src.length,e=a.src,a.numEOL>0&&(r=1);break}o=r,r+=e.length-a.src.length,u.push({type:h.name,value:a.res,josi:a.josi,line:n,column:o,file:s,preprocessedCodeOffset:t-e.length,preprocessedCodeLength:e.length-a.src.length}),e=a.src,n+=a.numEOL,a.numEOL>0&&(r=1);break}const _=t-e.length;let m=d[0];if(h.cb&&(m=h.cb(m)),o=r,i=n,r+=d[0].length,e=e.substring(d[0].length),("eol"===h.name&&"\n"===m||"_eol"===h.name)&&(m=n++,r=1),"number"===h.name){const n=f.exec(e);n&&(e=e.substring(n[0].length),r+=d[0].length)}let b="";if(h.readJosi){const n=a.josiRE.exec(e);n&&(b=n[0].replace(/^\s+/,""),r+=n[0].length,","===(e=e.substring(n[0].length)).charAt(0)&&(e=e.substring(1)),a.removeJosiMap[b]&&(b=""))}switch(h.name){case"def_test":c=!0;break;case"eol":c=!1}if("dec_lineno"!==h.name){u.push({type:h.name,value:m,line:i,column:o,file:s,josi:b,preprocessedCodeOffset:_,preprocessedCodeLength:t-e.length-_});break}n--}if(!l)throw new v.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)}}()}();
|
package/release/plugin_csv.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(){"use strict";
|
|
1
|
+
!function(){var t={8516:function(t,r,e){t.exports=e(4869)},9985:function(t){"use strict";var r={delimiter:",",eol:"\r\n"};t.exports={options:r,parse:function(t,e){null==e&&(e=r.delimiter),t=(t=(t+="\n").replace(/(\r\n|\r)/g,"\n")).replace(/\s+$/,"")+"\n";for(var o=new RegExp("^(.*?)([\\"+e+"\\n])"),n=function(t){return"string"==typeof t&&t.search(/^[0-9\.]+$/)>=0&&(t=parseFloat(t)),t},s=[],i=[],u="";""!=t;)if((u=t.charAt(0))!==e)if("\n"!==u)if((u=(t=t.replace(/^\s+/,"")).charAt(0))!==e)if("="!==u||'"'!==t.charAt(1))if('"'===u)if('""'!=t.substr(0,2)){for(var p=1,f="";p<t.length;){var l=t.charAt(p),h=t.charAt(p+1);if('"'!=l||'"'!=h)if('"'!=l)f+=l,p++;else{if(p++,h==e){p++,i.push(n(f)),f="";break}if("\n"==h){p++,i.push(n(f)),s.push(i),i=[];break}p++}else p+=2,f+='"'}t=t.substr(p)}else i.push(""),t=t.substr(2);else{var a=o.exec(t);if(!a){i.push(n(t)),s.push(i),i=[];break}"\n"==a[2]?(i.push(n(a[1])),s.push(i),i=[]):a[2]==e&&i.push(n(a[1])),t=t.substr(a[0].length)}else t=t.substr(1);else console.log("delimiter"),i.push(""),t=t.substr(e.length);else i.push(""),s.push(i),i=[],t=t.substr(1);else t=t.substr(1),i.push("");return i.length>0&&s.push(i),s},stringify:function(t,e,o){null==e&&(e=r.delimiter),null==o&&(o=r.eol);var n=function(t,r){return function(r){var e=!1;return((r=""+r).indexOf("\n")>=0||r.indexOf("\r")>=0)&&(e=!0),r.indexOf(t)>=0&&(e=!0),r.indexOf('"')>=0&&(e=!0,r=r.replace(/\"/g,'""')),e&&(r='"'+r+'"'),r}}(e);if(null==t)return"";for(var s="",i=0;i<t.length;i++){var u=t[i];if(null!=u){for(var p=0;p<u.length;p++)u[p]=n(u[p]);s+=u.join(e)+o}else s+=o}return s=s.replace(/(\r\n|\r|\n)/g,o)}}},4869:function(t,r,e){"use strict";var o=e(9985);function n(){for(var t in this.rows=[],this.options=[],this.useHeader=!1,o.options)this.options[t]=o.options[t]}n.prototype.toString=function(){var t=this.options.delimiter,r=this.options.eol;return o.stringify(this.rows,t,r)},n.prototype.parse=function(t,r){this.rows=o.parse(t,r)},n.prototype.fromString=n.prototype.parse,n.prototype.stringify=n.prototype.toString,n.prototype.getCell=function(t,r){return this.rows[t][r]},n.prototype.setCell=function(t,r,e){for(var o=this.getColSize();this.rows.length<=t;){for(var n=[],s=0;s<o;s++)n.push("");this.rows.push(n)}this.rows[t][r]=e},n.prototype.getColSize=function(){return 0==this.rows.length?0:this.rows[0].length},n.prototype.setArray=function(t){this.rows=t},n.prototype.getArray=function(){return this.rows},n.prototype.getRowValues=function(t){return t>=this.length?[]:this.rows[t]},n.prototype.getColValues=function(t){var r=[];for(var e in this.rows){var o=this.rows[e];r.push(o[t])}return r},n.prototype.find=function(t,r,e){null==e&&(e=this.useHeader?1:0);for(var o=e;o<this.rows.length;o++){if(this.rows[o][t]==r)return o}return-1},n.prototype.findAll=function(t,r,e,o){var n=[];null==e&&(e=this.useHeader?1:0),null==o&&(o=this.rows.length);for(var s=e;s<this.rows.length;s++){var i=this.rows[s];if(i[t]==r&&(n.push(i),o<=n.length))break}return n},n.prototype.filter=function(t,r){return this.rows.filter((function(e,o,n){if(null==e)return!1;var s=e[t];return r(s,o,n)}))},n.prototype.sort=function(t,r){var e;if(null==r&&(r=!0),e=r?function(r,e){return r[t]>e[t]?1:-1}:function(r,e){return r[t]<e[t]?1:-1},this.useHeader){var o=this.rows.shift();this.rows.sort(e),this.rows.unshift(o)}else this.rows.sort(e)},n.prototype.sortNumber=function(t,r){var e;if(null==r&&(r=!0),e=r?function(r,e){return parseFloat(r[t])-parseFloat(e[t])}:function(r,e){return parseFloat(e[t])-parseFloat(r[t])},this.useHeader){var o=this.rows.shift();this.rows.sort(e),this.rows.unshift(o)}else this.rows.sort(e)},n.prototype.insertRow=function(t,r){this.rows.splice(t,0,r)},n.prototype.insert=n.prototype.insertRow,n.prototype.add=function(t){this.rows.push(t)},n.prototype.deleteRow=function(t){return this.rows.splice(t,1)},n.prototype.insertCol=function(t,r){this.rows.map((function(e,o,n){return e.splice(t,0,r[o]),e}))},n.prototype.deleteCol=function(t){this.rows.map((function(r,e,o){return r.splice(t,1),r}))},Object.defineProperty(n.prototype,"length",{get:function(){return null==this.rows?0:this.rows.length}}),o.CSVObject=n,t.exports=o}},r={};function e(o){var n=r[o];if(void 0!==n)return n.exports;var s=r[o]={exports:{}};return t[o](s,s.exports,e),s.exports}!function(){"use strict";var t=e(8516);const r={"初期化":{type:"func",josi:[],pure:!0,fn:function(t){}},"CSV取得":{type:"func",josi:[["を","の","で"]],pure:!0,fn:function(r){return t.options.delimiter=",",t.parse(r)}},"TSV取得":{type:"func",josi:[["を","の","で"]],pure:!0,fn:function(r){return t.options.delimiter="\t",t.parse(r)}},"表CSV変換":{type:"func",josi:[["を"]],pure:!0,fn:function(r){return t.options.delimiter=",",t.stringify(r)}},"表TSV変換":{type:"func",josi:[["を"]],pure:!0,fn:function(r){return t.options.delimiter="\t",t.stringify(r)}}};"object"==typeof navigator&&"object"==typeof navigator.nako3&&navigator.nako3.addPluginObject("PluginCSV",r)}()}();
|