nadesiko3 3.7.20 → 3.7.21

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.
Files changed (40) hide show
  1. package/batch/command.txt +115 -113
  2. package/core/package.json +2 -2
  3. package/core/src/README.md +98 -0
  4. package/core/src/nako_core_version.mjs +2 -2
  5. package/core/src/nako_core_version.mts +2 -2
  6. package/package.json +21 -27
  7. package/release/_hash.txt +36 -36
  8. package/release/_script-tags.txt +16 -16
  9. package/release/command.json +1 -1
  10. package/release/command.json.js +1 -1
  11. package/release/command_cnako3.json +1 -1
  12. package/release/command_list.json +1 -1
  13. package/release/edit_main.js +2 -2
  14. package/release/edit_main.js.map +3 -3
  15. package/release/editor.js +2 -2
  16. package/release/plugin_datetime.js +1 -1
  17. package/release/plugin_datetime.js.map +3 -3
  18. package/release/plugin_markup.js +28 -28
  19. package/release/plugin_markup.js.map +3 -3
  20. package/release/version.js +2 -2
  21. package/release/version_main.js +2 -2
  22. package/release/version_main.js.map +2 -2
  23. package/release/wnako3.js +13 -13
  24. package/release/wnako3.js.map +2 -2
  25. package/release/wnako3webworker.js +1 -1
  26. package/release/wnako3webworker.js.map +1 -1
  27. package/src/cnako3mod.mjs +1 -2
  28. package/src/cnako3mod.mts +1 -2
  29. package/src/nako_version.mjs +2 -2
  30. package/src/nako_version.mts +2 -2
  31. package/src/plugin_httpserver.mjs +184 -13
  32. package/src/plugin_httpserver.mts +176 -10
  33. package/src/plugin_node.mjs +0 -1
  34. package/src/plugin_node.mts +0 -1
  35. package/src/wnako3mod.mjs +3 -0
  36. package/src/wnako3mod.mts +3 -0
  37. package/test/common/wnako3mod_test.mjs +48 -0
  38. package/test/node/package_json_test.mjs +17 -0
  39. package/test/node/plugin_httpserver_test.mjs +239 -0
  40. package/tools/nako3server/index.nako3 +4 -2
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../core/src/nako_parser_const.mjs", "../core/src/nako_types.mjs", "../core/src/nako_parser_base.mjs", "../core/src/nako_errors.mjs", "../core/src/nako_reserved_words.mjs", "../core/src/nako_indent_chars.mjs", "../core/src/nako_josi_list.mjs", "../core/src/nako_lex_rules.mjs", "../core/src/nako_lexer.mjs", "../core/src/nako_parser3.mjs", "../core/src/nako_prepare.mjs", "../core/src/nako_gen.mjs", "../core/src/nako_tools.mjs", "../core/src/nako_indent_inline.mjs", "../core/src/nako_from_dncl.mjs", "../core/src/nako_from_dncl2.mjs", "../core/src/nako_source_mapping.mjs", "../core/src/nako_colors.mjs", "../core/src/nako_logger.mjs", "../core/src/nako_global.mjs", "../core/src/nako_core_version.mjs", "../core/src/plugin_system.mjs", "../core/src/plugin_math.mjs", "../core/src/nako_csv.mjs", "../core/src/plugin_csv.mjs", "../core/src/plugin_promise.mjs", "../core/node_modules/smol-toml/dist/error.js", "../core/node_modules/smol-toml/dist/util.js", "../core/node_modules/smol-toml/dist/date.js", "../core/node_modules/smol-toml/dist/primitive.js", "../core/node_modules/smol-toml/dist/extract.js", "../core/node_modules/smol-toml/dist/struct.js", "../core/node_modules/smol-toml/dist/parse.js", "../core/node_modules/smol-toml/dist/stringify.js", "../core/node_modules/smol-toml/dist/index.js", "../core/src/plugin_toml.mjs", "../core/src/plugin_test.mjs", "../core/src/nako3.mjs", "../src/plugin_browser_color.mjs", "../src/plugin_browser_ajax.mjs", "../src/plugin_browser_html.mjs", "../src/plugin_browser_websocket.mjs", "../src/plugin_browser_in_worker.mjs", "../src/plugin_worker.mjs", "../src/wnako3webworker.mjs"],
4
- "sourcesContent": ["export const opPriority = {\n // and or\n 'and': 1,\n 'or': 1,\n // compare\n 'eq': 2,\n 'noteq': 2,\n '===': 2,\n '!==': 2,\n 'gt': 2,\n 'gteq': 2,\n 'lt': 2,\n 'lteq': 2,\n '&': 3,\n // + - << >> >>>\n '+': 4,\n '-': 4,\n 'shift_l': 4,\n 'shift_r': 4,\n 'shift_r0': 4,\n // * /\n '*': 5,\n '/': 5, // \u4E00\u822C\u7684\u306A\u5272\u308A\u7B97\n '\u00F7': 5, // \u4E00\u822C\u7684\u306A\u5272\u308A\u7B97\n '\u00F7\u00F7': 5, // \u6574\u6570\u306E\u5272\u308A\u7B97\n '%': 5,\n // ^\n '^': 6,\n '**': 6\n};\nexport const RenbunJosi = [\n '\u3044\u3066', '\u3048\u3066', '\u304D\u3066', '\u3051\u3066', '\u3057\u3066', '\u3063\u3066', '\u306B\u3066', '\u307F\u3066', '\u3081\u3066', '\u306D\u3066', '\u306B\u306F', '\u3093\u3067'\n];\nexport const operatorList = [];\nfor (const key in opPriority) {\n operatorList.push(key);\n}\n", "/**\n * \u306A\u3067\u3057\u30533 \u306E TypeScript \u306E\u305F\u3081\u306E\u578B\u5B9A\u7FA9\n */\nexport function NewEmptyToken(type = '?', value = '', indent = -1, line = 0, file = 'main.nako3') {\n return {\n type,\n value,\n indent,\n line,\n column: 0,\n file,\n josi: ''\n };\n}\n", "import { NewEmptyToken } from './nako_types.mjs';\n/**\n * \u306A\u3067\u3057\u3053\u306E\u69CB\u6587\u89E3\u6790\u306E\u305F\u3081\u306E\u30E6\u30FC\u30C6\u30A3\u30EA\u30C6\u30A3\u30AF\u30E9\u30B9\n */\nexport class NakoParserBase {\n constructor(logger) {\n this.logger = logger;\n this.stackList = []; // \u95A2\u6570\u5B9A\u7FA9\u306E\u969B\u306B\u30B9\u30BF\u30C3\u30AF\u304C\u6DF7\u4E71\u3057\u306A\u3044\u3088\u3046\u306B\u6574\u7406\u3059\u308B\n this.tokens = [];\n this.usedFuncs = new Set();\n /** @type {import('./nako3.mjs').Ast[]} */\n this.stack = [];\n this.index = 0;\n /** \u30C8\u30FC\u30AF\u30F3\u51FA\u73FE\u30C1\u30A7\u30C3\u30AF(accept\u95A2\u6570)\u306B\u5229\u7528\u3059\u308B\n * @type {import('./nako3.mjs').Ast[]}\n */\n this.y = [];\n /** \u30E2\u30B8\u30E5\u30EB\u540D @type {string} */\n this.modName = 'inline';\n this.namespaceStack = [];\n /**\n * \u5229\u7528\u3059\u308B\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u540D\u524D\u4E00\u89A7\n * @type {Array<string>}\n */\n this.modList = [];\n /** \u30B0\u30ED\u30FC\u30D0\u30EB\u5909\u6570\u30FB\u95A2\u6570\u306E\u78BA\u8A8D\u7528 */\n this.funclist = new Map();\n this.funcLevel = 0;\n this.usedAsyncFn = false; // asyncFn\u306E\u547C\u3073\u51FA\u3057\u304C\u3042\u308B\u304B\u3069\u3046\u304B\n /**\n * \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u306E\u78BA\u8A8D\u7528\n * @type {Object.<string,Object>}\n */\n this.localvars = new Map([['\u305D\u308C', { type: 'var', value: '' }]]);\n /** \u30B3\u30FC\u30C9\u751F\u6210\u5668\u306E\u540D\u524D @type {string} */\n this.genMode = 'sync'; // #637\n /** \u914D\u5217\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u304C\u5148\u982D\u8981\u7D20(#1140) @type {int} */\n this.arrayIndexFrom = 0;\n /** \u914D\u5217\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u9806\u5E8F\u3092\u53CD\u5BFE\u306B\u3059\u308B\u304B(#1140) @type {boolean} */\n this.flagReverseArrayIndex = false;\n /** \u914D\u5217\u3092\u81EA\u52D5\u7684\u306B\u521D\u671F\u5316\u3059\u308B\u304B(#1140) @type {boolean} */\n this.flagCheckArrayInit = false;\n /** \u6700\u8FD1\u547C\u3073\u51FA\u3057\u305F\u95A2\u6570(\u4F59\u5270\u30A8\u30E9\u30FC\u306E\u5831\u544A\u306B\u4F7F\u3046) */\n this.recentlyCalledFunc = [];\n // \u69CB\u6587\u89E3\u6790\u306B\u5229\u7528\u3059\u308B - \u73FE\u5728\u8A08\u7B97\u5F0F\u3092\u8AAD\u3093\u3067\u3044\u308B\u304B\u3069\u3046\u304B\n this.isReadingCalc = false;\n // \u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u8A2D\u5B9A\u304C\u672A\u8A2D\u5B9A\u306E\u95A2\u6570\u30FB\u5909\u6570\u306B\u5BFE\u3059\u308B\u65E2\u5B9A\u5024\n this.isExportDefault = true;\n this.isExportStack = [];\n this.moduleExport = new Map();\n this.isModifiedNodes = false;\n this.init();\n }\n init() {\n this.funclist = new Map(); // \u95A2\u6570\u306E\u4E00\u89A7\n this.moduleExport = new Map();\n this.reset();\n }\n reset() {\n this.tokens = []; // \u5B57\u53E5\u89E3\u6790\u6E08\u307F\u306E\u30C8\u30FC\u30AF\u30F3\u306E\u4E00\u89A7\u3092\u4FDD\u5B58\n this.index = 0; // tokens[] \u306E\u3069\u3053\u307E\u3067\u8AAD\u3093\u3060\u304B\u3092\u7BA1\u7406\u3059\u308B\n this.stack = []; // \u8A08\u7B97\u7528\u306E\u30B9\u30BF\u30C3\u30AF ... \u76F4\u63A5\u306F\u64CD\u4F5C\u305B\u305A\u3001pushStack() popStack() \u3092\u4ECB\u3057\u3066\u4F7F\u3046\n this.y = []; // accept()\u3067\u89E3\u6790\u6E08\u307F\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u914D\u5217\u3067\u5F97\u308B\u3068\u304D\u306B\u4F7F\u3046\n this.genMode = 'sync'; // #637, #1056\n // \u6B21\u56DE\u5B9F\u884C\u6642\u306B\u6301\u3061\u8D8A\u3055\u308C\u306A\u3044\u3088\u3046\u306B\u521D\u671F\u5316\u3059\u308B (#1746)\n this.localvars = new Map([['\u305D\u308C', { type: 'var', value: '' }]]);\n this.usedFuncs = new Set();\n this.funcLevel = 0;\n this.usedAsyncFn = false;\n this.isReadingCalc = false;\n this.isExportDefault = true;\n this.isExportStack = [];\n this.namespaceStack = [];\n this.modList = [];\n this.stackList = [];\n this.recentlyCalledFunc = [];\n this.arrayIndexFrom = 0;\n this.flagReverseArrayIndex = false;\n this.flagCheckArrayInit = false;\n this.isModifiedNodes = false;\n }\n setFuncList(funclist) {\n this.funclist = funclist;\n }\n setModuleExport(moduleexport) {\n this.moduleExport = moduleexport;\n }\n /**\n * \u7279\u5B9A\u306E\u52A9\u8A5E\u3092\u6301\u3064\u8981\u7D20\u3092\u30B9\u30BF\u30C3\u30AF\u304B\u3089\u4E00\u3064\u4E0B\u308D\u3059\u3001\u6307\u5B9A\u304C\u306A\u3051\u308C\u3070\u672B\u5C3E\u3092\u4E0B\u308D\u3059\n * @param {string[]} josiList \u4E0B\u308D\u3057\u305F\u3044\u52A9\u8A5E\u306E\u914D\u5217\n */\n popStack(josiList = undefined) {\n if (!josiList) {\n const t = this.stack.pop();\n if (t) {\n return t;\n }\n return null;\n }\n // josiList \u306B\u30DE\u30C3\u30C1\u3059\u308B\u52A9\u8A5E\u3092\u63A2\u3059\n for (let i = this.stack.length - 1; i >= 0; i--) {\n const t = this.stack[i];\n if (josiList.length === 0 || josiList.indexOf(t.josi) >= 0) {\n this.stack.splice(i, 1); // remove stack\n this.logger.trace('POP :' + JSON.stringify(t));\n return t;\n }\n }\n // \u8A72\u5F53\u3059\u308B\u52A9\u8A5E\u304C\u898B\u3064\u304B\u3089\u306A\u304B\u3063\u305F\u5834\u5408\n return null;\n }\n /**\n * saveStack \u3068 loadStack \u306F\u5BFE\u3067\u4F7F\u3046\u3002\n * \u95A2\u6570\u5B9A\u7FA9\u306A\u3069\u3067\u30B9\u30BF\u30C3\u30AF\u304C\u6DF7\u4E71\u3057\u306A\u3044\u3088\u3046\u306B\u914D\u616E\u3059\u308B\u305F\u3081\u306E\u3082\u306E\n */\n saveStack() {\n this.stackList.push(this.stack);\n this.stack = [];\n }\n loadStack() {\n this.stack = this.stackList.pop();\n }\n /** \u5909\u6570\u540D\u3092\u63A2\u3059\n * @param {string} name\n * @returns {any}\u5909\u6570\u540D\u306E\u60C5\u5831\n */\n findVar(name) {\n // \u30ED\u30FC\u30AB\u30EB\u5909\u6570\uFF1F\n if (this.localvars.get(name)) {\n return {\n name,\n scope: 'local',\n info: this.localvars.get(name)\n };\n }\n // \u30E2\u30B8\u30E5\u30FC\u30EB\u540D\u3092\u542B\u3093\u3067\u3044\u308B?\n if (name.indexOf('__') >= 0) {\n if (this.funclist.get(name)) {\n return {\n name,\n scope: 'global',\n info: this.funclist.get(name)\n };\n }\n else {\n return undefined;\n }\n }\n // \u30B0\u30ED\u30FC\u30D0\u30EB\u5909\u6570\uFF08\u81EA\u8EAB\uFF09\uFF1F\n const gnameSelf = `${this.modName}__${name}`;\n if (this.funclist.get(gnameSelf)) {\n return {\n name: gnameSelf,\n scope: 'global',\n info: this.funclist.get(gnameSelf)\n };\n }\n // \u30B0\u30ED\u30FC\u30D0\u30EB\u5909\u6570\uFF08\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u691C\u7D22\uFF09\uFF1F\n for (const mod of this.modList) {\n const gname = `${mod}__${name}`;\n const exportDefault = this.moduleExport.get(mod);\n const funcObj = this.funclist.get(gname);\n if (funcObj && (funcObj.isExport === true || (funcObj.isExport !== false && exportDefault !== false))) {\n return {\n name: gname,\n scope: 'global',\n info: this.funclist.get(gname)\n };\n }\n }\n // \u30B7\u30B9\u30C6\u30E0\u5909\u6570 (funclist\u3092\u666E\u901A\u306B\u691C\u7D22)\n if (this.funclist.get(name)) {\n return {\n name,\n scope: 'system',\n info: this.funclist.get(name)\n };\n }\n return undefined;\n }\n /**\n * \u8A08\u7B97\u7528\u306B\u8981\u7D20\u3092\u30B9\u30BF\u30C3\u30AF\u306B\u7A4D\u3080\n */\n pushStack(item) {\n this.logger.trace('PUSH:' + JSON.stringify(item));\n this.stack.push(item);\n }\n /**\n * \u30C8\u30FC\u30AF\u30F3\u306E\u672B\u5C3E\u306B\u9054\u3057\u305F\u304B\n */\n isEOF() {\n return (this.index >= this.tokens.length);\n }\n getIndex() {\n return this.index;\n }\n /**\n * \u30AB\u30FC\u30BD\u30EB\u4F4D\u7F6E\u306B\u3042\u308B\u5358\u8A9E\u306E\u578B\u3092\u78BA\u304B\u3081\u308B\n */\n check(ttype) {\n return (this.tokens[this.index].type === ttype);\n }\n /**\n * \u30AB\u30FC\u30BD\u30EB\u4F4D\u7F6E\u4EE5\u964D\u306B\u3042\u308B\u5358\u8A9E\u306E\u578B\u3092\u78BA\u304B\u3081\u308B 2\u5358\u8A9E\u4EE5\u4E0A\u306B\u5BFE\u5FDC\n * @param a [\u5358\u8A9E1\u306E\u578B, \u5358\u8A9E2\u306E\u578B, ... ]\n */\n check2(a) {\n for (let i = 0; i < a.length; i++) {\n const idx = i + this.index;\n if (this.tokens.length <= idx) {\n return false;\n }\n if (a[i] === '*') {\n continue;\n } // \u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9(\u3069\u3093\u306A\u30BF\u30A4\u30D7\u3082\u8A31\u5BB9)\n const t = this.tokens[idx];\n if (a[i] instanceof Array) {\n if (a[i].indexOf(t.type) < 0) {\n return false;\n }\n continue;\n }\n if (t.type !== a[i]) {\n return false;\n }\n }\n return true;\n }\n /**\n * \u30AB\u30FC\u30BD\u30EB\u4F4D\u7F6E\u306E\u578B\u3092\u78BA\u8A8D\u3059\u308B\u304C\u3001\u8907\u6570\u306E\u7A2E\u985E\u3092\u78BA\u304B\u3081\u3089\u308C\u308B\n */\n checkTypes(a) {\n const type = this.tokens[this.index].type;\n return (a.indexOf(type) >= 0);\n }\n /**\n * check2\u306E\u9AD8\u5EA6\u306A\u3084\u3064\u3001\u578B\u540D\u306E\u4ED6\u306B\u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u95A2\u6570\u3092\u6307\u5B9A\u3067\u304D\u308B\n * \u578B\u306B\u30DE\u30C3\u30C1\u3057\u306A\u3051\u308C\u3070 false \u3092\u8FD4\u3057\u3001\u30AB\u30FC\u30BD\u30EB\u3092\u5DFB\u304D\u623B\u3059\n */\n accept(types) {\n const y = [];\n const tmpIndex = this.index;\n const rollback = () => {\n this.index = tmpIndex;\n return false;\n };\n for (let i = 0; i < types.length; i++) {\n if (this.isEOF()) {\n return rollback();\n }\n const type = types[i];\n if (type === null) {\n return rollback();\n }\n if (typeof type === 'string') {\n const token = this.get();\n if (token && token.type !== type) {\n return rollback();\n }\n y[i] = token;\n continue;\n }\n if (typeof type === 'function') {\n const f = type.bind(this);\n const r = f(y);\n if (r === null) {\n return rollback();\n }\n y[i] = r;\n continue;\n }\n if (type instanceof Array) {\n if (!this.checkTypes(type)) {\n return rollback();\n }\n y[i] = this.get();\n continue;\n }\n throw new Error('System Error : accept broken : ' + typeof type);\n }\n this.y = y;\n return true;\n }\n /**\n * \u30AB\u30FC\u30BD\u30EB\u8A9E\u53E5\u3092\u53D6\u5F97\u3057\u3066\u3001\u30AB\u30FC\u30BD\u30EB\u3092\u5F8C\u308D\u306B\u79FB\u52D5\u3059\u308B\n */\n get() {\n if (this.isEOF()) {\n return null;\n }\n return this.tokens[this.index++];\n }\n /** \u30AB\u30FC\u30BD\u30EB\u8A9E\u53E5\u3092\u53D6\u5F97\u3057\u3066\u30AB\u30FC\u30BD\u30EB\u3092\u9032\u3081\u308B\u3001\u53D6\u5F97\u3067\u304D\u306A\u3051\u308C\u3070\u30A8\u30E9\u30FC\u3092\u51FA\u3059 */\n getCur() {\n if (this.isEOF()) {\n throw new Error('\u30C8\u30FC\u30AF\u30F3\u304C\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3002');\n }\n const t = this.tokens[this.index++];\n if (!t) {\n throw new Error('\u30C8\u30FC\u30AF\u30F3\u304C\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3002');\n }\n return t;\n }\n unget() {\n if (this.index > 0) {\n this.index--;\n }\n }\n /** \u89E3\u6790\u4E2D\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u8FD4\u3059 */\n peek(i = 0) {\n if (this.isEOF()) {\n return null;\n }\n return this.tokens[this.index + i];\n }\n /** \u89E3\u6790\u4E2D\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u8FD4\u3059\u3001\u7121\u7406\u306A\u3089 def \u3092\u8FD4\u3059 */\n peekDef(def = null) {\n if (this.isEOF()) {\n if (!def) {\n def = NewEmptyToken();\n }\n return def;\n }\n return this.tokens[this.index];\n }\n /**\n * \u73FE\u5728\u306E\u30AB\u30FC\u30BD\u30EB\u8A9E\u53E5\u306E\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u4E0A\u306E\u4F4D\u7F6E\u3092\u53D6\u5F97\u3059\u308B\u3002\n */\n peekSourceMap(t = undefined) {\n const token = (t === undefined) ? this.peek() : t;\n if (token === null) {\n return { startOffset: undefined, endOffset: undefined, file: undefined, line: 0, column: 0 };\n }\n return { startOffset: token.startOffset, endOffset: token.endOffset, file: token.file, line: token.line, column: token.column };\n }\n /**\n * depth: \u8868\u793A\u3059\u308B\u6DF1\u3055\n * typeName: \u5148\u982D\u306Etype\u306E\u8868\u793A\u3092\u4E0A\u66F8\u304D\u3059\u308B\u5834\u5408\u306B\u8A2D\u5B9A\u3059\u308B\n * @param {{ depth: number, typeName?: string }} opts\n * @param {boolean} debugMode\n */\n nodeToStr(node, opts, debugMode) {\n const depth = opts.depth - 1;\n const typeName = (name) => (opts.typeName !== undefined) ? opts.typeName : name;\n const debug = debugMode ? (' debug: ' + JSON.stringify(node, null, 2)) : '';\n if (!node) {\n return '(NULL)';\n }\n switch (node.type) {\n case 'not':\n if (depth >= 0) {\n const subNode = node.blocks[0];\n return `${typeName('')}\u300E${this.nodeToStr(subNode, { depth }, debugMode)}\u306B\u6F14\u7B97\u5B50\u300Enot\u300F\u3092\u9069\u7528\u3057\u305F\u5F0F${debug}\u300F`;\n }\n else {\n return `${typeName('\u6F14\u7B97\u5B50')}\u300Enot\u300F`;\n }\n case 'op': {\n const node2 = node;\n let operator = node2.operator || '';\n const table = { eq: '\uFF1D', not: '!', gt: '>', lt: '<', and: '\u304B\u3064', or: '\u307E\u305F\u306F' };\n if (operator in table) {\n operator = table[operator];\n }\n if (depth >= 0) {\n const left = this.nodeToStr(node2.blocks[0], { depth }, debugMode);\n const right = this.nodeToStr(node2.blocks[1], { depth }, debugMode);\n if (node2.operator === 'eq') {\n return `${typeName('')}\u300E${left}\u3068${right}\u304C\u7B49\u3057\u3044\u304B\u3069\u3046\u304B\u306E\u6BD4\u8F03${debug}\u300F`;\n }\n return `${typeName('')}\u300E${left}\u3068${right}\u306B\u6F14\u7B97\u5B50\u300E${operator}\u300F\u3092\u9069\u7528\u3057\u305F\u5F0F${debug}\u300F`;\n }\n else {\n return `${typeName('\u6F14\u7B97\u5B50')}\u300E${operator}${debug}\u300F`;\n }\n }\n case 'number':\n return `${typeName('\u6570\u5024')}${node.value}`;\n case 'bigint':\n return `${typeName('\u5DE8\u5927\u6574\u6570')}${node.value}`;\n case 'string':\n return `${typeName('\u6587\u5B57\u5217')}\u300E${node.value}${debug}\u300F`;\n case 'word':\n return `${typeName('\u5358\u8A9E')}\u300E${node.value}${debug}\u300F`;\n case 'func':\n return `${typeName('\u95A2\u6570')}\u300E${node.name || node.value}${debug}\u300F`;\n case 'eol':\n return '\u884C\u306E\u672B\u5C3E';\n case 'eof':\n return '\u30D5\u30A1\u30A4\u30EB\u306E\u672B\u5C3E';\n default: {\n let name = node.name;\n if (name) {\n name = node.value;\n }\n if (typeof name !== 'string') {\n name = node.type;\n }\n return `${typeName('')}\u300E${name}${debug}\u300F`;\n }\n }\n }\n}\n", "/**\n * \u306A\u3067\u3057\u3053\u8A00\u8A9E\u304C\u6295\u3052\u308B\u5168\u3066\u306E\u30A8\u30E9\u30FC\u304C\u7D99\u627F\u3059\u308B\u30AF\u30E9\u30B9\n */\nexport class NakoError extends Error {\n constructor(tag, msg, file = undefined, line = undefined) {\n // \u30A8\u30E9\u30FC\u4F4D\u7F6E\u3092\u5206\u304B\u308A\u3084\u3059\u304F\u65E5\u672C\u8A9E\u306B\u5909\u63DB\n const positionJa = `${file || ''}${line === undefined ? '' : `(${line + 1}\u884C\u76EE): `}`;\n // #1223 \u30A8\u30E9\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8\u306B\u300Cmain__\u95A2\u6570\u540D\u300D\u3068\u8868\u793A\u3055\u308C\u308B\u306E\u3067\u3001main__\u306F\u7701\u7565\u3057\u3066\u8868\u793A\n msg = msg.replace(/\u300Emain__(.+?)\u300F/g, '\u300E$1\u300F');\n // \u89AA\u306EError\u3092\u547C\u3076\n super(`[${tag}]${positionJa}${msg}`);\n // \u30A8\u30E9\u30FC\u306E\u7A2E\u985E\u3092\u8A2D\u5B9A\n this.name = 'NakoError';\n this.type = 'NakoError';\n this.tag = '[' + tag + ']';\n this.positionJa = positionJa;\n this.msg = msg;\n }\n}\nexport class NakoIndentError extends NakoError {\n /**\n * @param {string} msg\n * @param {number} line\n * @param {string} file\n */\n constructor(msg, line, file) {\n super('\u30A4\u30F3\u30C7\u30F3\u30C8\u30A8\u30E9\u30FC', msg, file, line);\n this.type = 'NakoIndentError';\n this.line = line;\n this.file = file;\n }\n}\n// \u30B3\u30F3\u30D1\u30A4\u30E9\u306E\u5185\u90E8\u3067\u306E\u307F\u4F7F\u3046\u30A8\u30E9\u30FC\u3002\u6295\u3052\u3089\u308C\u305F\u3089try\u3067\u30AD\u30E3\u30C3\u30C1\u3057\u3066LexerError\u3078\u5909\u66F4\u3059\u308B\u3002\nexport class InternalLexerError extends NakoError {\n /**\n * @param {string} msg\n * @param {number} preprocessedCodeStartOffset\n * @param {number} preprocessedCodeEndOffset\n * @param {number | undefined} [line]\n * @param {string | undefined} [file]\n */\n constructor(msg, preprocessedCodeStartOffset, preprocessedCodeEndOffset, line, file) {\n super('\u5B57\u53E5\u89E3\u6790\u30A8\u30E9\u30FC\uFF08\u5185\u90E8\u30A8\u30E9\u30FC\uFF09', msg, file, line);\n this.type = 'InternalLexerError';\n this.preprocessedCodeStartOffset = preprocessedCodeStartOffset;\n this.preprocessedCodeEndOffset = preprocessedCodeEndOffset;\n this.line = line;\n this.file = file;\n }\n}\nexport class NakoLexerError extends NakoError {\n /**\n * @param {string} msg\n * @param {number | null} startOffset\n * @param {number | null} endOffset,\n * @param {number | undefined} line\n * @param {string | undefined} file\n */\n constructor(msg, startOffset, endOffset, line, file) {\n super('\u5B57\u53E5\u89E3\u6790\u30A8\u30E9\u30FC', msg, file, line);\n this.type = 'NakoLexerError';\n this.startOffset = startOffset;\n this.endOffset = endOffset;\n this.line = line;\n this.file = file;\n }\n}\nexport class NakoSyntaxError extends NakoError {\n /**\n * @param {string} msg\n * @param {Ast} first\n * @param {Ast} [last]\n */\n static fromNode(msg, first, last = undefined) {\n if (!first) {\n return new NakoSyntaxError(msg, undefined, undefined, undefined, undefined);\n }\n const startOffset = typeof first.startOffset === 'number' ? first.startOffset : undefined;\n const endOffset = (last && typeof last.endOffset === 'number')\n ? last.endOffset\n : (typeof first.endOffset === 'number' ? first.endOffset : undefined);\n return new NakoSyntaxError(msg, first.line, startOffset, endOffset, first.file);\n }\n /**\n * @param {string} msg\n * @param {number | undefined} line\n * @param {number | undefined} startOffset\n * @param {number | undefined} endOffset\n * @param {string | undefined} file\n */\n constructor(msg, line, startOffset, endOffset, file) {\n super('\u6587\u6CD5\u30A8\u30E9\u30FC', msg, file, line);\n this.type = 'NakoSyntaxError';\n this.file = file;\n this.line = line;\n this.startOffset = startOffset;\n this.endOffset = endOffset;\n }\n}\nexport class NakoRuntimeError extends NakoError {\n /**\n * @param error \u30A8\u30E9\u30FC\n * @param lineNo \u767A\u751F\u884C\n */\n constructor(error, lineNo) {\n let msg = 'unknown';\n if (typeof error === 'string') {\n msg = error;\n }\n else {\n if (error instanceof NakoRuntimeError) {\n msg = error.msg;\n }\n else if (error instanceof NakoError) {\n msg = error.msg;\n }\n else if (error instanceof Error) {\n if (error.name === 'Error') {\n msg = error.message;\n }\n else {\n msg = `${error.name}: ${error.message}`;\n }\n }\n }\n // \u884C\u756A\u53F7\u3092\u8868\u3059\u6587\u5B57\u5217\u3092\u30D1\u30FC\u30B9\u3059\u308B\u3002\n let line;\n let file;\n let matches;\n if (lineNo === undefined) {\n line = undefined;\n file = undefined;\n // eslint-disable-next-line no-cond-assign\n }\n else if (matches = /^l(-?\\d+):(.*)$/.exec(lineNo)) {\n line = parseInt(matches[1]);\n file = matches[2];\n // eslint-disable-next-line no-cond-assign\n }\n else if (matches = /^l(-?\\d+)$/.exec(lineNo)) {\n line = parseInt(matches[1]);\n file = 'main.nako3';\n }\n else {\n line = 0;\n file = lineNo;\n }\n super('\u5B9F\u884C\u6642\u30A8\u30E9\u30FC', msg, file, line);\n this.type = 'NakoRuntimeError';\n this.lineNo = lineNo;\n this.line = line;\n this.file = file;\n }\n}\nexport class NakoImportError extends NakoError {\n /**\n * @param {string} msg\n * @param {string} file\n * @param {number} line\n */\n constructor(msg, file, line) {\n super('\u53D6\u308A\u8FBC\u307F\u30A8\u30E9\u30FC', msg, file, line);\n this.file = file;\n this.line = line;\n }\n}\n", "/** \u4E88\u7D04\u8A9E */\nconst reserved = new Map([\n ['\u3082\u3057', '\u3082\u3057'],\n ['\u56DE', '\u56DE'],\n ['\u56DE\u7E70\u8FD4', '\u56DE'], // (#924)\n ['\u9593', '\u9593'],\n ['\u9593\u7E70\u8FD4', '\u9593'], // (#927)\n ['\u7E70\u8FD4', '\u7E70\u8FD4'],\n ['\u5897\u7E70\u8FD4', '\u5897\u7E70\u8FD4'], // (#1140)\n ['\u6E1B\u7E70\u8FD4', '\u6E1B\u7E70\u8FD4'],\n ['\u5F8C\u5224\u5B9A', '\u5F8C\u5224\u5B9A'], // (#1147)\n ['\u53CD\u5FA9', '\u53CD\u5FA9'],\n ['\u629C', '\u629C\u3051\u308B'],\n ['\u7D9A', '\u7D9A\u3051\u308B'],\n ['\u623B', '\u623B\u308B'],\n ['\u5148', '\u5148\u306B'],\n ['\u6B21', '\u6B21\u306B'],\n ['\u4EE3\u5165', '\u4EE3\u5165'],\n ['\u5B9F\u884C\u901F\u5EA6\u512A\u5148', '\u5B9F\u884C\u901F\u5EA6\u512A\u5148'],\n ['\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u30E2\u30CB\u30BF\u9069\u7528', '\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u30E2\u30CB\u30BF\u9069\u7528'], // (#986)\n ['\u5B9A', '\u5B9A\u3081\u308B'],\n ['\u9010\u6B21\u5B9F\u884C', '\u9010\u6B21\u5B9F\u884C'], // \u5EC3\u6B62 #1611 \u305F\u3060\u3057\u5FF5\u306E\u305F\u3081\u6B8B\u3057\u3066\u304A\u304F\n ['\u6761\u4EF6\u5206\u5C90', '\u6761\u4EF6\u5206\u5C90'],\n ['\u5897', '\u5897'],\n ['\u6E1B', '\u6E1B'],\n ['\u5909\u6570', '\u5909\u6570'],\n ['\u5B9A\u6570', '\u5B9A\u6570'],\n ['\u30A8\u30E9\u30FC\u76E3\u8996', '\u30A8\u30E9\u30FC\u76E3\u8996'], // \u4F8B\u5916\u51E6\u7406:\u30A8\u30E9\u30FC\u306A\u3089\u3070\u3068\u5BFE\n ['\u30A8\u30E9\u30FC', '\u30A8\u30E9\u30FC'],\n ['\u305D\u308C', 'word'],\n ['\u305D\u3046', 'word'], // \u300C\u305D\u308C\u300D\u306E\u30A8\u30A4\u30EA\u30A2\u30B9\n ['\u95A2\u6570', 'def_func'], // \u7121\u540D\u95A2\u6570\u306E\u5B9A\u7FA9\u7528\n ['\u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587', '\u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587'], // https://nadesi.com/v3/doc/go.php?949\n ['\u975E\u540C\u671F\u30E2\u30FC\u30C9', '\u975E\u540C\u671F\u30E2\u30FC\u30C9'], // (#637)\n ['DNCL\u30E2\u30FC\u30C9', 'DNCL\u30E2\u30FC\u30C9'], // (#1140)\n ['DNCL2\u30E2\u30FC\u30C9', 'DNCL2\u30E2\u30FC\u30C9'],\n ['\u30E2\u30FC\u30C9\u8A2D\u5B9A', '\u30E2\u30FC\u30C9\u8A2D\u5B9A'], // (#1020)\n ['\u53D6\u8FBC', '\u53D6\u8FBC'],\n ['\u30E2\u30B8\u30E5\u30FC\u30EB\u516C\u958B\u65E2\u5B9A\u5024', '\u30E2\u30B8\u30E5\u30FC\u30EB\u516C\u958B\u65E2\u5B9A\u5024'],\n ['\u53B3\u30C1\u30A7\u30C3\u30AF', '\u53B3\u30C1\u30A7\u30C3\u30AF'] // \u53B3\u3057\u304F\u30C1\u30A7\u30C3\u30AF (#1698)\n]);\nexport default reserved;\n", "/**\n * \u306A\u3067\u3057\u30533\u3067\u884C\u982D\u30A4\u30F3\u30C7\u30F3\u30C8\u306B\u4F7F\u3048\u308B\u6587\u5B57\u3068\u30A4\u30F3\u30C7\u30F3\u30C8\u30AB\u30A6\u30F3\u30C8\u6570\n */\nexport function isIndentChars(ch) {\n const code = ch.charCodeAt(0);\n // \u7279\u5225\u306A\u30B3\u30FC\u30C9\n if (ch === '\\t') {\n return 4;\n }\n if (ch === ' ' || ch === '|') {\n return 1;\n }\n if (ch === '\u30FB' || ch === '\u3000') {\n return 2;\n }\n if (ch === '\u23CB' || ch === '\u23CC') {\n return 2;\n } // 0x23CB, 0x23CC\n // \u7F6B\u7DDA\u304B\u3089 --- https://github.com/kujirahand/unicode-sheets/blob/main/box-drawing.md\n if (code >= 0x2500 && code <= 0x257F) {\n return 2;\n }\n // \u8A18\u53F7\u304B\u3089 --- https://github.com/kujirahand/unicode-sheets/blob/main/misc-technical.md\n if ((code >= 0x23A0 && code <= 0x23AF) ||\n (code >= 0x23B8 && code <= 0x23BF)) {\n return 2;\n }\n return 0;\n}\n", "/**\n * \u52A9\u8A5E\u306E\u4E00\u89A7\n */\n// \u57FA\u672C\u7684\u306A\u52A9\u8A5E\u306E\u4E00\u89A7\nexport const josiList = [\n '\u306B\u3064\u3044\u3066', '\u304F\u3089\u3044', '\u306A\u306E\u304B', '\u307E\u3067\u3092', '\u307E\u3067\u306E', '\u306B\u3088\u308B', '\u3068\u3057\u3066',\n '\u3068\u306F', '\u304B\u3089', '\u307E\u3067', '\u3060\u3051', '\u3088\u308A', '\u307B\u3069', '\u306A\u3069',\n '\u3044\u3066', '\u3048\u3066', '\u304D\u3066', '\u3051\u3066', '\u3057\u3066', '\u3063\u3066', '\u306B\u3066', '\u307F\u3066',\n '\u3081\u3066', '\u306D\u3066', '\u3067\u306F', '\u306B\u306F', '\u3093\u3067', '\u305A\u3064',\n '\u306F', '\u3092', '\u306B', '\u3078', '\u3067', '\u3068', '\u304C', '\u306E'\n];\n// \u300C\u3082\u3057\u300D\u6587\u3067\u4F7F\u3046\u52A9\u8A5E\nexport const tararebaJosiList = [\n '\u3067\u306A\u3051\u308C\u3070', '\u306A\u3051\u308C\u3070', '\u306A\u3089\u3070', '\u306A\u3089', '\u305F\u3089', '\u308C\u3070'\n];\n// \u610F\u5473\u306E\u306A\u3044\u52A9\u8A5E(\u524A\u9664\u3059\u308B) #936 #939 #974\nexport const removeJosiList = [\n '\u3053\u3068', '\u3067\u3042\u308B', '\u3067\u3059', '\u3057\u307E\u3059', '\u3067\u3057\u305F', '\u306B\u3083\u3093'\n];\n/**\n * \u300C\u3082\u3057\u300D\u6587\u3067\u4F7F\u3046\u300C\u305F\u3089\u300D\u300C\u308C\u3070\u300D\u306A\u3069\u306E\u4E00\u89A7\u3092\u30D7\u30ED\u30B0\u30E9\u30E0\u3067\u6271\u3044\u3084\u3059\u3044\u3088\u3046\u30DE\u30C3\u30D7\u306B\u5909\u63DB\u3057\u305F\u3082\u306E\n */\nexport const tararebaMap = {};\ntararebaJosiList.forEach(josi => {\n josiList.push(josi);\n tararebaMap[josi] = true;\n});\n/**\n * \u610F\u5473\u306E\u306A\u3044\u52A9\u8A5E(\u524A\u9664\u3059\u308B)\u3092\u30DE\u30C3\u30D7\u306B\u5909\u63DB\u3057\u305F\u3082\u306E\n */\nexport const removeJosiMap = {};\nremoveJosiList.forEach(josi => {\n josiList.push(josi);\n removeJosiMap[josi] = true;\n});\n// \u300C\u3082\u306E\u300D\u69CB\u6587 (#1614)\nconst josiListMono = [];\nfor (const jo of josiList) {\n josiListMono.push('\u3082\u306E' + jo);\n josiListMono.push(jo);\n}\n// \u6587\u5B57\u6570\u306E\u9577\u3044\u9806\u306B\u4E26\u3073\u66FF\u3048\njosiListMono.sort((a, b) => b.length - a.length);\n// \u6B63\u898F\u8868\u73FE\u3067\u52A9\u8A5E\u3092\u30DE\u30C3\u30C1\u3067\u304D\u308B\u3088\u3046\u306B\u3059\u308B\nconst pat = '^[\\\\t \u3000]*(' + josiListMono.join('|') + ')';\nexport const josiRE = new RegExp(pat);\nexport const josiListExport = josiList;\n", "/**\n * \u306A\u3067\u3057\u30533\u5B57\u53E5\u89E3\u6790\u306E\u305F\u3081\u306E\u30EB\u30FC\u30EB\n */\nimport { josiRE, removeJosiMap } from './nako_josi_list.mjs';\nconst kanakanji = /^[\\u3005\\u4E00-\\u9FCF_a-zA-Z0-9\u30A1-\u30F6\u30FC\\u2460-\\u24FF\\u2776-\\u277F\\u3251-\\u32BF]+/;\nconst hira = /^[\u3041-\u3093]/;\nconst allHiragana = /^[\u3041-\u3093]+$/;\nconst wordHasIjoIka = /^.+(\u4EE5\u4E0A|\u4EE5\u4E0B|\u8D85|\u672A\u6E80)$/;\nconst wordSpecial = /^(\u304B\u3064|\u307E\u305F\u306F)/;\nconst errorRead = (ch) => {\n return function () { throw new Error('\u7A81\u7136\u306E\u300E' + ch + '\u300F\u304C\u3042\u308A\u307E\u3059\u3002'); };\n};\n// \u6570\u5024\u306E\u5F8C\u306E\u5358\u4F4D\u306F\u81EA\u52D5\u7684\u306B\u7701\u7565\u3055\u308C\u308B\u30EB\u30FC\u30EB (#994)\nexport const unitRE = /^(\u5186|\u30C9\u30EB|\u5143|\u6B69|\u33A1|\u576A|\u5EA6|\u2103|\u00B0|\u500B|\u3064|\u672C|\u518A|\u624D|\u6B73|\u5339|\u679A|\u76BF|\u30BB\u30C3\u30C8|\u7FBD|\u4EBA|\u4EF6|\u884C|\u5217|\u6A5F|\u54C1|m|mm|cm|km|g|kg|t|b|mb|kb|gb)/;\n// CSS\u306E\u5358\u4F4D\u3067\u3042\u308C\u3070\u81EA\u52D5\u7684\u306B\u6587\u5B57\u5217\u306B\u5909\u63DB\u3059\u308B\u30EB\u30FC\u30EB (#1811)\nexport const cssUnitRE = /^(px|em|ex|rem|vw|vh|vmin|vmax)/;\n/** \u30C8\u30FC\u30AF\u30F3\u306B\u533A\u5207\u308B\u30EB\u30FC\u30EB\u306E\u4E00\u89A7 */\nexport const rules = [\n // \u4E0A\u304B\u3089\u9806\u306B\u30DE\u30C3\u30C1\u3055\u305B\u3066\u3044\u304F\n { name: '\u3053\u3053\u307E\u3067', pattern: /^;;;/ }, // #925\n { name: 'eol', pattern: /^\\n/ },\n { name: 'eol', pattern: /^;/ },\n // eslint-disable-next-line no-irregular-whitespace\n { name: 'space', pattern: /^(\\x20|\\x09|\u3000|\u30FB|\u23BF |\u2514|\uFF5C)+/ }, // #877,#1015\n { name: 'comma', pattern: /^,/ },\n { name: 'line_comment', pattern: /^#[^\\n]*/ },\n { name: 'line_comment', pattern: /^\\/\\/[^\\n]*/ },\n { name: 'range_comment', pattern: /^\\/\\*/, cbParser: cbRangeComment },\n { name: 'def_test', pattern: /^\u25CF\u30C6\u30B9\u30C8:/ },\n { name: 'def_func', pattern: /^\u25CF/ },\n { name: '\u2026', pattern: /^\u2026/ }, // \u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8(#1704)\n { name: '\u2026', pattern: /^\\.{2,3}/ }, // \u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8(#1704)\n // \u591A\u500D\u9577\u6574\u6570\u30EA\u30C6\u30E9\u30EB\u306E\u5224\u5B9A\u3002\u6574\u6570\u306E\u672B\u5C3E\u306B\u300Cn\u300D\u304C\u3064\u3044\u3066\u3044\u308B\u3060\u3051\u306A\u70BA\u3001\u6570\u5024\u5224\u5B9A\u3088\u308A\u4E0A\u306B\u66F8\u304B\u306A\u3044\u3068\u305F\u3060\u306E\u6574\u6570\u306B\u3055\u308C\u308B\n { name: 'bigint', pattern: /^0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)*n/, readJosi: true },\n { name: 'bigint', pattern: /^0[oO][0-7]+(_[0-7]+)*n/, readJosi: true },\n { name: 'bigint', pattern: /^0[bB][0-1]+(_[0-1]+)*n/, readJosi: true },\n { name: 'bigint', pattern: /^\\d+(_\\d+)*?n/, readJosi: true },\n // 16\u9032/8\u9032/2\u9032\u6CD5\u306E\u6570\u5024\u5224\u5B9A --- \u3053\u306E\u5F8Cnako_lexer\u306B\u3066\u5358\u4F4D\u3092\u8AAD\u3080\u51E6\u7406\u304C\u5165\u308B(#994)\n { name: 'number', pattern: /^0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)*/, readJosi: true, cb: parseNumber },\n { name: 'number', pattern: /^0[oO][0-7]+(_[0-7]+)*/, readJosi: true, cb: parseNumber },\n { name: 'number', pattern: /^0[bB][0-1]+(_[0-1]+)*/, readJosi: true, cb: parseNumber },\n // \u4E0B\u306E\u4E09\u3064\u306F\u5C0F\u6570\u70B9\u304C\u631F\u307E\u3063\u3066\u3044\u308B\u5834\u5408\u3001\u5C0F\u6570\u70B9\u304B\u3089\u59CB\u307E\u3063\u3066\u3044\u308B\u5834\u5408\u3001\u5C0F\u6570\u70B9\u304C\u306A\u3044\u5834\u5408\u306E\u5341\u9032\u6CD5\u306E\u6570\u5024\u306B\u30DE\u30C3\u30C1\u3059\u308B\n { name: 'number', pattern: /^\\d+(_\\d+)*\\.(\\d+(_\\d+)*)?([eE][+|-]?\\d+(_\\d+)*)?/, readJosi: true, cb: parseNumber },\n { name: 'number', pattern: /^\\.\\d+(_\\d+)*([eE][+|-]?\\d+(_\\d+)*)?/, readJosi: true, cb: parseNumber },\n { name: 'number', pattern: /^\\d+(_\\d+)*([eE][+|-]?\\d+(_\\d+)*)?/, readJosi: true, cb: parseNumber },\n { name: '\u3053\u3053\u304B\u3089', pattern: /^(\u3053\u3053\u304B\u3089),?/ },\n { name: '\u3053\u3053\u307E\u3067', pattern: /^(\u3053\u3053\u307E\u3067|\uD83D\uDCA7)/ },\n { name: '\u3082\u3057', pattern: /^\u3082\u3057\u3082?/ },\n // \u300C\u306A\u3089\u3070\u300D\u306F\u52A9\u8A5E\u3068\u3057\u3066\u5B9A\u7FA9\u3057\u3066\u3044\u308B\n { name: '\u9055\u3048\u3070', pattern: /^\u9055(\u3048\u3070)?/ },\n // \u300C\u56DE\u300D\u300C\u9593\u300D\u300C\u7E70\u8FD4\u300D\u300C\u53CD\u5FA9\u300D\u300C\u629C\u300D\u300C\u7D9A\u300D\u300C\u623B\u300D\u300C\u4EE3\u5165\u300D\u300C\u6761\u4EF6\u5206\u5C90\u300D\u306A\u3069\u306F NakoLexer._replaceWord \u3067 word \u304B\u3089\u5909\u63DB\n // @see nako_reserved_words.js\n { name: 'shift_r0', pattern: /^>>>/ },\n { name: 'shift_r', pattern: /^>>/ },\n { name: 'shift_l', pattern: /^<</ },\n { name: '===', pattern: /^===/ }, // #999\n { name: '!==', pattern: /^!==/ }, // #999\n { name: 'gteq', pattern: /^(\u2267|>=|=>)/ },\n { name: 'lteq', pattern: /^(\u2266|<=|=<)/ },\n { name: 'noteq', pattern: /^(\u2260|<>|!=)/ },\n { name: '\u2190', pattern: /^(\u2190|<--)/ }, // \u77E2\u5370 --- \u305F\u3060\u3057(core#140)\u3067\u5EC3\u6B62\u3055\u308C\u305F\u6F14\u7B97\u5B50(#891,#899)\n { name: 'eq', pattern: /^(==|\uD83D\uDFF0\uD83D\uDFF0)/ },\n { name: 'eq', pattern: /^(=|\uD83D\uDFF0)/ },\n { name: 'line_comment', pattern: /^(!|\uD83D\uDCA1)(\u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587|\u3053\u3053\u307E\u3067\u3060\u308B\u3044|DNCL\u30E2\u30FC\u30C9|DNCL2\u30E2\u30FC\u30C9|DNCL2)[^\\n]*/ }, // #1184\n { name: 'not', pattern: /^(!|\uD83D\uDCA1)/ }, // #1184 #1457\n { name: 'gt', pattern: /^>/ },\n { name: 'lt', pattern: /^</ },\n { name: 'and', pattern: /^(\u304B\u3064|&&|and\\s)/ },\n { name: 'or', pattern: /^(\u307E\u305F\u306F|\u6216\u3044\u306F|\u3042\u308B\u3044\u306F|or\\s|\\|\\|)/ },\n { name: '@', pattern: /^@/ },\n { name: '+', pattern: /^\\+/ },\n { name: '-', pattern: /^-/ },\n { name: '**', pattern: /^(\u00D7\u00D7|\\*\\*)/ }, // Python\u98A8\u3079\u304D\u4E57\u6F14\u7B97\u5B50\n { name: '*', pattern: /^(\u00D7|\\*)/ },\n { name: '\u00F7\u00F7', pattern: /^\u00F7\u00F7/ }, // \u6574\u6570\u306E\u5272\u308A\u7B97\n { name: '\u00F7', pattern: /^(\u00F7|\\/)/ }, // \u666E\u901A\u306E\u5272\u308A\u7B97\n { name: '%', pattern: /^%/ },\n { name: '^', pattern: /^\\^/ },\n { name: '&', pattern: /^&/ },\n { name: '[', pattern: /^\\[/ },\n { name: ']', pattern: /^]/, readJosi: true },\n { name: '(', pattern: /^\\(/ },\n { name: ')', pattern: /^\\)/, readJosi: true },\n { name: '|', pattern: /^\\|/ },\n { name: '??', pattern: /^\\?\\?/ }, // \u300C\u8868\u793A\u300D\u306E\u30A8\u30A4\u30EA\u30A2\u30B9 #1745\n { name: 'word', pattern: /^\\$\\{.+?\\}/, cbParser: src => cbExtWord(src) }, // \u7279\u5225\u540D\u524D\u30C8\u30FC\u30AF\u30F3(#1836)(#672)\n { name: '$', pattern: /^(\\$|\\.)/ }, // \u30D7\u30ED\u30D1\u30C6\u30A3\u30A2\u30AF\u30BB\u30B9 (#1793)(#1807)\n { name: 'string', pattern: /^\uD83C\uDF3F/, cbParser: src => cbString('\uD83C\uDF3F', '\uD83C\uDF3F', src) },\n { name: 'string_ex', pattern: /^\uD83C\uDF34/, cbParser: src => cbString('\uD83C\uDF34', '\uD83C\uDF34', src) },\n { name: 'string_ex', pattern: /^\u300C/, cbParser: src => cbString('\u300C', '\u300D', src) },\n { name: 'string', pattern: /^\u300E/, cbParser: src => cbString('\u300E', '\u300F', src) },\n { name: 'string_ex', pattern: /^\u201C/, cbParser: src => cbString('\u201C', '\u201D', src) },\n { name: 'string_ex', pattern: /^\"/, cbParser: src => cbString('\"', '\"', src) },\n { name: 'string', pattern: /^'/, cbParser: src => cbString('\\'', '\\'', src) },\n { name: '\u300D', pattern: /^\u300D/, cbParser: errorRead('\u300D') }, // error\n { name: '\u300F', pattern: /^\u300F/, cbParser: errorRead('\u300F') }, // error\n { name: 'func', pattern: /^\\{\u95A2\u6570\\},?/ },\n { name: '{', pattern: /^\\{/ },\n { name: '}', pattern: /^\\}/, readJosi: true },\n { name: ':', pattern: /^:/ },\n { name: '_eol', pattern: /^_\\s*\\n/ },\n { name: 'dec_lineno', pattern: /^\u2030/ },\n // \u7D75\u6587\u5B57\u5909\u6570 = (\u7D75\u6587\u5B57)\u82F1\u6570\u5B57*\n { name: 'word', pattern: /^[\\uD800-\\uDBFF][\\uDC00-\\uDFFF][_a-zA-Z0-9]*/, readJosi: true },\n { name: 'word', pattern: /^[\\u1F60-\\u1F6F][_a-zA-Z0-9]*/, readJosi: true }, // \u7D75\u6587\u5B57\n { name: 'word', pattern: /^\u300A.+?\u300B/, readJosi: true }, // \u300A\u7279\u5225\u540D\u524D\u30C8\u30FC\u30AF\u30F3\u300B(#672)\n // \u5358\u8A9E\u53E5\n {\n name: 'word',\n pattern: /^[_a-zA-Z\\u3005\\u4E00-\\u9FCF\u3041-\u3093\u30A1-\u30F6\\u2460-\\u24FF\\u2776-\\u277F\\u3251-\\u32BF]/,\n cbParser: cbWordParser\n }\n];\nexport function trimOkurigana(s) {\n // \u3072\u3089\u304C\u306A\u304B\u3089\u59CB\u307E\u3089\u306A\u3044\u5834\u5408\u3001\u9001\u308A\u4EEE\u540D\u3092\u524A\u9664\u3002(\u4F8B)\u7F6E\u63DB\u3059\u308B\n if (!hira.test(s)) {\n return s.replace(/[\u3041-\u3093]+/g, '');\n }\n // \u5168\u3066\u3072\u3089\u304C\u306A\uFF1F (\u4F8B) \u3069\u3046\u305E\n if (allHiragana.test(s)) {\n return s;\n }\n // \u672B\u5C3E\u306E\u3072\u3089\u304C\u306A\u306E\u307F (\u4F8B)\u304A\u9858\u3044\u3057\u307E\u3059 \u2192\u304A\u9858\n return s.replace(/[\u3041-\u3093]+$/g, '');\n}\n// Utility for Rule\nfunction cbRangeComment(src) {\n let res = '';\n const josi = '';\n let numEOL = 0;\n src = src.substring(2); // skip /*\n const i = src.indexOf('*/');\n if (i < 0) { // not found\n res = src;\n src = '';\n }\n else {\n res = src.substring(0, i);\n src = src.substring(i + 2);\n }\n // \u6539\u884C\u3092\u6570\u3048\u308B\n for (let i = 0; i < res.length; i++) {\n if (res.charAt(i) === '\\n') {\n numEOL++;\n }\n }\n res = res.replace(/(^\\s+|\\s+$)/, ''); // trim\n return { src, res, josi, numEOL };\n}\n/**\n * @param {string} src\n */\nfunction cbWordParser(src, isTrimOkurigana = true) {\n /*\n kanji = [\\u3005\\u4E00-\\u9FCF]\n hiragana = [\u3041-\u3093]\n katakana = [\u30A1-\u30F6\u30FC]\n emoji = [\\u1F60-\\u1F6F]\n uni_extra = [\\uD800-\\uDBFF] [\\uDC00-\\uDFFF]\n alphabet = [_a-zA-Z]\n numchars = [0-9]\n */\n let res = '';\n let josi = '';\n while (src !== '') {\n // 1\u6587\u5B57\u4EE5\u4E0A\u306E\u3068\u304D\n if (res.length > 0) {\n // \u300C\u304B\u3064\u300D\u300C\u307E\u305F\u306F\u300D\u306A\u3089\u5206\u5272\u3059\u308B (#1379 core#84)\n const jsw = wordSpecial.exec(src);\n if (jsw) {\n break;\n }\n // \u52A9\u8A5E\u306E\u5224\u5B9A\n const j = josiRE.exec(src);\n if (j) {\n josi = j[0].replace(/^\\s+/, '');\n src = src.substring(j[0].length);\n // \u52A9\u8A5E\u306E\u76F4\u5F8C\u306B\u3042\u308B\u300C,\u300D\u3092\u98DB\u3070\u3059 #877\n if (src.charAt(0) === ',') {\n src = src.substring(1);\n }\n break;\n }\n }\n // \u30AB\u30BF\u30AB\u30CA\u6F22\u5B57\u82F1\u6570\u5B57\u304B\uFF1F\n const m = kanakanji.exec(src);\n if (m) {\n res += m[0];\n src = src.substring(m[0].length);\n continue;\n }\n // \u3072\u3089\u304C\u306A\uFF1F\n const h = hira.test(src);\n if (h) {\n res += src.charAt(0);\n src = src.substring(1);\n continue;\n }\n break; // other chars\n }\n // --- \u5358\u8A9E\u5206\u5272\u306B\u304A\u3051\u308B\u7279\u6B8A\u30EB\u30FC\u30EB ---\n // \u300C\u9593\u300D\u306E\u7279\u6B8A\u30EB\u30FC\u30EB (#831)\n // \u300C\u7B49\u3057\u3044\u9593\u300D\u3084\u300C\u4E00\u81F4\u3059\u308B\u9593\u300D\u306A\u3089\u300C\u9593\u300D\u3092src\u306B\u623B\u3059\u3002\u305F\u3060\u3057\u300C\u30B7\u30B9\u30C6\u30E0\u6642\u9593\u300D\u306F\u305D\u306E\u307E\u307E\u306B\u3059\u308B\u3002\n if (/[\u3041-\u3093]\u9593$/.test(res)) {\n src = res.charAt(res.length - 1) + src;\n res = res.slice(0, -1);\n }\n // \u300C\u4EE5\u4E0A\u300D\u300C\u4EE5\u4E0B\u300D\u300C\u8D85\u300D\u300C\u672A\u6E80\u300D #918\n const ii = wordHasIjoIka.exec(res);\n if (ii) {\n src = ii[1] + josi + src;\n josi = '';\n res = res.substring(0, res.length - ii[1].length);\n }\n // \u300C\u3082\u306E\u300D\u69CB\u6587 #1614\n if (josi.substring(0, 2) === '\u3082\u306E') {\n josi = josi.substring(2);\n }\n // \u52A9\u8A5E\u300C\u3053\u3068\u300D\u300C\u3067\u3042\u308B\u300D\u300C\u3067\u3059\u300D\u306A\u3069\u306F\u300C\uFF0A\uFF0A\u3059\u308B\u3053\u3068\u300D\u306E\u3088\u3046\u306B\u4F7F\u3046\u306E\u3067\u524A\u9664 #936 #939 #974\n if (removeJosiMap[josi]) {\n josi = '';\n }\n // \u9001\u308A\u4EEE\u540D\u306E\u7701\u7565\u30EB\u30FC\u30EB\n // \u6F22\u5B57\u30AB\u30BF\u30AB\u30CA\u82F1\u8A9E\u304B\u3089\u59CB\u307E\u308B\u8A9E\u53E5 --- \u9001\u308A\u4EEE\u540D\u3092\u7701\u7565\n if (isTrimOkurigana) {\n res = trimOkurigana(res);\n }\n // \u52A9\u8A5E\u3060\u3051\u306E\u8A9E\u53E5\u306E\u5834\u5408\n if (res === '' && josi !== '') {\n res = josi;\n josi = '';\n }\n return { src, res, josi, numEOL: 0 };\n}\nfunction cbString(beginTag, closeTag, src) {\n let res = '';\n let josi = '';\n let numEOL = 0;\n src = src.substring(beginTag.length); // skip beginTag\n const i = src.indexOf(closeTag);\n if (i < 0) { // not found\n res = src;\n src = '';\n throw new Error(`\u300E${beginTag}\u300F\u3067\u59CB\u3081\u305F\u6587\u5B57\u5217\u306E\u7D42\u7AEF\u8A18\u53F7\u300E${closeTag}\u300F\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002`);\n }\n else {\n res = src.substring(0, i);\n src = src.substring(i + closeTag.length);\n // res \u306E\u4E2D\u306B beginTag \u304C\u3042\u308C\u3070\u30A8\u30E9\u30FC\u306B\u3059\u308B #953\n if (res.indexOf(beginTag) >= 0) {\n if (beginTag === '\u300E') {\n throw new Error('\u300C\u300E\u300D\u3067\u59CB\u3081\u305F\u6587\u5B57\u5217\u306E\u4E2D\u306B\u300C\u300E\u300D\u3092\u542B\u3081\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002');\n }\n else {\n throw new Error(`\u300E${beginTag}\u300F\u3067\u59CB\u3081\u305F\u6587\u5B57\u5217\u306E\u4E2D\u306B\u300E${beginTag}\u300F\u3092\u542B\u3081\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002`);\n }\n }\n }\n // \u6587\u5B57\u5217\u76F4\u5F8C\u306E\u52A9\u8A5E\u3092\u53D6\u5F97\n const j = josiRE.exec(src);\n if (j) {\n josi = j[0].replace(/^\\s+/, '');\n src = src.substring(j[0].length);\n // \u52A9\u8A5E\u306E\u5F8C\u306E\u30AB\u30F3\u30DE #877\n if (src.charAt(0) === ',') {\n src = src.substring(1);\n }\n }\n // \u52A9\u8A5E\u300C\u3053\u3068\u300D\u300C\u3067\u3042\u308B\u300D\u300C\u3067\u3059\u300D\u306A\u3069\u306F\u300C\uFF0A\uFF0A\u3059\u308B\u3053\u3068\u300D\u306E\u3088\u3046\u306B\u4F7F\u3046\u306E\u3067\u524A\u9664 #936 #939 #974\n if (removeJosiMap[josi]) {\n josi = '';\n }\n // \u300C\u3082\u306E\u300D\u69CB\u6587 (#1614)\n if (josi.substring(0, 2) === '\u3082\u306E') {\n josi = josi.substring(2);\n }\n // \u6539\u884C\u3092\u6570\u3048\u308B\n for (let i = 0; i < res.length; i++) {\n if (res.charAt(i) === '\\n') {\n numEOL++;\n }\n }\n return { src, res, josi, numEOL };\n}\nfunction cbExtWord(src) {\n let res = '';\n let josi = '';\n let numEOL = 0;\n src = src.substring(2); // skip '${'\n const i = src.indexOf('}');\n if (i < 0) { // not found\n throw new Error('\u5909\u6570\u540D\u306E\u7D42\u308F\u308A\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002');\n }\n res = src.substring(0, i);\n src = src.substring(i + 1);\n // \u6587\u5B57\u5217\u76F4\u5F8C\u306E\u52A9\u8A5E\u3092\u53D6\u5F97\n const j = josiRE.exec(src);\n if (j) {\n josi = j[0].replace(/^\\s+/, '');\n src = src.substring(j[0].length);\n // \u52A9\u8A5E\u306E\u5F8C\u306E\u30AB\u30F3\u30DE #877\n if (src.charAt(0) === ',') {\n src = src.substring(1);\n }\n }\n // \u6539\u884C\u3092\u6570\u3048\u308B(\u3042\u308A\u5F97\u306A\u3044\u3051\u3069)\n for (let i = 0; i < res.length; i++) {\n if (res.charAt(i) === '\\n') {\n numEOL++;\n }\n }\n if (numEOL > 0) {\n throw new Error('\u5909\u6570\u540D\u306B\u6539\u884C\u3092\u542B\u3081\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002');\n }\n return { src, res, josi, numEOL };\n}\nfunction parseNumber(n) {\n return Number(n.replace(/_/g, ''));\n}\n", "// \u306A\u3067\u3057\u3053\u306E\u5B57\u53E5\u89E3\u6790\u3092\u884C\u3046\n// \u65E2\u306B\u5168\u89D2\u534A\u89D2\u3092\u63C3\u3048\u305F\u30B3\u30FC\u30C9\u306B\u5BFE\u3057\u3066\u5B57\u53E5\u89E3\u6790\u3092\u884C\u3046\nimport { opPriority } from './nako_parser_const.mjs';\n// \u4E88\u7D04\u8A9E\u53E5\n// (memo)\u300C\u56DE\u300D\u300C\u9593\u300D\u300C\u7E70\u8FD4\u300D\u300C\u53CD\u5FA9\u300D\u300C\u629C\u300D\u300C\u7D9A\u300D\u300C\u623B\u300D\u300C\u4EE3\u5165\u300D\u306A\u3069\u306F _replaceWord \u3067 word \u304B\u3089\u5909\u63DB\n/** @types {Record<string, string>} */\nimport reservedWords from './nako_reserved_words.mjs';\nimport { isIndentChars } from './nako_indent_chars.mjs';\n// \u52A9\u8A5E\u306E\u4E00\u89A7\nimport { josiRE, removeJosiMap, tararebaMap, josiListExport } from './nako_josi_list.mjs';\n// \u5B57\u53E5\u89E3\u6790\u30EB\u30FC\u30EB\u306E\u4E00\u89A7\nimport { rules, unitRE, cssUnitRE } from './nako_lex_rules.mjs';\nimport { NakoLexerError, InternalLexerError } from './nako_errors.mjs';\nexport class NakoLexer {\n /**\n * @param logger\n */\n constructor(logger) {\n this.logger = logger; // \u5B57\u53E5\u89E3\u6790\u3057\u305F\u969B,\u78BA\u8A8D\u3055\u308C\u305F\u95A2\u6570\u306E\u4E00\u89A7\n this.funclist = new Map();\n this.modList = []; // \u5B57\u53E5\u89E3\u6790\u3057\u305F\u969B,\u53D6\u308A\u8FBC\u3080\u30E2\u30B8\u30E5\u30FC\u30EB\u4E00\u89A7 --- nako3::lex \u3067\u66F4\u65B0\u3055\u308C\u308B\n this.result = [];\n this.modName = 'main.nako3'; // \u30E2\u30B8\u30E5\u30FC\u30EB\u540D\n this.moduleExport = new Map();\n this.reservedWords = Array.from(reservedWords.keys()); // for plugin_system::\u4E88\u7D04\u8A9E\u4E00\u89A7\u53D6\u5F97\n this.josiList = josiListExport; // for plugin_system::\u52A9\u8A5E\u4E00\u89A7\u53D6\u5F97\n }\n /** \u95A2\u6570\u4E00\u89A7\u3092\u30BB\u30C3\u30C8 */\n setFuncList(listMap) {\n this.funclist = listMap;\n }\n /** \u30E2\u30B8\u30E5\u30FC\u30EB\u516C\u958B\u65E2\u5B9A\u5024\u4E00\u89A7\u3092\u30BB\u30C3\u30C8 */\n setModuleExport(exportObj) {\n this.moduleExport = exportObj;\n }\n /**\n * @param tokens\n * @param {boolean} isFirst\n * @param {string} filename\n */\n replaceTokens(tokens, isFirst, filename) {\n this.result = tokens;\n this.modName = NakoLexer.filenameToModName(filename);\n // \u95A2\u6570\u306E\u5B9A\u7FA9\u304C\u3042\u308C\u3070 funclist \u3092\u66F4\u65B0\n NakoLexer.preDefineFunc(tokens, this.logger, this.funclist, this.moduleExport);\n this._replaceWord(this.result);\n if (isFirst) {\n if (this.result.length > 0) {\n const eof = this.result[this.result.length - 1];\n this.result.push({\n type: 'eol',\n line: eof.line,\n column: 0,\n indent: -1,\n file: eof.file,\n josi: '',\n value: '---',\n startOffset: eof.startOffset,\n endOffset: eof.endOffset,\n rawJosi: ''\n }); // \u6539\u884C\n this.result.push({\n type: 'eof',\n line: eof.line,\n indent: -1,\n column: 0,\n file: eof.file,\n josi: '',\n value: '',\n startOffset: eof.startOffset,\n endOffset: eof.endOffset,\n rawJosi: ''\n }); // \u30D5\u30A1\u30A4\u30EB\u672B\u5C3E\n }\n else {\n this.result.push({\n type: 'eol',\n line: 0,\n column: 0,\n indent: -1,\n file: '',\n josi: '',\n value: '---',\n startOffset: 0,\n endOffset: 0,\n rawJosi: ''\n }); // \u6539\u884C\n this.result.push({\n type: 'eof',\n line: 0,\n column: 0,\n indent: -1,\n file: '',\n josi: '',\n value: '',\n startOffset: 0,\n endOffset: 0,\n rawJosi: ''\n }); // \u30D5\u30A1\u30A4\u30EB\u672B\u5C3E\n }\n }\n return this.result;\n }\n /**\n * \u30D5\u30A1\u30A4\u30EB\u5185\u3067\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u308B\u95A2\u6570\u540D\u3092\u5217\u6319\u3059\u308B\u3002\u7D50\u679C\u306Ffunclist\u306B\u66F8\u304D\u8FBC\u3080\u3002\u305D\u306E\u4ED6\u306E\u30C8\u30FC\u30AF\u30F3\u306E\u7F6E\u63DB\u51E6\u7406\u3082\u884C\u3046\u3002\n * \u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u30CF\u30A4\u30E9\u30A4\u30C8\u306E\u51E6\u7406\u304B\u3089\u547C\u3073\u51FA\u3059\u305F\u3081\u306Bstatic\u30E1\u30BD\u30C3\u30C9\u306B\u3057\u3066\u3044\u308B\u3002\n */\n static preDefineFunc(tokens, logger, funclist, moduleexport) {\n // \u95A2\u6570\u3092\u5148\u8AAD\u307F\u3057\u3066\u5B9A\u7FA9\n let i = 0;\n let isFuncPointer = false;\n const readArgs = () => {\n const args = [];\n const keys = {};\n if (tokens[i].type !== '(') {\n return [];\n }\n i++;\n while (tokens[i]) {\n const t = tokens[i];\n i++;\n if (t.type === ')') {\n break;\n }\n if (t.type === 'func') {\n isFuncPointer = true;\n }\n else if (t.type !== '|' && t.type !== 'comma') {\n if (isFuncPointer) {\n t.funcPointer = true;\n isFuncPointer = false;\n }\n args.push(t);\n if (!keys[t.value]) {\n keys[t.value] = [];\n }\n keys[t.value].push(t.josi);\n }\n }\n const varnames = [];\n const funcPointers = [];\n const result = [];\n const already = {};\n for (const arg of args) {\n if (!already[arg.value]) {\n const josi = keys[arg.value];\n result.push(josi);\n varnames.push(arg.value);\n if (arg.funcPointer) {\n funcPointers.push(arg.value);\n }\n else {\n funcPointers.push(null);\n }\n already[arg.value] = true;\n }\n }\n return [result, varnames, funcPointers];\n };\n // \u30C8\u30FC\u30AF\u30F3\u3092\u4E00\u3064\u305A\u3064\u78BA\u8A8D\n while (i < tokens.length) {\n // \u30BF\u30A4\u30D7\u306E\u7F6E\u63DB\n const t = tokens[i];\n if (t.type === 'not' && tokens.length - i > 3) {\n let prevToken = { type: 'eol' };\n if (i >= 1) {\n prevToken = tokens[i - 1];\n }\n if (prevToken.type === 'eol') {\n let nextToken = tokens[i + 1];\n if (nextToken.type === 'word' && nextToken.value === '\u30E2\u30B8\u30E5\u30FC\u30EB\u516C\u958B\u65E2\u5B9A\u5024') {\n nextToken.type = '\u30E2\u30B8\u30E5\u30FC\u30EB\u516C\u958B\u65E2\u5B9A\u5024';\n nextToken = tokens[i + 2];\n if (nextToken.type === 'string' && nextToken.value === '\u975E\u516C\u958B') {\n const modName = NakoLexer.filenameToModName(t.file);\n moduleexport.set(modName, false);\n i += 3;\n continue;\n }\n else if (nextToken.type === 'string' && nextToken.value === '\u516C\u958B') {\n const modName = NakoLexer.filenameToModName(t.file);\n moduleexport.set(modName, true);\n i += 3;\n continue;\n }\n }\n }\n }\n // \u7121\u540D\u95A2\u6570\u306E\u5B9A\u7FA9\uFF1A\u300Cxx\u306B\u306F**\u300D\u304C\u3042\u3063\u305F\u5834\u5408 ... \u6697\u9ED9\u7684\u306A\u95A2\u6570\u5B9A\u7FA9\u3068\u3059\u308B\n if (t.type === 'word' && t.josi === '\u306B\u306F') {\n t.josi = '\u306B\u306F';\n tokens.splice(i + 1, 0, { type: 'def_func', value: '\u95A2\u6570', indent: t.indent, line: t.line, column: t.column, file: t.file, josi: '', startOffset: t.endOffset, endOffset: t.endOffset, rawJosi: '', tag: '\u7121\u540D\u95A2\u6570' });\n i++;\n continue;\n }\n // \u6C38\u9060\u306B\u7E70\u308A\u8FD4\u3059\u2192\u6C38\u9060\u306E\u9593\u306B\u7F6E\u63DB #1686\n if (t.type === 'word' && t.value === '\u6C38\u9060' && t.josi === '\u306B') {\n const t2 = tokens[i + 1];\n if (t2.value === '\u7E70\u8FD4') {\n t2.value = '\u9593';\n t2.josi = '\u306E';\n }\n i++;\n continue;\n }\n // N\u56DE\u3092N|\u56DE\u306B\u7F6E\u63DB\n if (t.type === 'word' && t.josi === '' && t.value.length >= 2) {\n if (t.value.match(/\u56DE$/)) {\n t.value = t.value.substring(0, t.value.length - 1);\n // N\u56DE\u3092\u633F\u5165\n if (!t.endOffset) {\n t.endOffset = 1;\n }\n const kai = { type: '\u56DE', value: '\u56DE', indent: t.indent, line: t.line, column: t.column, file: t.file, josi: '', startOffset: t.endOffset - 1, endOffset: t.endOffset, rawJosi: '' };\n tokens.splice(i + 1, 0, kai);\n t.endOffset--;\n i++;\n }\n }\n // \u4E88\u7D04\u8A9E\u306E\u7F6E\u63DB\n if (t.type === 'word') {\n const rtype = reservedWords.get(t.value);\n if (rtype) {\n t.type = rtype;\n }\n if (t.value === '\u305D\u3046') {\n t.value = '\u305D\u308C';\n }\n }\n // \u95A2\u6570\u5B9A\u7FA9\u306E\u78BA\u8A8D\n if (t.type !== 'def_test' && t.type !== 'def_func') {\n i++;\n continue;\n }\n // \u7121\u540D\u95A2\u6570\u304B\u666E\u901A\u95A2\u6570\u5B9A\u7FA9\u304B\u3092\u5224\u5B9A\u3059\u308B (1\u3064\u524D\u304C\u6539\u884C\u304B\u3069\u3046\u304B\u3067\u5224\u5B9A)\n let isMumei = true;\n let prevToken = { type: 'eol' };\n if (i >= 1) {\n prevToken = tokens[i - 1];\n }\n if (prevToken.type === 'eol') {\n isMumei = false;\n }\n // \u95A2\u6570\u540D\u3084\u5F15\u6570\u3092\u5F97\u308B\n const defToken = t;\n i++; // skip \"\u25CF\" or \"\u95A2\u6570\"\n let josi = [];\n let varnames = [];\n let funcPointers = [];\n let funcName = '';\n let funcNameToken = null;\n let isExport = null;\n // \u95A2\u6570\u306E\u5C5E\u6027\u6307\u5B9A\n if (tokens[i] && tokens[i].type === '{') {\n i++;\n const attr = tokens[i] && tokens[i].type === 'word' ? tokens[i].value : '';\n if (attr === '\u516C\u958B') {\n isExport = true;\n }\n else if (attr === '\u975E\u516C\u958B') {\n isExport = false;\n }\n else if (attr === '\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8') {\n isExport = true;\n }\n else {\n logger.warn(`\u4E0D\u660E\u306A\u95A2\u6570\u5C5E\u6027\u300E${String(attr)}\u300F\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002`);\n }\n i++;\n if (tokens[i] && tokens[i].type === '}') {\n i++;\n }\n }\n // \u95A2\u6570\u540D\u306E\u524D\u306B\u5F15\u6570\u5B9A\u7FA9\n if (tokens[i] && tokens[i].type === '(') {\n [josi, varnames, funcPointers] = readArgs();\n }\n // \u95A2\u6570\u540D\u3092\u5F97\u308B\n if (!isMumei && tokens[i] && tokens[i].type === 'word') {\n funcNameToken = tokens[i++];\n funcName = funcNameToken.value;\n }\n // \u95A2\u6570\u540D\u306E\u5F8C\u3067\u5F15\u6570\u5B9A\u7FA9\n if (josi.length === 0 && tokens[i] && tokens[i].type === '(') {\n [josi, varnames, funcPointers] = readArgs();\n }\n // \u540D\u524D\u306E\u3042\u308B\u95A2\u6570\u5B9A\u7FA9\u306A\u3089\u3070\u95A2\u6570\u30C6\u30FC\u30D6\u30EB\u306B\u95A2\u6570\u540D\u3092\u767B\u9332\n // \u7121\u540D\u95A2\u6570\u306F\u767B\u9332\u3057\u306A\u3044\u3088\u3046\u306B\u6C17\u3092\u3064\u3051\u308B\n if (funcName !== '' && funcNameToken) {\n const modName = NakoLexer.filenameToModName(t.file);\n funcName = modName + '__' + funcName;\n if (funclist.has(funcName)) { // \u95A2\u6570\u306E\u4E8C\u91CD\u5B9A\u7FA9\u3092\u8B66\u544A\n // main__\u306F\u7701\u7565 #1223\n const dispName = funcName.replace(/^main__/, '');\n logger.warn(`\u95A2\u6570\u300E${dispName}\u300F\u306F\u65E2\u306B\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u3059\u3002`, defToken);\n }\n funcNameToken.value = funcName;\n funclist.set(funcName, {\n type: 'func',\n josi,\n fn: null,\n asyncFn: false,\n isExport,\n varnames,\n funcPointers\n });\n }\n // \u7121\u540D\u95A2\u6570\u306E\u305F\u3081\u306B\n const metaValue = {\n 'type': 'func',\n josi,\n varnames,\n funcPointers\n };\n defToken.meta = metaValue;\n }\n }\n /** \u6587\u5B57\u5217\u3092{\u3068}\u306E\u90E8\u5206\u3067\u5206\u5272\u3059\u308B\u3002\u4E2D\u62EC\u5F27\u304C\u5BFE\u5FDC\u3057\u3066\u3044\u306A\u3044\u5834\u5408null\u3092\u8FD4\u3059\u3002 */\n splitStringEx(code) {\n /** @type {string[]} */\n const list = [];\n // \"A{B}C{D}E\" -> [\"A\", \"B}C\", \"D}E\"] -> [\"A\", \"B\", \"C\", \"D\", \"E\"]\n // \"A{B}C}D{E}F\" -> [\"A\", \"B}C}D\", \"E}F\"] -> [\"A\", \"B\", \"C}D\", \"E\", \"F\"]\n const arr = code.split(/[{\uFF5B]/);\n list.push(arr[0]);\n for (const s of arr.slice(1)) {\n const end = s.replace('\uFF5D', '}').indexOf('}');\n if (end === -1) {\n return null;\n }\n list.push(s.slice(0, end), s.slice(end + 1));\n }\n return list;\n }\n _replaceWord(tokens) {\n let comment = [];\n let i = 0;\n let isFuncPointer = false;\n const namespaceStack = [];\n const getLastType = () => {\n if (i <= 0) {\n return 'eol';\n }\n return tokens[i - 1].type;\n };\n let modSelf = (tokens.length > 0) ? NakoLexer.filenameToModName(tokens[0].file) : 'main';\n while (i < tokens.length) {\n const t = tokens[i];\n // \u30E2\u30B8\u30E5\u30FC\u30EB\u540D\u306E\u5909\u66F4\u306B\u5BFE\u5FDC\n if ((t.type === 'word' || t.type === 'func') && t.value === '\u540D\u524D\u7A7A\u9593\u8A2D\u5B9A') {\n if (isFuncPointer) {\n throw new InternalLexerError('\u540D\u524D\u7A7A\u9593\u8A2D\u5B9A\u306E\u95A2\u6570\u53C2\u7167\u3092\u53D6\u5F97\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002', t.startOffset === undefined ? 0 : t.startOffset, t.endOffset === undefined ? 0 : t.endOffset, t.line, t.file);\n }\n namespaceStack.push(modSelf);\n modSelf = tokens[i - 1].value;\n }\n if ((t.type === 'word' || t.type === 'func') && t.value === '\u540D\u524D\u7A7A\u9593\u30DD\u30C3\u30D7') {\n if (isFuncPointer) {\n throw new InternalLexerError('\u540D\u524D\u7A7A\u9593\u30DD\u30C3\u30D7\u306E\u95A2\u6570\u53C2\u7167\u3092\u53D6\u5F97\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002', t.startOffset === undefined ? 0 : t.startOffset, t.endOffset === undefined ? 0 : t.endOffset, t.line, t.file);\n }\n const space = namespaceStack.pop();\n if (space) {\n modSelf = space;\n }\n }\n // \u95A2\u6570\u3092\u5F37\u5236\u7684\u306B\u7F6E\u63DB( word => func )\n if (t.type === 'word' && t.value !== '\u305D\u308C') {\n // \u95A2\u6570\u3092\u5909\u63DB\n const funcName = String(t.value);\n if (funcName.indexOf('__') < 0) {\n // \u81EA\u8EAB\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u540D\u3092\u691C\u7D22\n const gname1 = `${modSelf}__${funcName}`;\n const gfo1 = this.funclist.get(gname1);\n if (gfo1 && gfo1.type === 'func') {\n const tt = t;\n tt.type = isFuncPointer ? 'func_pointer' : 'func';\n tt.meta = gfo1;\n tt.value = gname1;\n if (isFuncPointer) {\n isFuncPointer = false;\n tokens.splice(i - 1, 1);\n }\n continue;\n }\n // \u30E2\u30B8\u30E5\u30FC\u30EB\u95A2\u6570\u3092\u7F6E\u63DB\n for (const mod of this.modList) {\n const gname = `${mod}__${funcName}`;\n const gfo = this.funclist.get(gname);\n const exportDefault = this.moduleExport.get(mod);\n if (gfo && gfo.type === 'func' && (gfo.isExport === true || (gfo.isExport !== false && exportDefault !== false))) {\n const tt = t;\n tt.type = isFuncPointer ? 'func_pointer' : 'func';\n tt.meta = gfo;\n tt.value = gname;\n if (isFuncPointer) {\n isFuncPointer = false;\n tokens.splice(i - 1, 1);\n }\n break;\n }\n }\n }\n const fo = this.funclist.get(funcName);\n if (fo && fo.type === 'func') {\n const tt = t;\n tt.type = isFuncPointer ? 'func_pointer' : 'func';\n tt.meta = fo;\n if (isFuncPointer) {\n isFuncPointer = false;\n tokens.splice(i - 1, 1);\n continue;\n }\n }\n }\n // \u95A2\u6570\u30DD\u30A4\u30F3\u30BF\u306E\u524D\u7F6E\u8A5E\u3092\u691C\u51FA\n if (isFuncPointer) {\n // \u7121\u52B9\u306A\u95A2\u6570\u53C2\u7167\u306E\u6307\u5B9A\u304C\u3042\u308B\u3002\n }\n isFuncPointer = false;\n if (t.type === 'func' && t.value === '{\u95A2\u6570}') {\n i++;\n isFuncPointer = true;\n continue;\n }\n // \u6570\u5B57\u306B\u3064\u304F\u30DE\u30A4\u30CA\u30B9\u8A18\u53F7\u3092\u5224\u5B9A\n // (ng) 5 - 3 || word - 3\n // (ok) (\u884C\u982D)-3 || 1 * -3 || A\u306B -3\u3092 \u8DB3\u3059\n if (t.type === '-' && tokens[i + 1]) {\n const tokenType = tokens[i + 1].type;\n if (tokenType === 'number' || tokenType === 'bigint') {\n // \u4E00\u3064\u524D\u306E\u8A9E\u53E5\u304C\u3001(\u884C\u982D|\u6F14\u7B97\u5B50|\u52A9\u8A5E\u4ED8\u304D\u306E\u8A9E\u53E5)\u306A\u3089 \u8CA0\u6570\u3067\u3042\u308B\n const ltype = getLastType();\n if (ltype === 'eol' || opPriority[ltype] || tokens[i - 1].josi !== '') {\n tokens.splice(i, 1); // remove '-'\n if (tokenType === 'number') {\n tokens[i].value *= -1;\n }\n else {\n tokens[i].value = '-' + String(tokens[i].value);\n }\n }\n }\n }\n // \u52A9\u8A5E\u306E\u300C\u306F\u300D\u3092 = \u306B\u5C55\u958B\n if (t.josi === undefined) {\n t.josi = '';\n }\n if (t.josi === '\u306F') {\n if (!t.rawJosi) {\n t.rawJosi = t.josi;\n }\n const startOffset = (t.endOffset === undefined) ? undefined : t.endOffset - t.rawJosi.length;\n tokens.splice(i + 1, 0, {\n type: 'eq',\n indent: t.indent,\n line: t.line,\n column: t.column,\n file: t.file,\n startOffset,\n endOffset: t.endOffset,\n josi: '',\n rawJosi: '',\n value: undefined\n });\n i += 2;\n t.josi = t.rawJosi = '';\n t.endOffset = startOffset;\n continue;\n }\n // \u300C\u3068\u306F\u300D\u3092\u4E00\u3064\u306E\u5358\u8A9E\u306B\u3059\u308B\n if (t.josi === '\u3068\u306F') {\n if (!t.rawJosi) {\n t.rawJosi = t.josi;\n }\n const startOffset = t.endOffset === undefined ? undefined : t.endOffset - t.rawJosi.length;\n tokens.splice(i + 1, 0, {\n type: '\u3068\u306F',\n indent: t.indent,\n line: t.line,\n column: t.column,\n file: t.file,\n startOffset,\n endOffset: t.endOffset,\n josi: '',\n rawJosi: '',\n value: undefined\n });\n t.josi = t.rawJosi = '';\n t.endOffset = startOffset;\n i += 2;\n continue;\n }\n // \u52A9\u8A5E\u306E\u306A\u3089\u3070\u3092\u30C8\u30FC\u30AF\u30F3\u3068\u3059\u308B\n if (tararebaMap[t.josi]) {\n const josi = (t.josi === '\u3067\u306A\u3051\u308C\u3070' || t.josi === '\u306A\u3051\u308C\u3070') ? '\u3067\u306A\u3051\u308C\u3070' : '\u306A\u3089\u3070';\n if (!t.rawJosi) {\n t.rawJosi = josi;\n }\n const startOffset = t.endOffset === undefined ? undefined : t.endOffset - t.rawJosi.length;\n tokens.splice(i + 1, 0, {\n type: '\u306A\u3089\u3070',\n value: josi,\n indent: t.indent,\n line: t.line,\n column: t.column,\n file: t.file,\n startOffset,\n endOffset: t.endOffset,\n josi: '',\n rawJosi: ''\n });\n t.josi = t.rawJosi = '';\n t.endOffset = startOffset;\n i += 2;\n continue;\n }\n // '_' + \u6539\u884C \u3092\u98DB\u3070\u3059 (\u6F14\u7B97\u5B50\u76F4\u5F8C\u306B\u6539\u884C\u3092\u5165\u308C\u305F\u3044\u5834\u5408\u306B\u4F7F\u3046)\n if (t.type === '_eol') {\n tokens.splice(i, 1);\n continue;\n }\n // \u30B3\u30E1\u30F3\u30C8\u3092\u98DB\u3070\u3059\n if (t.type === 'line_comment' || t.type === 'range_comment') {\n comment.push(t.value);\n tokens.splice(i, 1);\n continue;\n }\n // \u6539\u884C\u306B\u30B3\u30E1\u30F3\u30C8\u3092\u57CB\u3081\u8FBC\u3080\n if (t.type === 'eol') {\n t.value = comment.join('/');\n comment = [];\n }\n i++;\n }\n }\n /**\n * \u30A4\u30F3\u30C7\u30F3\u30C8\u306E\u500B\u6570\u3092\u6570\u3048\u308B\n * @returns \u623B\u308A\u5024\u3068\u3057\u3066[\u30A4\u30F3\u30C7\u30F3\u30C8\u6570, \u8AAD\u307F\u98DB\u3070\u3059\u3079\u304D\u6587\u5B57\u6570]\u3092\u8FD4\u3059\n */\n countIndent(src) {\n let indent = 0;\n for (let i = 0; i < src.length; i++) {\n const c = src.charAt(i);\n const n = isIndentChars(c);\n if (n === 0) {\n return [indent, i];\n }\n indent += n;\n }\n return [indent, src.length];\n }\n /**\n * \u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u3092\u30C8\u30FC\u30AF\u30F3\u306B\u5206\u5272\u3059\u308B\n * @param src \u306A\u3067\u3057\u3053\u306E\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\n * @param line \u5148\u982D\u884C\u306E\u884C\u756A\u53F7\n * @param filename \u30D5\u30A1\u30A4\u30EB\u540D\n */\n tokenize(src, line, filename) {\n const srcLength = src.length;\n const result = [];\n let columnCurrent;\n let lineCurrent;\n let column = 1;\n let isDefTest = false;\n let indent = 0;\n // \u6700\u521D\u306B\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u6570\u3048\u308B\n const ia = this.countIndent(src);\n indent = ia[0]; // \u30A4\u30F3\u30C7\u30F3\u30C8\u6570\n src = src.substring(ia[1]); // \u8AAD\u307F\u98DB\u3070\u3059\u6587\u5B57\u6570\n column += ia[1];\n while (src !== '') {\n let ok = false;\n // \u5404\u30EB\u30FC\u30EB\u306B\u3064\u3044\u3066\n for (const rule of rules) {\n // \u6B63\u898F\u8868\u73FE\u3067\u30DE\u30C3\u30C1\n const m = rule.pattern.exec(src);\n if (!m) {\n continue;\n }\n let ruleName = rule.name;\n ok = true;\n // \u7A7A\u767D\u306A\u3089\u30B9\u30AD\u30C3\u30D7\n if (rule.name === 'space') {\n column += m[0].length;\n src = src.substring(m[0].length);\n continue;\n }\n // \u30DE\u30C3\u30C1\u3057\u305F\u30EB\u30FC\u30EB\u304C\u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u3092\u6301\u3064\u306A\u3089\n if (rule.cbParser) {\n // \u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u3092\u547C\u3076\n let rp;\n if (isDefTest && rule.name === 'word') {\n rp = rule.cbParser(src, false);\n }\n else {\n try {\n rp = rule.cbParser(src);\n }\n catch (e) {\n throw new NakoLexerError(e.message, srcLength - src.length, srcLength - src.length + 1, line, filename);\n }\n }\n // \u30EB\u30FC\u30EB\u53D6\u5F97\u5F8C\u306E\u7279\u5225\u306A\u51E6\u7406\n if (rule.name === 'string_ex') {\n // \u5C55\u958B\u3042\u308A\u6587\u5B57\u5217(\u57CB\u3081\u8FBC\u307F\u5F0F) \u2192 aaa{x}bbb{x}cccc\n const list = this.splitStringEx(rp.res);\n if (list === null) {\n throw new InternalLexerError('\u5C55\u958B\u3042\u308A\u6587\u5B57\u5217\u3067\u5024\u306E\u57CB\u3081\u8FBC\u307F{...}\u304C\u5BFE\u5FDC\u3057\u3066\u3044\u307E\u305B\u3093\u3002', srcLength - src.length, srcLength - rp.src.length, line, filename);\n }\n if (list.length === 1) {\n // \u5C55\u958B\u306A\u3057(\u57CB\u3081\u8FBC\u307F\u5F0F\u306A\u3057)\u306E\u5834\u5408\n result.push({ type: 'string', value: list[0], josi: rp.josi, indent, file: filename, line, column, preprocessedCodeOffset: srcLength - src.length, preprocessedCodeLength: src.length - rp.src.length });\n line += rp.numEOL;\n column += src.length - rp.src.length;\n src = rp.src;\n if (rp.numEOL > 0) {\n column = 1;\n }\n break;\n }\n // \u5C55\u958B\u3042\u308A(\u57CB\u3081\u8FBC\u307F\u5F0F\u3042\u308A)\u306E\u5834\u5408\n result.push({ type: '(', value: '(', josi: '', indent, file: filename, line, column, preprocessedCodeOffset: srcLength - src.length, preprocessedCodeLength: 0 });\n let offset = 0;\n for (let i = 0; i < list.length; i++) {\n if (i % 2 === 0) {\n result.push({\n type: 'string',\n value: list[i],\n file: filename,\n josi: '',\n indent,\n line,\n column,\n preprocessedCodeOffset: srcLength - src.length + offset,\n preprocessedCodeLength: list[i].length + 2\n });\n // \u5148\u982D\u306A\u3089'\"...{'\u3001\u305D\u308C\u4EE5\u5916\u306A\u3089'}...{'\u3001\u6700\u5F8C\u306F\u4F55\u3067\u3082\u826F\u3044\n offset += list[i].length + 2;\n }\n else {\n result.push({ type: '&', value: '&', josi: '', indent, file: filename, line, column, preprocessedCodeOffset: srcLength - src.length + offset, preprocessedCodeLength: 0 });\n result.push({ type: '(', value: '(', josi: '', indent, file: filename, line, column, preprocessedCodeOffset: srcLength - src.length + offset, preprocessedCodeLength: 0 });\n result.push({ type: 'code', value: list[i], josi: '', indent, file: filename, line, column, preprocessedCodeOffset: srcLength - src.length + offset, preprocessedCodeLength: list[i].length });\n result.push({ type: ')', value: ')', josi: '', indent, file: filename, line, column, preprocessedCodeOffset: srcLength - src.length + offset + list[i].length, preprocessedCodeLength: 0 });\n result.push({ type: '&', value: '&', josi: '', indent, file: filename, line, column, preprocessedCodeOffset: srcLength - src.length + offset + list[i].length, preprocessedCodeLength: 0 });\n offset += list[i].length;\n }\n }\n line += rp.numEOL;\n column += src.length - rp.src.length;\n src = rp.src;\n if (rp.numEOL > 0) {\n column = 1;\n }\n result.push({ type: ')', value: ')', josi: rp.josi, indent, file: filename, line, column, preprocessedCodeOffset: srcLength - src.length, preprocessedCodeLength: 0 });\n break;\n }\n // \u7D50\u679C\u3092\u683C\u7D0D\n columnCurrent = column;\n column += src.length - rp.src.length;\n result.push({ type: rule.name, value: rp.res, josi: rp.josi, indent, line, column: columnCurrent, file: filename, preprocessedCodeOffset: srcLength - src.length, preprocessedCodeLength: src.length - rp.src.length });\n src = rp.src;\n line += rp.numEOL;\n if (rp.numEOL > 0) {\n column = 1;\n }\n break;\n }\n // \u30BD\u30FC\u30B9\u3092\u9032\u3081\u308B\u524D\u306B\u4F4D\u7F6E\u3092\u8A08\u7B97\n const srcOffset = srcLength - src.length;\n // \u5024\u3092\u5909\u63DB\u3059\u308B\u5FC5\u8981\u304C\u3042\u308B\u304B\uFF1F\n let value = m[0];\n if (rule.cb) {\n value = rule.cb(value);\n }\n // \u30BD\u30FC\u30B9\u3092\u9032\u3081\u308B\n columnCurrent = column;\n lineCurrent = line;\n column += m[0].length;\n src = src.substring(m[0].length);\n // \u6539\u884C\u306E\u6642\u306E\u51E6\u7406\n if ((rule.name === 'eol' && value === '\\n') || rule.name === '_eol') {\n value = line++;\n column = 1;\n }\n // \u6570\u5024\u306A\u3089\u5358\u4F4D\u3092\u6301\u3064\u304B\uFF1F --- #994\n if (rule.name === 'number') {\n // \u5358\u4F4D\u304C\u3042\u308C\u3070\u8AAD\u307F\u98DB\u3070\u3059\n const um = unitRE.exec(src);\n if (um) {\n src = src.substring(um[0].length);\n column += m[0].length;\n }\n // CSS\u306E\u5358\u4F4D\u306A\u3089\u81EA\u52D5\u7684\u306B\u6587\u5B57\u5217\u3068\u3057\u3066\u8A8D\u8B58\u3055\u305B\u308B #1811\n const cssUnit = cssUnitRE.exec(src);\n if (cssUnit) {\n ruleName = 'string';\n src = src.substring(cssUnit[0].length);\n column += m[0].length;\n value += cssUnit[0];\n }\n }\n let josi = '';\n if (rule.readJosi) {\n // \u6B63\u898F\u8868\u73FE\u3067\u52A9\u8A5E\u304C\u3042\u308B\u304B\u8AAD\u307F\u53D6\u308B\n const j = josiRE.exec(src);\n if (j) {\n column += j[0].length;\n josi = j[0].replace(/^\\s+/, '');\n src = src.substring(j[0].length);\n // \u52A9\u8A5E\u306E\u76F4\u5F8C\u306B\u3042\u308B\u30AB\u30F3\u30DE\u3092\u7121\u8996 #877\n if (src.charAt(0) === ',') {\n src = src.substring(1);\n }\n // \u300C\uFF0A\uFF0A\u3067\u3042\u308B\u300D\u306A\u3089\u524A\u9664 #939 #974\n if (removeJosiMap[josi]) {\n josi = '';\n }\n // \u300C\u3082\u306E\u300D\u69CB\u6587 (#1614)\n if (josi.substring(0, 2) === '\u3082\u306E') {\n josi = josi.substring(2);\n }\n }\n }\n switch (ruleName) {\n case 'def_test': {\n isDefTest = true;\n break;\n }\n case 'eol': { // eol\u306E\u51E6\u7406\u306F\u307B\u304B\u306B\u2191\u3068\u2193\u306B\u3042\u308B\n isDefTest = false;\n break;\n }\n default: {\n break;\n }\n }\n // \u3053\u3053\u307E\u3067\u2030(#682) \u3092\u51E6\u7406\n if (ruleName === 'dec_lineno') {\n line--;\n continue;\n }\n result.push({\n type: ruleName,\n value,\n indent,\n line: lineCurrent,\n column: columnCurrent,\n file: filename,\n josi,\n preprocessedCodeOffset: srcOffset,\n preprocessedCodeLength: (srcLength - src.length) - srcOffset\n });\n // \u6539\u884C\u306E\u3068\u304D\u6B21\u306E\u884C\u306E\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u8ABF\u3079\u308B\u3002\u306A\u304A\u3001\u6539\u884C\u306E\u5F8C\u306F\u5FC5\u305Acolumn\u304C1\u306B\u306A\u308B\u3002\u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u306E\u305F\u3081\u3001\u4E00\u884C\u306B2\u3064\u4EE5\u4E0A\u306E\u6587\u3092\u542B\u3080\u3068\u304D\u3092\u8003\u616E\u3059\u308B\u3002(core #66)\n if (ruleName === 'eol' && column === 1) {\n const ia = this.countIndent(src);\n indent = ia[0];\n column += ia[1];\n src = src.substring(ia[1]); // \u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u98DB\u3070\u3059\n }\n break;\n }\n if (!ok) {\n throw new InternalLexerError('\u672A\u77E5\u306E\u8A9E\u53E5: ' + src.substring(0, 3) + '...', srcLength - src.length, srcLength - srcLength + 3, line, filename);\n }\n }\n return result;\n }\n // \u30C8\u30FC\u30AF\u30F3\u914D\u5217\u3092type\u6587\u5B57\u5217\u306B\u5909\u63DB\n static tokensToTypeStr(tokens, sep) {\n const a = tokens.map((v) => {\n return v.type;\n });\n return a.join(sep);\n }\n /**\n * \u30D5\u30A1\u30A4\u30EB\u540D\u304B\u3089\u30E2\u30B8\u30E5\u30FC\u30EB\u540D\u3078\u5909\u63DB\n * @param {string} filename\n * @returns {string}\n */\n static filenameToModName(filename) {\n if (!filename) {\n return 'main';\n }\n // \u30D1\u30B9\u304C\u3042\u308C\u3070\u30D1\u30B9\u3092\u524A\u9664\n filename = filename.replace(/[\\\\:]/g, '/'); // Windows\u306Epath\u8A18\u53F7\u3092/\u306B\u7F6E\u63DB\n if (filename.indexOf('/') >= 0) {\n const a = filename.split('/');\n filename = a[a.length - 1];\n }\n filename = filename.replace(/\\.nako3?$/, '');\n return filename;\n }\n}\n", "/**\n * nadesiko v3 parser\n */\nimport { opPriority, RenbunJosi, operatorList } from './nako_parser_const.mjs';\nimport { NakoParserBase } from './nako_parser_base.mjs';\nimport { NakoSyntaxError } from './nako_errors.mjs';\nimport { NakoLexer } from './nako_lexer.mjs';\nimport { NewEmptyToken } from './nako_types.mjs';\n/**\n * \u69CB\u6587\u89E3\u6790\u3092\u884C\u3046\u30AF\u30E9\u30B9\n */\nexport class NakoParser extends NakoParserBase {\n /**\n * \u69CB\u6587\u89E3\u6790\u3092\u5B9F\u884C\u3059\u308B\n */\n parse(tokens, filename) {\n this.reset();\n this.tokens = tokens;\n this.modName = NakoLexer.filenameToModName(filename);\n this.modList.push(this.modName);\n // \u89E3\u6790\u51E6\u7406 - \u5148\u982D\u304B\u3089\u89E3\u6790\u958B\u59CB\n const result = this.startParser();\n // \u95A2\u6570\u6BCE\u306B\u975E\u540C\u671F\u51E6\u7406\u304C\u5FC5\u8981\u304B\u3069\u3046\u304B\u3092\u5224\u5B9A\u3059\u308B\n this.isModifiedNodes = false;\n this._checkAsyncFn(result);\n while (this.isModifiedNodes) {\n this.isModifiedNodes = false;\n this._checkAsyncFn(result);\n }\n return result;\n }\n /** \u30D1\u30FC\u30B5\u30FC\u306E\u4E00\u756A\u6700\u521D\u306B\u547C\u3073\u51FA\u3059\u69CB\u6587\u898F\u5247 */\n startParser() {\n const b = this.ySentenceList();\n const c = this.get();\n if (c && c.type !== 'eof') {\n this.logger.debug(`\u69CB\u6587\u89E3\u6790\u3067\u30A8\u30E9\u30FC\u3002${this.nodeToStr(c, { depth: 1 }, true)}\u306E\u4F7F\u3044\u65B9\u304C\u9593\u9055\u3063\u3066\u3044\u307E\u3059\u3002`, c);\n throw NakoSyntaxError.fromNode(`\u69CB\u6587\u89E3\u6790\u3067\u30A8\u30E9\u30FC\u3002${this.nodeToStr(c, { depth: 1 }, false)}\u306E\u4F7F\u3044\u65B9\u304C\u9593\u9055\u3063\u3066\u3044\u307E\u3059\u3002`, c);\n }\n return b;\n }\n /** \u4F55\u3082\u3057\u306A\u3044\n * @returns {Ast}\n */\n yNop() {\n return {\n type: 'nop',\n josi: '',\n ...this.peekSourceMap(),\n end: this.peekSourceMap()\n };\n }\n /** \u8907\u6570\u6587\u3092\u8FD4\u3059 */\n ySentenceList() {\n const blocks = [];\n let line = -1;\n const map = this.peekSourceMap();\n while (!this.isEOF()) {\n const n = this.ySentence();\n if (!n) {\n break;\n }\n blocks.push(n);\n if (line < 0) {\n line = n.line;\n }\n }\n if (blocks.length === 0) {\n const token = this.peek() || this.tokens[0];\n this.logger.debug('\u69CB\u6587\u89E3\u6790\u306B\u5931\u6557:' + this.nodeToStr(this.peek(), { depth: 1 }, true), token);\n throw NakoSyntaxError.fromNode('\u69CB\u6587\u89E3\u6790\u306B\u5931\u6557:' + this.nodeToStr(this.peek(), { depth: 1 }, false), token);\n }\n return { type: 'block', blocks, josi: '', ...map, end: this.peekSourceMap() };\n }\n /** \u4F59\u5270\u30B9\u30BF\u30C3\u30AF\u306E\u30EC\u30DD\u30FC\u30C8\u3092\u4F5C\u308B */\n makeStackBalanceReport() {\n const words = [];\n this.stack.forEach((t) => {\n let w = this.nodeToStr(t, { depth: 1 }, false);\n if (t.josi) {\n w += t.josi;\n }\n words.push(w);\n });\n const desc = words.join(',');\n // \u6700\u8FD1\u4F7F\u3063\u305F\u95A2\u6570\u306E\u4F7F\u3044\u65B9\u30EC\u30DD\u30FC\u30C8\u3092\u4F5C\u308B #1093\n let descFunc = '';\n const chA = 'A'.charCodeAt(0);\n for (const f of this.recentlyCalledFunc) {\n descFunc += ' - ';\n let no = 0;\n const josiA = (f).josi;\n if (josiA) {\n for (const arg of josiA) {\n const ch = String.fromCharCode(chA + no);\n descFunc += ch;\n if (arg.length === 1) {\n descFunc += arg[0];\n }\n else {\n descFunc += `(${arg.join('|')})`;\n }\n no++;\n }\n }\n descFunc += String(f.name) + '\\n';\n }\n this.recentlyCalledFunc = [];\n return `\u672A\u89E3\u6C7A\u306E\u5358\u8A9E\u304C\u3042\u308A\u307E\u3059: [${desc}]\\n\u6B21\u306E\u547D\u4EE4\u306E\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059:\\n${descFunc}`;\n }\n yEOL() {\n // \u884C\u672B\u306E\u30C1\u30A7\u30C3\u30AF #1009\n const eol = this.get();\n if (!eol) {\n return null;\n }\n // \u4F59\u5270\u30B9\u30BF\u30C3\u30AF\u306E\u78BA\u8A8D\n if (this.stack.length > 0) {\n const report = this.makeStackBalanceReport();\n throw NakoSyntaxError.fromNode(report, eol);\n }\n this.recentlyCalledFunc = [];\n return {\n type: 'eol',\n comment: eol.value,\n line: eol.line,\n column: eol.column,\n file: eol.file\n };\n }\n /** @returns {Ast | null} */\n ySentence() {\n const map = this.peekSourceMap();\n // \u6700\u521D\u306E\u8A9E\u53E5\u304C\u6C7A\u307E\u3063\u3066\u3044\u308B\u69CB\u6587\n if (this.check('eol')) {\n return this.yEOL();\n }\n if (this.check('\u3082\u3057')) {\n return this.yIF();\n }\n if (this.check('\u5F8C\u5224\u5B9A')) {\n return this.yAtohantei();\n }\n if (this.check('\u30A8\u30E9\u30FC\u76E3\u8996')) {\n return this.yTryExcept();\n }\n if (this.accept(['\u629C\u3051\u308B'])) {\n return { type: 'break', josi: '', ...map, end: this.peekSourceMap() };\n }\n if (this.accept(['\u7D9A\u3051\u308B'])) {\n return { type: 'continue', josi: '', ...map, end: this.peekSourceMap() };\n }\n if (this.check('??')) {\n return this.yDebugPrint();\n }\n // \u5B9F\u884C\u30E2\u30FC\u30C9\u306E\u6307\u5B9A\n if (this.accept(['DNCL\u30E2\u30FC\u30C9'])) {\n return this.yDNCLMode(1);\n }\n if (this.accept(['DNCL2\u30E2\u30FC\u30C9'])) {\n return this.yDNCLMode(2);\n }\n if (this.accept(['not', 'string', '\u30E2\u30FC\u30C9\u8A2D\u5B9A'])) {\n return this.ySetGenMode(this.y[1].value);\n }\n if (this.accept(['not', '\u30E2\u30B8\u30E5\u30FC\u30EB\u516C\u958B\u65E2\u5B9A\u5024', 'eq', 'string'])) {\n return this.yExportDefault(this.y[3].value);\n }\n if (this.accept(['not', '\u53B3\u30C1\u30A7\u30C3\u30AF'])) {\n return this.ySetMode('\u53B3\u3057\u304F\u30C1\u30A7\u30C3\u30AF');\n } // (#1698)\n // (memo) \u73FE\u72B6\u300C\u53D6\u8FBC\u300D\u306F\u30D7\u30EA\u30D7\u30ED\u30BB\u30B9\u6BB5\u968E(NakoCompiler.listRequireStatements)\u3067\u51E6\u7406\u3055\u308C\u308B\n // if (this.accept(['require', 'string', '\u53D6\u8FBC'])) { return this.yRequire() }\n // <\u5EC3\u6B62\u3055\u308C\u305F\u69CB\u6587>\n if (this.check('\u9010\u6B21\u5B9F\u884C')) {\n return this.yTikuji();\n } // \u5EC3\u6B62 #1611\n if (this.accept(['not', '\u975E\u540C\u671F\u30E2\u30FC\u30C9'])) {\n return this.yASyncMode();\n }\n // </\u5EC3\u6B62\u3055\u308C\u305F\u69CB\u6587>\n if (this.check2(['func', 'eq'])) {\n const word = this.get() || NewEmptyToken();\n throw NakoSyntaxError.fromNode(`\u95A2\u6570\u300E${word.value}\u300F\u306B\u4EE3\u5165\u3067\u304D\u307E\u305B\u3093\u3002`, word);\n }\n // \u5148\u8AAD\u307F\u3057\u3066\u521D\u3081\u3066\u78BA\u5B9A\u3059\u308B\u69CB\u6587\n if (this.accept([this.ySpeedMode])) {\n return this.y[0];\n }\n if (this.accept([this.yPerformanceMonitor])) {\n return this.y[0];\n }\n if (this.accept([this.yLet])) {\n return this.y[0];\n }\n if (this.accept([this.yDefTest])) {\n return this.y[0];\n }\n if (this.accept([this.yDefFunc])) {\n return this.y[0];\n }\n // \u95A2\u6570\u547C\u3073\u51FA\u3057\u306E\u4ED6\u3001\u5404\u7A2E\u69CB\u6587\u306E\u5B9F\u88C5\n if (this.accept([this.yCall])) {\n const c1 = this.y[0];\n const nextToken = this.peek();\n if (nextToken && nextToken.type === '\u306A\u3089\u3070') {\n const map = this.peekSourceMap();\n const cond = c1;\n this.get(); // skip \u306A\u3089\u3070\n // \u3082\u3057\u6587\u306E\u6761\u4EF6\u3068\u3057\u3066\u95A2\u6570\u547C\u3073\u51FA\u3057\u304C\u3042\u308B\u5834\u5408\n return this.yIfThen(cond, map);\n }\n else if (RenbunJosi.indexOf(c1.josi || '') >= 0) { // \u9023\u6587\u3092block\u3068\u3057\u3066\u63A5\u7D9A\u3059\u308B(\u3082\u3057\u69CB\u6587\u306A\u3069\u306E\u305F\u3081)\n if (this.stack.length >= 1) { // \u30B9\u30BF\u30C3\u30AF\u306E\u4F59\u5270\u3092\u30C1\u30A7\u30C3\u30AF\n const report = this.makeStackBalanceReport();\n throw NakoSyntaxError.fromNode(report, c1);\n }\n const c2 = this.ySentence();\n if (c2 !== null) {\n return {\n type: 'block',\n blocks: [c1, c2],\n josi: c2.josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n }\n return c1;\n }\n return null;\n }\n /** [\u5EC3\u6B62] \u975E\u540C\u671F\u30E2\u30FC\u30C9 #11 @returns {Ast} */\n yASyncMode() {\n this.logger.error('\u300E\u975E\u540C\u671F\u30E2\u30FC\u30C9\u300F\u69CB\u6587\u306F\u5EC3\u6B62\u3055\u308C\u307E\u3057\u305F(https://nadesi.com/v3/doc/go.php?1028)\u3002', this.peek());\n const map = this.peekSourceMap();\n return { type: 'eol', ...map, end: this.peekSourceMap() };\n }\n /** set DNCL mode */\n yDNCLMode(ver) {\n const map = this.peekSourceMap();\n if (ver === 1) {\n // \u914D\u5217\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306F1\u304B\u3089\n this.arrayIndexFrom = 1;\n // \u914D\u5217\u30A2\u30AF\u30BB\u30B9\u3092JS\u3068\u9006\u9806\u3067\u6307\u5B9A\u3059\u308B\n this.flagReverseArrayIndex = true;\n }\n else {\n // ver2\u306FPython\u306B\u8FD1\u3044\u3068\u306E\u3053\u3068\n }\n // \u914D\u5217\u4EE3\u5165\u6642\u81EA\u52D5\u3067\u521D\u671F\u5316\u30C1\u30A7\u30C3\u30AF\u3059\u308B\n this.flagCheckArrayInit = true;\n return { type: 'eol', ...map, end: this.peekSourceMap() };\n }\n /** @returns {Ast} */\n ySetGenMode(mode) {\n const map = this.peekSourceMap();\n this.genMode = mode;\n return { type: 'eol', ...map, end: this.peekSourceMap() };\n }\n /** @returns {Ast} */\n yExportDefault(mode) {\n const map = this.peekSourceMap();\n this.isExportDefault = mode === '\u516C\u958B';\n this.moduleExport.set(this.modName, this.isExportDefault);\n return { type: 'eol', ...map, end: this.peekSourceMap() };\n }\n /** @returns {AstStrValue} */\n ySetMode(mode) {\n const map = this.peekSourceMap();\n return { type: 'run_mode', value: mode, ...map, end: this.peekSourceMap() };\n }\n /** @returns {AstBlocks} */\n yBlock() {\n const map = this.peekSourceMap();\n const blocks = [];\n if (this.check('\u3053\u3053\u304B\u3089')) {\n this.get();\n }\n while (!this.isEOF()) {\n if (this.checkTypes(['\u9055\u3048\u3070', '\u3053\u3053\u307E\u3067', '\u30A8\u30E9\u30FC'])) {\n break;\n }\n if (!this.accept([this.ySentence])) {\n break;\n }\n blocks.push(this.y[0]);\n }\n return { type: 'block', blocks, josi: '', ...map, end: this.peekSourceMap() };\n }\n yDefFuncReadArgs() {\n if (!this.check('(')) {\n return null;\n }\n const a = [];\n this.get(); // skip '('\n while (!this.isEOF()) {\n if (this.check(')')) {\n this.get(); // skip ''\n break;\n }\n const t = this.get();\n if (t) {\n a.push(t);\n } // Token to Ast\n if (this.check('comma')) {\n this.get();\n }\n }\n return a;\n }\n yDefTest() {\n return this.yDefFuncCommon('def_test');\n }\n yDefFunc() {\n return this.yDefFuncCommon('def_func');\n }\n /** \u30E6\u30FC\u30B6\u30FC\u95A2\u6570\u306E\u5B9A\u7FA9\n * @returns {AstDefFunc | null}\n */\n yDefFuncCommon(type) {\n if (!this.check(type)) { // yDefFunc\u304B\u3089\u547C\u3070\u308C\u308C\u3070 def_func \u306A\u306E\u304B\u3092\u30C1\u30A7\u30C3\u30AF\u3059\u308B\n return null;\n }\n const map = this.peekSourceMap();\n // \u95A2\u6570\u5B9A\u7FA9\u30C8\u30FC\u30AF\u30F3\u3092\u53D6\u5F97(\u3053\u306Emeta\u306B\u5148\u8AAD\u307F\u3057\u305F\u95A2\u6570\u306E\u578B\u306A\u3069\u304C\u5165\u3063\u3066\u3044\u308B)\n // (ref) NakoLexer.preDefineFunc\n const defToken = this.get(); // 'def_func' or 'def_test'\n if (!defToken) {\n return null;\n }\n const def = defToken;\n let isExport = this.isExportDefault;\n if (this.check('{')) {\n this.get();\n const funcAttribute = this.get();\n if (this.check('}')) {\n this.get();\n }\n else {\n throw NakoSyntaxError.fromNode('\u95A2\u6570\u306E\u5C5E\u6027\u306E\u6307\u5B9A\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093\u3002\u300E{\u300F\u3068\u300E}\u300F\u3067\u56F2\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002', def);\n }\n if (funcAttribute !== null) {\n if (funcAttribute.value === '\u516C\u958B') {\n isExport = true;\n }\n if (funcAttribute.value === '\u975E\u516C\u958B') {\n isExport = false;\n }\n if (funcAttribute.value === '\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8') {\n isExport = true;\n }\n }\n }\n let defArgs = [];\n if (this.check('(')) {\n defArgs = this.yDefFuncReadArgs() || [];\n } // // lexer\u3067\u3082\u89E3\u6790\u3057\u3066\u3044\u308B\u304C\u518D\u5EA6\u8A73\u3057\u304F\n const funcName = this.get();\n if (!funcName || funcName.type !== 'func') {\n this.logger.debug(this.nodeToStr(funcName, { depth: 0, typeName: '\u95A2\u6570' }, true) + '\u306E\u5BA3\u8A00\u3067\u30A8\u30E9\u30FC\u3002', funcName);\n throw NakoSyntaxError.fromNode(this.nodeToStr(funcName, { depth: 0, typeName: '\u95A2\u6570' }, false) + '\u306E\u5BA3\u8A00\u3067\u30A8\u30E9\u30FC\u3002', def);\n }\n if (this.check('(')) {\n // \u95A2\u6570\u5F15\u6570\u306E\u4E8C\u91CD\u5B9A\u7FA9\n if (defArgs.length > 0) {\n this.logger.debug(this.nodeToStr(funcName, { depth: 0, typeName: '\u95A2\u6570' }, true) + '\u306E\u5BA3\u8A00\u3067\u3001\u5F15\u6570\u5B9A\u7FA9\u306F\u540D\u524D\u306E\u524D\u304B\u5F8C\u306B\u4E00\u5EA6\u3060\u3051\u53EF\u80FD\u3067\u3059\u3002', funcName);\n throw NakoSyntaxError.fromNode(this.nodeToStr(funcName, { depth: 0, typeName: '\u95A2\u6570' }, false) + '\u306E\u5BA3\u8A00\u3067\u3001\u5F15\u6570\u5B9A\u7FA9\u306F\u540D\u524D\u306E\u524D\u304B\u5F8C\u306B\u4E00\u5EA6\u3060\u3051\u53EF\u80FD\u3067\u3059\u3002', funcName);\n }\n defArgs = this.yDefFuncReadArgs() || [];\n }\n if (this.check('\u3068\u306F')) {\n this.get();\n }\n let block = this.yNop();\n let multiline = false;\n let asyncFn = false;\n if (this.check('\u3053\u3053\u304B\u3089')) {\n multiline = true;\n }\n if (this.check('eol')) {\n multiline = true;\n }\n try {\n this.funcLevel++;\n this.usedAsyncFn = false;\n // \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092\u751F\u6210\n const backupLocalvars = this.localvars;\n this.localvars = new Map([['\u305D\u308C', { type: 'var', value: '' }]]);\n if (multiline) {\n this.saveStack();\n // \u95A2\u6570\u306E\u5F15\u6570\u3092\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3068\u3057\u3066\u767B\u9332\u3059\u308B\n for (const arg of defArgs) {\n if (!arg) {\n continue;\n }\n if (!arg.value) {\n continue;\n }\n const fnName = arg.value;\n this.localvars.set(fnName, { 'type': 'var', 'value': '' });\n }\n block = this.yBlock();\n // \u300C\u3053\u3053\u307E\u3067\u300D\u306E\u30C1\u30A7\u30C3\u30AF\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get(); // skip '\u3053\u3053\u307E\u3067'\n }\n else {\n // \u300C\u3053\u3053\u307E\u3067\u300D\u304C\u898B\u5F53\u305F\u3089\u306A\u3044\n const nextWordO = this.peek();\n let nextWord = JSON.stringify(nextWordO);\n if (nextWordO && nextWordO.type && nextWordO.value) {\n nextWord = nextWordO.value;\n }\n throw NakoSyntaxError.fromNode(`\u300E\u3053\u3053\u307E\u3067\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u95A2\u6570\u5B9A\u7FA9\u306E\u672B\u5C3E\u306B\u5FC5\u8981\u3067\u3059\u3002\u300E${nextWord}\u300F\u306E\u524D\u306B\u300E\u3053\u3053\u307E\u3067\u300F\u3092\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002`, def);\n }\n this.loadStack();\n }\n else {\n this.saveStack();\n block = this.ySentence() || this.yNop();\n this.loadStack();\n }\n this.funcLevel--;\n asyncFn = this.usedAsyncFn;\n this.localvars = backupLocalvars;\n }\n catch (err) {\n this.logger.debug(this.nodeToStr(funcName, { depth: 0, typeName: '\u95A2\u6570' }, true) +\n '\u306E\u5B9A\u7FA9\u3067\u4EE5\u4E0B\u306E\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3057\u305F\u3002\\n' + String(err.message), def);\n throw NakoSyntaxError.fromNode(this.nodeToStr(funcName, { depth: 0, typeName: '\u95A2\u6570' }, false) +\n '\u306E\u5B9A\u7FA9\u3067\u4EE5\u4E0B\u306E\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3057\u305F\u3002\\n' + String(err.message), def);\n }\n const func = this.funclist.get(funcName.value);\n if (func && !func.asyncFn && asyncFn) {\n func.asyncFn = asyncFn;\n }\n return {\n type,\n name: funcName.value,\n args: defArgs,\n blocks: [block],\n asyncFn,\n isExport,\n josi: '',\n meta: def.meta,\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** \u300C\u3082\u3057\u300D\u6587\u306E\u6761\u4EF6\u3092\u53D6\u5F97 */\n yIFCond() {\n const map = this.peekSourceMap();\n let a = this.yGetArg();\n if (!a) {\n throw NakoSyntaxError.fromNode('\u300C\u3082\u3057\u300D\u6587\u306E\u6761\u4EF6\u5F0F\u306B\u9593\u9055\u3044\u304C\u3042\u308A\u307E\u3059\u3002' + this.nodeToStr(this.peek(), { depth: 1 }, false), map);\n }\n // console.log('@@yIFCond=', a)\n // \u30C1\u30A7\u30C3\u30AF : A\u306A\u3089\u3070\n if (a.josi === '\u306A\u3089\u3070') {\n return a;\n }\n if (a.josi === '\u3067\u306A\u3051\u308C\u3070') {\n a = { type: 'not', operator: 'not', blocks: [a], josi: '', ...map, end: this.peekSourceMap() };\n return a;\n }\n // \u30C1\u30A7\u30C3\u30AF : A\u304CB\u306A\u3089\u3070 --- \u300C\u95A2\u6570B(A)\u300D\u306E\u3068\u304D\n if ((a.josi !== '') && (this.check('func'))) {\n // \u3082\u3057\u6587\u3067\u95A2\u6570\u547C\u3073\u51FA\u3057\u304C\u3042\u308B\u5834\u5408\n this.stack.push(a);\n a = this.yCall();\n }\n else \n // \u30C1\u30A7\u30C3\u30AF : A\u304CB\u306A\u3089\u3070 --- \u300CA = B\u300D\u306E\u3068\u304D\n if (a.josi === '\u304C') {\n const tmpI = this.index;\n const b = this.yGetArg();\n if (!b) {\n throw NakoSyntaxError.fromNode('\u3082\u3057\u6587\u306E\u6761\u4EF6\u300CA\u304CB\u306A\u3089\u3070\u300D\u3067B\u304C\u306A\u3044\u304B\u6761\u4EF6\u304C\u8907\u96D1\u904E\u304E\u307E\u3059\u3002' +\n this.nodeToStr(this.peek(), { depth: 1 }, false), map);\n }\n if (this.check('\u306A\u3089\u3070')) {\n const naraba = this.get() || { 'value': '\u306A\u3089\u3070' };\n b.josi = naraba.value;\n }\n if (b && (b.josi === '\u306A\u3089\u3070' || b.josi === '\u3067\u306A\u3051\u308C\u3070')) {\n return {\n type: 'op',\n operator: (b.josi === '\u3067\u306A\u3051\u308C\u3070') ? 'noteq' : 'eq',\n blocks: [a, b],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n this.index = tmpI;\n }\n // \u3082\u3057\u6587\u3067\u8FFD\u52A0\u306E\u95A2\u6570\u547C\u3073\u51FA\u3057\u304C\u3042\u308B\u5834\u5408\n if (!this.check('\u306A\u3089\u3070')) {\n this.stack.push(a);\n a = this.yCall();\n }\n // (\u306A\u3089\u3070|\u3067\u306A\u3051\u308C\u3070)\u3092\u78BA\u8A8D\n if (!this.check('\u306A\u3089\u3070')) {\n const smap = a || this.yNop();\n this.logger.debug('\u3082\u3057\u6587\u3067\u300E\u306A\u3089\u3070\u300F\u304C\u306A\u3044\u304B\u3001\u6761\u4EF6\u304C\u8907\u96D1\u904E\u304E\u307E\u3059\u3002' + this.nodeToStr(this.peek(), { depth: 1 }, false) + '\u306E\u76F4\u524D\u306B\u300E\u306A\u3089\u3070\u300F\u3092\u66F8\u3044\u3066\u304F\u3060\u3055\u3044\u3002', smap);\n throw NakoSyntaxError.fromNode('\u3082\u3057\u6587\u3067\u300E\u306A\u3089\u3070\u300F\u304C\u306A\u3044\u304B\u3001\u6761\u4EF6\u304C\u8907\u96D1\u904E\u304E\u307E\u3059\u3002' + this.nodeToStr(this.peek(), { depth: 1 }, false) + '\u306E\u76F4\u524D\u306B\u300E\u306A\u3089\u3070\u300F\u3092\u66F8\u3044\u3066\u304F\u3060\u3055\u3044\u3002', smap);\n }\n const naraba = this.get();\n // \u5426\u5B9A\u5F62\u306E\u30C1\u30A7\u30C3\u30AF\n if (naraba && naraba.value === '\u3067\u306A\u3051\u308C\u3070') {\n a = {\n type: 'not',\n operator: 'not',\n blocks: [a],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n if (!a) {\n throw NakoSyntaxError.fromNode('\u300C\u3082\u3057\u300D\u6587\u306E\u6761\u4EF6\u5F0F\u306B\u9593\u9055\u3044\u304C\u3042\u308A\u307E\u3059\u3002' + this.nodeToStr(this.peek(), { depth: 1 }, false), map);\n }\n return a;\n }\n /** \u3082\u3057\u6587\n * @returns {AstIf | null} */\n yIF() {\n const map = this.peekSourceMap();\n // \u300C\u3082\u3057\u300D\u304C\u3042\u308C\u3070\u300C\u3082\u3057\u300D\u6587\u3067\u3042\u308B\n if (!this.check('\u3082\u3057')) {\n return null;\n }\n const mosi = this.get(); // skip \u3082\u3057\n if (mosi === null) {\n return null;\n }\n while (this.check('comma')) {\n this.get();\n } // skip comma\n // \u300C\u3082\u3057\u300D\u6587\u306E\u6761\u4EF6\u3092\u53D6\u5F97\n let expr = null;\n try {\n expr = this.yIFCond();\n }\n catch (err) {\n throw NakoSyntaxError.fromNode('\u300E\u3082\u3057\u300F\u6587\u306E\u6761\u4EF6\u3067\u6B21\u306E\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3059\u3002\\n' + String(err.message), mosi);\n }\n return this.yIfThen(expr, map);\n }\n /** \u300C\u3082\u3057\u300D\u6587\u306E\u300C\u3082\u3057\u300D\u4EE5\u964D\u306E\u5224\u5B9A ... \u300C\u3082\u3057\u300D\u304C\u306A\u304F\u3066\u3082\u6761\u4EF6\u5206\u5C90\u306F\u52D5\u304F\u3088\u3046\u306B\u306A\u3063\u3066\u3044\u308B\n * @returns {AstIf | null}\n */\n yIfThen(expr, map) {\n // \u300C\u3082\u3057\u300D\u6587\u306E \u771F\u507D\u306E\u30D6\u30ED\u30C3\u30AF\u3092\u53D6\u5F97\n let trueBlock = this.yNop();\n let falseBlock = this.yNop();\n let tanbun = false;\n // True Block\n if (this.check('eol')) {\n trueBlock = this.yBlock();\n }\n else {\n const block = this.ySentence();\n if (block) {\n trueBlock = block;\n }\n tanbun = true;\n }\n // skip EOL\n while (this.check('eol')) {\n this.get();\n }\n // Flase Block\n if (this.check('\u9055\u3048\u3070')) {\n this.get(); // skip \u9055\u3048\u3070\n while (this.check('comma')) {\n this.get();\n }\n if (this.check('eol')) {\n falseBlock = this.yBlock();\n }\n else {\n const block = this.ySentence();\n if (block) {\n falseBlock = block;\n }\n tanbun = true;\n }\n }\n if (tanbun === false) {\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get();\n }\n else {\n throw NakoSyntaxError.fromNode('\u300E\u3082\u3057\u300F\u6587\u3067\u300E\u3053\u3053\u307E\u3067\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002', map);\n }\n }\n return {\n type: 'if',\n blocks: [expr, trueBlock, falseBlock],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n ySpeedMode() {\n const map = this.peekSourceMap();\n if (!this.check2(['string', '\u5B9F\u884C\u901F\u5EA6\u512A\u5148'])) {\n return null;\n }\n const optionNode = this.get();\n this.get();\n let val = '';\n if (optionNode && optionNode.value) {\n val = optionNode.value;\n }\n else {\n return null;\n }\n const options = { \u884C\u756A\u53F7\u7121\u3057: false, \u6697\u9ED9\u306E\u578B\u5909\u63DB\u7121\u3057: false, \u5F37\u5236\u30D4\u30E5\u30A2: false, \u305D\u308C\u7121\u52B9: false };\n for (const name of val.split('/')) {\n // \u5168\u3066\u6709\u52B9\u5316\n if (name === '\u5168\u3066') {\n for (const k of Object.keys(options)) {\n options[k] = true;\n }\n break;\n }\n // \u500B\u5225\u306B\u6709\u52B9\u5316\n if (Object.keys(options).includes(name)) {\n options[name] = true;\n }\n else {\n // \u4E92\u63DB\u6027\u3092\u8003\u3048\u3066\u3001\u8B66\u544A\u306B\u7559\u3081\u308B\u3002\n this.logger.warn(`\u5B9F\u884C\u901F\u5EA6\u512A\u5148\u6587\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u300E${name}\u300F\u306F\u5B58\u5728\u3057\u307E\u305B\u3093\u3002`, optionNode);\n }\n }\n let multiline = false;\n if (this.check('\u3053\u3053\u304B\u3089')) {\n this.get();\n multiline = true;\n }\n else if (this.check('eol')) {\n multiline = true;\n }\n let block = this.yNop();\n if (multiline) {\n block = this.yBlock();\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get();\n }\n }\n else {\n block = this.ySentence() || block;\n }\n return {\n type: 'speed_mode',\n options,\n blocks: [block],\n josi: '',\n ...map\n };\n }\n yPerformanceMonitor() {\n const map = this.peekSourceMap();\n if (!this.check2(['string', '\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u30E2\u30CB\u30BF\u9069\u7528'])) {\n return null;\n }\n const optionNode = this.get();\n if (!optionNode) {\n return null;\n }\n this.get();\n const options = { \u30E6\u30FC\u30B6\u95A2\u6570: false, \u30B7\u30B9\u30C6\u30E0\u95A2\u6570\u672C\u4F53: false, \u30B7\u30B9\u30C6\u30E0\u95A2\u6570: false };\n for (const name of optionNode.value.split('/')) {\n // \u5168\u3066\u6709\u52B9\u5316\n if (name === '\u5168\u3066') {\n for (const k of Object.keys(options)) {\n options[k] = true;\n }\n break;\n }\n // \u500B\u5225\u306B\u6709\u52B9\u5316\n if (Object.keys(options).includes(name)) {\n options[name] = true;\n }\n else {\n // \u4E92\u63DB\u6027\u3092\u8003\u3048\u3066\u3001\u8B66\u544A\u306B\u7559\u3081\u308B\u3002\n this.logger.warn(`\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u30E2\u30CB\u30BF\u9069\u7528\u6587\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u300E${name}\u300F\u306F\u5B58\u5728\u3057\u307E\u305B\u3093\u3002`, optionNode);\n }\n }\n let multiline = false;\n if (this.check('\u3053\u3053\u304B\u3089')) {\n this.get();\n multiline = true;\n }\n else if (this.check('eol')) {\n multiline = true;\n }\n let block = this.yNop();\n if (multiline) {\n block = this.yBlock();\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get();\n }\n }\n else {\n block = this.ySentence() || block;\n }\n return {\n type: 'performance_monitor',\n options,\n blocks: [block],\n josi: '',\n ...map\n };\n }\n /** [\u5EC3\u6B62] #1611 \u300C\u9010\u6B21\u5B9F\u884C\u300D\u69CB\u6587 @returns {Ast | null} */\n yTikuji() {\n if (!this.check('\u9010\u6B21\u5B9F\u884C')) {\n return null;\n }\n const tikuji = this.getCur(); // skip\n this.logger.error('\u300E\u9010\u6B21\u5B9F\u884C\u300F\u69CB\u6587\u306F\u5EC3\u6B62\u3055\u308C\u307E\u3057\u305F(https://nadesi.com/v3/doc/go.php?944)\u3002', tikuji);\n return { type: 'eol', ...this.peekSourceMap(), end: this.peekSourceMap() };\n }\n /**\n * 1\u3064\u76EE\u306E\u5024\u3092\u4E0E\u3048\u3001\u305D\u306E\u5F8C\u306B\u7D9A\u304F\u8A08\u7B97\u5F0F\u3092\u53D6\u5F97\u3057\u3001\u512A\u5148\u898F\u5247\u306B\u6CBF\u3063\u3066\u4E26\u3073\u66FF\u3048\u3057\u3066\u623B\u3059\n * @param {Ast} firstValue\n */\n yGetArgOperator(firstValue) {\n const args = [firstValue];\n while (!this.isEOF()) {\n // \u6F14\u7B97\u5B50\u304C\u3042\u308B\uFF1F\n let op = this.peek();\n if (op && opPriority[op.type]) {\n op = this.getCur();\n args.push(op); // Token to Ast\n // \u6F14\u7B97\u5B50\u5F8C\u306E\u5024\u3092\u53D6\u5F97\n const v = this.yValue();\n if (v === null) {\n throw NakoSyntaxError.fromNode(`\u8A08\u7B97\u5F0F\u3067\u6F14\u7B97\u5B50\u300E${op.value}\u300F\u5F8C\u306B\u5024\u304C\u3042\u308A\u307E\u305B\u3093`, firstValue);\n }\n args.push(v);\n continue;\n }\n break;\n }\n if (args.length === 0) {\n return null;\n }\n if (args.length === 1) {\n return args[0];\n }\n return this.infixToAST(args);\n }\n /**\n * \u7BC4\u56F2(\u95A2\u6570)\u3092\u8FD4\u3059\n * @param kara\n * @returns {AstCallFunc | null}\n */\n yRange(kara) {\n // \u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8?\n if (!this.check('\u2026')) {\n return null;\n }\n const map = this.peekSourceMap();\n this.get(); // skip '\u2026'\n const made = this.yValue();\n if (!kara || !made) {\n throw NakoSyntaxError.fromNode('\u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u6307\u5B9A\u30A8\u30E9\u30FC\u3002\u300EA\u2026B\u300F\u306E\u66F8\u5F0F\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n const meta = this.funclist.get('\u7BC4\u56F2');\n if (!meta) {\n throw new Error('\u95A2\u6570\u300E\u7BC4\u56F2\u300F\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002plugin_system\u3092\u30B7\u30B9\u30C6\u30E0\u306B\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044\u3002');\n }\n return {\n type: 'func',\n name: '\u7BC4\u56F2',\n blocks: [kara, made],\n josi: made.josi,\n meta,\n asyncFn: false,\n ...map,\n end: this.peekSourceMap()\n };\n }\n /**\n * \u8868\u793A(\u95A2\u6570)\u3092\u8FD4\u3059 \u300C??\u300D\u306E\u30A8\u30A4\u30EA\u30A2\u30B9\u3067\u5229\u7528 (#1745)\n */\n yDebugPrint() {\n const map = this.peekSourceMap();\n const t = this.get(); // skip '??'\n if (!t || t.value !== '??') {\n throw NakoSyntaxError.fromNode('\u300E??\u300F\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n const arg = this.yCalc();\n if (!arg) {\n throw NakoSyntaxError.fromNode('\u300E??(\u8A08\u7B97\u5F0F)\u300F\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n const meta = this.funclist.get('\u30CF\u30C6\u30CA\u95A2\u6570\u5B9F\u884C');\n if (!meta) {\n throw new Error('\u95A2\u6570\u300E\u30CF\u30C6\u30CA\u95A2\u6570\u5B9F\u884C\u300F\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002plugin_system\u3092\u30B7\u30B9\u30C6\u30E0\u306B\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044\u3002');\n }\n return {\n type: 'func',\n name: '\u30CF\u30C6\u30CA\u95A2\u6570\u5B9F\u884C',\n blocks: [arg],\n josi: '',\n meta,\n asyncFn: false,\n ...map,\n end: this.peekSourceMap()\n };\n }\n yGetArg() {\n // \u5024\u3092\u4E00\u3064\u8AAD\u3080\n const value1 = this.yValue();\n if (value1 === null) {\n return null;\n }\n // \u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\uFF1F\n if (this.check('\u2026')) {\n return this.yRange(value1);\n }\n // \u8A08\u7B97\u5F0F\u304C\u3042\u308B\u5834\u5408\u3092\u8003\u616E\n return this.yGetArgOperator(value1);\n }\n infixToPolish(list) {\n // \u4E2D\u9593\u8A18\u6CD5\u304B\u3089\u9006\u30DD\u30FC\u30E9\u30F3\u30C9\u306B\u5909\u63DB\n const priority = (t) => {\n if (opPriority[t.type]) {\n return opPriority[t.type];\n }\n return 10;\n };\n const stack = [];\n const polish = [];\n while (list.length > 0) {\n const t = list.shift();\n if (!t) {\n break;\n }\n while (stack.length > 0) { // \u512A\u5148\u9806\u4F4D\u3092\u898B\u3066\u79FB\u52D5\u3059\u308B\n const sTop = stack[stack.length - 1];\n if (priority(t) > priority(sTop)) {\n break;\n }\n const tpop = stack.pop();\n if (!tpop) {\n this.logger.error('\u8A08\u7B97\u5F0F\u306B\u9593\u9055\u3044\u304C\u3042\u308A\u307E\u3059\u3002', t);\n break;\n }\n polish.push(tpop);\n }\n stack.push(t);\n }\n // \u6B8B\u3063\u305F\u8981\u7D20\u3092\u7A4D\u307F\u66FF\u3048\u308B\n while (stack.length > 0) {\n const t = stack.pop();\n if (t) {\n polish.push(t);\n }\n }\n return polish;\n }\n /** @returns {Ast | null} */\n infixToAST(list) {\n if (list.length === 0) {\n return null;\n }\n // \u9006\u30DD\u30FC\u30E9\u30F3\u30C9\u3092\u69CB\u6587\u6728\u306B\n const josi = list[list.length - 1].josi;\n const node = list[list.length - 1];\n const polish = this.infixToPolish(list);\n /** @type {Ast[]} */\n const stack = [];\n for (const t of polish) {\n if (!opPriority[t.type]) { // \u6F14\u7B97\u5B50\u3067\u306F\u306A\u3044\n stack.push(t);\n continue;\n }\n const b = stack.pop();\n const a = stack.pop();\n if (a === undefined || b === undefined) {\n this.logger.debug('--- \u8A08\u7B97\u5F0F(\u9006\u30DD\u30FC\u30E9\u30F3\u30C9) ---\\n' + JSON.stringify(polish));\n throw NakoSyntaxError.fromNode('\u8A08\u7B97\u5F0F\u3067\u30A8\u30E9\u30FC', node);\n }\n /** @type {AstOperator} */\n const op = {\n type: 'op',\n operator: t.type,\n blocks: [a, b],\n josi,\n startOffset: a.startOffset,\n endOffset: a.endOffset,\n line: a.line,\n column: a.column,\n file: a.file\n };\n stack.push(op);\n }\n const ans = stack.pop();\n if (!ans) {\n return null;\n }\n return ans;\n }\n yGetArgParen(y, funcName) {\n let isClose = false;\n const si = this.stack.length;\n while (!this.isEOF()) {\n if (this.check(')')) {\n isClose = true;\n break;\n }\n // \u30AB\u30C3\u30B3\u3092\u7528\u3044\u305F\u95A2\u6570\u547C\u3073\u51FA\u3057\u306E\u4E2D\u3067\u52A9\u8A5E\u3092\u7528\u3044\u305F\u95A2\u6570\u547C\u3073\u51FA\u3057\u3092\u6709\u52B9\u306B\u3059\u308B #2000\n const v = this.yCalc();\n if (v) {\n this.pushStack(v);\n if (this.check('comma')) {\n this.get();\n }\n continue;\n }\n break;\n }\n if (!isClose) {\n const name = funcName || y[0].value || this.nodeToStr(y[0], { depth: 0, typeName: '\u95A2\u6570' }, false);\n throw NakoSyntaxError.fromNode(`C\u98A8\u95A2\u6570\u300E${name}\u300F\u3067\u30AB\u30C3\u30B3\u304C\u9589\u3058\u3066\u3044\u307E\u305B\u3093`, y[0]);\n }\n const a = [];\n while (si < this.stack.length) {\n const v = this.popStack();\n if (v) {\n a.unshift(v);\n }\n }\n return a;\n }\n /** \u95A2\u6570\u306E\u623B\u308A\u5024\u3092\u7D9A\u3051\u3066C\u98A8\u547C\u3073\u51FA\u3057\u3059\u308B */\n yApplyCallValue(callee) {\n let node = callee;\n while (this.check('(')) {\n this.get(); // skip '('\n const args = this.yGetArgParen([node], '\u95A2\u6570\u547C\u3073\u51FA\u3057\u306E\u7D50\u679C');\n if (!this.check(')')) {\n throw NakoSyntaxError.fromNode('C\u98A8\u95A2\u6570\u547C\u3073\u51FA\u3057\u306E\u30A8\u30E9\u30FC', node);\n }\n const close = this.get();\n node = {\n type: 'call_value',\n blocks: [node, ...args],\n josi: close?.josi || '',\n startOffset: node.startOffset,\n endOffset: close?.endOffset,\n line: node.line,\n column: node.column,\n file: node.file,\n end: this.peekSourceMap()\n };\n }\n return node;\n }\n /** @returns {AstRepeatTimes | null} */\n yRepeatTime() {\n const map = this.peekSourceMap();\n if (!this.check('\u56DE')) {\n return null;\n }\n this.get(); // skip '\u56DE'\n if (this.check('comma')) {\n this.get();\n } // skip comma\n if (this.check('\u7E70\u8FD4')) {\n this.get();\n } // skip 'N\u56DE\u3001\u7E70\u308A\u8FD4\u3059' (#924)\n const num = this.popStack([]) || { type: 'word', value: '\u305D\u308C', josi: '', ...map, end: this.peekSourceMap() };\n let multiline = false;\n let block = this.yNop();\n if (this.check('comma')) {\n this.get();\n }\n if (this.check('\u3053\u3053\u304B\u3089')) {\n this.get();\n multiline = true;\n }\n else if (this.check('eol')) {\n multiline = true;\n }\n if (multiline) { // multiline\n block = this.yBlock();\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get();\n }\n else {\n throw NakoSyntaxError.fromNode('\u300E\u3053\u3053\u307E\u3067\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u300E\u56DE\u300F...\u300E\u3053\u3053\u307E\u3067\u300F\u3092\u5BFE\u5FDC\u3055\u305B\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n }\n else {\n // singleline\n const b = this.ySentence();\n if (b) {\n block = b;\n }\n }\n return {\n type: 'repeat_times',\n blocks: [num, block],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** @returns {AstWhile | null} */\n yWhile() {\n const map = this.peekSourceMap();\n if (!this.check('\u9593')) {\n return null;\n }\n this.get(); // skip '\u9593'\n while (this.check('comma')) {\n this.get();\n } // skip ','\n if (this.check('\u7E70\u8FD4')) {\n this.get();\n } // skip '\u7E70\u308A\u8FD4\u3059' #927\n const expr = this.popStack();\n if (expr === null) {\n throw NakoSyntaxError.fromNode('\u300E\u9593\u300F\u3067\u6761\u4EF6\u304C\u3042\u308A\u307E\u305B\u3093\u3002', map);\n }\n if (this.check('comma')) {\n this.get();\n }\n if (!this.checkTypes(['\u3053\u3053\u304B\u3089', 'eol'])) {\n throw NakoSyntaxError.fromNode('\u300E\u9593\u300F\u306E\u76F4\u5F8C\u306F\u6539\u884C\u304C\u5FC5\u8981\u3067\u3059', map);\n }\n const block = this.yBlock();\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get();\n }\n else {\n throw NakoSyntaxError.fromNode('\u300E\u3053\u3053\u307E\u3067\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u300E\u9593\u300F...\u300E\u3053\u3053\u307E\u3067\u300F\u3092\u5BFE\u5FDC\u3055\u305B\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n return {\n type: 'while',\n blocks: [expr, block],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** @returns {AstAtohantei | null} */\n yAtohantei() {\n const map = this.peekSourceMap();\n if (this.check('\u5F8C\u5224\u5B9A')) {\n this.get();\n } // skip \u5F8C\u5224\u5B9A\n if (this.check('\u7E70\u8FD4')) {\n this.get();\n } // skip \u7E70\u308A\u8FD4\u3059\n if (this.check('\u3053\u3053\u304B\u3089')) {\n this.get();\n }\n const block = this.yBlock();\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get();\n }\n if (this.check('comma')) {\n this.get();\n }\n let cond = this.yGetArg(); // \u6761\u4EF6\n let bUntil = false;\n const t = this.peek();\n if (t && t.value === '\u306A\u308B' && (t.josi === '\u307E\u3067' || t.josi === '\u307E\u3067\u306E')) {\n this.get(); // skip \u306A\u308B\u307E\u3067\n bUntil = true;\n }\n if (this.check('\u9593')) {\n this.get();\n } // skip \u9593\n if (bUntil) { // \u6761\u4EF6\u3092\u53CD\u8EE2\u3059\u308B\n cond = {\n type: 'not',\n operator: 'not',\n blocks: [cond],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n if (!cond) {\n cond = { type: 'number', value: 1, josi: '', ...map, end: this.peekSourceMap() };\n }\n return {\n type: 'atohantei',\n blocks: [cond, block],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** @returns {AstFor | null} */\n yFor() {\n const errorForArguments = '\u300E\u7E70\u308A\u8FD4\u3059\u300F\u6587\u3067A\u304B\u3089B\u307E\u3067\u306E\u6307\u5B9A\u304C\u3042\u308A\u307E\u305B\u3093\u3002';\n let flagDown = true; // A\u304B\u3089B\u307E\u3067\u306E\u6642\u3001A>=B\u3092\u8A31\u5BB9\u3059\u308B\u304B\u3069\u3046\u304B\n let flagUp = true; // A\u304B\u3089B\u307E\u3067\u306E\u6642\u3001A<=B\u3092\u8A31\u5BB9\u3059\u308B\u304B\u3069\u3046\u304B\n let loopDirection = null; // \u30EB\u30FC\u30D7\u306E\u65B9\u5411\u3092\u4E00\u65B9\u5411\u306B\u9650\u5B9A\u3059\u308B\n const map = this.peekSourceMap();\n if (this.check('\u7E70\u8FD4') || this.check('\u5897\u7E70\u8FD4') || this.check('\u6E1B\u7E70\u8FD4')) {\n // pass\n }\n else {\n return null;\n }\n const kurikaesu = this.getCur(); // skip \u7E70\u308A\u8FD4\u3059\n // \u30B9\u30BF\u30C3\u30AF\u306B(\u5897\u3084|\u6E1B\u3089)\u3057\u3066\u304C\u3042\u308B\uFF1F\n const incdec = this.stack.pop();\n if (incdec) {\n if (incdec.type === 'word' && (incdec.value === '\u5897' || incdec.value === '\u6E1B')) {\n if (incdec.value === '\u5897') {\n flagDown = false;\n }\n else {\n flagUp = false;\n }\n const w = String(incdec.value) + kurikaesu.type;\n if (w === '\u5897\u7E70\u8FD4') {\n kurikaesu.type = '\u5897\u7E70\u8FD4';\n }\n else if (w === '\u6E1B\u7E70\u8FD4') {\n kurikaesu.type = '\u6E1B\u7E70\u8FD4';\n }\n else {\n throw Error('[System Error] \u5897\u7E70\u308A\u8FD4\u3057 | \u6E1B\u7E70\u308A\u8FD4\u3057\u306E\u30A8\u30E9\u30FC\u3002');\n }\n }\n else {\n // \u666E\u901A\u306E\u7E70\u308A\u8FD4\u3057\u306E\u5834\u5408\n this.stack.push(incdec); // \u9055\u3063\u305F\u306E\u3067\u6539\u3081\u3066\u8FFD\u52A0\n }\n }\n let vInc = this.yNop();\n if (kurikaesu.type === '\u5897\u7E70\u8FD4' || kurikaesu.type === '\u6E1B\u7E70\u8FD4') {\n vInc = this.popStack(['\u305A\u3064']) || this.yNop();\n if (kurikaesu.type === '\u5897\u7E70\u8FD4') {\n flagDown = false;\n }\n else {\n flagUp = false;\n }\n loopDirection = kurikaesu.type === '\u5897\u7E70\u8FD4' ? 'up' : 'down';\n }\n const vTo = this.popStack(['\u307E\u3067', '\u3092']); // \u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u5834\u5408\u3082\u3042\u308A\n const vFrom = this.popStack(['\u304B\u3089']) || this.yNop();\n const vWord = this.popStack(['\u3092', '\u3067']);\n let wordStr = '';\n if (vWord !== null) { // \u5909\u6570\n if (vWord.type !== 'word') {\n throw NakoSyntaxError.fromNode('\u300E(\u5909\u6570\u540D)\u3092A\u304B\u3089B\u307E\u3067\u7E70\u308A\u8FD4\u3059\u300F\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002', vWord);\n }\n wordStr = vWord.value;\n }\n if (vFrom === null || vTo === null) {\n // \u300EA\u304B\u3089B\u306E\u7BC4\u56F2\u3092\u7E70\u308A\u8FD4\u3059\u300F\u69CB\u6587\u306E\u3068\u304D (#1704)\n if (vFrom === null && vTo && (vTo.type === 'func' && vTo.name === '\u7BC4\u56F2')) {\n // ok\n }\n else {\n throw NakoSyntaxError.fromNode(errorForArguments, kurikaesu);\n }\n }\n if (this.check('comma')) {\n this.get();\n } // skip comma\n let multiline = false;\n if (this.check('\u3053\u3053\u304B\u3089')) {\n multiline = true;\n this.get();\n }\n else if (this.check('eol')) {\n multiline = true;\n this.get();\n }\n let block = this.yNop();\n if (multiline) {\n block = this.yBlock();\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get();\n }\n else {\n throw NakoSyntaxError.fromNode('\u300E\u3053\u3053\u307E\u3067\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u300E\u7E70\u308A\u8FD4\u3059\u300F...\u300E\u3053\u3053\u307E\u3067\u300F\u3092\u5BFE\u5FDC\u3055\u305B\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n }\n else {\n const b = this.ySentence();\n if (b) {\n block = b;\n }\n }\n if (!block) {\n block = this.yNop();\n }\n return {\n type: 'for',\n blocks: [vFrom, vTo, vInc, block],\n flagDown,\n flagUp,\n loopDirection,\n word: wordStr,\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** @returns {AstBlocks | null} */\n yReturn() {\n const map = this.peekSourceMap();\n if (!this.check('\u623B\u308B')) {\n return null;\n }\n this.get(); // skip '\u623B\u308B'\n const v = this.popStack(['\u3067', '\u3092']) || this.yNop();\n if (this.stack.length > 0) {\n throw NakoSyntaxError.fromNode('\u300E\u623B\u300F\u6587\u306E\u76F4\u524D\u306B\u672A\u89E3\u6C7A\u306E\u5F15\u6570\u304C\u3042\u308A\u307E\u3059\u3002\u300E(\u5F0F)\u3092\u623B\u3059\u300F\u306E\u3088\u3046\u306B\u5F0F\u3092\u30AB\u30C3\u30B3\u3067\u62EC\u3063\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n return {\n type: 'return',\n blocks: [v],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** @returns {AstForeach | null} */\n yForEach() {\n const map = this.peekSourceMap();\n if (!this.check('\u53CD\u5FA9')) {\n return null;\n }\n this.get(); // skip '\u53CD\u5FA9'\n while (this.check('comma')) {\n this.get();\n } // skip ','\n const target = this.popStack(['\u3092']) || this.yNop();\n // target == null \u306A\u3089\u300C\u305D\u308C\u300D\u306E\u5024\u304C\u4F7F\u308F\u308C\u308B\n const name = this.popStack(['\u3067']);\n let wordStr = '';\n if (name !== null) {\n if (name.type !== 'word') {\n throw NakoSyntaxError.fromNode('\u300E(\u5909\u6570\u540D)\u3067(\u914D\u5217)\u3092\u53CD\u5FA9\u300F\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n wordStr = name.value;\n }\n let block = this.yNop();\n let multiline = false;\n if (this.check('\u3053\u3053\u304B\u3089')) {\n multiline = true;\n this.get();\n }\n else if (this.check('eol')) {\n multiline = true;\n }\n if (multiline) {\n block = this.yBlock();\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get();\n }\n else {\n throw NakoSyntaxError.fromNode('\u300E\u3053\u3053\u307E\u3067\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u300E\u53CD\u5FA9\u300F...\u300E\u3053\u3053\u307E\u3067\u300F\u3092\u5BFE\u5FDC\u3055\u305B\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n }\n else {\n const b = this.ySentence();\n if (b) {\n block = b;\n }\n }\n return {\n type: 'foreach',\n word: wordStr,\n blocks: [target, block],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** \u6761\u4EF6\u5206\u5C90\u69CB\u6587\n * @returns {AstSwitch | null}\n */\n ySwitch() {\n const map = this.peekSourceMap();\n if (!this.check('\u6761\u4EF6\u5206\u5C90')) {\n return null;\n }\n const joukenbunki = this.get(); // skip '\u6761\u4EF6\u5206\u5C90'\n if (!joukenbunki) {\n return null;\n }\n const eol = this.get(); // skip 'eol'\n if (!eol) {\n return null;\n }\n const expr = this.popStack(['\u3067']);\n if (!expr) {\n throw NakoSyntaxError.fromNode('\u300E(\u5024)\u3067\u6761\u4EF6\u5206\u5C90\u300F\u306E\u3088\u3046\u306B\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002', joukenbunki);\n }\n if (eol.type !== 'eol') {\n throw NakoSyntaxError.fromNode('\u300E\u6761\u4EF6\u5206\u5C90\u300F\u306E\u76F4\u5F8C\u306F\u6539\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002', joukenbunki);\n }\n //\n const blocks = [];\n blocks[0] = expr;\n blocks[1] = this.yNop(); // \u5F8C\u3067 default \u306EAst\u3092\u518D\u8A2D\u5B9A\u3059\u308B\u305F\u3081\n //\n while (!this.isEOF()) {\n if (this.check('eol')) {\n this.get();\n continue;\n }\n // \u3053\u3053\u307E\u3067\uFF1F\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get(); // skip \u3053\u3053\u307E\u3067\n break;\n }\n // \u9055\u3048\u3070\uFF1F\n const condToken = this.peek();\n if (condToken && condToken.type === '\u9055\u3048\u3070') {\n this.get(); // skip \u9055\u3048\u3070\n if (this.check('comma')) {\n this.get();\n } // skip ','\n const defaultBlock = this.yBlock();\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get(); // skip \u3053\u3053\u307E\u3067 (\u9055\u3048\u3070\u3068\u30DA\u30A2)\n }\n while (this.check('eol')) {\n this.get();\n } // skip eol\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get(); // skip \u3053\u3053\u307E\u3067 (\u6761\u4EF6\u5206\u5C90\uFF1A\u3053\u3053\u307E\u3067)\n }\n blocks[1] = defaultBlock;\n break;\n }\n // \u901A\u5E38\u306E\u6761\u4EF6\n const cond = this.yValue();\n if (!cond) {\n throw NakoSyntaxError.fromNode('\u300E\u6761\u4EF6\u5206\u5C90\u300F\u306F\u300E(\u6761\u4EF6)\u306A\u3089\u3070\u301C\u3053\u3053\u307E\u3067\u300F\u3068\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002', joukenbunki);\n }\n const naraba = this.get(); // skip \u306A\u3089\u3070\n if (!naraba || naraba.type !== '\u306A\u3089\u3070') {\n throw NakoSyntaxError.fromNode('\u300E\u6761\u4EF6\u5206\u5C90\u300F\u3067\u6761\u4EF6\u306F\uFF0A\uFF0A\u306A\u3089\u3070\u3068\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002', joukenbunki);\n }\n if (this.check('comma')) {\n this.get();\n } // skip ','\n // \u6761\u4EF6\u306B\u3042\u3063\u305F\u3068\u304D\u306B\u5B9F\u884C\u3059\u308B\u3053\u3068\n const condBlock = this.yBlock();\n const kokomade = this.peek();\n if (kokomade && kokomade.type === '\u3053\u3053\u307E\u3067') {\n this.get(); // skip \u3053\u3053\u307E\u3067\n }\n blocks.push(cond);\n blocks.push(condBlock);\n }\n const ast = {\n type: 'switch',\n blocks,\n case_count: blocks.length / 2 - 1,\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n return ast;\n }\n /** \u7121\u540D\u95A2\u6570\n * @returns {AstDefFunc|null}\n */\n yMumeiFunc() {\n const map = this.peekSourceMap();\n if (!this.check('def_func')) {\n return null;\n }\n const defToken = this.get();\n if (!defToken) {\n return null;\n }\n const def = defToken;\n let args = [];\n // \u300C,\u300D\u3092\u98DB\u3070\u3059\n if (this.check('comma')) {\n this.get();\n }\n // \u95A2\u6570\u306E\u5F15\u6570\u5B9A\u7FA9\u306F\u7701\u7565\u3067\u304D\u308B\n if (this.check('(')) {\n args = this.yDefFuncReadArgs() || [];\n }\n // \u300C,\u300D\u3092\u98DB\u3070\u3059\n if (this.check('comma')) {\n this.get();\n }\n // \u30D6\u30ED\u30C3\u30AF\u3092\u8AAD\u3080\n let block = this.yNop();\n let isAsyncFn = false;\n this.funcLevel++;\n this.saveStack();\n const backupAsyncFn = this.usedAsyncFn;\n this.usedAsyncFn = false;\n // \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092\u751F\u6210 (#1746)\n const backupLocalvars = this.localvars;\n this.localvars = new Map([['\u305D\u308C', { type: 'var', value: '' }]]);\n // \u95A2\u6570\u306E\u5F15\u6570\u3092\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3068\u3057\u3066\u767B\u9332\u3059\u308B\n for (const arg of args) {\n if (!arg) {\n continue;\n }\n if (!arg.value) {\n continue;\n }\n const fnName = arg.value;\n this.localvars.set(fnName, { 'type': 'var', 'value': '' });\n }\n try {\n block = this.yBlock();\n isAsyncFn = this.usedAsyncFn;\n // \u672B\u5C3E\u306E\u300C\u3053\u3053\u307E\u3067\u300D\u3092\u30C1\u30A7\u30C3\u30AF - \u3082\u3057\u306A\u3051\u308C\u3070\u30A8\u30E9\u30FC\u306B\u3059\u308B #1045\n if (!this.check('\u3053\u3053\u307E\u3067')) {\n throw NakoSyntaxError.fromNode('\u300E\u3053\u3053\u307E\u3067\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u300E\u306B\u306F\u300F\u69CB\u6587\u304B\u7121\u540D\u95A2\u6570\u306E\u672B\u5C3E\u306B\u300E\u3053\u3053\u307E\u3067\u300F\u304C\u5FC5\u8981\u3067\u3059\u3002', map);\n }\n this.get(); // skip \u3053\u3053\u307E\u3067\n }\n finally {\n this.loadStack();\n this.usedAsyncFn = backupAsyncFn;\n this.localvars = backupLocalvars;\n this.funcLevel--;\n }\n return {\n type: 'func_obj',\n name: '',\n args,\n blocks: [block],\n meta: def.meta,\n josi: '',\n isExport: false, // \u7121\u540D\u95A2\u6570\u306F\u5916\u90E8\u516C\u958B\u3057\u306A\u3044\n asyncFn: isAsyncFn, // asyncFn\u304B\u3069\u3046\u304B\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** \u4EE3\u5165\u69CB\u6587 */\n yDainyu() {\n const map = this.peekSourceMap();\n const dainyu = this.get(); // \u4EE3\u5165\n if (dainyu === null) {\n return null;\n }\n const value = this.popStack(['\u3092']) || { type: 'word', value: '\u305D\u308C', josi: '\u3092', ...map };\n const word = this.popStack(['\u3078', '\u306B']);\n if (!word || (word.type !== 'word' && word.type !== 'func' && word.type !== 'ref_array')) {\n throw NakoSyntaxError.fromNode('\u4EE3\u5165\u6587\u3067\u4EE3\u5165\u5148\u306E\u5909\u6570\u304C\u898B\u5F53\u305F\u308A\u307E\u305B\u3093\u3002\u300E(\u5909\u6570\u540D)\u306B(\u5024)\u3092\u4EE3\u5165\u300F\u306E\u3088\u3046\u306B\u4F7F\u3044\u307E\u3059\u3002', dainyu);\n }\n if (word.type === 'func') {\n throw NakoSyntaxError.fromNode('\u95A2\u6570\u300E' + String(word.name) + '\u300F\u306B\u4EE3\u5165\u3067\u304D\u307E\u305B\u3093\u3002\u300E(\u5909\u6570\u540D)\u306B(\u5024)\u3092\u4EE3\u5165\u300F\u306E\u3088\u3046\u306B\u4F7F\u3044\u307E\u3059\u3002', dainyu);\n }\n // \u914D\u5217\u3078\u306E\u4EE3\u5165\n if (word.type === 'ref_array') {\n const indexArray = word.index || [];\n const blocks = [value, ...indexArray];\n return {\n type: 'let_array',\n name: word.name.value,\n indexes: word.index,\n blocks,\n josi: '',\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E00\u822C\u7684\u306A\u5909\u6570\u3078\u306E\u4EE3\u5165\n const word2 = this.getVarName(word);\n return {\n type: 'let',\n name: word2.value,\n blocks: [value],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** \u5B9A\u3081\u308B\u69CB\u6587 */\n ySadameru() {\n const map = this.peekSourceMap();\n const sadameru = this.get(); // \u5B9A\u3081\u308B\n if (sadameru === null) {\n return null;\n }\n // \u5F15\u6570(\u5B9A\u6570\u540D)\u3092\u53D6\u5F97\n const word = this.popStack(['\u3092']) || { type: 'word', value: '\u305D\u308C', josi: '\u3092', ...map, end: this.peekSourceMap() };\n if (!word || (word.type !== 'word' && word.type !== 'func' && word.type !== 'ref_array')) {\n throw NakoSyntaxError.fromNode('\u300E\u5B9A\u3081\u308B\u300F\u6587\u3067\u5B9A\u6570\u304C\u898B\u5F53\u305F\u308A\u307E\u305B\u3093\u3002\u300E(\u5B9A\u6570\u540D)\u3092(\u5024)\u306B\u5B9A\u3081\u308B\u300F\u306E\u3088\u3046\u306B\u4F7F\u3044\u307E\u3059\u3002', sadameru);\n }\n // \u5F15\u6570(\u5024)\u3092\u53D6\u5F97\n const value = this.popStack(['\u3078', '\u306B', '\u3068']) || this.yNop();\n // \u516C\u958B\u8A2D\u5B9A\n let isExport = this.isExportDefault;\n if (this.check2(['{', 'word', '}'])) {\n this.get();\n const attrNode = this.get();\n if (attrNode === null) {\n throw NakoSyntaxError.fromNode('\u5B9A\u3081\u308B\u300E' + word.value + '\u300F\u306E\u5B9A\u7FA9\u30A8\u30E9\u30FC', word);\n }\n const attr = attrNode.value;\n if (attr === '\u516C\u958B') {\n isExport = true;\n }\n else if (attr === '\u975E\u516C\u958B') {\n isExport = false;\n }\n else if (attr === '\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8') {\n isExport = true;\n }\n else {\n this.logger.warn(`\u4E0D\u660E\u306A\u5909\u6570\u5C5E\u6027\u300E${attr}\u300F\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002`);\n }\n this.get();\n }\n // \u5909\u6570\u3092\u751F\u6210\u3059\u308B\n const nameToken = this.createVar(word, true, isExport);\n return {\n type: 'def_local_var',\n name: nameToken.value,\n vartype: '\u5B9A\u6570',\n isExport,\n blocks: [value],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n yIncDec() {\n const map = this.peekSourceMap();\n const action = this.get(); // (\u5897\u3084\u3059|\u6E1B\u3089\u3059)\n if (action === null) {\n return null;\n }\n // \u300EN\u305A\u3064\u5897\u3084\u3057\u3066\u7E70\u308A\u8FD4\u3059\u300F\u6587\u304B\uFF1F\n if (this.check('\u7E70\u8FD4')) {\n this.pushStack({ type: 'word', value: action.value, josi: action.josi, ...map, end: this.peekSourceMap() });\n return this.yFor();\n }\n // \u30B9\u30BF\u30C3\u30AF\u304B\u3089\u5F15\u6570\u3092\u30DD\u30C3\u30D7\n const word = this.popStack(['\u3092']);\n if (!word || (word.type !== 'word' && word.type !== 'ref_array' && word.type !== 'ref_prop')) {\n throw NakoSyntaxError.fromNode(`\u300E${action.type}\u300F\u6587\u3067\u5B9A\u6570\u304C\u898B\u5F53\u305F\u308A\u307E\u305B\u3093\u3002\u300E(\u5909\u6570\u540D)\u3092(\u5024)\u3060\u3051${action.type}\u300F\u306E\u3088\u3046\u306B\u4F7F\u3044\u307E\u3059\u3002`, action);\n }\n let value = this.popStack(['\u3060\u3051', '']);\n if (!value) {\n value = { type: 'number', value: 1, josi: '\u3060\u3051', ...map, end: this.peekSourceMap() };\n }\n // \u6E1B\u3089\u3059\u306A\u3089-1\u304B\u3051\u308B\n if (action.value === '\u6E1B') {\n const minusOne = { type: 'number', value: -1, line: action.line };\n value = { type: 'op', operator: '*', blocks: [value, minusOne], josi: '', ...map };\n }\n return {\n type: 'inc',\n name: word,\n blocks: [value],\n josi: action.josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n yCall() {\n if (this.isEOF()) {\n return null;\n }\n // \u30B9\u30BF\u30C3\u30AF\u306B\u7A4D\u3093\u3067\u3044\u304F\n while (!this.isEOF()) {\n if (this.check('\u3053\u3053\u304B\u3089')) {\n this.get();\n }\n // \u4EE3\u5165\n if (this.check('\u4EE3\u5165')) {\n return this.yDainyu();\n }\n if (this.check('\u5B9A\u3081\u308B')) {\n return this.ySadameru();\n }\n // \u5236\u5FA1\u69CB\u6587\n if (this.check('\u56DE')) {\n return this.yRepeatTime();\n }\n if (this.check('\u9593')) {\n return this.yWhile();\n }\n if (this.check('\u7E70\u8FD4') || this.check('\u5897\u7E70\u8FD4') || this.check('\u6E1B\u7E70\u8FD4')) {\n return this.yFor();\n }\n if (this.check('\u53CD\u5FA9')) {\n return this.yForEach();\n }\n if (this.check('\u6761\u4EF6\u5206\u5C90')) {\n return this.ySwitch();\n }\n if (this.check('\u623B\u308B')) {\n return this.yReturn();\n }\n if (this.check('\u5897') || this.check('\u6E1B')) {\n return this.yIncDec();\n }\n // C\u8A00\u8A9E\u98A8\u95A2\u6570\n if (this.check2([['func', 'word'], '('])) { // C\u8A00\u8A9E\u98A8\n const cur = this.peek();\n if (cur && cur.josi === '') {\n const t = this.yValue(); // yValue\u306B\u3066C\u8A00\u8A9E\u98A8\u547C\u3073\u51FA\u3057\u3092\u30D1\u30FC\u30B9\n if (t) {\n const josi = t.josi || '';\n if (t.type === 'func' && (t.josi === '' || RenbunJosi.indexOf(josi) >= 0)) {\n t.josi = '';\n return t; // \u95A2\u6570\u306A\u3089\u5024\u3068\u3059\u308B\n }\n this.pushStack(t);\n }\n if (this.check('comma')) {\n this.get();\n }\n continue;\n }\n }\n // \u306A\u3067\u3057\u3053\u5F0F\u95A2\u6570\n if (this.check('func')) {\n const r = this.yCallFunc();\n if (r === null) {\n continue;\n }\n // \u300C\u301C\u3059\u308B\u9593\u300D\u306E\u5F62\u306A\u3089\u30B9\u30BF\u30C3\u30AF\u306B\u7A4D\u3080\u3002\n if (this.check('\u9593')) {\n this.pushStack(r);\n continue;\n }\n // \u95A2\u6570\u547C\u3073\u51FA\u3057\u306E\u76F4\u5F8C\u306B\u3001\u56DB\u5247\u6F14\u7B97\u304C\u3042\u308B\u304B?\n if (!this.checkTypes(operatorList)) {\n return r; // \u95A2\u6570\u547C\u3073\u51FA\u3057\u306E\u5F8C\u306B\u6F14\u7B97\u5B50\u304C\u306A\u3044\u306E\u3067\u305D\u306E\u307E\u307E\u95A2\u6570\u547C\u3073\u51FA\u3057\u3092\u623B\u3059\n }\n // \u56DB\u5247\u6F14\u7B97\u304C\u3042\u3063\u305F\u5834\u5408\u3001\u8A08\u7B97\u3057\u3066\u30B9\u30BF\u30C3\u30AF\u306B\u8F09\u305B\u308B\n const s = this.yGetArgOperator(r);\n this.pushStack(s);\n continue;\n }\n // \u5024\u306E\u3068\u304D \u2192 \u30B9\u30BF\u30C3\u30AF\u306B\u8F09\u305B\u308B\n const t = this.yGetArg();\n if (t) {\n this.pushStack(t);\n continue;\n }\n break;\n } // end of while\n // \u52A9\u8A5E\u304C\u4F59\u3063\u3066\u3057\u307E\u3063\u305F\u5834\u5408\n if (this.stack.length > 0) {\n if (this.isReadingCalc) {\n return this.popStack();\n }\n this.logger.debug('--- stack dump ---\\n' + JSON.stringify(this.stack, null, 2) + '\\npeek: ' + JSON.stringify(this.peek(), null, 2));\n let msgDebug = `\u4E0D\u5B8C\u5168\u306A\u6587\u3067\u3059\u3002${this.stack.map((n) => this.nodeToStr(n, { depth: 0 }, true)).join('\u3001')}\u304C\u89E3\u6C7A\u3057\u3066\u3044\u307E\u305B\u3093\u3002`;\n let msg = `\u4E0D\u5B8C\u5168\u306A\u6587\u3067\u3059\u3002${this.stack.map((n) => this.nodeToStr(n, { depth: 0 }, false)).join('\u3001')}\u304C\u89E3\u6C7A\u3057\u3066\u3044\u307E\u305B\u3093\u3002`;\n // \u5404\u30CE\u30FC\u30C9\u306B\u3064\u3044\u3066\u3001\u66F4\u306B\u8A73\u7D30\u306A\u60C5\u5831\u304C\u3042\u308B\u306A\u3089\u8868\u793A\n for (const n of this.stack) {\n const d0 = this.nodeToStr(n, { depth: 0 }, false);\n const d1 = this.nodeToStr(n, { depth: 1 }, false);\n if (d0 !== d1) {\n msgDebug += `${this.nodeToStr(n, { depth: 0 }, true)}\u306F${this.nodeToStr(n, { depth: 1 }, true)}\u3068\u3057\u3066\u4F7F\u308F\u308C\u3066\u3044\u307E\u3059\u3002`;\n msg += `${d0}\u306F${d1}\u3068\u3057\u3066\u4F7F\u308F\u308C\u3066\u3044\u307E\u3059\u3002`;\n }\n }\n const first = this.stack[0];\n const last = this.stack[this.stack.length - 1];\n this.logger.debug(msgDebug, first);\n throw NakoSyntaxError.fromNode(msg, first, last);\n }\n return this.popStack([]);\n }\n /** @returns {Ast | null} */\n yCallFunc() {\n const map = this.peekSourceMap();\n const callToken = this.get();\n if (!callToken) {\n return null;\n }\n const t = callToken;\n const f = t.meta;\n const funcName = t.value;\n // (\u95A2\u6570)\u306B\u306F ... \u69CB\u6587 ... https://github.com/kujirahand/nadesiko3/issues/66\n let funcObj = null;\n if (t.josi === '\u306B\u306F') {\n try {\n funcObj = this.yMumeiFunc();\n }\n catch (err) {\n throw NakoSyntaxError.fromNode(`\u300E${t.value}\u306B\u306F...\u300F\u3067\u7121\u540D\u95A2\u6570\u306E\u5B9A\u7FA9\u3067\u4EE5\u4E0B\u306E\u9593\u9055\u3044\u304C\u3042\u308A\u307E\u3059\u3002\\n${err.message}`, t);\n }\n if (funcObj === null) {\n throw NakoSyntaxError.fromNode('\u300EF\u306B\u306F\u300F\u69CB\u6587\u304C\u3042\u308A\u307E\u3057\u305F\u304C\u3001\u95A2\u6570\u5B9A\u7FA9\u304C\u898B\u5F53\u305F\u308A\u307E\u305B\u3093\u3002', t);\n }\n }\n if (!f || typeof f.josi === 'undefined') {\n throw NakoSyntaxError.fromNode('\u95A2\u6570\u306E\u5B9A\u7FA9\u3067\u30A8\u30E9\u30FC\u3002', t);\n }\n // \u6700\u8FD1\u4F7F\u3063\u305F\u95A2\u6570\u3092\u8A18\u9332\n this.recentlyCalledFunc.push({ name: funcName, ...f });\n // \u547C\u3073\u51FA\u3059\u95A2\u6570\u304C\u975E\u540C\u671F\u547C\u3073\u51FA\u3057\u304C\u5FC5\u8981(asyncFn)\u306A\u3089\u30DE\u30FC\u30AF\n if (f && f.asyncFn) {\n this.usedAsyncFn = true;\n }\n // \u95A2\u6570\u306E\u5F15\u6570\u3092\u53D6\u308A\u51FA\u3059\u51E6\u7406\n const args = [];\n let nullCount = 0;\n let valueCount = 0;\n for (let i = f.josi.length - 1; i >= 0; i--) {\n for (;;) {\n // \u30B9\u30BF\u30C3\u30AF\u304B\u3089\u4EFB\u610F\u306E\u52A9\u8A5E\u3092\u6301\u3064\u5024\u3092\u4E00\u3064\u53D6\u308A\u51FA\u3059\u3001\u52A9\u8A5E\u304C\u306A\u3051\u308C\u3070\u672B\u5C3E\u304B\u3089\u5F97\u308B\n let popArg = this.popStack(f.josi[i]);\n if (popArg !== null) {\n valueCount++;\n }\n else if (i < f.josi.length - 1 || !f.isVariableJosi) {\n nullCount++;\n popArg = funcObj;\n }\n else {\n break;\n }\n // \u53C2\u7167\u6E21\u3057\u306E\u5834\u5408\u3001\u5F15\u6570\u304C\u95A2\u6570\u306E\u53C2\u7167\u6E21\u3057\u306B\u8A72\u5F53\u3059\u308B\u5834\u5408\u3001type\u3092\u300Efunc_pointer\u300F\u306B\u5909\u66F4\n if (popArg !== null && f.funcPointers !== undefined && f.funcPointers[i] !== null) {\n if (popArg.type === 'func') { // \u5F15\u6570\u304C\u95A2\u6570\u306E\u53C2\u7167\u6E21\u3057\u306B\u8A72\u5F53\u3059\u308B\u5834\u5408\n popArg.type = 'func_pointer';\n }\n else {\n const varname = (f.varnames) ? f.varnames[i] : `${i + 1}\u756A\u76EE\u306E\u5F15\u6570`;\n throw NakoSyntaxError.fromNode(`\u95A2\u6570\u300E${t.value}\u300F\u306E\u5F15\u6570\u300E${varname}\u300F\u306B\u306F\u95A2\u6570\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u304C\u5FC5\u8981\u3067\u3059\u3002`, t);\n }\n }\n // \u5F15\u6570\u304Cnull\u3067\u3042\u308C\u3070\u3001\u81EA\u52D5\u7684\u306B\u300E\u5909\u6570\u300C\u305D\u308C\u300D\u300F\u3067\u88DC\u5B8C\u3059\u308B\n if (popArg === null) {\n popArg = { type: 'word', value: '\u305D\u308C', josi: '', ...map, end: map };\n }\n args.unshift(popArg); // \u5148\u982D\u306B\u8FFD\u52A0\n if (i < f.josi.length - 1 || !f.isVariableJosi) {\n break;\n }\n }\n }\n // \u5F15\u6570\u304C\u4E0D\u8DB3\u3057\u3066\u3044\u308B\u3068\u304D(\u3064\u307E\u308A\u3001\u5F15\u6570\u306Bnull\u304C\u3042\u308B\u3068\u304D)\u3001\u81EA\u52D5\u7684\u306B\u300E\u5909\u6570\u300C\u305D\u308C\u300D\u300F\u3067\u88DC\u5B8C\u3055\u308C\u308B\u3002\n // \u305F\u3060\u3057\u3001null\u304C1\u3064\u3060\u3051\u306A\u3089\u3001\u5909\u6570\u300C\u305D\u308C\u300D\u3067\u88DC\u5B8C\u3055\u308C\u308B\u304C\u30012\u3064\u4EE5\u4E0A\u3042\u308B\u3068\u304D\u306F\u3001\u30A8\u30E9\u30FC\u306B\u3059\u308B\n if (nullCount >= 2 && (valueCount > 0 || t.josi === '' || RenbunJosi.indexOf(t.josi) >= 0)) {\n throw NakoSyntaxError.fromNode(`\u95A2\u6570\u300E${t.value}\u300F\u306E\u5F15\u6570\u304C\u4E0D\u8DB3\u3057\u3066\u3044\u307E\u3059\u3002`, t);\n }\n this.usedFuncs.add(t.value);\n // \u95A2\u6570\u547C\u3073\u51FA\u3057\u306EAst\u3092\u69CB\u7BC9\n const funcNode = {\n type: 'func',\n name: t.value,\n blocks: args,\n meta: f,\n josi: t.josi,\n asyncFn: !!f.asyncFn,\n ...map,\n end: this.peekSourceMap()\n };\n // \u300C\u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u8A2D\u5B9A\u300D\u306A\u3089\u3070\u3001\u305D\u3053\u3067\u30B9\u30B3\u30FC\u30D7\u3092\u5909\u66F4\u3059\u308B\u3053\u3068\u3092\u610F\u5473\u3059\u308B (#1112)\n if (funcNode.name === '\u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u8A2D\u5B9A') {\n if (args.length > 0 && args[0]) {\n let fname = String(args[0].value);\n if (fname === '\u30E1\u30A4\u30F3') {\n fname = String(args[0].file);\n }\n this.namespaceStack.push(this.modName);\n this.isExportStack.push(this.isExportDefault);\n this.modName = NakoLexer.filenameToModName(fname);\n this.modList.push(this.modName);\n }\n }\n else if (funcNode.name === '\u540D\u524D\u7A7A\u9593\u30DD\u30C3\u30D7') { // (#1409)\n const space = this.namespaceStack.pop();\n if (space) {\n this.modName = space;\n }\n const isexport = this.isExportStack.pop();\n if (isexport !== null && isexport !== undefined) {\n this.isExportDefault = isexport;\n }\n }\n // \u8A00\u3044\u5207\u308A\u306A\u3089\u305D\u3053\u3067\u4E00\u5EA6\u5207\u308B\n if (t.josi === '') {\n return funcNode;\n }\n // \u300C**\u3057\u3066\u3001**\u300D\u306E\u5834\u5408\u3082\u4E00\u5EA6\u5207\u308B\n if (RenbunJosi.indexOf(t.josi) >= 0) {\n funcNode.josi = (this.isReadingCalc && t.josi === '\u306B\u306F') ? '' : '\u3057\u3066';\n return funcNode;\n }\n // \u7D9A\u304D\n funcNode.meta = f;\n this.pushStack(funcNode);\n return null;\n }\n /** @returns {Ast | null} */\n yLet() {\n const map = this.peekSourceMap();\n // \u901A\u5E38\u306E\u5909\u6570\n if (this.check2(['word', 'eq'])) {\n const word = this.peek();\n let expectedError = false;\n try {\n if (this.accept(['word', 'eq', this.yCalc]) || this.accept(['word', 'eq', this.ySentence])) {\n if (this.y[2].type === 'eol') {\n throw new Error('\u5024\u304C\u7A7A\u3067\u3059\u3002');\n }\n if (this.check('comma')) {\n this.get();\n } // skip comma (ex) name1=val1, name2=val2\n const nameToken = this.getVarName(this.y[0]);\n const valueToken = this.y[2];\n return {\n type: 'let',\n name: nameToken.value,\n blocks: [valueToken],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n else {\n expectedError = true;\n this.logger.debug(`${this.nodeToStr(word, { depth: 1 }, true)}\u3078\u306E\u4EE3\u5165\u6587\u3067\u8A08\u7B97\u5F0F\u306B\u66F8\u304D\u9593\u9055\u3044\u304C\u3042\u308A\u307E\u3059\u3002`, word);\n throw NakoSyntaxError.fromNode(`${this.nodeToStr(word, { depth: 1 }, false)}\u3078\u306E\u4EE3\u5165\u6587\u3067\u8A08\u7B97\u5F0F\u306B\u66F8\u304D\u9593\u9055\u3044\u304C\u3042\u308A\u307E\u3059\u3002`, map);\n }\n }\n catch (err) {\n if (expectedError) {\n throw err;\n }\n this.logger.debug(`${this.nodeToStr(word, { depth: 1 }, true)}\u3078\u306E\u4EE3\u5165\u6587\u3067\u8A08\u7B97\u5F0F\u306B\u4EE5\u4E0B\u306E\u66F8\u304D\u9593\u9055\u3044\u304C\u3042\u308A\u307E\u3059\u3002\\n${err.message}`, word);\n throw NakoSyntaxError.fromNode(`${this.nodeToStr(word, { depth: 1 }, false)}\u3078\u306E\u4EE3\u5165\u6587\u3067\u8A08\u7B97\u5F0F\u306B\u4EE5\u4E0B\u306E\u66F8\u304D\u9593\u9055\u3044\u304C\u3042\u308A\u307E\u3059\u3002\\n${err.message}`, map);\n }\n }\n // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u69CB\u6587\uFF1A\u4EE3\u5165\u6587\uFF1A\uFF1A\u3053\u3053\u304B\u3089 (#1793)\n if (this.check2(['word', '$', '*', '$', '*', '$', '*', '$', '*', 'eq']) || this.check2(['word', '$', '*', '$', '*', '$', '*', 'eq']) || this.check2(['word', '$', '*', '$', '*', 'eq']) || this.check2(['word', '$', '*', 'eq'])) {\n const propList = [];\n const word = this.getVarName(this.get());\n for (;;) {\n const flag = this.peek();\n if (flag === null || flag.type !== '$') {\n break;\n }\n this.get(); // skip $\n propList.push(this.get()); // property\n }\n this.get(); // skip eq\n const valueToken = this.yCalc(); // calc\n if (valueToken === null) {\n throw NakoSyntaxError.fromNode(`${this.nodeToStr(word, { depth: 1 }, false)}\u3078\u306E\u4EE3\u5165\u6587\u306E\u8A08\u7B97\u5F0F\u306B\u66F8\u304D\u9593\u9055\u3044\u304C\u3042\u308A\u307E\u3059\u3002`, map);\n }\n return {\n type: 'let_prop',\n name: word.value,\n index: propList,\n blocks: [valueToken],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u69CB\u6587\uFF1A\u4EE3\u5165\u6587\uFF1A\uFF1A\u3053\u3053\u307E\u3067\n // let_array ?\n if (this.check2(['word', '@'])) {\n const la = this.yLetArrayAt(map);\n if (this.check('comma')) {\n this.get();\n } // skip comma (ex) name1=val1, name2=val2\n if (la) {\n la.checkInit = this.flagCheckArrayInit;\n return la;\n }\n }\n if (this.check2(['word', '['])) {\n const lb = this.yLetArrayBracket(map);\n if (this.check('comma')) {\n this.get();\n } // skip comma (ex) name1=val1, name2=val2\n if (lb) {\n lb.checkInit = this.flagCheckArrayInit;\n return lb;\n }\n }\n // \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u5B9A\u7FA9\n if (this.accept(['word', '\u3068\u306F'])) {\n const wordToken = this.y[0];\n if (!this.checkTypes(['\u5909\u6570', '\u5B9A\u6570'])) {\n throw NakoSyntaxError.fromNode('\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u300E' + String(wordToken.value) + '\u300F\u306E\u5B9A\u7FA9\u30A8\u30E9\u30FC', wordToken);\n }\n const vtype = this.getCur(); // \u5909\u6570 or \u5B9A\u6570\n let isExport = this.isExportDefault;\n if (this.check2(['{', 'word', '}'])) {\n this.get();\n const attrNode = this.get();\n if (attrNode === null) {\n throw NakoSyntaxError.fromNode('\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u300E' + String(wordToken.value) + '\u300F\u306E\u5B9A\u7FA9\u30A8\u30E9\u30FC', wordToken);\n }\n const attr = attrNode.value;\n if (attr === '\u516C\u958B') {\n isExport = true;\n }\n else if (attr === '\u975E\u516C\u958B') {\n isExport = false;\n }\n else if (attr === '\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8') {\n isExport = true;\n }\n else {\n this.logger.warn(`\u4E0D\u660E\u306A\u5909\u6570\u5C5E\u6027\u300E${attr}\u300F\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002`);\n }\n this.get();\n }\n const word = this.createVar(wordToken, vtype.type === '\u5B9A\u6570', isExport);\n // \u521D\u671F\u5024\u304C\u3042\u308B\uFF1F\n let value = this.yNop();\n if (this.check('eq')) {\n this.get(); // skip '='\n value = this.yCalc() || value;\n }\n if (this.check('comma')) {\n this.get();\n } // skip comma (ex) name1=val1, name2=val2\n return {\n type: 'def_local_var',\n name: word.value,\n vartype: vtype.type,\n isExport,\n blocks: [value],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u5B9A\u7FA9\uFF08\u305D\u306E\uFF12\uFF09\n if (this.accept(['\u5909\u6570', 'word'])) {\n const wordVar = this.y[1];\n this.index -= 2; // \u300C\u5909\u6570 word\u300D\u306E\u524D\u306B\u5DFB\u304D\u623B\u3059\n // \u5909\u6570\u306E\u5BA3\u8A00\u304A\u3088\u3073\u521D\u671F\u53161\n if (this.accept(['\u5909\u6570', 'word', 'eq', this.yCalc])) {\n const word = this.createVar(this.y[1], false, this.isExportDefault);\n const astValue = this.y[3] || this.yNop();\n return {\n type: 'def_local_var',\n name: word.value,\n vartype: '\u5909\u6570',\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u5909\u6570\u306E\u5BA3\u8A00\u304A\u3088\u3073\u521D\u671F\u53162\n if (this.accept(['\u5909\u6570', 'word', '{', 'word', '}', 'eq', this.yCalc])) {\n let isExport = this.isExportDefault;\n const attr = this.y[3].value;\n if (attr === '\u516C\u958B') {\n isExport = true;\n }\n else if (attr === '\u975E\u516C\u958B') {\n isExport = false;\n }\n else if (attr === '\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8') {\n isExport = true;\n }\n else {\n this.logger.warn(`\u4E0D\u660E\u306A\u5909\u6570\u5C5E\u6027\u300E${attr}\u300F\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002`);\n }\n const word = this.createVar(this.y[1], false, isExport);\n const astValue = this.y[6] || this.yNop();\n return {\n type: 'def_local_var',\n name: word.value,\n vartype: '\u5909\u6570',\n isExport,\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u5909\u6570\u5BA3\u8A00\u306E\u307F\u306E\u5834\u5408\n {\n this.index += 2; // \u5909\u6570 word \u3092\u8AAD\u3093\u3060\u3068\u3059\u308B\n const word = this.createVar(wordVar, false, this.isExportDefault);\n return {\n type: 'def_local_var',\n name: word.value,\n vartype: '\u5909\u6570',\n blocks: [this.yNop()],\n ...map,\n end: this.peekSourceMap()\n };\n }\n }\n if (this.accept(['\u5B9A\u6570', 'word', 'eq'])) {\n const constName = this.y[1];\n const word = this.createVar(constName, true, this.isExportDefault);\n const astValue = this.yCalc() || this.yNop();\n return {\n type: 'def_local_var',\n name: word.value,\n vartype: '\u5B9A\u6570',\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n if (this.accept(['\u5B9A\u6570', 'word', '{', 'word', '}', 'eq'])) {\n let isExport = this.isExportDefault;\n const attr = this.y[3].value;\n if (attr === '\u516C\u958B') {\n isExport = true;\n }\n else if (attr === '\u975E\u516C\u958B') {\n isExport = false;\n }\n else if (attr === '\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8') {\n isExport = true;\n }\n else {\n this.logger.warn(`\u4E0D\u660E\u306A\u5B9A\u6570\u5C5E\u6027\u300E${attr}\u300F\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002`);\n }\n const word = this.createVar(this.y[1], true, isExport);\n const astValue = this.yCalc() || this.yNop();\n return {\n type: 'def_local_var',\n name: word.value,\n vartype: '\u5B9A\u6570',\n isExport,\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u8907\u6570\u5B9A\u6570\u3078\u306E\u4EE3\u5165 #563\n if (this.accept(['\u5B9A\u6570', this.yJSONArray, 'eq'])) {\n const names = this.y[1];\n // check array\n if (names && names.blocks instanceof Array) {\n for (const i in names.blocks) {\n if (names.blocks[i].type !== 'word') {\n throw NakoSyntaxError.fromNode(`\u8907\u6570\u5B9A\u6570\u306E\u4EE3\u5165\u6587${Number(i) + 1}\u756A\u76EE\u3067\u30A8\u30E9\u30FC\u3002\u300E\u5B9A\u6570[A,B,C]=[1,2,3]\u300F\u306E\u66F8\u5F0F\u3067\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002`, this.y[0]);\n }\n }\n }\n else {\n throw NakoSyntaxError.fromNode('\u8907\u6570\u5B9A\u6570\u306E\u4EE3\u5165\u6587\u3067\u30A8\u30E9\u30FC\u3002\u300E\u5B9A\u6570[A,B,C]=[1,2,3]\u300F\u306E\u66F8\u5F0F\u3067\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002', this.y[0]);\n }\n const namesAst = this._tokensToNodes(this.createVarList(names.blocks, true, this.isExportDefault));\n const astValue = this.yCalc() || this.yNop();\n return {\n type: 'def_local_varlist',\n names: namesAst,\n vartype: '\u5B9A\u6570',\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u8907\u6570\u5909\u6570\u3078\u306E\u4EE3\u5165 #563\n if (this.accept(['\u5909\u6570', this.yJSONArray, 'eq'])) {\n const names = this.y[1];\n // check array\n if (names && names.blocks instanceof Array) {\n names.blocks.forEach((block, index) => {\n if (block.type !== 'word') {\n throw NakoSyntaxError.fromNode(`\u8907\u6570\u5909\u6570\u306E\u4EE3\u5165\u6587${String(index + 1)}\u756A\u76EE\u3067\u30A8\u30E9\u30FC\u300E\u5909\u6570[A,B,C]=[1,2,3]\u300F\u306E\u66F8\u5F0F\u3067\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002`, this.y[0]);\n }\n });\n }\n else {\n throw NakoSyntaxError.fromNode('\u8907\u6570\u5909\u6570\u306E\u4EE3\u5165\u6587\u3067\u30A8\u30E9\u30FC\u3002\u300E\u5909\u6570[A,B,C]=[1,2,3]\u300F\u306E\u66F8\u5F0F\u3067\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002', this.y[0]);\n }\n const namesAst = this._tokensToNodes(this.createVarList(names.blocks, false, this.isExportDefault));\n const astValue = this.yCalc() || this.yNop();\n return {\n type: 'def_local_varlist',\n names: namesAst,\n vartype: '\u5909\u6570',\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u8907\u6570\u5909\u6570\u3078\u306E\u4EE3\u5165 #563\n if (this.check2(['word', 'comma', 'word'])) {\n // 2 word\n if (this.accept(['word', 'comma', 'word', 'eq'])) {\n let names = [this.y[0], this.y[2]];\n names = this.createVarList(names, false, this.isExportDefault);\n const astValue = this.yCalc() || this.yNop();\n return {\n type: 'def_local_varlist',\n names,\n vartype: '\u5909\u6570',\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // 3 word\n if (this.accept(['word', 'comma', 'word', 'comma', 'word', 'eq'])) {\n let names = [this.y[0], this.y[2], this.y[4]];\n names = this.createVarList(names, false, this.isExportDefault);\n const astValue = this.yCalc() || this.yNop();\n return {\n type: 'def_local_varlist',\n names,\n vartype: '\u5909\u6570',\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // 4 word\n if (this.accept(['word', 'comma', 'word', 'comma', 'word', 'comma', 'word', 'eq'])) {\n let names = [this.y[0], this.y[2], this.y[4], this.y[6]];\n names = this.createVarList(names, false, this.isExportDefault);\n const astValue = this.yCalc() || this.yNop();\n return {\n type: 'def_local_varlist',\n names,\n vartype: '\u5909\u6570',\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // 5 word\n if (this.accept(['word', 'comma', 'word', 'comma', 'word', 'comma', 'word', 'comma', 'word', 'eq'])) {\n let names = [this.y[0], this.y[2], this.y[4], this.y[6], this.y[8]];\n names = this.createVarList(names, false, this.isExportDefault);\n const astValue = this.yCalc() || this.yNop();\n return {\n type: 'def_local_varlist',\n names,\n vartype: '\u5909\u6570',\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n }\n return null;\n }\n /**\n * \u914D\u5217\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u304C1\u304B\u3089\u59CB\u307E\u308B\u5834\u5408\u3092\u8003\u616E\u3059\u308B\u304B\n * @param {Ast} node\n * @returns\n */\n checkArrayIndex(node) {\n // \u914D\u5217\u304C0\u304B\u3089\u59CB\u307E\u308B\u306E\u3067\u3042\u308C\u3070\u305D\u306E\u307E\u307E\u8FD4\u3059\n if (this.arrayIndexFrom === 0) {\n return node;\n }\n // \u914D\u5217\u304C1\u304B\u3089\u59CB\u307E\u308B\u306E\u3067\u3042\u308C\u3070\u6F14\u7B97\u3092\u52A0\u3048\u3066\u8FD4\u3059\n const minusNum = {\n ...node,\n 'type': 'number',\n 'value': this.arrayIndexFrom\n };\n return {\n ...node,\n type: 'op',\n operator: '-',\n blocks: [node, minusNum]\n };\n }\n /**\n * \u914D\u5217\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u3092\u9006\u9806\u306B\u3059\u308B\u306E\u3092\u8003\u616E\u3059\u308B\u304B\n * @param {Ast[]| null} ary\n */\n checkArrayReverse(ary) {\n if (!ary) {\n return [];\n }\n if (!this.flagReverseArrayIndex) {\n return ary;\n }\n // \u4E8C\u6B21\u5143\u4EE5\u4E0A\u306E\u914D\u5217\u5909\u6570\u306E\u30A2\u30AF\u30BB\u30B9\u3092[y][x]\u3067\u306F\u306A\u304F[x][y]\u3068\u9806\u5E8F\u3092\u5909\u66F4\u3059\u308B\n if (ary.length <= 1) {\n return ary;\n }\n return ary.reverse();\n }\n /** @returns {AstLetArray | null} */\n yLetArrayAt(map) {\n // \u4E00\u6B21\u5143\u914D\u5217\n if (this.accept(['word', '@', this.yValue, 'eq', this.yCalc])) {\n const astValue = this.y[4];\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, this.checkArrayIndex(this.y[2])],\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E8C\u6B21\u5143\u914D\u5217\n if (this.accept(['word', '@', this.yValue, '@', this.yValue, 'eq', this.yCalc])) {\n const astValue = this.y[6];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[4])]);\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E09\u6B21\u5143\u914D\u5217\n if (this.accept(['word', '@', this.yValue, '@', this.yValue, '@', this.yValue, 'eq', this.yCalc])) {\n const astValue = this.y[8];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[4]), this.checkArrayIndex(this.y[6])]);\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E8C\u6B21\u5143\u914D\u5217(\u30AB\u30F3\u30DE\u6307\u5B9A)\n if (this.accept(['word', '@', this.yValue, 'comma', this.yValue, 'eq', this.yCalc])) {\n const astValue = this.y[6];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[4])]);\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E09\u6B21\u5143\u914D\u5217(\u30AB\u30F3\u30DE\u6307\u5B9A)\n if (this.accept(['word', '@', this.yValue, 'comma', this.yValue, 'comma', this.yValue, 'eq', this.yCalc])) {\n const astValue = this.y[8];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[4]), this.checkArrayIndex(this.y[6])]);\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n return null;\n }\n /** @returns {Ast | null} */\n yLetArrayBracket(map) {\n // \u4E00\u6B21\u5143\u914D\u5217\n if (this.accept(['word', '[', this.yCalc, ']', 'eq', this.yCalc])) {\n const astValue = this.y[5];\n const astIndexes = [this.checkArrayIndex(this.y[2])];\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E8C\u6B21\u5143\u914D\u5217 --- word[a][b] = c\n if (this.accept(['word', '[', this.yCalc, ']', '[', this.yCalc, ']', 'eq', this.yCalc])) {\n const astValue = this.y[8];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[5])]);\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n tag: '2',\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E8C\u6B21\u5143\u914D\u5217 --- word[a, b] = c\n if (this.accept(['word', '[', this.yCalc, 'comma', this.yCalc, ']', 'eq', this.yCalc])) {\n const astValue = this.y[7];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[4])]);\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n checkInit: this.flagCheckArrayInit,\n tag: '2',\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E09\u6B21\u5143\u914D\u5217 --- word[a][b][c] = d\n if (this.accept(['word', '[', this.yCalc, ']', '[', this.yCalc, ']', '[', this.yCalc, ']', 'eq', this.yCalc])) {\n const astValue = this.y[11];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[5]), this.checkArrayIndex(this.y[8])]);\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E09\u6B21\u5143\u914D\u5217 --- word[a, b, c] = d\n if (this.accept(['word', '[', this.yCalc, 'comma', this.yCalc, 'comma', this.yCalc, ']', 'eq', this.yCalc])) {\n const astValue = this.y[9];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[4]), this.checkArrayIndex(this.y[6])]);\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n index: this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[4]), this.checkArrayIndex(this.y[6])]),\n blocks: [astValue, ...astIndexes],\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // --- --- --- --- --- --- --- --- --- --- --- --- ---\n // \u914D\u5217 + \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u69CB\u6587 (#2139)\n // --- --- --- --- --- --- --- --- --- --- --- --- ---\n // \u4E00\u6B21\u5143\u914D\u5217 + \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u69CB\u6587 --- word[a]$b = c\n if (this.accept(['word', '[', this.yCalc, ']', '$', 'word', 'eq', this.yCalc])) {\n const astValue = this.y[7];\n const astIndexes = [this.checkArrayIndex(this.y[2])];\n const astProp = this.y[5];\n astProp.type = 'string';\n return {\n type: 'let_prop',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n index: [astProp],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E00\u6B21\u5143\u914D\u5217 + \u4E8C\u6B21\u5143\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u69CB\u6587 --- word[a]$b$c = d\n if (this.accept(['word', '[', this.yCalc, ']', '$', 'word', '$', 'word', 'eq', this.yCalc])) {\n const astVarName = this.y[0];\n const astIndex = this.y[2];\n const astProp1 = this.y[5];\n const astProp2 = this.y[7];\n const astValue = this.y[9];\n astProp1.type = 'string';\n astProp2.type = 'string';\n return {\n type: 'let_prop',\n name: this.getVarName(astVarName).value,\n blocks: [astValue, astIndex],\n index: [astProp1, astProp2],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E8C\u6B21\u5143\u914D\u5217 + \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u69CB\u6587 --- word[a][b]$c = d\n if (this.accept(['word', '[', this.yCalc, ']', '[', this.yCalc, ']', '$', 'word', 'eq', this.yCalc])) {\n const astValue = this.y[10];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[5])]);\n const astProp = this.y[8];\n astProp.type = 'string';\n return {\n type: 'let_prop',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n index: [astProp],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E8C\u6B21\u5143\u914D\u5217 + \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u69CB\u6587 --- word[a, b]$c = d\n if (this.accept(['word', '[', this.yCalc, ',', this.yCalc, ']', '$', 'word', 'eq', this.yCalc])) {\n const astValue = this.y[9];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[4])]);\n const astProp = this.y[7];\n astProp.type = 'string';\n return {\n type: 'let_prop',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n index: [astProp],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E8C\u6B21\u5143\u914D\u5217 + \u4E8C\u6B21\u5143\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u69CB\u6587 --- word[a][b]$c$d = e\n if (this.accept([\n 'word', '[', this.yCalc, ']', '[', this.yCalc, ']', // 0...6\n '$', 'word', '$', 'word', 'eq', this.yCalc // 7...12\n ])) {\n const astVarName = this.y[0];\n const astIndex1 = this.y[2];\n const astIndex2 = this.y[5];\n const astProp1 = this.y[8];\n const astProp2 = this.y[10];\n const astValue = this.y[12];\n astProp1.type = 'string';\n astProp2.type = 'string';\n return {\n type: 'let_prop',\n name: this.getVarName(astVarName).value,\n blocks: [astValue, astIndex1, astIndex2],\n index: [astProp1, astProp2],\n ...map,\n end: this.peekSourceMap()\n };\n }\n return null;\n }\n /** @returns {Ast | null} */\n yCalc() {\n const map = this.peekSourceMap();\n if (this.check('eol')) {\n return null;\n }\n // \u5024\u3092\u4E00\u3064\u8AAD\u3080\n const t = this.yGetArg();\n if (!t) {\n return null;\n }\n // \u52A9\u8A5E\u304C\u3042\u308B\uFF1F \u3064\u307E\u308A\u3001\u95A2\u6570\u547C\u3073\u51FA\u3057\u304C\u3042\u308B\uFF1F\n if (t.josi === '' && !this.canNextFuncTakeNoJosiArg()) {\n return t;\n } // \u5024\u3060\u3051\u306E\u5834\u5408\n // \u95A2\u6570\u306E\u547C\u3073\u51FA\u3057\u304C\u3042\u308B\u306A\u3089\u3001\u30B9\u30BF\u30C3\u30AF\u306B\u8F09\u305B\u3066\u95A2\u6570\u8AAD\u307F\u51FA\u3057\u3092\u547C\u3076\n const tmpReadingCalc = this.isReadingCalc;\n this.isReadingCalc = true;\n this.pushStack(t);\n const t1 = this.yCall();\n this.isReadingCalc = tmpReadingCalc;\n if (!t1) {\n // \u95A2\u6570\u304C\u306A\u3051\u308C\u3070\u3001\u5148\u307B\u3069\u7A4D\u3093\u3060\u5024\u3092\u30B9\u30BF\u30C3\u30AF\u304B\u3089\u53D6\u308A\u51FA\u3057\u3066\u8FD4\u3059\n return this.popStack();\n }\n // \u8A08\u7B97\u5F0F\u3092fCalc\u3068\u3059\u308B\n let fCalc = t1;\n // \u305D\u308C\u304C\u9023\u6587\u304B\u52A9\u8A5E\u3092\u8AAD\u3093\u3067\u78BA\u8A8D\n if (RenbunJosi.indexOf(t1.josi || '') >= 0) {\n // \u9023\u6587\u306A\u3089\u53F3\u5074\u3092\u8AAD\u3093\u3067\u5DE6\u5074\u3068\u304F\u3063\u3064\u3051\u308B\n const t2 = this.yCalc();\n if (t2) {\n fCalc = {\n type: 'renbun',\n operator: 'renbun',\n blocks: [t1, t2],\n josi: t2.josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n }\n // \u6F14\u7B97\u5B50\u304C\u3042\u308C\u3070\u7D9A\u3051\u308B\n const op = this.peek();\n if (!op) {\n return fCalc;\n }\n if (opPriority[op.type]) {\n return this.yGetArgOperator(fCalc);\n }\n return fCalc;\n }\n /** \u6B21\u306E\u95A2\u6570\u304C\u7A7A\u52A9\u8A5E\u306E\u5024\u3092\u5F15\u6570\u3068\u3057\u3066\u53D7\u3051\u53D6\u308C\u308B\u304B */\n canNextFuncTakeNoJosiArg() {\n if (!this.check('func')) {\n return false;\n }\n const func = this.peek();\n const josiList = func?.meta?.josi;\n if (!josiList) {\n return false;\n }\n return josiList.some((josi) => josi.indexOf('') >= 0);\n }\n /** @returns {Ast | null} */\n yValueKakko() {\n if (!this.check('(')) {\n return null;\n }\n const t = this.get(); // skip '('\n if (!t) {\n throw new Error('[System Error] check \u3057\u305F\u306E\u306B get \u3067\u304D\u306A\u3044');\n }\n this.saveStack();\n const v = this.yCalc() || this.ySentence();\n if (v === null) {\n const v2 = this.get();\n this.logger.debug('(...)\u306E\u89E3\u6790\u30A8\u30E9\u30FC\u3002' + this.nodeToStr(v2, { depth: 1 }, true) + '\u306E\u8FD1\u304F', t);\n throw NakoSyntaxError.fromNode('(...)\u306E\u89E3\u6790\u30A8\u30E9\u30FC\u3002' + this.nodeToStr(v2, { depth: 1 }, false) + '\u306E\u8FD1\u304F', t);\n }\n if (!this.check(')')) {\n this.logger.debug('(...)\u306E\u89E3\u6790\u30A8\u30E9\u30FC\u3002' + this.nodeToStr(v, { depth: 1 }, true) + '\u306E\u8FD1\u304F', t);\n throw NakoSyntaxError.fromNode('(...)\u306E\u89E3\u6790\u30A8\u30E9\u30FC\u3002' + this.nodeToStr(v, { depth: 1 }, false) + '\u306E\u8FD1\u304F', t);\n }\n const closeParent = this.get(); // skip ')'\n this.loadStack();\n if (closeParent) {\n v.josi = closeParent.josi;\n }\n // (...)\u306E\u5F8C\u306E\u914D\u5217\u30A2\u30AF\u30BB\u30B9\u306B\u5BFE\u5FDC #1985\n return this.yRefArrayValue(v);\n }\n yConst(tok, map) {\n // ['number', 'bigint', 'string']\n const astConst = {\n type: tok.type,\n value: tok.value,\n josi: tok.josi,\n ...map\n };\n return astConst;\n }\n /** @returns {Ast | null} */\n yValue() {\n const map = this.peekSourceMap();\n // \u30AB\u30F3\u30DE\u306A\u3089\u98DB\u3070\u3059 #877\n if (this.check('comma')) {\n this.get();\n }\n // \u30D7\u30EA\u30DF\u30C6\u30A3\u30D6\u306A\u5024\n if (this.checkTypes(['number', 'bigint', 'string'])) {\n return this.yConst(this.getCur(), map);\n }\n // \u4E38\u62EC\u5F27\n if (this.check('(')) {\n return this.yValueKakko();\n }\n // \u30DE\u30A4\u30CA\u30B9\u8A18\u53F7\n if (this.check2(['-', 'number']) || this.check2(['-', 'word']) || this.check2(['-', 'func'])) {\n const m = this.get(); // skip '-'\n const v = this.yValue();\n const josi = (v && v.josi) ? v.josi : '';\n const line = (m && m.line) ? m.line : 0;\n const astLeft = { type: 'number', value: -1, line };\n const astRight = v || this.yNop();\n return {\n type: 'op',\n operator: '*',\n blocks: [astLeft, astRight],\n josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // NOT\n if (this.check('not')) {\n this.get(); // skip '!'\n const v = this.yValue();\n const josi = (v && v.josi) ? v.josi : '';\n return {\n type: 'not',\n operator: 'not',\n blocks: [v],\n josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // JSON object\n const a = this.yJSONArray();\n if (a) {\n return a;\n }\n const o = this.yJSONObject();\n if (o) {\n return o;\n }\n // \u4E00\u8A9E\u95A2\u6570\n if (this.check('func')) {\n const oneWordFuncToken = this.peek();\n if (!oneWordFuncToken) {\n throw new Error('[System Error] \u6B63\u3057\u304F\u5024\u304C\u53D6\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002');\n }\n const splitType = operatorList.concat(['eol', ')', ']', '\u306A\u3089\u3070', '\u56DE', '\u9593', '\u53CD\u5FA9', '\u6761\u4EF6\u5206\u5C90']);\n if (this.check2(['func', splitType]) || (oneWordFuncToken?.josi && oneWordFuncToken.josi !== '')) {\n this.get(); // skip oneWordFuncToken\n const tt = oneWordFuncToken;\n const f = this.getVarNameRef(tt);\n this.usedFuncs.add(f.value);\n // \u5F15\u6570\u306E\u500B\u6570\u3092\u30C1\u30A7\u30C3\u30AF\n const meta = tt.meta;\n const args = [];\n if (!meta) {\n throw NakoSyntaxError.fromNode(`\u4E00\u8A9E\u95A2\u6570\u300E${f.value}\u300F\u306F\u5B58\u5728\u3057\u307E\u305B\u3093\u3002`, tt);\n }\n if (meta.josi && meta.josi.length === 1) {\n args.push({ type: 'word', value: '\u305D\u308C' });\n }\n else if (meta.josi && meta.josi.length >= 2) {\n throw NakoSyntaxError.fromNode(`\u95A2\u6570\u300E${f.value}\u300F\u3067\u5F15\u6570\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002${meta.josi.length}\u500B\u306E\u5F15\u6570\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`, tt);\n }\n return {\n type: 'func',\n name: f.value,\n blocks: args,\n josi: f.josi,\n meta,\n asyncFn: !!meta.asyncFn,\n ...map,\n end: this.peekSourceMap()\n };\n }\n }\n // C\u98A8\u95A2\u6570\u547C\u3073\u51FA\u3057 FUNC(...)\n if (this.check2([['func', 'word'], '(']) && this.peekDef().josi === '') {\n const funcNameToken = this.peek();\n if (this.accept([['func', 'word'], '(', this.yGetArgParen, ')'])) {\n const funcToken = this.getVarNameRef(this.y[0]);\n const meta = funcToken.meta; // undefined\u304B\u3082\u3057\u308C\u306A\u3044\n const args = this.y[2];\n const funcName = funcToken.value;\n let asyncFn = false;\n this.usedFuncs.add(funcName);\n // \u5F15\u6570\u306E\u500B\u6570\u3092\u30C1\u30A7\u30C3\u30AF\n if (meta && meta.josi) {\n // \u5F15\u6570\u306E\u500B\u6570\u304C\u7570\u306A\u308B\u5834\u5408\n if (meta.josi.length === args.length) {\n // ok\n }\n else if (meta.isVariableJosi) {\n // ok\n }\n else { // \u5F15\u6570\u306E\u500B\u6570\u304C\u9055\u3046\n throw NakoSyntaxError.fromNode(`\u95A2\u6570\u300E${funcToken.value}\u300F\u3067\u5F15\u6570${args.length}\u500B\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u304C\u3001${meta.josi.length}\u500B\u306E\u5F15\u6570\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`, funcToken);\n }\n asyncFn = !!meta.asyncFn;\n }\n const funcNode = {\n type: 'func',\n name: funcName,\n blocks: args,\n josi: this.y[3].josi,\n meta,\n asyncFn,\n ...map,\n end: this.peekSourceMap()\n };\n return this.yApplyCallValue(funcNode);\n }\n throw NakoSyntaxError.fromNode('C\u98A8\u95A2\u6570\u547C\u3073\u51FA\u3057\u306E\u30A8\u30E9\u30FC', funcNameToken || NewEmptyToken());\n }\n // \u7121\u540D\u95A2\u6570(\u95A2\u6570\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8)\n if (this.check('def_func')) {\n return this.yMumeiFunc();\n }\n // \u5909\u6570\n const word = this.yValueWord();\n if (word) {\n return word;\n }\n // \u95A2\u6570\u3078\u306E\u53C2\u7167\n const funcPtr = this.yValueFuncPointer();\n if (funcPtr) {\n return funcPtr;\n }\n // \u305D\u306E\u4ED6\n return null;\n }\n yValueWordGetIndex(ast) {\n if (!ast.index) {\n ast.index = [];\n }\n // word @ a, b, c\n if (this.check('@')) {\n if (this.accept(['@', this.yValue, 'comma', this.yValue, 'comma', this.yValue])) {\n ast.index.push(this.checkArrayIndex(this.y[1]));\n ast.index.push(this.checkArrayIndex(this.y[3]));\n ast.index.push(this.checkArrayIndex(this.y[5]));\n ast.index = this.checkArrayReverse(ast.index);\n ast.josi = this.y[5].josi;\n return true;\n }\n if (this.accept(['@', this.yValue, 'comma', this.yValue])) {\n ast.index.push(this.checkArrayIndex(this.y[1]));\n ast.index.push(this.checkArrayIndex(this.y[3]));\n ast.index = this.checkArrayReverse(ast.index);\n ast.josi = this.y[3].josi;\n return true;\n }\n if (this.accept(['@', this.yValue])) {\n ast.index.push(this.checkArrayIndex(this.y[1]));\n ast.josi = this.y[1].josi;\n return true;\n }\n throw NakoSyntaxError.fromNode('\u5909\u6570\u306E\u5F8C\u308D\u306E\u300E@\u8981\u7D20\u300F\u306E\u6307\u5B9A\u304C\u4E0D\u6B63\u3067\u3059\u3002', ast);\n }\n if (this.check('[')) {\n // 1\u6B21\u5143\u914D\u5217\u5909\u6570 + 3\u6B21\u5143\u30D7\u30ED\u30D1\u30C6\u30A3\n if (this.accept(['[', this.yCalc, ']', '$', 'word', '$', 'word', '$', 'word'])) {\n ast.index.push(this.checkArrayIndex(this.y[1]));\n const prop1 = this.y[4];\n const prop2 = this.y[6];\n const prop3 = this.y[8];\n prop1.type = 'string';\n prop2.type = 'string';\n prop3.type = 'string';\n ast.index.push(prop1);\n ast.index.push(prop2);\n ast.index.push(prop3);\n ast.josi = prop3.josi;\n return ast.josi === ''; // \u52A9\u8A5E\u304C\u3042\u308C\u3070\u305D\u3053\u3067\u7D42\u4E86(false)\u3092\u8FD4\u3059 (#1627)\n }\n // 1\u6B21\u5143\u914D\u5217\u5909\u6570 + 2\u6B21\u5143\u30D7\u30ED\u30D1\u30C6\u30A3\n if (this.accept(['[', this.yCalc, ']', '$', 'word', '$', 'word'])) {\n ast.index.push(this.checkArrayIndex(this.y[1]));\n const prop1 = this.y[4];\n const prop2 = this.y[6];\n prop1.type = 'string';\n prop2.type = 'string';\n ast.index.push(prop1);\n ast.index.push(prop2);\n ast.josi = prop2.josi;\n return ast.josi === ''; // \u52A9\u8A5E\u304C\u3042\u308C\u3070\u305D\u3053\u3067\u7D42\u4E86(false)\u3092\u8FD4\u3059 (#1627)\n }\n // 1\u6B21\u5143\u914D\u5217\u5909\u6570 + 1\u6B21\u5143\u30D7\u30ED\u30D1\u30C6\u30A3\n if (this.accept(['[', this.yCalc, ']', '$', 'word'])) {\n ast.index.push(this.checkArrayIndex(this.y[1]));\n const prop = this.y[4];\n prop.type = 'string';\n ast.index.push(prop);\n ast.josi = this.y[4].josi;\n return this.y[4].josi === ''; // \u52A9\u8A5E\u304C\u3042\u308C\u3070\u305D\u3053\u3067\u7D42\u4E86(false)\u3092\u8FD4\u3059 (#1627)\n }\n if (this.accept(['[', this.yCalc, ']'])) {\n ast.index.push(this.checkArrayIndex(this.y[1]));\n ast.josi = this.y[2].josi;\n return this.y[2].josi === ''; // \u52A9\u8A5E\u304C\u3042\u308C\u3070\u305D\u3053\u3067\u7D42\u4E86(false)\u3092\u8FD4\u3059 (#1627)\n }\n if (this.accept(['[', this.yCalc, 'comma', this.yCalc, ']'])) {\n const index = [\n this.checkArrayIndex(this.y[1]),\n this.checkArrayIndex(this.y[3])\n ];\n const aa = ast.index.pop();\n ast.index = this.checkArrayReverse(index);\n if (aa) {\n ast.index.unshift(aa);\n }\n ast.josi = this.y[4].josi;\n return this.y[4].josi === ''; // \u52A9\u8A5E\u304C\u3042\u308C\u3070\u305D\u3053\u3067\u7D42\u4E86(false)\u3092\u8FD4\u3059\n }\n }\n if (this.check('[')) {\n if (this.accept(['[', this.yCalc, 'comma', this.yCalc, 'comma', this.yCalc, ']'])) {\n const index = [\n this.checkArrayIndex(this.y[1]),\n this.checkArrayIndex(this.y[3]),\n this.checkArrayIndex(this.y[5])\n ];\n const aa = ast.index.pop();\n ast.index = this.checkArrayReverse(index);\n if (aa) {\n ast.index.unshift(aa);\n }\n ast.josi = this.y[6].josi;\n return this.y[6].josi === ''; // \u52A9\u8A5E\u304C\u3042\u308C\u3070\u305D\u3053\u3067\u7D42\u4E86(false)\u3092\u8FD4\u3059\n }\n }\n return false;\n }\n yValueWordGetProp(ast) {\n if (!ast.index) {\n ast.index = [];\n }\n if (this.accept(['$', 'word', '$', 'word'])) {\n const prop1 = this.y[1];\n const prop2 = this.y[3];\n prop1.type = 'string';\n prop2.type = 'string';\n ast.index.push(prop1);\n ast.index.push(prop2);\n ast.josi = this.y[3].josi;\n return ast.josi === ''; // \u52A9\u8A5E\u304C\u3042\u308C\u3070\u305D\u3053\u3067\u7D42\u4E86(false)\u3092\u8FD4\u3059\n }\n if (this.check('$')) {\n if (this.accept(['$', 'word'])) {\n this.y[1].type = 'string';\n ast.index.push(this.y[1]);\n ast.josi = this.y[1].josi;\n return this.y[1].josi === ''; // \u52A9\u8A5E\u304C\u3042\u308C\u3070\u305D\u3053\u3067\u7D42\u4E86(false)\u3092\u8FD4\u3059\n }\n }\n if (this.accept(['$', this.yValue])) {\n ast.index.push(this.y[1]);\n ast.josi = this.y[1].josi;\n return this.y[1].josi === ''; // \u52A9\u8A5E\u304C\u3042\u308C\u3070\u305D\u3053\u3067\u7D42\u4E86(false)\u3092\u8FD4\u3059\n }\n return false;\n }\n /** @returns {Ast | null} */\n yValueFuncPointer() {\n const map = this.peekSourceMap();\n if (this.check('func_pointer')) {\n const t = this.getCur();\n const ast = {\n type: 'func_pointer',\n name: t.value,\n josi: t.josi,\n ...map,\n end: this.peekSourceMap()\n };\n return ast;\n }\n return null;\n }\n /** @returns {Ast | null} */\n yValueWord() {\n const map = this.peekSourceMap();\n if (this.check('word')) {\n const t = this.getCur();\n const word = this.getVarNameRef(t);\n // word[n] || word@n\n if ((word.josi === '' && this.checkTypes(['[', '@'])) || (word.josi !== '' && this.check('@'))) {\n const ast = {\n type: 'ref_array', // \u914D\u5217\u53C2\u7167\n name: word,\n index: [],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n while (!this.isEOF()) {\n if (!this.yValueWordGetIndex(ast)) {\n break;\n }\n }\n if (ast.index && ast.index.length === 0) {\n throw NakoSyntaxError.fromNode(`\u914D\u5217\u300E${word.value}\u300F\u30A2\u30AF\u30BB\u30B9\u3067\u6307\u5B9A\u30DF\u30B9`, word);\n }\n return ast;\n }\n // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u69CB\u6587(\u53C2\u7167) word$prop (#1793)\n if (this.check2(['$', 'word']) || this.check2(['$', 'string'])) {\n const propList = [];\n let josi = '';\n while (this.check('$')) {\n this.get(); // skip '$'\n const prop = this.get();\n propList.push(prop);\n josi = prop.josi;\n }\n return {\n type: 'ref_prop', // \u30D7\u30ED\u30D1\u30C6\u30A3\u53C2\u7167\n name: word,\n index: propList,\n josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n return word; // Token to Ast\n }\n return null;\n }\n /** \u5909\u6570\u3092\u751F\u6210 */\n createVar(word, isConst, isExport) {\n let gname = word.value;\n const typeName = isConst ? 'const' : 'var';\n if (this.funcLevel === 0) {\n // global ?\n if (gname.indexOf('__') < 0) {\n gname = this.modName + '__' + gname;\n }\n const defValue = { type: typeName, value: '', isExport };\n this.funclist.set(gname, defValue);\n const wordAst = word;\n wordAst.value = gname;\n return word;\n }\n else {\n // local\n this.localvars.set(gname, { type: typeName, value: '' });\n return word;\n }\n }\n /** \u5909\u6570\u540D\u3092\u691C\u7D22\u3057\u3066\u89E3\u6C7A\u3059\u308B\n * @param {Ast|Token} word\n * @return {Ast|Token}\n */\n getVarName(word) {\n // check word name\n const f = this.findVar(word.value);\n if (f) {\n if (f && f.scope === 'global') {\n word.value = f.name;\n }\n return word;\n }\n // \u5909\u6570\u304C\u898B\u3064\u304B\u3089\u306A\u3044\n this.createVar(word, false, this.isExportDefault);\n return word;\n }\n /** \u5909\u6570\u540D\u3092\u691C\u7D22\u3057\u3066\u89E3\u6C7A\u3059\u308B */\n getVarNameRef(word) {\n // check word name\n const f = this.findVar(word.value);\n if (!f) { // \u5909\u6570\u304C\u898B\u3064\u304B\u3089\u306A\u3044\n if (this.funcLevel === 0 && word.value.indexOf('__') < 0) {\n word.value = this.modName + '__' + String(word.value);\n }\n }\n else if (f && f.scope === 'global') {\n word.value = f.name;\n }\n return word;\n }\n /** \u8907\u6570\u306E\u5909\u6570\u540D\u3092\u691C\u7D22\u3057\u3066\u89E3\u6C7A\u3059\u308B */\n createVarList(words, isConst, isExport) {\n for (let i = 0; i < words.length; i++) {\n words[i] = this.createVar(words[i], isConst, isExport);\n }\n return words;\n }\n yJSONObjectValue() {\n // \u623B\u308A\u5024\u306E\u5F62\u5F0F\n // Astblocks.blocks = [key1, value1, key2, value2, key3, value3 ...]\n const a = [];\n const firstToken = this.peek();\n if (!firstToken) {\n return [];\n }\n while (!this.isEOF()) {\n while (this.check('eol')) {\n this.get();\n }\n if (this.check('}')) {\n break;\n }\n // key : value\n if (this.accept(['word', ':', this.yCalc])) {\n this.y[0].type = 'string'; // \u30AD\u30FC\u540D\u306E\u6587\u5B57\u5217\u8A18\u53F7\u7701\u7565\u306E\u5834\u5408\n a.push(this.y[0]);\n a.push(this.y[2]);\n }\n else if (this.accept(['string', ':', this.yCalc])) { // 'key' : value\n a.push(this.y[0]);\n a.push(this.y[2]);\n }\n else if (this.accept(['word'])) { // key\n const key = this.y[0];\n const val = JSON.parse(JSON.stringify(key));\n key.type = 'string'; // \u30AD\u30FC\u540D\u306E\u6587\u5B57\u5217\u8A18\u53F7\u7701\u7565\u306E\u5834\u5408\n a.push(key);\n a.push(val);\n }\n else if (this.checkTypes(['string', 'number'])) { // str or num\n const w = this.getCur(); // Token\u3092\u5F37\u5236\u7684\u306BAst\u306B\u5909\u63DB\u3057\u3066\u3044\u308B\n a.push(w);\n a.push(w);\n }\n else {\n throw NakoSyntaxError.fromNode('\u8F9E\u66F8\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u5BA3\u8A00\u3067\u672B\u5C3E\u306E\u300E}\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002', firstToken);\n }\n if (this.check('comma')) {\n this.get();\n }\n }\n return a;\n }\n // \u8F9E\u66F8\u578B\u5909\u6570\u306E\u53D6\u5F97\n yJSONObject() {\n const a = this.yJSONObjectRaw();\n if (!a) {\n return null;\n }\n return this.yRefArrayValue(a);\n }\n yJSONObjectRaw() {\n const map = this.peekSourceMap();\n if (this.accept(['{', '}'])) {\n return {\n type: 'json_obj',\n blocks: [],\n josi: this.y[1].josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n if (this.accept(['{', this.yJSONObjectValue, '}'])) {\n return {\n type: 'json_obj',\n blocks: this.y[1],\n josi: this.y[2].josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u8F9E\u66F8\u521D\u671F\u5316\u306B\u7D42\u308F\u308A\u304C\u306A\u304B\u3063\u305F\u5834\u5408 (\u30A8\u30E9\u30FC\u30C1\u30A7\u30C3\u30AF\u306E\u305F\u3081) #958\n if (this.accept(['{', this.yJSONObjectValue])) {\n throw NakoSyntaxError.fromNode('\u8F9E\u66F8\u578B\u5909\u6570\u306E\u521D\u671F\u5316\u304C\u300E}\u300F\u3067\u9589\u3058\u3089\u308C\u3066\u3044\u307E\u305B\u3093\u3002', this.y[1]);\n }\n return null;\n }\n yJSONArrayValue() {\n if (this.check('eol')) {\n this.get();\n }\n // Array\u306E\u6700\u521D\u306E\u5024\n const v1 = this.yCalc();\n if (v1 === null) {\n return [];\n }\n if (this.check('comma')) {\n this.get();\n }\n const a = [v1];\n // 2\u3064\u76EE\u4EE5\u964D\u306E\u5024\u3092\u53D6\u5F97\n while (!this.isEOF()) {\n if (this.check('eol')) {\n this.get();\n }\n if (this.check(']')) {\n break;\n }\n const v2 = this.yCalc();\n if (v2 === null) {\n break;\n }\n if (this.check('comma')) {\n this.get();\n }\n a.push(v2);\n }\n return a;\n }\n // \u914D\u5217\u3084(\u5024)\u306E\u76F4\u5F8C\u306B\u3042\u308B\u914D\u5217\u30A2\u30AF\u30BB\u30B9\u3084\u30D7\u30ED\u30D1\u30C6\u30A3\u30A2\u30AF\u30BB\u30B9\u3092\u8ABF\u3079\u308B\n yRefArrayValue(value) {\n let val = value;\n for (;;) {\n // \u914D\u5217\u306E\u76F4\u5F8C\u306B@\u3084[]\u304C\u3042\u308B\u304B\uFF1F\n // \u305F\u3060\u3057\u3001\u52A9\u8A5E\u304C\u3042\u308B\u5834\u5408\u306B\u306F\u3001\u5225\u306E\u5F15\u6570\u306E\u53EF\u80FD\u6027\u304C\u3042\u308B\u306E\u3067\u7121\u8996\u3002 (\u4F8B) [0,1,2]\u3092[3,4,5]\u306B\u914D\u5217\uFF0A\uFF0A\uFF0A\n if (val.josi === '' && this.checkTypes(['@', '['])) {\n const ast = {\n type: 'ref_array_value',\n name: '@',\n index: [val],\n josi: '',\n line: val.line,\n end: this.peekSourceMap()\n };\n while (!this.isEOF()) {\n if (!this.yValueWordGetIndex(ast)) {\n break;\n }\n }\n val = ast;\n continue;\n }\n // \u914D\u5217\u306E\u76F4\u306E\u5F8C\u306B$(\u30D7\u30ED\u30D1\u30C6\u30A3)\u304C\u3042\u308B\u304B\uFF1F\n if (this.check('$')) {\n const ast = {\n type: 'ref_array_value',\n name: '$',\n index: [val],\n josi: '',\n line: val.line,\n end: this.peekSourceMap()\n };\n while (!this.isEOF()) {\n if (!this.yValueWordGetProp(ast)) {\n break;\n }\n }\n val = ast;\n continue;\n }\n break;\n }\n return val;\n }\n yJSONArray() {\n // \u914D\u5217\u3092\u5F97\u308B\n const a = this.yJSONArrayRaw();\n if (!a) {\n return null;\n }\n return this.yRefArrayValue(a);\n }\n /** @returns {AstBlocks | null} */\n yJSONArrayRaw() {\n const map = this.peekSourceMap();\n if (this.accept(['[', ']'])) {\n return {\n type: 'json_array',\n blocks: [],\n josi: this.y[1].josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n if (this.accept(['[', this.yJSONArrayValue, ']'])) {\n return {\n type: 'json_array',\n blocks: this.y[1],\n josi: this.y[2].josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u914D\u5217\u306B\u7D42\u308F\u308A\u304C\u306A\u304B\u3063\u305F\u5834\u5408 (\u30A8\u30E9\u30FC\u30C1\u30A7\u30C3\u30AF\u306E\u305F\u3081) #958\n if (this.accept(['[', this.yJSONArrayValue])) {\n throw NakoSyntaxError.fromNode('\u914D\u5217\u5909\u6570\u306E\u521D\u671F\u5316\u304C\u300E]\u300F\u3067\u9589\u3058\u3089\u308C\u3066\u3044\u307E\u305B\u3093\u3002', this.y[1]);\n }\n return null;\n }\n /** \u30A8\u30E9\u30FC\u76E3\u8996\u69CB\u6587 */\n yTryExcept() {\n const map = this.peekSourceMap();\n if (!this.check('\u30A8\u30E9\u30FC\u76E3\u8996')) {\n return null;\n }\n const kansi = this.getCur(); // skip \u30A8\u30E9\u30FC\u76E3\u8996\n const block = this.yBlock();\n if (!this.check2(['\u30A8\u30E9\u30FC', '\u306A\u3089\u3070'])) {\n throw NakoSyntaxError.fromNode('\u30A8\u30E9\u30FC\u69CB\u6587\u3067\u300E\u30A8\u30E9\u30FC\u306A\u3089\u3070\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002' +\n '\u300E\u30A8\u30E9\u30FC\u76E3\u8996..\u30A8\u30E9\u30FC\u306A\u3089\u3070..\u3053\u3053\u307E\u3067\u300F\u3092\u5BFE\u3067\u8A18\u8FF0\u3057\u307E\u3059\u3002', kansi);\n }\n this.get(); // skip \u30A8\u30E9\u30FC\n this.get(); // skip \u306A\u3089\u3070\n const errBlock = this.yBlock();\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get();\n }\n else {\n throw NakoSyntaxError.fromNode('\u300E\u3053\u3053\u307E\u3067\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u300E\u30A8\u30E9\u30FC\u76E3\u8996\u300F...\u300E\u30A8\u30E9\u30FC\u306A\u3089\u3070\u300F...\u300E\u3053\u3053\u307E\u3067\u300F\u3092\u5BFE\u5FDC\u3055\u305B\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n return {\n type: 'try_except',\n blocks: [block, errBlock],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** \u95A2\u6570\u3054\u3068\u306BasyncFn\u304C\u5FC5\u8981\u304B\u78BA\u8A8D\u3059\u308B */\n _checkAsyncFn(node) {\n if (!node) {\n return false;\n }\n // \u95A2\u6570\u5B9A\u7FA9\u304C\u3042\u308C\u3070\u95A2\u6570\n if (node.type === 'def_func' || node.type === 'def_test' || node.type === 'func_obj') {\n // \u95A2\u6570\u5B9A\u7FA9\u3067asyncFn\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u308B\u306A\u3089true\u3092\u8FD4\u3059\n const def = node;\n if (def.asyncFn) {\n return true;\n } // \u65E2\u306BasyncFn\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u308B\n // \u95A2\u6570\u5B9A\u7FA9\u306E\u4E2D\u8EAB\u3092\u8ABF\u3079\u3066asyncFn\u3067\u3042\u308B\u306A\u3089true\u306B\u5909\u66F4\u3059\u308B\n let isAsyncFn = false;\n for (const n of def.blocks) {\n if (this._checkAsyncFn(n)) {\n isAsyncFn = true;\n def.asyncFn = isAsyncFn;\n def.meta.asyncFn = isAsyncFn;\n this.isModifiedNodes = true;\n return true;\n }\n }\n }\n // \u95A2\u6570\u547C\u3073\u51FA\u3057\u3092\u8ABF\u3079\u3066\u975E\u540C\u671F\u51E6\u7406\u304C\u5FC5\u8981\u306A\u3089true\u3092\u8FD4\u3059\n if (node.type === 'func') {\n // \u95A2\u6570\u547C\u3073\u51FA\u3057\u81EA\u4F53\u304C\u975E\u540C\u671F\u51E6\u7406\u306A\u3089true\u3092\u8FD4\u3059\n const callNode = node;\n if (callNode.asyncFn) {\n return true;\n }\n // \u7D9A\u3051\u3066\u3001\u4EE5\u4E0B\u306E\u95A2\u6570\u547C\u3073\u51FA\u3057\u306E\u5F15\u6570\u306A\u3069\u306B\u975E\u540C\u671F\u51E6\u7406\u304C\u3042\u308B\u304B\u3069\u3046\u304B\u8ABF\u3079\u308B\n // \u95A2\u6570\u306E\u5F15\u6570\u306F\u3001node.blocks\u306B\u683C\u7D0D\u3055\u308C\u3066\u3044\u308B\n if (callNode.blocks) {\n for (const n of callNode.blocks) {\n if (this._checkAsyncFn(n)) {\n callNode.asyncFn = true;\n this.isModifiedNodes = true;\n return true;\n }\n }\n }\n // \u3055\u3089\u306B\u3001\u95A2\u6570\u306E\u30EA\u30F3\u30AF\u3092\u8ABF\u3079\u308B\n const func = this.funclist.get(callNode.name);\n if (func && func.asyncFn) {\n callNode.asyncFn = true;\n this.isModifiedNodes = true;\n return true;\n }\n return false;\n }\n // \u9023\u6587 ... \u73FE\u5728\u3001\u52B9\u7387\u306F\u60AA\u3044\u304C\u975E\u540C\u671F\u3067\u5B9F\u884C\u3059\u308B\u3053\u3068\u306B\u306A\u3063\u3066\u3044\u308B\n if (node.type === 'renbun') {\n return true;\n }\n // \u305D\u306E\u4ED6\n if (node.blocks) {\n for (const n of node.blocks) {\n if (this._checkAsyncFn(n)) {\n return true;\n }\n }\n }\n return false;\n }\n /** Token\u3092\u305D\u306E\u307E\u307ENode\u306B\u5909\u63DB\u3059\u308B\u30E1\u30BD\u30C3\u30C9(\u305F\u3060\u3057\u7C21\u5358\u306A\u3082\u306E\u3060\u3051\u5BFE\u5FDC)\n * @returns {Ast[]}\n */\n _tokensToNodes(tokens) {\n const nodes = [];\n for (const token of tokens) {\n nodes.push(this._tokenToNode(token));\n }\n return nodes;\n }\n /** Token\u3092\u305D\u306E\u307E\u307ENode\u306B\u5909\u63DB\u3059\u308B\u30E1\u30BD\u30C3\u30C9(\u305F\u3060\u3057\u7C21\u5358\u306A\u3082\u306E\u3060\u3051\u5BFE\u5FDC)\n * @returns {Ast}\n */\n _tokenToNode(token) {\n const map = this.peekSourceMap(token);\n if (token.type === 'string' || token.type === 'number' || token.type === 'bigint') {\n return this.yConst(token, map);\n }\n if (token.type === 'word') {\n return {\n type: 'word',\n value: token.value,\n josi: token.josi,\n ...map\n };\n }\n if (token.type === 'eol' || token.type === '_eol') {\n return {\n type: 'eol',\n ...map\n };\n }\n throw new Error('[System Error] \u672A\u77E5\u306E\u30C8\u30FC\u30AF\u30F3\u304CAst\u306B\u5909\u63DB\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n}\n", "/**\n * nako_prepare.js\n * \u5B57\u53E5\u89E3\u6790\u306E\u524D\u306E\u524D\u51E6\u7406\u3002\u5168\u89D2\u6587\u5B57\u3092\u534A\u89D2\u6587\u5B57\u306B\u5909\u63DB\u3059\u308B\u306E\u304C\u4E3B\u306A\u51E6\u7406\u3002\n * \u305F\u3060\u3057\u3001\u30B3\u30E1\u30F3\u30C8\u3084\u6587\u5B57\u5217\u306E\u4E2D\u306F\u5909\u63DB\u3057\u306A\u3044\u3088\u3046\u306B\u8003\u616E\u3057\u3066\u5909\u63DB\u3059\u308B\u3002\n */\nclass ReplaceHistory {\n constructor(from, to, index) {\n this.from = from;\n this.to = to;\n this.index = index;\n }\n}\nexport class ConvertResult {\n constructor(text, sourcePosition) {\n this.text = text;\n this.sourcePosition = sourcePosition;\n }\n}\n/**\n * \u7F6E\u63DB\u5F8C\u306E\u4F4D\u7F6E\u304B\u3089\u7F6E\u63DB\u524D\u306E\u4F4D\u7F6E\u3078\u30DE\u30C3\u30D4\u30F3\u30B0\u3067\u304D\u308B\u6587\u5B57\u5217\n */\nexport class Replace {\n constructor(code) {\n this.history = [];\n this.code = code;\n }\n getText() {\n return this.code;\n }\n replaceAll(from, to) {\n while (true) {\n const index = this.getText().indexOf(from);\n if (index === -1) {\n break;\n }\n if (from.length !== to.length) {\n this.history.unshift(new ReplaceHistory(from.length, to.length, index));\n }\n this.code = this.code.replace(from, to);\n }\n }\n getSourcePosition(i) {\n // \u5C11\u3057\u9045\u3044\u3002\u30D1\u30FC\u30B9\u6642\u95931.4\u79D2\u306B\u5BFE\u3057\u30660.15\u79D2\u304B\u304B\u308B\u3002i\u304C\u5358\u8ABF\u5897\u52A0\u3059\u308B\u3053\u3068\u3092\u5229\u7528\u3057\u3066\u9AD8\u901F\u5316\u3067\u304D\u308B\u306F\u305A\u3002\n for (const item of this.history) {\n if (i >= item.index + item.to) { // \u7F6E\u63DB\u7BC4\u56F2\u3088\u308A\u5F8C\u308D\n i += item.from - item.to;\n }\n else if (item.index <= i && i < item.index + item.to) { // \u7F6E\u63DB\u7BC4\u56F2\n // \u7F6E\u63DB\u6587\u5B57\u5217\u304C2\u6587\u5B57\u4EE5\u4E0A\u306E\u3068\u304D\u3001\u6700\u5F8C\u306E\u6587\u5B57\u306F\u6700\u5F8C\u306E\u6587\u5B57\u3078\u30DE\u30C3\u30D7\u3059\u308B\u3002\u305D\u308C\u4EE5\u5916\u306F\u6700\u521D\u306E\u6587\u5B57\u3078\u30DE\u30C3\u30D7\u3059\u308B\u3002\n if (item.to >= 2 && i === item.index + item.to - 1) {\n i = item.index + item.from - 1;\n }\n else {\n i = item.index;\n }\n }\n }\n return i;\n }\n}\n/**\n * \u5B57\u53E5\u89E3\u6790\u3092\u884C\u3046\u524D\u306B\u5168\u89D2\u6587\u5B57\u3092\u534A\u89D2\u306B\u63C3\u3048\u308B\n * [memo]\n * \u305F\u3060\u3057\u3001\u6587\u5B57\u5217\u90E8\u5206\u3060\u3051\u306F\u3001\u305D\u306E\u307E\u307E\u5168\u89D2\u3067\u51FA\u529B\u3059\u308B\u3088\u3046\u306B\u3059\u308B\n * for https://github.com/kujirahand/nadesiko3/issues/94\n */\nexport class NakoPrepare {\n /** \u552F\u4E00\u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3092\u8FD4\u3059 */\n static getInstance() {\n if (!NakoPrepare._instance) {\n NakoPrepare._instance = new NakoPrepare();\n }\n return NakoPrepare._instance;\n }\n constructor() {\n // \u5358\u7D14\u306A\u5909\u63DB\u30C6\u30FC\u30D6\u30EB\n this.convertTable = new Map([\n // \u30CF\u30A4\u30D5\u30F3\u3078\u306E\u5909\u63DB\n // \u53C2\u8003) https://hydrocul.github.io/wiki/blog/2014/1101-hyphen-minus-wave-tilde\n // 0x2d: true, // ASCII\u306E\u30CF\u30A4\u30D5\u30F3\n [0x2010, '-'], // \u5225\u306E\u30CF\u30A4\u30D5\u30F3\n [0x2011, '-'], // \u6539\u884C\u3057\u306A\u3044\u30CF\u30A4\u30D5\u30F3\n [0x2013, '-'], // EN\u30C0\u30C3\u30B7\u30E5\n [0x2014, '-'], // EM\u30C0\u30C3\u30B7\u30E5\n [0x2015, '-'], // \u5168\u89D2\u306E\u30C0\u30C3\u30B7\u30E5\n [0x2212, '-'], // \u5168\u89D2\u306E\u30DE\u30A4\u30CA\u30B9\n // \u30C1\u30EB\u30C0\u306E\u5909\u63DB\n // 0x7e: true,\n [0x02dc, '~'], // \u5C0F\u3055\u306A\u30C1\u30EB\u30C0\n [0x02F7, '~'], // Modifier Letter Low Tilde\n [0x2053, '~'], // Swung Dash - \u8F9E\u66F8\u306E\u307F\u3060\u3057\n [0x223c, '~'], // Tilde Operator: \u6570\u5B66\u3067 Similar to\n [0x301c, '~'], // Wave Dash(\u4E00\u822C\u7684\u306A\u6CE2\u30C0\u30C3\u30B7\u30E5)\n [0xFF5E, '~'], // \u5168\u89D2\u30C1\u30EB\u30C0\n // \u30B9\u30DA\u30FC\u30B9\u306E\u5909\u63DB\n // \u53C2\u8003) http://anti.rosx.net/etc/memo/002_space.html\n // 0x20: true,\n [0x2000, ' '], // EN QUAD\n [0x2002, ' '], // EN SPACE\n [0x2003, ' '], // EM SPACE\n [0x2004, ' '], // THREE-PER-EM SPACE\n [0x2005, ' '], // FOUR-PER-EM SPACE\n [0x2006, ' '], // SIX-PER-EM SPACE\n [0x2007, ' '], // FIGURE SPACE\n [0x2009, ' '], // THIN SPACE\n [0x200A, ' '], // HAIR SPACE\n [0x200B, ' '], // ZERO WIDTH SPACE\n [0x202F, ' '], // NARROW NO-BREAK SPACE\n [0x205F, ' '], // MEDIUM MATHEMATICAL SPACE\n // [0x3000, ' '], // \u5168\u89D2\u30B9\u30DA\u30FC\u30B9 --- \u30A4\u30F3\u30C7\u30F3\u30C8\u91CF2\u3068\u3057\u3066\u6271\u3046\u305F\u3081\u306B\u30B3\u30E1\u30F3\u30C8\u30A2\u30A6\u30C8 (#issue)\n [0x3164, ' '], // HANGUL FILLER\n // \u305D\u306E\u4ED6\u306E\u5909\u63DB\n // [0x09, ' '], // TAB --> SPC\n [0x203B, '#'], // '\u203B' --- \u30B3\u30E1\u30F3\u30C8\n [0x3002, ';'], // \u53E5\u70B9\n [0x3010, '['], // '\u3010'\n [0x3011, ']'], // '\u3011'\n // \u8AAD\u70B9\u306F\u300C,\u300D\u306B\u5909\u63DB\u3059\u308B (#877)\n [0x3001, ','], // \u8AAD\u70B9 --- JSON\u8A18\u6CD5\u3067\u300C,\u300D\u3068\u300C\u3001\u300D\u3092\u533A\u5225\u3057\u305F\u3044\u306E\u3067\u8AAD\u70B9\u306F\u5909\u63DB\u3057\u306A\u3044\u3053\u3068\u306B\u3002(#276)\n [0xFF0C, ','], // \u8AAD\u70B9 '\uFF0C' \u8AD6\u6587\u306A\u3069\u3067\u5229\u7528\u3001\u305F\u3060\u3057\u53E5\u70B9\u306F\u30C9\u30C3\u30C8\u3068\u88AB\u308B\u306E\u3067\u5909\u63DB\u3057\u306A\u3044 (#735)\n [0x2715, '*'], // \u2715\u306E\u7D75\u6587\u5B57 (#1781) @see https://ja.wikipedia.org/wiki/%C3%97#%E7%AC%A6%E5%8F%B7%E4%BD%8D%E7%BD%AE\n [0x2716, '*'], // \u2716\u306E\u7D75\u6587\u5B57 (#1183)\n [0x2717, '*'], // \u2717\u306E\u7D75\u6587\u5B57 (#1781)\n [0x2718, '*'], // \u2718\u306E\u7D75\u6587\u5B57 (#1781)\n [0x274C, '*'], // \u274C\u306E\u7D75\u6587\u5B57 (#1781) CROSS MARK\n [0x2795, '+'], // +\u306E\u7D75\u6587\u5B57 (#1183)\n [0x2796, '-'], // -\u306E\u7D75\u6587\u5B57 (#1183)\n [0x2797, '\u00F7'], // \u00F7\u306E\u7D75\u6587\u5B57 (#1183)\n [0x1F7F0, '='] // \uD83D\uDFF0\u306E\u7D75\u6587\u5B57(#1781)\n ]);\n }\n // \u4E00\u6587\u5B57\u3060\u3051\u5909\u63DB\n /**\n * @param {string} ch\n */\n convert1ch(ch) {\n if (!ch) {\n return '';\n }\n const c = ch.codePointAt(0) || 0;\n // \u30C6\u30FC\u30D6\u30EB\u306B\u3088\u308B\u5909\u63DB\n const c2 = this.convertTable.get(c) || '';\n if (c2) {\n return c2;\n }\n // ASCII\u30A8\u30EA\u30A2\n if (c < 0x7F) {\n return ch;\n }\n // \u5168\u89D2\u534A\u89D2\u5358\u7D14\u5909\u63DB\u53EF\u80FD --- '\uFF01' - '\uFF5E'\n if (c >= 0xFF01 && c <= 0xFF5E) {\n const c2 = c - 0xFEE0;\n return String.fromCodePoint(c2);\n }\n return ch;\n }\n /** convert code */\n convert(code) {\n if (!code) {\n return [];\n }\n const src = new Replace(code);\n // \u6539\u884C\u30B3\u30FC\u30C9\u3092\u7D71\u4E00\n src.replaceAll('\\r\\n', '\\n');\n src.replaceAll('\\r', '\\n');\n let flagStr = false; // \u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u5185\u304B\u3069\u3046\u304B\n let flagStr2 = false; // \u7D75\u6587\u5B57\u306B\u3088\u308B\u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u5185\u304B\u3069\u3046\u304B\n let endOfStr = ''; // \u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u3092\u7D42\u4E86\u3055\u305B\u308B\u8A18\u53F7\n const res = [];\n let left = 0; // \u73FE\u5728\u51E6\u7406\u4E2D\u306E\u90E8\u5206\u6587\u5B57\u5217\u306E\u5DE6\u7AEF\u306E\u4F4D\u7F6E\n let str = ''; // \u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u306E\u5024\n // \u4E00\u6587\u5B57\u305A\u3064\u5168\u89D2\u3092\u534A\u89D2\u306B\u7F6E\u63DB\u3059\u308B\n let i = 0;\n while (i < src.getText().length) {\n const c = src.getText().charAt(i);\n const ch2 = src.getText().substring(i, i + 2);\n // \u6587\u5B57\u5217\u306E\u3068\u304D\n if (flagStr) {\n if (c === endOfStr) {\n flagStr = false;\n res.push(new ConvertResult(str + endOfStr, src.getSourcePosition(left)));\n i++;\n left = i;\n continue;\n }\n str += c;\n i++;\n continue;\n }\n // \u7D75\u6587\u5B57\u5236\u5FA1\u306B\u3088\u308B\u6587\u5B57\u5217\u306E\u3068\u304D\n if (flagStr2) {\n if (ch2 === endOfStr) {\n flagStr2 = false;\n if (endOfStr === '\uFF0A\uFF0F') {\n endOfStr = '*/';\n } // \u5F37\u5236\u5909\u63DB\n res.push(new ConvertResult(str + endOfStr, src.getSourcePosition(left)));\n i += 2;\n left = i;\n continue;\n }\n str += c;\n i++;\n continue;\n }\n // \u6587\u5B57\u5217\u5224\u5B9A\n if (c === '\u300C') {\n res.push(new ConvertResult(c, src.getSourcePosition(left)));\n i++;\n left = i;\n flagStr = true;\n endOfStr = '\u300D';\n str = '';\n continue;\n }\n if (c === '\u300E') {\n res.push(new ConvertResult(c, src.getSourcePosition(left)));\n i++;\n left = i;\n flagStr = true;\n endOfStr = '\u300F';\n str = '';\n continue;\n }\n if (c === '\u201C') {\n res.push(new ConvertResult(c, src.getSourcePosition(left)));\n i++;\n left = i;\n flagStr = true;\n endOfStr = '\u201D';\n str = '';\n continue;\n }\n // JavaScript\u306E\u5185\u90E8\u7684\u306B\u306F\u6587\u5B57\u5217\u306FUTF-16\u3067\u6271\u308F\u308C\u3066\u308B\u306E\u3067 charAt \u3092\u4F7F\u3046\u5834\u5408 \u7D75\u6587\u5B57\u304C2\u6587\u5B57\u6271\u3044\u306B\u306A\u308B --- #726\n if (ch2 === '\uD83C\uDF34' || ch2 === '\uD83C\uDF3F') {\n res.push(new ConvertResult(ch2, src.getSourcePosition(left)));\n i += 2;\n left = i;\n flagStr2 = true;\n endOfStr = ch2;\n str = '';\n continue;\n }\n const c1 = this.convert1ch(c);\n if (c1 === '\"' || c1 === '\\'') {\n res.push(new ConvertResult(c1, src.getSourcePosition(left)));\n i++;\n left = i;\n flagStr = true;\n endOfStr = c;\n str = '';\n continue;\n }\n // \u30E9\u30A4\u30F3\u30B3\u30E1\u30F3\u30C8\u3092\u98DB\u3070\u3059 (#725)\n if (c1 === '#') {\n res.push(new ConvertResult(c1, src.getSourcePosition(left)));\n i++;\n left = i;\n flagStr = true; // \u672C\u5F53\u306F\u30B3\u30E1\u30F3\u30C8\u3060\u3051\u3069\u4FBF\u5B9C\u4E0A\n endOfStr = '\\n';\n str = '';\n continue;\n }\n // \u30E9\u30A4\u30F3\u30B3\u30E1\u30F3\u30C8\u3092\u98DB\u3070\u3059\n if (ch2 === '//' || ch2 === '\uFF0F\uFF0F') {\n res.push(new ConvertResult('//', src.getSourcePosition(left))); // \u5F37\u5236\u7684\u306B'//'\u3068\u3059\u308B\n i += 2;\n left = i;\n flagStr = true;\n endOfStr = '\\n';\n str = '';\n continue;\n }\n // \u8907\u6570\u884C\u30B3\u30E1\u30F3\u30C8\u5185\u3092\u98DB\u3070\u3059\n if (ch2 === '\uFF0F\uFF0A') {\n res.push(new ConvertResult('/*', src.getSourcePosition(left))); // \u5F37\u5236\u5909\u63DB\n i += 2;\n left = i;\n flagStr2 = true;\n endOfStr = '\uFF0A\uFF0F';\n str = '';\n continue;\n }\n // \u8907\u6570\u884C\u30B3\u30E1\u30F3\u30C8\u5185\u3092\u98DB\u3070\u3059 (#731)\n if (ch2 === '/*') {\n res.push(new ConvertResult(ch2, src.getSourcePosition(left)));\n i += 2;\n left = i;\n flagStr2 = true;\n endOfStr = '*/';\n str = '';\n continue;\n }\n // \u5909\u63DB\u3057\u305F\u3082\u306E\u3092\u8FFD\u52A0\n res.push(new ConvertResult(c1, src.getSourcePosition(left)));\n i++;\n left = i;\n }\n if (flagStr || flagStr2) {\n if (endOfStr === '\"' || endOfStr === '\\'' || endOfStr === '\u300D' || endOfStr === '\u300F') {\n // throw new Error(`(${startLineOfStr+1}\u884C\u76EE) \u6587\u5B57\u5217\u304C\u8A18\u53F7\u300E${endOfStr}\u300F\u3067\u9589\u3058\u3089\u308C\u3066\u3044\u307E\u305B\u3093\u3002`)\n // \u3053\u3053\u3067\u306F\u30A8\u30E9\u30FC\u306F\u30EA\u30DD\u30FC\u30C8\u3057\u306A\u3044 nako_lex_rule.js \u3067\u30A8\u30E9\u30FC\u3092\u30EA\u30DD\u30FC\u30C8\u3059\u308B\n }\n else {\n // \u6587\u5B57\u5217\u4EE5\u5916\u306E\u30B3\u30E1\u30F3\u30C8\u306A\u3069\u306F\u81EA\u52D5\u3067\u9589\u3058\u308B\n res.push(new ConvertResult(str + endOfStr, src.getSourcePosition(left)));\n }\n }\n return res;\n }\n}\n/** \u306A\u3067\u3057\u3053\u306E\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u306E\u30E2\u30FC\u30C9(!\u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u306A\u3069)\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u308B\u304B\u8ABF\u3079\u308B */\nexport function checkNakoMode(code, modeNames) {\n // \u5148\u982D\u306E256\u6587\u5B57\u306B\u3064\u3044\u3066\u8ABF\u3079\u308B\n code = code.substring(0, 256);\n // \u5168\u89D2\u534A\u89D2\u306E\u63FA\u308C\u3092\u5438\u53CE\n code = code.replace(/(\uFF01|\uD83D\uDCA1)/, '!');\n // \u7BC4\u56F2\u30B3\u30E1\u30F3\u30C8\u3092\u524A\u9664\n code = code.replace(/\\/\\*.*?\\*\\//g, '');\n // \u6BCE\u6587\u8ABF\u3079\u308B\n const lines = code.split(/[;\u3002\\n]/, 30);\n for (let line of lines) {\n line = line.replace(/^\\s+/, '').replace(/\\s+$/, ''); // trim\n if (modeNames.indexOf(line) >= 0) {\n return true;\n }\n }\n return false;\n}\n", "/**\n * \u30D1\u30FC\u30B5\u30FC\u304C\u751F\u6210\u3057\u305F\u4E2D\u9593\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u5B9F\u969B\u306EJavaScript\u306E\u30B3\u30FC\u30C9\u306B\u5909\u63DB\u3059\u308B\u3002\n * \u306A\u304A\u901F\u5EA6\u512A\u5148\u3067\u5FE0\u5B9F\u306BJavaScript\u306E\u30B3\u30FC\u30C9\u3092\u751F\u6210\u3059\u308B\u3002\n */\nimport { NakoSyntaxError } from './nako_errors.mjs';\n// \u306A\u3067\u3057\u3053\u3067\u5B9A\u7FA9\u3057\u305F\u95A2\u6570\u306E\u958B\u59CB\u30B3\u30FC\u30C9\u3068\u7D42\u4E86\u30B3\u30FC\u30C9\nconst topOfFunction = '(function(){\\n';\nconst endOfFunction = '})';\nconst topOfFunctionAsync = '(async function(){\\n';\n/** \u30B3\u30FC\u30C9\u751F\u6210\u30AA\u30D7\u30B7\u30E7\u30F3 */\nexport class NakoGenOptions {\n constructor(isTest = false, importFiles = [], codeStandalone = '', convEnv = '') {\n this.isTest = isTest;\n this.codeStandalone = codeStandalone;\n this.codeEnv = convEnv;\n this.importFiles = ['plugin_system.mjs', 'plugin_math.mjs', 'plugin_csv.mjs', 'plugin_promise.mjs', 'plugin_test.mjs'];\n for (const fname of importFiles) {\n this.importFiles.push(fname);\n }\n }\n}\n/**\n * \u69CB\u6587\u6728\u304B\u3089JS\u306E\u30B3\u30FC\u30C9\u3092\u751F\u6210\u3059\u308B\u30AF\u30E9\u30B9\n */\nexport class NakoGen {\n /** constructor\n * @param com \u30B3\u30F3\u30D1\u30A4\u30E9\u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\n */\n constructor(com) {\n /**\n * \u51FA\u529B\u3059\u308BJavaScript\u30B3\u30FC\u30C9\u306E\u30D8\u30C3\u30C0\u30FC\u90E8\u5206\u3067\u5B9A\u7FA9\u3059\u308B\u5FC5\u8981\u306E\u3042\u308B\u95A2\u6570\u3002fn\u306Fjs\u306E\u30B3\u30FC\u30C9\u3002\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u95A2\u6570\u306F\u542B\u307E\u308C\u306A\u3044\u3002\n */\n this.nakoFuncList = new Map(com.getNakoFuncList());\n /**\n * \u306A\u3067\u3057\u3053\u3067\u5B9A\u7FA9\u3057\u305F\u30C6\u30B9\u30C8\u306E\u4E00\u89A7\n */\n this.nakoTestFuncs = new Map();\n /**\n * \u30D7\u30ED\u30B0\u30E9\u30E0\u5185\u3067\u53C2\u7167\u3055\u308C\u305F\u95A2\u6570\u306E\u30EA\u30B9\u30C8\u3002\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u547D\u4EE4\u3092\u542B\u3080\u3002\n * JavaScript\u5358\u4F53\u3067\u5B9F\u884C\u3059\u308B\u3068\u304D\u3001\u3053\u306E\u30EA\u30B9\u30C8\u306B\u3042\u308B\u95A2\u6570\u306E\u5B9A\u7FA9\u3092JavaScript\u30B3\u30FC\u30C9\u306E\u5148\u982D\u306B\u4ED8\u3051\u8DB3\u3059\u3002\n */\n this.usedFuncSet = new Set();\n /**\n * \u30EB\u30FC\u30D7\u6642\u306E\u4E00\u6642\u5909\u6570\u304C\u88AB\u3089\u306A\u3044\u3088\u3046\u306BID\u3067\u7BA1\u7406\n */\n this.loopId = 1;\n /**\n * \u975E\u540C\u95A2\u6570\u3092\u4F55\u56DE\u4F7F\u3063\u305F\u304B\n */\n this.numAsyncFn = 0;\n /**\n * \u95A2\u6570\u5B9A\u7FA9\u306E\u969B\u3001\u95A2\u6570\u306E\u4E2D\u3067asyncFn=true\u306E\u95A2\u6570\u3092\u547C\u3073\u51FA\u3057\u305F\u304B\u3069\u3046\u304B\u3092\u8ABF\u3079\u308B @see convDefFuncCommon\n */\n this.usedAsyncFn = false;\n /** \u5909\u63DB\u4E2D\u306E\u51E6\u7406\u304C\u3001\u30EB\u30FC\u30D7\u306E\u4E2D\u304B\u3069\u3046\u304B\u3092\u5224\u5B9A\u3059\u308B */\n this.flagLoop = false;\n this.__self = com;\n /** \u30B3\u30FC\u30C9\u30B8\u30A7\u30CD\u30EC\u30FC\u30BF\u306E\u7A2E\u985E */\n this.genMode = 'sync';\n /** \u884C\u756A\u53F7\u3068\u30D5\u30A1\u30A4\u30EB\u540D\u304C\u5206\u304B\u308B\u3068\u304D\u306F `l123:main.nako3`\u3001\u884C\u756A\u53F7\u3060\u3051\u5206\u304B\u308B\u3068\u304D\u306F `l123`\u3001\u305D\u3046\u3067\u306A\u3051\u308C\u3070\u4EFB\u610F\u306E\u6587\u5B57\u5217\u3002 */\n this.lastLineNo = null;\n /** \u30B9\u30BF\u30C3\u30AF */\n this.varslistSet = this.setVarslistSet(com.__varslist);\n /** \u30B9\u30BF\u30C3\u30AF\u30C8\u30C3\u30D7 */\n this.varsSet = { isFunction: false, names: new Set(), readonly: new Set() };\n this.varslistSet[2] = this.varsSet;\n this.functionContextStack = [];\n // \u73FE\u5728\u5B9A\u7FA9\u4E2D\u306E\u95A2\u6570\u540D\n this.defFuncName = '';\n // 1\u4EE5\u4E0A\u306E\u3068\u304D\u9AD8\u901F\u5316\u3059\u308B\u3002\n // \u5B9F\u884C\u901F\u5EA6\u512A\u5148\u30D6\u30ED\u30C3\u30AF\u5185\u30671\u5897\u3048\u308B\u3002\n this.speedMode = {\n lineNumbers: 0, // \u884C\u756A\u53F7\u3092\u51FA\u529B\u3057\u306A\u3044\n implicitTypeCasting: 0, // \u6570\u5024\u52A0\u7B97\u3067parseFloat\u3092\u51FA\u529B\u3057\u306A\u3044\n invalidSore: 0, // \u300C\u305D\u308C\u300D\u3092\u7528\u3044\u306A\u3044\n forcePure: 0 // \u5168\u3066\u306E\u30B7\u30B9\u30C6\u30E0\u547D\u4EE4\u3092pure\u3068\u3057\u3066\u6271\u3046\u3002\u547D\u4EE4\u304B\u3089\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3078\u306E\u53C2\u7167\u304C\u51FA\u6765\u306A\u304F\u306A\u308B\u3002\n };\n // 1\u4EE5\u4E0A\u306E\u3068\u304D\u6E2C\u5B9A\u3092inject\u3059\u308B\u3002\n // \u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u30E2\u30CB\u30BF\u306E\u30D6\u30ED\u30C3\u30AF\u5185\u30671\u5897\u3048\u308B\u3002\n this.performanceMonitor = {\n userFunction: 0, // \u547C\u3073\u51FA\u3055\u308C\u305F\u30E6\u30FC\u30B6\u95A2\u6570\n systemFunction: 0, // \u30B7\u30B9\u30C6\u30E0\u95A2\u6570(\u547C\u3073\u51FA\u3057\u30B3\u30FC\u30C9\u3092\u542B\u3080)\n systemFunctionBody: 0, // \u30B7\u30B9\u30C6\u30E0\u95A2\u6570(\u547C\u3073\u51FA\u3057\u30B3\u30FC\u30C9\u3092\u9664\u304F)\n mumeiId: 0\n };\n /**\n * \u672A\u5B9A\u7FA9\u306E\u5909\u6570\u306E\u8B66\u544A\u3092\u884C\u3046\n */\n this.constPools = [];\n this.constPoolsTemplate = [];\n // undefined\u306E\u8B66\u544A\u5236\u5FA1 (\u300C\u53B3\u3057\u304F\u30C1\u30A7\u30C3\u30AF\u300D\u3067\u30AA\u30F3\u306B\u306A\u308B)\n this.warnUndefinedVar = false;\n this.warnUndefinedReturnUserFunc = false;\n this.warnUndefinedCallingUserFunc = false;\n this.warnUndefinedCallingSystemFunc = false;\n this.warnUndefinedCalledUserFuncArgs = false;\n this.debugOption = com.debugOption;\n }\n static isValidIdentifier(name) {\n // TODO: \u3044\u3089\u306A\u305D\u3046\u306A\u90E8\u5206\u306F\u524A\u308B\n // https://stackoverflow.com/a/9337047\n // eslint-disable-next-line no-misleading-character-class\n 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(name);\n }\n /**\n * com.__varslist\u3092\u5143\u306B\u3001this.varslistSet\u3092\u8A2D\u5B9A\n */\n setVarslistSet(varslist) {\n const vlist = [];\n // \u5909\u6570\u540D\u306E\u4E00\u89A7\u3092VarsSet\u306B\u683C\u7D0D (0: \u30B7\u30B9\u30C6\u30E0\u5909\u6570, 1: \u30B0\u30ED\u30FC\u30D0\u30EB\u5909\u6570, 2: \u30ED\u30FC\u30AB\u30EB\u5909\u6570) 0\u30681\u306E\u307F\u79FB\u3059\n for (let i = 0; i <= 1; i++) {\n const scope = varslist[i];\n const names = new Set(scope.keys());\n names.delete('meta'); // remove 'meta' from names\n vlist[i] = { isFunction: false, names, readonly: new Set() };\n }\n return vlist;\n }\n /**\n * \u6539\u884C\u3092\u57CB\u3081\u8FBC\u3080\n */\n convLineno(node, forceUpdate = false, incLine = 0) {\n // \u30B9\u30D4\u30FC\u30C9\u30E2\u30FC\u30C9\u3067\u306F\u884C\u756A\u53F7\u3092\u57CB\u3081\u8FBC\u307E\u306A\u3044\n if (this.speedMode.lineNumbers > 0) {\n return '';\n }\n const lineNo = node.line + incLine;\n let lineNoStr;\n if (typeof node.line !== 'number') {\n lineNoStr = 'unknown';\n }\n else if (typeof node.file !== 'string') {\n lineNoStr = `l${lineNo}`;\n }\n else {\n lineNoStr = `l${lineNo}:${node.file}`;\n }\n // \u5F37\u5236\u7684\u306B\u884C\u756A\u53F7\u3092\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3059\u308B\u304B\n if (!forceUpdate) {\n if (lineNoStr === this.lastLineNo) {\n return '';\n }\n this.lastLineNo = lineNoStr;\n }\n // \u5B9F\u884C\u884C\u306E\u30C7\u30FC\u30BF\n const lineDataJSON = JSON.stringify(lineNoStr);\n // \u30C7\u30D0\u30C3\u30B0\u5B9F\u884C\u304B\n let debugCode = '';\n if (this.debugOption.useDebug) {\n // messageAction\n if (this.debugOption.messageAction) {\n debugCode += `window.postMessage({action:'${this.debugOption.messageAction}',` +\n `line: ${lineDataJSON}});`;\n }\n // waitTime\n if (lineNo >= 1) {\n if (this.debugOption.waitTime > 0) {\n debugCode += `await __v0.get('\u79D2\u5F85')(${this.debugOption.waitTime},__self);`;\n }\n // breakpoints\n this.numAsyncFn += 1;\n this.usedAsyncFn = true;\n debugCode += `await __v0.get('__DEBUG_BP_WAIT')(${lineNo}, __self);`;\n }\n // end\n debugCode += 'if (__v0.get(\\'__forceClose\\')) { return -1 };';\n }\n // \u4F8B: __v0.set('__line', 'l1:main.nako3')\n // return `__v0.set('__line', ${lineDataJSON});` + debugCode\n return `__line(${lineDataJSON});` + debugCode;\n }\n /**\n * \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u306E\u53D6\u5F97\u7528JavaScript\u30B3\u30FC\u30C9\u3092\u751F\u6210\u3059\u308B\u3002\n * @param {string} name\n */\n varname_get(name) {\n if (this.varslistSet.length === 3) {\n // \u30B0\u30ED\u30FC\u30D0\u30EB\n return `__self.__varslist[${2}].get(${JSON.stringify(name)})`;\n }\n else {\n // \u30ED\u30FC\u30AB\u30EB\n return `__self.__vars.get(${JSON.stringify(name)})`;\n }\n }\n /**\n * \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u306E\u8A2D\u5B9A\u7528JavaScript\u30B3\u30FC\u30C9\u3092\u751F\u6210\u3059\u308B\u3002\n * @param {string} name\n * @param {string} jsvalue\n */\n varname_set(name, jsvalue) {\n if (this.varslistSet.length === 3) {\n return `__self.__varslist[2].set(${JSON.stringify(name)}, (${jsvalue}))`;\n }\n else {\n return `__self.__vars.set(${JSON.stringify(name)}, (${jsvalue}))`;\n }\n }\n /**\n * \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u306E\u8A2D\u5B9A\u7528JavaScript\u30B3\u30FC\u30C9\u3092\u751F\u6210\u3059\u308B\u3002\n * @param {string} name\n * @param {string} jsvalue\n */\n varname_set_sys(name, jsvalue) {\n return `__self.__setSysVar(${JSON.stringify(name)}, (${jsvalue}))`;\n }\n /**\n * @param {string} name\n * @returns {string}\n */\n static getFuncName(name) {\n if (name.indexOf('__') >= 0) { // \u30B9\u30B3\u30FC\u30D7\u304C\u3042\u308B\u5834\u5408\n const a = name.split('__');\n const scope = a[0];\n const name3 = NakoGen.getFuncName(a[1]);\n return `${scope}__${name3}`;\n }\n let name2 = name.replace(/[\u3041-\u3093]+$/, '');\n if (name2 === '') {\n name2 = name;\n }\n return name2;\n }\n /** @param {Ast} node */\n static convPrint(node) {\n return `__print(${node});`;\n }\n /** @param {AstStrValue} node */\n convRequire(node) {\n const moduleName = node.value;\n return this.convLineno(node, false) +\n `__module['${moduleName}'] = require('${moduleName}');\\n`;\n }\n /**\n * \u30D7\u30ED\u30B0\u30E9\u30E0\u306E\u5B9F\u884C\u306B\u5FC5\u8981\u306A\u95A2\u6570\u5B9A\u7FA9\u3092\u66F8\u304D\u51FA\u3059(\u30B0\u30ED\u30FC\u30D0\u30EB\u9818\u57DF)\n * convGen\u306E\u7D50\u679C\u3092\u5229\u7528\u3059\u308B\u305F\u3081\u3001convGen\u306E\u5F8C\u306B\u547C\u3073\u51FA\u3059\u3053\u3068\u3002\n * @param com\n * @param opt\n */\n getDefFuncCode(com, opt) {\n let code = '';\n // \u3088\u304F\u4F7F\u3046\u5909\u6570\u306E\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\n // jsInit \u306E\u90E8\u5206\u306B\u8A2D\u5B9A\u3059\u308B\u30B3\u30FC\u30C9\n code += `const nakoVersion = { version: ${JSON.stringify(com.version)} }\\n`;\n code += 'const __self = self;\\n';\n code += '__self.__self = __self;\\n';\n code += 'const __varslist = __self.__varslist;\\n';\n code += 'const __module = __self.__module;\\n';\n code += 'const __v0 = __self.__v0 = __self.__varslist[0];\\n';\n code += 'const __v1 = __self.__v1 = __self.__varslist[1];\\n';\n code += 'const __vars = __self.__vars = __self.__varslist[2];\\n';\n code += 'const __nako_make_closure = (local, parent) => ({\\n' +\n ' has: (key) => local.has(key) || (parent !== null && parent.has(key)),\\n' +\n ' get: (key) => local.has(key) ? local.get(key) : (parent !== null ? parent.get(key) : undefined),\\n' +\n ' set: (key, value) => { if (local.has(key) || parent === null || !parent.has(key)) { local.set(key, value); } else { parent.set(key, value); } return value; }\\n' +\n '});\\n';\n code += `const __modList = __self.__modList = ${JSON.stringify(com.getModList())}\\n`;\n code += 'const __line = (lineno) => { __self.__v0.set(\\'__line\\', lineno); }\\n';\n code += '__v0.set(\\'__line\\', \\'l0:__getDefFuncCode\\');\\n';\n code += '__v0.set(\\'__forceClose\\', false);\\n';\n code += `__v0.set('__useDebug', ${String(this.debugOption.useDebug)});\\n`;\n // \u5B9A\u6570\u3092\u57CB\u3081\u8FBC\u3080\n code += '__self.constPools = ' + JSON.stringify(this.constPools) + ';\\n';\n code += '__self.constPoolsTemplate = ' + JSON.stringify(this.constPoolsTemplate) + ';\\n';\n //\n code += '__self.__propAccessor = [];\\n';\n // \u306A\u3067\u3057\u3053\u306E\u95A2\u6570\u5B9A\u7FA9\u3092\u884C\u3046\n let nakoFuncCode = '';\n this.nakoFuncList.forEach((value, key) => {\n const f = trim(cleanGeneratedCode(String(value.fn), 1));\n const isAsync = value.asyncFn ? 'true' : 'false';\n nakoFuncCode += '' +\n `//[DEF_FUNC name='${key}' asyncFn=${isAsync}]\\n` +\n `__self.__varslist[1].set(\"${key}\", ${f});\\n` +\n `//[/DEF_FUNC name='${key}']\\n`;\n });\n if (nakoFuncCode !== '') {\n code += '__v0.set(\\'__line\\', \\'\u95A2\u6570\u306E\u5B9A\u7FA9\\');\\n' + nakoFuncCode;\n }\n // \u30C6\u30B9\u30C8\u306E\u5B9A\u7FA9\u3092\u884C\u3046\n if (opt.isTest) {\n let testCode = 'const __tests = [];\\n';\n this.nakoTestFuncs.forEach((value) => {\n const f = value.fn;\n testCode += `${String(f)};\\n`;\n });\n if (testCode !== '') {\n code += '__v0.set(\\'__line\\', \\'\u30C6\u30B9\u30C8\u306E\u5B9A\u7FA9\\');\\n';\n code += testCode + '\\n';\n }\n }\n return code;\n }\n /**\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u8FFD\u52A0\n * @param po \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n */\n addPlugin(po) {\n return this.__self.addPlugin(po);\n }\n /**\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u8FFD\u52A0(\u30D6\u30E9\u30A6\u30B6\u5411\u3051)\n * @param name \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u540D\n * @param po \u95A2\u6570\u30EA\u30B9\u30C8\n */\n addPluginObject(name, po) {\n this.__self.addPluginObject(name, po);\n }\n /**\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u8FFD\u52A0(Node.js\u5411\u3051)\n * @param objName \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u540D\n * @param path \u30D5\u30A1\u30A4\u30EB\u30D1\u30B9\n * @param po \u767B\u9332\u3059\u308B\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n */\n addPluginFile(objName, path, po) {\n this.__self.addPluginFile(objName, path, po);\n }\n /**\n * \u95A2\u6570\u3092\u8FFD\u52A0\u3059\u308B\n * @param key \u95A2\u6570\u540D\n * @param josi \u52A9\u8A5E\n * @param fn \u95A2\u6570\n */\n addFunc(key, josi, fn) {\n this.__self.addFunc(key, josi, fn);\n }\n /**\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u95A2\u6570\u3092\u53C2\u7167\u3059\u308B\n * @param key \u30D7\u30E9\u30B0\u30A4\u30F3\u95A2\u6570\u306E\u95A2\u6570\u540D\n * @returns \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n */\n getFunc(key) {\n return this.__self.getFunc(key);\n }\n /**\n * \u95A2\u6570\u3092\u5148\u306B\u767B\u9332\u3057\u3066\u3057\u307E\u3046\n */\n registerFunction(ast) {\n if (ast.type !== 'block') {\n throw NakoSyntaxError.fromNode('\u69CB\u6587\u89E3\u6790\u306B\u5931\u6557\u3057\u3066\u3044\u307E\u3059\u3002\u69CB\u6587\u306F\u5FC5\u305Ablock\u304C\u5148\u982D\u306B\u306A\u308A\u307E\u3059', ast);\n }\n /** \u95A2\u6570\u4E00\u89A7 */\n const funcList = [];\n // \u306A\u3067\u3057\u3053\u95A2\u6570\u3092\u5B9A\u7FA9\u3057\u3066 this.nako_func[name] \u306B\u5B9A\u7FA9\u3059\u308B\n const registFunc = (t) => {\n // (t.type == 'def_func') \u306F\u30C1\u30A7\u30C3\u30AF\u6E08\u307F\n if (!t.name) {\n throw new Error('[System Error] \u95A2\u6570\u306E\u5B9A\u7FA9\u3067\u95A2\u6570\u540D\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093');\n }\n const name = t.name;\n this.usedFuncSet.add(name);\n this.__self.__varslist[1].set(name, () => { }); // \u4E8B\u524D\u306B\u9069\u5F53\u306A\u5024\u3092\u8A2D\u5B9A\n this.varslistSet[1].names.add(name); // global\n const meta = t.meta;\n if (!meta) {\n throw new Error('[System Error] \u95A2\u6570\u306E\u5B9A\u7FA9\u3067\u95A2\u6570\u540D\u306E\u30E1\u30BF\u60C5\u5831\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093');\n }\n this.nakoFuncList.set(name, {\n josi: meta.josi,\n fn: () => { },\n type: 'func',\n asyncFn: !!t.asyncFn,\n isExport: t.isExport\n });\n funcList.push({ name, node: t });\n };\n const registFuncs = (ast) => {\n // blocks\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u6301\u3063\u3066\u3044\u308B\u304B\uFF1F\n if (ast.blocks) {\n // \u5404\u30D6\u30ED\u30C3\u30AF\u3092\u304F\u307E\u306A\u304F\u5DE1\u56DE\u30C1\u30A7\u30C3\u30AF\n for (const t of ast.blocks) {\n if (t.type === 'def_func') { // \u95A2\u6570\u5B9A\u7FA9\n registFunc(t);\n }\n else {\n registFuncs(t);\n }\n }\n }\n };\n // \u95A2\u6570\u306E\u767B\u9332\n registFuncs(ast);\n // __self.__varslist\u306E\u5909\u66F4\u3092\u53CD\u6620\n const initialNames = new Set();\n if (this.speedMode.invalidSore === 0) {\n initialNames.add('\u305D\u308C');\n }\n this.varsSet = { isFunction: false, names: initialNames, readonly: new Set() };\n this.varslistSet = this.setVarslistSet(this.__self.__varslist);\n this.varslistSet[2] = this.varsSet;\n }\n /**\n * @param node\n * @param opt\n */\n convGen(node, opt) {\n const result = this.convLineno(node, false) + this._convGen(node, true);\n if (opt.isTest) {\n return '';\n }\n else {\n return result;\n }\n }\n /**\n * @param {Ast} node\n * @param {boolean} isExpression\n */\n _convGen(node, isExpression) {\n if (!node) {\n return '';\n }\n let code = '';\n if (node instanceof Array) {\n for (let i = 0; i < node.length; i++) {\n const n = node[i];\n code += this._convGen(n, isExpression);\n }\n return code;\n }\n if (node === null) {\n return 'null';\n }\n if (node === undefined) {\n return 'undefined';\n }\n if (typeof (node) !== 'object') {\n return '' + String(node);\n }\n // switch\n switch (node.type) {\n case 'nop':\n break;\n case 'block':\n code += this.convBlock(node);\n break;\n case 'comment':\n case 'eol':\n code += this.convComment(node);\n break;\n case 'run_mode':\n code += this.convRunMode(node);\n break;\n case 'break':\n code += this.convCheckLoop(node, 'break');\n break;\n case 'continue':\n code += this.convCheckLoop(node, 'continue');\n break;\n case 'end':\n code += '__v0.get(\\'\u7D42\\')(__self);';\n break;\n case 'number':\n code += node.value;\n break;\n case 'bigint':\n code += node.value;\n break;\n case 'string':\n code += this.convString(node);\n break;\n case 'def_local_var':\n code += this.convDefLocalVar(node);\n break;\n case 'def_local_varlist':\n code += this.convDefLocalVarlist(node);\n break;\n case 'let':\n code += this.convLet(node);\n break;\n case 'let_prop':\n code += this.convLetProp(node);\n break;\n case 'ref_prop':\n code += this.convRefProp(node);\n break;\n case 'inc':\n code += this.convInc(node);\n break;\n case 'word':\n case 'variable':\n code += this.convGetVar(node);\n break;\n case 'op':\n case 'calc':\n code += this.convOp(node);\n break;\n case 'renbun':\n code += this.convRenbun(node);\n break;\n case 'not':\n code += '((' + this._convGen(node.blocks[0], true) + ')?false:true)';\n break;\n case 'func':\n case 'func_pointer':\n case 'calc_func':\n code += this.convCallFunc(node, isExpression);\n break;\n case 'call_value':\n code += this.convCallValue(node, isExpression);\n break;\n case 'if':\n code += this.convIf(node);\n break;\n case 'for':\n code += this.convFor(node);\n break;\n case 'foreach': // \u53CD\u5FA9\n code += this.convForeach(node);\n break;\n case 'repeat_times': // \u56DE\n code += this.convRepeatTimes(node);\n break;\n case 'speed_mode':\n code += this.convSpeedMode(node, isExpression);\n break;\n case 'performance_monitor':\n code += this.convPerformanceMonitor(node, isExpression);\n break;\n case 'while':\n code += this.convWhile(node);\n break;\n case 'atohantei':\n code += this.convAtohantei(node);\n break;\n case 'switch':\n code += this.convSwitch(node);\n break;\n case 'let_array':\n code += this.convLetArray(node);\n break;\n case 'ref_array':\n code += this.convRefArray(node);\n break;\n case 'ref_array_value':\n code += this.convRefArrayValue(node);\n break;\n case 'json_array':\n code += this.convJsonArray(node);\n break;\n case 'json_obj':\n code += this.convJsonObj(node);\n break;\n case 'bool':\n code += (node.value) ? 'true' : 'false';\n break;\n case 'null':\n code += 'null';\n break;\n case 'def_test':\n code += this.convDefTest(node);\n break;\n case 'def_func':\n code += this.convDefFunc(node);\n break;\n case 'func_obj':\n code += this.convFuncObj(node);\n break;\n case 'return':\n code += this.convReturn(node);\n break;\n case 'try_except':\n code += this.convTryExcept(node);\n break;\n case 'require':\n code += this.convRequire(node);\n break;\n default:\n throw new Error('System Error: unknown_type=' + node.type);\n }\n return code;\n }\n /** \u5909\u6570\u3092\u691C\u7D22 */\n findVar(name, jsvalue = null) {\n // __vars ? (\u30ED\u30FC\u30AB\u30EB\u5909\u6570)\n if (this.varslistSet.length > 3 && this.varsSet.names.has(name)) {\n return {\n i: this.varslistSet.length - 1,\n name,\n isTop: true,\n js: this.varname_get(name),\n js_set: this.varname_set(name, String(jsvalue))\n };\n }\n // \u5916\u5074\u306E\u7121\u540D\u95A2\u6570\u306E\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092\u30AF\u30ED\u30FC\u30B8\u30E3\u3068\u3057\u3066\u53C2\u7167\u3059\u308B #2268\n const currentFunc = this.functionContextStack[this.functionContextStack.length - 1];\n if (this.varslistSet.length > 4 && currentFunc?.isAnonymous) {\n const currentIndex = this.varslistSet.length - 1;\n for (let i = currentIndex - 1; i >= 3; i--) {\n if (this.varslistSet[i].names.has(name)) {\n for (const context of this.functionContextStack) {\n if (context.isAnonymous && context.varsIndex > i) {\n context.usesClosure = true;\n }\n }\n const nameJson = JSON.stringify(name);\n return {\n i,\n name,\n isTop: false,\n js: `__nako_closure.get(${nameJson})`,\n js_set: `__nako_closure.set(${nameJson}, ${jsvalue ?? 'undefined'})`\n };\n }\n }\n }\n // __varslist ?\n for (let i = 2; i >= 0; i--) {\n if (this.varslistSet[i].names.has(name)) {\n // \u30E6\u30FC\u30B6\u30FC\u306E\u5B9A\u7FA9\u3057\u305F\u30B0\u30ED\u30FC\u30D0\u30EB\u5909\u6570 (__varslist[2]) \u306F\u3001\u5909\u6570\u5C55\u958B\u3055\u308C\u3066\u3044\u308B\uFF08\u305D\u306E\u307E\u307E\u306E\u540D\u524D\u3067\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u308B\uFF09\u53EF\u80FD\u6027\u304C\u3042\u308B\u3002\n // \u305D\u308C\u4EE5\u5916\u306E\u5909\u6570\u306F\u3001\u5FC5\u305A__varslist\u306B\u5165\u3063\u3066\u3044\u308B\u3002\n return {\n i,\n name,\n isTop: false,\n js: `__self.__varslist[${i}].get(${JSON.stringify(name)})`,\n js_set: `__self.__varslist[${i}].set(${JSON.stringify(name)}, ${jsvalue ?? 'undefined'})`\n };\n }\n }\n return null;\n }\n /**\n * \u5B9A\u7FA9\u6E08\u307F\u306E\u5909\u6570\u306E\u53C2\u7167\n * @param {string} name\n * @param {Ast} position\n */\n genVar(name, position) {\n const res = this.findVar(name);\n const lno = position.line;\n if (res === null) {\n // \u5B9A\u7FA9\u3055\u308C\u3066\u3044\u306A\u3044\u540D\u524D\u306E\u53C2\u7167\u306F\u5909\u6570\u306E\u5B9A\u7FA9\u3068\u307F\u306A\u3059\u3002\n // \u591A\u304F\u306E\u5834\u5408\u306Fundefined\u5024\u3092\u6301\u3064\u5909\u6570\u3067\u3042\u308A\u5206\u304B\u308A\u3065\u3089\u3044\u30D0\u30B0\u3092\u5F15\u304D\u8D77\u3053\u3059\u304C\u3001\n // \u300C\u30CA\u30C7\u30B7\u30B3\u3059\u308B\u300D\u306A\u3069\u306E\u547D\u4EE4\u306E\u4E2D\u3067\u5B9A\u7FA9\u3055\u308C\u305F\u5909\u6570\u306E\u53C2\u7167\u306E\u5834\u5408\u304C\u3042\u308B\u305F\u3081\u8B66\u544A\u306B\u7559\u3081\u308B\u3002\n // \u305F\u3060\u3057\u3001\u81EA\u52D5\u7684\u306B\u5B9A\u7FA9\u3055\u308C\u308B\u5909\u6570\u300E\u5F15\u6570\u300F\u300E\u305D\u308C\u300F\u306A\u3069\u306F\u4F8B\u5916 #952\n if (name === '\u5F15\u6570' || name === '\u305D\u308C' || name === '\u5BFE\u8C61' || name === '\u5BFE\u8C61\u30AD\u30FC') {\n // \u30C7\u30D5\u30A9\u30EB\u30C8\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u308B\u5909\u6570\u540D\n }\n else {\n if (this.warnUndefinedVar) {\n // main__\u306F\u7701\u7565\u3057\u3066\u8868\u793A\u3059\u308B\u3088\u3046\u306B\u3002 #1223\n const dispName = name.replace(/^main__(.+)$/, '$1');\n this.__self.getLogger().warn(`\u5909\u6570\u300E${dispName}\u300F\u306F\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002`, position);\n }\n }\n this.varsSet.names.add(name);\n return this.varname_get(name);\n }\n const i = res.i;\n // \u30B7\u30B9\u30C6\u30E0\u95A2\u6570\u30FB\u5909\u6570\u306E\u5834\u5408\n if (i === 0) {\n const pv = this.__self.getNakoFunc(name);\n if (!pv) {\n return `${res.js}/*[link_error]l${lno}:${position.file ?? 'unknown'}*/`;\n }\n if (pv.type === 'const' || pv.type === 'var') {\n return res.js;\n }\n if (pv.type === 'func') {\n if (!pv.josi || pv.josi.length === 0) {\n return `(${res.js}())`;\n }\n throw NakoSyntaxError.fromNode(`\u300E${name}\u300F\u304C\u8907\u6587\u3067\u4F7F\u308F\u308C\u307E\u3057\u305F\u3002\u5358\u6587\u3067\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002(v1\u975E\u4E92\u63DB)`, position);\n }\n throw NakoSyntaxError.fromNode(`\u300E${name}\u300F\u306F\u95A2\u6570\u3067\u3042\u308A\u53C2\u7167\u3067\u304D\u307E\u305B\u3093\u3002`, position);\n }\n return res.js;\n }\n convGetVar(node) {\n // \u5909\u6570\u540D\u3092\u5F97\u308B\n const name = node.value;\n // \u5909\u6570\u3092\u53D6\u5F97\u3059\u308B\u30B3\u30FC\u30C9\u3092\u751F\u6210\n return this.genVar(name, node);\n }\n convBlock(node) {\n let code = '';\n for (const block of node.blocks) {\n code += this._convGen(block, false);\n }\n return code;\n }\n convComment(node) {\n let commentSrc = String(node.comment);\n // \u30B3\u30E1\u30F3\u30C8\u306E\u6539\u884C\u3084\u7A7A\u884C\u3092\u7121\u52B9\u5316\n commentSrc = commentSrc.replace(/\\n/g, '\u00B6');\n commentSrc = commentSrc.replace(/\\*\\//g, '\uFF0A\uFF0F');\n commentSrc = commentSrc.replace(/(^\\s+|\\s+$)/g, '');\n // \u30B3\u30E1\u30F3\u30C8\u306E\u884C\u756A\u53F7\u3092\u5F97\u308B\n const lineNo = this.convLineno(node, false);\n if (commentSrc === '' && lineNo === '') {\n return ';';\n }\n if (commentSrc === '') {\n return ';' + lineNo + '\\n';\n }\n return ';' + lineNo + '//' + commentSrc + '\\n';\n }\n convRunMode(node) {\n const mode = node.value;\n let isStrict = false;\n if (mode === '\u53B3\u3057\u304F\u30C1\u30A7\u30C3\u30AF') {\n // \u53B3\u3057\u304F\u30C1\u30A7\u30C3\u30AF\u30E2\u30FC\u30C9\u306E\u5834\u5408\u3001\u5909\u6570\u306E\u672A\u5B9A\u7FA9\u30C1\u30A7\u30C3\u30AF\u3092\u884C\u3046\n isStrict = true;\n }\n this.warnUndefinedVar = isStrict;\n this.warnUndefinedReturnUserFunc = isStrict;\n this.warnUndefinedCallingUserFunc = isStrict;\n this.warnUndefinedCallingSystemFunc = isStrict;\n this.warnUndefinedCalledUserFuncArgs = isStrict;\n return `/* \u5B9F\u884C\u30E2\u30FC\u30C9: ${mode} */`;\n }\n convReturn(node) {\n // \u95A2\u6570\u306E\u4E2D\u3067\u3042\u308C\u3070\u5229\u7528\u53EF\u80FD\n if (this.varsSet.names.has('!\u95A2\u6570')) {\n throw NakoSyntaxError.fromNode('\u300E\u623B\u308B\u300F\u304C\u3042\u308A\u307E\u3059\u304C\u3001\u95A2\u6570\u5B9A\u7FA9\u5185\u306E\u307F\u3067\u4F7F\u7528\u53EF\u80FD\u3067\u3059\u3002', node);\n }\n const astValue = node.blocks[0];\n const lno = this.convLineno(node, false);\n // \u623B\u308A\u5024\u306E\u30B3\u30FC\u30C9\u3092\u5F97\u308B\n let value = '';\n if (astValue.type !== 'nop') {\n value = this._convGen(astValue, true);\n }\n else if (this.speedMode.invalidSore === 0) {\n value = this.varname_get('\u305D\u308C');\n }\n // \u623B\u308A\u5024\u306E\u306A\u3044\u95A2\u6570\u306E\u5834\u5408\n if (value === '') {\n return lno + 'return;';\n }\n // \u623B\u308A\u5024\u304Cundefind\u304B\u3092\u30C1\u30A7\u30C3\u30AF\u3059\u308B\u304B\u3069\u3046\u304B\n if (!this.warnUndefinedReturnUserFunc) {\n return lno + `return ${value};`;\n }\n else {\n const funcName = (this.defFuncName) ? this.defFuncName : '\u7121\u540D\u95A2\u6570';\n const poolIndex = this.addConstPool(`\u30E6\u30FC\u30B6\u95A2\u6570\u300E${funcName}\u300F\u304B\u3089undefined\u304C\u8FD4\u3055\u308C\u3066\u3044\u307E\u3059`, [], node.file, node.line);\n return lno + `return (__self.chk(${value}, ${poolIndex}));`;\n }\n }\n getConstPoolsTemplateId(msg) {\n let id = this.constPoolsTemplate.indexOf(msg);\n if (id < 0) {\n id = this.constPoolsTemplate.length;\n this.constPoolsTemplate[id] = msg;\n }\n return id;\n }\n addConstPool(msg, args, file, line) {\n // file\n file = String(file);\n const fileNo = this.getConstPoolsTemplateId(file);\n // msg\n const msgNo = this.getConstPoolsTemplateId(msg);\n // args\n const args2 = [];\n for (const arg of args) {\n const argStr = '' + String(arg);\n const argNo = this.getConstPoolsTemplateId(argStr);\n args2.push(argNo);\n }\n const poolIndex = this.constPools.length;\n this.constPools.push([msgNo, args2, fileNo, line]);\n return poolIndex;\n }\n convCheckLoop(node, cmd) {\n // \u30EB\u30FC\u30D7\u306E\u4E2D\u3067\u3042\u308C\u3070\u5229\u7528\u53EF\u80FD\n if (!this.flagLoop) {\n const cmdj = (cmd === 'continue') ? '\u7D9A\u3051\u308B' : '\u629C\u3051\u308B';\n throw NakoSyntaxError.fromNode(`\u300E${cmdj}\u300F\u6587\u304C\u3042\u308A\u307E\u3059\u304C\u3001\u305D\u308C\u306F\u7E70\u308A\u8FD4\u3057\u306E\u4E2D\u3067\u5229\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002`, node);\n }\n return this.convLineno(node) + cmd + ';';\n }\n convDefFuncCommon(node, name) {\n // \u5B9A\u7FA9\u4E2D\u306E\u95A2\u6570\u540D\u3092\u8A18\u9332\n this.defFuncName = name;\n // \u5909\u6570\u3092JS\u5909\u6570\u306B\u5C55\u958B\u3059\u308B\u304B\u3069\u3046\u304B (TODO)\n const isExtractJS = false;\n // \u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u30E2\u30CB\u30BF:\u30E6\u30FC\u30B6\u95A2\u6570\u306Einject\u306E\u5B9A\u7FA9\n let performanceMonitorInjectAtStart = '';\n let performanceMonitorInjectAtEnd = '';\n if (this.performanceMonitor.userFunction !== 0) {\n let key = name;\n if (!key) {\n if (typeof this.performanceMonitor.mumeiId === 'undefined') {\n this.performanceMonitor.mumeiId = 0;\n }\n this.performanceMonitor.mumeiId++;\n key = `anous_${this.performanceMonitor.mumeiId}`;\n }\n performanceMonitorInjectAtStart = 'const performanceMonitorEnd = (function (key, type) {\\n' +\n 'const uf_start = performance.now() * 1000;\\n' +\n 'return function () {\\n' +\n 'const el_time = performance.now() * 1000 - uf_start;\\n' +\n 'if (!__self.__performance_monitor) {\\n' +\n '__self.__performance_monitor={};\\n' +\n '__self.__performance_monitor[key] = { called:1, totel_usec: el_time, min_usec: el_time, max_usec: el_time, type: type };\\n' +\n '} else if (!__self.__performance_monitor[key]) {\\n' +\n '__self.__performance_monitor[key] = { called:1, totel_usec: el_time, min_usec: el_time, max_usec: el_time, type: type };\\n' +\n '} else {\\n' +\n '__self.__performance_monitor[key].called++;\\n' +\n '__self.__performance_monitor[key].totel_usec+=el_time;\\n' +\n 'if(__self.__performance_monitor[key].min_usec>el_time){__self.__performance_monitor[key].min_usec=el_time;}\\n' +\n 'if(__self.__performance_monitor[key].max_usec<el_time){__self.__performance_monitor[key].max_usec=el_time;}\\n' +\n `}};})('${key}', 'user');` +\n 'try {\\n';\n performanceMonitorInjectAtEnd = '} finally { performanceMonitorEnd(); }\\n';\n }\n let variableDeclarations = '';\n const indent = ' ';\n let pushStack = '';\n let popStack = '';\n const initialNames = new Set();\n if (this.speedMode.invalidSore === 0) {\n initialNames.add('\u305D\u308C');\n }\n this.varsSet = { isFunction: true, names: initialNames, readonly: new Set() };\n // \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092PUSH\u3059\u308B\n this.varslistSet.push(this.varsSet);\n const funcContext = {\n isAnonymous: name === '',\n varsIndex: this.varslistSet.length - 1,\n usesClosure: false\n };\n this.functionContextStack.push(funcContext);\n // JS\u306E\u5F15\u6570\u3068\u5F15\u6570\u3092\u30D0\u30A4\u30F3\u30C9\n if (isExtractJS) {\n variableDeclarations += indent + 'var \u5F15\u6570 = arguments;\\n';\n }\n else {\n variableDeclarations += indent + '__self.__vars.set(\\'\u5F15\u6570\\', arguments);\\n';\n }\n // \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092\u751F\u6210 (\u518D\u5E30\u95A2\u6570\u547C\u3073\u51FA\u3057\u3067\u5F15\u6570\u306E\u5024\u304C\u58CA\u308C\u308B\u554F\u984C\u304C\u3042\u308B\u306E\u3067\u4FEE\u6B63 #1663 / \u30BF\u30A4\u30DF\u30F3\u30B0\u306B\u3088\u3063\u3066\u58CA\u308C\u308B\u306E\u3067\u4FEE\u7406 #1758)\n // \u66AB\u5B9A\u5909\u6570__localVars\u306B\u73FE\u5728\u306E\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u306E\u5024\u3092PUSH\u3057\u3001\u5909\u6570\u3092\u629C\u3051\u308B\u6642\u306BPOP\u3059\u308B)\n // \u95A2\u6570\u3068\u3057\u3066\u5BA3\u8A00\u3057\u3066\u3044\u308B\u304C\u3001JS\u95A2\u6570\u3068\u306A\u3067\u3057\u3053\u95A2\u6570\u3067\u306F\u5909\u6570\u7BA1\u7406\u306E\u65B9\u6CD5\u304C\u7570\u306A\u308B\u305F\u3081\u3001\u5B8C\u5168\u306A\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3068\u3057\u3066\u306F\u4F7F\u3048\u306A\u3044\n // \u5FC5\u305A\u3001pushStack/popStack \u3059\u308B\u5FC5\u8981\u304C\u3042\u308B\n pushStack += '\\n// PUSH STACK\\n';\n pushStack += 'const __localvars = __self.__vars;\\n';\n pushStack += '__self.__vars = new Map();\\n';\n pushStack += 'try {\\n';\n popStack += '} finally {\\n';\n popStack += indent + '// POP STACK\\n';\n popStack += indent + 'self.__vars = __localvars;\\n';\n popStack += '}\\n';\n // \u5BA3\u8A00\u6E08\u307F\u306E\u540D\u524D\u3092\u4FDD\u5B58\n const varsDeclared = Array.from(this.varsSet.names.values());\n let code = '';\n // \u5F15\u6570\u3092\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u306B\u8A2D\u5B9A\n const meta = node.meta;\n if (!meta) {\n throw new Error('[System Error] \u95A2\u6570\u306E\u5B9A\u7FA9\u3067\u30E1\u30BF\u60C5\u5831\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093');\n }\n if (!meta.varnames) {\n meta.varnames = [];\n }\n for (let i = 0; i < meta.varnames.length; i++) {\n const word = meta.varnames[i];\n if (word === '\u5F15\u6570') {\n continue;\n }\n if (!this.warnUndefinedCalledUserFuncArgs) {\n code += indent + this.varname_set(word, `arguments[${i}]`) + ';\\n';\n }\n else {\n // check undefined\n let errMsg = `\u533F\u540D\u95A2\u6570\u306E\u5F15\u6570\u300E${word}\u300F\u306Bundefined\u304C\u6E21\u3055\u308C\u307E\u3057\u305F`;\n if (name) {\n errMsg = `\u30E6\u30FC\u30B6\u95A2\u6570\u300E${name}\u300F\u306E\u5F15\u6570\u300E${word}\u300F\u306Bundefined\u304C\u6E21\u3055\u308C\u307E\u3057\u305F`;\n }\n const warnJS = `__self.logger.warn('${errMsg}', {line: ${node.line}, file: ${JSON.stringify(node.file)}});`;\n const checkFunc = `((a) => { if (a === undefined) { ${warnJS} }; return a; })`;\n const callCheckFunc = `${checkFunc}(arguments[${i}])`;\n code += indent + this.varname_set(word, callCheckFunc) + ';\\n';\n }\n this.varsSet.names.add(word);\n }\n // \u95A2\u6570\u5B9A\u7FA9\u306F\u3001\u30B0\u30ED\u30FC\u30D0\u30EB\u9818\u57DF\u3067\u3002\n if (name) {\n this.usedFuncSet.add(name);\n this.varslistSet[1].names.add(name);\n if (this.nakoFuncList.get(name) === undefined) {\n if (!node.meta) {\n throw new Error('[System Error] \u95A2\u6570\u306E\u5B9A\u7FA9\u3067\u30E1\u30BF\u60C5\u5831\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093');\n }\n // \u65E2\u306B generate \u3067\u4F5C\u6210\u6E08\u307F\u306E\u306F\u305A(\u5FF5\u306E\u305F\u3081)\n this.nakoFuncList.set(name, {\n josi: node.meta.josi,\n fn: () => { },\n type: 'func',\n asyncFn: false,\n isExport: null\n });\n this.__self.getLogger().warn(`generate\u3067\u672A\u5B9A\u7FA9\u306E\u72B6\u614B\u306E\u95A2\u6570\u300E${name}\u300F\u304C\u52D5\u7684\u306B\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u3059\u3002`);\n }\n }\n // \u30D6\u30ED\u30C3\u30AF\u3092\u89E3\u6790\n const oldUsedAsyncFn = this.usedAsyncFn;\n this.usedAsyncFn = false;\n if (this.debugOption.useDebug) {\n this.usedAsyncFn = true;\n }\n const block = this._convGen(node.blocks[0], false);\n code += block.split('\\n').map((line) => ' ' + line).join('\\n') + '\\n';\n // \u95A2\u6570\u306E\u6700\u5F8C\u306B\u3001\u5909\u6570\u300C\u305D\u308C\u300D\u3092return\u3059\u308B\u3088\u3046\u306B\u3059\u308B\n if (this.speedMode.invalidSore === 0) {\n code += ` return (${this.varname_get('\u305D\u308C')});\\n`;\n }\n // \u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u30E2\u30CB\u30BF:\u30E6\u30FC\u30B6\u95A2\u6570\u306Einject\n code += performanceMonitorInjectAtEnd;\n // \u540D\u524D\u306E\u3042\u308B\u95A2\u6570\u3067\u975E\u540C\u671F\u95A2\u6570\u3067\u3042\u308C\u3070\u3001\u95A2\u6570\u306Basync\u3092\u4ED8\u4E0E\u3059\u308B\n if (name && this.usedAsyncFn) {\n const f = this.nakoFuncList.get(name);\n if (f) {\n f.asyncFn = true;\n }\n }\n // \u95A2\u6570\u306E\u672B\u5C3E\u306B\u3001\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092POP\n // \u95A2\u6570\u5185\u3067\u5B9A\u7FA9\u3055\u308C\u305F\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u306E\u5BA3\u8A00\n if (isExtractJS) {\n for (const name of Array.from(this.varsSet.names.values())) {\n if (!varsDeclared.includes(name)) {\n if (NakoGen.isValidIdentifier(name)) {\n variableDeclarations += ` var ${name};\\n`;\n }\n }\n }\n if (this.speedMode.invalidSore === 0) {\n if (NakoGen.isValidIdentifier('\u305D\u308C')) {\n variableDeclarations += ' var \u305D\u308C = \\'\\';\\n';\n }\n else {\n variableDeclarations += ` ${this.varname_get('\u305D\u308C')} = '';`;\n }\n }\n }\n // usedAsyncFn\u306E\u5024\u306B\u5FDC\u3058\u3066\u95A2\u6570\u5B9A\u7FA9\u306E\u65B9\u6CD5\u3092\u5909\u66F4\n const tof = (this.usedAsyncFn) ? topOfFunctionAsync : topOfFunction;\n // \u95A2\u6570\u30B3\u30FC\u30C9\u5168\u4F53\u3092\u69CB\u7BC9\n const lineInfo = ' ' + this.convLineno(node, true, 1) + '\\n';\n code = tof + performanceMonitorInjectAtStart + pushStack + variableDeclarations + lineInfo + code + popStack;\n code += endOfFunction;\n if (funcContext.isAnonymous && funcContext.usesClosure) {\n const parentClosure = `(typeof __nako_closure === 'undefined' ? null : __nako_closure)`;\n code = `(function(__nako_closure) {\\n return ${code}\\n})(__nako_make_closure(__self.__vars, ${parentClosure}))`;\n }\n // \u540D\u524D\u304C\u3042\u308C\u3070\u3001\u95A2\u6570\u3092\u767B\u9332\u3059\u308B\n if (name) {\n const nameFuncValue = this.nakoFuncList.get(name);\n if (nameFuncValue) {\n nameFuncValue.fn = code;\n nameFuncValue.asyncFn = this.usedAsyncFn;\n meta.asyncFn = this.usedAsyncFn;\n }\n }\n this.usedAsyncFn = oldUsedAsyncFn; // \u4EE5\u524D\u306E\u5024\u3092\u623B\u3059\n this.varslistSet.pop();\n this.functionContextStack.pop();\n this.varsSet = this.varslistSet[this.varslistSet.length - 1];\n if (name) {\n this.__self.__varslist[1].set(name, code);\n }\n this.defFuncName = ''; // \u95A2\u6570\u540D\u3092\u30AF\u30EA\u30A2\n return code;\n }\n convDefTest(node) {\n const name = node.name;\n let code = `__tests.push({ name: '${name}', f: () => {\\n`;\n // \u30D6\u30ED\u30C3\u30AF\u3092\u89E3\u6790\n const block = this._convGen(node.blocks[0], false);\n code += ` ${block}\\n` +\n '}});';\n if (!node.meta) {\n throw new Error('[System Error] \u30C6\u30B9\u30C8\u306E\u30E1\u30BF\u60C5\u5831\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093');\n }\n this.nakoTestFuncs.set(name, {\n josi: node.meta.josi,\n fn: code,\n type: 'test_func'\n });\n // \u2605\u3053\u306E\u6642\u70B9\u3067\u306F\u30C6\u30B9\u30C8\u30B3\u30FC\u30C9\u3092\u751F\u6210\u3057\u306A\u3044\u2605\n // \u30D7\u30ED\u30B0\u30E9\u30E0\u5192\u982D\u3067\u30B3\u30FC\u30C9\u751F\u6210\u6642\u306B\u30C6\u30B9\u30C8\u306E\u5B9A\u7FA9\u3092\u884C\u3046\n return '';\n }\n convDefFunc(node) {\n // \u203B [\u95A2\u6570\u5B9A\u7FA9\u306E\u30E1\u30E2]\n // \u203B \u95A2\u6570\u306E\u5B9A\u7FA9\u306F\u30D7\u30ED\u30B0\u30E9\u30E0\u306E\u5192\u982D\u306B\u79FB\u3055\u308C\u308B\u3002\n // \u203B \u305D\u306E\u305F\u3081\u3001\u751F\u6210\u3055\u308C\u305F\u30B3\u30FC\u30C9\u306F\u3053\u3053\u3067\u306F\u8FD4\u3055\u306A\u3044\n // \u203B registerFunction \u3092\u53C2\u7167\n if (!node.name) {\n return '';\n }\n const name = NakoGen.getFuncName(node.name);\n this.convDefFuncCommon(node, name);\n return '';\n }\n convFuncObj(node) {\n return '/*convFuncObj*/' + this.convDefFuncCommon(node, '');\n }\n convJsonObj(node) {\n const resultArray = [];\n const list = node.blocks;\n for (let i = 0; i < list.length / 2; i++) {\n const idx = i * 2;\n const key = list[idx + 0];\n const val = list[idx + 1];\n const keyStr = this._convGen(key, true);\n const valStr = this._convGen(val, true);\n resultArray.push(`${keyStr}: ${valStr}`);\n }\n return '{' + resultArray.join(', ') + '}';\n }\n convJsonArray(node) {\n const list = node.blocks;\n const codelist = list.map((e) => {\n return this._convGen(e, true);\n });\n return '[' + codelist.join(',') + ']';\n }\n convRefArray(node) {\n let code = '';\n code = this._convGen(node.name, true);\n const list = node.index;\n if (!list) {\n return code;\n }\n for (let i = 0; i < list.length; i++) {\n const idx = this._convGen(list[i], true);\n code += '[' + idx + ']';\n }\n return code;\n }\n convRefArrayValue(node) {\n let code = '';\n const op = node.name ? String(node.name) : '???';\n const val = node.index ? node.index.shift() : undefined;\n if (!val) {\n return '/*[WARNING] convRefArrayOperator::InvalidValue */';\n }\n code = this._convGen(val, true);\n const list = node.index;\n if (!list) {\n return code;\n }\n if (op === '@' || op === '[') {\n for (let i = 0; i < list.length; i++) {\n const idx = this._convGen(list[i], true);\n code += '[' + idx + ']';\n }\n return code;\n }\n if (op === '$') {\n return this.convRefProp_genCode(code, list);\n }\n // operator not found\n const op2 = op.replace('*/', '\uFF0A/');\n return `/* [WARNING] convRefArrayOperator::UnknownOperator [${op2}] */` + code;\n }\n convLetArray(node) {\n const id = this.loopId++;\n const valueNode = node.blocks[0];\n const indexNodes = node.blocks.slice(1);\n const name = this.genVar(node.name, node);\n let codeInit = '';\n let code = name;\n let codeArray = '';\n // codeInit?\n if (node.checkInit) { // DNCL\u306E\u305F\u3081\u306E\u521D\u671F\u5316\u51E6\u7406 ... DNCL\u3067\u306F\u914D\u5217\u306E\u521D\u671F\u5316\u306A\u3057\u3067\u3044\u304D\u306A\u308A\u914D\u5217\u3092\u4F7F\u3046\u8A66\u9A13\u554F\u984C\u304C\u3042\u308B\u305F\u3081\n const arrayDefCode = '[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]';\n // [name]\u306E\u5185\u5BB9\u306F[__self.__varslist[2].get(\"a__A\")]\u306E\u3088\u3046\u306A\u3082\u306E\u306B\u306A\u3063\u3066\u3044\u308B\u306F\u305A\n if (node.name) {\n const word = node.name;\n const tmpVar = `$nako_tmp_a${id}`;\n const initArrayCode = this.varname_set(word, arrayDefCode);\n codeInit += `\\n/*\u914D\u5217\u521D\u671F\u5316*/if (!(${name} instanceof Array)) { ${initArrayCode} };\\n`;\n codeInit += `${tmpVar} = ${name};\\n`;\n for (let i = 0; i < indexNodes.length - 1; i++) {\n const idx = this._convGen(indexNodes[i], true);\n codeArray += `[${idx}]`;\n codeInit += `\\n/*\u914D\u5217\u521D\u671F\u5316${i}*/if (!(${tmpVar}${codeArray} instanceof Array)) { ${tmpVar}${codeArray} = ${arrayDefCode}; };`;\n }\n codeInit += '\\n';\n }\n }\n // array\n for (let i = 0; i < indexNodes.length; i++) {\n const idx = this._convGen(indexNodes[i], true);\n code += '[' + idx + ']';\n }\n // value\n let value = null;\n if (this.speedMode.invalidSore === 0) {\n value = this.varname_get('\u305D\u308C');\n }\n if (valueNode.type !== 'nop') {\n value = this._convGen(valueNode, true);\n }\n if (value === null) {\n throw NakoSyntaxError.fromNode('\u4EE3\u5165\u3059\u308B\u5148\u306E\u5909\u6570\u540D\u304C\u3042\u308A\u307E\u305B\u3093\u3002', node);\n }\n code += ' = ' + value + ';\\n';\n // generate code\n const src = this.convLineno(node, false) + codeInit + code;\n return src;\n }\n convGenLoop(node) {\n const tmpflag = this.flagLoop;\n this.flagLoop = true;\n try {\n return this._convGen(node, false);\n }\n finally {\n this.flagLoop = tmpflag;\n }\n }\n convFor(node) {\n const astFrom = node.blocks[0];\n const astTo = node.blocks[1];\n const astInc = node.blocks[2];\n const astBlock = node.blocks[3];\n // for\u306EID\u3092\u53D6\u5F97\n const idLoop = this.loopId++;\n const varI = `$nako_i${idLoop}`;\n // \u30EB\u30FC\u30D7\u5909\u6570\u306B\u3064\u3044\u3066\n let loopVarSetter = '';\n if (node.word !== '') { // \u30EB\u30FC\u30D7\u5909\u6570\u3092\u4F7F\u3046\u6642\n const varName = node.word;\n this.varsSet.names.add(varName);\n loopVarSetter = this.varname_set(varName, varI);\n }\n // \u30EB\u30FC\u30D7\u6761\u4EF6\u3092\u5909\u6570\u306B\u5165\u308C\u308B\u7528\n const varFrom = `$nako_from${idLoop}`;\n const varTo = `$nako_to${idLoop}`;\n const varTemp = `$nako_temp${idLoop}`;\n let sorePrefex = '';\n if (this.speedMode.invalidSore === 0) {\n sorePrefex = this.varname_set('\u305D\u308C', varI);\n }\n // \u30EB\u30FC\u30D7\u6761\u4EF6\u3092\u78BA\u8A8D\n let kara = '0';\n let made = '0';\n let temp = '0';\n if (astTo && astTo.type === 'func' && astTo.name === '\u7BC4\u56F2') {\n temp = this._convGen(astTo, true);\n kara = `${varTemp}['\u5148\u982D'] || 0`;\n made = `${varTemp}['\u672B\u5C3E'] || 0`;\n }\n else {\n kara = this._convGen(astFrom, true);\n made = this._convGen(astTo, true);\n }\n const flagDown = node.flagDown;\n const flagUp = node.flagUp;\n let inc = '1';\n if (astInc.type !== 'nop') {\n inc = this._convGen(astInc, true);\n }\n // \u30EB\u30FC\u30D7\u5185\u306E\u30D6\u30ED\u30C3\u30AF\u5185\u5BB9\u3092\u5F97\u308B\n const block = this.convGenLoop(astBlock);\n const code = this.convLineno(node, false) + '\\n' +\n `/*[convFor id=${idLoop}]*/\\n` +\n `const ${varTemp} = ${temp};\\n` +\n `const ${varFrom} = ${kara};\\n` +\n `const ${varTo} = ${made};\\n` +\n `if (${varFrom} < ${varTo}) { // up\\n` +\n ` if (${String(flagUp)}) {` +\n ` for (let ${varI} = ${varFrom}; ${varI} <= ${varTo}; ${varI}+= ${inc}) {\\n` +\n ` ${sorePrefex};${loopVarSetter}\\n` +\n ' // for block begin\\n' +\n ` ${block}\\n` +\n ' // for block end\\n' +\n ' };\\n' +\n ' };\\n' +\n `} else if (${varFrom} > ${varTo}) { // down\\n` +\n ` if (${String(flagDown)}) {` +\n ` for (let ${varI} = ${varFrom}; ${varI} >= ${varTo}; ${varI}-= ${inc}) {\\n` +\n ` ${sorePrefex};${loopVarSetter}\\n` +\n ' // for block begin\\n' +\n ` ${block}\\n` +\n ' // for block end\\n' +\n ' }\\n' +\n ' };\\n' +\n '} else { // from == to\\n' +\n ` for (let ${varI} = ${varFrom}; ${varI} <= ${varTo}; ${varI}+= 1) {\\n` +\n ` ${sorePrefex};${loopVarSetter}\\n` +\n ' // for block begin\\n' +\n ` ${block}\\n` +\n ' // for block end\\n' +\n ' };\\n' +\n '};\\n' +\n `//[/convFor id=${idLoop}]\\n`;\n return code;\n }\n convForeach(node) {\n const exprAst = node.blocks[0];\n const blockAst = node.blocks[1];\n // foreach\u306EID\u3092\u53D6\u5F97\n const id = this.loopId++;\n const loopKeyVar = `$nako_i${id}`;\n const loopValueVar = `$nako_foreach_value${id}`;\n const loopDataVar = `$nako_foreach_data${id}`;\n const taisyouTemp = `$nako_taisyou_temp${id}`;\n const taisyouKeyTemp = `$nako_taisyou_key_temp${id}`;\n const soreTemp = `$nako_foreach_sore_temp${id}`;\n // \u300C\u5BFE\u8C61\u300D\u300C\u5BFE\u8C61\u30AD\u30FC\u300D\u3092\u53D6\u5F97 --- block\u3088\u308A\u65E9\u304F\u5909\u6570\u3092\u5B9A\u7FA9\u3059\u308B\u5FC5\u8981\u304C\u3042\u308B\n let taisyoPrefex = this.varname_set_sys('\u5BFE\u8C61', loopValueVar);\n if (node.word !== '') { // \u5BFE\u8C61\u5909\u6570\u304C\u3042\u308B\u5834\u5408\u3001\u5BFE\u8C61\u306F\u8A2D\u5B9A\u3055\u308C\u306A\u3044\n const valueVar = node.word;\n this.varsSet.names.add(valueVar);\n taisyoPrefex = this.varname_set(valueVar, loopValueVar);\n }\n const keyVar = '\u5BFE\u8C61\u30AD\u30FC';\n const keySetter = this.varname_set_sys(keyVar, loopKeyVar);\n // \u300C\u305D\u308C\u300D(\u5BFE\u8C61\u306E\u30A8\u30A4\u30EA\u30A2\u30B9)\u306E\u8A2D\u5B9A\n let sorePrefex = '';\n let soreRecover = '';\n let soreBackup = '';\n if (this.speedMode.invalidSore === 0) {\n sorePrefex = this.varname_set('\u305D\u308C', loopValueVar);\n soreRecover = this.varname_set('\u305D\u308C', soreTemp);\n soreBackup = `let ${soreTemp} = ` + this.varname_get('\u305D\u308C') + ';';\n }\n // \u53CD\u5FA9\u3059\u308B\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\n let targetData = '';\n if (exprAst.type === 'nop') {\n if (this.speedMode.invalidSore === 0) {\n targetData = this.varname_get('\u305D\u308C');\n }\n else {\n throw NakoSyntaxError.fromNode('\u300E\u53CD\u5FA9\u300F\u306E\u5BFE\u8C61\u304C\u3042\u308A\u307E\u305B\u3093\u3002', node);\n }\n }\n else {\n targetData = this._convGen(exprAst, true);\n }\n // \u53CD\u5FA9\u3059\u308B\u30D6\u30ED\u30C3\u30AF\u3092\u53D6\u5F97\n const block = trim(cleanGeneratedCode(this.convGenLoop(blockAst), 1));\n // \u30B3\u30FC\u30C9\u3092\u751F\u6210\n const code = this.convLineno(node, false) + '\\n' +\n `// [convForeach id=${id}]\\n` +\n `const ${taisyouTemp} = __self.__getSysVar('\u5BFE\u8C61'); ${soreBackup}; ` +\n `const ${taisyouKeyTemp} = __self.__getSysVar('\u5BFE\u8C61\u30AD\u30FC');\\n` +\n `let ${loopDataVar} = ${targetData};\\n` +\n '// foreach Map?\\n' +\n `if (${loopDataVar} instanceof Map) { // Object\u306B\u5F37\u5236\u5909\u63DB\\n` +\n ` let tmp = {}; for (let tmpKey of ${loopDataVar}.keys()) { tmp[tmpKey] = ${loopDataVar}.get(tmpKey); }; \\n` +\n ` ${loopDataVar} = tmp;\\n` +\n '}\\n' +\n `for (let ${loopKeyVar} in ${loopDataVar}) {\\n` +\n ` if (!${loopDataVar}.hasOwnProperty(${loopKeyVar})) { continue }\\n` +\n ' // \u5BFE\u8C61\u30AD\u30FC\u306E\u8A2D\u5B9A\\n' +\n ` ${keySetter}\\n` +\n ' // \u5BFE\u8C61\u306E\u8A2D\u5B9A\\n' +\n ` let ${loopValueVar} = $nako_foreach_data${id}[${loopKeyVar}]\\n` +\n ` ${sorePrefex};\\n` +\n ` ${taisyoPrefex};\\n` +\n ' // [convForeach::block]\\n' +\n ` ${block}\\n` +\n ' // [/convForeach::block]\\n' +\n '}\\n' +\n `__self.__setSysVar('\u5BFE\u8C61', ${taisyouTemp});${soreRecover};` +\n `__self.__setSysVar('\u5BFE\u8C61\u30AD\u30FC', ${taisyouKeyTemp});` +\n `// [/convForeach id=${id}]\\n`;\n return code;\n }\n convRepeatTimes(node) {\n // \u30EB\u30FC\u30D7\u306EID\u3092\u53D6\u5F97\n const id = this.loopId++;\n const varI = `$nako_i${id}`;\n const varCount = `$nako_times_data${id}`;\n const varKaisuTemp = `$nako_kaisu_temp${id}`;\n const codeCount = this._convGen(node.blocks[0], true);\n // \u30D6\u30ED\u30C3\u30AF\u3092\u5F97\u308B\n const block = trim(cleanGeneratedCode(this.convGenLoop(node.blocks[1]), 1));\n // \u305D\u308C\n let sorePrefex = '';\n let soreRecover = '';\n if (this.speedMode.invalidSore === 0) {\n sorePrefex = this.varname_set('\u305D\u308C', varI);\n soreRecover = this.varname_set('\u305D\u308C', varKaisuTemp);\n }\n // \u56DE\u6570\n sorePrefex += `;__self.__setSysVar('\u56DE\u6570', ${varI});`;\n soreRecover += `;__self.__setSysVar('\u56DE\u6570', ${varKaisuTemp});`;\n const code = this.convLineno(node, false) + '\\n' +\n `// [convRepeatTimes id=${id}] // \u300En\u56DE\u300F\u69CB\u6587\\n` +\n `let ${varKaisuTemp} = __self.__getSysVar('\u56DE\u6570')\\n` +\n `let ${varCount} = ${codeCount};\\n` +\n `for (let ${varI} = 1; ${varI} <= ${varCount}; ${varI}++) {\\n` +\n ` ${sorePrefex}\\n` +\n ` ${block}\\n` +\n '}\\n' +\n `${soreRecover}\\n` +\n `// [/convRepeatTimes id=${id}]\\n`;\n return code;\n }\n /**\n * @param {Ast} node\n * @param {boolean} isExpression\n */\n convSpeedMode(node, isExpression) {\n if (!node.options) {\n return '';\n }\n const prev = { ...this.speedMode };\n if (node.options['\u884C\u756A\u53F7\u7121\u3057']) {\n this.speedMode.lineNumbers++;\n }\n if (node.options['\u6697\u9ED9\u306E\u578B\u5909\u63DB\u7121\u3057']) {\n this.speedMode.implicitTypeCasting++;\n }\n if (node.options['\u5F37\u5236\u30D4\u30E5\u30A2']) {\n this.speedMode.forcePure++;\n }\n if (node.options['\u305D\u308C\u7121\u52B9']) {\n this.speedMode.invalidSore++;\n }\n try {\n return this._convGen(node.blocks[0], isExpression);\n }\n finally {\n this.speedMode = prev;\n }\n }\n /**\n * @param {Ast} node\n * @param {boolean} isExpression\n */\n convPerformanceMonitor(node, isExpression) {\n const prev = { ...this.performanceMonitor };\n if (!node.options) {\n return '';\n }\n if (node.options['\u30E6\u30FC\u30B6\u95A2\u6570']) {\n this.performanceMonitor.userFunction++;\n }\n if (node.options['\u30B7\u30B9\u30C6\u30E0\u95A2\u6570\u672C\u4F53']) {\n this.performanceMonitor.systemFunctionBody++;\n }\n if (node.options['\u30B7\u30B9\u30C6\u30E0\u95A2\u6570']) {\n this.performanceMonitor.systemFunction++;\n }\n try {\n return this._convGen(node.blocks[0], isExpression);\n }\n finally {\n this.performanceMonitor = prev;\n }\n }\n convWhile(node) {\n const exprAst = node.blocks[0];\n const blockAst = node.blocks[1];\n const cond = this._convGen(exprAst, true);\n const block = trim(cleanGeneratedCode(this.convGenLoop(blockAst), 1));\n const code = '// [convWhile]\\n' +\n this.convLineno(node, false) + '\\n' +\n `while (${cond})` + '{\\n' +\n ` ${block}` + '\\n' +\n '}\\n' +\n '// [convWhile]\\n';\n return code;\n }\n convAtohantei(node) {\n const id = this.loopId++;\n const varId = `$nako_i${id}`;\n const cond = this._convGen(node.blocks[0], true);\n const block = this.convGenLoop(node.blocks[1]);\n const code = 'while (true) {\\n' +\n ` ${block}\\n` +\n ` let ${varId} = ${cond};\\n` +\n ` if (${varId}) { continue } else { break }\\n` +\n '}\\n\\n';\n return this.convLineno(node, false) + code;\n }\n convSwitch(node) {\n const expr = this._convGen(node.blocks[0], true);\n const defaultStr = this._convGen(node.blocks[1], false);\n let body = '';\n for (let i = 0; i < node.case_count; i++) {\n const caseIndex = i * 2 + 2;\n const condStr = this._convGen(node.blocks[caseIndex + 0], true);\n const blockStr = this.convGenLoop(node.blocks[caseIndex + 1]);\n body += ` case ${condStr}:\\n`;\n body += ` ${blockStr}\\n` +\n ' break\\n';\n }\n const code = '// [switch]\\n' +\n `switch (${expr})` + '{\\n' +\n `${body}` + '\\n' +\n ' default:\\n' +\n ` ${defaultStr}\\n` +\n '}\\n' +\n '// [/switch]\\n';\n return this.convLineno(node, false) + code;\n }\n convIf(node) {\n const exprAst = node.blocks[0];\n const trueAst = node.blocks[1];\n const falseAst = node.blocks[2];\n // \u6761\u4EF6\n const expr = this._convGen(exprAst, true);\n // TRUE\u30D6\u30ED\u30C3\u30AF\n const trueBlock = trim(cleanGeneratedCode(this._convGen(trueAst, false), 1));\n // FALSE\u30D6\u30ED\u30C3\u30AF\n const falseBlock = trim(cleanGeneratedCode(this._convGen(falseAst, false), 1));\n let code = '// [convIf]\\n' +\n this.convLineno(node, false) + '\\n' +\n `if (${expr}) {\\n` +\n ` ${trueBlock}\\n` +\n '}';\n if (trim(falseBlock) !== '') {\n code +=\n ' else {\\n' +\n ` ${falseBlock}\\n` +\n '}\\n';\n }\n code += '\\n// [/convIf]\\n';\n return code;\n }\n convFuncGetArgsCalcType(_funcName, _func, node) {\n const args = [];\n const opts = {};\n const nodeArgs = (node.blocks) ? node.blocks : [];\n for (let i = 0; i < nodeArgs.length; i++) {\n const arg = nodeArgs[i];\n if (i === 0 && arg === null && this.speedMode.invalidSore === 0) {\n args.push(this.varname_get('\u305D\u308C'));\n opts.sore = true;\n }\n else {\n let argCode = this._convGen(arg, true);\n if (argCode === '') {\n argCode = 'undefined';\n }\n if (typeof argCode !== 'string') {\n argCode = 'undefined';\n }\n args.push(`/*arg${i}*/${argCode}`);\n }\n }\n return [args, opts];\n }\n getPluginList() {\n const r = [];\n for (const name in this.__self.__module) {\n r.push(name);\n }\n return r;\n }\n /**\n * \u95A2\u6570\u306E\u547C\u3073\u51FA\u3057\n * @param {Ast} node\n * @param {boolean} isExpression\n * @returns string \u30B3\u30FC\u30C9\n */\n convCallFunc(node, isExpression) {\n const funcName = NakoGen.getFuncName(node.name);\n const res = this.findVar(funcName);\n if (res === null) {\n throw NakoSyntaxError.fromNode(`\u95A2\u6570\u300E${funcName}\u300F\u304C\u898B\u5F53\u305F\u308A\u307E\u305B\u3093\u3002\u6709\u52B9\u30D7\u30E9\u30B0\u30A4\u30F3=[` + this.getPluginList().join(', ') + ']', node);\n }\n // \u3069\u306E\u95A2\u6570\u3092\u547C\u3073\u51FA\u3059\u306E\u304B\u95A2\u6570\u3092\u7279\u5B9A\u3059\u308B\n let func;\n if (res.i === 0) { // plugin function\n func = this.__self.getFunc(funcName);\n if (!func) {\n throw new Error(`[System Error] \u95A2\u6570\u300C${funcName}\u300DNakoCompiler.nakoFuncList \u306E\u4E0D\u6574\u5408\u304C\u3042\u308A\u307E\u3059\u3002`);\n }\n if (func.type !== 'func') {\n throw NakoSyntaxError.fromNode(`\u300E${funcName}\u300F\u306F\u95A2\u6570\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002`, node);\n }\n }\n else {\n func = this.nakoFuncList.get(funcName);\n // \u7121\u540D\u95A2\u6570\u306E\u53EF\u80FD\u6027\n if (func === undefined) {\n func = { return_none: false, asyncFn: !!node.asyncFn };\n }\n }\n // \u95A2\u6570\u306E\u53C2\u7167\u6E21\u3057\u304B\uFF1F\n if (node.type === 'func_pointer') {\n return res.js;\n }\n // \u95A2\u6570\u306E\u53C2\u7167\u6E21\u3057\u3067\u306A\u3044\u5834\u5408\n // \u95A2\u6570\u5B9A\u7FA9\u3088\u308A\u52A9\u8A5E\u3092\u4E00\u3064\u305A\u3064\u8ABF\u3079\u308B\n const argsInfo = this.convFuncGetArgsCalcType(funcName, func, node);\n const args = argsInfo[0];\n const argsOpts = argsInfo[1];\n // function\n this.usedFuncSet.add(funcName);\n if (funcName === '\u540D\u524D\u7A7A\u9593\u8A2D\u5B9A') {\n return `\\n// --- \u540D\u524D\u7A7A\u9593(${args[0]}) ---\\n__self.__varslist[0].get('\u540D\u524D\u7A7A\u9593\u8A2D\u5B9A')(${args[0]}, __self);__self.__modName=${args[0]};\\n`;\n }\n else if (funcName === '\u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u8A2D\u5B9A') {\n return `\\n__self.__varslist[0].get('\u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u8A2D\u5B9A')(${args[0]}, __self);\\n`;\n }\n // \u95A2\u6570\u547C\u3073\u51FA\u3057\u3067\u3001\u5F15\u6570\u306E\u672B\u5C3E\u306Bthis\u3092\u8FFD\u52A0\u3059\u308B-\u30B7\u30B9\u30C6\u30E0\u60C5\u5831\u3092\u53C2\u7167\u3059\u308B\u305F\u3081\n args.push('__self');\n let funcDef = 'function';\n let funcBegin = '';\n let funcEnd = '';\n // setter?\n if (node.setter) {\n funcBegin += ';__self.isSetter = true;\\n';\n funcEnd += ';__self.isSetter = false;\\n';\n }\n // \u95A2\u6570\u5185 (__varslist.length > 3) \u304B\u3089\u30D7\u30E9\u30B0\u30A4\u30F3\u95A2\u6570 (res.i === 0) \u3092\u547C\u3073\u51FA\u3059\u3068\u304D\u3001 \u305D\u306E\u30D7\u30E9\u30B0\u30A4\u30F3\u95A2\u6570\u304Cpure\u3067\u306A\u3051\u308C\u3070\n // \u547C\u3073\u51FA\u3057\u306E\u76F4\u524D\u306B\u5168\u3066\u306E\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092this.__locals\u306B\u5165\u308C\u308B\u3002\n if (res.i === 0 && this.varslistSet.length > 3 && func.pure !== true && this.speedMode.forcePure === 0) { // undefined\u306Ffalse\u3068\u307F\u306A\u3059\n // \u5C55\u958B\u3055\u308C\u305F\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u306E\u5217\u6319\n const localVars = [];\n for (const name of Array.from(this.varsSet.names.values())) {\n if (NakoGen.isValidIdentifier(name)) {\n localVars.push({ str: JSON.stringify(name), js: this.varname_get(name) });\n }\n }\n // --- \u5B9F\u884C\u524D ---\n // \u5168\u3066\u306E\u5C55\u958B\u3055\u308C\u3066\u3044\u306A\u3044\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092 __self.__locals \u306B\u30B3\u30D4\u30FC\u3059\u308B\n funcBegin += '__self.__locals = __vars;\\n';\n // \u5168\u3066\u306E\u5C55\u958B\u3055\u308C\u305F\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092 __self.__locals \u306B\u4FDD\u5B58\u3059\u308B\n if (localVars.length > 0) {\n funcBegin += '/* \u5168\u3066\u306E\u5C55\u958B\u3055\u308C\u305F\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092 __self.__locals \u306B\u4FDD\u5B58 */\\n';\n for (const v of localVars) {\n funcBegin += `__self.__locals.set(${v.str}, ${v.js});\\n`;\n }\n }\n // --- \u5B9F\u884C\u5F8C ---\n // \u5168\u3066\u306E\u5C55\u958B\u3055\u308C\u305F\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092 __self.__locals \u304B\u3089\u53D7\u3051\u53D6\u308B\n // \u300C\u305D\u308C\u300D\u306F\u95A2\u6570\u306E\u5B9F\u884C\u7D50\u679C\u3092\u53D7\u3051\u53D6\u308B\u305F\u3081\u306B\u4F7F\u3046\u305F\u3081\u30B9\u30AD\u30C3\u30D7\u3002\n if (localVars.length > 0) {\n funcEnd += '/* \u5168\u3066\u306E\u5C55\u958B\u3055\u308C\u305F\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092 __self.__locals \u304B\u3089\u53D7\u3051\u53D6\u308B */\\n';\n for (const v of localVars) {\n if (v.js !== '\u305D\u308C') {\n funcEnd += `__self.__varslist[2].set(${v.str}, __self.__locals[${v.str}]);\\n`;\n }\n }\n }\n }\n // \u5909\u6570\u300C\u305D\u308C\u300D\u304C\u88DC\u5B8C\u3055\u308C\u3066\u3044\u308B\u3053\u3068\u3092\u30D2\u30F3\u30C8\u3068\u3057\u3066\u51FA\u529B\n if (argsOpts.sore) {\n funcBegin += '/*[sore]*/';\n }\n const indent = (text, n) => {\n let result = '';\n for (const line of text.split('\\n')) {\n if (line !== '') {\n result += ' '.repeat(n) + line + '\\n';\n }\n }\n return result;\n };\n // \u5F15\u6570\u30C1\u30A7\u30C3\u30AF\u306E\u4F8B\u5916 #1260\n const noCheckFuncs = { 'TYPEOF': true, '\u5909\u6570\u578B\u78BA\u8A8D': true };\n // \u95A2\u6570\u547C\u3073\u51FA\u3057\u30B3\u30FC\u30C9\u306E\u69CB\u7BC9\n let argsCode;\n if ((!this.warnUndefinedCallingUserFunc && res.i !== 0) || (!this.warnUndefinedCallingSystemFunc && res.i === 0)) {\n argsCode = args.join(',');\n }\n else {\n const argsA = [];\n args.forEach((arg) => {\n if (arg === '__self' || noCheckFuncs[funcName] === true) { // #1260\n argsA.push(`${arg}`);\n }\n else {\n // \u5F15\u6570\u306Eundefined\u30C1\u30A7\u30C3\u30AF\u306E\u30B3\u30FC\u30C9\u3092\u5165\u308C\u308B\n const msg = (res.i === 0) ? '\u547D\u4EE4\u300E$0\u300F\u306E\u5F15\u6570\u306Bundefined\u3092\u6E21\u3057\u3066\u3044\u307E\u3059\u3002' : '\u30E6\u30FC\u30B6\u547D\u4EE4\u300E$0\u300F\u306E\u5F15\u6570\u306Bundefined\u3092\u6E21\u3057\u3066\u3044\u307E\u3059\u3002';\n const poolIndex = this.addConstPool(msg, [funcName], node.file, node.line);\n // arg\u304C\u7A7A\u306B\u306A\u308B\u5BFE\u7B56 #1315\n const argStr = (arg === '') ? '\"\"' : arg;\n argsA.push(`(__self.chk(${argStr}, ${poolIndex}))`);\n }\n });\n argsCode = argsA.join(', ');\n }\n let funcCall = `${res.js}(${argsCode})`;\n if (func.asyncFn) {\n funcDef = `async ${funcDef}`;\n funcCall = `await ${funcCall}`;\n this.numAsyncFn++;\n this.usedAsyncFn = true;\n // \u975E\u540C\u671F\u95A2\u6570\u306E\u547C\u3073\u51FA\u3057\u524D\u306B __self.__vars \u3092\u5F85\u907F\u3057\u3066\u304A\u304F\u5FC5\u8981\u304C\u3042\u308B (#1758)\n const varI = `$nako_i${this.loopId}`;\n this.loopId++;\n funcBegin += `const __local_async${varI} = __self.__vars;\\n`;\n funcEnd += `__self.__vars = __local_async${varI};\\n`;\n }\n if (res.i === 0 && this.performanceMonitor.systemFunctionBody !== 0) {\n let key = funcName;\n if (!key) {\n if (typeof this.performanceMonitor.mumeiId === 'undefined') {\n this.performanceMonitor.mumeiId = 0;\n }\n this.performanceMonitor.mumeiId++;\n key = `anous_${this.performanceMonitor.mumeiId}`;\n }\n funcCall = `(${funcDef} (key, type) {\\n` +\n 'const sbf_start = performance.now() * 1000;\\n' +\n 'try {\\n' +\n 'return ' + funcCall + ';\\n' +\n '} finally {\\n' +\n 'const sbl_time = performance.now() * 1000 - sbf_start;\\n' +\n 'if (!__self.__performance_monitor) {\\n' +\n '__self.__performance_monitor={};\\n' +\n '__self.__performance_monitor[key] = { called:1, totel_usec: sbl_time, min_usec: sbl_time, max_usec: sbl_time, type: type };\\n' +\n '} else if (!__self.__performance_monitor[key]) {\\n' +\n '__self.__performance_monitor[key] = { called:1, totel_usec: sbl_time, min_usec: sbl_time, max_usec: sbl_time, type: type };\\n' +\n '} else {\\n' +\n '__self.__performance_monitor[key].called++;\\n' +\n '__self.__performance_monitor[key].totel_usec+=sbl_time;\\n' +\n 'if(__self.__performance_monitor[key].min_usec>sbl_time){__self.__performance_monitor[key].min_usec=sbl_time;}\\n' +\n 'if(__self.__performance_monitor[key].max_usec<sbl_time){__self.__performance_monitor[key].max_usec=sbl_time;}\\n' +\n `}}})('${funcName}_body', 'sysbody')\\n`;\n }\n let code = '';\n if (func.return_none) {\n // ------------------------------------\n // \u623B\u308A\u5024\u306E\u306A\u3044\u95A2\u6570\u306E\u5834\u5408\n // ------------------------------------\n if (funcEnd === '') {\n code = `/*VOID\u95A2\u6570\u547C\u51FA*/${funcBegin}${funcCall}\\n`;\n }\n else {\n code = `/*VOID\u95A2\u6570\u547C\u51FA(\u524D\u5F8C\u51E6\u7406\u4ED8)*/${funcBegin}try {\\n${indent(funcCall, 1)};\\n} finally {\\n${indent(funcEnd, 1)}}\\n`;\n }\n // \u884C\u756A\u53F7\u3092\u8FFD\u52A0\n code = this.convLineno(node, false) + code;\n }\n else {\n // ------------------------------------\n // \u623B\u308A\u5024\u306E\u3042\u308B\u95A2\u6570\u306E\u5834\u5408\n // ------------------------------------\n let sorePrefex = '';\n let sorePostfix = '';\n if (this.speedMode.invalidSore === 0) {\n // \u95A2\u6570\u306E\u623B\u308A\u5024\u3092\u8A18\u9332\n sorePrefex = '__self.__setSore(';\n sorePostfix = ')';\n }\n if (funcBegin === '' && funcEnd === '') {\n code = `${sorePrefex}${funcCall}${sorePostfix}`;\n }\n else {\n if (funcEnd === '') {\n const funcBody = `${sorePrefex}${funcCall}${sorePostfix}`;\n const funcObj = `${funcDef}(){ return ${funcBody} }`;\n const funcCallThis = `(${funcObj}).call(this)`;\n code = `/* funcCallThis1 */${funcCallThis}`;\n }\n else { // \u3064\u307E\u308A\u3001pure=false\u306E\u5834\u5408\n const varI = `$nako_i${this.loopId}`;\n this.loopId++;\n code = `/* funcCallThis2 */(${funcDef}(){\\n` +\n indent(funcBegin, 1) + '\\n' +\n indent('try {', 1) + '\\n' +\n indent(`let ${varI} = ${funcCall};`, 2) + '\\n' +\n indent(`return ${varI};`, 2) + '\\n' +\n indent('} finally {', 2) + '\\n' +\n indent(funcEnd, 1) + '\\n' +\n indent('}', 1) + '\\n' +\n '}).call(this)';\n if (func.asyncFn) {\n code = `await (${code})`;\n }\n code = `${sorePrefex}${code}${sorePostfix}`;\n }\n }\n // ...\u3057\u3066\n if (node.josi === '\u3057\u3066' || (node.josi === '' && !isExpression)) {\n code = this.convLineno(node, false) + code;\n code += ';\\n';\n }\n }\n if (res.i === 0 && this.performanceMonitor.systemFunction !== 0) {\n code = '(function (key, type) {\\n' +\n 'const sf_start = performance.now() * 1000;\\n' +\n 'try {\\n' +\n 'return ' + code + ';\\n' +\n '} finally {\\n' +\n 'const sl_time = performance.now() * 1000 - sf_start;\\n' +\n 'if (!__self.__performance_monitor) {\\n' +\n '__self.__performance_monitor={};\\n' +\n '__self.__performance_monitor[key] = { called:1, totel_usec: sl_time, min_usec: sl_time, max_usec: sl_time, type: type };\\n' +\n '} else if (!__self.__performance_monitor[key]) {\\n' +\n '__self.__performance_monitor[key] = { called:1, totel_usec: sl_time, min_usec: sl_time, max_usec: sl_time, type: type };\\n' +\n '} else {\\n' +\n '__self.__performance_monitor[key].called++;\\n' +\n '__self.__performance_monitor[key].totel_usec+=sl_time;\\n' +\n 'if(__self.__performance_monitor[key].min_usec>sl_time){__self.__performance_monitor[key].min_usec=sl_time;}\\n' +\n 'if(__self.__performance_monitor[key].max_usec<sl_time){__self.__performance_monitor[key].max_usec=sl_time;}\\n' +\n `}}})('${funcName}_sys', 'system')\\n`;\n }\n return code;\n }\n convCallValue(node, isExpression) {\n const callee = this._convGen(node.blocks[0], true);\n const args = node.blocks.slice(1).map((arg) => this._convGen(arg, true));\n args.push('__self');\n const funcCall = `${callee}(${args.join(',')})`;\n if (isExpression) {\n return funcCall;\n }\n const sorePrefex = (this.speedMode.invalidSore === 0) ? '__self.__setSore(' : '';\n const sorePostfix = (this.speedMode.invalidSore === 0) ? ')' : '';\n return this.convLineno(node, false) + `${sorePrefex}${funcCall}${sorePostfix};\\n`;\n }\n convRenbun(node) {\n const right = this._convGen(node.blocks[1], true);\n const left = this._convGen(node.blocks[0], false);\n this.numAsyncFn++;\n this.usedAsyncFn = true;\n return `/*[\u9023\u6587]*/await (async function(){ ${left}; return ${right} }).call(this)/*[/\u9023\u6587]*/`;\n }\n convOp(node) {\n // \u30C8\u30FC\u30AF\u30F3\u540D\u304B\u3089JS\u6F14\u7B97\u5B50\u3078\u306E\u5909\u63DB - \u5358\u7D14\u306A\u5909\u63DB\u304C\u53EF\u80FD\u306A\u3082\u306E\u3092\u3053\u3053\u3067\u5B9A\u7FA9\n const OP_TBL = {\n '&': '+\"\"+',\n eq: '==',\n noteq: '!=',\n '===': '===',\n '!==': '!==',\n gt: '>',\n lt: '<',\n gteq: '>=',\n lteq: '<=',\n and: '&&',\n or: '||',\n shift_l: '<<',\n shift_r: '>>',\n shift_r0: '>>>',\n '\u00F7': '/'\n };\n let op = node.operator || ''; // \u6F14\u7B97\u5B50\n let right = this._convGen(node.blocks[1], true);\n let left = this._convGen(node.blocks[0], true);\n if (op === '+' && this.speedMode.implicitTypeCasting === 0) {\n if (node.blocks[0] && (node.blocks[0]).type !== 'number' && (node.blocks[0]).type !== 'bigint') {\n left = `self.__parseFloatOrBigint(${left})`;\n }\n if (node.blocks[1] && (node.blocks[1]).type !== 'number' && (node.blocks[1]).type !== 'bigint') {\n right = `self.__parseFloatOrBigint(${right})`;\n }\n }\n // \u968E\u4E57\n if (op === '^' || op === '**') {\n return `((${left}) ** (${right}))`;\n }\n // \u6574\u6570\u306E\u5272\u308A\u7B97 #1152\n if (op === '\u00F7\u00F7') {\n return `(Math.floor(${left} / ${right}))`;\n }\n // \u4E00\u822C\u7684\u306A\u30AA\u30DA\u30EC\u30FC\u30BF\u306B\u5909\u63DB\n if (OP_TBL[op]) {\n op = OP_TBL[op];\n }\n //\n return `(${left} ${op} ${right})`;\n }\n convInc(node) {\n // id\u3092\u5F97\u308B\n const id = this.loopId++;\n const valueVar = `$nako_v${id}`;\n // \u3082\u3057\u5024\u304C\u7701\u7565\u3055\u308C\u3066\u3044\u305F\u3089\u3001\u5909\u6570\u300C\u305D\u308C\u300D\u306B\u4EE3\u5165\u3059\u308B\n let incValue = '1';\n if (this.speedMode.invalidSore === 0) {\n incValue = this.varname_get('\u305D\u308C');\n }\n const astValue = node.blocks[0];\n if (astValue.type !== 'nop') {\n incValue = this._convGen(astValue, true);\n }\n // \u914D\u5217\u3078\u306E\u4EE3\u5165\u304B(core#86)\n let code = '';\n let varGetter = '';\n let varSetter = '';\n let varInitter = '';\n const nodeName = node.name;\n if (nodeName.type === 'ref_array') {\n varGetter = this.convRefArray(nodeName);\n varSetter = `${varGetter} = ${valueVar}`;\n varInitter = `${varGetter} = 0`;\n }\n else if (nodeName.type === 'ref_prop') {\n // \u30D7\u30ED\u30D1\u30C6\u30A3\u30A2\u30AF\u30BB\u30B9(A$a)\u306E\u5834\u5408 (#1793)\n const baseName = this._convGen(nodeName.name, true);\n const propList = nodeName.index;\n // __getProp/__setProp\u3092\u6301\u3064\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306B\u3082\u5BFE\u5FDC\u3059\u308Bgetter/setter\u751F\u6210\n const buildPropGetter = (targetExpr, propKey) => `(()=>{const __nako_obj=${targetExpr};` +\n `return (__nako_obj!=null&&typeof __nako_obj.__getProp==='function')` +\n `?__nako_obj.__getProp(${propKey}, __self)` +\n `:__nako_obj[${propKey}]})()`;\n const buildPropSetter = (targetExpr, propKey, valueExpr) => `(()=>{const __nako_obj=${targetExpr};` +\n `return (__nako_obj!=null&&typeof __nako_obj.__setProp==='function')` +\n `?__nako_obj.__setProp(${propKey}, ${valueExpr}, __self)` +\n `:(__nako_obj[${propKey}]=${valueExpr})})()`;\n const propKeys = propList.map((prop) => JSON.stringify(prop.value));\n // getter: \u5168\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u9806\u306B\u305F\u3069\u308B\n let currentExpr = baseName;\n for (const propKey of propKeys) {\n currentExpr = buildPropGetter(currentExpr, propKey);\n }\n varGetter = currentExpr;\n // setter/initter: \u6700\u5F8C\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u3060\u3051setter\u3067\u3001\u6B8B\u308A\u306Fgetter\u3067\u305F\u3069\u308B\n let parentExpr = baseName;\n for (const propKey of propKeys.slice(0, -1)) {\n parentExpr = buildPropGetter(parentExpr, propKey);\n }\n const lastPropKey = propKeys[propKeys.length - 1];\n varSetter = buildPropSetter(parentExpr, lastPropKey, valueVar);\n varInitter = buildPropSetter(parentExpr, lastPropKey, '0');\n }\n else {\n // \u5909\u6570\u540D\n const name = nodeName.value;\n let res = this.findVar(name, valueVar);\n if (res === null) {\n this.varsSet.names.add(name);\n res = this.findVar(name, valueVar);\n if (!res) {\n throw new Error('\u300E\u5897\u300F\u307E\u305F\u306F\u300E\u6E1B\u300F\u3067\u5909\u6570\u304C\u898B\u5F53\u305F\u308A\u307E\u305B\u3093\u3002');\n }\n }\n varGetter = res.js;\n varSetter = res.js_set;\n res = this.findVar(name, '0');\n if (res !== null) {\n varInitter = res.js_set;\n }\n }\n // \u81EA\u52D5\u521D\u671F\u5316\u3059\u308B\u304B\n code += '\\n/*[convInc]*/\\n';\n code += this.convLineno(node, false) + '\\n';\n code += `let ${valueVar} = ${varGetter}\\n`;\n code += `if (typeof ${valueVar} === 'undefined') { ${varInitter}; }\\n`;\n code += `${valueVar} = Number(${varGetter}) + Number(${incValue});\\n`;\n code += `${varSetter}\\n`;\n code += '/*[/convInc]*/\\n';\n return code;\n }\n convLet(node) {\n const astValue = node.blocks[0];\n // \u3082\u3057\u5024\u304C\u7701\u7565\u3055\u308C\u3066\u3044\u305F\u3089\u3001\u5909\u6570\u300C\u305D\u308C\u300D\u306B\u4EE3\u5165\u3059\u308B\n let value = null;\n if (this.speedMode.invalidSore === 0) {\n value = this.varname_get('\u305D\u308C');\n }\n // \u5024\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u751F\u6210\n if (astValue) {\n // \u95A2\u6570\u306E\u623B\u308A\u5024\u304C\u306A\u3044\u5834\u5408\u306F\u30A8\u30E9\u30FC\u3092\u51FA\u3059\n if (astValue.type === 'func' && astValue.name !== undefined) {\n const astFunc = astValue;\n const func = this.__self.getFunc(astFunc.name);\n if (func && func.return_none) {\n throw NakoSyntaxError.fromNode(`\u95A2\u6570\u300E${astValue.name}\u300F\u306F\u623B\u308A\u5024\u304C\u306A\u3044\u306E\u3067\u7D50\u679C\u3092\u4EE3\u5165\u3067\u304D\u307E\u305B\u3093\u3002`, node);\n }\n }\n value = this._convGen(astValue, true);\n }\n // \u623B\u308A\u5024\u306E\u691C\u8A3C\n if (value === null) {\n throw NakoSyntaxError.fromNode('\u4EE3\u5165\u3059\u308B\u5148\u306E\u5909\u6570\u540D\u304C\u3042\u308A\u307E\u305B\u3093\u3002', node);\n }\n // \u5909\u6570\u540D\n const name = node.name;\n const res = this.findVar(name, value);\n let code = '/*[convLet]*/';\n if (res === null) {\n this.varsSet.names.add(name);\n code = `${this.varname_set(name, value)};`;\n }\n else {\n // \u5B9A\u6570\u306A\u3089\u30A8\u30E9\u30FC\u3092\u51FA\u3059\n if (this.varslistSet[res.i].readonly.has(name)) {\n throw NakoSyntaxError.fromNode(`\u5B9A\u6570\u300E${name}\u300F\u306F\u65E2\u306B\u5B9A\u7FA9\u6E08\u307F\u306A\u306E\u3067\u3001\u5024\u3092\u4EE3\u5165\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002`, node);\n }\n code = `${res.js_set};`;\n }\n return ';' + this.convLineno(node, false) + code + '\\n';\n }\n // \u30D7\u30ED\u30D1\u30C6\u30A3\u3078\u306E\u4EE3\u5165\u5F0F (#1793)\n convLetProp(node) {\n if (!node.index || node.index.length === 0) {\n throw NakoSyntaxError.fromNode('\u4EE3\u5165\u3059\u308B\u5148\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u540D\u304C\u3042\u308A\u307E\u305B\u3093\u3002', node);\n }\n if (!node.blocks || node.blocks.length === 0) {\n throw NakoSyntaxError.fromNode('\u4EE3\u5165\u3059\u308B\u5024\u304C\u3042\u308A\u307E\u305B\u3093\u3002', node);\n }\n const propList = node.index;\n const propTopAst = propList.pop();\n if (propTopAst === undefined) {\n throw NakoSyntaxError.fromNode('\u4EE3\u5165\u3059\u308B\u5148\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u540D\u304C\u3042\u308A\u307E\u305B\u3093\u3002', node);\n }\n const propTop = (typeof propTopAst.value === 'string') ? propTopAst.value : '';\n const astValue = node.blocks[0];\n let value = null;\n // \u5024\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u751F\u6210\n if (astValue) {\n value = this._convGen(astValue, true);\n }\n else {\n throw NakoSyntaxError.fromNode('\u4EE3\u5165\u3059\u308B\u5024\u304C\u3042\u308A\u307E\u305B\u3093\u3002', node);\n }\n // \u5909\u6570\u540D\n const name = node.name;\n const res = this.findVar(name, value);\n let code = '/*[convLetProp]*/\\n';\n // \u5909\u6570\u304C\u5B58\u5728\u3057\u306A\u3044\u3068\u304D\n if (res === null) {\n throw NakoSyntaxError.fromNode(`\u5909\u6570\u300E${name}\u300F\u304C\u898B\u5F53\u305F\u308A\u307E\u305B\u3093\u3002`, node);\n }\n // \u5909\u6570\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\n let nameJs = res.js;\n // \u914D\u5217\u30A2\u30AF\u30BB\u30B9\n if (node.blocks.length >= 2) {\n for (let i = 1; i < node.blocks.length; i++) {\n const indexNode = node.blocks[i];\n const indexJs = this._convGen(indexNode, true);\n nameJs += `[${indexJs}]`;\n }\n }\n if (propList.length > 0) {\n for (const prop of propList) {\n if (typeof prop.value === 'string') {\n nameJs += `['${prop.value}']`;\n }\n else {\n throw NakoSyntaxError.fromNode(`\u5909\u6570\u300E${nameJs}\u300F\u4EE5\u4E0B\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u306B\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u307E\u305B\u3093\u3002`, node);\n }\n }\n }\n // \u30D7\u30ED\u30D1\u30C6\u30A3\u3078\u306E\u4EE3\u5165\u5F0F\u3092\u4F5C\u308B\n code += `if (typeof ${nameJs}.__setProp === 'function') { ${nameJs}.__setProp('${propTop}', ${value}, __self); } else { `;\n code += `__self.__checkPropAccessor('set', ${nameJs});`;\n code += `if (typeof ${nameJs}.__setProp === 'function') { ${nameJs}.__setProp('${propTop}', ${value}, __self); } else { `;\n code += `${nameJs}['${propTop}'] = ${value} }};`;\n return ';' + this.convLineno(node, false) + code + '\\n';\n }\n // \u30D7\u30ED\u30D1\u30C6\u30A3\u3078\u306E\u53C2\u7167 (#1793)\n convRefProp(node) {\n const name = this._convGen(node.name, true);\n const list = node.index;\n if (!list || list.length <= 0) {\n throw NakoSyntaxError.fromNode('\u30D7\u30ED\u30D1\u30C6\u30A3\u304C\u3042\u308A\u307E\u305B\u3093\u3002', node);\n }\n return this.convRefProp_genCode(name, list);\n }\n // \u30D7\u30ED\u30D1\u30C6\u30A3\u3078\u306E\u53C2\u7167\u306E\u30B3\u30FC\u30C9\u751F\u6210\u90E8\u5206 (#1793)\n convRefProp_genCode(name, propList) {\n let code;\n if (propList.length <= 1) {\n const propKey = propList[0].value;\n const codeCall = `${name}.__getProp('${propKey}', __self)`;\n const codeProp = `${name}['${propKey}']`;\n const codeCheckAccessor = `__self.__checkPropAccessor('get', ${name});\\n` +\n `if (typeof ${name}.__getProp === 'function') { return ${codeCall} }\\n` +\n `return ${codeProp}\\n`;\n const codeIf = `if (${name}.__getProp) { return ${codeCall} } else { ${codeCheckAccessor} }`;\n code = `( (()=>{ ${codeIf} })() )`;\n }\n else {\n const arrs = [];\n const keys = [];\n for (let i = 0; i < propList.length; i++) {\n const propKey = propList[i].value;\n keys.push(`['${propKey}']`);\n arrs.push(`'${propKey}'`);\n }\n const keyStr = keys.join('');\n const arrStr = '[' + arrs.join(',') + ']';\n const codeCall = `${name}.__getProp(${arrStr}, __self)`;\n const codeProp = `${name}${keyStr}`;\n const codeCheckAccessor = `__self.__checkPropAccessor('get', ${name});\\n` +\n `if (${name}.__getProp) { return ${codeCall} }\\n` +\n `return ${codeProp}\\n`;\n const codeIf = `if (${name}.__getProp) { return ${codeCall} } else { ${codeCheckAccessor} }`;\n code = `( (()=>{ ${codeIf} })() )`;\n }\n return code;\n }\n convDefLocalVar(node) {\n const astValue = node.blocks[0];\n let value = '0';\n if (astValue.type !== 'nop') {\n value = this._convGen(astValue, true);\n }\n const name = node.name; // \u5909\u6570\u540D\n const vtype = node.vartype; // \u5909\u6570 or \u5B9A\u6570\n // \u4E8C\u91CD\u5B9A\u7FA9\uFF1F\n if (this.varsSet.names.has(name)) {\n throw NakoSyntaxError.fromNode(`${vtype}\u300E${name}\u300F\u306E\u4E8C\u91CD\u5B9A\u7FA9\u306F\u3067\u304D\u307E\u305B\u3093\u3002`, node);\n }\n //\n this.varsSet.names.add(name);\n if (vtype === '\u5B9A\u6570') {\n this.varsSet.readonly.add(name);\n }\n const code = `/*${vtype}*/${this.varname_set(name, value)};\\n`;\n return this.convLineno(node, false) + code;\n }\n // #563 \u8907\u6570\u5909\u6570\u3078\u306E\u4EE3\u5165\n convDefLocalVarlist(node) {\n let code = '';\n const vtype = node.vartype; // \u5909\u6570 or \u5B9A\u6570\n // \u521D\u671F\u5024\u3092\u53D6\u5F97\n let value = '0';\n if (node.blocks.length > 0) {\n const astValue = node.blocks[0];\n if (astValue.type !== 'nop') {\n value = this._convGen(astValue, true);\n }\n }\n // \u4EE3\u5165\u3059\u308B\u5909\u6570\u540D\u3092\u53D6\u5F97\n const id = this.loopId++;\n const varI = `$nako_i${id}`;\n code += `let ${varI} = ${value}\\n`;\n code += `if (!(${varI} instanceof Array)) { ${varI}=[${varI}] }\\n`;\n const names = (node.names) ? node.names : [];\n for (let i = 0; i < names.length; i++) {\n const nameObj = names[i];\n const name = nameObj.value;\n // \u4E8C\u91CD\u5B9A\u7FA9\uFF1F\n if (this.varsSet.names.has(name)) {\n // \u8907\u6570\u5909\u6570\u6587\u3067\u306F\u3001\u4E8C\u91CD\u5B9A\u7FA9\u3082\u8A31\u5BB9\u3059\u308B #1027\n // throw NakoSyntaxError.fromNode(`${vtype}\u300E${name}\u300F\u306E\u4E8C\u91CD\u5B9A\u7FA9\u306F\u3067\u304D\u307E\u305B\u3093\u3002`, node)\n }\n this.varsSet.names.add(name);\n if (vtype === '\u5B9A\u6570') {\n this.varsSet.readonly.add(name);\n }\n code += this.varname_set(name, `${varI}[${i}]`) + ';\\n';\n }\n return this.convLineno(node, false) +\n '/*[convDefLocalVarlist]*/\\n' +\n code +\n '/*[/convDefLocalVarlist]*/\\n';\n }\n convString(node) {\n let value = String(node.value);\n value = value.replace(/\\\\/g, '\\\\\\\\');\n value = value.replace(/\"/g, '\\\\\"');\n value = value.replace(/\\r/g, '\\\\r');\n value = value.replace(/\\n/g, '\\\\n');\n return '\"' + value + '\"';\n }\n convTryExcept(node) {\n const block = this._convGen(node.blocks[0], false);\n const errBlock = this._convGen(node.blocks[1], false);\n return this.convLineno(node, false) +\n `try {\\n${block}\\n} catch (e) {\\n` +\n ' __self.__setSysVar(\"\u30A8\u30E9\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8\", e.message);\\n' +\n ';\\n' +\n `${errBlock}}\\n`;\n }\n getUsedFuncSet() {\n return this.usedFuncSet;\n }\n getPluginInitCode() {\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u521D\u671F\u5316\u95A2\u6570\u3092\u5B9F\u884C\u3059\u308B\n let code = '';\n let pluginCode = '';\n for (const name in this.__self.__module) {\n const initkey = `!${name}:\u521D\u671F\u5316`;\n if (this.varslistSet[0].names.has(initkey)) {\n const initkeyDone = `!${name}:\u521D\u671F\u5316\u6E08`;\n this.usedFuncSet.add(initkey);\n pluginCode += `if (!__v0.has('${initkeyDone}')) { __v0.get('${initkey}')(__self); __v0.set('${initkeyDone}', true) }\\n`;\n }\n }\n if (pluginCode !== '') {\n code += '__v0.set(\\'__line\\', \\'l0:\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u521D\u671F\u5316\\');\\n' + pluginCode;\n }\n return code;\n }\n}\n/** template of standalone js code */\nconst STANDALONE_CODE = `\n// === generated by nadesiko3 v__version__(core:__coreVersion__) ===\n// -----------------------------------------------------------------\n// <nadesiko3standalone>\n// -----------------------------------------------------------------\n// --- import\nimport path from 'path'\nimport { NakoRuntimeError } from './nako3runtime/nako_errors.mjs'\n__codeImportFiles__\n// --- init global self\nconst self = {\n newVariables: () => {\n const map = new Map()\n return map\n }\n}\nself.coreVersion = '__coreVersion__'\nself.version = '__version__'\nself.logger = {\n error: (message) => { console.error(message) },\n warn: (message) => { console.warn(message) },\n send: (level, message) => { console.log(message) },\n runtimeError: (message, lineInfo) => { console.error(message, lineInfo) }\n};\nself.__varslist = [self.newVariables(), self.newVariables(), self.newVariables()]\nself.__v0 = self.__varslist[0]\nself.initFuncList = []\nself.clearFuncList = []\nself.__propAccessor = []\n// --- jsInit ---\n__jsInit__\n// --- Copy module functions ---\nfor (const mod of __importNames__) {\n for (const funcName in mod) {\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u521D\u671F\u5316\u3068\u30AF\u30EA\u30A2\u95A2\u6570\u3092\u767B\u9332\n if (funcName === '\u521D\u671F\u5316') {\n __self.initFuncList.push(mod[funcName].fn)\n continue\n }\n if (funcName === '!\u30AF\u30EA\u30A2') {\n __self.clearFuncList.push(mod[funcName].fn)\n continue\n }\n // \u95A2\u6570\u3084\u5B9A\u6570\u3092\u767B\u9332\n const f = mod[funcName]\n if (f.type === 'func') { // \u95A2\u6570\n __self.__varslist[0].set(funcName, f.fn)\n } else { // \u5B9A\u6570\n __self.__varslist[0].set(funcName, f.value)\n }\n }\n}\n__self.__vars = __self.__varslist[2];\n__self.__module = {};\n__self.__locals = __self.newVariables();\n__self.__genMode = 'sync';\n// \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u521D\u671F\u5316\u30B3\u30FC\u30C9\u3092\u5B9F\u884C\n__self.initFuncList.map(f => f(self))\n// standalone\n__self.__v0.set('__standalone', true)\n// -----------------------------------------------------------------\ntry {\n try {\n// -----------------------------------------------------------------\n// <prepareMainCode>\n__codeStandalone__\n// </prepareMainCode>\n// -----------------------------------------------------------------\n// <mainCode>\n// -----------------------------------------------------------------\n__codeJS__\n// -----------------------------------------------------------------\n// </mainCode>\n// -----------------------------------------------------------------\n } catch (err) {\n __self.logger.error(err);\n throw err;\n }\n} finally {\n // standaloneCode\u3067\u306F\u3001\u5373\u6642\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30AF\u30EA\u30A2\u30B3\u30FC\u30C9\u3092\u5B9F\u884C\n __self.clearFuncList.map(f => f(__self))\n}\n// -----------------------------------------------------------------\n// </nadesiko3standalone>\n// -----------------------------------------------------------------\n`;\n/**\n * @param com\n * @param ast\n * @param opt\n */\nexport function generateJS(com, ast, opt) {\n // NakoGen\u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3092\u4F5C\u6210\n const gen = new NakoGen(com);\n // \u203B [\u95A2\u6570\u5B9A\u7FA9\u306B\u95A2\u3059\u308B\u30B3\u30FC\u30C9\u751F\u6210\u306E\u30D2\u30F3\u30C8]\n // \u203B \u95A2\u6570\u306E\u540D\u524D\u3060\u3051\u3092(1)\u3067\u767B\u9332\u3057\u3066\u3001(2)\u3067\u5B9F\u969B\u306B\u95A2\u6570\u306E\u30B3\u30FC\u30C9\u3092\u751F\u6210\u3059\u308B\u3002\n // \u203B \u305F\u3060\u3057(2)\u3067\u306F\u751F\u6210\u3059\u308B\u3060\u3051\u306A\u306E\u3067\u3001(3)\u3067\u30D7\u30ED\u30B0\u30E9\u30E0\u5192\u982D\u306B\u95A2\u6570\u5B9A\u7FA9\u306E\u30B3\u30FC\u30C9\u3092\u8A18\u8FF0\u3059\u308B\u3002\n // \u3053\u306E\u9806\u756A\u3092\u5909\u3048\u308B\u3053\u3068\u306F\u3067\u304D\u306A\u3044 (\u30B0\u30ED\u30FC\u30D0\u30EB\u5909\u6570\u304C\u8A8D\u8B58\u3067\u304D\u306A\u304F\u306A\u3063\u305F\u308A\u3001\u95A2\u6570\u5B9A\u7FA9\u306E\u30BF\u30A4\u30DF\u30F3\u30B0\u304C\u305A\u308C\u308B)\n // (1) \u30E6\u30FC\u30B6\u30FC\u5B9A\u7FA9\u95A2\u6570\u3092\u30B7\u30B9\u30C6\u30E0\u306B\u767B\u9332\u3059\u308B\n gen.registerFunction(ast);\n // (2) JS\u30B3\u30FC\u30C9\u3092\u751F\u6210\u3059\u308B\n let js = trim(cleanGeneratedCode(gen.convGen(ast, opt), 1));\n // (3) JS\u30B3\u30FC\u30C9\u3092\u5B9F\u884C\u3059\u308B\u305F\u3081\u306E\u4E8B\u524D\u30D8\u30C3\u30C0\u90E8\u5206\u306E\u751F\u6210\n const jsInit = gen.getDefFuncCode(com, opt);\n // \u30E9\u30F3\u30C0\u30E0\u306A\u95A2\u6570\u540D\u3092\u751F\u6210\n const funcID = String((new Date()).getTime()) + '_' + Math.floor(0xFFFFFFFF * Math.random()).toString();\n // \u30C6\u30B9\u30C8\u306E\u5B9F\u884C\n if (js && opt.isTest) {\n js += '\\n__self._runTests(__tests);\\n';\n }\n // async method\n if (gen.numAsyncFn > 0 || gen.debugOption.useDebug) {\n const asyncMain = '__eval_nako3async_' + funcID + '__';\n js = `\n// ------------------------------------------------------------------\n// <nadesiko3::gen::async id=\"${funcID}\" times=\"${gen.numAsyncFn}\">\n// ------------------------------------------------------------------\nasync function ${asyncMain}(__self) {\n // --- code_begin ---\n ${js}\n // --- code_end ---\n // __\u51E6\u7406\u672B\u5C3E__ // \u2190 \u30C6\u30B9\u30C8\u306A\u3069\u3067\u5FC5\u8981\u306A\u306E\u3067\u6D88\u3055\u306A\u3044\n} // end of ${asyncMain}\n// ------------------------------------------------------------------\n// call ${asyncMain}\n(async () => {\n if (__self.__v0.get('__standalone')) {\n await ${asyncMain}(self);\n } else {\n ${asyncMain}.call(self, self)\n .then(() => { /* __async_ok__ */ })\n .catch(err => {\n if (err.message === '__\u7D42\u308F\u308B__') { return }\n __self.numFailures++\n // send errors to logger\n let rterr = __self.logger.runtimeError(err, __self.__v0.get('__line'))\n __self.logger.error(rterr)\n })\n }\n})();\n// ------------------------------------------------------------------\n// </nadesiko3::gen::async id=\"${funcID}\">\n// ------------------------------------------------------------------\n`;\n }\n else {\n const syncMain = '__eval_nako3sync_' + funcID + '__';\n js = `\n// ------------------------------------------------------------------\n// <nadesiko3::gen::syncMode>\n// ------------------------------------------------------------------\nfunction ${syncMain}(__self) {\ntry {\n ${js}\n // __\u51E6\u7406\u672B\u5C3E__ // \u2190 \u30C6\u30B9\u30C8\u306A\u3069\u3067\u5FC5\u8981\u306A\u306E\u3067\u6D88\u3055\u306A\u3044\n} catch (err) {\n if (err.message === '__\u7D42\u308F\u308B__') { return }\n __self.numFailures++\n throw __self.logger.runtimeError(err, __self.__v0.get('__line'))\n}\n} // end of ${syncMain}\n${syncMain}(__self)\n// ------------------------------------------------------------------\n// </nadesiko3::gen::syncMode>\n// ------------------------------------------------------------------\n`;\n }\n // --- \u751F\u6210\u3057\u305F\u30B3\u30FC\u30C9\u306E\u7C21\u5358\u306A\u6574\u5F62 ---\n js = cleanGeneratedCode(js);\n // \u30C7\u30D0\u30C3\u30B0\u30E1\u30C3\u30BB\u30FC\u30B8\n let codeImportFiles = '';\n const importNames = [];\n for (const f of opt.importFiles) {\n if (f === 'nako_errors.mjs') {\n continue;\n }\n const ff = 'nako3runtime_' + f.replace(/\\.(js|mjs)$/, '').replace(/[^a-zA-Z0-9_]/g, '_');\n importNames.push(ff);\n codeImportFiles += `import ${ff} from './nako3runtime/${f}'\\n`;\n }\n // ---\n const initCode = gen.getPluginInitCode();\n const runtimeEnvCode = `\n// <runtimeEnvCode>\nconst self = this\n${opt.codeEnv}\n${jsInit}\n${initCode}\n${js}\n// </runtimeEnvCode>\n`;\n com.getLogger().trace('--- generate::jsInit ---\\n' + jsInit);\n com.getLogger().trace('--- generate::js ---\\n' + js);\n return {\n // \u306A\u3067\u3057\u3053\u306E\u5B9F\u884C\u74B0\u5883\u3042\u308A\u306E\u5834\u5408(this\u304C\u6709\u52B9)\n runtimeEnv: runtimeEnvCode,\n // JavaScript\u5358\u4F53\u3067\u52D5\u304B\u3059\u5834\u5408\n standalone: replaceTemplateCode(STANDALONE_CODE, {\n codeImportFiles,\n 'coreVersion': com.coreVersion,\n 'version': com.version,\n 'importNames': ('[' + importNames.join(', ') + ']'),\n 'codeStandalone': opt.codeStandalone,\n 'codeJS': js,\n jsInit\n }),\n // \u30B3\u30FC\u30C9\u751F\u6210\u306B\u4F7F\u3063\u305FNakoGen\u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\n gen\n };\n}\n// template\nfunction replaceTemplateCode(template, values) {\n for (const key in values) {\n const pat = `__${key}__`;\n const val = values[key];\n template = template.split(pat).join(val);\n }\n return template;\n}\n// clean generated code\nfunction cleanGeneratedCode(code, indent = 0) {\n // 1. \u7121\u610F\u5473\u306A\u6539\u884C\u3084\u30BB\u30DF\u30B3\u30ED\u30F3\u3092\u524A\u9664\n // 2. \u884C\u982D\u306E\u7A7A\u767D\u3084\u30BB\u30DF\u30B3\u30ED\u30F3\u3092\u524A\u9664\n // 3. indent\u5206\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u8FFD\u52A0\n // \u305F\u3060\u3057\u3001\u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u5185\u306E\u6539\u884C\u3084\u30BB\u30DF\u30B3\u30ED\u30F3\u306F\u524A\u9664\u3057\u306A\u3044 (#2153)\n // \u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u5916\u306E\u9023\u7D9A\u30BB\u30DF\u30B3\u30ED\u30F3\u3068\u9023\u7D9A\u6539\u884C\u3092\u524A\u9664\n code = removeDuplicateChars(code);\n // indent\u5206\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u8FFD\u52A0\n let spc = '';\n for (let i = 0; i < indent; i++) {\n spc += ' ';\n }\n // \u884C\u982D\u306E\";\"\u3092\u524A\u9664\n const result = [];\n const lines = code.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n let line = lines[i];\n line = line.replace(/^(\\s*);/, '$1');\n if (trim(line) === '') {\n continue;\n }\n result.push(spc + line);\n }\n // \u7D50\u679C\u306E\u30B3\u30FC\u30C9\u3092\u8FD4\u3059\n code = result.join('\\n');\n return code;\n}\n/**\n * \u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u5916\u306E\u9023\u7D9A\u30BB\u30DF\u30B3\u30ED\u30F3\u3068\u9023\u7D9A\u6539\u884C\u30921\u3064\u306B\u7F6E\u63DB\u3059\u308B\n * \u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u5185\u306E\u30BB\u30DF\u30B3\u30ED\u30F3\u3068\u6539\u884C\u306F\u4FDD\u8B77\u3059\u308B (#2153)\n * JavaScript\u306E\u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u3001\u6B63\u898F\u8868\u73FE\u3001\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30EA\u30C6\u30E9\u30EB\u3001\u30B3\u30E1\u30F3\u30C8\u3092\u8003\u616E\n */\nfunction removeDuplicateChars(code) {\n const result = [];\n let i = 0;\n let inString = false;\n let inRegex = false;\n let inTemplate = false;\n let inLineComment = false;\n let inBlockComment = false;\n let stringDelimiter = '';\n let prevChar = '';\n let lastSemiPos = -2; // \u6700\u5F8C\u306E\u30BB\u30DF\u30B3\u30ED\u30F3\u306E\u4F4D\u7F6E\n let lastNewlinePos = -2; // \u6700\u5F8C\u306E\u6539\u884C\u306E\u4F4D\u7F6E\n /**\n * \u76F4\u524D\u306E\u30D0\u30C3\u30AF\u30B9\u30E9\u30C3\u30B7\u30E5\u306E\u6570\u3092\u30AB\u30A6\u30F3\u30C8\n * \u5076\u6570\u500B\u306A\u3089\u6B21\u306E\u6587\u5B57\u306F\u30A8\u30B9\u30B1\u30FC\u30D7\u3055\u308C\u3066\u3044\u306A\u3044\n */\n const countBackslashes = (pos) => {\n let count = 0;\n let p = pos - 1;\n while (p >= 0 && code.charAt(p) === '\\\\') {\n count++;\n p--;\n }\n return count;\n };\n while (i < code.length) {\n const ch = code.charAt(i);\n const nextCh = i + 1 < code.length ? code.charAt(i + 1) : '';\n // \u884C\u30B3\u30E1\u30F3\u30C8\u306E\u51E6\u7406\n if (inLineComment) {\n result.push(ch);\n if (ch === '\\n') {\n inLineComment = false;\n }\n prevChar = ch;\n i++;\n continue;\n }\n // \u30D6\u30ED\u30C3\u30AF\u30B3\u30E1\u30F3\u30C8\u306E\u51E6\u7406\n if (inBlockComment) {\n result.push(ch);\n if (ch === '*' && nextCh === '/') {\n result.push(nextCh);\n inBlockComment = false;\n i += 2;\n prevChar = '/';\n continue;\n }\n prevChar = ch;\n i++;\n continue;\n }\n // \u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30EA\u30C6\u30E9\u30EB\u306E\u51E6\u7406\n if (inTemplate) {\n result.push(ch);\n if (ch === '`') {\n const backslashCount = countBackslashes(i);\n if (backslashCount % 2 === 0) {\n // \u5076\u6570\u500B\u306E\u30D0\u30C3\u30AF\u30B9\u30E9\u30C3\u30B7\u30E5 = \u30A8\u30B9\u30B1\u30FC\u30D7\u3055\u308C\u3066\u3044\u306A\u3044\n inTemplate = false;\n }\n }\n prevChar = ch;\n i++;\n continue;\n }\n // \u6B63\u898F\u8868\u73FE\u306E\u51E6\u7406\n if (inRegex) {\n result.push(ch);\n if (ch === '/') {\n const backslashCount = countBackslashes(i);\n if (backslashCount % 2 === 0) {\n inRegex = false;\n }\n }\n prevChar = ch;\n i++;\n continue;\n }\n // \u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u306E\u51E6\u7406\n if (inString) {\n result.push(ch);\n if (ch === stringDelimiter) {\n const backslashCount = countBackslashes(i);\n if (backslashCount % 2 === 0) {\n // \u5076\u6570\u500B\u306E\u30D0\u30C3\u30AF\u30B9\u30E9\u30C3\u30B7\u30E5 = \u30A8\u30B9\u30B1\u30FC\u30D7\u3055\u308C\u3066\u3044\u306A\u3044\n inString = false;\n stringDelimiter = '';\n }\n }\n prevChar = ch;\n i++;\n continue;\n }\n // \u30B3\u30E1\u30F3\u30C8\u958B\u59CB\u30C1\u30A7\u30C3\u30AF\n if (ch === '/' && nextCh === '/') {\n result.push(ch);\n result.push(nextCh);\n inLineComment = true;\n i += 2;\n prevChar = '/';\n continue;\n }\n if (ch === '/' && nextCh === '*') {\n result.push(ch);\n result.push(nextCh);\n inBlockComment = true;\n i += 2;\n prevChar = '*';\n continue;\n }\n // \u6587\u5B57\u5217\u30FB\u6B63\u898F\u8868\u73FE\u30FB\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30EA\u30C6\u30E9\u30EB\u306E\u958B\u59CB\u30C1\u30A7\u30C3\u30AF\n if (ch === '\"' || ch === '\\'') {\n inString = true;\n stringDelimiter = ch;\n result.push(ch);\n prevChar = ch;\n i++;\n continue;\n }\n if (ch === '`') {\n inTemplate = true;\n result.push(ch);\n prevChar = ch;\n i++;\n continue;\n }\n // \u6B63\u898F\u8868\u73FE\u30EA\u30C6\u30E9\u30EB\u306E\u958B\u59CB\u30C1\u30A7\u30C3\u30AF\uFF08\u7C21\u6613\u7248\uFF09\n // / \u306E\u524D\u304C\u6F14\u7B97\u5B50\u3084 ( \u3084 , \u3084 = \u306A\u3069\u306E\u5834\u5408\u306F\u6B63\u898F\u8868\u73FE\u306E\u53EF\u80FD\u6027\u304C\u9AD8\u3044\n if (ch === '/' && /[=([,;:!&|?+\\-*%^~{]|\\breturn\\b|\\bnew\\b/.test(prevChar)) {\n inRegex = true;\n result.push(ch);\n prevChar = ch;\n i++;\n continue;\n }\n // \u6587\u5B57\u5217\u5916\u306E\u9023\u7D9A\u30BB\u30DF\u30B3\u30ED\u30F3\u3092\u30B9\u30AD\u30C3\u30D7\n if (ch === ';' && lastSemiPos === i - 1) {\n // \u9023\u7D9A\u3059\u308B\u30BB\u30DF\u30B3\u30ED\u30F3\u306E2\u756A\u76EE\u4EE5\u964D\u306F\u30B9\u30AD\u30C3\u30D7\n lastSemiPos = i;\n i++;\n prevChar = ch;\n continue;\n }\n if (ch === ';') {\n lastSemiPos = i;\n }\n // \u6587\u5B57\u5217\u5916\u306E\u9023\u7D9A\u6539\u884C\u3092\u30B9\u30AD\u30C3\u30D7\n if (ch === '\\n' && lastNewlinePos === i - 1) {\n // \u9023\u7D9A\u3059\u308B\u6539\u884C\u306E2\u756A\u76EE\u4EE5\u964D\u306F\u30B9\u30AD\u30C3\u30D7\n lastNewlinePos = i;\n i++;\n prevChar = ch;\n continue;\n }\n if (ch === '\\n') {\n lastNewlinePos = i;\n }\n result.push(ch);\n prevChar = ch;\n i++;\n }\n return result.join('');\n}\n/**\n * \u524D\u5F8C\u306E\u7A7A\u767D\u3092\u524A\u9664\u3059\u308B\n * @param str \u5BFE\u8C61\u6587\u5B57\u5217\n * @returns \u30C8\u30EA\u30E0\u3057\u305F\u6587\u5B57\u5217\n */\nfunction trim(str) {\n str = String(str);\n return str.replace(/^\\s+|\\s+$/g, '');\n}\n", "/**\n * \u3088\u304F\u4F7F\u3046\u51E6\u7406\u3092\u307E\u3068\u3081\u305F\u3082\u306E\n */\nimport { NewEmptyToken } from './nako_types.mjs';\n/**\n * \u30C8\u30FC\u30AF\u30F3\u306E\u5185\u5BB9\u3092\u30C7\u30D0\u30C3\u30B0\u51FA\u529B\u3059\u308B\u95A2\u6570\n * @param tokens \u30C8\u30FC\u30AF\u30F3\u306E\u4E00\u89A7\n * @returns \u6587\u5B57\u5217\n */\nexport function debugTokens(tokens) {\n const result = [];\n for (let i = 0; i < tokens.length; i++) {\n const t = tokens[i];\n const ftype = t.type;\n const fvalue = t.value;\n let s = `[${ftype}:${fvalue}]`;\n if (ftype === fvalue) {\n s = ftype;\n }\n if (ftype === 'comma') {\n s = ',';\n }\n if (ftype === 'string') {\n s = `\"${fvalue}\"`;\n }\n if (ftype === 'number') {\n s = `(${fvalue})`;\n }\n if (ftype === 'word') {\n s = `[word:${fvalue}]`;\n }\n if (!result[t.line]) {\n result[t.line] = makeIndent(t.indent);\n }\n result[t.line] += s + t.josi + '|';\n }\n return result.join('\\n');\n}\nexport function makeIndent(n) {\n let s = '';\n for (let i = 0; i < n; i++) {\n s += ' ';\n }\n return s;\n}\nlet lastTokenInfo = NewEmptyToken();\nexport function newToken(type, value, templateToken = undefined) {\n if (templateToken) {\n lastTokenInfo = templateToken;\n }\n const t = NewEmptyToken(type, value, lastTokenInfo.indent, lastTokenInfo.line, lastTokenInfo.file);\n return t;\n}\n", "/** \u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u3092\u51E6\u7406\u3059\u308B\u30E2\u30B8\u30E5\u30FC\u30EB */\nimport { NakoIndentError } from '../src/nako_errors.mjs';\nimport { NewEmptyToken } from './nako_types.mjs';\nimport { debugTokens, newToken } from './nako_tools.mjs';\nconst IS_DEBUG = false;\nfunction isSkipWord(t) {\n if (t.type === '\u9055\u3048\u3070') {\n return true;\n }\n if (t.type === 'word' && t.value === '\u30A8\u30E9\u30FC' && t.josi === '\u306A\u3089\u3070') {\n return true;\n }\n return false;\n}\n// \u524D\u51E6\u7406\u3068\u3057\u3066\u3001JSON\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u5185\u306B\u6539\u884C\u304C\u3042\u308C\u3070\u524A\u9664\u3059\u308B\u51E6\u7406\u3092\u8FFD\u52A0\nfunction removeJsonEol(tokens) {\n let jsonObjLevel = 0;\n let jsonArrayLevel = 0;\n let jsonStartIndent = -1;\n let flagNeedResetIndent = false;\n for (let i = 0; i < tokens.length; i++) {\n const t = tokens[i];\n // start of JSON\n if (t.type === '{') {\n jsonObjLevel++;\n if (jsonStartIndent === -1) {\n jsonStartIndent = t.indent;\n }\n continue;\n }\n if (t.type === '[') {\n jsonArrayLevel++;\n if (jsonStartIndent === -1) {\n jsonStartIndent = t.indent;\n }\n continue;\n }\n // end of JSON\n if (t.type === '}') {\n jsonObjLevel--;\n if (jsonObjLevel === 0 && jsonArrayLevel === 0) {\n flagNeedResetIndent = true;\n }\n continue;\n }\n if (t.type === ']') {\n jsonArrayLevel--;\n if (jsonObjLevel === 0 && jsonArrayLevel === 0) {\n flagNeedResetIndent = true;\n }\n continue;\n }\n if (jsonObjLevel > 0 || jsonArrayLevel > 0) {\n t.indent = jsonStartIndent;\n if (t.type === 'eol') {\n // replace eol to comment\n t.type = 'range_comment';\n t.value = 'json::eol';\n }\n continue;\n }\n if (flagNeedResetIndent) {\n t.indent = jsonStartIndent;\n if (t.type === 'eol') {\n flagNeedResetIndent = false;\n jsonStartIndent = -1;\n }\n }\n }\n}\n/** \u30A4\u30F3\u30E9\u30A4\u30F3\u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587 --- \u672B\u5C3E\u306E\":\"\u3092\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u8003\u616E\u3057\u3066\"\u3053\u3053\u307E\u3067\"\u3092\u633F\u5165 (#1215) */\nexport function convertInlineIndent(tokens) {\n //\n // 0:\u3082\u3057\u3001A=0\u306A\u3089\u3070:\n // 2: \u3082\u3057\u3001B=0\u306A\u3089\u3070:\n // 4: \u300CA=0,B=0\u300D\u3092\u8868\u793A\u3002\n // 2: \u9055\u3048\u3070:\n // 4: \u300CA=0,B!=0\u300D\u3092\u8868\u793A\u3002\n // 5:\u9055\u3048\u3070:\n // 6: \u300CA!=0\u300D\u3092\u8868\u793A\u3002\n // \u524D\u51E6\u7406\n removeJsonEol(tokens);\n // \u4E00\u884C\u305A\u3064\u51E6\u7406\u3059\u308B\n const lines = splitTokens(tokens, 'eol');\n const blockIndents = [];\n let checkICount = -1;\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n // \u7A7A\u884C\u306F\u98DB\u3070\u3059 || \u30B3\u30E1\u30F3\u30C8\u884C\u3060\u3051\u306E\u884C\u3082\u98DB\u3070\u3059\n if (IsEmptyLine(line)) {\n continue;\n }\n const leftToken = GetLeftTokens(line);\n // \u30A4\u30F3\u30C7\u30F3\u30C8\u306E\u7D42\u4E86\u3092\u78BA\u8A8D\u3059\u308B\u5FC5\u8981\u304C\u3042\u308B\u304B\uFF1F\n if (checkICount >= 0) {\n const lineICount = leftToken.indent;\n while (checkICount >= lineICount) {\n const tFirst = leftToken;\n // console.log('@@', lineICount, '>>', checkICount, tFirst.type)\n if (isSkipWord(tFirst) && (checkICount === lineICount)) { // \u300C\u9055\u3048\u3070\u300D\u3084\u300C\u30A8\u30E9\u30FC\u306A\u3089\u3070\u300D\n // \u300C\u3053\u3053\u307E\u3067\u300D\u306E\u633F\u5165\u4E0D\u8981 / \u305F\u3060\u3057\u30CD\u30B9\u30C8\u3057\u305F\u969B\u306E\u300C\u9055\u3048\u3070\u300D(\u4E0A\u8A18\u306E5\u306E\u72B6\u614B\u306A\u3089\u5FC5\u8981)\n }\n else {\n // \u3053\u3053\u307E\u3067\u3092\u633F\u5165\u3059\u308B\n lines[i - 1].push(newToken('\u3053\u3053\u307E\u3067', '\u3053\u3053\u307E\u3067', tFirst));\n lines[i - 1].push(newToken('eol', '\\n', tFirst));\n }\n blockIndents.pop();\n if (blockIndents.length > 0) {\n checkICount = blockIndents[blockIndents.length - 1];\n }\n else {\n checkICount = -1;\n break;\n }\n }\n }\n // \u672B\u5C3E\u306E\u300C:\u300D\u3092\u30C1\u30A7\u30C3\u30AF\n const tLast = getLastTokenWithoutEOL(line);\n if (tLast.type === ':') {\n // \u672B\u5C3E\u306E\u300C:\u300D\u3092\u524A\u9664\n lines[i] = lines[i].filter(t => t !== tLast);\n checkICount = tLast.indent;\n blockIndents.push(checkICount);\n }\n }\n if (lines.length > 0 && blockIndents.length > 0) {\n // \u30C8\u30FC\u30AF\u30F3\u60C5\u5831\u3092\u5F97\u308B\u305F\u3081\u3001\u76F4\u8FD1\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u5F97\u308B\n let t = tokens[0];\n for (let i = lines.length - 1; i >= 0; i--) {\n const line = lines[i];\n if (line.length > 0) {\n t = line[line.length - 1];\n break;\n }\n }\n // \u3053\u3053\u307E\u3067\u3092\u5DEE\u3057\u8FBC\u3080\n for (let i = 0; i < blockIndents.length; i++) {\n lines[lines.length - 1].push(newToken('\u3053\u3053\u307E\u3067', '\u3053\u3053\u307E\u3067', t));\n lines[lines.length - 1].push(newToken('eol', '\\n', t));\n }\n }\n const result = joinTokenLines(lines);\n if (IS_DEBUG) {\n console.log('###', debugTokens(result));\n }\n return result;\n}\n/** \u884C\u3054\u3068\u306B\u5206\u5272\u3057\u3066\u3044\u305F\u30C8\u30FC\u30AF\u30F3\u3092\u304F\u3063\u3064\u3051\u308B */\nexport function joinTokenLines(lines) {\n const r = [];\n for (const line of lines) {\n for (const t of line) {\n r.push(t);\n }\n }\n return r;\n}\n// \u30C8\u30FC\u30AF\u30F3\u884C\u306E\u6700\u5F8C\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u53D6\u5F97\u3059\u308B\nfunction getLastTokenWithoutEOL(line) {\n const len = line.length;\n let res = NewEmptyToken('?');\n if (len === 0) {\n return res;\n }\n // \u6539\u884C\u3084\u30B3\u30E1\u30F3\u30C8\u306A\u3089\u3070\u3001\u524D\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u53D6\u5F97\n for (let i = 0; i < len; i++) {\n // \u884C\u672B\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u53D6\u5F97\n res = line[len - i - 1];\n if (res.type === 'eol') {\n continue;\n }\n if (res.type === 'line_comment' || res.type === 'range_comment') {\n continue;\n }\n break;\n }\n return res;\n}\nexport function splitTokens(tokens, delimiter) {\n const result = [];\n let line = [];\n let kakko = 0;\n for (const t of tokens) {\n line.push(t);\n if (t.type === '{') {\n kakko++;\n }\n else if (t.type === '}') {\n kakko--;\n }\n else if (kakko === 0 && t.type === delimiter) {\n result.push(line);\n line = [];\n }\n }\n if (line.length > 0) {\n result.push(line);\n }\n return result;\n}\n/** \u30C8\u30FC\u30AF\u30F3\u884C\u304C\u7A7A\u304B\u3069\u3046\u304B\u8ABF\u3079\u308B */\nfunction IsEmptyLine(line) {\n if (line.length === 0) {\n return true;\n }\n for (let j = 0; j < line.length; j++) {\n const ty = line[j].type;\n if (ty === 'eol' || ty === 'line_comment' || ty === 'range_comment') {\n continue;\n }\n return false;\n }\n return true;\n}\n/** \u30B3\u30E1\u30F3\u30C8\u3092\u9664\u53BB\u3057\u305F\u6700\u521D\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u8FD4\u3059 */\nfunction GetLeftTokens(line) {\n for (let i = 0; i < line.length; i++) {\n const t = line[i].type;\n if (t === 'eol' || t === 'line_comment' || t === 'range_comment') {\n continue;\n }\n return line[i];\n }\n return line[0];\n}\n// \u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\nconst INDENT_MODE_KEYWORDS = ['!\u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587', '!\u3053\u3053\u307E\u3067\u3060\u308B\u3044', '\uD83D\uDCA1\u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587', '\uD83D\uDCA1\u3053\u3053\u307E\u3067\u3060\u308B\u3044'];\n/** \u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587 --- \u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u898B\u3066\"\u3053\u3053\u307E\u3067\"\u3092\u81EA\u52D5\u633F\u5165 (#596) */\nexport function convertIndentSyntax(tokens) {\n // \u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u306E\u5909\u63DB\u304C\u5FC5\u8981\u304B?\n if (!useIndentSynax(tokens)) {\n return tokens;\n }\n // \u300E\u3053\u3053\u307E\u3067\u300F\u304C\u3042\u3063\u305F\u3089\u30A8\u30E9\u30FC\u3092\u51FA\u3059\n for (const t of tokens) {\n if (t.type === '\u3053\u3053\u307E\u3067') {\n // \u30A8\u30E9\u30FC\u3092\u51FA\u3059\n throw new NakoIndentError('\u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u304C\u6709\u52B9\u5316\u3055\u308C\u3066\u3044\u308B\u3068\u304D\u306B\u300E\u3053\u3053\u307E\u3067\u300F\u3092\u4F7F\u3046\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002', t.line, t.file);\n }\n }\n // JSON\u69CB\u6587\u306E\u30C1\u30A7\u30C3\u30AF\n let jsonObjLevel = 0;\n let jsonArrayLevel = 0;\n const checkJsonSyntax = (line) => {\n // JSON\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u304C\u3042\u308B\u304B\uFF1F\n line.forEach((t) => {\n if (t.type === '{') {\n jsonObjLevel++;\n }\n if (t.type === '}') {\n jsonObjLevel--;\n }\n if (t.type === '[') {\n jsonArrayLevel++;\n }\n if (t.type === ']') {\n jsonArrayLevel--;\n }\n });\n };\n // \u884C\u3054\u3068\u306B\u30C8\u30FC\u30AF\u30F3\u3092\u5206\u5272\n const blockIndents = [];\n const lines = splitTokens(tokens, 'eol');\n let lastI = 0;\n // \u5404\u884C\u3092\u78BA\u8A8D\u3059\u308B\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n // \u7A7A\u884C\u306F\u98DB\u3070\u3059 || \u30B3\u30E1\u30F3\u30C8\u884C\u3060\u3051\u306E\u884C\u3082\u98DB\u3070\u3059\n if (IsEmptyLine(line)) {\n continue;\n }\n // JSON\u69CB\u6587\u306E\u30C1\u30A7\u30C3\u30AF\n if (jsonArrayLevel > 0 || jsonObjLevel > 0) {\n checkJsonSyntax(line);\n continue;\n }\n const leftToken = GetLeftTokens(line);\n const curI = leftToken.indent;\n if (curI === lastI) {\n continue;\n }\n // \u30D6\u30ED\u30C3\u30AF\u306E\u7D42\u4E86?\n // 0: 3\u56DE\n // 2: \u3082\u3057\u30011 > 1\u306A\u3089\u3070\n // 4: 1\u3092\u8868\u793A\n // 2: \u9055\u3048\u3070\n // 4: 2\u3092\u8868\u793A\n // 0:\n // \u30D6\u30ED\u30C3\u30AF\u306E\u7D42\u4E86?\n if (lastI >= 0) {\n while (lastI > curI) {\n const blockIndentTopLast = blockIndents[blockIndents.length - 1][1];\n // console.log('@@[', i, ']', lastI, '>', curI, '@', blockIndentTopLast, leftToken.type)\n if (isSkipWord(leftToken) && blockIndentTopLast === curI) {\n // \u300C\u9055\u3048\u3070\u300D\u306A\u3069\u306A\u3089\u4E0D\u8981 (\u305F\u3060\u3057\u3001\u9055\u3048\u3070\u304C\u30CD\u30B9\u30C8\u3057\u3066\u3044\u308B\u5834\u5408\u306F\u5FC5\u8981)\n }\n else {\n const t = lines[i - 1][0];\n lines[i - 1].push(newToken('\u3053\u3053\u307E\u3067', '\u3053\u3053\u307E\u3067', t));\n lines[i - 1].push(newToken('eol', '\\n', t));\n }\n blockIndents.pop();\n if (blockIndents.length > 0) {\n lastI = blockIndents[blockIndents.length - 1][0];\n }\n else {\n lastI = 0;\n break;\n }\n }\n }\n if (jsonArrayLevel > 0 || jsonObjLevel > 0) {\n continue;\n }\n // JSON\u69CB\u6587\u306E\u30C1\u30A7\u30C3\u30AF\n checkJsonSyntax(line);\n // \u30D6\u30ED\u30C3\u30AF\u306E\u958B\u59CB\uFF1F\n if (curI > lastI) {\n blockIndents.push([curI, lastI]);\n lastI = curI;\n continue;\n }\n }\n // \u672B\u5C3E\u306B\u300C\u3053\u3053\u307E\u3067\u300D\u3092\u8FFD\u52A0\u3059\u308B\n for (let i = 0; i < blockIndents.length; i++) {\n // \u30C8\u30FC\u30AF\u30F3\u60C5\u5831\u3092\u5F97\u308B\u305F\u3081\u3001\u76F4\u8FD1\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u5F97\u308B\n let t = tokens[0];\n for (let i = lines.length - 1; i >= 0; i--) {\n const line = lines[i];\n if (line.length > 0) {\n // \u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3068\u306A\u308B\u30C8\u30FC\u30AF\u30F3\u3092\u884C\u306E\u5F8C\u65B9\u304B\u3089\u9806\u306B\u63A2\u3059\n for (let j = 0; j < line.length; j++) {\n const tt = line[line.length - j - 1];\n if (tt.line > 0) {\n t = tt;\n break;\n }\n }\n break;\n }\n }\n lines[lines.length - 1].push(newToken('\u3053\u3053\u307E\u3067', '\u3053\u3053\u307E\u3067', t));\n lines[lines.length - 1].push(newToken('eol', '\\n', t));\n }\n const result = joinTokenLines(lines);\n return result;\n}\nfunction useIndentSynax(tokens) {\n // \u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u304C\u5FC5\u8981\u304B\u30C1\u30A7\u30C3\u30AF (\u6700\u521D\u306E100\u500B\u3092\u30C1\u30A7\u30C3\u30AF)\n for (let i = 0; i < tokens.length; i++) {\n if (i > 100) {\n break;\n }\n const t = tokens[i];\n if (t.type === 'line_comment' && (INDENT_MODE_KEYWORDS.indexOf(t.value) >= 0)) {\n return true;\n }\n }\n return false;\n}\n", "/**\n * DNCL\u306B\u5BFE\u5FDC\u3059\u308B\u69CB\u6587\n */\n// import { NakoIndentError } from './nako_errors.mjs'\nimport { NewEmptyToken } from './nako_types.mjs';\nimport { joinTokenLines, splitTokens } from './nako_indent_inline.mjs';\n// DNCL\u30E2\u30FC\u30C9\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\nconst DNCL_KEYWORDS = ['!DNCL\u30E2\u30FC\u30C9', '\uD83D\uDCA1DNCL\u30E2\u30FC\u30C9'];\n// \u5358\u7D14\u306A\u7F6E\u63DB\u30C1\u30A7\u30C3\u30AF\nconst DNCL_SIMPLES = {\n '\u2190:\u2190': ['eq', '='],\n '\u00F7:\u00F7': ['\u00F7\u00F7', '\u00F7\u00F7'],\n '{:{': ['[', '['],\n '}:}': [']', ']'],\n 'word:\u3092\u5B9F\u884C': ['\u3053\u3053\u307E\u3067', '\u3053\u3053\u307E\u3067'],\n 'word:\u4E71\u6570': ['word', '\u4E71\u6570\u7BC4\u56F2'],\n 'word:\u8868\u793A': ['word', '\u9023\u7D9A\u8868\u793A']\n};\n/**\n * DNCL\u306E\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u3092\u306A\u3067\u3057\u3053\u306B\u5909\u63DB\u3059\u308B\n */\nexport function convertDNCL(tokens) {\n if (!useDNCLmode(tokens)) {\n return tokens;\n }\n // \u4E00\u884C\u305A\u3064\u306B\u5206\u3051\u308B\n const lines = splitTokens(tokens, 'eol');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (line.length <= 1) {\n continue;\n } // \u7A7A\u884C\u306F\u98DB\u3070\u3059\n // \u884C\u982D\u306E | \u306F\u305F\u3060\u306E\u30A4\u30F3\u30C7\u30F3\u30C8\n for (let j = 0; j < line.length; j++) {\n if (line[j].type === '|') {\n line[j].type = 'range_comment';\n continue;\n }\n break;\n }\n // \u5F8C\u5224\u5B9A\u306E\u7E70\u308A\u8FD4\u3057\u306E\u5B9F\u88C5\u306E\u305F\u3081\n const t = line[0];\n if (t.type === 'word' && t.value === '\u7E70\u8FD4') {\n line.splice(0, line.length, NewEmptyToken('word', '\u5F8C\u5224\u5B9A', t.indent, t.line, t.file), NewEmptyToken('word', '\u7E70\u8FD4', t.indent, t.line, t.file));\n }\n // ^\\s*\u3092,?(.+)\u306B\u306A\u308B\u307E\u3067(\u7E70\u308A\u8FD4\u3059|\u5B9F\u884C\u3059\u308B)/\n const fi = findTokens(line, ['word:\u306A\u308B', 'word:\u7E70\u8FD4']);\n if (fi > 0) {\n replaceAtohantei(line, fi);\n }\n const fi2 = findTokens(line, ['word:\u306A\u308B', 'word:\u5B9F\u884C']);\n if (fi2 > 0) {\n replaceAtohantei(line, fi2);\n }\n // \u3082\u3057(\u6761\u4EF6)\u3067\u306A\u3044\u306A\u3089\u3070 \u2192 \u3082\u3057(\u6761\u4EF6)\u3067\u306A\u3051\u308C\u3070\n const nai = findTokens(line, ['word:\u306A\u3044']);\n if (nai >= 1) {\n const tt = line[nai];\n if (tt.josi === '\u306A\u3089\u3070') {\n line[nai - 1].josi = '\u3067\u306A\u3051\u308C\u3070';\n line.splice(nai, 1);\n }\n }\n // \u4E8C\u9032\u3067\u8868\u793A (255) \u2192 \u4E8C\u9032\u8868\u793A(255)\n for (;;) {\n const ni = findTokens(line, ['word:\u4E8C\u9032', 'word:\u8868\u793A']);\n if (ni < 0) {\n break;\n }\n line[ni].value = '\u4E8C\u9032\u8868\u793A';\n line[ni].josi = '';\n line.splice(ni + 1, 1);\n }\n // '\u6539\u884C\u306A\u3057\u3067\u8868\u793A' \u2192 '\u9023\u7D9A\u7121\u6539\u884C\u8868\u793A'\n for (;;) {\n const ni = findTokens(line, ['word:\u6539\u884C', 'word:\u8868\u793A']);\n if (ni < 0) {\n break;\n }\n // \u3053\u3053\u300C\u6539\u884C\u306A\u3057\u3067\u8868\u793A\u300D\u3067\u3082\u300C\u6539\u884C\u3042\u308A\u3067\u8868\u793A\u300D\u3067\u3082\u540C\u3058\u306B\u306A\u3063\u3066\u3057\u307E\u3046\n // \u306A\u3067\u3057\u3053\u306E\u5236\u9650\u306E\u305F\u3081\u4ED5\u65B9\u306A\u3057\n // \u300C\u6539\u884C\u3042\u308A\u3067\u8868\u793A\u300D\u306F\u4ECA\u306E\u3068\u3053\u308DDNCL\u306B\u5B58\u5728\u3057\u306A\u3044\u306E\u3067\u7121\u8996\u3059\u308B\n // \u3082\u3057\u5C06\u6765\u7684\u306B\u533A\u5225\u304C\u5FC5\u8981\u306A\u3089\u3001\u30D7\u30EA\u30D7\u30ED\u30BB\u30B9\u51E6\u7406\u3067\u30DE\u30AF\u30ED\u7684\u306B\u7F6E\u63DB\u51E6\u7406\u3092\u884C\u3046\u3053\u3068\u3067\u5BFE\u5FDC\u3067\u304D\u308B\u3068\u601D\u3046\n const t = line[ni];\n t.value = '\u9023\u7D9A\u7121\u6539\u884C\u8868\u793A';\n t.josi = '';\n line.splice(ni + 1, 1);\n }\n // '\u3092\u5B9F\u884C\u3057,\u305D\u3046\u3067\u306A\u3051\u308C\u3070': '\u9055\u3048\u3070',\n for (;;) {\n const ni = findTokens(line, ['word:\u3092\u5B9F\u884C', 'comma:,', 'word:\u305D\u3046']);\n if (ni < 0) {\n break;\n }\n const sou = line[ni + 2];\n if (sou.josi === '\u3067\u306A\u3051\u308C\u3070') {\n sou.type = '\u9055\u3048\u3070';\n sou.value = '\u9055\u3048\u3070';\n sou.josi = '';\n line.splice(ni, 3, sou);\n continue;\n }\n else if (sou.josi === '\u3067') {\n const nakumosi = line[ni + 3];\n if (nakumosi.value.substring(0, 4) === '\u306A\u304F\u3082\u3057') {\n sou.type = '\u9055\u3048\u3070';\n sou.value = '\u9055\u3048\u3070';\n sou.josi = '';\n line.splice(ni, 3, sou);\n if (nakumosi.value.length > 4) {\n const nakumosiTudukiStr = nakumosi.value.substring(4);\n const nakumosiToken = NewEmptyToken('word', nakumosiTudukiStr, nakumosi.indent, nakumosi.line, nakumosi.file);\n if (nakumosiTudukiStr.match(/^\\d/)) {\n nakumosiToken.type = 'number';\n }\n line.splice(ni + 2, 0, nakumosiToken);\n nakumosi.value = nakumosi.value.substring(0, 4);\n }\n nakumosi.type = '\u3082\u3057';\n nakumosi.value = '\u3082\u3057';\n nakumosi.josi = '';\n continue;\n }\n }\n break;\n }\n // I\u30921\u304B\u3089100\u307E\u30671(\u305A\u3064)|\u5897\u3084\u3057\u306A(\u304C)|\u3089\n for (;;) {\n const ni = findTokens(line, ['word:\u5897', 'word:\u3089']);\n if (ni < 0) {\n break;\n }\n const fu = line[ni];\n fu.type = 'word';\n fu.value = '\u5897\u7E70\u8FD4';\n fu.josi = '';\n line.splice(ni, 2, fu);\n }\n // I\u30921\u304B\u3089100\u307E\u30671(\u305A\u3064)|\u5897\u3084\u3057\u306A(\u304C)|\u3089\n for (;;) {\n const ni = findTokens(line, ['word:\u6E1B', 'word:\u3089']);\n if (ni < 0) {\n break;\n }\n const fu = line[ni];\n fu.type = 'word';\n fu.value = '\u6E1B\u7E70\u8FD4';\n fu.josi = '';\n line.splice(ni, 2, fu);\n }\n // \u3092\u7E70\u308A\u8FD4\u3059 \u2192 \u3053\u3053\u307E\u3067\n for (;;) {\n const ni = findTokens(line, ['word:\u3092\u7E70\u308A\u8FD4']);\n if (ni < 0) {\n break;\n }\n const fu = line[ni];\n fu.type = '\u3053\u3053\u307E\u3067';\n fu.value = '\u3053\u3053\u307E\u3067';\n fu.josi = '';\n }\n // '\u306E\u3059\u3079\u3066\u306E\u8981\u7D20\u30920\u306B\u3059\u308B'\n // '\u306E\u3059\u3079\u3066\u306E\u8981\u7D20\u306B0\u3092\u4EE3\u5165\u3059\u308B'\n for (;;) {\n const ni = findTokens(line, ['word:\u3059\u3079\u3066', 'word:\u8981\u7D20']);\n if (ni >= 1) {\n replaceAllElementV(line, ni);\n }\n else {\n break;\n }\n }\n // '\u306E\u3059\u3079\u3066\u306E\u5024\u30920\u306B\u3059\u308B'\n for (;;) {\n const ni = findTokens(line, ['word:\u3059\u3079\u3066', 'word:\u5024']);\n if (ni >= 1) {\n replaceAllElementV(line, ni);\n }\n else {\n break;\n }\n }\n // \u4E00\u3064\u305A\u3064\u30C1\u30A7\u30C3\u30AF\n let j = 0;\n while (j < line.length) {\n const t = line[j];\n // \u6E1B\u3068\u5897\u306E\u5206\u5272\n if (t.type === 'word' && t.value.length >= 2) {\n const c = t.value.charAt(t.value.length - 1);\n if (c === '\u6E1B' || c === '\u5897') {\n t.value = t.value.substring(0, t.value.length - 1);\n t.josi = '\u3060\u3051';\n line.splice(j + 1, 0, NewEmptyToken('word', c, t.indent, t.line, t.file));\n }\n j++;\n continue;\n }\n j++;\n }\n }\n // \u6700\u5F8C\u306B\u5358\u7D14\u306A\u7F6E\u63DB\u3092\u884C\u3046\n for (let i = 0; i < tokens.length; i++) {\n const t = tokens[i];\n const a = DNCL_SIMPLES[String(t.type) + ':' + String(t.value)];\n if (a !== undefined) {\n t.type = a[0];\n t.value = a[1];\n }\n }\n tokens = joinTokenLines(lines);\n return tokens;\n}\nfunction replaceAllElementV(line, ni) {\n //\n // const ni = findTokens(line, ['word:\u3059\u3079\u3066', 'word:\u8981\u7D20'])\n //\n const t = line[ni];\n line[ni - 1].josi = '';\n const eq = NewEmptyToken('eq', '=', t.indent, t.line, t.file);\n const begin = NewEmptyToken('[', '[', t.indent, t.line, t.file);\n const end = NewEmptyToken(']', ']', t.indent, t.line, t.file);\n end.josi = '\u306B';\n const val = line[ni + 2];\n val.josi = '';\n const times = NewEmptyToken('number', 100, t.indent, t.line, t.file);\n times.josi = '\u3092';\n const mul = NewEmptyToken('word', '\u639B', t.indent, t.line, t.file);\n line.splice(ni, 4, eq, begin, val, end, times, mul);\n}\nfunction replaceAtohantei(tokens, fi) {\n // `\u3053\u3053\u307E\u3067\u3001(${r[1]})\u306B\u306A\u308B\u307E\u3067\u306E\u9593`\n const wo = findTokens(tokens, ['word:\u3092']);\n if (wo >= 0) {\n tokens[wo].type = '\u3053\u3053\u307E\u3067';\n tokens[wo].value = '\u3053\u3053\u307E\u3067';\n }\n const ga = findTokens(tokens, ['word:\u304C']);\n if (ga >= 0) {\n tokens[ga].type = '\u3053\u3053\u307E\u3067';\n tokens[ga].value = '\u3053\u3053\u307E\u3067';\n }\n // \u306A\u308B:\u307E\u3067(fi) \u5B9F\u884C(fi+1)\n tokens[fi + 1].value = '\u9593';\n}\nfunction findTokens(tokens, findTypeValue) {\n const findA = findTypeValue.map(s => s.split(':'));\n for (let i = 0; i < tokens.length; i++) {\n let flag = true;\n for (let j = 0; j < findA.length; j++) {\n const f = findA[j];\n const idx = i + j;\n if (idx >= tokens.length) {\n return -1;\n }\n if (tokens[idx].type === f[0] && tokens[idx].value === f[1]) {\n continue;\n }\n else {\n flag = false;\n break;\n }\n }\n if (flag) {\n return i;\n }\n }\n return -1;\n}\nfunction useDNCLmode(tokens) {\n // \u5148\u982D\u306E100\u8A9E\u8ABF\u3079\u308B\n for (let i = 0; i < tokens.length; i++) {\n if (i > 100) {\n break;\n }\n const t = tokens[i];\n if (t.type === 'line_comment' && DNCL_KEYWORDS.indexOf(t.value) >= 0) {\n t.type = 'DNCL\u30E2\u30FC\u30C9';\n return true;\n }\n }\n return false;\n}\nexport const NakoDncl = {\n convert: convertDNCL\n};\n", "/**\n * DNCL ver2 \u306B\u5BFE\u5FDC\u3059\u308B\u69CB\u6587\n */\n// import { NakoIndentError } from './nako_errors.mjs'\nimport { NewEmptyToken } from './nako_types.mjs';\nimport { joinTokenLines, splitTokens } from './nako_indent_inline.mjs';\nimport { newToken, debugTokens } from './nako_tools.mjs';\nconst IS_DEBUG = false;\nconst DNCL_ARRAY_INIT_COUNT = 30;\n// DNCL2\u30E2\u30FC\u30C9\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\nconst DNCL2_KEYWORDS = ['!DNCL2\u30E2\u30FC\u30C9', '\uD83D\uDCA1DNCL2\u30E2\u30FC\u30C9', '!DNCL2', '\uD83D\uDCA1DNCL2'];\n// \u5358\u7D14\u306A\u7F6E\u63DB\u30C1\u30A7\u30C3\u30AF\nconst DNCL_SIMPLES = {\n '\u2190:\u2190': ['eq', '='],\n '\u00F7:\u00F7': ['\u00F7\u00F7', '\u00F7\u00F7'],\n '{:{': ['[', '['],\n '}:}': [']', ']'],\n // 'word:and': ['and', '\u304B\u3064'],\n // 'word:or': ['or', '\u307E\u305F\u306F'],\n 'word:not': ['not', '!'],\n 'word:\u4E71\u6570': ['word', '\u4E71\u6570\u7BC4\u56F2'],\n 'word:\u8868\u793A': ['word', '\u9023\u7D9A\u8868\u793A'],\n 'word:\u3068\u5B9A\u7FA9': ['\u3053\u3053\u307E\u3067', '\u3053\u3053\u307E\u3067'] // \u300C\u3068\u5B9A\u7FA9\u300D\u2192\u300C\u3053\u3053\u307E\u3067\u300D\n};\n/**\n * DNCL\u306E\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u3092\u306A\u3067\u3057\u3053\u306B\u5909\u63DB\u3059\u308B\n */\nexport function convertDNCL2(tokens) {\n if (!useDNCL2mode(tokens)) {\n return tokens;\n }\n // \u4E00\u884C\u305A\u3064\u306B\u5206\u3051\u308B\n const lines = splitTokens(tokens, 'eol');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (line.length <= 1) {\n continue;\n } // \u7A7A\u884C\u306F\u98DB\u3070\u3059\n // --- \u5236\u5FA1\u69CB\u6587\u306E\u5909\u63DB ---\n // \u3082\u3057(\u6761\u4EF6)\u3067\u306A\u3044\u306A\u3089\u3070 \u2192 \u3082\u3057(\u6761\u4EF6)\u3067\u306A\u3051\u308C\u3070\n const nai = findTokens(line, ['word:\u306A\u3044']);\n if (nai >= 1) {\n const tt = line[nai];\n if (tt.josi === '\u306A\u3089\u3070') {\n line[nai - 1].josi = '\u3067\u306A\u3051\u308C\u3070';\n line.splice(nai, 1);\n }\n }\n // \u305D\u3046\u3067\u306A\u3051\u308C\u3070(\u305D\u3046|\u3067\u306A\u3051\u308C\u3070) or \u305D\u3046\u3067\u306A\u304F \u2192 \u9055\u3048\u3070\n for (let ni = 0; ni < line.length; ni++) {\n const t = line[ni];\n if ((t.value === '\u305D\u3046' || t.value === '\u305D\u308C') && (t.josi === '\u3067\u306A\u3051\u308C\u3070' || t.josi === '\u3067\u306A\u304F')) {\n t.type = '\u9055\u3048\u3070';\n t.value = '\u9055\u3048\u3070';\n t.josi = '';\n }\n }\n // '\u3092\u5B9F\u884C\u3057,\u305D\u3046\u3067\u306A\u3051\u308C\u3070': '\u9055\u3048\u3070',\n for (;;) {\n const ni = findTokens(line, ['word:\u3092\u5B9F\u884C', 'comma:,', 'word:\u305D\u3046']);\n if (ni < 0) {\n break;\n }\n const sou = line[ni + 2];\n if (sou.josi === '\u3067\u306A\u3051\u308C\u3070') {\n sou.type = '\u9055\u3048\u3070';\n sou.value = '\u9055\u3048\u3070';\n sou.josi = '';\n line.splice(ni, 3, sou);\n continue;\n }\n else if (sou.josi === '\u3067') {\n const nakumosi = line[ni + 3];\n if (nakumosi.value.substring(0, 4) === '\u306A\u304F\u3082\u3057') {\n sou.type = '\u9055\u3048\u3070';\n sou.value = '\u9055\u3048\u3070';\n sou.josi = '';\n line.splice(ni, 3, sou);\n if (nakumosi.value.length > 4) {\n const nakumosiTudukiStr = nakumosi.value.substring(4);\n const nakumosiToken = NewEmptyToken('word', nakumosiTudukiStr, nakumosi.indent, nakumosi.line, nakumosi.file);\n if (nakumosiTudukiStr.match(/^\\d/)) {\n nakumosiToken.type = 'number';\n }\n line.splice(ni + 2, 0, nakumosiToken);\n nakumosi.value = nakumosi.value.substring(0, 4);\n }\n nakumosi.type = '\u3082\u3057';\n nakumosi.value = '\u3082\u3057';\n nakumosi.josi = '';\n continue;\n }\n }\n break;\n }\n // '\u305D\u3046\u3067\u306A\u304F': '\u9055\u3048\u3070',\n for (;;) {\n const ni = findTokens(line, ['word:\u305D\u3046', 'word:\u306A\u304F']);\n if (ni < 0) {\n break;\n }\n const sou = line[ni];\n if (sou.josi === '\u3067') {\n sou.type = '\u9055\u3048\u3070';\n sou.value = '\u9055\u3048\u3070';\n sou.josi = '';\n line.splice(ni + 1, 1);\n // console.log('@@@', line.map(v => v.value).join('|'))\n continue;\n }\n break;\n }\n // '\u305D\u3046\u3067\u306A\u304F\u3082\u3057': '\u9055\u3048\u3070,\u3082\u3057'\n for (;;) {\n const ni = findTokens(line, ['word:\u305D\u3046', 'word:\u306A\u304F\u3082\u3057']);\n if (ni < 0) {\n break;\n }\n const sou = line[ni];\n const nakumosi = line[ni + 1];\n sou.type = '\u9055\u3048\u3070';\n sou.value = '\u9055\u3048\u3070';\n sou.josi = '';\n nakumosi.type = '\u3082\u3057';\n nakumosi.value = '\u3082\u3057';\n nakumosi.josi = '';\n }\n // I\u30921\u304B\u3089100\u307E\u30671(\u305A\u3064)|\u5897\u3084\u3057\u306A(\u304C)|\u3089\n for (;;) {\n const ni = findTokens(line, ['word:\u5897', 'word:\u3089']);\n if (ni < 0) {\n break;\n }\n const fu = line[ni];\n fu.type = 'word';\n fu.value = '\u5897\u7E70\u8FD4';\n fu.josi = '';\n line.splice(ni, 2, fu);\n }\n // I\u30921\u304B\u3089100\u307E\u30671(\u305A\u3064)|\u5897\u3084\u3057\u306A(\u304C)|\u3089\n for (;;) {\n const ni = findTokens(line, ['word:\u6E1B', 'word:\u3089']);\n if (ni < 0) {\n break;\n }\n const fu = line[ni];\n fu.type = 'word';\n fu.value = '\u6E1B\u7E70\u8FD4';\n fu.josi = '';\n line.splice(ni, 2, fu);\n }\n // I\u30921\u304B\u3089100\u307E\u30671(\u305A\u3064)|\u5897\u3084\u3057\u306A(\u304C)|\u3089\u7E70\u308A\u8FD4(\u3059)\n for (;;) {\n const ni = findTokens(line, ['word:\u5897', 'word:\u3089\u7E70\u308A\u8FD4']);\n if (ni < 0) {\n break;\n }\n const fu = line[ni];\n fu.type = 'word';\n fu.value = '\u5897\u7E70\u8FD4';\n fu.josi = '';\n line.splice(ni, 2, fu);\n }\n // I\u30921\u304B\u3089100\u307E\u30671(\u305A\u3064)|\u5897\u3084\u3057\u306A(\u304C)|\u3089\u7E70\u308A\u8FD4\u3059\n for (;;) {\n const ni = findTokens(line, ['word:\u6E1B', 'word:\u3089\u7E70\u308A\u8FD4']);\n if (ni < 0) {\n break;\n }\n const fu = line[ni];\n fu.type = 'word';\n fu.value = '\u6E1B\u7E70\u8FD4';\n fu.josi = '';\n line.splice(ni, 2, fu);\n }\n // --- \u914D\u5217\u5909\u6570\u5468\u308A\u306E\u5909\u63DB ---\n for (let i = 0; i < line.length; i++) {\n // \u914D\u5217|Hindo\u306E|\u3059\u3079\u3066\u306E|(\u8981\u7D20\u306B|\u5024\u306B)|10\u3092|\u4EE3\u5165\u3059\u308B\n if (tokenEq([['word:\u914D\u5217', 'word:\u914D\u5217\u5909\u6570'], 'word', 'word:\u3059\u3079\u3066', ['word:\u8981\u7D20', 'word:\u5024'], '*', 'word:\u4EE3\u5165'], line, i)) {\n const varToken = line[i + 1];\n varToken.josi = '';\n const valToken = line[i + 4];\n valToken.josi = '';\n line.splice(i, 6, varToken, newToken('eq', '=', varToken), newToken('word', '\u639B'), newToken('(', '('), newToken('[', '['), valToken, newToken(']', ']'), newToken('comma', ','), newToken('number', DNCL_ARRAY_INIT_COUNT), newToken(')', ')'));\n i += 6; // skip\n }\n // Hensu\u306E|\u3059\u3079\u3066\u306E|(\u8981\u7D20\u3092|\u5024\u3092)|0\u306B|\u3059\u308B\n if (tokenEq(['word', 'word:\u3059\u3079\u3066', ['word:\u8981\u7D20', 'word:\u5024'], ['number', 'string', 'word'], 'word:\u3059\u308B'], line, i)) {\n const varToken = line[i];\n varToken.josi = '';\n const valToken = line[i + 3];\n valToken.josi = '';\n line.splice(i, 5, varToken, newToken('eq', '=', varToken), newToken('word', '\u639B'), newToken('(', '('), newToken('[', '['), valToken, newToken(']', ']'), newToken('comma', ','), newToken('number', DNCL_ARRAY_INIT_COUNT), newToken(')', ')'));\n }\n // \u914D\u5217\u5909\u6570 | xx\u3092 | \u521D\u671F\u5316\u3059\u308B\n if (tokenEq([['word:\u914D\u5217\u5909\u6570', 'word:\u914D\u5217'], 'word', 'word:\u521D\u671F\u5316'], line, i)) {\n const varToken = line[i + 1];\n varToken.josi = '';\n line.splice(i, 3, varToken, newToken('eq', '=', varToken), newToken('word', '\u639B'), newToken('(', '('), newToken('[', '['), newToken('number', 0), newToken(']', ']'), newToken('comma', ','), newToken('number', DNCL_ARRAY_INIT_COUNT), newToken(')', ')'));\n }\n }\n // --- \u305D\u306E\u4ED6\u306E\u5909\u63DB ---\n // \u4E8C\u9032\u3067\u8868\u793A (255) \u2192 \u4E8C\u9032\u8868\u793A(255)\n for (;;) {\n const ni = findTokens(line, ['word:\u4E8C\u9032', 'word:\u8868\u793A']);\n if (ni < 0) {\n break;\n }\n line[ni].value = '\u4E8C\u9032\u8868\u793A';\n line[ni].josi = '';\n line.splice(ni + 1, 1);\n }\n // '\u6539\u884C\u306A\u3057\u3067\u8868\u793A' \u2192 '\u9023\u7D9A\u7121\u6539\u884C\u8868\u793A'\n for (;;) {\n const ni = findTokens(line, ['word:\u6539\u884C', 'word:\u8868\u793A']);\n if (ni < 0) {\n break;\n }\n // \u3053\u3053\u300C\u6539\u884C\u306A\u3057\u3067\u8868\u793A\u300D\u3067\u3082\u300C\u6539\u884C\u3042\u308A\u3067\u8868\u793A\u300D\u3067\u3082\u540C\u3058\u306B\u306A\u3063\u3066\u3057\u307E\u3046\n // \u306A\u3067\u3057\u3053\u306E\u5236\u9650\u306E\u305F\u3081\u4ED5\u65B9\u306A\u3057\n // \u300C\u6539\u884C\u3042\u308A\u3067\u8868\u793A\u300D\u306F\u4ECA\u306E\u3068\u3053\u308DDNCL\u306B\u5B58\u5728\u3057\u306A\u3044\u306E\u3067\u7121\u8996\u3059\u308B\n // \u3082\u3057\u5C06\u6765\u7684\u306B\u533A\u5225\u304C\u5FC5\u8981\u306A\u3089\u3001\u30D7\u30EA\u30D7\u30ED\u30BB\u30B9\u51E6\u7406\u3067\u30DE\u30AF\u30ED\u7684\u306B\u7F6E\u63DB\u51E6\u7406\u3092\u884C\u3046\u3053\u3068\u3067\u5BFE\u5FDC\u3067\u304D\u308B\u3068\u601D\u3046\n const t = line[ni];\n t.value = '\u9023\u7D9A\u7121\u6539\u884C\u8868\u793A';\n t.josi = '';\n line.splice(ni + 1, 1);\n }\n // \u4E00\u3064\u305A\u3064\u30C1\u30A7\u30C3\u30AF\n let j = 0;\n while (j < line.length) {\n const t = line[j];\n // \u6E1B\u3068\u5897\u306E\u5206\u5272\n if (t.type === 'word' && t.value.length >= 2) {\n const c = t.value.charAt(t.value.length - 1);\n if (c === '\u6E1B' || c === '\u5897') {\n t.value = t.value.substring(0, t.value.length - 1);\n t.josi = '\u3060\u3051';\n line.splice(j + 1, 0, NewEmptyToken('word', c, t.indent, t.line, t.file));\n }\n j++;\n continue;\n }\n j++;\n }\n }\n // \u6700\u5F8C\u306B\u5358\u7D14\u306A\u7F6E\u63DB\u3092\u884C\u3046\n for (let i = 0; i < tokens.length; i++) {\n const t = tokens[i];\n const a = DNCL_SIMPLES[String(t.type) + ':' + String(t.value)];\n if (a !== undefined) {\n t.type = a[0];\n t.value = a[1];\n }\n }\n tokens = joinTokenLines(lines);\n if (IS_DEBUG) {\n console.log('// DEBUG---DNCL:tokens---BEGIN');\n console.log(debugTokens(tokens));\n console.log('// DEBUG---DNCL:tokens---END');\n }\n return tokens;\n}\n/**\n * \u30C8\u30FC\u30AF\u30F3\u304C\u5408\u81F4\u3059\u308B\u304B\u3092\u78BA\u8A8D\u3059\u308B\n * @param typeValues ['word:\u305D\u308C']\u306E\u3088\u3046\u306A\u30BF\u30A4\u30D7\u540D\u3068\u5024\u306E\u914D\u5217/'*'\u3067\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u304C\u4F7F\u3048\u308B/\":\"\u304C\u306A\u308C\u3070\u30BF\u30A4\u30D7\u3060\u3051\u78BA\u8A8D/\u914D\u5217\u3067\u9078\u629E\n * @param lines \u5DEE\u3057\u66FF\u3048\n * @param fromIndex \u691C\u7D22\u5834\u6240\n * @returns \u5408\u81F4\u3057\u305F\u304B\u3069\u3046\u304B\n */\nfunction tokenEq(typeValues, lines, fromIndex) {\n const check = (pattern, t) => {\n if (pattern instanceof Array) {\n for (let i = 0; i < pattern.length; i++) {\n if (check(pattern[i], t)) {\n return true;\n }\n }\n return false;\n }\n if (pattern === '*') {\n return true;\n }\n if (pattern.indexOf(':') < 0) {\n if (pattern === t.type) {\n return true;\n }\n else {\n return false;\n }\n }\n const tv = `${t.type}:${t.value}`;\n if (pattern === tv) {\n return true;\n }\n return false;\n };\n for (let i = 0; i < typeValues.length; i++) {\n const idx = i + fromIndex;\n if (idx >= lines.length) {\n return false;\n }\n const pat = typeValues[i];\n const t = lines[idx];\n if (!check(pat, t)) {\n return false;\n }\n }\n return true;\n}\nfunction findTokens(tokens, findTypeValue) {\n const findA = findTypeValue.map(s => s.split(':'));\n for (let i = 0; i < tokens.length; i++) {\n let flag = true;\n for (let j = 0; j < findA.length; j++) {\n const f = findA[j];\n const idx = i + j;\n if (idx >= tokens.length) {\n return -1;\n }\n if (tokens[idx].type === f[0] && tokens[idx].value === f[1]) {\n continue;\n }\n else {\n flag = false;\n break;\n }\n }\n if (flag) {\n return i;\n }\n }\n return -1;\n}\nfunction useDNCL2mode(tokens) {\n // \u5148\u982D\u306E100\u8A9E\u8ABF\u3079\u308B\n for (let i = 0; i < tokens.length; i++) {\n if (i > 100) {\n break;\n }\n const t = tokens[i];\n if (t.type === 'line_comment' && DNCL2_KEYWORDS.indexOf(t.value) >= 0) {\n t.type = 'DNCL2\u30E2\u30FC\u30C9';\n return true;\n }\n }\n return false;\n}\n", "/** prepare\u3068tokenize\u306E\u30BD\u30FC\u30B9\u30DE\u30C3\u30D4\u30F3\u30B0 */\nexport class SourceMappingOfTokenization {\n /**\n * @param {number} sourceCodeLength\n * @param {PreprocessItem[]} preprocessed\n */\n constructor(sourceCodeLength, preprocessed) {\n /** @private @readonly */\n this.sourceCodeLength = sourceCodeLength;\n /** @private @readonly */\n this.preprocessed = preprocessed;\n let i = 0;\n /** @private @readonly @type {number[]} */\n this.cumulativeSum = [];\n for (const el of preprocessed) {\n this.cumulativeSum.push(i);\n i += el.text.length;\n }\n /** @private */\n this.lastIndex = 0;\n /** @private */\n this.lastPreprocessedCodePosition = 0;\n }\n /**\n * preprocess\u5F8C\u306E\u6587\u5B57\u5217\u4E0A\u306Eoffset\u304B\u3089\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u4E0A\u306Eoffset\u3078\u5909\u63DB\n * @param {number} preprocessedCodePosition\n * @returns {number}\n */\n map(preprocessedCodePosition) {\n const i = this.findIndex(preprocessedCodePosition);\n return Math.min(this.preprocessed[i].sourcePosition + (preprocessedCodePosition - this.cumulativeSum[i]), i === this.preprocessed.length - 1 ? this.sourceCodeLength : this.preprocessed[i + 1].sourcePosition - 1);\n }\n /**\n * @param {number} preprocessedCodePosition\n * @returns {number}\n */\n findIndex(preprocessedCodePosition) {\n // \u9023\u7D9A\u30A2\u30AF\u30BB\u30B9\u306B\u5BFE\u3059\u308B\u9AD8\u901F\u5316\n if (preprocessedCodePosition < this.lastPreprocessedCodePosition) {\n this.lastIndex = 0;\n }\n this.lastPreprocessedCodePosition = preprocessedCodePosition;\n for (let i = this.lastIndex; i < this.preprocessed.length - 1; i++) {\n if (preprocessedCodePosition < this.cumulativeSum[i + 1]) {\n this.lastIndex = i;\n return i;\n }\n }\n this.lastIndex = this.preprocessed.length - 1;\n return this.preprocessed.length - 1;\n }\n}\nexport class SourceMappingOfIndentSyntax {\n /**\n * @param {string} codeAfterProcessingIndentationSyntax\n * @param {readonly number[]} linesInsertedByIndentationSyntax\n * @param {readonly { lineNumber: number, len: number }[]} linesDeletedByIndentationSyntax\n */\n constructor(codeAfterProcessingIndentationSyntax, linesInsertedByIndentationSyntax, linesDeletedByIndentationSyntax) {\n /** @private @type {{ offset: number, len: number }[]} */\n this.lines = [];\n /** @private @readonly */\n this.linesInsertedByIndentationSyntax = linesInsertedByIndentationSyntax;\n /** @private @readonly */\n this.linesDeletedByIndentationSyntax = linesDeletedByIndentationSyntax;\n let offset = 0;\n for (const line of codeAfterProcessingIndentationSyntax.split('\\n')) {\n this.lines.push({ offset, len: line.length });\n offset += line.length + 1;\n }\n /** @private */\n this.lastLineNumber = 0;\n /** @private */\n this.lastOffset = 0;\n }\n /**\n * @param {number | null} startOffset\n * @param {number | null} endOffset\n * @returns {{ startOffset: number | null, endOffset: number | null }}\n */\n map(startOffset, endOffset) {\n if (startOffset === null) {\n return { startOffset, endOffset };\n }\n // \u4F55\u884C\u76EE\u304B\u3092\u5224\u5B9A\n const tokenLine = this.getLineNumber(startOffset);\n for (const insertedLine of this.linesInsertedByIndentationSyntax) {\n // \u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u306E\u51E6\u7406\u5F8C\u306E\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u306E `insertedLine` \u884C\u76EE\u306B\u3042\u308B\u30C8\u30FC\u30AF\u30F3\u306E\u30BD\u30FC\u30B9\u30DE\u30C3\u30D7\u60C5\u5831\u3092\u524A\u9664\u3059\u308B\u3002\n if (tokenLine === insertedLine) {\n startOffset = null;\n endOffset = null;\n break;\n }\n // \u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u306E\u51E6\u7406\u5F8C\u306E\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u306E `insertedLine` \u884C\u76EE\u4EE5\u964D\u306B\u3042\u308B\u30C8\u30FC\u30AF\u30F3\u306Eoffset\u304B\u3089\n // `linesInsertedByIndentationSyntax[i]` \u884C\u76EE\u306E\u6587\u5B57\u6570\uFF08\\r\u3092\u542B\u3080\uFF09 \u3092\u5F15\u304F\u3002\n if (tokenLine > insertedLine) {\n // \"\\n\"\u306E\u52061\u8DB3\u3059\n startOffset -= this.lines[insertedLine].len + 1;\n if (endOffset !== null) {\n endOffset -= this.lines[insertedLine].len + 1;\n }\n }\n }\n for (const deletedLine of this.linesDeletedByIndentationSyntax) {\n if (tokenLine >= deletedLine.lineNumber) {\n // \"\\n\"\u306E\u52061\u8DB3\u3059\n if (startOffset !== null) {\n startOffset += deletedLine.len + 1;\n }\n if (endOffset !== null) {\n endOffset += deletedLine.len + 1;\n }\n }\n }\n return { startOffset, endOffset };\n }\n /**\n * @param {number} offset\n * @returns {number}\n * @private\n */\n getLineNumber(offset) {\n // \u9023\u7D9A\u30A2\u30AF\u30BB\u30B9\u306B\u5BFE\u3059\u308B\u9AD8\u901F\u5316\n if (offset < this.lastOffset) {\n this.lastLineNumber = 0;\n }\n this.lastOffset = offset;\n for (let i = this.lastLineNumber; i < this.lines.length - 1; i++) {\n if (offset < this.lines[i + 1].offset) {\n this.lastLineNumber = i;\n return i;\n }\n }\n this.lastLineNumber = this.lines.length - 1;\n return this.lines.length - 1;\n }\n}\n/** offset\u304B\u3089 (line, column) \u3078\u5909\u63DB\u3059\u308B\u3002 */\nexport class OffsetToLineColumn {\n /**\n * @param {string} code\n */\n constructor(code) {\n /** @private @type {number[]} */\n this.lineOffsets = [];\n // \u5404\u884C\u306E\u5148\u982D\u4F4D\u7F6E\u3092\u5148\u306B\u8A08\u7B97\u3057\u3066\u304A\u304F\n let offset = 0;\n for (const line of code.split('\\n')) {\n this.lineOffsets.push(offset);\n offset += line.length + 1;\n }\n /** @private */\n this.lastLineNumber = 0;\n /** @private */\n this.lastOffset = 0;\n }\n /**\n * @param {number} offset\n * @param {boolean} oneBasedLineNumber true\u306E\u3068\u304Dline\u30921\u304B\u3089\u59CB\u3081\u308B\n * @returns {{ line: number, column: number }}\n */\n map(offset, oneBasedLineNumber) {\n // \u9023\u7D9A\u30A2\u30AF\u30BB\u30B9\u306B\u5BFE\u3059\u308B\u9AD8\u901F\u5316\n if (offset < this.lastOffset) {\n this.lastLineNumber = 0;\n }\n this.lastOffset = offset;\n for (let i = this.lastLineNumber; i < this.lineOffsets.length - 1; i++) {\n if (offset < this.lineOffsets[i + 1]) {\n this.lastLineNumber = i;\n return {\n line: i + (oneBasedLineNumber ? 1 : 0),\n column: offset - this.lineOffsets[i]\n };\n }\n }\n this.lastLineNumber = this.lineOffsets.length - 1;\n return {\n line: this.lineOffsets.length - 1 + (oneBasedLineNumber ? 1 : 0),\n column: offset - this.lineOffsets[this.lineOffsets.length - 1]\n };\n }\n}\n/**\n * preCode\u306E\u5206\u3001\u30BD\u30FC\u30B9\u30DE\u30C3\u30D7\u306Eoffset\u3001\u884C\u6570\u3001\u5217\u6570\u3092\u6E1B\u3089\u3059\u3002\n * @type {<T extends {line?: number, column?: number, startOffset: number | null, endOffset: number | null }>(sourceMap: T, preCode: string) => T}\n */\nexport function subtractSourceMapByPreCodeLength(sourceMap, preCode) {\n // offset\u306F\u5358\u7D14\u306B\u5F15\u304F\u3060\u3051\u3067\u3088\u3044\n if (typeof sourceMap.startOffset === 'number') {\n sourceMap.startOffset -= preCode.length;\n }\n if (typeof sourceMap.endOffset === 'number') {\n sourceMap.endOffset -= preCode.length;\n }\n // \u305F\u3068\u3048\u3070 preCode = 'abc\\ndef\\nghi' \u306E\u3068\u304D\u3001line -= 2 \u3057\u3066\u3001\u5148\u982D\u884C\u306A\u3089 column -= 3 \u3082\u3059\u308B\u3002\n if (preCode !== '') {\n const lines = preCode.split('\\n');\n if (typeof sourceMap.line === 'number') {\n sourceMap.line -= lines.length - 1;\n }\n if (sourceMap.line === 0 && typeof sourceMap.column === 'number') {\n sourceMap.column -= lines[lines.length - 1].length;\n }\n }\n return sourceMap;\n}\n", "/**\n * \u30D6\u30E9\u30A6\u30B6\u3068Node.js\u3067\u30C6\u30AD\u30B9\u30C8\u3078\u306E\u8272\u4ED8\u3051\u3092\u5171\u901A\u5316\u3059\u308B\u305F\u3081\u306E\u30B3\u30FC\u30C9\n */\n/**\n * ANSI escape code \u306E\u4E00\u90E8\n */\nconst color = { reset: '\\x1b[0m', bold: '\\x1b[1m', black: '\\x1b[30m', red: '\\x1b[31m', green: '\\x1b[32m', yellow: '\\x1b[33m', blue: '\\x1b[34m', magenta: '\\x1b[35m', cyan: '\\x1b[36m', white: '\\x1b[37m' };\n// 30 ~ 37\nconst colorNames = ['black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white'];\n/** @param {string} t */\nconst escapeHTML = (t) => t.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&#039;');\n/**\n * ANSI escape code \u3067\u8272\u4ED8\u3051\u3057\u305F\u30C6\u30AD\u30B9\u30C8\u3092\u3001HTML\u3084\u30D6\u30E9\u30A6\u30B6\u306Econsole.log\u7528\u306E\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u306B\u5909\u63DB\u3059\u308B\u3002\n * \u305F\u3068\u3048\u3070 `convertColorTextFormat(`foo${color.red}bar`).html` \u3067 `\"foobar\"` \u306E `\"bar\"` \u306E\u90E8\u5206\u304C\u8D64\u304F\u8868\u793A\u3055\u308C\u308BHTML\u3092\u53D6\u5F97\u3067\u304D\u308B\u3002\n * @param {string} text\n * @returns {{ nodeConsole: string, noColor: string, html: string, browserConsole: string[] }}\n */\nconst convertColorTextFormat = (text) => {\n // text\u304B\u3089 [ANSI escape code](https://en.wikipedia.org/wiki/ANSI_escape_code) \u3092\u524A\u9664\u3057\u3066\u3001\u8272\u306E\u7121\u3044\u30C6\u30AD\u30B9\u30C8\u3092\u4F5C\u308B\u3002\n // eslint-disable-next-line no-control-regex\n const noColor = text.replace(/\\x1b\\[\\d+m/g, '');\n // nodeConsole\u304B\u3089browserConsole\u3092\u4F5C\u308B\n /** @type {string[]} */\n const browserConsoleStyles = [];\n let consoleColor = 'inherit'; // \u6587\u5B57\u8272\n let consoleFontWeight = 'inherit'; // \u6587\u5B57\u306E\u592A\u3055\n // /\\x1b\\[(\\d+)m/ \u3067\u6B63\u898F\u8868\u73FE\u30DE\u30C3\u30C1\u3057\u3001\u305D\u308C\u305E\u308C\u3092 %c \u3067\u7F6E\u63DB\u3059\u308B\u3068\u540C\u6642\u306B browserConsoleStyles \u306BCSS\u3067\u306E\u8868\u73FE\u3092push\u3059\u308B\u3002\n // console.log(browserConsoleText, ...browserConsoleStyles) \u3067\u8868\u793A\u3059\u308B\u3053\u3068\u3092\u60F3\u5B9A\u3002\n const browserConsoleText = text === noColor\n ? noColor\n // eslint-disable-next-line no-control-regex\n : text.replace(/\\x1b\\[(\\d+)m/g, (_, m1str) => {\n const m1 = +m1str;\n if (m1 === 0) {\n consoleColor = 'inherit';\n consoleFontWeight = 'inherit';\n }\n if (m1 === 1) {\n consoleFontWeight = 'bold';\n }\n if (m1 >= 30 && m1 <= 37) {\n consoleColor = colorNames[m1 - 30];\n }\n browserConsoleStyles.push(`color: ${consoleColor}; font-weight: ${consoleFontWeight};`);\n return '%c';\n });\n // nodeConsole\u304B\u3089html\u3092\u4F5C\u308B\n let htmlColor = 'inherit'; // \u6587\u5B57\u8272\n let htmlFontWeight = 'inherit'; // \u6587\u5B57\u306E\u592A\u3055\n // text\u304C\u8272\u60C5\u5831\u3092\u542B\u307E\u306A\u3044\u306A\u3089\u305D\u308C\u3092\u305D\u306E\u307E\u307E\u4F7F\u3044\u3001\u542B\u3080\u306A\u3089\u5168\u4F53\u3092 <span>\u3067\u56F2\u3093\u3067\u3001\u66F4\u306B\u3001ANSI escape code \u3067\u56F2\u307E\u308C\u305F\u90E8\u5206\u3092\u5BFE\u5FDC\u3059\u308B style \u3092\u4ED8\u3051\u305F <span> \u3067\u56F2\u3080\u3002\n const html = text === noColor ? noColor : ('<span>' + escapeHTML(text)\n // eslint-disable-next-line no-control-regex\n .replace(/\\x1b\\[(\\d+)m/g, (_, m1str) => {\n const m1 = +m1str;\n if (m1 === 0) { // \u30EA\u30BB\u30C3\u30C8\n htmlColor = 'inherit';\n htmlFontWeight = 'inherit';\n }\n if (m1 === 1) { // \u592A\u5B57\u5316\n htmlFontWeight = 'bold';\n }\n if (m1 >= 30 && m1 <= 37) { // \u6587\u5B57\u8272\u306E\u5909\u66F4\n htmlColor = colorNames[m1 - 30];\n }\n return `</span><span style=\"color: ${htmlColor}; font-weight: ${htmlFontWeight};\">`;\n }) + '</span>');\n // \u5404\u8868\u73FE\u3092\u8FD4\u3059\u3002\n return {\n noColor,\n nodeConsole: text === noColor\n ? noColor // text\u304C\u8272\u306E\u60C5\u5831\u3092\u542B\u307E\u306A\u3044\u306A\u3089noColor\u3092\u8FD4\u3059\u3002\n : text + '\\x1b[0m', // \u305D\u3046\u3067\u306A\u3051\u308C\u3070text\u306E\u672B\u5C3E\u306B\u8272\u3092\u30EA\u30BB\u30C3\u30C8\u3059\u308B\u30B3\u30FC\u30C9\u3092\u4ED8\u3051\u3066\u8FD4\u3059\u3002\n html,\n browserConsole: [browserConsoleText, ...browserConsoleStyles]\n };\n};\nexport const NakoColors = { convertColorTextFormat, colorNames, color };\n", "/** NakoLogger */\nimport { NakoError, NakoRuntimeError } from './nako_errors.mjs';\nimport { NakoColors } from './nako_colors.mjs';\n/**\n * \u30ED\u30B0\u30EC\u30D9\u30EB - \u6570\u5B57\u304C\u9AD8\u3044\u307B\u3069\u512A\u5148\u5EA6\u304C\u9AD8\u3044\u3002\n */\nexport class LogLevel {\n // string to level no\n static fromS(levelStr) {\n let level = LogLevel.trace;\n switch (levelStr) {\n case 'all':\n level = LogLevel.all;\n break;\n case 'trace':\n level = LogLevel.trace;\n break;\n case 'debug':\n level = LogLevel.debug;\n break;\n case 'info':\n level = LogLevel.info;\n break;\n case 'warn':\n level = LogLevel.warn;\n break;\n case 'error':\n level = LogLevel.error;\n break;\n case 'stdout':\n level = LogLevel.stdout;\n break;\n default:\n throw new Error('[NakoLogger] unknown logger level:' + levelStr);\n }\n return level;\n }\n static toString(level) {\n const levels = ['all', 'trace', 'debug', 'info', 'warn', 'error', 'stdout'];\n return levels[level];\n }\n}\n// level no\nLogLevel.all = 0;\nLogLevel.trace = 1;\nLogLevel.debug = 2;\nLogLevel.info = 3;\nLogLevel.warn = 4;\nLogLevel.error = 5;\nLogLevel.stdout = 6;\n/**\n * \u30A8\u30E9\u30FC\u4F4D\u7F6E\u3092\u65E5\u672C\u8A9E\u3067\u8868\u793A\u3059\u308B\u3002\n * \u305F\u3068\u3048\u3070 `stringifyPosition({ file: \"foo.txt\", line: 5 })` \u306F `\"foo.txt(6\u884C\u76EE):\"` \u3092\u51FA\u529B\u3059\u308B\u3002\n */\nfunction stringifyPosition(p) {\n if (!p) {\n return '';\n }\n return `${p.file || ''}${p.line === undefined ? '' : `(${p.line + 1}\u884C\u76EE): `}`;\n}\nexport function parsePosition(line) {\n const m = line.match(/^l(\\d+):(.+)/);\n let lineNo = 0;\n let fileName = 'main.nako3';\n if (m) {\n lineNo = parseInt(m[1], 10);\n fileName = m[2];\n }\n return {\n startOffset: 0,\n endOffset: 0,\n line: lineNo,\n file: fileName\n };\n}\n/**\n * \u30B3\u30F3\u30D1\u30A4\u30E9\u306E\u30ED\u30B0\u60C5\u5831\u3092\u51FA\u529B\u3059\u308B\u305F\u3081\u306E\u30AF\u30E9\u30B9\u3002\n * trace(), debug(), info(), warn(), error() \u306F\u305D\u308C\u305E\u308C\u30E1\u30C3\u30BB\u30FC\u30B8\u306B `[\u8B66\u544A]` \u306A\u3069\u306E\u30BF\u30B0\u3068\u30A8\u30E9\u30FC\u4F4D\u7F6E\u306E\u65E5\u672C\u8A9E\u8868\u73FE\u3092\u4ED8\u3051\u3066\u8868\u793A\u3059\u308B\u3002\n * error() \u306F\u5F15\u6570\u306B\u30A8\u30E9\u30FC\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u53D7\u3051\u53D6\u308B\u3053\u3068\u3082\u3067\u304D\u3001\u305D\u306E\u5834\u5408\u30A8\u30E9\u30FC\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u304B\u3089\u30A8\u30E9\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8\u3068\u30A8\u30E9\u30FC\u4F4D\u7F6E\u304C\u53D6\u308A\u51FA\u3055\u308C\u308B\u3002\n */\nexport class NakoLogger {\n constructor() {\n this.listeners = [];\n this.logs = '';\n this.position = '';\n }\n getErrorLogs() {\n return [this.logs.replace(/\\s+$/, ''), this.position];\n }\n clear() {\n this.logs = '';\n this.position = '';\n }\n /**\n * send\u30E1\u30BD\u30C3\u30C9\u3067\u9001\u3089\u308C\u305F\u60C5\u5831\u3092\u53D7\u3051\u53D6\u308B\u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u3092\u8A2D\u5B9A\u3059\u308B\u3002\n * @param levelStr\n * @param callback\n */\n addListener(levelStr, callback) {\n const level = LogLevel.fromS(levelStr);\n this.listeners.push({ level, callback });\n }\n /**\n * addListener\u30E1\u30BD\u30C3\u30C9\u3067\u8A2D\u5B9A\u3057\u305F\u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u3092\u53D6\u308A\u5916\u3059\u3002\n * @param {LogListener} callback\n */\n removeListener(callback) {\n this.listeners = this.listeners.filter((l) => l.callback !== callback);\n }\n /** \u672C\u4F53\u958B\u767A\u6642\u306E\u30C7\u30D0\u30C3\u30B0\u60C5\u5831\uFF08debug\u3088\u308A\u66F4\u306B\u8A73\u7D30\u306A\u60C5\u5831\uFF09\n * @param {string} message\n * @param {Position | null} position\n */\n trace(message, position = null) {\n this.sendI(LogLevel.trace, `${NakoColors.color.bold}[\u30C7\u30D0\u30C3\u30B0\u60C5\u5831\uFF08\u8A73\u7D30\uFF09]${NakoColors.color.reset}${stringifyPosition(position)}${message}`, position);\n }\n /** \u672C\u4F53\u958B\u767A\u6642\u306E\u30C7\u30D0\u30C3\u30B0\u60C5\u5831\n * @param {string} message\n * @param {Position | null} position\n */\n debug(message, position = null) {\n this.sendI(LogLevel.debug, `${NakoColors.color.bold}[\u30C7\u30D0\u30C3\u30B0\u60C5\u5831]${NakoColors.color.reset}${stringifyPosition(position)}${message}`, position);\n }\n /** \u30E6\u30FC\u30B6\u30FC\u30D7\u30ED\u30B0\u30E9\u30E0\u306E\u30C7\u30D0\u30C3\u30B0\u60C5\u5831\uFF08\u3042\u307E\u308A\u91CD\u8981\u3067\u306F\u306A\u3044\u3082\u306E\uFF09\n * @param {string} message\n * @param {Position | null} position\n */\n info(message, position = null) {\n this.sendI(LogLevel.info, `${NakoColors.color.bold}${NakoColors.color.blue}[\u60C5\u5831]${NakoColors.color.reset}${stringifyPosition(position)}${message}`, position);\n }\n /** \u30E6\u30FC\u30B6\u30FC\u30D7\u30ED\u30B0\u30E9\u30E0\u306E\u30C7\u30D0\u30C3\u30B0\u60C5\u5831\uFF08\u91CD\u8981\u306A\u3082\u306E\uFF09\n * @param {string} message\n * @param {Position | null} position\n */\n warn(message, position = null) {\n this.sendI(LogLevel.warn, `${NakoColors.color.bold}${NakoColors.color.green}[\u8B66\u544A]${NakoColors.color.reset}${stringifyPosition(position)}${message}`, position);\n }\n /** \u30A8\u30E9\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8\n * @param {string | Error} message\n * @param {Position | null} position\n */\n error(message, position = null) {\n // NakoError\u304B\u5224\u5B9A (`message instanceof NakoError`\u3067\u306F\u5224\u5B9A\u3067\u304D\u306A\u3044\u5834\u5408\u304C\u3042\u308B)\n if (message instanceof Error && typeof message.type === 'string') {\n // NakoError\u304B\n const etype = message.type;\n switch (etype) {\n case 'NakoRuntimeError':\n case 'NakoError':\n if (message instanceof NakoError) {\n const e = message;\n let pos = position;\n if (pos === null || pos === undefined) {\n pos = { file: e.file, line: e.line || 0, startOffset: 0, endOffset: 0 };\n }\n this.sendI(LogLevel.error, e.message, pos);\n return;\n }\n }\n }\n if (message instanceof Error) {\n // \u4E00\u822C\u306E\u30A8\u30E9\u30FC\u306E\u5834\u5408\u306F\u3001message\u306E\u307F\u53D6\u5F97\u3067\u304D\u308B\u3002\n message = message.message;\n }\n this.sendI(LogLevel.error, `${NakoColors.color.bold}${NakoColors.color.red}[\u30A8\u30E9\u30FC]${NakoColors.color.reset}${stringifyPosition(position)}${message}`, position);\n }\n /** RuntimeError\u3092\u751F\u6210\u3059\u308B */\n runtimeError(error, posStr) {\n const e = new NakoRuntimeError(error, posStr);\n return e;\n }\n /** \u30E6\u30FC\u30B6\u30FC\u30D7\u30ED\u30B0\u30E9\u30E0\u306E\u30C7\u30D0\u30C3\u30B0\u60C5\u5831\uFF08\u3059\u3079\u3066)\n * @param {string} message\n * @param {Position | null} position\n */\n stdout(message, position = null) {\n this.sendI(LogLevel.stdout, `${message}`, position);\n }\n /** \u6307\u5B9A\u3057\u305Flevel\u306Elistener\u306B\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u9001\u308B\u3002html\u3084browserConsole\u306F\u7121\u3051\u308C\u3070nodeConsole\u304B\u3089\u751F\u6210\u3059\u308B\u3002 */\n send(levelStr, nodeConsole, position, html = null, browserConsole = null) {\n const i = LogLevel.fromS(levelStr);\n this.sendI(i, nodeConsole, position, html, browserConsole);\n }\n /** \u6307\u5B9A\u3057\u305Flevel\u306Elistener\u306B\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u9001\u308B\u3002html\u3084browserConsole\u306F\u7121\u3051\u308C\u3070nodeConsole\u304B\u3089\u751F\u6210\u3059\u308B\u3002 */\n sendI(level, nodeConsole, position, html = null, browserConsole = null) {\n const makeData = () => {\n // nodeConsole\u304B\u3089noColor, nodeCondole\u306A\u3069\u306E\u5F62\u5F0F\u3092\u751F\u6210\u3059\u308B\u3002\n const formats = NakoColors.convertColorTextFormat(nodeConsole);\n // \u30ED\u30B0\u304C\u8907\u6570\u884C\u304B\u3089\u69CB\u6210\u3055\u308C\u308B\u5834\u5408\u306F\u3001html\u3067\u306E\u8868\u73FE\u306Bborder\u3092\u8A2D\u5B9A\u3059\u308B\u3002\n let style = '';\n if (nodeConsole.includes('\\n')) {\n style += 'border-top: 1px solid #8080806b; border-bottom: 1px solid #8080806b;';\n }\n // \u5404\u30A4\u30D9\u30F3\u30C8\u30EA\u30B9\u30CA\u30FC\u304C\u53D7\u3051\u53D6\u308B\u30C7\u30FC\u30BF\n const data = {\n noColor: formats.noColor,\n nodeConsole: formats.nodeConsole,\n browserConsole: browserConsole || formats.browserConsole,\n html: `<div style=\"${style}\">` + (html || formats.html) + '</div>', // \u5404\u884C\u3092 style: block \u3067\u8868\u793A\u3059\u308B\u305F\u3081\u306B\u3001<div>\u3067\u56F2\u3080\u3002\n level: LogLevel.toString(level),\n position\n };\n return data;\n };\n // \u30A8\u30E9\u30FC\u306A\u3089\u30ED\u30B0\u306B\u8FFD\u52A0\n if (level === LogLevel.error) {\n const data = makeData();\n this.logs += data.noColor + '\\n';\n if (position && this.position !== null) {\n this.position = `l${position.line}:${position.file || 'unknown'}`;\n }\n }\n // \u767B\u9332\u3057\u305F\u30EA\u30B9\u30CA\u30FC\u306B\u901A\u77E5\u3059\u308B\n for (const l of this.listeners) {\n if (l.level <= level) {\n const data = makeData();\n l.callback(data);\n }\n }\n }\n}\n", "import { NakoColors } from './nako_colors.mjs';\n/**\n * \u30B3\u30F3\u30D1\u30A4\u30EB\u3055\u308C\u305F\u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u3067\u3001\u30B0\u30ED\u30FC\u30D0\u30EB\u7A7A\u9593\u306Ethis\u304C\u6307\u3059\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n */\nexport class NakoGlobal {\n /**\n * @param compiler\n * @param gen\n */\n constructor(compiler, gen, guid = 0) {\n this.guid = guid;\n this.lastJSCode = '';\n // \u30E6\u30FC\u30B6\u30FC\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u304B\u3089\u7DE8\u96C6\u3055\u308C\u308B\u5909\u6570\n this.__locals = new Map();\n this.__varslist = [\n compiler.newVaiables(compiler.__varslist[0]), // system\n compiler.newVaiables(compiler.__varslist[1]), // global\n compiler.newVaiables(compiler.__varslist[2]) // local [2][3][4][5] ...\n ];\n this.numFailures = 0;\n this.index = 0;\n this.nextIndex = -1;\n this.__code = [];\n this.__callstack = [];\n this.__stack = [];\n this.__labels = [];\n this.__genMode = gen.genMode;\n // \u30D0\u30FC\u30B8\u30E7\u30F3\u60C5\u5831\u306E\u5F15\u304D\u7D99\u304E\n this.version = compiler.version;\n this.coreVersion = compiler.coreVersion;\n // PluginSystem\u3068destroy()\u304B\u3089\u53C2\u7167\u3059\u308B\u305F\u3081\n this.__module = { ...compiler.__module }; // shallow copy\n this.pluginfiles = { ...compiler.getPluginfiles() };\n // PluginWorker\u3067\u30E6\u30FC\u30B6\u30FC\u5B9A\u7FA9\u95A2\u6570\u306EJavaScript\u30B3\u30FC\u30C9\u3092worker\u306E\u30B3\u30F3\u30D1\u30A4\u30E9\u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3078\u30B3\u30D4\u30FC\u3059\u308B\u305F\u3081\n this.gen = gen;\n // \u4EE5\u4E0B\u306E\u30E1\u30BD\u30C3\u30C9\u3067\u4F7F\u3046\u305F\u3081\n this.logger = compiler.getLogger();\n this.compiler = compiler;\n this.josiList = compiler.josiList;\n this.reservedWords = compiler.reservedWords;\n }\n clearLog() {\n this.__varslist[0].set('\u8868\u793A\u30ED\u30B0', '');\n }\n get log() {\n let s = this.__varslist[0].get('\u8868\u793A\u30ED\u30B0');\n s = s.replace(/\\s+$/, '');\n return s;\n }\n /**\n * \u30B7\u30B9\u30C6\u30E0\u5909\u6570\u3092\u8A2D\u5B9A\u3059\u308B\n * @param name \u30B7\u30B9\u30C6\u30E0\u5909\u6570\u540D\n * @param value \u8A2D\u5B9A\u3057\u305F\u3044\u5024\n */\n __setSysVar(name, value) {\n this.__varslist[0].set(name, value);\n }\n /**\n * \u30B7\u30B9\u30C6\u30E0\u5909\u6570\u3092\u53D6\u5F97\u3059\u308B\n * @param name \u30B7\u30B9\u30C6\u30E0\u5909\u6570\u540D\n * @returns \u30B7\u30B9\u30C6\u30E0\u5909\u6570\u306E\u5024\n */\n __getSysVar(name) {\n return this.__varslist[0].get(name);\n }\n /**\n * \u300C\u30CA\u30C7\u30B7\u30B3\u300D\u547D\u4EE4\u306E\u305F\u3081\u306E\u30E1\u30BD\u30C3\u30C9\n */\n runEx(code, fname, opts, preCode = '') {\n // \u30B9\u30B3\u30FC\u30D7\u3092\u5171\u6709\u3057\u3066\u5B9F\u884C\n opts.preCode = preCode;\n opts.nakoGlobal = this;\n return this.compiler.runSync(code, fname, opts);\n }\n async runAsync(code, fname, opts, preCode = '') {\n // \u30B9\u30B3\u30FC\u30D7\u3092\u5171\u6709\u3057\u3066\u5B9F\u884C\n opts.preCode = preCode;\n opts.nakoGlobal = this;\n return await this.compiler.runAsync(code, fname, opts);\n }\n /**\n * \u30C6\u30B9\u30C8\u5B9F\u884C\u306E\u305F\u3081\u306E\u30E1\u30BD\u30C3\u30C9\n * @param {{ name: string, f: () => void }[]} tests\n */\n _runTests(tests) {\n let text = `${NakoColors.color.bold}\u30C6\u30B9\u30C8\u306E\u5B9F\u884C\u7D50\u679C${NakoColors.color.reset}\\n`;\n let pass = 0;\n let numFailures = 0;\n for (const t of tests) {\n try {\n t.f();\n text += `${NakoColors.color.green}\u2714${NakoColors.color.reset} ${t.name}\\n`;\n pass++;\n }\n catch (err) {\n const errorMessage = (err instanceof Error) ? err.message : String(err);\n text += `${NakoColors.color.red}\u2613${NakoColors.color.reset} ${t.name}: ${errorMessage}\\n`;\n numFailures++;\n }\n }\n if (numFailures > 0) {\n text += `${NakoColors.color.green}\u6210\u529F ${pass}\u4EF6 ${NakoColors.color.red}\u5931\u6557 ${numFailures}\u4EF6`;\n }\n else {\n text += `${NakoColors.color.green}\u6210\u529F ${pass}\u4EF6`;\n }\n this.numFailures = numFailures;\n this.logger.stdout(text);\n }\n /**\n * \u6BCE\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u300C!\u30AF\u30EA\u30A2\u300D\u95A2\u6570\u3092\u5B9F\u884C\n */\n clearPlugins() {\n // \u5B9F\u884C\u3057\u3066\u3044\u308B\u95A2\u6570\u3092\u3059\u3079\u3066\u7D42\u4E86\u3055\u305B\u308B\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30AF\u30EA\u30A2\u95A2\u6570\u3092\u547C\u3073\u51FA\u3059\n const clearName = '!\u30AF\u30EA\u30A2';\n for (const pname in this.pluginfiles) {\n const po = this.__module[pname];\n if (po[clearName] && po[clearName].fn) {\n try {\n po[clearName].fn(this);\n }\n catch (e) {\n this.logger.error(`\u30D7\u30E9\u30B0\u30A4\u30F3\u300E${pname}\u300F\u306E\u30AF\u30EA\u30A2\u95A2\u6570\u3067\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F:` + String(e.message));\n }\n }\n }\n }\n /**\n * \u5404\u7A2E\u30EA\u30BB\u30C3\u30C8\u51E6\u7406\n */\n reset() {\n this.clearPlugins();\n }\n destroy() {\n this.reset();\n }\n}\n", "// \u5B9F\u969B\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u5B9A\u7FA9 (\u81EA\u52D5\u751F\u6210\u3055\u308C\u308B\u306E\u3067\u4EE5\u4E0B\u3092\u7DE8\u96C6\u3057\u306A\u3044)\nconst coreVersion = {\n version: '3.7.20',\n major: 3,\n minor: 7,\n patch: 20\n};\nexport default coreVersion;\n", "import { NakoRuntimeError } from './nako_errors.mjs';\nexport default {\n 'meta': {\n type: 'const',\n value: {\n pluginName: 'plugin_system', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u540D\u524D\n description: '\u30B7\u30B9\u30C6\u30E0\u95A2\u9023\u306E\u547D\u4EE4\u3092\u63D0\u4F9B\u3059\u308B\u30D7\u30E9\u30B0\u30A4\u30F3', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u8AAC\u660E\n pluginVersion: '3.6.0', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\n nakoRuntime: ['wnako', 'cnako', 'phpnako'], // \u5BFE\u8C61\u30E9\u30F3\u30BF\u30A4\u30E0\n nakoVersion: '3.6.0' // \u8981\u6C42\u306A\u3067\u3057\u3053\u30D0\u30FC\u30B8\u30E7\u30F3\n }\n },\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: false,\n fn: function (sys) {\n // \u30B7\u30B9\u30C6\u30E0\u5909\u6570\u306E\u521D\u671F\u5316\n const system = sys;\n sys.pathSeparator = '/'; // \u30D1\u30B9\u8A18\u53F7 #2185\n sys.engine = '?'; // \u30A8\u30F3\u30B8\u30F3\u540D\n sys.isDebug = false;\n // \u30B7\u30B9\u30C6\u30E0\u5909\u6570\u306B\u30A2\u30AF\u30BB\u30B9\u3059\u308B\u305F\u3081\u306E\u95A2\u6570\u3092\u5B9A\u7FA9\n sys.__setSysVar = (name, value) => system.__v0.set(name, value);\n sys.__getSysVar = (name, defaultValue = undefined) => {\n const v = system.__v0.get(name);\n if (v === undefined) {\n return defaultValue;\n }\n return v;\n };\n sys.__setSore = (v) => { sys.__vars.set('\u305D\u308C', v); return v; };\n sys.__getSore = () => sys.__vars.get('\u305D\u308C');\n sys.tags = {}; // \u30BF\u30B0 - \u30D7\u30E9\u30B0\u30A4\u30F3\u5074\u3067\u81EA\u7531\u306B\u4F7F\u3048\u308B\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n // \u8A00\u8A9E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u8A2D\u5B9A\n sys.__setSysVar('\u30CA\u30C7\u30B7\u30B3\u30D0\u30FC\u30B8\u30E7\u30F3', sys.version);\n sys.__setSysVar('\u30CA\u30C7\u30B7\u30B3\u8A00\u8A9E\u30D0\u30FC\u30B8\u30E7\u30F3', sys.coreVersion);\n if (!system.__namespaceList) {\n system.__namespaceList = [];\n }\n // \u306A\u3067\u3057\u3053\u306E\u95A2\u6570\u3084\u5909\u6570\u3092\u63A2\u3057\u3066\u8FD4\u3059\n sys.__findVar = function (nameStr, def) {\n if (typeof nameStr === 'function') {\n return nameStr;\n }\n // \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092\u63A2\u3059\n const localVar = system.__locals.get(nameStr);\n if (localVar) {\n return localVar;\n }\n // \u540D\u524D\u7A7A\u9593\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\n if (nameStr.indexOf('__') >= 0) {\n for (let i = 2; i >= 0; i--) {\n const varScope = system.__varslist[i];\n const scopeValue = varScope.get(nameStr);\n if (scopeValue) {\n return scopeValue;\n }\n }\n return def;\n }\n // \u540D\u524D\u7A7A\u9593\u3092\u53C2\u7167\u3057\u3066\u95A2\u6570\u30FB\u5909\u6570\u540D\u3092\u89E3\u6C7A\u3059\u308B\n const modList = system.__modList ? system.__modList : [system.__modName];\n for (const modName of modList) {\n const gname = `${modName}__${nameStr}`;\n for (let i = 2; i >= 0; i--) {\n const scope = system.__varslist[i];\n const scopeValue = scope.get(gname);\n if (scopeValue) {\n return scopeValue;\n }\n }\n }\n return def;\n };\n // \u6587\u5B57\u5217\u304B\u3089\u95A2\u6570\u3092\u63A2\u3059\n sys.__findFunc = function (nameStr, parentFunc) {\n const f = sys.__findVar(nameStr);\n if (typeof f === 'function') {\n return f;\n }\n throw new Error(`\u300E${parentFunc}\u300F\u306B\u5B9F\u884C\u3067\u304D\u306A\u3044\u95A2\u6570\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002`);\n };\n // \u30B7\u30B9\u30C6\u30E0\u95A2\u6570\u3092\u5B9F\u884C\n sys.__exec = function (func, params) {\n // \u30B7\u30B9\u30C6\u30E0\u547D\u4EE4\u3092\u512A\u5148\n const f0 = sys.__getSysVar(func);\n if (f0) {\n return f0.apply(this, params);\n }\n // \u30B0\u30ED\u30FC\u30D0\u30EB\u30FB\u30ED\u30FC\u30AB\u30EB\u3092\u63A2\u3059\n const f = sys.__findVar(func);\n if (!f) {\n throw new Error('\u30B7\u30B9\u30C6\u30E0\u95A2\u6570\u3067\u30A8\u30A4\u30EA\u30A2\u30B9\u306E\u6307\u5B9A\u30DF\u30B9:' + func);\n }\n return f.apply(this, params);\n };\n // \u30BF\u30A4\u30DE\u30FC\u306B\u95A2\u3059\u308B\u51E6\u7406(\u30BF\u30A4\u30DE\u30FC\u306F\u300C!\u30AF\u30EA\u30A2\u300D\u3067\u5168\u90E8\u505C\u6B62\u3059\u308B)\n sys.__timeout = [];\n sys.__interval = [];\n // \u65E5\u4ED8\u51E6\u7406\u306A\u3069\u306B\u4F7F\u3046\n const z2 = sys.__zero2 = (s) => {\n s = '00' + String(s);\n return s.substring(s.length - 2);\n };\n sys.__zero = (s, keta) => {\n let zeroS = '';\n for (let i = 0; i < keta; i++) {\n zeroS += '0';\n }\n s = zeroS + s;\n return s.substring(s.length - keta);\n };\n sys.__formatDate = (t) => {\n return String(t.getFullYear()) + '/' + z2(t.getMonth() + 1) + '/' + z2(t.getDate());\n };\n sys.__formatTime = (t) => {\n return z2(t.getHours()) + ':' + z2(t.getSeconds()) + ':' + z2(t.getMinutes());\n };\n sys.__formatDateTime = (t, fmt) => {\n const dateStr = String(t.getFullYear()) + '/' + z2(t.getMonth() + 1) + '/' + z2(t.getDate());\n const timeStr = z2(t.getHours()) + ':' + z2(t.getMinutes()) + ':' + z2(t.getSeconds());\n if (fmt.match(/^\\d+\\/\\d+\\/\\d+\\s+\\d+:\\d+:\\d+$/)) {\n return dateStr + ' ' + timeStr;\n }\n if (fmt.match(/^\\d+\\/\\d+\\/\\d+$/)) {\n return dateStr;\n }\n if (fmt.match(/^\\d+:\\d+:\\d+$/)) {\n return timeStr;\n }\n return dateStr + ' ' + timeStr;\n };\n sys.__str2date = (s) => {\n // trim\n s = ('' + s).replace(/(^\\s+|\\s+$)/, '');\n // is unix time\n if (s.match(/^(\\d+|\\d+\\.\\d+)$/)) {\n return new Date(parseFloat(s) * 1000);\n }\n // is time ?\n if (s.match(/^\\d+:\\d+(:\\d+)?$/)) {\n const t = new Date();\n const a = (s + ':0').split(':');\n return new Date(t.getFullYear(), t.getMonth(), t.getDate(), parseInt(a[0]), parseInt(a[1]), parseInt(a[2]));\n }\n // replace splitter to '/'\n s = s.replace(/[\\s:\\-T]/g, '/');\n s += '/0/0/0'; // \u65E5\u4ED8\u3060\u3051\u306E\u3068\u304D\u306E\u305F\u3081\u306B\u6642\u9593\u5206\u3092\u8DB3\u3059\n const a = s.split('/');\n return new Date(parseInt(a[0]), parseInt(a[1]) - 1, parseInt(a[2]), parseInt(a[3]), parseInt(a[4]), parseInt(a[5]));\n };\n // \u300E\u7D99\u7D9A\u8868\u793A\u300F\u306E\u305F\u3081\u306E\u4E00\u6642\u5909\u6570(\u300E\u8868\u793A\u300F\u5B9F\u884C\u3067\u521D\u671F\u5316)\n sys.__printPool = '';\n // \u6697\u9ED9\u306E\u578B\u5909\u63DB\u3067\u8DB3\u3057\u7B97\u3092\u884C\u3046\u3068\u304D\u306B\u4F7F\u7528\u3002bigint \u306F\u305D\u306E\u307E\u307E\u3001\u305D\u306E\u4ED6\u306F number \u306B\u81EA\u52D5\u5909\u63DB\n sys.__parseFloatOrBigint = (v) => {\n return (typeof v) === 'bigint' ? v : parseFloat(v);\n };\n // undefined\u30C1\u30A7\u30C3\u30AF\n system.chk = (value, constId) => {\n if (typeof value === 'undefined') {\n const cp = system.constPools[constId];\n const [msgNo, msgArgs, fileNo, lineNo] = cp;\n let msg = system.constPoolsTemplate[msgNo];\n for (const i in msgArgs) {\n const arg = system.constPoolsTemplate[msgArgs[i]];\n msg = msg.split(`$${i}`).join(arg);\n }\n const fileStr = system.constPoolsTemplate[fileNo];\n sys.logger.warn(msg, { file: fileStr, line: lineNo });\n }\n return value;\n };\n // eval function #1733\n sys.__evalSafe = (src) => {\n // eval\u306E\u30B9\u30B3\u30FC\u30D7\u3092\u5909\u3048\u308B\u305F\u3081\u306E\u30C6\u30AF\u30CB\u30C3\u30AF\n // https://esbuild.github.io/content-types/#direct-eval\n const _eval = eval;\n try {\n return _eval(src);\n }\n catch (e) {\n console.warn('[eval]', e);\n return null;\n }\n };\n // eval function #1733 - \u4E92\u63DB\u6027\u3092\u512A\u5148\u3059\u308B\u305F\u3081\u3001direct eval\u3092\u4F7F\u3046\u3053\u3068\u306B\n sys.__evalJS = (src, sys) => {\n try {\n // \u307E\u305A\u5F93\u6765\u901A\u308Aeval\u3067\u8A55\u4FA1\uFF08\u5F0F\u306E\u5024\u3092\u8FD4\u3059\u4E92\u63DB\u6027\u3092\u7DAD\u6301\uFF09\n return eval(src);\n }\n catch (e) {\n // return\u6587\u306B\u3088\u308BSyntaxError\u306E\u5834\u5408\u306E\u307FIIFE\u3067\u518D\u8A66\u884C (#NE-006)\n if (e instanceof SyntaxError && e.message.includes('return')) {\n try {\n return (new Function('sys', `return (function(sys){\\n${src}\\n})(sys)`))(sys);\n }\n catch (e2) {\n console.warn('[eval]', e2);\n return null;\n }\n }\n console.warn('[eval]', e);\n return null;\n }\n };\n // Prop\u30A2\u30AF\u30BB\u30B9\u652F\u63F4\n sys.__registPropAccessor = (f, getProp, setProp) => {\n system.__propAccessor.push({\n target: f,\n getProp,\n setProp\n });\n };\n sys.__checkPropAccessor = (mode, obj) => {\n if ((mode === 'get' && obj.__getProp === undefined) || (mode === 'set' && obj.__setProp === undefined)) {\n for (let i = 0; i < system.__propAccessor.length; i++) {\n const accs = system.__propAccessor[i];\n if (accs.target[Symbol.hasInstance](obj)) {\n if (accs.getProp) {\n obj.__getProp = accs.getProp;\n }\n else {\n obj.__getProp = null;\n }\n if (accs.setProp) {\n obj.__setProp = accs.setProp;\n }\n else {\n obj.__setProp = null;\n }\n return;\n }\n }\n obj.__getProp = obj.__setProp = null;\n }\n };\n // \u300C??\u300D\u30CF\u30C6\u30CA\u95A2\u6570\u306E\u8A2D\u5B9A\n sys.__hatena = sys.__getSysVar('\u30C7\u30D0\u30C3\u30B0\u8868\u793A');\n }\n },\n '!\u30AF\u30EA\u30A2': {\n type: 'func',\n josi: [],\n fn: function (sys) {\n if (sys.__exec) {\n sys.__exec('\u5168\u30BF\u30A4\u30DE\u30FC\u505C\u6B62', [sys]);\n }\n sys.__setSysVar('\u8868\u793A\u30ED\u30B0', '');\n }\n },\n // @\u30B7\u30B9\u30C6\u30E0\u5B9A\u6570\n '\u30CA\u30C7\u30B7\u30B3\u30D0\u30FC\u30B8\u30E7\u30F3': { type: 'const', value: '?' }, // @\u306A\u3067\u3057\u3053\u3070\u30FC\u3058\u3087\u3093\n '\u30CA\u30C7\u30B7\u30B3\u8A00\u8A9E\u30D0\u30FC\u30B8\u30E7\u30F3': { type: 'const', value: '?' }, // @\u306A\u3067\u3057\u3053\u3052\u3093\u3054\u3070\u30FC\u3058\u3087\u3093\n '\u30CA\u30C7\u30B7\u30B3\u30A8\u30F3\u30B8\u30F3': { type: 'const', value: 'nadesi.com/v3' }, // @\u306A\u3067\u3057\u3053\u3048\u3093\u3058\u3093\n '\u30CA\u30C7\u30B7\u30B3\u7A2E\u985E': { type: 'const', value: '?' }, // @\u306A\u3067\u3057\u3053\u3057\u3085\u308B\u3044\n '\u306F\u3044': { type: 'const', value: true }, // @\u306F\u3044\n '\u3044\u3044\u3048': { type: 'const', value: false }, // @\u3044\u3044\u3048\n '\u771F': { type: 'const', value: true }, // @\u3057\u3093\n '\u507D': { type: 'const', value: false }, // @\u304E\n '\u6C38\u9060': { type: 'const', value: true }, // @\u3048\u3044\u3048\u3093\n '\u30AA\u30F3': { type: 'const', value: true }, // @\u304A\u3093\n '\u30AA\u30D5': { type: 'const', value: false }, // @\u304A\u3075\n '\u6539\u884C': { type: 'const', value: '\\n' }, // @\u304B\u3044\u304E\u3087\u3046\n '\u30BF\u30D6': { type: 'const', value: '\\t' }, // @\u305F\u3076\n '\u30AB\u30C3\u30B3': { type: 'const', value: '\u300C' }, // @\u304B\u3063\u3053\n '\u30AB\u30C3\u30B3\u9589': { type: 'const', value: '\u300D' }, // @\u304B\u3063\u3053\u3068\u3058\n '\u6CE2\u30AB\u30C3\u30B3': { type: 'const', value: '{' }, // @\u306A\u307F\u304B\u3063\u3053\n '\u6CE2\u30AB\u30C3\u30B3\u9589': { type: 'const', value: '}' }, // @\u306A\u307F\u304B\u3063\u3053\u3068\u3058\n 'OK': { type: 'const', value: true }, // @OK\n 'NG': { type: 'const', value: false }, // @NG\n '\u30AD\u30E3\u30F3\u30BB\u30EB': { type: 'const', value: 0 }, // @\u304D\u3083\u3093\u305B\u308B\n 'TRUE': { type: 'const', value: true }, // @TRUE\n 'FALSE': { type: 'const', value: false }, // @FALSE\n 'true': { type: 'const', value: true }, // @true\n 'false': { type: 'const', value: false }, // @false\n 'PI': { type: 'const', value: Math.PI }, // @PI\n '\u7A7A': { type: 'const', value: '' }, // @\u304B\u3089\n 'NULL': { type: 'const', value: null }, // @NULL\n 'undefined': { type: 'const', value: undefined }, // @undefined\n '\u672A\u5B9A\u7FA9': { type: 'const', value: undefined }, // @\u307F\u3066\u3044\u304E\n '\u30A8\u30E9\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8': { type: 'const', value: '' }, // @\u3048\u3089\u30FC\u3081\u3063\u305B\u30FC\u3058\n '\u5BFE\u8C61': { type: 'const', value: '' }, // @\u305F\u3044\u3057\u3087\u3046\n '\u5BFE\u8C61\u30AD\u30FC': { type: 'const', value: '' }, // @\u305F\u3044\u3057\u3087\u3046\u304D\u30FC\n '\u56DE\u6570': { type: 'const', value: '' }, // @\u304B\u3044\u3059\u3046\n 'CR': { type: 'const', value: '\\r' }, // @CR\n 'LF': { type: 'const', value: '\\n' }, // @LF\n '\u975E\u6570': { type: 'const', value: NaN }, // @\u3072\u3059\u3046\n '\u7121\u9650\u5927': { type: 'const', value: Infinity }, // @\u3080\u3052\u3093\u3060\u3044\n '\u623B\u5024\u7121': { type: 'const', value: 0 }, // @\u3082\u3069\u308A\u3061\u306A\u3057\n '\u623B\u5024\u6709': { type: 'const', value: 1 }, // @\u3082\u3069\u308A\u3061\u3042\u308A\n '\u7A7A\u914D\u5217': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n return [];\n }\n },\n '\u7A7A\u8F9E\u66F8': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n return {};\n }\n },\n '\u7A7A\u30CF\u30C3\u30B7\u30E5': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n return {};\n }\n },\n '\u7A7A\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8': {\n type: 'func',\n josi: [],\n pure: false,\n fn: function (sys) {\n return sys.__exec('\u7A7A\u30CF\u30C3\u30B7\u30E5', [sys]);\n }\n },\n '\u771F\u507D\u5224\u5B9A': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (b) {\n return b ? '\u771F' : '\u507D';\n }\n },\n // @\u6A19\u6E96\u51FA\u529B\n '\u8868\u793A': {\n type: 'func',\n josi: [['\u3092', '\u3068']],\n pure: true,\n fn: function (s, sys) {\n // \u7D99\u7D9A\u8868\u793A\u306E\u4E00\u6642\u30D7\u30FC\u30EB\u3092\u51FA\u529B\n s = String(sys.__printPool) + s;\n sys.__printPool = '';\n //\n sys.__setSysVar('\u8868\u793A\u30ED\u30B0', String(sys.__getSysVar('\u8868\u793A\u30ED\u30B0')) + s + '\\n');\n sys.logger.send('stdout', s + '');\n },\n return_none: true\n },\n '\u7D99\u7D9A\u8868\u793A': {\n type: 'func',\n josi: [['\u3092', '\u3068']],\n pure: true,\n fn: function (s, sys) {\n sys.__printPool += s;\n },\n return_none: true\n },\n '\u9023\u7D9A\u8868\u793A': {\n type: 'func',\n josi: [['\u3068', '\u3092']],\n isVariableJosi: true,\n pure: true,\n fn: function (...a) {\n const sys = a.pop();\n const v = a.join('');\n sys.__exec('\u8868\u793A', [v, sys]);\n },\n return_none: true\n },\n '\u9023\u7D9A\u7121\u6539\u884C\u8868\u793A': {\n type: 'func',\n josi: [['\u3068', '\u3092']],\n isVariableJosi: true,\n pure: true,\n fn: function (...a) {\n const sys = a.pop();\n const v = a.join('');\n sys.__exec('\u7D99\u7D9A\u8868\u793A', [v, sys]);\n },\n return_none: true\n },\n '\u8868\u793A\u30ED\u30B0': { type: 'const', value: '' }, // @\u3072\u3087\u3046\u3058\u308D\u3050\n '\u8868\u793A\u30ED\u30B0\u30AF\u30EA\u30A2': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n sys.__setSysVar('\u8868\u793A\u30ED\u30B0', '');\n },\n return_none: true\n },\n '\u8A00': {\n type: 'func',\n josi: [['\u3092', '\u3068']],\n pure: true,\n fn: function (s, sys) {\n sys.logger.send('stdout', s + '');\n },\n return_none: true\n },\n '\u30B3\u30F3\u30BD\u30FC\u30EB\u8868\u793A': {\n type: 'func',\n josi: [['\u3092', '\u3068']],\n pure: true,\n fn: function (s) {\n console.log(s);\n },\n return_none: true\n },\n // @\u56DB\u5247\u6F14\u7B97\n '\u8DB3': {\n type: 'func',\n josi: [['\u306B', '\u3068'], ['\u3092']],\n isVariableJosi: false,\n pure: true,\n fn: function (a, b) {\n if (typeof (a) === 'bigint' || typeof (b) === 'bigint') {\n return BigInt(a) + BigInt(b);\n }\n return parseFloat(a) + parseFloat(b);\n }\n },\n '\u5408\u8A08': {\n type: 'func',\n josi: [['\u3068', '\u3092', '\u306E']],\n isVariableJosi: true,\n pure: true,\n fn: function (...a) {\n const sys = a.pop(); // remove NakoSystem\n if (a.length >= 1 && a[0] instanceof Array) {\n return sys.__exec('\u914D\u5217\u5408\u8A08', [a[0], sys]);\n }\n let isBigInt = false;\n let sum = 0;\n for (const v of a) {\n if (typeof (v) === 'bigint') {\n isBigInt = true;\n break;\n }\n sum += parseFloat(v);\n }\n if (isBigInt) {\n let bigsum = 0n;\n for (const v of a) {\n bigsum += BigInt(v);\n }\n return bigsum;\n }\n return sum;\n }\n },\n '\u5F15': {\n type: 'func',\n josi: [['\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (a, b) {\n return a - b;\n }\n },\n '\u639B': {\n type: 'func',\n josi: [['\u306B', '\u3068'], ['\u3092']],\n pure: true,\n fn: function (a, b) {\n // \u6570\u5024\u306E\u639B\u3051\u7B97\n if (typeof a === 'number') {\n return a * b;\n }\n // \u6587\u5B57\u5217\u306E\u639B\u3051\u7B97(\u6587\u5B57\u5217\u306E\u7E70\u308A\u8FD4\u3057)\n if (typeof a === 'string') {\n let s = '';\n for (let i = 0; i < parseInt(b); i++) {\n s += a;\n }\n return s;\n }\n // \u914D\u5217\u306E\u7E70\u308A\u8FD4\u3057\n if (a instanceof Array) {\n const aa = [];\n for (let i = 0; i < parseInt(b); i++) {\n aa.push(...a);\n }\n return aa;\n }\n return a * b;\n }\n },\n '\u500D': {\n type: 'func',\n josi: [['\u306E', '\u3092'], ['']],\n pure: true,\n fn: function (a, b) {\n return a * b;\n }\n },\n '\u5272': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (a, b) {\n return a / b;\n }\n },\n '\u5272\u4F59': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (a, b) {\n return a % b;\n }\n },\n '\u5076\u6570': {\n type: 'func',\n josi: [['\u304C']],\n pure: true,\n fn: function (a) {\n return (parseInt(a) % 2 === 0);\n }\n },\n '\u5947\u6570': {\n type: 'func',\n josi: [['\u304C']],\n pure: true,\n fn: function (a) {\n return (parseInt(a) % 2 === 1);\n }\n },\n '\u4E8C\u4E57': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (a) {\n return a * a;\n }\n },\n '\u3079\u304D\u4E57': {\n type: 'func',\n josi: [['\u306E'], ['\u306E']],\n pure: true,\n fn: function (a, b) {\n return Math.pow(a, b);\n }\n },\n '\u4EE5\u4E0A': {\n type: 'func',\n josi: [['\u304C'], ['']],\n pure: true,\n fn: function (a, b) {\n return a >= b;\n }\n },\n '\u4EE5\u4E0B': {\n type: 'func',\n josi: [['\u304C'], ['']],\n pure: true,\n fn: function (a, b) {\n return a <= b;\n }\n },\n '\u672A\u6E80': {\n type: 'func',\n josi: [['\u304C'], ['']],\n pure: true,\n fn: function (a, b) {\n return a < b;\n }\n },\n '\u8D85': {\n type: 'func',\n josi: [['\u304C'], ['']],\n pure: true,\n fn: function (a, b) {\n return a > b;\n }\n },\n '\u7B49': {\n type: 'func',\n josi: [['\u304C'], ['\u3068']],\n pure: true,\n fn: function (a, b) {\n return a === b;\n }\n },\n '\u7B49\u7121': {\n type: 'func',\n josi: [['\u304C'], ['\u3068']],\n pure: true,\n fn: function (a, b) {\n return a !== b;\n }\n },\n '\u4E00\u81F4': {\n type: 'func',\n josi: [['\u304C'], ['\u3068']],\n pure: true,\n fn: function (a, b) {\n // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u5834\u5408\u3001JSON\u306B\u5909\u63DB\u3057\u3066\u6BD4\u8F03\n if (typeof (a) === 'object') {\n const jsonA = JSON.stringify(a);\n const jsonB = JSON.stringify(b);\n return jsonA === jsonB;\n }\n return a === b;\n }\n },\n '\u4E0D\u4E00\u81F4': {\n type: 'func',\n josi: [['\u304C'], ['\u3068']],\n pure: true,\n fn: function (a, b) {\n // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u5834\u5408\u3001JSON\u306B\u5909\u63DB\u3057\u3066\u6BD4\u8F03\n if (typeof (a) === 'object') {\n const jsonA = JSON.stringify(a);\n const jsonB = JSON.stringify(b);\n return jsonA !== jsonB;\n }\n return a !== b;\n }\n },\n '\u7BC4\u56F2\u5185': {\n type: 'func',\n josi: [['\u304C'], ['\u304B\u3089'], ['\u306E', '\u307E\u3067\u306E']],\n pure: true,\n fn: function (v, a, b) {\n return (a <= v) && (v <= b);\n }\n },\n '\u7BC4\u56F2': {\n type: 'func',\n josi: [['\u304B\u3089'], ['\u306E', '\u307E\u3067\u306E']],\n pure: true,\n fn: function (a, b) {\n return {\n '\u5148\u982D': a,\n '\u672B\u5C3E': b\n };\n }\n },\n '\u9023\u7D9A\u52A0\u7B97': {\n type: 'func',\n josi: [['\u3092'], ['\u306B', '\u3068']],\n isVariableJosi: true,\n pure: true,\n fn: function (b, ...a) {\n a.pop(); // \u5FC5\u305A\u672B\u5C3E\u306B sys \u304C\u3042\u308B\u306E\u3067\u3001\u672B\u5C3E\u306E\u30B7\u30B9\u30C6\u30E0\u5909\u6570\u3092\u9664\u5916\n a.push(b);\n return a.reduce((p, c) => p + c);\n }\n },\n 'MAX': {\n type: 'func',\n josi: [['\u306E'], ['\u3068']],\n isVariableJosi: true,\n pure: true,\n fn: function (b, ...a) {\n const sys = a.pop();\n return sys.__exec('\u6700\u5927\u5024', [b, ...a, sys]);\n }\n },\n '\u6700\u5927\u5024': {\n type: 'func',\n josi: [['\u306E'], ['\u3068']],\n isVariableJosi: true,\n pure: true,\n fn: function (b, ...a) {\n a.pop(); // \u5FC5\u305A\u672B\u5C3E\u306B sys \u304C\u3042\u308B\u306E\u3067\u3001\u672B\u5C3E\u306E\u30B7\u30B9\u30C6\u30E0\u5909\u6570\u3092\u9664\u5916\n a.push(b);\n return a.reduce((p, c) => Math.max(p, c));\n }\n },\n 'MIN': {\n type: 'func',\n josi: [['\u306E'], ['\u3068']],\n isVariableJosi: true,\n pure: true,\n fn: function (b, ...a) {\n const sys = a.pop();\n return sys.__exec('\u6700\u5C0F\u5024', [b, ...a, sys]);\n }\n },\n '\u6700\u5C0F\u5024': {\n type: 'func',\n josi: [['\u306E'], ['\u3068']],\n isVariableJosi: true,\n pure: true,\n fn: function (b, ...a) {\n a.pop(); // \u5FC5\u305A\u672B\u5C3E\u306B sys \u304C\u3042\u308B\u306E\u3067\u3001\u672B\u5C3E\u306E\u30B7\u30B9\u30C6\u30E0\u5909\u6570\u3092\u9664\u5916\n a.push(b);\n return a.reduce((p, c) => Math.min(p, c));\n }\n },\n 'CLAMP': {\n type: 'func',\n josi: [['\u306E', '\u3092'], ['\u304B\u3089'], ['\u307E\u3067\u306E', '\u3067']],\n pure: true,\n fn: function (x, a, b) {\n return Math.min(Math.max(x, a), b);\n }\n },\n // @\u656C\u8A9E\n '\u304F\u3060\u3055\u3044': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n if (!sys.__reisetu) {\n sys.__reisetu = 0;\n }\n sys.__reisetu++;\n },\n return_none: true\n },\n '\u304A\u9858': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n if (!sys.__reisetu) {\n sys.__reisetu = 0;\n }\n sys.__reisetu++;\n },\n return_none: true\n },\n '\u3067\u3059': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n if (!sys.__reisetu) {\n sys.__reisetu = 0;\n }\n sys.__reisetu++;\n },\n return_none: true\n },\n '\u62DD\u5553': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n sys.__reisetu = 0;\n },\n return_none: true\n },\n '\u656C\u5177': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n sys.__reisetu += 100; // bonus point\n },\n return_none: true\n },\n '\u793C\u7BC0\u30EC\u30D9\u30EB\u53D6\u5F97': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n if (!sys.__reisetu) {\n sys.__reisetu = 0;\n }\n return sys.__reisetu;\n }\n },\n // @\u7279\u6B8A\u547D\u4EE4\n 'JS\u5B9F\u884C': {\n type: 'func',\n josi: [['\u3092', '\u3067']],\n pure: true,\n fn: function (src, sys) {\n return sys.__evalJS(src, sys); // #1733\n }\n },\n 'JS\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u53D6\u5F97': {\n type: 'func',\n josi: [['\u306E']],\n pure: false,\n fn: function (name, sys) {\n return sys.__findVar(name, null);\n }\n },\n 'JS\u95A2\u6570\u5B9F\u884C': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n fn: function (name, args, sys) {\n // name\u304C\u6587\u5B57\u5217\u306A\u3089eval\u3057\u3066\u95A2\u6570\u3092\u5F97\u308B\n if (typeof name === 'string') {\n name = sys.__evalJS(name, sys);\n }\n if (typeof name !== 'function') {\n throw new Error('JS\u95A2\u6570\u53D6\u5F97\u3067\u5B9F\u884C\u3067\u304D\u307E\u305B\u3093\u3002');\n }\n // args\u304CArray\u3067\u306A\u3051\u308C\u3070Array\u306B\u5909\u63DB\u3059\u308B\n if (!(args instanceof Array)) {\n args = [args];\n }\n // \u5B9F\u884C\n // eslint-disable-next-line prefer-spread\n return name.apply(null, args);\n }\n },\n 'ASYNC': {\n type: 'func',\n josi: [],\n asyncFn: true,\n pure: true,\n fn: async function () {\n // empty\n },\n return_none: true\n },\n 'AWAIT\u5B9F\u884C': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n asyncFn: true,\n fn: async function (f, args, sys) {\n // name\u304C\u6587\u5B57\u5217\u306A\u3089eval\u3057\u3066\u95A2\u6570\u3092\u5F97\u308B\n if (typeof f === 'string') {\n f = sys.__findFunc(f, 'AWAIT\u5B9F\u884C');\n }\n if (!(f instanceof Function)) {\n throw new Error('\u300EAWAIT\u5B9F\u884C\u300F\u306E\u7B2C\u4E00\u5F15\u6570\u306F\u306A\u3067\u3057\u3053\u95A2\u6570\u540D\u304BFunction\u578B\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002');\n }\n // \u5B9F\u884C\n return await f(...args);\n }\n },\n 'JS\u30E1\u30BD\u30C3\u30C9\u5B9F\u884C': {\n type: 'func',\n josi: [['\u306E'], ['\u3092'], ['\u3067']],\n fn: function (obj, m, args, sys) {\n // obj\u304C\u6587\u5B57\u5217\u306A\u3089eval\u3057\u3066\u95A2\u6570\u3092\u5F97\u308B\n if (typeof obj === 'string') {\n obj = sys.__evalJS(obj, sys);\n }\n if (typeof obj !== 'object') {\n throw new Error('JS\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002');\n }\n // method \u3092\u6C42\u3081\u308B\n if (typeof m !== 'function') {\n m = obj[m];\n }\n // args\u304CArray\u3067\u306A\u3051\u308C\u3070Array\u306B\u5909\u63DB\u3059\u308B\n if (!(args instanceof Array)) {\n args = [args];\n }\n // \u5B9F\u884C\n return m.apply(obj, args);\n }\n },\n '\u30CA\u30C7\u30B7\u30B3': {\n type: 'func',\n josi: [['\u3092', '\u3067']],\n pure: false,\n asyncFn: true,\n fn: async function (code, sys) {\n const options = {\n resetEnv: false,\n resetAll: true,\n nakoGlobal: sys\n };\n const tmpLog = String(sys.__getSysVar('\u8868\u793A\u30ED\u30B0', ''));\n sys.__setSysVar('\u8868\u793A\u30ED\u30B0', '');\n await sys.__self.runAsync(code, sys.__modName, options);\n const outLog = String(sys.__getSysVar('\u8868\u793A\u30ED\u30B0'));\n sys.__setSysVar('\u8868\u793A\u30ED\u30B0', tmpLog + outLog);\n return outLog;\n }\n },\n '\u30CA\u30C7\u30B7\u30B3\u7D9A': {\n type: 'func',\n josi: [['\u3092', '\u3067']],\n pure: false,\n asyncFn: true,\n fn: async function (code, sys) {\n const options = {\n resetEnv: false,\n resetAll: false,\n nakoGlobal: sys.__self\n };\n const tmpLog = sys.__getSysVar('\u8868\u793A\u30ED\u30B0', '');\n sys.__setSysVar('\u8868\u793A\u30ED\u30B0', '');\n await sys.__self.runAsync(code, sys.__modName, options);\n const outLog = String(sys.__getSysVar('\u8868\u793A\u30ED\u30B0'));\n if (outLog) {\n sys.logger.trace(outLog);\n }\n sys.__setSysVar('\u8868\u793A\u30ED\u30B0', tmpLog + outLog);\n return outLog;\n }\n },\n '\u5B9F\u884C': {\n type: 'func',\n josi: [['\u3092', '\u306B', '\u3067']],\n pure: false,\n fn: function (f, sys) {\n // #938 \u306E\u898F\u5247\u306B\u5F93\u3063\u3066\u51E6\u7406\n // \u5F15\u6570\u304C\u95A2\u6570\u306A\u3089\u5B9F\u884C\n if (typeof f === 'function') {\n return f(sys);\n }\n // \u6587\u5B57\u5217\u306A\u3089\u95A2\u6570\u306B\u5909\u63DB\u3067\u304D\u308B\u304B\u5224\u5B9A\u3057\u3066\u5B9F\u884C\n if (typeof f === 'string') {\n const tf = sys.__findFunc(f, '\u5B9F\u884C');\n if (typeof tf === 'function') {\n return tf(sys);\n }\n }\n // \u305D\u308C\u4EE5\u5916\u306A\u3089\u305D\u306E\u307E\u307E\u5024\u3092\u8FD4\u3059\n return f;\n }\n },\n '\u5B9F\u884C\u6642\u9593\u8A08\u6E2C': {\n type: 'func',\n josi: [['\u306E']],\n pure: false,\n fn: function (f, sys) {\n if (typeof f === 'string') {\n f = sys.__findFunc(f, '\u5B9F\u884C\u6642\u9593\u8A08\u6E2C');\n }\n //\n if (performance && performance.now) {\n const t1 = performance.now();\n f(sys);\n const t2 = performance.now();\n return (t2 - t1);\n }\n else {\n const t1 = Date.now();\n f(sys);\n const t2 = Date.now();\n return (t2 - t1);\n }\n }\n },\n '\u7D42': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n // \u30C7\u30D0\u30C3\u30B0\u30E2\u30FC\u30C9\u3067\u306A\u3051\u308C\u3070\u4F8B\u5916\u3092\u6295\u3052\u308B\u3053\u3068\u3067\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u7D42\u4E86\u3055\u305B\u308B\n sys.__setSysVar('__forceClose', true);\n if (!sys.__getSysVar('__useDebug')) {\n throw new Error('__\u7D42\u308F\u308B__');\n }\n }\n },\n // @\u578B\u5909\u63DB\n '\u5909\u6570\u578B\u78BA\u8A8D': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return (typeof v);\n }\n },\n 'TYPEOF': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return (typeof v);\n }\n },\n '\u6587\u5B57\u5217\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return String(v);\n }\n },\n 'TOSTR': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return String(v);\n }\n },\n '\u6574\u6570\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return parseInt(v);\n }\n },\n 'TOINT': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return parseInt(v);\n }\n },\n '\u5B9F\u6570\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return parseFloat(v);\n }\n },\n 'TOFLOAT': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return parseFloat(v);\n }\n },\n 'INT': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return parseInt(v);\n }\n },\n 'FLOAT': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return parseFloat(v);\n }\n },\n 'NAN\u5224\u5B9A': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return isNaN(v);\n }\n },\n '\u975E\u6570\u5224\u5B9A': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n // https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN\n return Number.isNaN(v);\n }\n },\n 'HEX': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return parseInt(a).toString(16);\n }\n },\n '\u9032\u6570\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092', '\u306E'], ['']],\n pure: true,\n fn: function (v, n) {\n return parseInt(v).toString(n);\n }\n },\n '\u4E8C\u9032': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (v) {\n return parseInt(v).toString(2);\n }\n },\n '\u4E8C\u9032\u8868\u793A': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (v, sys) {\n const s = parseInt(v).toString(2);\n sys.__exec('\u8868\u793A', [s, sys]);\n }\n },\n 'RGB': {\n type: 'func',\n josi: [['\u3068'], ['\u306E'], ['\u3067']],\n pure: true,\n fn: function (r, g, b) {\n const z2 = (v) => {\n const v2 = '00' + (parseInt(String(v)).toString(16));\n return v2.substring(v2.length - 2, v2.length);\n };\n return '#' + z2(r) + z2(g) + z2(b);\n }\n },\n // @\u8AD6\u7406\u6F14\u7B97\n '\u8AD6\u7406OR': {\n type: 'func',\n josi: [['\u3068'], ['\u306E']],\n pure: true,\n fn: function (a, b) {\n return (a || b);\n }\n },\n '\u8AD6\u7406AND': {\n type: 'func',\n josi: [['\u3068'], ['\u306E']],\n pure: true,\n fn: function (a, b) {\n return (a && b);\n }\n },\n '\u8AD6\u7406NOT': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return (!v);\n }\n },\n // @\u30D3\u30C3\u30C8\u6F14\u7B97\n 'OR': {\n type: 'func',\n josi: [['\u3068'], ['\u306E']],\n pure: true,\n fn: function (a, b) {\n return (a | b);\n }\n },\n 'AND': {\n type: 'func',\n josi: [['\u3068'], ['\u306E']],\n pure: true,\n fn: function (a, b) {\n return (a & b);\n }\n },\n 'XOR': {\n type: 'func',\n josi: [['\u3068'], ['\u306E']],\n pure: true,\n fn: function (a, b) {\n return (a ^ b);\n }\n },\n 'NOT': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return (~v);\n }\n },\n 'SHIFT_L': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (v, a) {\n return (v << a);\n }\n },\n 'SHIFT_R': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (v, a) {\n return (v >> a);\n }\n },\n 'SHIFT_UR': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (v, a) {\n return (v >>> a);\n }\n },\n // @\u6587\u5B57\u5217\u51E6\u7406\n '\u6587\u5B57\u6570': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n if (!Array.from) {\n return String(v).length;\n }\n // Unicode\u306E\u30B5\u30ED\u30B2\u30FC\u30C8\u30DA\u30A2\u3092\u8003\u616E\u3057\u3066\u6587\u5B57\u6570\u3092\u30AB\u30A6\u30F3\u30C8 #1954 \u3092\u53C2\u7167\n return Array.from(v).length;\n }\n },\n '\u4F55\u6587\u5B57\u76EE': {\n type: 'func',\n josi: [['\u3067', '\u306E'], ['\u304C']],\n pure: true,\n fn: function (s, a) {\n // Unicode\u306E\u30B5\u30ED\u30B2\u30FC\u30C8\u30DA\u30A2\u3092\u8003\u616E\u3057\u3066\u3001\u6587\u5B57\u5217\u3092\u691C\u7D22 #1954 \u3092\u53C2\u7167\n // return String(s).indexOf(a) + 1 // \u30B5\u30ED\u30B2\u30FC\u30C8\u30DA\u30A2\u3092\u7121\u8996\u3057\u305F\u5834\u5408\n const strArray = Array.from(s);\n const searchArray = Array.from(a);\n for (let i = 0; i < strArray.length; i++) {\n if (strArray.slice(i, i + searchArray.length).join('') === searchArray.join('')) {\n return i + 1;\n }\n }\n return 0;\n }\n },\n 'CHR': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n // \u6570\u5024\u306E\u3068\u304D\n if (typeof v === 'number') {\n if (!String.fromCodePoint) {\n return String.fromCharCode(v);\n }\n return String.fromCodePoint(v);\n }\n // \u914D\u5217\u306E\u3068\u304D\n const res = [];\n for (const s of v) {\n if (!String.fromCodePoint) {\n res.push(String.fromCharCode(s));\n }\n res.push(String.fromCodePoint(s));\n }\n return res;\n }\n },\n 'ASC': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n if (typeof v === 'string') {\n if (!String.prototype.codePointAt) {\n return String(v).charCodeAt(0);\n }\n return String(v).codePointAt(0) || 0;\n }\n const res = [];\n for (const s of v) {\n if (!String.prototype.codePointAt) {\n res.push(String(s).charCodeAt(0));\n }\n res.push(String(s).codePointAt(0) || 0);\n }\n return res;\n }\n },\n '\u6587\u5B57\u633F\u5165': {\n type: 'func',\n josi: [['\u3067', '\u306E'], ['\u306B', '\u3078'], ['\u3092']],\n pure: true,\n fn: function (s, i, a) {\n if (i <= 0) {\n i = 1;\n }\n const strArray = Array.from(s);\n strArray.splice(i - 1, 0, a);\n return strArray.join('');\n }\n },\n '\u6587\u5B57\u691C\u7D22': {\n type: 'func',\n josi: [['\u3067', '\u306E'], ['\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (s, a, b) {\n // \u30B5\u30ED\u30B2\u30FC\u30C8\u30DA\u30A2\u3092\u8003\u616E\u3057\u3066\u6587\u5B57\u5217\u3092\u691C\u7D22\u3059\u308B\n // return String(s).indexOf(b, a - 1) + 1\n if (a <= 0) {\n a = 1;\n }\n const strArray = Array.from(s);\n const searchArray = Array.from(b);\n // Unicode\u5358\u4F4D\u3067\u691C\u7D22\n for (let i = a - 1; i < strArray.length; i++) {\n if (strArray.slice(i, i + searchArray.length).join('') === searchArray.join('')) {\n // \u5408\u81F4\u3057\u305F\n return i + 1;\n }\n }\n return 0;\n }\n },\n '\u8FFD\u52A0': {\n type: 'func',\n josi: [['\u3067', '\u306B', '\u3078'], ['\u3092']],\n pure: true,\n fn: function (s, a) {\n if (s instanceof Array) {\n s.push(a);\n return s;\n }\n return String(s) + String(a);\n }\n },\n '\u4E00\u884C\u8FFD\u52A0': {\n type: 'func',\n josi: [['\u3067', '\u306B', '\u3078'], ['\u3092']],\n pure: true,\n fn: function (s, a) {\n if (s instanceof Array) {\n s.push(a);\n return s;\n }\n return String(s) + String(a) + '\\n';\n }\n },\n '\u9023\u7D50': {\n type: 'func',\n josi: [['\u3068', '\u3092']],\n pure: true,\n isVariableJosi: true,\n fn: function (...a) {\n a.pop(); // NakoSystem\u3092\u53D6\u308A\u9664\u304F\n return a.join('');\n }\n },\n '\u6587\u5B57\u5217\u9023\u7D50': {\n type: 'func',\n josi: [['\u3068', '\u3092']],\n pure: true,\n isVariableJosi: true,\n fn: function (...a) {\n a.pop(); // NakoSystem\u3092\u53D6\u308A\u9664\u304F\n return a.join('');\n }\n },\n '\u6587\u5B57\u5217\u5206\u89E3': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u3067']],\n pure: true,\n fn: function (v) {\n if (!Array.from) {\n return String(v).split('');\n }\n return Array.from(v);\n }\n },\n '\u30EA\u30D5\u30EC\u30A4\u30F3': {\n type: 'func',\n josi: [['\u3092', '\u306E'], ['\u3067']],\n pure: true,\n fn: function (v, cnt) {\n let s = '';\n for (let i = 0; i < cnt; i++) {\n s += String(v);\n }\n return s;\n }\n },\n '\u51FA\u73FE\u56DE\u6570': {\n type: 'func',\n josi: [['\u3067'], ['\u306E']],\n pure: true,\n fn: function (s, a) {\n s = '' + s;\n a = '' + a;\n return s.split(a).length - 1;\n }\n },\n 'MID': {\n type: 'func',\n josi: [['\u3067', '\u306E'], ['\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (s, a, cnt, sys) {\n return sys.__exec('\u6587\u5B57\u629C\u51FA', [s, a, cnt]);\n }\n },\n '\u6587\u5B57\u629C\u51FA': {\n type: 'func',\n josi: [['\u3067', '\u306E'], ['\u304B\u3089'], ['\u3092', '']],\n pure: true,\n fn: function (s, a, cnt) {\n // \u5F15\u6570\u306E\u578B\u30C1\u30A7\u30C3\u30AF #1995\n if (typeof a === 'string') {\n a = parseInt(a);\n }\n if (typeof cnt === 'string') {\n cnt = parseInt(cnt);\n }\n // \u3082\u3057\u3001cnt\u304C0\u4EE5\u4E0B\u306A\u3089\u7A7A\u6587\u5B57\u3092\u8FD4\u3059\n if (cnt <= 0) {\n return '';\n }\n // \u30B5\u30ED\u30B2\u30FC\u30C8\u30DA\u30A2\u3092\u8003\u616E\u3057\u305F\u51E6\u7406\u3092\u884C\u3046\n const strArray = Array.from(s);\n // \u3082\u3057\u3001a\u306E\u5024\u304C0\u672A\u6E80\u306E\u6642\u306F\u5F8C\u308D\u304B\u3089a\u6587\u5B57\u76EE\u304B\u3089cnt\u6587\u5B57\u3092\u62BD\u51FA\n if (a < 0) {\n a = strArray.length + a + 1;\n if (a < 0) {\n a = 1;\n }\n }\n return strArray.slice(a - 1, a + cnt - 1).join('');\n }\n },\n 'LEFT': {\n type: 'func',\n josi: [['\u306E', '\u3067'], ['\u3060\u3051']],\n pure: true,\n fn: function (s, cnt, sys) {\n return sys.__exec('\u6587\u5B57\u5DE6\u90E8\u5206', [s, cnt]);\n }\n },\n '\u6587\u5B57\u5DE6\u90E8\u5206': {\n type: 'func',\n josi: [['\u306E', '\u3067'], ['\u3060\u3051', '']],\n pure: true,\n fn: function (s, cnt) {\n // return (String(s).substring(0, cnt))\n // \u30B5\u30ED\u30B2\u30FC\u30C8\u30DA\u30A2\u3092\u8003\u616E\n const strArray = Array.from(s);\n return strArray.slice(0, cnt).join('');\n }\n },\n 'RIGHT': {\n type: 'func',\n josi: [['\u306E', '\u3067'], ['\u3060\u3051']],\n pure: true,\n fn: function (s, cnt, sys) {\n return sys.__exec('\u6587\u5B57\u53F3\u90E8\u5206', [s, cnt]);\n }\n },\n '\u6587\u5B57\u53F3\u90E8\u5206': {\n type: 'func',\n josi: [['\u306E', '\u3067'], ['\u3060\u3051', '']],\n pure: true,\n fn: function (s, cnt) {\n // return (s.substring(s.length - cnt, s.length))\n // \u30B5\u30ED\u30B2\u30FC\u30C8\u30DA\u30A2\u3092\u8003\u616E\n const strArray = Array.from(s);\n let index = strArray.length - cnt;\n if (index < 0) {\n index = 0;\n }\n return strArray.slice(index, strArray.length).join('');\n }\n },\n '\u533A\u5207': {\n type: 'func',\n josi: [['\u306E', '\u3092'], ['\u3067']],\n pure: true,\n fn: function (s, a) {\n return ('' + s).split('' + a);\n }\n },\n '\u6587\u5B57\u5217\u5206\u5272': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (s, a) {\n s = '' + s;\n a = '' + a;\n const i = s.indexOf(a);\n if (i < 0) {\n return [s];\n }\n return [s.substring(0, i), s.substring(i + a.length)];\n }\n },\n '\u5207\u53D6': {\n type: 'func',\n josi: [['\u304B\u3089', '\u306E'], ['\u307E\u3067', '\u3092']],\n pure: true,\n fn: function (s, a, sys) {\n s = String(s);\n const i = s.indexOf(a);\n if (i < 0) {\n sys.__setSysVar('\u5BFE\u8C61', '');\n return s;\n }\n sys.__setSysVar('\u5BFE\u8C61', s.substring(i + a.length));\n return s.substring(0, i);\n }\n },\n '\u7BC4\u56F2\u5207\u53D6': {\n type: 'func',\n josi: [['\u3067', '\u306E'], ['\u304B\u3089'], ['\u307E\u3067', '\u3092']],\n pure: true,\n fn: function (s, a, b, sys) {\n s = String(s);\n let mae = '';\n let usiro = '';\n const i = s.indexOf(a);\n if (i < 0) {\n sys.__setSysVar('\u5BFE\u8C61', s);\n return '';\n }\n mae = s.substring(0, i);\n const subS = s.substring(i + a.length);\n const j = subS.indexOf(b);\n if (j < 0) {\n sys.__setSysVar('\u5BFE\u8C61', mae);\n return subS;\n }\n const result = subS.substring(0, j);\n usiro = subS.substring(j + b.length);\n sys.__setSysVar('\u5BFE\u8C61', mae + usiro);\n return result;\n }\n },\n '\u6587\u5B57\u524A\u9664': {\n type: 'func',\n josi: [['\u306E'], ['\u304B\u3089'], ['\u3060\u3051', '\u3092', '']],\n pure: true,\n fn: function (s, a, b) {\n // \u30B5\u30ED\u30B2\u30FC\u30C8\u30DA\u30A2\u3092\u8003\u616E\n const strArray = Array.from(s);\n strArray.splice(a - 1, b);\n return strArray.join('');\n }\n },\n '\u6587\u5B57\u59CB': {\n type: 'func',\n josi: [['\u304C'], ['\u3067', '\u304B\u3089']],\n pure: true,\n fn: function (s, a) {\n return s.startsWith(a);\n }\n },\n '\u6587\u5B57\u7D42': {\n type: 'func',\n josi: [['\u304C'], ['\u3067']],\n pure: true,\n fn: function (s, a) {\n return s.endsWith(a);\n }\n },\n '\u51FA\u73FE': {\n type: 'func',\n josi: [['\u306B', '\u3067'], ['\u304C']],\n pure: true,\n fn: function (s, a) {\n if (typeof (s) === 'string') {\n return s.includes(a);\n }\n if (s instanceof Array) {\n return s.includes(a);\n }\n const ss = String(s);\n return ss.includes(a);\n }\n },\n // @\u7F6E\u63DB\u30FB\u30C8\u30EA\u30E0\n '\u7F6E\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3067'], ['\u3092', '\u304B\u3089'], ['\u306B', '\u3078']],\n pure: true,\n fn: function (s, a, b) {\n return String(s).split(a).join(b);\n }\n },\n '\u5358\u7F6E\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3067'], ['\u3092'], ['\u306B', '\u3078']],\n pure: true,\n fn: function (s, a, b) {\n // replace\u306F\u6700\u521D\u306E\u4E00\u5EA6\u3060\u3051\u7F6E\u63DB\u3059\u308B\n return String(s).replace(a, b);\n }\n },\n '\u30C8\u30EA\u30E0': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).replace(/^\\s+/, '').replace(/\\s+$/, '');\n }\n },\n '\u7A7A\u767D\u9664\u53BB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).replace(/^\\s+/, '').replace(/\\s+$/, '');\n }\n },\n '\u53F3\u30C8\u30EA\u30E0': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).replace(/\\s+$/, '');\n }\n },\n '\u5DE6\u30C8\u30EA\u30E0': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).replace(/^\\s+/, '');\n }\n },\n '\u672B\u5C3E\u7A7A\u767D\u9664\u53BB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).replace(/\\s+$/, '');\n }\n },\n // @\u6587\u5B57\u5909\u63DB\n '\u5927\u6587\u5B57\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).toUpperCase();\n }\n },\n '\u5C0F\u6587\u5B57\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).toLowerCase();\n }\n },\n '\u5E73\u4EEE\u540D\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n const kanaToHira = (str) => {\n return String(str).replace(/[\\u30a1-\\u30f6]/g, function (m) {\n const chr = m.charCodeAt(0) - 0x60;\n return String.fromCharCode(chr);\n });\n };\n return kanaToHira('' + s);\n }\n },\n '\u30AB\u30BF\u30AB\u30CA\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n const hiraToKana = (str) => {\n return String(str).replace(/[\\u3041-\\u3096]/g, function (m) {\n const chr = m.charCodeAt(0) + 0x60;\n return String.fromCharCode(chr);\n });\n };\n return hiraToKana('' + s);\n }\n },\n '\u82F1\u6570\u5168\u89D2\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).replace(/[A-Za-z0-9]/g, function (v) {\n return String.fromCharCode(v.charCodeAt(0) + 0xFEE0);\n });\n }\n },\n '\u82F1\u6570\u534A\u89D2\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).replace(/[\uFF21-\uFF3A\uFF41-\uFF5A\uFF10-\uFF19]/g, function (v) {\n return String.fromCharCode(v.charCodeAt(0) - 0xFEE0);\n });\n }\n },\n '\u82F1\u6570\u8A18\u53F7\u5168\u89D2\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).replace(/[\\x20-\\x7E]/g, function (v) {\n if (v === ' ') {\n return '\u3000';\n } // \u534A\u89D2\u30B9\u30DA\u30FC\u30B9(0x20)\u3092\u5168\u89D2\u30B9\u30DA\u30FC\u30B9(U+3000)\u306B\n return String.fromCharCode(v.charCodeAt(0) + 0xFEE0);\n });\n }\n },\n '\u82F1\u6570\u8A18\u53F7\u534A\u89D2\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).replace(/[\\u3000\\uFF00-\\uFF5F]/g, function (v) {\n if (v === '\u3000') {\n return ' ';\n } // \u5168\u89D2\u30B9\u30DA\u30FC\u30B9(U+3000)\u3092\u534A\u89D2\u30B9\u30DA\u30FC\u30B9(U+0020)\n return String.fromCharCode(v.charCodeAt(0) - 0xFEE0);\n });\n }\n },\n '\u30AB\u30BF\u30AB\u30CA\u5168\u89D2\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s, sys) {\n // \u534A\u89D2\u30AB\u30BF\u30AB\u30CA\n const zen1 = sys.__getSysVar('\u5168\u89D2\u30AB\u30CA\u4E00\u89A7');\n const han1 = sys.__getSysVar('\u534A\u89D2\u30AB\u30CA\u4E00\u89A7');\n const zen2 = sys.__getSysVar('\u5168\u89D2\u30AB\u30CA\u6FC1\u97F3\u4E00\u89A7');\n const han2 = sys.__getSysVar('\u534A\u89D2\u30AB\u30CA\u6FC1\u97F3\u4E00\u89A7');\n let str = '';\n let i = 0;\n while (i < s.length) {\n // \u6FC1\u70B9\u306E\u5909\u63DB\n const c2 = s.substring(i, i + 2);\n const n2 = han2.indexOf(c2);\n if (n2 >= 0) {\n str += zen2.charAt(n2 / 2);\n i += 2;\n continue;\n }\n // \u6FC1\u70B9\u4EE5\u5916\u306E\u5909\u63DB\n const c = s.charAt(i);\n const n = han1.indexOf(c);\n if (n >= 0) {\n str += zen1.charAt(n);\n i++;\n continue;\n }\n str += c;\n i++;\n }\n return str;\n }\n },\n '\u30AB\u30BF\u30AB\u30CA\u534A\u89D2\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s, sys) {\n // \u534A\u89D2\u30AB\u30BF\u30AB\u30CA\n const zen1 = sys.__getSysVar('\u5168\u89D2\u30AB\u30CA\u4E00\u89A7');\n const han1 = sys.__getSysVar('\u534A\u89D2\u30AB\u30CA\u4E00\u89A7');\n const zen2 = sys.__getSysVar('\u5168\u89D2\u30AB\u30CA\u6FC1\u97F3\u4E00\u89A7');\n const han2 = sys.__getSysVar('\u534A\u89D2\u30AB\u30CA\u6FC1\u97F3\u4E00\u89A7');\n return s.split('').map((c) => {\n const i = zen1.indexOf(c);\n if (i >= 0) {\n return han1.charAt(i);\n }\n const j = zen2.indexOf(c);\n if (j >= 0) {\n return han2.substring(j * 2, j * 2 + 2);\n }\n return c;\n }).join('');\n }\n },\n '\u5168\u89D2\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: false,\n fn: function (s, sys) {\n let result = s;\n result = sys.__exec('\u30AB\u30BF\u30AB\u30CA\u5168\u89D2\u5909\u63DB', [result, sys]);\n result = sys.__exec('\u82F1\u6570\u8A18\u53F7\u5168\u89D2\u5909\u63DB', [result, sys]);\n return result;\n }\n },\n '\u534A\u89D2\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: false,\n fn: function (s, sys) {\n let result = s;\n result = sys.__exec('\u30AB\u30BF\u30AB\u30CA\u534A\u89D2\u5909\u63DB', [result, sys]);\n result = sys.__exec('\u82F1\u6570\u8A18\u53F7\u534A\u89D2\u5909\u63DB', [result, sys]);\n return result;\n }\n },\n '\u5168\u89D2\u30AB\u30CA\u4E00\u89A7': { type: 'const', value: '\u30A2\u30A4\u30A6\u30A8\u30AA\u30AB\u30AD\u30AF\u30B1\u30B3\u30B5\u30B7\u30B9\u30BB\u30BD\u30BF\u30C1\u30C4\u30C6\u30C8\u30CA\u30CB\u30CC\u30CD\u30CE\u30CF\u30D2\u30D5\u30D8\u30DB\u30DE\u30DF\u30E0\u30E1\u30E2\u30E4\u30E6\u30E8\u30E9\u30EA\u30EB\u30EC\u30ED\u30EF\u30F2\u30F3\u30A1\u30A3\u30A5\u30A7\u30A9\u30E3\u30E5\u30E7\u30C3\u3001\u3002\u30FC\u300C\u300D' }, // @\u305C\u3093\u304B\u304F\u304B\u306A\u3044\u3061\u3089\u3093\n '\u5168\u89D2\u30AB\u30CA\u6FC1\u97F3\u4E00\u89A7': { type: 'const', value: '\u30AC\u30AE\u30B0\u30B2\u30B4\u30B6\u30B8\u30BA\u30BC\u30BE\u30C0\u30C2\u30C5\u30C7\u30C9\u30D0\u30D3\u30D6\u30D9\u30DC\u30D1\u30D4\u30D7\u30DA\u30DD' }, // @\u305C\u3093\u304B\u304F\u304B\u306A\u3060\u304F\u304A\u3093\u3044\u3061\u3089\u3093\n '\u534A\u89D2\u30AB\u30CA\u4E00\u89A7': { type: 'const', value: '\uFF71\uFF72\uFF73\uFF74\uFF75\uFF76\uFF77\uFF78\uFF79\uFF7A\uFF7B\uFF7C\uFF7D\uFF7E\uFF7F\uFF80\uFF81\uFF82\uFF83\uFF84\uFF85\uFF86\uFF87\uFF88\uFF89\uFF8A\uFF8B\uFF8C\uFF8D\uFF8E\uFF8F\uFF90\uFF91\uFF92\uFF93\uFF94\uFF95\uFF96\uFF97\uFF98\uFF99\uFF9A\uFF9B\uFF9C\uFF66\uFF9D\uFF67\uFF68\uFF69\uFF6A\uFF6B\uFF6C\uFF6D\uFF6E\uFF6F\uFF64\uFF61\uFF70\uFF62\uFF63\uFF9E\uFF9F' }, // @\u306F\u3093\u304B\u304F\u304B\u306A\u3044\u3061\u3089\u3093\n '\u534A\u89D2\u30AB\u30CA\u6FC1\u97F3\u4E00\u89A7': { type: 'const', value: '\uFF76\uFF9E\uFF77\uFF9E\uFF78\uFF9E\uFF79\uFF9E\uFF7A\uFF9E\uFF7B\uFF9E\uFF7C\uFF9E\uFF7D\uFF9E\uFF7E\uFF9E\uFF7F\uFF9E\uFF80\uFF9E\uFF81\uFF9E\uFF82\uFF9E\uFF83\uFF9E\uFF84\uFF9E\uFF8A\uFF9E\uFF8B\uFF9E\uFF8C\uFF9E\uFF8D\uFF9E\uFF8E\uFF9E\uFF8A\uFF9F\uFF8B\uFF9F\uFF8C\uFF9F\uFF8D\uFF9F\uFF8E\uFF9F' }, // @\u306F\u3093\u304B\u304F\u304B\u306A\u3060\u304F\u304A\u3093\u3044\u3061\u3089\u3093\n // @JSON\n 'JSON\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (v) {\n return JSON.stringify(v);\n }\n },\n 'JSON\u53D6\u5F97': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (v) {\n return JSON.parse(v);\n }\n },\n 'JSON\u30A8\u30F3\u30B3\u30FC\u30C9': {\n type: 'func',\n josi: [['\u3092', '\u306E']],\n pure: true,\n fn: function (v) {\n return JSON.stringify(v);\n }\n },\n 'JSON\u30A8\u30F3\u30B3\u30FC\u30C9\u6574\u5F62': {\n type: 'func',\n josi: [['\u3092', '\u306E']],\n pure: true,\n fn: function (v) {\n return JSON.stringify(v, null, 2);\n }\n },\n 'JSON\u30C7\u30B3\u30FC\u30C9': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (s) {\n return JSON.parse(s);\n }\n },\n 'JSON_E': {\n type: 'func',\n josi: [['\u3092', '\u306E']],\n pure: true,\n fn: function (v) {\n return JSON.stringify(v);\n }\n },\n 'JSON_ES': {\n type: 'func',\n josi: [['\u3092', '\u306E']],\n pure: true,\n fn: function (v) {\n return JSON.stringify(v, null, 2);\n }\n },\n 'JSON_D': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (s) {\n return JSON.parse(s);\n }\n },\n // @\u6B63\u898F\u8868\u73FE\n '\u6B63\u898F\u8868\u73FE\u30DE\u30C3\u30C1': {\n type: 'func',\n josi: [['\u3092', '\u304C'], ['\u3067', '\u306B']],\n pure: true,\n fn: function (a, b, sys) {\n let re;\n const f = ('' + b).match(/^\\/(.+)\\/([a-zA-Z]*)$/);\n // \u30D1\u30BF\u30FC\u30F3\u304C\u306A\u3044\u5834\u5408\n if (f === null) {\n re = new RegExp(b, 'g');\n }\n else {\n re = new RegExp(f[1], f[2]);\n }\n const sa = sys.__getSysVar('\u62BD\u51FA\u6587\u5B57\u5217');\n sa.splice(0, sa.length); // clear\n const m = String(a).match(re);\n let result = m;\n if (re.global) {\n // no groups\n }\n else if (m) {\n // has group?\n if (m.length > 0) {\n result = m[0];\n for (let i = 1; i < m.length; i++) {\n sa[i - 1] = m[i];\n }\n }\n }\n return result;\n }\n },\n '\u6B63\u898F\u8868\u73FE\u62BD\u51FA': {\n type: 'func',\n josi: [['\u304B\u3089', '\u3092'], ['\u3067']],\n pure: true,\n fn: function (a, b, sys) {\n let pattern = '' + b;\n let flags = 'g';\n const f = pattern.match(/^\\/(.+)\\/([a-zA-Z]*)$/);\n if (f) {\n pattern = f[1];\n flags = f[2] || '';\n }\n if (!flags.includes('g'))\n flags += 'g';\n const re = new RegExp(pattern, flags);\n const sa = sys.__getSysVar('\u62BD\u51FA\u6587\u5B57\u5217');\n sa.splice(0, sa.length); // clear\n const result = []; // \u4E00\u6B21\u5143\u914D\u5217\n const caps2d = []; // \u4E8C\u6B21\u5143\u914D\u5217\uFF08sa \u306B\u5165\u308C\u308B\uFF09\n for (const m of String(a).matchAll(re)) {\n // \u2605 \u540D\u524D\u4ED8\u304D\u30AD\u30E3\u30D7\u30C1\u30E3\u304C\u3042\u308B\u5834\u5408\n if (m.groups && Object.keys(m.groups).length > 0) {\n const row = {};\n for (const [key, val] of Object.entries(m.groups)) {\n row[key] = val;\n result.push(val); // result \u306F\u5E73\u5766\u5316\n }\n caps2d.push(row);\n continue;\n }\n // \u2605 \u901A\u5E38\u30AD\u30E3\u30D7\u30C1\u30E3\uFF08\u5F93\u6765\u3069\u304A\u308A\uFF09\n let caps = [...m].slice(1);\n if (caps.length === 0) {\n caps = [m[0]]; //\u30AD\u30E3\u30D7\u30C1\u30E3\u304C\u306A\u3044\u5834\u5408\n }\n caps2d.push(caps);\n result.push(...caps);\n }\n // \u30DE\u30C3\u30C1\u306A\u3057 \u2192 \u4E21\u65B9\u7A7A\u306E\u307E\u307E\n if (caps2d.length === 0) {\n return result;\n }\n // sa \u306B\u4E8C\u6B21\u5143\u914D\u5217\u3092\u30B3\u30D4\u30FC\n for (const row of caps2d) {\n sa.push(row);\n }\n return result;\n }\n },\n '\u62BD\u51FA\u6587\u5B57\u5217': { type: 'const', value: [] }, // @\u3061\u3085\u3046\u3057\u3085\u3064\u3082\u3058\u308C\u3064\n '\u6B63\u898F\u8868\u73FE\u7F6E\u63DB': {\n type: 'func',\n josi: [['\u306E'], ['\u3092', '\u304B\u3089'], ['\u3067', '\u306B', '\u3078']],\n pure: true,\n fn: function (s, a, b) {\n let re;\n const f = a.match(/^\\/(.+)\\/([a-zA-Z]*)/);\n if (f === null) {\n re = new RegExp(a, 'g');\n }\n else {\n re = new RegExp(f[1], f[2]);\n }\n return String(s).replace(re, b);\n }\n },\n '\u6B63\u898F\u8868\u73FE\u533A\u5207': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (s, a) {\n let re;\n const f = a.match(/^\\/(.+)\\/([a-zA-Z]*)/);\n if (f === null) {\n re = new RegExp(a, 'g');\n }\n else {\n re = new RegExp(f[1], f[2]);\n }\n return String(s).split(re);\n }\n },\n // @\u6307\u5B9A\u5F62\u5F0F\n '\u901A\u8CA8\u5F62\u5F0F': {\n type: 'func',\n josi: [['\u3092', '\u306E']],\n pure: true,\n fn: function (v) {\n return String(v).replace(/(?<!\\.\\d*?)(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1,');\n }\n },\n '\u30BC\u30ED\u57CB': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (v, a) {\n v = String(v);\n let z = '0';\n for (let i = 0; i < a; i++) {\n z += '0';\n }\n a = parseInt(a);\n if (a < v.length) {\n a = v.length;\n }\n const s = z + String(v);\n return s.substring(s.length - a, s.length);\n }\n },\n '\u7A7A\u767D\u57CB': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (v, a) {\n v = String(v);\n let z = ' ';\n for (let i = 0; i < a; i++) {\n z += ' ';\n }\n a = parseInt(a);\n if (a < v.length) {\n a = v.length;\n }\n const s = z + String(v);\n return s.substring(s.length - a, s.length);\n }\n },\n // @\u6587\u5B57\u7A2E\u985E\n '\u304B\u306A\u304B\u5224\u5B9A': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304C']],\n pure: true,\n fn: function (s) {\n const c = String(s).charCodeAt(0);\n return (c >= 0x3041 && c <= 0x309F);\n }\n },\n '\u30AB\u30BF\u30AB\u30CA\u5224\u5B9A': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304C']],\n pure: true,\n fn: function (s) {\n const c = String(s).charCodeAt(0);\n return (c >= 0x30A1 && c <= 0x30FA);\n }\n },\n '\u6570\u5B57\u5224\u5B9A': {\n type: 'func',\n josi: [['\u3092', '\u304C']],\n pure: true,\n fn: function (s) {\n const c = String(s).charAt(0);\n return ((c >= '0' && c <= '9') || (c >= '\uFF10' && c <= '\uFF19'));\n }\n },\n '\u6570\u5217\u5224\u5B9A': {\n type: 'func',\n josi: [['\u3092', '\u304C']],\n pure: true,\n fn: function (s) {\n const checkerRE = /^[+\\-\uFF0B\uFF0D]?([0-9\uFF10-\uFF19]*)(([.\uFF0E][0-9\uFF10-\uFF19]+)?|([.\uFF0E][0-9\uFF10-\uFF19]+[eE\uFF45\uFF25][+\\-\uFF0B\uFF0D]?[0-9\uFF10-\uFF19]+)?)$/;\n if (s === '') {\n return false;\n } // \u7A7A\u6587\u5B57\u5217\u306Ffalse\n return String(s).match(checkerRE) !== null;\n }\n },\n // @\u914D\u5217\u64CD\u4F5C\n '\u914D\u5217\u7D50\u5408': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (a, s) {\n // \u914D\u5217\u306A\u3089OK\n if (a instanceof Array) {\n return a.join('' + s);\n }\n const a2 = String(a).split('\\n'); // \u914D\u5217\u3067\u306A\u3051\u308C\u3070\u7121\u7406\u77E2\u7406\u6539\u884C\u3067\u533A\u5207\u3063\u3066\u307F\u308B\n return a2.join('' + s);\n }\n },\n '\u914D\u5217\u53EA\u7D50\u5408': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (a) {\n if (a instanceof Array) {\n return a.join('');\n }\n const a2 = String(a).split('\\n'); // \u914D\u5217\u3067\u306A\u3051\u308C\u3070\u7121\u7406\u77E2\u7406\u6539\u884C\u3067\u533A\u5207\u3063\u3066\u307F\u308B\n return a2.join('');\n }\n },\n '\u914D\u5217\u691C\u7D22': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (a, s) {\n if (a instanceof Array) {\n return a.indexOf(s);\n } // \u914D\u5217\u306A\u3089OK\n return -1;\n }\n },\n '\u914D\u5217\u8981\u7D20\u6570': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n if (a instanceof Array) {\n return a.length;\n } // \u914D\u5217\u306A\u3089OK\n if (a instanceof Object) {\n return Object.keys(a).length;\n } // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n if (typeof a === 'string') {\n return String(a).length;\n } // \u6587\u5B57\u5217\n return 1;\n }\n },\n '\u8981\u7D20\u6570': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a, sys) {\n return sys.__exec('\u914D\u5217\u8981\u7D20\u6570', [a]);\n }\n },\n 'LEN': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a, sys) {\n return sys.__exec('\u914D\u5217\u8981\u7D20\u6570', [a]);\n }\n },\n '\u914D\u5217\u633F\u5165': {\n type: 'func',\n josi: [['\u306E'], ['\u306B', '\u3078'], ['\u3092']],\n pure: true,\n fn: function (a, i, s) {\n if (a instanceof Array) {\n return a.splice(i, 0, s);\n } // \u914D\u5217\u306A\u3089OK\n throw new Error('\u300E\u914D\u5217\u633F\u5165\u300F\u3067\u914D\u5217\u4EE5\u5916\u306E\u8981\u7D20\u3078\u306E\u633F\u5165\u3002');\n }\n },\n '\u914D\u5217\u4E00\u62EC\u633F\u5165': {\n type: 'func',\n josi: [['\u306E'], ['\u306B', '\u3078'], ['\u3092']],\n pure: true,\n fn: function (a, i, b) {\n if (a instanceof Array && b instanceof Array) { // \u914D\u5217\u306A\u3089OK\n for (let j = 0; j < b.length; j++) {\n a.splice(i + j, 0, b[j]);\n }\n return a;\n }\n throw new Error('\u300E\u914D\u5217\u4E00\u62EC\u633F\u5165\u300F\u3067\u914D\u5217\u4EE5\u5916\u306E\u8981\u7D20\u3078\u306E\u633F\u5165\u3002');\n }\n },\n '\u914D\u5217\u30BD\u30FC\u30C8': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (a) {\n if (a instanceof Array) {\n return a.sort();\n } // \u914D\u5217\u306A\u3089OK\n throw new Error('\u300E\u914D\u5217\u30BD\u30FC\u30C8\u300F\u3067\u914D\u5217\u4EE5\u5916\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u914D\u5217\u6570\u5024\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (a) {\n // \u914D\u5217\u306A\u3089OK\n if (a instanceof Array) {\n for (let i = 0; i < a.length; i++) {\n a[i] = parseFloat(a[i]);\n }\n return a;\n }\n throw new Error('\u300E\u914D\u5217\u6570\u5024\u5909\u63DB\u300F\u3067\u914D\u5217\u4EE5\u5916\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u914D\u5217\u6570\u5024\u30BD\u30FC\u30C8': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (a) {\n // \u914D\u5217\u306A\u3089OK\n if (a instanceof Array) {\n return a.sort((a, b) => {\n return parseFloat(a) - parseFloat(b);\n });\n }\n throw new Error('\u300E\u914D\u5217\u6570\u5024\u30BD\u30FC\u30C8\u300F\u3067\u914D\u5217\u4EE5\u5916\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u914D\u5217\u30AB\u30B9\u30BF\u30E0\u30BD\u30FC\u30C8': {\n type: 'func',\n josi: [['\u3067'], ['\u306E', '\u3092']],\n pure: false,\n fn: function (f, a, sys) {\n let ufunc = f;\n if (typeof f === 'string') {\n ufunc = sys.__findFunc(f, '\u914D\u5217\u30AB\u30B9\u30BF\u30E0\u30BD\u30FC\u30C8');\n }\n if (a instanceof Array) {\n return a.sort(ufunc);\n }\n throw new Error('\u300E\u914D\u5217\u30AB\u30B9\u30BF\u30E0\u30BD\u30FC\u30C8\u300F\u3067\u914D\u5217\u4EE5\u5916\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u914D\u5217\u9006\u9806': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (a) {\n if (a instanceof Array) {\n return a.reverse();\n } // \u914D\u5217\u306A\u3089OK\n throw new Error('\u300E\u914D\u5217\u30BD\u30FC\u30C8\u300F\u3067\u914D\u5217\u4EE5\u5916\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u914D\u5217\u30B7\u30E3\u30C3\u30D5\u30EB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (a) {\n if (a instanceof Array) { // \u914D\u5217\u306A\u3089OK\n for (let i = a.length - 1; i > 0; i--) {\n const r = Math.floor(Math.random() * (i + 1));\n const tmp = a[i];\n a[i] = a[r];\n a[r] = tmp;\n }\n return a;\n }\n throw new Error('\u300E\u914D\u5217\u30B7\u30E3\u30C3\u30D5\u30EB\u300F\u3067\u914D\u5217\u4EE5\u5916\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u914D\u5217\u524A\u9664': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (a, i, sys) {\n return sys.__exec('\u914D\u5217\u5207\u53D6', [a, i, sys]);\n }\n },\n '\u914D\u5217\u5207\u53D6': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (a, i) {\n // \u914D\u5217\u5909\u6570\u306E\u3068\u304D\n if (a instanceof Array) {\n if (typeof i === 'number') {\n const b = a.splice(i, 1);\n if (b instanceof Array) {\n return b[0];\n } // \u5207\u308A\u53D6\u3063\u305F\u623B\u308A\u5024\u306F\u5FC5\u305AArray\u306B\u306A\u308B\u306E\u3067\u3002\n }\n if (typeof i === 'object' && typeof i['\u5148\u982D'] === 'number') {\n const idx = i['\u5148\u982D'];\n const cnt = i['\u672B\u5C3E'] - i['\u5148\u982D'] + 1;\n return a.splice(idx, cnt);\n }\n return null;\n }\n // \u8F9E\u66F8\u578B\u5909\u6570\u306E\u3068\u304D\n if (a instanceof Object && typeof (i) === 'string') { // \u8F9E\u66F8\u578B\u5909\u6570\u3082\u8A31\u5BB9\n if (a[i]) {\n const old = a[i];\n delete a[i];\n return old;\n }\n return undefined;\n }\n throw new Error('\u300E\u914D\u5217\u5207\u53D6\u300F\u3067\u914D\u5217\u4EE5\u5916\u3092\u6307\u5B9A\u3002');\n }\n },\n '\u914D\u5217\u53D6\u51FA': {\n type: 'func',\n josi: [['\u306E'], ['\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (a, i, cnt) {\n if (a instanceof Array) {\n return a.splice(i, cnt);\n }\n throw new Error('\u300E\u914D\u5217\u53D6\u51FA\u300F\u3067\u914D\u5217\u4EE5\u5916\u3092\u6307\u5B9A\u3002');\n }\n },\n '\u914D\u5217\u30DD\u30C3\u30D7': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (a) {\n if (a instanceof Array) {\n return a.pop();\n }\n throw new Error('\u300E\u914D\u5217\u30DD\u30C3\u30D7\u300F\u3067\u914D\u5217\u4EE5\u5916\u306E\u51E6\u7406\u3002');\n }\n },\n '\u914D\u5217\u30D7\u30C3\u30B7\u30E5': {\n type: 'func',\n josi: [['\u306B', '\u3078'], ['\u3092']],\n pure: true,\n fn: function (a, b, sys) {\n return sys.__exec('\u914D\u5217\u8FFD\u52A0', [a, b, sys]);\n }\n },\n '\u914D\u5217\u8FFD\u52A0': {\n type: 'func',\n josi: [['\u306B', '\u3078'], ['\u3092']],\n pure: true,\n fn: function (a, b) {\n if (a instanceof Array) { // \u914D\u5217\u306A\u3089OK\n a.push(b);\n return a;\n }\n throw new Error('\u300E\u914D\u5217\u8FFD\u52A0\u300F\u3067\u914D\u5217\u4EE5\u5916\u306E\u51E6\u7406\u3002');\n }\n },\n '\u914D\u5217\u8907\u88FD': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (a) {\n return JSON.parse(JSON.stringify(a));\n }\n },\n '\u914D\u5217\u7BC4\u56F2\u30B3\u30D4\u30FC': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (a, i) {\n if (!Array.isArray(a)) {\n throw new Error('\u300E\u914D\u5217\u7BC4\u56F2\u30B3\u30D4\u30FC\u300F\u3067\u914D\u5217\u4EE5\u5916\u306E\u5024\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n if (typeof i === 'number') {\n if (typeof a[i] === 'object') {\n return JSON.parse(JSON.stringify(a[i]));\n }\n return a[i];\n }\n // \u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u3068\u304D\n if (typeof i === 'object' && typeof i['\u5148\u982D'] === 'number') {\n const start = i['\u5148\u982D'];\n const last = Number(i['\u672B\u5C3E']) + 1;\n return JSON.parse(JSON.stringify(a.slice(start, last)));\n }\n return undefined;\n }\n },\n '\u53C2\u7167': {\n type: 'func',\n josi: [['\u304B\u3089', '\u306E'], ['\u3092']],\n pure: true,\n fn: function (a, i, sys) {\n // \u6587\u5B57\u5217\u306E\u3068\u304D\n if (typeof a === 'string') {\n if (typeof i === 'number') {\n return a.charAt(i);\n }\n // \u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u3068\u304D\n if (typeof i === 'object' && typeof i['\u5148\u982D'] === 'number') {\n const start = i['\u5148\u982D'];\n const last = Number(i['\u672B\u5C3E']) + 1;\n return a.substring(start, last);\n }\n throw new Error(`\u300E\u53C2\u7167\u300F\u3067\u6587\u5B57\u5217\u578B\u306E\u7BC4\u56F2\u6307\u5B9A(${JSON.stringify(i)})\u304C\u4E0D\u6B63\u3067\u3059\u3002`);\n }\n // \u914D\u5217\u578B\u306E\u3068\u304D\n if (Array.isArray(a)) {\n if (typeof i === 'number') {\n return a[i];\n }\n // \u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u3068\u304D\n if (typeof i === 'object' && typeof i['\u5148\u982D'] === 'number') {\n const start = i['\u5148\u982D'];\n const last = Number(i['\u672B\u5C3E']) + 1;\n return a.slice(start, last);\n }\n }\n // \u8F9E\u66F8\u578B\u306E\u3068\u304D\n if (typeof a === 'object') {\n return a[i];\n }\n throw new Error('\u300E\u53C2\u7167\u300F\u3067\u6587\u5B57\u5217/\u914D\u5217/\u8F9E\u66F8\u578B\u4EE5\u5916\u306E\u5024\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u914D\u5217\u53C2\u7167': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (a, i, sys) {\n return sys.__exec('\u53C2\u7167', [a, i, sys]);\n }\n },\n '\u914D\u5217\u8DB3': {\n type: 'func',\n josi: [['\u306B', '\u3078', '\u3068'], ['\u3092']],\n pure: true,\n fn: function (a, b) {\n if (a instanceof Array) {\n return a.concat(b);\n }\n return JSON.parse(JSON.stringify(a));\n }\n },\n '\u914D\u5217\u6700\u5927\u5024': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return a.reduce((x, y) => Math.max(x, y));\n }\n },\n '\u914D\u5217\u6700\u5C0F\u5024': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return a.reduce((x, y) => Math.min(x, y));\n }\n },\n '\u914D\u5217\u5408\u8A08': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n if (a instanceof Array) {\n let v = 0;\n a.forEach((n) => {\n const nn = parseFloat(n);\n if (isNaN(nn)) {\n return;\n }\n v += nn;\n });\n return v;\n }\n throw new Error('\u300E\u914D\u5217\u5408\u8A08\u300F\u3067\u914D\u5217\u5909\u6570\u4EE5\u5916\u306E\u5024\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u914D\u5217\u5165\u66FF': {\n type: 'func',\n josi: [['\u306E'], ['\u3068'], ['\u3092']],\n pure: true,\n fn: function (a, i, j) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u914D\u5217\u5165\u66FF\u300F\u306E\u7B2C1\u5F15\u6570\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002');\n }\n const tmp = a[i];\n a[i] = a[j];\n a[j] = tmp;\n return a;\n }\n },\n '\u914D\u5217\u9023\u756A\u4F5C\u6210': {\n type: 'func',\n josi: [['\u304B\u3089'], ['\u307E\u3067\u306E', '\u307E\u3067', '\u306E']],\n pure: true,\n fn: function (a, b) {\n const result = [];\n for (let i = a; i <= b; i++) {\n result.push(i);\n }\n return result;\n }\n },\n '\u914D\u5217\u8981\u7D20\u4F5C\u6210': {\n type: 'func',\n josi: [['\u3092'], ['\u3060\u3051', '\u3067']],\n pure: true,\n fn: function (a, b) {\n // value \u304C\u914D\u5217\u3084\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u3082\u6DF1\u304F\u30B3\u30D4\u30FC\u3059\u308B\u30D8\u30EB\u30D1\u30FC\n const cloneValue = (v) => {\n if (Array.isArray(v)) {\n return (v).map(item => cloneValue(item));\n }\n if (v instanceof Date) {\n return new Date(v.getTime());\n }\n if (typeof v === 'object' && v !== null) {\n return JSON.parse(JSON.stringify(v));\n }\n return v;\n };\n // \u518D\u5E30\u7684\u306B\u914D\u5217\u3092\u751F\u6210\u3059\u308B\u95A2\u6570\n const full = function (value, shape) {\n // 1\u6B21\u5143\uFF1Ashape \u304C\u6570\u5024\n if (!Array.isArray(shape)) {\n return Array.from({ length: shape }, () => cloneValue(value));\n }\n // 1\u6B21\u5143\uFF1Ashape \u304C\u6570\u5024\n if (Array.isArray(shape) && shape.length === 1) {\n return Array.from({ length: shape[0] }, () => cloneValue(value));\n }\n // \u591A\u6B21\u5143\uFF1Ashape \u304C\u914D\u5217\n const [first, ...rest] = shape;\n return Array.from({ length: first }, () => full(cloneValue(value), rest));\n };\n return full(a, b);\n }\n },\n '\u914D\u5217\u95A2\u6570\u9069\u7528': {\n type: 'func',\n josi: [['\u3092'], ['\u3078', '\u306B']],\n pure: true,\n fn: function (f, a, sys) {\n let ufunc = f;\n if (typeof f === 'string') {\n ufunc = sys.__findFunc(f, '\u914D\u5217\u95A2\u6570\u9069\u7528');\n }\n const result = [];\n for (const e of a) {\n result.push(ufunc(e));\n }\n return result;\n }\n },\n '\u914D\u5217\u30DE\u30C3\u30D7': {\n type: 'func',\n josi: [['\u3092'], ['\u3078', '\u306B']],\n pure: true,\n fn: function (f, a, sys) {\n return sys.__exec('\u914D\u5217\u95A2\u6570\u9069\u7528', [f, a, sys]);\n }\n },\n '\u914D\u5217\u30D5\u30A3\u30EB\u30BF': {\n type: 'func',\n josi: [['\u3067', '\u306E'], ['\u3092', '\u306B\u3064\u3044\u3066']],\n pure: true,\n fn: function (f, a, sys) {\n let ufunc = f;\n if (typeof f === 'string') {\n ufunc = sys.__findFunc(f, '\u914D\u5217\u30D5\u30A3\u30EB\u30BF');\n }\n const result = [];\n for (const e of a) {\n if (ufunc(e)) {\n result.push(e);\n }\n }\n return result;\n }\n },\n // @\u4E8C\u6B21\u5143\u914D\u5217\u51E6\u7406\n '\u8868\u30BD\u30FC\u30C8': {\n type: 'func',\n josi: [['\u306E'], ['\u3092']],\n pure: true,\n fn: function (a, no) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u30BD\u30FC\u30C8\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n a.sort((n, m) => {\n const ns = n[no];\n const ms = m[no];\n if (ns === ms) {\n return 0;\n }\n else if (ns < ms) {\n return -1;\n }\n else {\n return 1;\n }\n });\n return a;\n }\n },\n '\u8868\u6570\u5024\u30BD\u30FC\u30C8': {\n type: 'func',\n josi: [['\u306E'], ['\u3092']],\n pure: true,\n fn: function (a, no) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u6570\u5024\u30BD\u30FC\u30C8\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n a.sort((n, m) => {\n const ns = n[no];\n const ms = m[no];\n return ns - ms;\n });\n return a;\n }\n },\n '\u8868\u30D4\u30C3\u30AF\u30A2\u30C3\u30D7': {\n type: 'func',\n josi: [['\u306E'], ['\u304B\u3089'], ['\u3092', '\u3067']],\n pure: true,\n fn: function (a, no, s) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u30D4\u30C3\u30AF\u30A2\u30C3\u30D7\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n return a.filter((row) => String(row[no]).indexOf(s) >= 0);\n }\n },\n '\u8868\u5B8C\u5168\u4E00\u81F4\u30D4\u30C3\u30AF\u30A2\u30C3\u30D7': {\n type: 'func',\n josi: [['\u306E'], ['\u304B\u3089'], ['\u3092', '\u3067']],\n pure: true,\n fn: function (a, no, s) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u5B8C\u5168\u30D4\u30C3\u30AF\u30A2\u30C3\u30D7\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n return a.filter((row) => row[no] === s);\n }\n },\n '\u8868\u691C\u7D22': {\n type: 'func',\n josi: [['\u306E'], ['\u3067', '\u306B'], ['\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (a, col, row, s) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u691C\u7D22\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n for (let i = row; i < a.length; i++) {\n if (a[i][col] === s) {\n return i;\n }\n }\n return -1;\n }\n },\n '\u8868\u5217\u6570': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u5217\u6570\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n let cols = 1;\n for (let i = 0; i < a.length; i++) {\n if (a[i].length > cols) {\n cols = a[i].length;\n }\n }\n return cols;\n }\n },\n '\u8868\u884C\u6570': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u884C\u6570\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n return a.length;\n }\n },\n '\u8868\u884C\u5217\u4EA4\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (a, sys) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u884C\u5217\u4EA4\u63DB\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n const cols = sys.__exec('\u8868\u5217\u6570', [a]);\n const rows = a.length;\n const res = [];\n for (let r = 0; r < cols; r++) {\n const row = [];\n res.push(row);\n for (let c = 0; c < rows; c++) {\n row[c] = (a[c][r] !== undefined) ? a[c][r] : '';\n }\n }\n return res;\n }\n },\n '\u8868\u53F3\u56DE\u8EE2': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (a, sys) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u53F3\u56DE\u8EE2\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n const cols = sys.__exec('\u8868\u5217\u6570', [a]);\n const rows = a.length;\n const res = [];\n for (let r = 0; r < cols; r++) {\n const row = [];\n res.push(row);\n for (let c = 0; c < rows; c++) {\n row[c] = a[rows - c - 1][r];\n }\n }\n return res;\n }\n },\n '\u8868\u91CD\u8907\u524A\u9664': {\n type: 'func',\n josi: [['\u306E'], ['\u3092', '\u3067']],\n pure: true,\n fn: function (a, i) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u91CD\u8907\u524A\u9664\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n const res = [];\n const keys = {};\n for (let n = 0; n < a.length; n++) {\n const k = a[n][i];\n if (undefined === keys[k]) {\n keys[k] = true;\n res.push(a[n]);\n }\n }\n return res;\n }\n },\n '\u8868\u5217\u53D6\u5F97': {\n type: 'func',\n josi: [['\u306E'], ['\u3092']],\n pure: true,\n fn: function (a, i) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u5217\u53D6\u5F97\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n const res = a.map(row => row[i]);\n return res;\n }\n },\n '\u8868\u5217\u633F\u5165': {\n type: 'func',\n josi: [['\u306E'], ['\u306B', '\u3078'], ['\u3092']],\n pure: true,\n fn: function (a, i, s) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u5217\u633F\u5165\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n const res = [];\n a.forEach((row, idx) => {\n let nr = [];\n if (i > 0) {\n nr = nr.concat(row.slice(0, i));\n }\n nr.push(s[idx]);\n nr = nr.concat(row.slice(i));\n res.push(nr);\n });\n return res;\n }\n },\n '\u8868\u5217\u524A\u9664': {\n type: 'func',\n josi: [['\u306E'], ['\u3092']],\n pure: true,\n fn: function (a, i) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u5217\u524A\u9664\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n const res = [];\n a.forEach((row) => {\n const nr = row.slice(0);\n nr.splice(i, 1);\n res.push(nr);\n });\n return res;\n }\n },\n '\u8868\u5217\u5408\u8A08': {\n type: 'func',\n josi: [['\u306E'], ['\u3092', '\u3067']],\n pure: true,\n fn: function (a, i) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u5217\u5408\u8A08\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n let sum = 0;\n a.forEach((row) => { sum += row[i]; });\n return sum;\n }\n },\n '\u8868\u66D6\u6627\u691C\u7D22': {\n type: 'func',\n josi: [['\u306E'], ['\u304B\u3089'], ['\u3067'], ['\u3092']],\n pure: true,\n fn: function (a, row, col, s) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u66D6\u6627\u691C\u7D22\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n const re = new RegExp(s);\n for (let i = row; i < a.length; i++) {\n const line = a[i];\n if (re.test(line[col])) {\n return i;\n }\n }\n return -1;\n }\n },\n '\u8868\u6B63\u898F\u8868\u73FE\u30D4\u30C3\u30AF\u30A2\u30C3\u30D7': {\n type: 'func',\n josi: [['\u306E', '\u3067'], ['\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (a, col, s) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u6B63\u898F\u8868\u73FE\u30D4\u30C3\u30AF\u30A2\u30C3\u30D7\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n const re = new RegExp(s);\n const res = [];\n for (let i = 0; i < a.length; i++) {\n const row = a[i];\n if (re.test(row[col])) {\n res.push(row.slice(0));\n }\n }\n return res;\n }\n },\n // @\u8F9E\u66F8\u578B\u5909\u6570\u306E\u64CD\u4F5C\n '\u8F9E\u66F8\u30AD\u30FC\u5217\u6319': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n const keys = [];\n if (a instanceof Object) { // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u30AD\u30FC\u3092\u8FD4\u3059\n for (const key in a) {\n keys.push(key);\n }\n return keys;\n }\n if (a instanceof Array) { // \u914D\u5217\u306A\u3089\u6570\u5B57\u3092\u8FD4\u3059\n for (let i = 0; i < a.length; i++) {\n keys.push(i);\n }\n return keys;\n }\n throw new Error('\u300E\u8F9E\u66F8\u30AD\u30FC\u5217\u6319\u300F\u3067\u30CF\u30C3\u30B7\u30E5\u4EE5\u5916\u304C\u4E0E\u3048\u3089\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u8F9E\u66F8\u30AD\u30FC\u524A\u9664': {\n type: 'func',\n josi: [['\u304B\u3089', '\u306E'], ['\u3092']],\n pure: true,\n fn: function (a, key) {\n if (a instanceof Object) { // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u30AD\u30FC\u3092\u8FD4\u3059\n if (key in a) {\n delete a[key];\n }\n return a;\n }\n throw new Error('\u300E\u8F9E\u66F8\u30AD\u30FC\u524A\u9664\u300F\u3067\u30CF\u30C3\u30B7\u30E5\u4EE5\u5916\u304C\u4E0E\u3048\u3089\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u8F9E\u66F8\u30AD\u30FC\u5B58\u5728': {\n type: 'func',\n josi: [['\u306E', '\u306B'], ['\u304C']],\n pure: true,\n fn: function (a, key) {\n return key in a;\n }\n },\n // @\u30CF\u30C3\u30B7\u30E5\n '\u30CF\u30C3\u30B7\u30E5\u30AD\u30FC\u5217\u6319': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a, sys) {\n return sys.__exec('\u8F9E\u66F8\u30AD\u30FC\u5217\u6319', [a, sys]);\n }\n },\n '\u30CF\u30C3\u30B7\u30E5\u5185\u5BB9\u5217\u6319': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n const body = [];\n if (a instanceof Object) { // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u30AD\u30FC\u3092\u8FD4\u3059\n for (const key in a) {\n body.push(a[key]);\n }\n return body;\n }\n throw new Error('\u300E\u30CF\u30C3\u30B7\u30E5\u5185\u5BB9\u5217\u6319\u300F\u3067\u30CF\u30C3\u30B7\u30E5\u4EE5\u5916\u304C\u4E0E\u3048\u3089\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u30CF\u30C3\u30B7\u30E5\u30AD\u30FC\u524A\u9664': {\n type: 'func',\n josi: [['\u304B\u3089', '\u306E'], ['\u3092']],\n pure: true,\n fn: function (a, key, sys) {\n return sys.__exec('\u8F9E\u66F8\u30AD\u30FC\u524A\u9664', [a, key, sys]);\n }\n },\n '\u30CF\u30C3\u30B7\u30E5\u30AD\u30FC\u5B58\u5728': {\n type: 'func',\n josi: [['\u306E', '\u306B'], ['\u304C']],\n pure: true,\n fn: function (a, key) {\n return key in a;\n }\n },\n // @\u30BF\u30A4\u30DE\u30FC\n '\u79D2\u5F85': {\n type: 'func',\n josi: [['']],\n pure: true,\n asyncFn: true,\n fn: function (n, sys) {\n return new Promise((resolve, reject) => {\n try {\n // \u30BF\u30A4\u30DE\u30FC\u3092\u4ED5\u639B\u3051\u308B\n const timerId = setTimeout(() => {\n // \u30BF\u30A4\u30DE\u30FC\u4F7F\u7528\u4E2D\u30EA\u30B9\u30C8\u306B\u8FFD\u52A0\u3057\u305FID\u3092\u524A\u9664\n const i = sys.__timeout.indexOf(timerId);\n if (i >= 0) {\n sys.__timeout.splice(i, 1);\n }\n // Promise\u3092\u7D42\u4E86\n resolve();\n }, parseFloat(n) * 1000);\n // \u30BF\u30A4\u30DE\u30FC\u4F7F\u7528\u4E2D\u30EA\u30B9\u30C8\u306B\u8FFD\u52A0\n sys.__timeout.push(timerId);\n }\n catch (err) {\n reject(err);\n }\n });\n },\n return_none: true\n },\n '\u79D2\u5F85\u6A5F': {\n type: 'func',\n josi: [['']],\n pure: true,\n asyncFn: true,\n fn: async function (n, sys) {\n const p = sys.__exec('\u79D2\u5F85', [n, sys]);\n return await p;\n },\n return_none: true\n },\n '\u79D2\u9010\u6B21\u5F85\u6A5F': {\n type: 'func',\n josi: [['']],\n pure: true,\n asyncFn: true,\n fn: async function (n, sys) {\n const p = sys.__exec('\u79D2\u5F85', [n, sys]);\n return await p;\n },\n return_none: true\n },\n '\u79D2\u5F8C': {\n type: 'func',\n josi: [['\u3092'], ['']],\n pure: true,\n fn: function (f, n, sys) {\n // \u6587\u5B57\u5217\u3067\u6307\u5B9A\u3055\u308C\u305F\u95A2\u6570\u3092\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306B\u5909\u63DB\n if (typeof f === 'string') {\n f = sys.__findFunc(f, '\u79D2\u5F8C');\n }\n // 1\u56DE\u9650\u308A\u306E\u30BF\u30A4\u30DE\u30FC\u3092\u30BB\u30C3\u30C8\n const timerId = setTimeout(() => {\n // \u4F7F\u7528\u4E2D\u30EA\u30B9\u30C8\u306B\u8FFD\u52A0\u3057\u305FID\u3092\u524A\u9664\n const i = sys.__timeout.indexOf(timerId);\n if (i >= 0) {\n sys.__timeout.splice(i, 1);\n }\n try {\n f(timerId, sys);\n }\n catch (e) {\n let err = e;\n if (!(e instanceof NakoRuntimeError)) {\n err = new NakoRuntimeError(e, sys.__getSysVar('__line'));\n }\n sys.logger.error(err);\n }\n }, parseFloat(n) * 1000);\n sys.__timeout.unshift(timerId);\n sys.__setSysVar('\u5BFE\u8C61', timerId);\n return timerId;\n }\n },\n '\u79D2\u6BCE': {\n type: 'func',\n josi: [['\u3092'], ['']],\n pure: false,\n fn: function (f, n, sys) {\n // \u6587\u5B57\u5217\u3067\u6307\u5B9A\u3055\u308C\u305F\u95A2\u6570\u3092\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306B\u5909\u63DB\n if (typeof f === 'string') {\n f = sys.__findFunc(f, '\u79D2\u6BCE');\n }\n // \u30BF\u30A4\u30DE\u30FC\u3092\u30BB\u30C3\u30C8\n const timerId = setInterval(() => {\n f(timerId, sys);\n }, parseFloat(n) * 1000);\n // \u30BF\u30A4\u30DE\u30FCID\u3092\u8FFD\u52A0\n sys.__interval.unshift(timerId);\n sys.__setSysVar('\u5BFE\u8C61', timerId);\n return timerId;\n }\n },\n '\u79D2\u30BF\u30A4\u30DE\u30FC\u958B\u59CB\u6642': {\n type: 'func',\n josi: [['\u3092'], ['']],\n pure: false,\n fn: function (f, n, sys) {\n return sys.__exec('\u79D2\u6BCE', [f, n, sys]);\n }\n },\n '\u30BF\u30A4\u30DE\u30FC\u505C\u6B62': {\n type: 'func',\n josi: [['\u306E', '\u3067']],\n pure: true,\n fn: function (timerId, sys) {\n const i = sys.__interval.indexOf(timerId);\n if (i >= 0) {\n sys.__interval.splice(i, 1);\n clearInterval(timerId);\n return true;\n }\n const j = sys.__timeout.indexOf(timerId);\n if (j >= 0) {\n sys.__timeout.splice(j, 1);\n clearTimeout(timerId);\n return true;\n }\n return false;\n },\n return_none: false\n },\n '\u5168\u30BF\u30A4\u30DE\u30FC\u505C\u6B62': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n // clearInterval\n for (let i = 0; i < sys.__interval.length; i++) {\n const timerId = sys.__interval[i];\n clearInterval(timerId);\n }\n sys.__interval = [];\n // clearTimeout\n for (let i = 0; i < sys.__timeout.length; i++) {\n const timerId = sys.__timeout[i];\n clearTimeout(timerId);\n }\n sys.__timeout = [];\n },\n return_none: true\n },\n // @\u65E5\u6642\u51E6\u7406(\u7C21\u6613)\n '\u5143\u53F7\u30C7\u30FC\u30BF': { type: 'const', value: [{ '\u5143\u53F7': '\u4EE4\u548C', '\u6539\u5143\u65E5': '2019/05/01' }, { '\u5143\u53F7': '\u5E73\u6210', '\u6539\u5143\u65E5': '1989/01/08' }, { '\u5143\u53F7': '\u662D\u548C', '\u6539\u5143\u65E5': '1926/12/25' }, { '\u5143\u53F7': '\u5927\u6B63', '\u6539\u5143\u65E5': '1912/07/30' }, { '\u5143\u53F7': '\u660E\u6CBB', '\u6539\u5143\u65E5': '1868/10/23' }] }, // @\u3052\u3093\u3054\u3046\u3067\u30FC\u305F\n '\u4ECA': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n const z2 = (n) => {\n const ns = '00' + String(n);\n return ns.substring(ns.length - 2, ns.length);\n };\n const t = new Date();\n return z2(t.getHours()) + ':' + z2(t.getMinutes()) + ':' + z2(t.getSeconds());\n }\n },\n '\u30B7\u30B9\u30C6\u30E0\u6642\u9593': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n const now = new Date();\n return Math.floor(now.getTime() / 1000);\n }\n },\n '\u30B7\u30B9\u30C6\u30E0\u6642\u9593\u30DF\u30EA\u79D2': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n const now = new Date();\n return now.getTime();\n }\n },\n '\u4ECA\u65E5': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n return sys.__formatDate(new Date());\n }\n },\n '\u660E\u65E5': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n const t = Date.now() + (24 * 60 * 60 * 1000);\n return sys.__formatDate(new Date(t));\n }\n },\n '\u6628\u65E5': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n const t = Date.now() - (24 * 60 * 60 * 1000);\n return sys.__formatDate(new Date(t));\n }\n },\n '\u4ECA\u5E74': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n return (new Date()).getFullYear();\n }\n },\n '\u6765\u5E74': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n return (new Date()).getFullYear() + 1;\n }\n },\n '\u53BB\u5E74': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n return (new Date()).getFullYear() - 1;\n }\n },\n '\u4ECA\u6708': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n return (new Date()).getMonth() + 1;\n }\n },\n '\u6765\u6708': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n return (new Date()).getMonth() + 2;\n }\n },\n '\u5148\u6708': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n return (new Date()).getMonth();\n }\n },\n '\u66DC\u65E5': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (s, sys) {\n const d = sys.__str2date(s);\n return '\u65E5\u6708\u706B\u6C34\u6728\u91D1\u571F'.charAt(d.getDay() % 7);\n }\n },\n '\u66DC\u65E5\u756A\u53F7\u53D6\u5F97': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (s) {\n const a = s.split('/');\n const t = new Date(a[0], a[1] - 1, a[2]);\n return t.getDay();\n }\n },\n 'UNIXTIME\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092', '\u304B\u3089']],\n pure: true,\n fn: function (s, sys) {\n const d = sys.__str2date(s);\n return d.getTime() / 1000;\n }\n },\n 'UNIX\u6642\u9593\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092', '\u304B\u3089']],\n pure: true,\n fn: function (s, sys) {\n const d = sys.__str2date(s);\n return d.getTime() / 1000;\n }\n },\n '\u65E5\u6642\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092', '\u304B\u3089']],\n pure: true,\n fn: function (tm, sys) {\n const t = tm * 1000;\n return sys.__formatDateTime(new Date(t), '2022/01/01 00:00:00');\n }\n },\n '\u65E5\u6642\u66F8\u5F0F\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (tm, fmt, sys) {\n const t = sys.__str2date(tm);\n fmt = fmt.replace(/(YYYY|ccc|WWW|MMM|YY|MM|DD|HH|mm|ss|[MDHmsW])/g, (m) => {\n switch (m) {\n case 'YYYY': return t.getFullYear();\n case 'YY': return (String(t.getFullYear())).substring(2);\n case 'MM': return sys.__zero2(String(t.getMonth() + 1));\n case 'DD': return sys.__zero2(t.getDate());\n case 'M': return (t.getMonth() + 1);\n case 'D': return (t.getDate());\n case 'HH': return sys.__zero2(t.getHours());\n case 'mm': return sys.__zero2(t.getMinutes());\n case 'ss': return sys.__zero2(t.getSeconds());\n case 'ccc': return sys.__zero(t.getMilliseconds(), 3);\n case 'H': return (t.getHours());\n case 'm': return (t.getMinutes());\n case 's': return (t.getSeconds());\n case 'W': return '\u65E5\u6708\u706B\u6C34\u6728\u91D1\u571F'.charAt(t.getDay() % 7);\n case 'WWW': return ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][t.getDay() % 7];\n case 'MMM': return ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][t.getMonth()];\n }\n return m;\n });\n return fmt;\n }\n },\n '\u548C\u66A6\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (s, sys) {\n const d = sys.__str2date(s);\n const t = d.getTime();\n for (const era of sys.__getSysVar('\u5143\u53F7\u30C7\u30FC\u30BF')) {\n const gengo = String(era['\u5143\u53F7']);\n const d2 = sys.__str2date(era['\u6539\u5143\u65E5']);\n const t2 = d2.getTime();\n if (t2 <= t) {\n let y = (d.getFullYear() - d2.getFullYear()) + 1;\n if (y === 1) {\n y = '\u5143';\n }\n return gengo + String(y) + '\u5E74' + sys.__zero2(d.getMonth() + 1) + '\u6708' + sys.__zero2(d.getDate()) + '\u65E5';\n }\n }\n throw new Error('\u300E\u548C\u66A6\u5909\u63DB\u300F\u306F\u660E\u793A\u4EE5\u524D\u306E\u65E5\u4ED8\u306B\u306F\u5BFE\u5FDC\u3057\u3066\u3044\u307E\u305B\u3093\u3002');\n }\n },\n '\u5E74\u6570\u5DEE': {\n type: 'func',\n josi: [['\u3068', '\u304B\u3089'], ['\u306E', '\u307E\u3067\u306E']],\n pure: true,\n fn: function (a, b, sys) {\n const t1 = sys.__str2date(a);\n const t2 = sys.__str2date(b);\n return (t2.getFullYear() - t1.getFullYear());\n }\n },\n '\u6708\u6570\u5DEE': {\n type: 'func',\n josi: [['\u3068', '\u304B\u3089'], ['\u306E', '\u307E\u3067\u306E']],\n pure: true,\n fn: function (a, b, sys) {\n const t1 = sys.__str2date(a);\n const t2 = sys.__str2date(b);\n return (t2.getFullYear() * 12 + Number(t2.getMonth())) -\n (t1.getFullYear() * 12 + Number(t1.getMonth()));\n }\n },\n '\u65E5\u6570\u5DEE': {\n type: 'func',\n josi: [['\u3068', '\u304B\u3089'], ['\u306E', '\u307E\u3067\u306E']],\n pure: true,\n fn: function (a, b, sys) {\n const t1 = Math.ceil(sys.__str2date(a).getTime() / 1000);\n const t2 = Math.ceil(sys.__str2date(b).getTime() / 1000);\n const days = Math.ceil((t2 - t1) / (60 * 60 * 24));\n return days;\n }\n },\n '\u6642\u9593\u5DEE': {\n type: 'func',\n josi: [['\u3068', '\u304B\u3089'], ['\u306E', '\u307E\u3067\u306E']],\n pure: true,\n fn: function (a, b, sys) {\n const t1 = Math.ceil(sys.__str2date(a).getTime() / 1000);\n const t2 = Math.ceil(sys.__str2date(b).getTime() / 1000);\n const hours = Math.ceil((t2 - t1) / (60 * 60));\n return hours;\n }\n },\n '\u5206\u5DEE': {\n type: 'func',\n josi: [['\u3068', '\u304B\u3089'], ['\u306E', '\u307E\u3067\u306E']],\n pure: true,\n fn: function (a, b, sys) {\n const t1 = Math.ceil(sys.__str2date(a).getTime() / 1000);\n const t2 = Math.ceil(sys.__str2date(b).getTime() / 1000);\n const min = Math.ceil((t2 - t1) / (60));\n return min;\n }\n },\n '\u79D2\u5DEE': {\n type: 'func',\n josi: [['\u3068', '\u304B\u3089'], ['\u306E', '\u307E\u3067\u306E']],\n pure: true,\n fn: function (a, b, sys) {\n const t1 = Math.ceil(sys.__str2date(a).getTime() / 1000);\n const t2 = Math.ceil(sys.__str2date(b).getTime() / 1000);\n const sec = Math.ceil((t2 - t1));\n return sec;\n }\n },\n '\u65E5\u6642\u5DEE': {\n type: 'func',\n josi: [['\u3068', '\u304B\u3089'], ['\u306E', '\u307E\u3067\u306E'], ['\u306B\u3088\u308B']],\n pure: true,\n fn: function (a, b, unit, sys) {\n switch (unit) {\n case '\u5E74': return sys.__exec('\u5E74\u6570\u5DEE', [a, b, sys]);\n case '\u6708': return sys.__exec('\u6708\u6570\u5DEE', [a, b, sys]);\n case '\u65E5': return sys.__exec('\u65E5\u6570\u5DEE', [a, b, sys]);\n case '\u6642\u9593': return sys.__exec('\u6642\u9593\u5DEE', [a, b, sys]);\n case '\u5206': return sys.__exec('\u5206\u5DEE', [a, b, sys]);\n case '\u79D2': return sys.__exec('\u79D2\u5DEE', [a, b, sys]);\n }\n throw new Error('\u300E\u65E5\u6642\u5DEE\u300F\u3067\u4E0D\u660E\u306A\u5358\u4F4D\u3067\u3059\u3002');\n }\n },\n '\u6642\u9593\u52A0\u7B97': {\n type: 'func',\n josi: [['\u306B'], ['\u3092']],\n pure: true,\n fn: function (s, a, sys) {\n const op = a.charAt(0);\n if (op === '-' || op === '+') {\n a = a.substring(1);\n }\n const d = sys.__str2date(s);\n const aa = (a + ':0:0').split(':');\n let sec = parseInt(aa[0]) * 60 * 60 +\n parseInt(aa[1]) * 60 +\n parseInt(aa[2]);\n if (op === '-') {\n sec *= -1;\n }\n const rd = new Date(Number(d.getTime()) + (sec * 1000));\n return sys.__formatDateTime(rd, s);\n }\n },\n '\u65E5\u4ED8\u52A0\u7B97': {\n type: 'func',\n josi: [['\u306B'], ['\u3092']],\n pure: true,\n fn: function (s, a, sys) {\n let op = 1;\n const opc = a.charAt(0);\n if (opc === '-' || opc === '+') {\n a = a.substring(1);\n if (opc === '-') {\n op *= -1;\n }\n }\n const d = sys.__str2date(s);\n const aa = (a + '/0/0').split('/');\n const addY = parseInt(aa[0]) * op;\n const addM = parseInt(aa[1]) * op;\n const addD = parseInt(aa[2]) * op;\n d.setFullYear(Number(d.getFullYear()) + addY);\n d.setMonth(Number(d.getMonth()) + addM);\n d.setDate(Number(d.getDate()) + addD);\n return sys.__formatDateTime(d, s);\n }\n },\n '\u65E5\u6642\u52A0\u7B97': {\n type: 'func',\n josi: [['\u306B'], ['\u3092']],\n pure: true,\n fn: function (s, a, sys) {\n const r = ('' + a).match(/([+|-]?)(\\d+)(\u5E74|\u30F6\u6708|\u65E5|\u9031\u9593|\u6642\u9593|\u5206|\u79D2)$/);\n if (!r) {\n throw new Error('\u300E\u65E5\u4ED8\u52A0\u7B97\u300F\u306F\u300E(+\uFF5C-)1(\u5E74|\u30F6\u6708|\u65E5|\u6642\u9593|\u5206|\u79D2)\u300F\u306E\u66F8\u5F0F\u3067\u6307\u5B9A\u3057\u307E\u3059\u3002');\n }\n switch (r[3]) {\n case '\u5E74': return sys.__exec('\u65E5\u4ED8\u52A0\u7B97', [s, `${r[1]}${r[2]}/0/0`, sys]);\n case '\u30F6\u6708': return sys.__exec('\u65E5\u4ED8\u52A0\u7B97', [s, `${r[1]}0/${r[2]}/0`, sys]);\n case '\u9031\u9593': return sys.__exec('\u65E5\u4ED8\u52A0\u7B97', [s, `${r[1]}0/0/${parseInt(r[2]) * 7}`, sys]);\n case '\u65E5': return sys.__exec('\u65E5\u4ED8\u52A0\u7B97', [s, `${r[1]}0/0/${r[2]}`, sys]);\n case '\u6642\u9593': return sys.__exec('\u6642\u9593\u52A0\u7B97', [s, `${r[1]}${r[2]}:0:0`, sys]);\n case '\u5206': return sys.__exec('\u6642\u9593\u52A0\u7B97', [s, `${r[1]}0:${r[2]}:0`, sys]);\n case '\u79D2': return sys.__exec('\u6642\u9593\u52A0\u7B97', [s, `${r[1]}0:0:${r[2]}`, sys]);\n }\n }\n },\n '\u6642\u9593\u30DF\u30EA\u79D2\u53D6\u5F97': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n if (performance && performance.now) {\n return performance.now();\n }\n else if (Date.now) {\n return Date.now();\n }\n else {\n const now = new Date();\n return now.getTime();\n }\n }\n },\n // @\u30C7\u30D0\u30C3\u30B0\u652F\u63F4\n '\u30C7\u30D0\u30C3\u30B0\u8868\u793A': {\n type: 'func',\n josi: [['\u3068', '\u3092', '\u306E']],\n pure: true,\n fn: function (s, sys) {\n // \u884C\u756A\u53F7\u306E\u60C5\u5831\u3092\u5F97\u308B\n const lineInfo = String(sys.__getSysVar('__line', 0)) + '::';\n const a = lineInfo.split(':', 2);\n const no = parseInt(String(a[0]).replace('l', '')) + 1;\n const fname = a[1];\n // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306A\u3089JSON\u6587\u5B57\u5217\u306B\u5909\u63DB\n if (typeof s === 'object') {\n s = JSON.stringify(s);\n }\n s = `${fname}(${no}): ${s}`;\n sys.__exec('\u8868\u793A', [s, sys]);\n },\n return_none: true\n },\n '\u30CF\u30C6\u30CA\u95A2\u6570\u8A2D\u5B9A': {\n type: 'func',\n josi: [['\u3092', '\u306E']],\n pure: true,\n fn: function (s, sys) {\n if (typeof s === 'function') {\n sys.__hatena = s;\n return;\n }\n if (typeof s === 'string') {\n sys.__hatena = sys.__getSysVar(s, '\u30C7\u30D0\u30C3\u30B0\u8868\u793A');\n return;\n }\n if (s instanceof Array) {\n const fa = s.map((fstr) => {\n if (fstr.substring(0, 3) === 'JS:') {\n const code = fstr.substring(3);\n return sys.__evalJS(code, sys);\n }\n else {\n return sys.__getSysVar(fstr, '\u30C7\u30D0\u30C3\u30B0\u8868\u793A');\n }\n });\n sys.__hatena = (p, sys) => {\n let param = p;\n for (const f of fa) {\n param = f(param, sys);\n }\n };\n return;\n }\n sys.__hatena = sys.__getSysVar('\u30C7\u30D0\u30C3\u30B0\u8868\u793A');\n },\n return_none: true\n },\n '\u30CF\u30C6\u30CA\u95A2\u6570\u5B9F\u884C': {\n type: 'func',\n josi: [['\u306E', '\u3092', '\u3068']],\n pure: true,\n fn: function (s, sys) {\n sys.__hatena(s, sys);\n },\n return_none: true\n },\n '\u30A8\u30E9\u30FC\u767A\u751F': {\n type: 'func',\n josi: [['\u306E', '\u3067']],\n pure: true,\n fn: function (s) {\n throw new Error(s);\n },\n return_none: true\n },\n '__DEBUG': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n sys.isDebug = true;\n console.log(sys);\n }\n },\n '__DEBUG\u5F37\u5236\u5F85\u6A5F': { type: 'const', value: 0 }, // @__DEBUG\u304D\u3087\u3046\u305B\u3044\u305F\u3044\u304D\n '__DEBUG\u30D6\u30EC\u30A4\u30AF\u30DD\u30A4\u30F3\u30C8\u4E00\u89A7': { type: 'const', value: [] }, // @__DEBUG\u3076\u308C\u3044\u304F\u307D\u3044\u3093\u3068\u3044\u3061\u3089\u3093\n '__DEBUG\u5F85\u6A5F\u30D5\u30E9\u30B0': { type: 'const', value: 0 }, // @__DEBUG\u305F\u3044\u304D\u3075\u3089\u3050\n '__DEBUG_BP_WAIT': {\n type: 'func',\n josi: [['\u3067']],\n pure: true,\n asyncFn: true,\n fn: function (curLine, sys) {\n return new Promise((resolve) => {\n const breakpoints = sys.__getSysVar('__DEBUG\u30D6\u30EC\u30A4\u30AF\u30DD\u30A4\u30F3\u30C8\u4E00\u89A7');\n const forceLine = sys.__getSysVar('__DEBUG\u5F37\u5236\u5F85\u6A5F');\n sys.__setSysVar('__DEBUG\u5F37\u5236\u5F85\u6A5F', 0);\n // \u30D6\u30EC\u30A4\u30AF\u30DD\u30A4\u30F3\u30C8 or __DEBUG\u5F37\u5236\u5F85\u6A5F \u304C\u6307\u5B9A\u3055\u308C\u305F\u304B\uFF1F\n if (breakpoints.indexOf(curLine) >= 0 || forceLine) {\n if (sys.__getSysVar('\u30D7\u30E9\u30B0\u30A4\u30F3\u540D') !== '\u30E1\u30A4\u30F3') {\n return;\n } // \u73FE\u72B6\u30E1\u30A4\u30F3\u306E\u307F\u30C7\u30D0\u30C3\u30B0\u3059\u308B\n console.log(`@__DEBUG_BP_WAIT(${curLine})`);\n const timerId = setInterval(() => {\n if (sys.__getSysVar('__DEBUG\u5F85\u6A5F\u30D5\u30E9\u30B0') === 1) {\n sys.__setSysVar('__DEBUG\u5F85\u6A5F\u30D5\u30E9\u30B0', 0);\n clearInterval(timerId);\n resolve(curLine);\n }\n }, 500);\n }\n else {\n resolve(curLine);\n }\n });\n }\n },\n '\u30B0\u30ED\u30FC\u30D0\u30EB\u95A2\u6570\u4E00\u89A7\u53D6\u5F97': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n const vars = sys.__varslist[1];\n const res = [];\n for (const key of vars.keys()) {\n res.push(key);\n }\n return res;\n }\n },\n '\u30B7\u30B9\u30C6\u30E0\u95A2\u6570\u4E00\u89A7\u53D6\u5F97': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n const vars = sys.__v0;\n const res = [];\n for (const key of vars.keys()) {\n if (key.startsWith('__') || key.startsWith('!') || key === 'meta') {\n continue;\n }\n res.push(key);\n }\n return res;\n }\n },\n '\u30B7\u30B9\u30C6\u30E0\u95A2\u6570\u5B58\u5728': {\n type: 'func',\n josi: [['\u304C', '\u306E']],\n pure: true,\n fn: function (fname, sys) {\n return (typeof sys.__getSysVar(fname) !== 'undefined');\n }\n },\n '\u30D7\u30E9\u30B0\u30A4\u30F3\u4E00\u89A7\u53D6\u5F97': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n const a = [];\n for (const f in sys.pluginfiles) {\n a.push(f);\n }\n return a;\n }\n },\n '\u30E2\u30B8\u30E5\u30FC\u30EB\u4E00\u89A7\u53D6\u5F97': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n const a = [];\n for (const f in sys.__module) {\n a.push(f);\n }\n return a;\n }\n },\n '\u52A9\u8A5E\u4E00\u89A7\u53D6\u5F97': {\n type: 'func',\n josi: [],\n pure: true,\n asyncFn: false,\n fn: function (sys) {\n return sys.josiList;\n }\n },\n '\u4E88\u7D04\u8A9E\u4E00\u89A7\u53D6\u5F97': {\n type: 'func',\n josi: [],\n pure: true,\n asyncFn: false,\n fn: function (sys) {\n return sys.reservedWords;\n }\n },\n // @\u30D7\u30E9\u30B0\u30A4\u30F3\u7BA1\u7406\n '\u30D7\u30E9\u30B0\u30A4\u30F3\u540D': { type: 'const', value: '\u30E1\u30A4\u30F3' }, // @\u3077\u3089\u3050\u3044\u3093\u3081\u3044\n '\u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u8A2D\u5B9A': {\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function (s, sys) {\n sys.__setSysVar('\u30D7\u30E9\u30B0\u30A4\u30F3\u540D', s);\n },\n return_none: true\n },\n '\u540D\u524D\u7A7A\u9593': { type: 'const', value: '' }, // @\u306A\u307E\u3048\u304F\u3046\u304B\u3093\n '\u540D\u524D\u7A7A\u9593\u8A2D\u5B9A': {\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function (s, sys) {\n // push namespace\n sys.__namespaceList.push([sys.__getSysVar('\u540D\u524D\u7A7A\u9593'), sys.__getSysVar('\u30D7\u30E9\u30B0\u30A4\u30F3\u540D')]);\n sys.__setSysVar('\u540D\u524D\u7A7A\u9593', s);\n },\n return_none: true\n },\n '\u540D\u524D\u7A7A\u9593\u30DD\u30C3\u30D7': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n // pop namespace\n const a = sys.__namespaceList.pop();\n if (a) {\n sys.__setSysVar('\u540D\u524D\u7A7A\u9593', a[0]);\n sys.__setSysVar('\u30D7\u30E9\u30B0\u30A4\u30F3\u540D', a[1]);\n }\n },\n return_none: true\n },\n // @URL\u30A8\u30F3\u30B3\u30FC\u30C9\u3068\u30D1\u30E9\u30E1\u30FC\u30BF\n 'URL\u30A8\u30F3\u30B3\u30FC\u30C9': {\n type: 'func',\n josi: [['\u3092', '\u304B\u3089']],\n pure: true,\n fn: function (text) {\n return encodeURIComponent(text);\n }\n },\n 'URL\u30C7\u30B3\u30FC\u30C9': {\n type: 'func',\n josi: [['\u3092', '\u3078', '\u306B']],\n pure: true,\n fn: function (text) {\n return decodeURIComponent(text);\n }\n },\n 'URL\u30D1\u30E9\u30E1\u30FC\u30BF\u89E3\u6790': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (url, sys) {\n const res = {};\n if (typeof url !== 'string') {\n return res;\n }\n const p = url.split('?');\n if (p.length <= 1) {\n return res;\n }\n const params = p[1].split('&');\n for (const line of params) {\n const line2 = line + '=';\n const kv = line2.split('=');\n const k = sys.__exec('URL\u30C7\u30B3\u30FC\u30C9', [kv[0]]);\n res[k] = sys.__exec('URL\u30C7\u30B3\u30FC\u30C9', [kv[1]]);\n }\n return res;\n }\n },\n // @BASE64\n 'BASE64\u30A8\u30F3\u30B3\u30FC\u30C9': {\n type: 'func',\n josi: [['\u3092', '\u304B\u3089']],\n pure: true,\n fn: function (text) {\n // browser?\n if (typeof (window) !== 'undefined' && window.btoa) {\n const u8a = new TextEncoder().encode(text);\n const utf8str = String.fromCharCode.apply(null, u8a);\n return btoa(utf8str);\n }\n // Node?\n if (typeof (Buffer) !== 'undefined') {\n return Buffer.from(text).toString('base64');\n }\n throw new Error('\u300EBASE64\u30A8\u30F3\u30B3\u30FC\u30C9\u300F\u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002');\n }\n },\n 'BASE64\u30C7\u30B3\u30FC\u30C9': {\n type: 'func',\n josi: [['\u3092', '\u3078', '\u306B']],\n pure: true,\n fn: function (text) {\n if (typeof (window) !== 'undefined' && window.atob) {\n const decodedUtf8str = atob(text);\n const dec = Array.prototype.map.call(decodedUtf8str, c => c.charCodeAt());\n const decodedArray = new Uint8Array(dec);\n return new TextDecoder('UTF-8').decode(decodedArray);\n }\n // Node?\n if (typeof (Buffer) !== 'undefined') {\n return Buffer.from(text, 'base64').toString();\n }\n throw new Error('\u300EBASE64\u30C7\u30B3\u30FC\u30C9\u300F\u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002');\n }\n },\n // @\u30D1\u30B9\u64CD\u4F5C\n '\u62E1\u5F35\u5B50\u62BD\u51FA': {\n type: 'func',\n josi: [['\u304B\u3089', '\u306E']],\n pure: true,\n fn: function (fname, sys) {\n if (fname === null || fname === undefined) {\n return '';\n }\n const sep = sys.pathSeparator || '/';\n if (fname.indexOf(sep) >= 0) { // \u30D1\u30B9\u8A18\u53F7\u304C\u3042\u308C\u3070\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u62BD\u51FA\n const parts = fname.split(sep);\n fname = parts[parts.length - 1];\n }\n const m = fname.match(/(\\.[a-zA-Z0-9_\\-+]+)$/);\n if (m) {\n return m[1];\n }\n return '';\n }\n },\n '\u62E1\u5F35\u5B50\u5909\u66F4': {\n type: 'func',\n josi: [['\u306E', '\u3092', '\u304B\u3089'], ['\u306B', '\u3078']],\n pure: true,\n fn: function (fname, ext, sys) {\n if (fname === null || fname === undefined) {\n return ext;\n }\n const sep = sys.pathSeparator || '/';\n const pathList = fname.split(sep);\n const filename = pathList[pathList.length - 1];\n const pathStr = pathList.slice(0, -1).join(sep);\n const rawExt = (ext ?? '').trim();\n let extWithDot = rawExt;\n if (rawExt !== '') {\n extWithDot = rawExt.startsWith('.') ? rawExt : '.' + rawExt;\n }\n const newFilename = filename.replace(/(\\.[a-zA-Z0-9_\\-+]+)?$/, extWithDot);\n return sys.__exec('\u7D42\u7AEF\u30D1\u30B9\u8FFD\u52A0', [pathStr, sys]) + newFilename;\n }\n },\n '\u7D42\u7AEF\u30D1\u30B9\u8FFD\u52A0': {\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function (path, sys) {\n const sep = sys.pathSeparator || '/';\n if (path === undefined || path === null || path === '') {\n return '';\n }\n if (path.endsWith(sep)) {\n return path;\n }\n return path + sep;\n }\n },\n '\u7D42\u7AEF\u30D1\u30B9\u9664\u53BB': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (dir, sys) {\n const sep = sys.pathSeparator || '/';\n if (!dir) {\n return '';\n }\n if (dir.endsWith(sep)) {\n return dir.substring(0, dir.length - 1);\n }\n else {\n return dir;\n }\n }\n },\n '\u7D42\u7AEF\u30D1\u30B9\u524A\u9664': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (dir, sys) {\n return sys.__exec('\u7D42\u7AEF\u30D1\u30B9\u9664\u53BB', [dir, sys]);\n }\n },\n '\u30D5\u30A1\u30A4\u30EB\u540D\u62BD\u51FA': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (dir, sys) {\n const sep = sys.pathSeparator || '/';\n const parts = dir.split(sep);\n return parts[parts.length - 1];\n }\n },\n '\u30D1\u30B9\u62BD\u51FA': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (dir, sys) {\n const sep = sys.pathSeparator || '/';\n const parts = dir.split(sep);\n parts.pop();\n return parts.join(sep);\n }\n }\n};\n", "export default {\n 'meta': {\n type: 'const',\n value: {\n pluginName: 'plugin_math', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u540D\u524D\n description: '\u6570\u5B66\u95A2\u6570\u3092\u63D0\u4F9B\u3059\u308B\u30D7\u30E9\u30B0\u30A4\u30F3', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u8AAC\u660E\n pluginVersion: '3.6.0', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\n nakoRuntime: ['wnako', 'cnako', 'phpnako'], // \u5BFE\u8C61\u30E9\u30F3\u30BF\u30A4\u30E0\n nakoVersion: '^3.6.0' // \u8981\u6C42\u306A\u3067\u3057\u3053\u30D0\u30FC\u30B8\u30E7\u30F3\n }\n },\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n // \u521D\u671F\u5316\u4E0D\u8981\n }\n },\n // @\u4E09\u89D2\u95A2\u6570\n 'SIN': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return Math.sin(v);\n }\n },\n 'COS': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return Math.cos(v);\n }\n },\n 'TAN': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return Math.tan(v);\n }\n },\n 'ARCSIN': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return Math.asin(v);\n }\n },\n 'ARCCOS': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return Math.acos(v);\n }\n },\n 'ARCTAN': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return Math.atan(v);\n }\n },\n 'ATAN2': {\n type: 'func',\n josi: [['\u3068'], ['\u306E']],\n pure: true,\n fn: function (y, x) {\n return Math.atan2(y, x);\n }\n },\n '\u5EA7\u6A19\u89D2\u5EA6\u8A08\u7B97': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (XY) {\n return Math.atan2(XY[1], XY[0]) / Math.PI * 180;\n }\n },\n 'RAD2DEG': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return v / Math.PI * 180;\n }\n },\n 'DEG2RAD': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return (v / 180) * Math.PI;\n }\n },\n '\u5EA6\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return v / Math.PI * 180;\n }\n },\n '\u30E9\u30B8\u30A2\u30F3\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return (v / 180) * Math.PI;\n }\n },\n // @\u7B97\u8853\u95A2\u6570\n 'SIGN': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return (parseFloat(v) === 0) ? 0 : (v > 0) ? 1 : -1;\n }\n },\n '\u7B26\u53F7': {\n type: 'func',\n josi: [['\u306E']],\n pure: false,\n fn: function (v, sys) {\n return sys.__exec('SIGN', [v]);\n }\n },\n 'ABS': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return Math.abs(a);\n }\n },\n '\u7D76\u5BFE\u5024': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return Math.abs(a);\n }\n },\n 'EXP': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return Math.exp(a);\n }\n },\n 'HYPOT': {\n type: 'func',\n josi: [['\u3068'], ['\u306E']],\n pure: true,\n fn: function (a, b) {\n return Math.hypot(a, b);\n }\n },\n '\u659C\u8FBA': {\n type: 'func',\n josi: [['\u3068'], ['\u306E']],\n pure: true,\n fn: function (a, b) {\n return Math.hypot(a, b);\n }\n },\n 'LN': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return Math.log(a);\n }\n },\n 'LOG': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return Math.log(a);\n }\n },\n 'LOGN': {\n type: 'func',\n josi: [['\u3067'], ['\u306E']],\n pure: true,\n fn: function (a, b) {\n if (a === 2) {\n return Math.LOG2E * Math.log(b);\n }\n if (a === 10) {\n return Math.LOG10E * Math.log(b);\n }\n return Math.log(b) / Math.log(a);\n }\n },\n 'FRAC': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return a % 1;\n }\n },\n '\u5C0F\u6570\u90E8\u5206': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return a % 1;\n }\n },\n '\u6574\u6570\u90E8\u5206': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return Math.trunc(a);\n }\n },\n '\u4E71\u6570': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n // number\u306E\u5834\u5408\n if (typeof a === 'number') {\n return Math.floor(Math.random() * a);\n }\n // \u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u5834\u5408\n if (typeof a === 'object' && a['\u5148\u982D'] !== undefined) {\n const min = a['\u5148\u982D'];\n const max = a['\u672B\u5C3E'];\n return Math.floor(Math.random() * (max - min + 1)) + Number(min);\n }\n // \u914D\u5217\u306E\u5834\u5408\n if (Array.isArray(a)) {\n const min = a[0];\n const max = a[1];\n return Math.floor(Math.random() * (max - min + 1)) + Number(min);\n }\n return undefined;\n }\n },\n '\u4E71\u6570\u7BC4\u56F2': {\n type: 'func',\n josi: [['\u304B\u3089'], ['\u307E\u3067\u306E', '\u306E']],\n pure: true,\n fn: function (a, b) {\n return (Math.floor(Math.random() * (b - a + 1)) + a);\n }\n },\n 'SQRT': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return Math.sqrt(a);\n }\n },\n '\u5E73\u65B9\u6839': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return Math.sqrt(a);\n }\n },\n // @\u6570\u5024\u5207\u4E0A\u5207\u6368\u4E38\u3081\n 'ROUND': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return Math.round(v);\n }\n },\n '\u56DB\u6368\u4E94\u5165': {\n type: 'func',\n josi: [['\u3092', '\u306E']],\n pure: true,\n fn: function (v) {\n return Math.round(v);\n }\n },\n '\u5C0F\u6570\u70B9\u5207\u4E0A': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (a, b) {\n const base = Math.pow(10, b);\n return Math.ceil(a * base) / base;\n }\n },\n '\u5C0F\u6570\u70B9\u5207\u4E0B': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (a, b) {\n const base = Math.pow(10, b);\n return Math.floor(a * base) / base;\n }\n },\n '\u5C0F\u6570\u70B9\u56DB\u6368\u4E94\u5165': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (a, b) {\n const base = Math.pow(10, b);\n return Math.round(a * base) / base;\n }\n },\n 'CEIL': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return Math.ceil(v);\n }\n },\n '\u5207\u4E0A': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return Math.ceil(v);\n }\n },\n 'FLOOR': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return Math.floor(v);\n }\n },\n '\u5207\u6368': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return Math.floor(v);\n }\n }\n};\n", "export const options = {\n delimiter: ',',\n eol: '\\r\\n',\n auto_convert_number: true\n};\nexport function resetEnv() {\n options.delimiter = ',';\n options.eol = '\\r\\n';\n options.auto_convert_number = true;\n}\n/// \u6587\u5B57\u5217\u304C\u6570\u5024\u5316\u3069\u3046\u304B\u5224\u5B9A\u3059\u308B\u95A2\u6570\nfunction is_numeric(str) {\n return /^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$/.test(str);\n}\nexport function parse(txt, delimiter = undefined) {\n // delimiter\n if (delimiter === undefined) {\n delimiter = options.delimiter;\n }\n // check txt\n txt = '' + txt + '\\n';\n // convert CRLF to LF, and CR to LF\n txt = txt.replace(/(\\r\\n|\\r)/g, '\\n');\n // trim right\n txt = txt.replace(/\\s+$/, '') + '\\n';\n // set pattern\n const patToDelim = '^(.*?)([\\\\' + delimiter + '\\\\n])';\n const reToDelim = new RegExp(patToDelim);\n // if value is number then convert to float\n const convType = function (v) {\n let result = v;\n if (typeof (v) === 'string') {\n if (options.auto_convert_number && is_numeric(v)) {\n result = parseFloat(v); // convert number\n }\n }\n return result;\n };\n // parse txt\n const res = [];\n let cells = [];\n let c = '';\n while (txt !== '') {\n // first check delimiter (because /^\\s+/ skip delimiter'\\t') (#3)\n c = txt.charAt(0);\n if (c === delimiter) {\n txt = txt.substring(1);\n cells.push('');\n continue;\n }\n // second check LF (#7)\n if (c === '\\n') {\n cells.push('');\n res.push(cells);\n cells = [];\n txt = txt.substring(1);\n continue;\n }\n // trim white space\n txt = txt.replace(/^\\s+/, '');\n c = txt.charAt(0);\n // no data\n if (c === delimiter) {\n console.log('delimiter');\n cells.push('');\n txt = txt.substring(delimiter.length);\n continue;\n }\n // written using the dialect of Excel\n if (c === '=' && txt.charAt(1) === '\"') {\n txt = txt.substring(1);\n continue;\n }\n // number or simple string\n if (c !== '\"') { // number or simple str\n const m = reToDelim.exec(txt);\n if (!m) {\n cells.push(convType(txt));\n res.push(cells);\n cells = [];\n break;\n }\n if (m[2] === '\\n') {\n cells.push(convType(m[1]));\n res.push(cells);\n cells = [];\n }\n else if (m[2] === delimiter) {\n cells.push(convType(m[1]));\n }\n txt = txt.substring(m[0].length);\n continue;\n }\n // \"\" ... blank data\n if (txt.substring(0, 2) === '\"\"') {\n cells.push('');\n txt = txt.substring(2);\n continue;\n }\n // \"...\"\n let i = 1;\n let s = '';\n while (i < txt.length) {\n const c1 = txt.charAt(i);\n const c2 = txt.charAt(i + 1);\n // console.log(\"@\" + c1 + c2);\n // 2quote => 1quote char\n if (c1 === '\"' && c2 === '\"') {\n i += 2;\n s += '\"';\n continue;\n }\n if (c1 === '\"') {\n i++;\n if (c2 === delimiter) {\n i++;\n cells.push(convType(s));\n s = '';\n break;\n }\n if (c2 === '\\n') {\n i++;\n cells.push(convType(s));\n res.push(cells);\n cells = [];\n break;\n }\n // if (c2 === \" \" || c2 === \"\\t\") {\n i++;\n continue;\n }\n s += c1;\n i++;\n }\n txt = txt.substr(i);\n }\n if (cells.length > 0)\n res.push(cells);\n return res;\n}\n// convert 2D array to CSV string\nexport function stringify(ary, delimiter = undefined, eol = undefined) {\n // check arguments\n if (delimiter === undefined) {\n delimiter = options.delimiter;\n }\n if (eol === undefined) {\n eol = options.eol;\n }\n const valueConv = genValueConverter(delimiter);\n if (ary === undefined)\n return '';\n let r = '';\n for (let i = 0; i < ary.length; i++) {\n const cells = ary[i];\n if (cells === undefined) {\n r += eol;\n continue;\n }\n for (let j = 0; j < cells.length; j++) {\n cells[j] = valueConv(cells[j]);\n }\n r += cells.join(delimiter) + eol;\n }\n // replace return code\n r = r.replace(/(\\r\\n|\\r|\\n)/g, eol);\n return r;\n}\nexport function replaceEolMark(eol) {\n eol = eol.replace(/\\n\\r/g, '[CRLF]');\n eol = eol.replace(/\\r/g, '[CR]');\n eol = eol.replace(/\\n/g, '[LF]');\n return eol;\n}\nfunction genValueConverter(delimiter) {\n return function (s) {\n s = '' + s;\n let fQuot = false;\n if (s.indexOf('\\n') >= 0 || s.indexOf('\\r') >= 0) {\n fQuot = true;\n }\n if (s.indexOf(delimiter) >= 0) {\n fQuot = true;\n }\n if (s.indexOf('\"') >= 0) {\n fQuot = true;\n s = s.replace(/\"/g, '\"\"');\n }\n if (fQuot)\n s = '\"' + s + '\"';\n return s;\n };\n}\n", "import { options, parse, stringify } from './nako_csv.mjs';\nconst PluginCSV = {\n 'meta': {\n type: 'const',\n value: {\n pluginName: 'plugin_csv', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u540D\u524D\n description: 'CSV\u95A2\u9023\u306E\u547D\u4EE4\u3092\u63D0\u4F9B\u3059\u308B\u30D7\u30E9\u30B0\u30A4\u30F3', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u8AAC\u660E\n pluginVersion: '3.6.0', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\n nakoRuntime: ['wnako', 'cnako', 'phpnako'], // \u5BFE\u8C61\u30E9\u30F3\u30BF\u30A4\u30E0\n nakoVersion: '3.6.0' // \u8981\u6C42\u306A\u3067\u3057\u3053\u30D0\u30FC\u30B8\u30E7\u30F3\n }\n },\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n // \u57FA\u672C\u7684\u306B\u521D\u671F\u5316\u4E0D\u8981\n }\n },\n // @CSV\u64CD\u4F5C\n 'CSV\u53D6\u5F97': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u3067']],\n pure: true,\n fn: function (str) {\n options.delimiter = ',';\n return parse(str);\n }\n },\n 'TSV\u53D6\u5F97': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u3067']],\n pure: true,\n fn: function (str) {\n options.delimiter = '\\t';\n return parse(str);\n }\n },\n '\u8868CSV\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (a) {\n options.delimiter = ',';\n return stringify(a);\n }\n },\n 'CSV\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (a) {\n options.delimiter = ',';\n return stringify(a);\n }\n },\n '\u8868TSV\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (a) {\n options.delimiter = '\\t';\n return stringify(a);\n }\n },\n 'TSV\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (a) {\n options.delimiter = '\\t';\n return stringify(a);\n }\n },\n 'CSV\u30AA\u30D7\u30B7\u30E7\u30F3\u8A2D\u5B9A': {\n type: 'func',\n josi: [['\u3092', '\u3067']],\n pure: true,\n fn: function (obj) {\n for (const key in obj) {\n const value = obj[key];\n if (key === 'delimiter' || key === '\u533A\u5207\u6587\u5B57') {\n options.delimiter = value;\n }\n else if (key === 'eol') {\n options.eol = value;\n }\n else if (key === 'auto_convert_number') {\n options.auto_convert_number = value;\n }\n }\n },\n return_none: true\n }\n};\nexport default PluginCSV;\n", "export default {\n 'meta': {\n type: 'const',\n value: {\n pluginName: 'plugin_promise', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u540D\u524D\n description: 'promise\u95A2\u9023\u306E\u547D\u4EE4\u3092\u63D0\u4F9B\u3059\u308B\u30D7\u30E9\u30B0\u30A4\u30F3', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u8AAC\u660E\n pluginVersion: '3.6.0', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\n nakoRuntime: ['wnako', 'cnako'], // \u5BFE\u8C61\u30E9\u30F3\u30BF\u30A4\u30E0\n nakoVersion: '^3.6.0' // \u8981\u6C42\u306A\u3067\u3057\u3053\u30D0\u30FC\u30B8\u30E7\u30F3\n }\n },\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n if (sys.__promise === null || sys.__promise === undefined) {\n sys.__promise = {\n setLastPromise: function (promise) {\n sys.__setSysVar('\u305D', promise);\n return promise;\n }\n };\n }\n }\n },\n // @\u975E\u540C\u671F\u51E6\u7406\u306E\u4FDD\u8A3C\u306E\u5B9A\u6570\n '\u305D': { type: 'const', value: '' }, // @\u305D\n // @\u975E\u540C\u671F\u51E6\u7406\u306E\u4FDD\u8A3C\n '\u52D5\u6642': {\n type: 'func',\n josi: [['\u3092', '\u3067']],\n pure: true,\n fn: function (callback, sys) {\n return sys.__promise.setLastPromise(new Promise((resolve, reject) => {\n return callback(resolve, reject);\n }));\n },\n return_none: false\n },\n '\u6210\u529F\u6642': {\n type: 'func',\n josi: [['\u3092'], ['\u306E', '\u304C', '\u306B']],\n pure: true,\n fn: function (callback, promise, sys) {\n return sys.__promise.setLastPromise(promise.then((result) => {\n sys.__setSysVar('\u5BFE\u8C61', result);\n return callback(result);\n }));\n },\n return_none: false\n },\n '\u51E6\u7406\u6642': {\n type: 'func',\n josi: [['\u3092'], ['\u306E', '\u304C', '\u306B']],\n pure: true,\n fn: function (cbFunc, promise, sys) {\n return sys.__promise.setLastPromise(promise.then((result) => {\n sys.__setSysVar('\u5BFE\u8C61', result);\n return cbFunc(true, result, sys);\n }, (reason) => {\n sys.__setSysVar('\u5BFE\u8C61', reason);\n return cbFunc(false, reason, sys);\n }));\n },\n return_none: false\n },\n '\u5931\u6557\u6642': {\n type: 'func',\n josi: [['\u3092'], ['\u306E', '\u304C', '\u306B']],\n pure: true,\n fn: function (callback, promise, sys) {\n return sys.__promise.setLastPromise(promise.catch((err) => {\n sys.__setSysVar('\u5BFE\u8C61', err);\n return callback(err);\n }));\n },\n return_none: false\n },\n '\u7D42\u4E86\u6642': {\n type: 'func',\n josi: [['\u3092'], ['\u306E', '\u304C', '\u306B']],\n pure: true,\n fn: function (callback, promise, sys) {\n return sys.__promise.setLastPromise(promise.finally(() => {\n return callback();\n }));\n },\n return_none: false\n },\n '\u675F': {\n type: 'func',\n josi: [['\u3068', '\u3092']],\n isVariableJosi: true,\n pure: true,\n fn: function (...args) {\n const sys = args.pop();\n return (sys).__promise.setLastPromise(Promise.all(args));\n },\n return_none: false\n }\n};\n", "/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nfunction getLineColFromPtr(string, ptr) {\n let lines = string.slice(0, ptr).split(/\\r\\n|\\n|\\r/g);\n return [lines.length, lines.pop().length + 1];\n}\nfunction makeCodeBlock(string, line, column) {\n let lines = string.split(/\\r\\n|\\n|\\r/g);\n let codeblock = '';\n let numberLen = (Math.log10(line + 1) | 0) + 1;\n for (let i = line - 1; i <= line + 1; i++) {\n let l = lines[i - 1];\n if (!l)\n continue;\n codeblock += i.toString().padEnd(numberLen, ' ');\n codeblock += ': ';\n codeblock += l;\n codeblock += '\\n';\n if (i === line) {\n codeblock += ' '.repeat(numberLen + column + 2);\n codeblock += '^\\n';\n }\n }\n return codeblock;\n}\nexport class TomlError extends Error {\n line;\n column;\n codeblock;\n constructor(message, options) {\n const [line, column] = getLineColFromPtr(options.toml, options.ptr);\n const codeblock = makeCodeBlock(options.toml, line, column);\n super(`Invalid TOML document: ${message}\\n\\n${codeblock}`, options);\n this.line = line;\n this.column = column;\n this.codeblock = codeblock;\n }\n}\n", "/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { TomlError } from './error.js';\nfunction isEscaped(str, ptr) {\n let i = 0;\n while (str[ptr - ++i] === '\\\\')\n ;\n return --i && (i % 2);\n}\nexport function indexOfNewline(str, start = 0, end = str.length) {\n let idx = str.indexOf('\\n', start);\n if (str[idx - 1] === '\\r')\n idx--;\n return idx <= end ? idx : -1;\n}\nexport function skipComment(str, ptr) {\n for (let i = ptr; i < str.length; i++) {\n let c = str[i];\n if (c === '\\n')\n return i;\n if (c === '\\r' && str[i + 1] === '\\n')\n return i + 1;\n if ((c < '\\x20' && c !== '\\t') || c === '\\x7f') {\n throw new TomlError('control characters are not allowed in comments', {\n toml: str,\n ptr: ptr,\n });\n }\n }\n return str.length;\n}\nexport function skipVoid(str, ptr, banNewLines, banComments) {\n let c;\n while (1) {\n while ((c = str[ptr]) === ' ' || c === '\\t' || (!banNewLines && (c === '\\n' || c === '\\r' && str[ptr + 1] === '\\n')))\n ptr++;\n // Tucking the return statement here would save 5 characters >:)\n // But TypeScript fails to detect there is no way to exit the loop so it complains about the lack of final return\n if (banComments || c !== '#')\n break;\n ptr = skipComment(str, ptr);\n }\n return ptr;\n}\nexport function skipUntil(str, ptr, sep, end, banNewLines = false) {\n if (!end) {\n ptr = indexOfNewline(str, ptr);\n return ptr < 0 ? str.length : ptr;\n }\n for (let i = ptr; i < str.length; i++) {\n let c = str[i];\n if (c === '#') {\n i = indexOfNewline(str, i);\n }\n else if (c === sep) {\n return i + 1;\n }\n else if (c === end || (banNewLines && (c === '\\n' || (c === '\\r' && str[i + 1] === '\\n')))) {\n return i;\n }\n }\n throw new TomlError('cannot find end of structure', {\n toml: str,\n ptr: ptr\n });\n}\nexport function getStringEnd(str, seek) {\n let first = str[seek];\n let target = first === str[seek + 1] && str[seek + 1] === str[seek + 2]\n ? str.slice(seek, seek + 3)\n : first;\n seek += target.length - 1;\n do\n seek = str.indexOf(target, ++seek);\n while (seek > -1 && first !== \"'\" && isEscaped(str, seek));\n if (seek > -1) {\n seek += target.length;\n if (target.length > 1) {\n if (str[seek] === first)\n seek++;\n if (str[seek] === first)\n seek++;\n }\n }\n return seek;\n}\n", "/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nlet DATE_TIME_RE = /^(\\d{4}-\\d{2}-\\d{2})?[T ]?(?:(\\d{2}):\\d{2}(?::\\d{2}(?:\\.\\d+)?)?)?(Z|[-+]\\d{2}:\\d{2})?$/i;\nexport class TomlDate extends Date {\n #hasDate = false;\n #hasTime = false;\n #offset = null;\n constructor(date) {\n let hasDate = true;\n let hasTime = true;\n let offset = 'Z';\n if (typeof date === 'string') {\n let match = date.match(DATE_TIME_RE);\n if (match) {\n if (!match[1]) {\n hasDate = false;\n date = `0000-01-01T${date}`;\n }\n hasTime = !!match[2];\n // Make sure to use T instead of a space. Breaks in case of extreme values otherwise.\n hasTime && date[10] === ' ' && (date = date.replace(' ', 'T'));\n // Do not allow rollover hours.\n if (match[2] && +match[2] > 23) {\n date = '';\n }\n else {\n offset = match[3] || null;\n date = date.toUpperCase();\n if (!offset && hasTime)\n date += 'Z';\n }\n }\n else {\n date = '';\n }\n }\n super(date);\n if (!isNaN(this.getTime())) {\n this.#hasDate = hasDate;\n this.#hasTime = hasTime;\n this.#offset = offset;\n }\n }\n isDateTime() {\n return this.#hasDate && this.#hasTime;\n }\n isLocal() {\n return !this.#hasDate || !this.#hasTime || !this.#offset;\n }\n isDate() {\n return this.#hasDate && !this.#hasTime;\n }\n isTime() {\n return this.#hasTime && !this.#hasDate;\n }\n isValid() {\n return this.#hasDate || this.#hasTime;\n }\n toISOString() {\n let iso = super.toISOString();\n // Local Date\n if (this.isDate())\n return iso.slice(0, 10);\n // Local Time\n if (this.isTime())\n return iso.slice(11, 23);\n // Local DateTime\n if (this.#offset === null)\n return iso.slice(0, -1);\n // Offset DateTime\n if (this.#offset === 'Z')\n return iso;\n // This part is quite annoying: JS strips the original timezone from the ISO string representation\n // Instead of using a \"modified\" date and \"Z\", we restore the representation \"as authored\"\n let offset = (+(this.#offset.slice(1, 3)) * 60) + +(this.#offset.slice(4, 6));\n offset = this.#offset[0] === '-' ? offset : -offset;\n let offsetDate = new Date(this.getTime() - (offset * 60e3));\n return offsetDate.toISOString().slice(0, -1) + this.#offset;\n }\n static wrapAsOffsetDateTime(jsDate, offset = 'Z') {\n let date = new TomlDate(jsDate);\n date.#offset = offset;\n return date;\n }\n static wrapAsLocalDateTime(jsDate) {\n let date = new TomlDate(jsDate);\n date.#offset = null;\n return date;\n }\n static wrapAsLocalDate(jsDate) {\n let date = new TomlDate(jsDate);\n date.#hasTime = false;\n date.#offset = null;\n return date;\n }\n static wrapAsLocalTime(jsDate) {\n let date = new TomlDate(jsDate);\n date.#hasDate = false;\n date.#offset = null;\n return date;\n }\n}\n", "/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { skipVoid } from './util.js';\nimport { TomlDate } from './date.js';\nimport { TomlError } from './error.js';\nlet INT_REGEX = /^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\\d(_?\\d)*))$/;\nlet FLOAT_REGEX = /^[+-]?\\d(_?\\d)*(\\.\\d(_?\\d)*)?([eE][+-]?\\d(_?\\d)*)?$/;\nlet LEADING_ZERO = /^[+-]?0[0-9_]/;\nlet ESCAPE_REGEX = /^[0-9a-f]{2,8}$/i;\nlet ESC_MAP = {\n b: '\\b',\n t: '\\t',\n n: '\\n',\n f: '\\f',\n r: '\\r',\n e: '\\x1b',\n '\"': '\"',\n '\\\\': '\\\\',\n};\nexport function parseString(str, ptr = 0, endPtr = str.length) {\n let isLiteral = str[ptr] === '\\'';\n let isMultiline = str[ptr++] === str[ptr] && str[ptr] === str[ptr + 1];\n if (isMultiline) {\n endPtr -= 2;\n if (str[ptr += 2] === '\\r')\n ptr++;\n if (str[ptr] === '\\n')\n ptr++;\n }\n let tmp = 0;\n let isEscape;\n let parsed = '';\n let sliceStart = ptr;\n while (ptr < endPtr - 1) {\n let c = str[ptr++];\n if (c === '\\n' || (c === '\\r' && str[ptr] === '\\n')) {\n if (!isMultiline) {\n throw new TomlError('newlines are not allowed in strings', {\n toml: str,\n ptr: ptr - 1,\n });\n }\n }\n else if ((c < '\\x20' && c !== '\\t') || c === '\\x7f') {\n throw new TomlError('control characters are not allowed in strings', {\n toml: str,\n ptr: ptr - 1,\n });\n }\n if (isEscape) {\n isEscape = false;\n if (c === 'x' || c === 'u' || c === 'U') {\n // Unicode escape\n let code = str.slice(ptr, (ptr += (c === 'x' ? 2 : c === 'u' ? 4 : 8)));\n if (!ESCAPE_REGEX.test(code)) {\n throw new TomlError('invalid unicode escape', {\n toml: str,\n ptr: tmp,\n });\n }\n try {\n parsed += String.fromCodePoint(parseInt(code, 16));\n }\n catch {\n throw new TomlError('invalid unicode escape', {\n toml: str,\n ptr: tmp,\n });\n }\n }\n else if (isMultiline && (c === '\\n' || c === ' ' || c === '\\t' || c === '\\r')) {\n // Multiline escape\n ptr = skipVoid(str, ptr - 1, true);\n if (str[ptr] !== '\\n' && str[ptr] !== '\\r') {\n throw new TomlError('invalid escape: only line-ending whitespace may be escaped', {\n toml: str,\n ptr: tmp,\n });\n }\n ptr = skipVoid(str, ptr);\n }\n else if (c in ESC_MAP) {\n // Classic escape\n parsed += ESC_MAP[c];\n }\n else {\n throw new TomlError('unrecognized escape sequence', {\n toml: str,\n ptr: tmp,\n });\n }\n sliceStart = ptr;\n }\n else if (!isLiteral && c === '\\\\') {\n tmp = ptr - 1;\n isEscape = true;\n parsed += str.slice(sliceStart, tmp);\n }\n }\n return parsed + str.slice(sliceStart, endPtr - 1);\n}\nexport function parseValue(value, toml, ptr, integersAsBigInt) {\n // Constant values\n if (value === 'true')\n return true;\n if (value === 'false')\n return false;\n if (value === '-inf')\n return -Infinity;\n if (value === 'inf' || value === '+inf')\n return Infinity;\n if (value === 'nan' || value === '+nan' || value === '-nan')\n return NaN;\n // Avoid FP representation of -0\n if (value === '-0')\n return integersAsBigInt ? 0n : 0;\n // Numbers\n let isInt = INT_REGEX.test(value);\n if (isInt || FLOAT_REGEX.test(value)) {\n if (LEADING_ZERO.test(value)) {\n throw new TomlError('leading zeroes are not allowed', {\n toml: toml,\n ptr: ptr,\n });\n }\n value = value.replace(/_/g, '');\n let numeric = +value;\n if (isNaN(numeric)) {\n throw new TomlError('invalid number', {\n toml: toml,\n ptr: ptr,\n });\n }\n if (isInt) {\n if ((isInt = !Number.isSafeInteger(numeric)) && !integersAsBigInt) {\n throw new TomlError('integer value cannot be represented losslessly', {\n toml: toml,\n ptr: ptr,\n });\n }\n if (isInt || integersAsBigInt === true)\n numeric = BigInt(value);\n }\n return numeric;\n }\n const date = new TomlDate(value);\n if (!date.isValid()) {\n throw new TomlError('invalid value', {\n toml: toml,\n ptr: ptr,\n });\n }\n return date;\n}\n", "/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { parseString, parseValue } from './primitive.js';\nimport { parseArray, parseInlineTable } from './struct.js';\nimport { skipVoid, skipUntil, skipComment, getStringEnd } from './util.js';\nimport { TomlError } from './error.js';\nfunction sliceAndTrimEndOf(str, startPtr, endPtr) {\n let value = str.slice(startPtr, endPtr);\n let commentIdx = value.indexOf('#');\n if (commentIdx > -1) {\n // The call to skipComment allows to \"validate\" the comment\n // (absence of control characters)\n skipComment(str, commentIdx);\n value = value.slice(0, commentIdx);\n }\n return [value.trimEnd(), commentIdx];\n}\nexport function extractValue(str, ptr, end, depth, integersAsBigInt) {\n if (depth === 0) {\n throw new TomlError('document contains excessively nested structures. aborting.', {\n toml: str,\n ptr: ptr\n });\n }\n let c = str[ptr];\n if (c === '[' || c === '{') {\n let [value, endPtr] = c === '['\n ? parseArray(str, ptr, depth, integersAsBigInt)\n : parseInlineTable(str, ptr, depth, integersAsBigInt);\n if (end) {\n endPtr = skipVoid(str, endPtr);\n if (str[endPtr] === ',')\n endPtr++;\n else if (str[endPtr] !== end) {\n throw new TomlError('expected comma or end of structure', {\n toml: str,\n ptr: endPtr,\n });\n }\n }\n return [value, endPtr];\n }\n let endPtr;\n if (c === '\"' || c === \"'\") {\n endPtr = getStringEnd(str, ptr);\n let parsed = parseString(str, ptr, endPtr);\n if (end) {\n endPtr = skipVoid(str, endPtr);\n if (str[endPtr] && str[endPtr] !== ',' && str[endPtr] !== end && str[endPtr] !== '\\n' && str[endPtr] !== '\\r') {\n throw new TomlError('unexpected character encountered', {\n toml: str,\n ptr: endPtr,\n });\n }\n endPtr += (+(str[endPtr] === ','));\n }\n return [parsed, endPtr];\n }\n endPtr = skipUntil(str, ptr, ',', end);\n let slice = sliceAndTrimEndOf(str, ptr, endPtr - (+(str[endPtr - 1] === ',')));\n if (!slice[0]) {\n throw new TomlError('incomplete key-value declaration: no value specified', {\n toml: str,\n ptr: ptr\n });\n }\n if (end && slice[1] > -1) {\n endPtr = skipVoid(str, ptr + slice[1]);\n endPtr += +(str[endPtr] === ',');\n }\n return [\n parseValue(slice[0], str, ptr, integersAsBigInt),\n endPtr,\n ];\n}\n", "/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { parseString } from './primitive.js';\nimport { extractValue } from './extract.js';\nimport { getStringEnd, indexOfNewline, skipComment, skipVoid } from './util.js';\nimport { TomlError } from './error.js';\nlet KEY_PART_RE = /^[a-zA-Z0-9-_]+[ \\t]*$/;\nexport function parseKey(str, ptr, end = '=') {\n let dot = ptr - 1;\n let parsed = [];\n let endPtr = str.indexOf(end, ptr);\n if (endPtr < 0) {\n throw new TomlError('incomplete key-value: cannot find end of key', {\n toml: str,\n ptr: ptr,\n });\n }\n do {\n let c = str[ptr = ++dot];\n // If it's whitespace, ignore\n if (c !== ' ' && c !== '\\t') {\n // If it's a string\n if (c === '\"' || c === '\\'') {\n if (c === str[ptr + 1] && c === str[ptr + 2]) {\n throw new TomlError('multiline strings are not allowed in keys', {\n toml: str,\n ptr: ptr,\n });\n }\n let eos = getStringEnd(str, ptr);\n if (eos < 0) {\n throw new TomlError('unfinished string encountered', {\n toml: str,\n ptr: ptr,\n });\n }\n dot = str.indexOf('.', eos);\n let strEnd = str.slice(eos, dot < 0 || dot > endPtr ? endPtr : dot);\n let newLine = indexOfNewline(strEnd);\n if (newLine > -1) {\n throw new TomlError('newlines are not allowed in keys', {\n toml: str,\n ptr: ptr + dot + newLine,\n });\n }\n if (strEnd.trimStart()) {\n throw new TomlError('found extra tokens after the string part', {\n toml: str,\n ptr: eos,\n });\n }\n if (endPtr < eos) {\n endPtr = str.indexOf(end, eos);\n if (endPtr < 0) {\n throw new TomlError('incomplete key-value: cannot find end of key', {\n toml: str,\n ptr: ptr,\n });\n }\n }\n parsed.push(parseString(str, ptr, eos));\n }\n else {\n // Normal raw key part consumption and validation\n dot = str.indexOf('.', ptr);\n let part = str.slice(ptr, dot < 0 || dot > endPtr ? endPtr : dot);\n if (!KEY_PART_RE.test(part)) {\n throw new TomlError('only letter, numbers, dashes and underscores are allowed in keys', {\n toml: str,\n ptr: ptr,\n });\n }\n parsed.push(part.trimEnd());\n }\n }\n // Until there's no more dot\n } while (dot + 1 && dot < endPtr);\n return [parsed, skipVoid(str, endPtr + 1, true, true)];\n}\nexport function parseInlineTable(str, ptr, depth, integersAsBigInt) {\n let res = {};\n let seen = new Set();\n let c;\n ptr++;\n while ((c = str[ptr++]) !== '}' && c) {\n if (c === ',') {\n throw new TomlError('expected value, found comma', {\n toml: str,\n ptr: ptr - 1,\n });\n }\n else if (c === '#')\n ptr = skipComment(str, ptr);\n else if (c !== ' ' && c !== '\\t' && c !== '\\n' && c !== '\\r') {\n let k;\n let t = res;\n let hasOwn = false;\n let [key, keyEndPtr] = parseKey(str, ptr - 1);\n for (let i = 0; i < key.length; i++) {\n if (i)\n t = hasOwn ? t[k] : (t[k] = {});\n k = key[i];\n if ((hasOwn = Object.hasOwn(t, k)) && (typeof t[k] !== 'object' || seen.has(t[k]))) {\n throw new TomlError('trying to redefine an already defined value', {\n toml: str,\n ptr: ptr,\n });\n }\n if (!hasOwn && k === '__proto__') {\n Object.defineProperty(t, k, { enumerable: true, configurable: true, writable: true });\n }\n }\n if (hasOwn) {\n throw new TomlError('trying to redefine an already defined value', {\n toml: str,\n ptr: ptr,\n });\n }\n let [value, valueEndPtr] = extractValue(str, keyEndPtr, '}', depth - 1, integersAsBigInt);\n seen.add(value);\n t[k] = value;\n ptr = valueEndPtr;\n }\n }\n if (!c) {\n throw new TomlError('unfinished table encountered', {\n toml: str,\n ptr: ptr,\n });\n }\n return [res, ptr];\n}\nexport function parseArray(str, ptr, depth, integersAsBigInt) {\n let res = [];\n let c;\n ptr++;\n while ((c = str[ptr++]) !== ']' && c) {\n if (c === ',') {\n throw new TomlError('expected value, found comma', {\n toml: str,\n ptr: ptr - 1,\n });\n }\n else if (c === '#')\n ptr = skipComment(str, ptr);\n else if (c !== ' ' && c !== '\\t' && c !== '\\n' && c !== '\\r') {\n let e = extractValue(str, ptr - 1, ']', depth - 1, integersAsBigInt);\n res.push(e[0]);\n ptr = e[1];\n }\n }\n if (!c) {\n throw new TomlError('unfinished array encountered', {\n toml: str,\n ptr: ptr,\n });\n }\n return [res, ptr];\n}\n", "/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { parseKey } from './struct.js';\nimport { extractValue } from './extract.js';\nimport { skipVoid } from './util.js';\nimport { TomlError } from './error.js';\nfunction peekTable(key, table, meta, type) {\n let t = table;\n let m = meta;\n let k;\n let hasOwn = false;\n let state;\n for (let i = 0; i < key.length; i++) {\n if (i) {\n t = hasOwn ? t[k] : (t[k] = {});\n m = (state = m[k]).c;\n if (type === 0 /* Type.DOTTED */ && (state.t === 1 /* Type.EXPLICIT */ || state.t === 2 /* Type.ARRAY */)) {\n return null;\n }\n if (state.t === 2 /* Type.ARRAY */) {\n let l = t.length - 1;\n t = t[l];\n m = m[l].c;\n }\n }\n k = key[i];\n if ((hasOwn = Object.hasOwn(t, k)) && m[k]?.t === 0 /* Type.DOTTED */ && m[k]?.d) {\n return null;\n }\n if (!hasOwn) {\n if (k === '__proto__') {\n Object.defineProperty(t, k, { enumerable: true, configurable: true, writable: true });\n Object.defineProperty(m, k, { enumerable: true, configurable: true, writable: true });\n }\n m[k] = {\n t: i < key.length - 1 && type === 2 /* Type.ARRAY */\n ? 3 /* Type.ARRAY_DOTTED */\n : type,\n d: false,\n i: 0,\n c: {},\n };\n }\n }\n state = m[k];\n if (state.t !== type && !(type === 1 /* Type.EXPLICIT */ && state.t === 3 /* Type.ARRAY_DOTTED */)) {\n // Bad key type!\n return null;\n }\n if (type === 2 /* Type.ARRAY */) {\n if (!state.d) {\n state.d = true;\n t[k] = [];\n }\n t[k].push(t = {});\n state.c[state.i++] = (state = { t: 1 /* Type.EXPLICIT */, d: false, i: 0, c: {} });\n }\n if (state.d) {\n // Redefining a table!\n return null;\n }\n state.d = true;\n if (type === 1 /* Type.EXPLICIT */) {\n t = hasOwn ? t[k] : (t[k] = {});\n }\n else if (type === 0 /* Type.DOTTED */ && hasOwn) {\n return null;\n }\n return [k, t, state.c];\n}\nexport function parse(toml, { maxDepth = 1000, integersAsBigInt } = {}) {\n let res = {};\n let meta = {};\n let tbl = res;\n let m = meta;\n for (let ptr = skipVoid(toml, 0); ptr < toml.length;) {\n if (toml[ptr] === '[') {\n let isTableArray = toml[++ptr] === '[';\n let k = parseKey(toml, ptr += +isTableArray, ']');\n if (isTableArray) {\n if (toml[k[1] - 1] !== ']') {\n throw new TomlError('expected end of table declaration', {\n toml: toml,\n ptr: k[1] - 1,\n });\n }\n k[1]++;\n }\n let p = peekTable(k[0], res, meta, isTableArray ? 2 /* Type.ARRAY */ : 1 /* Type.EXPLICIT */);\n if (!p) {\n throw new TomlError('trying to redefine an already defined table or value', {\n toml: toml,\n ptr: ptr,\n });\n }\n m = p[2];\n tbl = p[1];\n ptr = k[1];\n }\n else {\n let k = parseKey(toml, ptr);\n let p = peekTable(k[0], tbl, m, 0 /* Type.DOTTED */);\n if (!p) {\n throw new TomlError('trying to redefine an already defined table or value', {\n toml: toml,\n ptr: ptr,\n });\n }\n let v = extractValue(toml, k[1], void 0, maxDepth, integersAsBigInt);\n p[1][p[0]] = v[0];\n ptr = v[1];\n }\n ptr = skipVoid(toml, ptr, true);\n if (toml[ptr] && toml[ptr] !== '\\n' && toml[ptr] !== '\\r') {\n throw new TomlError('each key-value declaration must be followed by an end-of-line', {\n toml: toml,\n ptr: ptr\n });\n }\n ptr = skipVoid(toml, ptr);\n }\n return res;\n}\n", "/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nlet BARE_KEY = /^[a-z0-9-_]+$/i;\nfunction extendedTypeOf(obj) {\n let type = typeof obj;\n if (type === 'object') {\n if (Array.isArray(obj))\n return 'array';\n if (obj instanceof Date)\n return 'date';\n }\n return type;\n}\nfunction isArrayOfTables(obj) {\n for (let i = 0; i < obj.length; i++) {\n if (extendedTypeOf(obj[i]) !== 'object')\n return false;\n }\n return obj.length != 0;\n}\nfunction formatString(s) {\n return JSON.stringify(s).replace(/\\x7f/g, '\\\\u007f');\n}\nfunction stringifyValue(val, type, depth, numberAsFloat) {\n if (depth === 0) {\n throw new Error('Could not stringify the object: maximum object depth exceeded');\n }\n if (type === 'number') {\n if (isNaN(val))\n return 'nan';\n if (val === Infinity)\n return 'inf';\n if (val === -Infinity)\n return '-inf';\n if (numberAsFloat && Number.isInteger(val))\n return val.toFixed(1);\n return val.toString();\n }\n if (type === 'bigint' || type === 'boolean') {\n return val.toString();\n }\n if (type === 'string') {\n return formatString(val);\n }\n if (type === 'date') {\n if (isNaN(val.getTime())) {\n throw new TypeError('cannot serialize invalid date');\n }\n return val.toISOString();\n }\n if (type === 'object') {\n return stringifyInlineTable(val, depth, numberAsFloat);\n }\n if (type === 'array') {\n return stringifyArray(val, depth, numberAsFloat);\n }\n}\nfunction stringifyInlineTable(obj, depth, numberAsFloat) {\n let keys = Object.keys(obj);\n if (keys.length === 0)\n return '{}';\n let res = '{ ';\n for (let i = 0; i < keys.length; i++) {\n let k = keys[i];\n if (i)\n res += ', ';\n res += BARE_KEY.test(k) ? k : formatString(k);\n res += ' = ';\n res += stringifyValue(obj[k], extendedTypeOf(obj[k]), depth - 1, numberAsFloat);\n }\n return res + ' }';\n}\nfunction stringifyArray(array, depth, numberAsFloat) {\n if (array.length === 0)\n return '[]';\n let res = '[ ';\n for (let i = 0; i < array.length; i++) {\n if (i)\n res += ', ';\n if (array[i] === null || array[i] === void 0) {\n throw new TypeError('arrays cannot contain null or undefined values');\n }\n res += stringifyValue(array[i], extendedTypeOf(array[i]), depth - 1, numberAsFloat);\n }\n return res + ' ]';\n}\nfunction stringifyArrayTable(array, key, depth, numberAsFloat) {\n if (depth === 0) {\n throw new Error('Could not stringify the object: maximum object depth exceeded');\n }\n let res = '';\n for (let i = 0; i < array.length; i++) {\n res += `${res && '\\n'}[[${key}]]\\n`;\n res += stringifyTable(0, array[i], key, depth, numberAsFloat);\n }\n return res;\n}\nfunction stringifyTable(tableKey, obj, prefix, depth, numberAsFloat) {\n if (depth === 0) {\n throw new Error('Could not stringify the object: maximum object depth exceeded');\n }\n let preamble = '';\n let tables = '';\n let keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n let k = keys[i];\n if (obj[k] !== null && obj[k] !== void 0) {\n let type = extendedTypeOf(obj[k]);\n if (type === 'symbol' || type === 'function') {\n throw new TypeError(`cannot serialize values of type '${type}'`);\n }\n let key = BARE_KEY.test(k) ? k : formatString(k);\n if (type === 'array' && isArrayOfTables(obj[k])) {\n tables += (tables && '\\n') + stringifyArrayTable(obj[k], prefix ? `${prefix}.${key}` : key, depth - 1, numberAsFloat);\n }\n else if (type === 'object') {\n let tblKey = prefix ? `${prefix}.${key}` : key;\n tables += (tables && '\\n') + stringifyTable(tblKey, obj[k], tblKey, depth - 1, numberAsFloat);\n }\n else {\n preamble += key;\n preamble += ' = ';\n preamble += stringifyValue(obj[k], type, depth, numberAsFloat);\n preamble += '\\n';\n }\n }\n }\n if (tableKey && (preamble || !tables)) // Create table only if necessary\n preamble = preamble ? `[${tableKey}]\\n${preamble}` : `[${tableKey}]`;\n return preamble && tables\n ? `${preamble}\\n${tables}`\n : preamble || tables;\n}\nexport function stringify(obj, { maxDepth = 1000, numbersAsFloat = false } = {}) {\n if (extendedTypeOf(obj) !== 'object') {\n throw new TypeError('stringify can only be called with an object');\n }\n let str = stringifyTable(0, obj, '', maxDepth, numbersAsFloat);\n if (str[str.length - 1] !== '\\n')\n return str + '\\n';\n return str;\n}\n", "/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { parse } from './parse.js';\nimport { stringify } from './stringify.js';\nimport { TomlDate } from './date.js';\nimport { TomlError } from './error.js';\nexport default { parse, stringify, TomlDate, TomlError };\nexport { parse, stringify, TomlDate, TomlError };\n", "// TOML\u3092\u8AAD\u3080\u305F\u3081\u306E\u30D7\u30E9\u30B0\u30A4\u30F3\nimport TOML from 'smol-toml';\nconst PluginTOML = {\n 'meta': {\n type: 'const',\n value: {\n pluginName: 'plugin_toml', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u540D\u524D\n description: 'TOML\u5F62\u5F0F\u306E\u30C7\u30FC\u30BF\u8AAD\u307F\u66F8\u304D\u3059\u308B\u30D7\u30E9\u30B0\u30A4\u30F3', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u8AAC\u660E\n pluginVersion: '3.7.6', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\n nakoRuntime: ['wnako', 'cnako'], // \u5BFE\u8C61\u30E9\u30F3\u30BF\u30A4\u30E0\n nakoVersion: '3.7.6' // \u8981\u6C42\u306A\u3067\u3057\u3053\u30D0\u30FC\u30B8\u30E7\u30F3\n }\n },\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n }\n },\n // @TOML\n 'TOML\u53D6\u5F97': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (s, sys) {\n return TOML.parse(s);\n }\n },\n 'TOML\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092', '\u304B\u3089', '\u306E']],\n pure: true,\n fn: function (s, sys) {\n return TOML.stringify(s);\n }\n }\n};\nexport default PluginTOML;\n", "/**\n * file: plugin_test.js\n * \u30C6\u30B9\u30C8\u5B9F\u884C\u7528\u30D7\u30E9\u30B0\u30A4\u30F3\n */\nexport default {\n 'meta': {\n type: 'const',\n value: {\n pluginName: 'plugin_test', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u540D\u524D\n description: '\u30C6\u30B9\u30C8\u3092\u63D0\u4F9B\u3059\u308B\u30D7\u30E9\u30B0\u30A4\u30F3', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u8AAC\u660E\n pluginVersion: '3.6.0', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\n nakoRuntime: ['wnako', 'cnako', 'phpnako'], // \u5BFE\u8C61\u30E9\u30F3\u30BF\u30A4\u30E0\n nakoVersion: '^3.6.0' // \u8981\u6C42\u306A\u3067\u3057\u3053\u30D0\u30FC\u30B8\u30E7\u30F3\n }\n },\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n // \u521D\u671F\u5316\u4E0D\u8981\n }\n },\n // @\u30C6\u30B9\u30C8\n 'ASSERT\u7B49': {\n type: 'func',\n josi: [['\u3068'], ['\u304C']],\n pure: true,\n fn: function (a, b) {\n if (a !== b) {\n throw new Error(`\u4E0D\u4E00\u81F4 [\u5B9F\u969B]${JSON.stringify(a)} [\u671F\u5F85]${JSON.stringify(b)}`);\n }\n return true;\n }\n },\n '\u30C6\u30B9\u30C8\u5B9F\u884C': {\n type: 'func',\n josi: [['\u3068'], ['\u3067']],\n pure: false,\n fn: function (a, b, sys) {\n sys.__exec('ASSERT\u7B49', [a, b, sys]);\n }\n },\n '\u30C6\u30B9\u30C8\u7B49': {\n type: 'func',\n josi: [['\u3068'], ['\u304C']],\n pure: false,\n fn: function (a, b, sys) {\n sys.__exec('ASSERT\u7B49', [a, b, sys]);\n }\n }\n};\n", "// parser / lexer\nimport { NakoParser } from './nako_parser3.mjs';\nimport { NakoLexer } from './nako_lexer.mjs';\nimport { NakoPrepare } from './nako_prepare.mjs';\nimport { generateJS, NakoGenOptions } from './nako_gen.mjs';\nimport { convertInlineIndent, convertIndentSyntax } from './nako_indent_inline.mjs';\nimport { convertDNCL } from './nako_from_dncl.mjs';\nimport { convertDNCL2 } from './nako_from_dncl2.mjs';\nimport { SourceMappingOfTokenization, SourceMappingOfIndentSyntax, OffsetToLineColumn, subtractSourceMapByPreCodeLength } from './nako_source_mapping.mjs';\nimport { NakoLexerError, NakoImportError, NakoSyntaxError, InternalLexerError } from './nako_errors.mjs';\nimport { NakoLogger } from './nako_logger.mjs';\nimport { NakoGlobal } from './nako_global.mjs';\n// version info\nimport coreVersion from './nako_core_version.mjs';\n// basic plugins\nimport PluginSystem from './plugin_system.mjs';\nimport PluginMath from './plugin_math.mjs';\nimport PluginCSV from './plugin_csv.mjs';\nimport PluginPromise from './plugin_promise.mjs';\nimport PluginTOML from './plugin_toml.mjs';\nimport PluginTest from './plugin_test.mjs';\nconst cloneAsJSON = (x) => JSON.parse(JSON.stringify(x));\nconst PLUGIN_MIN_VERSION_INT = 600; // = minor * 100 + patch\n/** \u30B3\u30F3\u30D1\u30A4\u30E9\u5B9F\u884C\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u751F\u6210 */\nexport function newCompilerOptions(initObj = {}) {\n if (typeof initObj !== 'object') {\n initObj = {};\n }\n initObj.testOnly = initObj.testOnly || false;\n initObj.resetEnv = initObj.resetEnv || false;\n initObj.resetAll = initObj.resetAll || false;\n initObj.preCode = initObj.preCode || '';\n initObj.nakoGlobal = initObj.nakoGlobal || null;\n return initObj;\n}\n/** \u306A\u3067\u3057\u3053\u30B3\u30F3\u30D1\u30A4\u30E9 */\nexport class NakoCompiler {\n /**\n * @param {undefined | {'useBasicPlugin':true|false}} options\n */\n constructor(options = undefined) {\n if (options === undefined) {\n options = { useBasicPlugin: true };\n }\n // \u74B0\u5883\u306E\u30EA\u30BB\u30C3\u30C8\n this.__varslist = [this.newVaiables(), this.newVaiables(), this.newVaiables()]; // \u3053\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306F\u5909\u66F4\u3057\u306A\u3044\u3053\u3068 (this.gen.__varslist \u3068\u5171\u6709\u3059\u308B)\n this.__locals = this.newVaiables(); // \u30ED\u30FC\u30AB\u30EB\u5909\u6570\n this.__self = this;\n this.__vars = this.__varslist[2]; // alias of __varslist[2]\n this.__v1 = this.__varslist[1]; // alias of __varslist[1]\n this.__v0 = this.__varslist[0]; // alias of __varslist[0]\n // \u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u8A2D\u5B9A\n this.version = coreVersion.version;\n this.coreVersion = coreVersion.version;\n this.__globals = []; // \u751F\u6210\u3057\u305F NakoGlobal \u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3092\u4FDD\u6301\n this.__globalObj = null;\n this.__module = {}; // require\u306A\u3069\u3067\u53D6\u308A\u8FBC\u3093\u3060\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u4E00\u89A7\n this.pluginFunclist = {}; // \u30D7\u30E9\u30B0\u30A4\u30F3\u3067\u5B9A\u7FA9\u3055\u308C\u305F\u95A2\u6570\n this.funclist = this.newVaiables(); // \u30D7\u30E9\u30B0\u30A4\u30F3\u3067\u5B9A\u7FA9\u3055\u308C\u305F\u95A2\u6570 + \u30E6\u30FC\u30B6\u30FC\u304C\u5B9A\u7FA9\u3057\u305F\u95A2\u6570\n this.moduleExport = this.newVaiables();\n this.pluginfiles = {}; // \u53D6\u308A\u8FBC\u3093\u3060\u30D5\u30A1\u30A4\u30EB\u4E00\u89A7\n this.commandlist = new Set(); // \u30D7\u30E9\u30B0\u30A4\u30F3\u3067\u5B9A\u7FA9\u3055\u308C\u305F\u5B9A\u6570\u30FB\u5909\u6570\u30FB\u95A2\u6570\u306E\u540D\u524D\n this.nakoFuncList = this.newVaiables(); // __v1\u306B\u914D\u7F6E\u3059\u308BJavaScript\u306E\u30B3\u30FC\u30C9\u3067\u5B9A\u7FA9\u3055\u308C\u305F\u95A2\u6570\n this.eventList = []; // \u5B9F\u884C\u524D\u306B\u74B0\u5883\u3092\u5909\u66F4\u3059\u308B\u305F\u3081\u306E\u30A4\u30D9\u30F3\u30C8\n this.codeGenerateor = {}; // \u30B3\u30FC\u30C9\u30B8\u30A7\u30CD\u30EC\u30FC\u30BF\n this.debugOption = { useDebug: false, waitTime: 0 };\n this.logger = new NakoLogger();\n this.filename = 'main.nako3';\n /**\n * \u53D6\u308A\u8FBC\u307F\u6587\u3092\u7F6E\u63DB\u3059\u308B\u305F\u3081\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3002\n * \u6B63\u898F\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u540D\u304C\u30AD\u30FC\u306B\u306A\u308A\u3001\u53D6\u308A\u8FBC\u307F\u6587\u306E\u5F15\u6570\u306B\u6307\u5B9A\u3055\u308C\u305F\u6B63\u898F\u5316\u3055\u308C\u3066\u3044\u306A\u3044\u30D5\u30A1\u30A4\u30EB\u540D\u306Falias\u306B\u5165\u308C\u3089\u308C\u308B\u3002\n * JavaScript\u30D5\u30A1\u30A4\u30EB\u306B\u3088\u308B\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u5834\u5408\u3001content\u306F\u7A7A\u6587\u5B57\u5217\u3002\n * funclist\u306F\u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u30CF\u30A4\u30E9\u30A4\u30C8\u306E\u9AD8\u901F\u5316\u306E\u305F\u3081\u306B\u4E8B\u524D\u306B\u53D6\u308A\u51FA\u3057\u305F\u3001\u30D5\u30A1\u30A4\u30EB\u304C\u5B9A\u7FA9\u3059\u308B\u95A2\u6570\u540D\u306E\u30EA\u30B9\u30C8\u3002\n */\n this.dependencies = {};\n this.usedFuncs = new Set();\n this.numFailures = 0;\n if (options.useBasicPlugin) {\n this.addBasicPlugins();\n }\n // \u5FC5\u8981\u306A\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u899A\u3048\u3066\u304A\u304F\n this.prepare = NakoPrepare.getInstance();\n this.parser = new NakoParser(this.logger);\n this.lexer = new NakoLexer(this.logger);\n // \u95A2\u6570\u4E00\u89A7\u3092\u8A2D\u5B9A\n this.lexer.setFuncList(this.funclist);\n this.lexer.setModuleExport(this.moduleExport);\n // link for plysin_system::\u4E88\u7D04\u8A9E\u4E00\u89A7\u53D6\u5F97/\u52A9\u8A5E\u4E00\u89A7\u53D6\u5F97\n this.reservedWords = JSON.parse(JSON.stringify(this.lexer.reservedWords)); // \u5916\u90E8\u516C\u958B\u7528\u306E\u30C7\u30FC\u30BF\u306A\u306E\u3067\u8907\u88FD\u3057\u3066\u4FDD\u6301\u3059\u308B\n this.josiList = JSON.parse(JSON.stringify(this.lexer.josiList));\n }\n /** \u30E2\u30B8\u30E5\u30FC\u30EB(\u540D\u524D\u7A7A\u9593)\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B */\n getModList() {\n return this.lexer.modList;\n }\n getLogger() {\n return this.logger;\n }\n getNakoFuncList() {\n return this.nakoFuncList;\n }\n getNakoFunc(name) {\n return this.nakoFuncList.get(name);\n }\n getPluginfiles() {\n return this.pluginfiles;\n }\n /**\n * \u57FA\u672C\u7684\u306A\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u8FFD\u52A0\u3059\u308B\n */\n addBasicPlugins() {\n this.addPlugin(PluginSystem);\n this.addPlugin(PluginMath);\n this.addPlugin(PluginPromise);\n this.addPlugin(PluginTest);\n this.addPlugin(PluginCSV);\n this.addPlugin(PluginTOML);\n }\n /**\n * logger\u3092\u65B0\u3057\u3044\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3067\u7F6E\u304D\u63DB\u3048\u308B\u3002\n */\n replaceLogger() {\n const logger = this.lexer.logger = this.parser.logger = this.logger = new NakoLogger();\n return logger;\n }\n /**\n * \u30D5\u30A1\u30A4\u30EB\u5185\u306Erequire\u6587\u306E\u4F4D\u7F6E\u3092\u5217\u6319\u3059\u308B\u3002\u51FA\u529B\u306E\u914D\u5217\u306Fstart\u3067\u30BD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u3002\n * @param {Token[]} tokens rawtokenize\u306E\u51FA\u529B\n */\n static listRequireStatements(tokens) {\n const requireStatements = [];\n for (let i = 0; i + 2 < tokens.length; i++) {\n // not (string|string_ex) '\u53D6\u308A\u8FBC\u307F'\n if (!(tokens[i].type === 'not' &&\n (tokens[i + 1].type === 'string' || tokens[i + 1].type === 'string_ex') &&\n tokens[i + 2].value === '\u53D6\u8FBC')) {\n continue;\n }\n // \u53D6\u308A\u8FBC\u3080\u30E9\u30A4\u30D6\u30E9\u30EA\n let filename = String(tokens[i + 1].value) + '';\n // \u5168\u89D2\u30B3\u30ED\u30F3\u300C\uFF1A\u300D\u3092\u534A\u89D2\u30B3\u30ED\u30F3\u300C:\u300D\u306B\u6B63\u898F\u5316\u3059\u308B\uFF08\u300C\u8CAF\u8535\u5EAB\uFF1A\u300D\u300C\u62E1\u5F35\u30D7\u30E9\u30B0\u30A4\u30F3\uFF1A\u300D\u306E\u8A18\u6CD5\u306B\u5BFE\u5FDC #2282\uFF09\n filename = filename.replace(/^(\u8CAF\u8535\u5EAB|\u62E1\u5F35\u30D7\u30E9\u30B0\u30A4\u30F3)\uFF1A/, '$1:');\n // \u300E\u53D6\u308A\u8FBC\u3080\u300F\u6587\u3067\u300C\u62E1\u5F35\u30D7\u30E9\u30B0\u30A4\u30F3:\u300D\u6A5F\u69CB\u3092\u8FFD\u52A0\u3059\u308B #139\n // (ex) !\u300E\u8CAF\u8535\u5EAB:ojyo-sama.nako3\u300F\u3092\u53D6\u308A\u8FBC\u3080 \u2192 https://n3s.nadesi.com/plain/ojyo-sama.nako3\n if (filename.startsWith('\u8CAF\u8535\u5EAB:') || filename.startsWith('\u8CAF\u8535\u5EAB\uFF1A')) {\n filename = `https://n3s.nadesi.com/plain/${filename.substring(4)}`;\n }\n // (ex) !\u300E\u62E1\u5F35\u30D7\u30E9\u30B0\u30A4\u30F3:music.js@1.0.2\u300F\u3092\u53D6\u308A\u8FBC\u3080 \u2192 https://cdn.jsdelivr.net/npm/nadesiko3-music@1.0.2/nadesiko3-music.js\n if (filename.startsWith('\u62E1\u5F35\u30D7\u30E9\u30B0\u30A4\u30F3:') || filename.startsWith('\u62E1\u5F35\u30D7\u30E9\u30B0\u30A4\u30F3\uFF1A')) {\n const name = filename.substring('\u62E1\u5F35\u30D7\u30E9\u30B0\u30A4\u30F3:'.length);\n const m = name.match(/^([a-zA-Z0-9_-]+)\\.(js|mjs|nako3)(@[0-9.]+)?$/);\n if (m) {\n let basename = m[1];\n const ext = m[2];\n const version = m[3] || '@latest';\n if (ext === 'js' || ext === 'mjs') {\n // JS\u30D7\u30E9\u30B0\u30A4\u30F3\n if (!basename.startsWith('nadesiko3-')) {\n basename = `nadesiko3-${basename}`;\n }\n filename = `https://cdn.jsdelivr.net/npm/${basename}${version}/${basename}.${ext}`;\n }\n else {\n // \u306A\u3067\u3057\u30533\u30D7\u30E9\u30B0\u30A4\u30F3\n filename = `https://n3s.nadesi.com/plain/${basename}.${ext}`;\n }\n }\n else {\n throw new NakoImportError('\u300E\u53D6\u8FBC\u300F\u306E\u6307\u5B9A\u30A8\u30E9\u30FC\u3002\u300E\u62E1\u5F35\u30D7\u30E9\u30B0\u30A4\u30F3:(\u30D5\u30A1\u30A4\u30EB\u540D).(js|nako3)(@ver)\u300F\u306E\u66F8\u5F0F\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002', tokens[i].file, tokens[i].line);\n }\n }\n // push\n requireStatements.push({\n ...tokens[i],\n start: i,\n end: i + 3,\n value: filename,\n firstToken: tokens[i],\n lastToken: tokens[i + 2]\n });\n i += 2;\n }\n return requireStatements;\n }\n /**\n * \u30D7\u30ED\u30B0\u30E9\u30E0\u304C\u4F9D\u5B58\u3059\u308B\u30D5\u30A1\u30A4\u30EB\u3092\u518D\u5E30\u7684\u306B\u53D6\u5F97\u3059\u308B\u3002\n * - \u4F9D\u5B58\u3059\u308B\u30D5\u30A1\u30A4\u30EB\u304CJavaScript\u30D5\u30A1\u30A4\u30EB\u306E\u5834\u5408\u3001\u305D\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u5B9F\u884C\u3057\u3066\u8A55\u4FA1\u7D50\u679C\u3092this.addPluginFile\u306B\u6E21\u3059\u3002\n * - \u4F9D\u5B58\u3059\u308B\u30D5\u30A1\u30A4\u30EB\u304C\u306A\u3067\u3057\u3053\u8A00\u8A9E\u306E\u5834\u5408\u3001\u30D5\u30A1\u30A4\u30EB\u306E\u4E2D\u8EAB\u3092\u53D6\u5F97\u3057\u3066\u5909\u6570\u306B\u4FDD\u5B58\u3057\u3001\u518D\u5E30\u3059\u308B\u3002\n *\n * @param {string} code\n * @param {string} filename\n * @param {string} preCode\n * @param {LoaderTool} tools \u5B9F\u884C\u74B0\u5883 (\u30D6\u30E9\u30A6\u30B6 or Node.js) \u306B\u3088\u3063\u3066\u5916\u90E8\u30D5\u30A1\u30A4\u30EB\u306E\u53D6\u5F97\u30FB\u5B9F\u884C\u65B9\u6CD5\u306F\u7570\u306A\u308B\u305F\u3081\u3001\u5F15\u6570\u3067\u305D\u308C\u3089\u3092\u884C\u3046\u95A2\u6570\u3092\u53D7\u3051\u53D6\u308B\u3002\n * - resolvePath \u306F\u6307\u5B9A\u3057\u305F\u540D\u524D\u3092\u3082\u3064\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22\u3057\u3001\u6B63\u898F\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u8FD4\u3059\u95A2\u6570\u3002\u8FD4\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u540D\u306FreadNako3\u304BreadJs\u306E\u5F15\u6570\u306B\u306A\u308B\u3002\n * - readNako3\u306F\u6307\u5B9A\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u306E\u4E2D\u8EAB\u3092\u8FD4\u3059\u95A2\u6570\u3002\n * - readJs\u306F\u6307\u5B9A\u3057\u305F\u30D5\u30A1\u30A4\u30EB\u3092JavaScript\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u3068\u3057\u3066\u5B9F\u884C\u3057\u3001`export default` \u3067\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3055\u308C\u305F\u5024\u3092\u8FD4\u3059\u95A2\u6570\u3002\n * @returns {Promise<unknown> | void}\n * @protected\n */\n _loadDependencies(code, filename, preCode, tools) {\n const dependencies = {};\n const compiler = new NakoCompiler({ useBasicPlugin: true });\n /**\n * @param {any} item\n * @param {any} tasks\n */\n const loadJS = (item, tasks) => {\n // js\u306A\u3089\u30D7\u30E9\u30B0\u30A4\u30F3\u3068\u3057\u3066\u8AAD\u307F\u8FBC\u3080\u3002(ESM\u3067\u306F\u5FC5\u305A\u52D5\u7684\u306B\u8AAD\u3080)\n const obj = tools.readJs(item.filePath, item.firstToken);\n tasks.push(obj.task.then((res) => {\n const pluginFuncs = res();\n this.addPluginFromFile(item.filePath, pluginFuncs);\n dependencies[item.filePath].funclist = pluginFuncs;\n dependencies[item.filePath].moduleExport = {};\n dependencies[item.filePath].addPluginFile = () => { this.addPluginFromFile(item.filePath, pluginFuncs); };\n }));\n };\n const loadNako3 = (item, tasks) => {\n // nako3\u306A\u3089\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u3093\u3067dependencies\u306B\u4FDD\u5B58\u3059\u308B\u3002\n const content = tools.readNako3(item.filePath, item.firstToken);\n const registerFile = (code) => {\n // \u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u30CF\u30A4\u30E9\u30A4\u30C8\u306E\u9AD8\u901F\u5316\u306E\u305F\u3081\u306B\u3001\u4E8B\u524D\u306B\u30D5\u30A1\u30A4\u30EB\u304C\u5B9A\u7FA9\u3059\u308B\u95A2\u6570\u540D\u306E\u30EA\u30B9\u30C8\u3092\u53D6\u308A\u51FA\u3057\u3066\u304A\u304F\u3002\n // preDefineFunc\u306F\u30C8\u30FC\u30AF\u30F3\u5217\u306B\u5909\u66F4\u3092\u52A0\u3048\u308B\u305F\u3081\u3001\u4E8B\u524D\u306B\u30AF\u30ED\u30FC\u30F3\u3057\u3066\u304A\u304F\u3002\n // \u300C\u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u8A2D\u5B9A\u300D\u3092\u884C\u3046 (#956)\n const modName = NakoLexer.filenameToModName(item.filePath);\n code = `\u300E${modName}\u300F\u306B\u540D\u524D\u7A7A\u9593\u8A2D\u5B9A;\u300E${modName}\u300F\u306B\u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u8A2D\u5B9A;` + code + ';\u540D\u524D\u7A7A\u9593\u30DD\u30C3\u30D7;';\n const tokens = this.rawtokenize(code, 0, item.filePath);\n dependencies[item.filePath].tokens = tokens;\n const funclist = new Map();\n const moduleexport = new Map();\n NakoLexer.preDefineFunc(cloneAsJSON(tokens), this.logger, funclist, moduleexport);\n dependencies[item.filePath].funclist = funclist;\n dependencies[item.filePath].moduleExport = moduleexport;\n // \u518D\u5E30\n return loadRec(code, item.filePath, '');\n };\n // \u53D6\u308A\u8FBC\u307F\u69CB\u6587\u306B\u304A\u3051\u308B\u554F\u984C\u3092\u6E1B\u3089\u3059\u305F\u3081\u3001\u5FC5\u305A\u975E\u540C\u671F\u3067\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u8AAD\u307F\u8FBC\u3080\u4ED5\u69D8\u3068\u3057\u305F #1219\n tasks.push(content.task.then((res) => registerFile(res)));\n };\n const loadRec = (code, filename, preCode) => {\n const tasks = [];\n // \u53D6\u308A\u8FBC\u307F\u304C\u5FC5\u8981\u306A\u60C5\u5831\u4E00\u89A7\u3092\u8ABF\u3079\u308B(\u30C8\u30FC\u30AF\u30F3\u5206\u5272\u3057\u3066\u3001\u53D6\u308A\u8FBC\u307F\u30BF\u30B0\u3092\u5F97\u308B)\n const tags = NakoCompiler.listRequireStatements(compiler.rawtokenize(code, 0, filename, preCode));\n // \u30D1\u30B9\u3092\u89E3\u6C7A\u3059\u308B\n const tagsResolvePath = tags.map((v) => ({ ...v, ...tools.resolvePath(v.value, v.firstToken, filename) }));\n // \u53D6\u308A\u8FBC\u307F\u958B\u59CB\n for (const item of tagsResolvePath) {\n // 2\u56DE\u76EE\u4EE5\u964D\u306E\u8AAD\u307F\u8FBC\u307F\n // eslint-disable-next-line no-prototype-builtins\n if (dependencies.hasOwnProperty(item.filePath)) {\n dependencies[item.filePath].alias.add(item.value);\n continue;\n }\n // \u521D\u56DE\u306E\u8AAD\u307F\u8FBC\u307F\n dependencies[item.filePath] = { tokens: [], alias: new Set([item.value]), addPluginFile: () => { }, funclist: {}, moduleExport: {} };\n if (item.type === 'js' || item.type === 'mjs') {\n loadJS(item, tasks);\n }\n else if (item.type === 'nako3') {\n loadNako3(item, tasks);\n }\n else {\n throw new NakoImportError(`\u30D5\u30A1\u30A4\u30EB\u300E${String(item.value)}\u300F\u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093\u3002\u30D5\u30A1\u30A4\u30EB\u304C\u5B58\u5728\u3057\u306A\u3044\u304B\u672A\u5BFE\u5FDC\u306E\u62E1\u5F35\u5B50\u3067\u3059\u3002`, item.firstToken.file, item.firstToken.line);\n }\n }\n if (tasks.length > 0) {\n return Promise.all(tasks);\n }\n return undefined;\n };\n try {\n const result = loadRec(code, filename, preCode);\n // \u975E\u540C\u671F\u306A\u5834\u5408\u306E\u30A8\u30E9\u30FC\u30CF\u30F3\u30C9\u30EA\u30F3\u30B0\n if (result !== undefined) {\n result.catch((err) => {\n // \u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557\u3057\u305F\u3089\u51E6\u7406\u3092\u4E2D\u65AD\u3059\u308B\n this.logger.error(err.msg);\n this.numFailures++;\n });\n }\n // \u3059\u3079\u3066\u304C\u7D42\u308F\u3063\u3066\u304B\u3089this.dependencies\u306B\u4EE3\u5165\u3059\u308B\u3002\u305D\u3046\u3057\u306A\u3044\u3068\u3001\u300C\u5B9F\u884C\u300D\u30DC\u30BF\u30F3\u3092\u9023\u6253\u3057\u305F\u5834\u5408\u306A\u3069\u3001\n // loadDependencies() \u304C\u4E26\u5217\u5B9F\u884C\u3055\u308C\u308B\u3068\u304D\u306B\u6B63\u3057\u304F\u52D5\u4F5C\u3057\u306A\u3044\u3002\n this.dependencies = dependencies;\n return result;\n }\n catch (err) {\n // \u540C\u671F\u51E6\u7406\u3067\u306F\u7D20\u76F4\u306B\u4F8B\u5916\u3092\u6295\u3052\u308B\n this.logger.error(String(err));\n throw err;\n }\n }\n /**\n * \u30B3\u30FC\u30C9\u3092\u5358\u8A9E\u306B\u5206\u5272\u3059\u308B\n * @param code \u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\n * @param line \u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u306E\u884C\u756A\u53F7\n * @param filename\n * @param preCode\n * @returns \u30C8\u30FC\u30AF\u30F3\u306E\u30EA\u30B9\u30C8\n */\n rawtokenize(code, line, filename, preCode = '') {\n if (!code.startsWith(preCode)) {\n throw new Error('code\u306E\u5148\u982D\u306B\u306FpreCode\u3092\u542B\u3081\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n // \u540D\u524D\u7A7A\u9593\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u30EA\u30B9\u30C8\u306B\u81EA\u8EAB\u3092\u8FFD\u52A0\n const modName = NakoLexer.filenameToModName(filename);\n const modList = this.getModList();\n if (modList.indexOf(modName) < 0) {\n modList.unshift(modName);\n }\n // \u5168\u89D2\u534A\u89D2\u306E\u7D71\u4E00\u51E6\u7406\n const preprocessed = this.prepare.convert(code);\n const tokenizationSourceMapping = new SourceMappingOfTokenization(code.length, preprocessed);\n const indentationSyntaxSourceMapping = new SourceMappingOfIndentSyntax(code, [], []);\n const offsetToLineColumn = new OffsetToLineColumn(code);\n // \u30C8\u30FC\u30AF\u30F3\u5206\u5272\n let tokens;\n try {\n tokens = this.lexer.tokenize(preprocessed.map((v) => v.text).join(''), line, filename);\n }\n catch (err) {\n if (!(err instanceof InternalLexerError)) {\n throw err;\n }\n // \u30A8\u30E9\u30FC\u4F4D\u7F6E\u3092\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u4E0A\u306E\u4F4D\u7F6E\u306B\u5909\u63DB\u3057\u3066\u8FD4\u3059\n const dest = indentationSyntaxSourceMapping.map(tokenizationSourceMapping.map(err.preprocessedCodeStartOffset), tokenizationSourceMapping.map(err.preprocessedCodeEndOffset));\n const line = dest.startOffset === null ? err.line : offsetToLineColumn.map(dest.startOffset, false).line;\n const map = subtractSourceMapByPreCodeLength({ ...dest, line }, preCode);\n throw new NakoLexerError(err.msg, map.startOffset, map.endOffset, map.line, filename);\n }\n // DNCL ver2 (core #41)\n tokens = convertDNCL2(tokens);\n // DNCL ver1 (#1140)\n tokens = convertDNCL(tokens);\n // \u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u3092\u5909\u63DB #596\n tokens = convertIndentSyntax(tokens);\n // \u30A4\u30F3\u30E9\u30A4\u30F3\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u5909\u63DB #1215\n tokens = convertInlineIndent(tokens);\n // \u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u4E0A\u306E\u4F4D\u7F6E\u306B\u5909\u63DB\n tokens = tokens.map((token) => {\n const dest = indentationSyntaxSourceMapping.map(tokenizationSourceMapping.map(token.preprocessedCodeOffset || 0), tokenizationSourceMapping.map((token.preprocessedCodeOffset || 0) + (token.preprocessedCodeLength || 0)));\n let line = token.line;\n let column = 0;\n if (token.type === 'eol' && dest.endOffset !== null) {\n // eol\u306Fnako_gen\u3067 `line = ${eolToken.line};` \u306B\u5909\u63DB\u3055\u308C\u308B\u305F\u3081\u3001\n // \u884C\u672B\u306Eeol\u306Eline\u306F\u6B21\u306E\u884C\u306E\u884C\u6570\u3092\u8868\u3059\u5FC5\u8981\u304C\u3042\u308B\u3002\n const out = offsetToLineColumn.map(dest.endOffset, false);\n line = out.line;\n column = out.column;\n }\n else if (dest.startOffset !== null) {\n const out = offsetToLineColumn.map(dest.startOffset, false);\n line = out.line;\n column = out.column;\n }\n return {\n ...token,\n ...subtractSourceMapByPreCodeLength({ line, column, startOffset: dest.startOffset, endOffset: dest.endOffset }, preCode),\n rawJosi: token.josi\n };\n });\n return tokens;\n }\n /**\n * \u5358\u8A9E\u306E\u5C5E\u6027\u3092\u69CB\u6587\u89E3\u6790\u306B\u5148\u7ACB\u3061\u88DC\u6B63\u3059\u308B\n * @param {Token[]} tokens \u30C8\u30FC\u30AF\u30F3\u306E\u30EA\u30B9\u30C8\n * @param {boolean} isFirst \u6700\u521D\u306E\u547C\u3073\u51FA\u3057\u304B\u3069\u3046\u304B\n * @param {string} filename\n * @returns \u30B3\u30FC\u30C9 (\u306A\u3067\u3057\u3053)\n */\n converttoken(tokens, isFirst, filename) {\n const tok = this.lexer.replaceTokens(tokens, isFirst, filename);\n return tok;\n }\n /**\n * \u74B0\u5883\u306E\u30EA\u30BB\u30C3\u30C8\n * {NakoResetOption|undefined}\n */\n reset(options = undefined) {\n if (!options || options.needToClearPlugin) {\n // (\u30E1\u30E2) #1245\n // \u901A\u5E38\u3001\u30EA\u30BB\u30C3\u30C8\u51E6\u7406\u3067\u306F\u3001\u30D7\u30E9\u30B0\u30A4\u30F3\u306E!\u30AF\u30EA\u30A2\u3092\u547C\u3076\u3002\n // \u3057\u304B\u3057\u3001\u30A8\u30C7\u30A3\u30BF\u3067\u306F\u30AF\u30EA\u30A2\u30A4\u30D9\u30F3\u30C8\u3092\u547C\u3076\u3068\u3001\u6642\u8A08\u306A\u3069\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304C\u6B62\u307E\u3063\u3066\u3057\u307E\u3046\n // \u305D\u306E\u305F\u3081\u3001\u4F8B\u5916\u7684\u306B\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u6307\u5B9A\u3059\u308B\u3068\u3001\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30AF\u30EA\u30A2\u30A4\u30D9\u30F3\u30C8\u3092\u547C\u3070\u306A\u3044\n try {\n this.clearPlugins();\n }\n catch (_) {\n // pass\n }\n }\n /**\n * \u306A\u3067\u3057\u3053\u306E\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092\u30B9\u30BF\u30C3\u30AF\u3067\u7BA1\u7406\n * __varslist[0] \u30D7\u30E9\u30B0\u30A4\u30F3\u9818\u57DF\n * __varslist[1] \u306A\u3067\u3057\u3053\u30B0\u30ED\u30FC\u30D0\u30EB\u9818\u57DF\n * __varslist[2] \u6700\u521D\u306E\u30ED\u30FC\u30AB\u30EB\u5909\u6570 ( == __vars }\n */\n this.__varslist = [this.__varslist[0], this.newVaiables(), this.newVaiables()];\n this.__v0 = this.__varslist[0]; // alias of __varslist[0]\n this.__v1 = this.__varslist[1]; // alias of __varslist[1]\n this.__vars = this.__varslist[2]; // alias of __varslist[2]\n this.__locals = this.newVaiables();\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u547D\u4EE4\u4EE5\u5916\u3092\u524A\u9664\u3059\u308B\u3002\n this.funclist = new Map();\n for (const name of this.__v0.keys()) {\n const original = this.pluginFunclist[name]; // record\n if (!original) {\n continue;\n }\n this.funclist.set(name, JSON.parse(JSON.stringify(original)));\n }\n this.lexer.setFuncList(this.funclist);\n this.moduleExport = new Map();\n this.lexer.setModuleExport(this.moduleExport);\n this.logger.clear();\n }\n /**\n * type\u304Ccode\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u5358\u8A9E\u306B\u5206\u5272\u3059\u308B\u305F\u3081\u306E\u51E6\u7406\n * @param {string} code\n * @param {number} line\n * @param {string} filename\n * @param {number | null} startOffset\n * @returns\n * @private\n */\n lexCodeToken(code, line, filename, startOffset) {\n // \u5358\u8A9E\u306B\u5206\u5272\n let tokens = this.rawtokenize(code, line, filename, '');\n // \u6587\u5B57\u5217\u5185\u4F4D\u7F6E\u304B\u3089\u30D5\u30A1\u30A4\u30EB\u5185\u4F4D\u7F6E\u3078\u5909\u63DB\n if (startOffset === null) {\n for (const token of tokens) {\n token.startOffset = undefined;\n token.endOffset = undefined;\n }\n }\n else {\n for (const token of tokens) {\n if (token.startOffset !== undefined) {\n token.startOffset += startOffset;\n }\n if (token.endOffset !== undefined) {\n token.endOffset += startOffset;\n }\n }\n }\n // convertToken\u3067\u6D88\u3055\u308C\u308B\u30B3\u30E1\u30F3\u30C8\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u6B8B\u3059\n const commentTokens = tokens.filter((t) => t.type === 'line_comment' || t.type === 'range_comment')\n .map((v) => ({ ...v })); // clone\n tokens = this.converttoken(tokens, false, filename);\n return { tokens, commentTokens };\n }\n /**\n * \u518D\u5E30\u7684\u306Brequire\u6587\u3092\u7F6E\u63DB\u3059\u308B\u3002\n * .js\u3067\u3042\u308C\u3070\u524A\u9664\u3057\u3001.nako3\u3067\u3042\u308C\u3070\u305D\u306E\u30D5\u30A1\u30A4\u30EB\u306E\u30C8\u30FC\u30AF\u30F3\u5217\u3067\u7F6E\u63DB\u3059\u308B\u3002\n * @param {TokenWithSourceMap[]} tokens\n * @param {Set<string>} [includeGuard]\n * @returns {Token[]} \u524A\u9664\u3055\u308C\u305F\u53D6\u308A\u8FBC\u307F\u6587\u306E\u30C8\u30FC\u30AF\u30F3\n */\n replaceRequireStatements(tokens, includeGuard = new Set()) {\n /** @type {TokenWithSourceMap[]} */\n const deletedTokens = [];\n for (const r of NakoCompiler.listRequireStatements(tokens).reverse()) {\n // C\u8A00\u8A9E\u306Einclude guard\u3068\u540C\u3058\u4ED5\u7D44\u307F\u3067\u7121\u9650\u30EB\u30FC\u30D7\u3092\u9632\u3050\u3002\n if (includeGuard.has(r.value)) {\n deletedTokens.push(...tokens.splice((r.start || 0), (r.end || 0) - (r.start || 0)));\n continue;\n }\n const filePath = Object.keys(this.dependencies).find((key) => this.dependencies[key].alias.has(r.value));\n if (filePath === undefined) {\n if (!r.firstToken) {\n throw new Error(`\u30D5\u30A1\u30A4\u30EB\u300E${String(r.value)}\u300F\u304C\u8AAD\u307F\u8FBC\u307E\u308C\u3066\u3044\u307E\u305B\u3093\u3002`);\n }\n throw new NakoLexerError(`\u30D5\u30A1\u30A4\u30EB\u300E${String(r.value)}\u300F\u304C\u8AAD\u307F\u8FBC\u307E\u308C\u3066\u3044\u307E\u305B\u3093\u3002`, (r.firstToken).startOffset || 0, (r.firstToken).endOffset || 0, (r.firstToken).line, (r.firstToken).file);\n }\n this.dependencies[filePath].addPluginFile();\n const children = cloneAsJSON(this.dependencies[filePath].tokens);\n includeGuard.add(r.value);\n deletedTokens.push(...this.replaceRequireStatements(children, includeGuard));\n deletedTokens.push(...tokens.splice(r.start || 0, (r.end || 0) - (r.start || 0), ...children));\n }\n return deletedTokens;\n }\n /**\n * replaceRequireStatements\u306E\u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u30CF\u30A4\u30E9\u30A4\u30C8\u7528\u306E\u5B9F\u88C5\u3002\n * @param {TokenWithSourceMap[]} tokens\n * @returns {TokenWithSourceMap[]} \u524A\u9664\u3055\u308C\u305F\u53D6\u308A\u8FBC\u307F\u6587\u306E\u30C8\u30FC\u30AF\u30F3\n */\n removeRequireStatements(tokens) {\n /** @type {TokenWithSourceMap[]} */\n const deletedTokens = [];\n for (const r of NakoCompiler.listRequireStatements(tokens).reverse()) {\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u547D\u4EE4\u306E\u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u30CF\u30A4\u30E9\u30A4\u30C8\u306E\u305F\u3081\u306B\u3001addPluginFile\u3092\u547C\u3093\u3067\u95A2\u6570\u306E\u30EA\u30B9\u30C8\u3092this.dependencies[filePath].funclist\u306B\u4FDD\u5B58\u3055\u305B\u308B\u3002\n const filePath = Object.keys(this.dependencies).find((key) => this.dependencies[key].alias.has(r.value));\n if (filePath !== undefined) {\n this.dependencies[filePath].addPluginFile();\n }\n // \u5168\u3066\u306E\u53D6\u308A\u8FBC\u307F\u6587\u3092\u524A\u9664\u3059\u308B\u3002\u305D\u3046\u3057\u306A\u3044\u3068\u30C8\u30FC\u30AF\u30F3\u5316\u306B\u6642\u9593\u304C\u304B\u304B\u308A\u3059\u304E\u308B\u3002\n deletedTokens.push(...tokens.splice(r.start || 0, (r.end || 0) - (r.start || 0)));\n }\n return deletedTokens;\n }\n /** \u5B57\u53E5\u89E3\u6790\u3092\u884C\u3046 */\n lex(code, filename = 'main.nako3', preCode = '', syntaxHighlighting = false) {\n // \u5358\u8A9E\u306B\u5206\u5272\n let tokens = this.rawtokenize(code, 0, filename, preCode);\n // require\u6587\u3092\u518D\u5E30\u7684\u306B\u7F6E\u63DB\u3059\u308B\n const requireStatementTokens = syntaxHighlighting ? this.removeRequireStatements(tokens) : this.replaceRequireStatements(tokens, undefined);\n for (const t of requireStatementTokens) {\n if (t.type === 'word' || t.type === 'not') {\n t.type = 'require';\n }\n }\n if (requireStatementTokens.length >= 3) {\n // modList \u3092\u66F4\u65B0\n for (let i = 0; i < requireStatementTokens.length; i += 3) {\n let modName = requireStatementTokens[i + 1].value;\n modName = NakoLexer.filenameToModName(modName);\n if (this.lexer.modList.indexOf(modName) < 0) {\n this.lexer.modList.push(modName);\n }\n }\n }\n // convertToken\u3067\u6D88\u3055\u308C\u308B\u30B3\u30E1\u30F3\u30C8\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u6B8B\u3059\n const commentTokens = tokens.filter((t) => t.type === 'line_comment' || t.type === 'range_comment')\n .map((v) => ({ ...v })); // clone\n tokens = this.converttoken(tokens, true, filename);\n // 'string_ex'\u30C8\u30FC\u30AF\u30F3\u304B\u3089\u5909\u63DB\u3055\u308C\u305F'code'\u30C8\u30FC\u30AF\u30F3\u3092\u5B57\u53E5\u89E3\u6790\u3059\u308B\n for (let i = 0; i < tokens.length; i++) {\n if (tokens[i] && tokens[i].type === 'code') {\n const children = this.lexCodeToken(tokens[i].value, tokens[i].line, filename, tokens[i].startOffset || 0);\n commentTokens.push(...children.commentTokens);\n tokens.splice(i, 1, ...children.tokens);\n i--;\n }\n }\n this.logger.trace('--- lex ---\\n' + JSON.stringify(tokens, null, 2));\n return { commentTokens, tokens, requireTokens: requireStatementTokens };\n }\n /**\n * \u30B3\u30FC\u30C9\u3092\u30D1\u30FC\u30B9\u3057\u3066AST\u306B\u3059\u308B\n */\n parse(code, filename, preCode = '') {\n // \u95A2\u6570\u30EA\u30B9\u30C8\u3092\u5B57\u53E5\u89E3\u6790\u3068\u69CB\u6587\u89E3\u6790\u306B\u767B\u9332\n this.lexer.setFuncList(this.funclist);\n this.parser.setFuncList(this.funclist);\n // \u95A2\u6570\u30EA\u30B9\u30C8\u3092\u5B57\u53E5\u89E3\u6790\u3068\u69CB\u6587\u89E3\u6790\u306B\u767B\u9332\n this.lexer.setModuleExport(this.moduleExport);\n this.parser.setModuleExport(this.moduleExport);\n // \u5B57\u53E5\u89E3\u6790\u3092\u884C\u3046\n const lexerOutput = this.lex(code, filename, preCode);\n // \u69CB\u6587\u6728\u3092\u4F5C\u6210\n let ast;\n try {\n this.parser.genMode = 'sync'; // set default\n ast = this.parser.parse(lexerOutput.tokens, filename);\n }\n catch (err) {\n if (typeof err.startOffset !== 'number') {\n throw NakoSyntaxError.fromNode(err.message, lexerOutput.tokens[this.parser.getIndex()]);\n }\n throw err;\n }\n // \u4F7F\u7528\u3057\u305F\u30B7\u30B9\u30C6\u30E0\u95A2\u6570\u306E\u4E00\u89A7\u3092 this.usedFuns \u306B\u5165\u308C\u308B(\u30A8\u30C7\u30A3\u30BF\u306A\u3069\u3067\u5229\u7528\u3055\u308C\u308B)\n this.usedFuncs = this.parser.usedFuncs; // \u5168\u3066\u306E\u95A2\u6570\u547C\u3073\u51FA\u3057\n this.deleteUnNakoFuncs(); // \u30B7\u30B9\u30C6\u30E0\u95A2\u6570\u4EE5\u5916\u3092\u524A\u9664\n this.logger.trace('--- ast ---\\n' + JSON.stringify(ast, null, 2));\n return ast;\n }\n getUsedFuncs(ast) {\n this.usedFuncs = new Set();\n this._getUsedFuncs(ast);\n return this.deleteUnNakoFuncs();\n }\n _getUsedFuncs(ast) {\n if (!ast) {\n return;\n }\n if ((ast.type === 'func' || ast.type === 'func_pointer') && ast.name) {\n this.usedFuncs.add(ast.name);\n }\n else if (ast.blocks) { // \u30D7\u30ED\u30D1\u30C6\u30A3\u306Bblocks\u3092\u542B\u3093\u3067\u3044\u308B\uFF1F\n for (const a of ast.blocks) {\n this._getUsedFuncs(a);\n }\n }\n }\n deleteUnNakoFuncs() {\n for (const func of this.usedFuncs) {\n if (!this.commandlist.has(func)) {\n this.usedFuncs.delete(func);\n }\n }\n return this.usedFuncs;\n }\n /**\n * \u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u30B3\u30F3\u30D1\u30A4\u30EB\u3057\u3066\u30E9\u30F3\u30BF\u30A4\u30E0\u7528\u306EJavaScript\u306E\u30B3\u30FC\u30C9\u3092\u8FD4\u3059\n * @param code \u30B3\u30FC\u30C9 (\u306A\u3067\u3057\u3053)\n * @param filename\n * @param isTest \u30C6\u30B9\u30C8\u304B\u3069\u3046\u304B\n * @param preCode\n */\n compile(code, filename, isTest = false, preCode = '') {\n const opt = newCompilerOptions();\n opt.testOnly = isTest;\n opt.preCode = preCode;\n const res = this.compileFromCode(code, filename, opt);\n return res.runtimeEnv;\n }\n /** parse & generate */\n compileFromCode(code, filename, options = undefined) {\n if (filename === '') {\n filename = 'main.nako3';\n }\n if (options === undefined) {\n options = newCompilerOptions();\n }\n try {\n if (options.resetEnv) {\n this.reset();\n }\n if (options.resetAll) {\n this.clearPlugins();\n }\n // onBeforeParse\n this.eventList.filter(o => o.eventName === 'beforeParse').map(e => e.callback(code));\n // parse\n const ast = this.parse(code, filename, options.preCode);\n // onBeforeGenerate\n this.eventList.filter(o => o.eventName === 'beforeGenerate').map(e => e.callback(ast));\n // generate\n const genOptions = new NakoGenOptions(options.testOnly);\n const outCode = this.generateCode(ast, genOptions);\n // onAfterGenerate\n this.eventList.filter(o => o.eventName === 'afterGenerate').map(e => e.callback(outCode));\n return outCode;\n }\n catch (e) {\n this.logger.error(e);\n throw e;\n }\n }\n /**\n * \u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u30B3\u30F3\u30D1\u30A4\u30EB\u3057\u3066JavaScript\u306E\u30B3\u30FC\u30C9\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u8FD4\u3059\n * @param ast\n * @param opt \u30C6\u30B9\u30C8\u304B\u3069\u3046\u304B\n * @param mode \u4E00\u822C\u7684\u306B 'sync' \u3092\u6307\u5B9A\n */\n generateCode(ast, opt, mode = 'sync') {\n // Select Code Generator #637\n // normal mode\n if (mode === 'sync') {\n return generateJS(this, ast, opt);\n }\n // \u5EC3\u6B62\u306E\u975E\u540C\u671F\u30E2\u30FC\u30C9 #1164\n if (mode === '\u975E\u540C\u671F\u30E2\u30FC\u30C9') {\n this.logger.error('\u300E!\u975E\u540C\u671F\u30E2\u30FC\u30C9\u300F\u306F\u5EC3\u6B62\u3055\u308C\u307E\u3057\u305F\u3002[\u8A73\u7D30](https://github.com/kujirahand/nadesiko3/issues/1164)');\n }\n // \u305D\u306E\u4ED6\u306E\u30B3\u30FC\u30C9\u30B8\u30A7\u30CD\u30EC\u30FC\u30BF(PHP\u306A\u3069)\n const genObj = this.codeGenerateor[mode];\n if (!genObj) {\n throw new Error(`\u30B3\u30FC\u30C9\u30B8\u30A7\u30CD\u30EC\u30FC\u30BF\u306E\u300C${mode}\u300D\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002`);\n }\n return genObj.generate(this, ast, opt.isTest);\n }\n /** \u30B3\u30FC\u30C9\u30B8\u30A7\u30CD\u30EC\u30FC\u30BF\u3092\u8FFD\u52A0\u3059\u308B */\n addCodeGenerator(mode, obj) {\n this.codeGenerateor[mode] = obj;\n }\n /** (\u975E\u63A8\u5968)\n * @param code \u975E\u540C\u671F\u3067\u5B9F\u884C\u3059\u308B\n * @param fname\n * @param isReset\n * @param isTest \u30C6\u30B9\u30C8\u304B\u3069\u3046\u304B\u3002string\u306E\u5834\u5408\u306F1\u3064\u306E\u30C6\u30B9\u30C8\u306E\u307F\u3002\n * @param [preCode]\n * @deprecated \u4EE3\u308F\u308A\u306BrunAsync\u30E1\u30BD\u30C3\u30C9\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002(core #52)\n */\n async _run(code, fname, isReset, isTest, preCode = '') {\n const opts = newCompilerOptions({\n resetEnv: isReset,\n resetAll: isReset,\n testOnly: isTest,\n preCode\n });\n return this._runEx(code, fname, opts);\n }\n /** \u5404\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u30EA\u30BB\u30C3\u30C8\u3059\u308B */\n clearPlugins() {\n // \u4ED6\u306B\u5B9F\u884C\u3057\u3066\u3044\u308B\u300C\u306A\u3067\u3057\u3053\u300D\u304C\u3042\u308C\u3070\u30AF\u30EA\u30A2\u3059\u308B\n this.__globals.forEach((sys) => {\n if (!sys) {\n return;\n }\n // core #56\n sys.__setSysVar('__forceClose', true);\n sys.reset();\n });\n this.__globals = []; // clear\n }\n /**\n * \u74B0\u5883\u3092\u6307\u5B9A\u3057\u3066JavaScript\u306E\u30B3\u30FC\u30C9\u3092\u5B9F\u884C\u3059\u308B\n * @param code JavaScript\u306E\u30B3\u30FC\u30C9\n * @param nakoGlobal \u5B9F\u884C\u74B0\u5883\n */\n evalJS(code, nakoGlobal) {\n this.__globalObj = nakoGlobal; // \u73FE\u5728\u306EnakoGlobal\u3092\u8A18\u9332\n this.__globalObj.lastJSCode = code;\n // \u5B9F\u884C\u524D\u306B\u74B0\u5883\u3092\u521D\u671F\u5316\u3059\u308B\u30A4\u30D9\u30F3\u30C8\u3092\u5B9F\u884C(beforeRun)\n this.eventList.filter(o => o.eventName === 'beforeRun').map(e => e.callback(nakoGlobal));\n try {\n const f = new Function(nakoGlobal.lastJSCode);\n f.apply(nakoGlobal);\n }\n catch (err) {\n // \u306A\u3067\u3057\u3053\u30B3\u30FC\u30C9\u306E\u30A8\u30E9\u30FC\u306F\u6291\u6B62\u3057\u3066\u30ED\u30B0\u306B\u306E\u307F\u8A18\u9332\n nakoGlobal.numFailures++;\n this.getLogger().error(err);\n throw err;\n }\n // \u5B9F\u884C\u5F8C\u306B\u7D42\u4E86\u30A4\u30D9\u30F3\u30C8\u3092\u5B9F\u884C(finish)\n this.eventList.filter(o => o.eventName === 'finish').map(e => e.callback(nakoGlobal));\n }\n /**\n * (\u975E\u63A8\u5968) \u540C\u671F\u7684\u306B\u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0code\u3092\u5B9F\u884C\u3059\u308B\n * @param code \u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\n * @param filename \u30D5\u30A1\u30A4\u30EB\u540D\n * @param options \u30AA\u30D7\u30B7\u30E7\u30F3\n * @returns \u5B9F\u884C\u306B\u5229\u7528\u3057\u305F\u30B0\u30ED\u30FC\u30D0\u30EB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n * @deprecated \u4EE3\u308F\u308A\u306BrunAsync\u30E1\u30BD\u30C3\u30C9\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002(core #52)\n */\n runSync(code, filename, options = undefined) {\n // \u30B3\u30F3\u30D1\u30A4\u30EB\n options = newCompilerOptions(options);\n const out = this.compileFromCode(code, filename, options);\n // \u5B9F\u884C\u524D\u306B\u74B0\u5883\u3092\u751F\u6210\n const nakoGlobal = this.getNakoGlobal(options, out.gen, filename);\n // \u5B9F\u884C\n this.evalJS(out.runtimeEnv, nakoGlobal);\n return nakoGlobal;\n }\n /**\n * \u975E\u540C\u671F\u306B\u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0code\u3092\u5B9F\u884C\u3059\u308B\n * @param code \u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\n * @param filename \u30D5\u30A1\u30A4\u30EB\u540D\n * @param options \u30AA\u30D7\u30B7\u30E7\u30F3\n * @returns \u5B9F\u884C\u306B\u5229\u7528\u3057\u305F\u30B0\u30ED\u30FC\u30D0\u30EB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n */\n async runAsync(code, filename, options = undefined) {\n // \u30B3\u30F3\u30D1\u30A4\u30EB\n options = newCompilerOptions(options);\n const compiledCode = this.compileFromCode(code, filename, options);\n // \u5B9F\u884C\u524D\u306B\u74B0\u5883\u3092\u751F\u6210\n const nakoGlobal = this.getNakoGlobal(options, compiledCode.gen, filename);\n // \u5B9F\u884C\n this.evalJS(compiledCode.runtimeEnv, nakoGlobal);\n return nakoGlobal;\n }\n getNakoGlobal(options, gen, filename) {\n // \u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u53C2\u7167\n let g = options.nakoGlobal;\n if (!g) {\n // \u7A7A\u306A\u3089\u3070\u524D\u56DE\u306E\u5024\u3092\u53C2\u7167(\u30EA\u30BB\u30C3\u30C8\u3059\u308B\u306A\u3089\u65B0\u898F\u3067\u4F5C\u6210\u3059\u308B)\n if (this.__globals.length > 0 && options.resetAll === false && options.resetEnv === false) {\n g = this.__globals[this.__globals.length - 1];\n }\n else {\n g = new NakoGlobal(this, gen, (this.__globals.length + 1));\n }\n // \u540D\u524D\u7A7A\u9593\u3092\u8A2D\u5B9A\n g.__varslist[0].set('\u540D\u524D\u7A7A\u9593', NakoLexer.filenameToModName(filename));\n }\n if (this.__globals.indexOf(g) < 0) {\n this.__globals.push(g);\n }\n return g;\n }\n /**\n * \u30A4\u30D9\u30F3\u30C8\u3092\u767B\u9332\u3059\u308B\n * @param eventName \u30A4\u30D9\u30F3\u30C8\u540D\n * @param callback \u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u95A2\u6570\n */\n addListener(eventName, callback) {\n this.eventList.push({ eventName, callback });\n }\n /**\n * \u30C6\u30B9\u30C8\u3092\u5B9F\u884C\u3059\u308B\n * @param code\n * @param fname\n * @param preCode\n * @param testOnly\n */\n test(code, fname, preCode = '', testOnly = false) {\n const options = newCompilerOptions();\n options.preCode = preCode;\n options.testOnly = testOnly;\n return this.runSync(code, fname, options);\n }\n /**\n * \u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u5B9F\u884C\uFF08\u4ED6\u306B\u5B9F\u884C\u3057\u3066\u3044\u308B\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u306F\u305D\u306E\u307E\u307E\uFF09\n * @param code\n * @param fname\n * @param [preCode]\n * @deprecated \u4EE3\u308F\u308A\u306B runAsync \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002\n */\n run(code, fname = 'main.nako3', preCode = '') {\n const options = newCompilerOptions();\n options.preCode = preCode;\n return this.runSync(code, fname, options);\n }\n /**\n * JavaScript\u306E\u307F\u3067\u52D5\u304F\u30B3\u30FC\u30C9\u3092\u53D6\u5F97\u3059\u308B\u5834\u5408\n * @param code\n * @param filename\n * @param opt? \u30AA\u30D7\u30B7\u30E7\u30F3\n */\n compileStandalone(code, filename, options) {\n if (options === undefined) {\n options = new NakoGenOptions();\n }\n const ast = this.parse(code, filename);\n return this.generateCode(ast, options).standalone;\n }\n /**\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u8FFD\u52A0\n * @param po \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n * @param persistent false\u306E\u3068\u304D\u3001\u6B21\u4EE5\u964D\u306E\u5B9F\u884C\u3067\u306F\u4F7F\u3048\u306A\u3044\n * @param fpath \u30D5\u30A1\u30A4\u30EB\u30D1\u30B9\n */\n addPlugin(po, persistent = true, fpath = '') {\n // __v0\u3092\u53D6\u5F97\n const __v0 = this.__varslist[0];\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30E1\u30BF\u60C5\u5831\u3092\u30C1\u30A7\u30C3\u30AF (#1034) (#1647)\n let __pluginInfo = __v0.get('__pluginInfo');\n if (!__pluginInfo) {\n __pluginInfo = {};\n __v0.set('__pluginInfo', __pluginInfo);\n }\n // \u30D0\u30FC\u30B8\u30E7\u30F3\u30C1\u30A7\u30C3\u30AF\n let intVersion = 0;\n let pluginName = 'unknown';\n let metaValue = { pluginName: 'unknown', nakoVersionResult: true, nakoVersion: '0.0.0', path: '' };\n if (po.meta) {\n if (po.meta.value && typeof (po.meta) === 'object') {\n const meta = po.meta;\n metaValue = meta.value || { pluginName: 'unknown', nakoVersion: '0.0.0' };\n pluginName = metaValue.pluginName || 'unknown';\n // version check\n const nakoVersion = (metaValue.nakoVersion || '0.0.0') + '.0.0';\n const versions = nakoVersion.split('.').map((v) => parseInt(v));\n intVersion = versions[1] * 100 + versions[2];\n // fpath\n metaValue.path = fpath;\n }\n }\n // unknown \u306E\u5834\u5408\u306F\u3001\u95A2\u6570\u540D\u304B\u3089\u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u3092\u81EA\u52D5\u751F\u6210\u3059\u308B\n if (pluginName === 'unknown') {\n pluginName = Object.keys(po).join('-');\n }\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u306E\u91CD\u8907\u3092\u78BA\u8A8D\n if (__pluginInfo[pluginName] !== undefined) {\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u304C\u91CD\u8907\u3057\u305F\u5834\u5408\u306F\u30D7\u30E9\u30B0\u30A4\u30F3\u3068\u3057\u3066\u767B\u9332\u3057\u306A\u3044\n return;\n }\n // Windows\u306E\u30D1\u30B9\u3084\u30D5\u30A1\u30A4\u30EB\u540D\u306B\u4F7F\u3048\u306A\u3044\u6587\u5B57\u5217\u304C\u3042\u308B\u3068\u3001JS\u30D5\u30A1\u30A4\u30EB\u66F8\u304D\u51FA\u3057\u3067\u30A8\u30E9\u30FC\u306B\u306A\u308B\u306E\u3067\u7F6E\u63DB\n const removeInvalidFilenameChars = (str) => {\n return str.replace(/[^a-zA-z0-9\\-_\\u3040-\\u309F\\u30A0-\\u30FF\\u4E00-\\u9FAF\\u3400-\\u4DBF\\uF900-\\uFAFF]/g, '_');\n };\n pluginName = removeInvalidFilenameChars(pluginName);\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u60C5\u5831\u3092\u8A18\u9332\n __pluginInfo[pluginName] = metaValue;\n // \u30D0\u30FC\u30B8\u30E7\u30F3\u30C1\u30A7\u30C3\u30AF\n if (PLUGIN_MIN_VERSION_INT > intVersion) {\n const keyStr = Object.keys(po).join(',');\n if (pluginName === 'unknown') {\n pluginName = keyStr.substring(0, 30) + '...';\n }\n if (pluginName !== '') {\n const errMsg = `\u306A\u3067\u3057\u3053\u30D7\u30E9\u30B0\u30A4\u30F3\u300E${pluginName}\u300F\u306F\u53E4\u3044\u5F62\u5F0F\u306A\u306E\u3067\u6B63\u3057\u304F\u52D5\u4F5C\u3057\u306A\u3044\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002` +\n `(\u30E9\u30F3\u30BF\u30A4\u30E0\u306E\u8981\u6C42: ${PLUGIN_MIN_VERSION_INT}/\u30D7\u30E9\u30B0\u30A4\u30F3: ${intVersion})`;\n console.warn(errMsg, 'see', 'https://github.com/kujirahand/nadesiko3/issues/1647');\n this.logger.warn(errMsg);\n metaValue.nakoVersionResult = false;\n }\n }\n // \u521D\u671F\u5316\u3068\u30AF\u30EA\u30A2\u3092\u5909\u63DB\u3059\u308B\n this.__module[pluginName] = po;\n this.pluginfiles[pluginName] = '*';\n // `\u521D\u671F\u5316`\u3068`\u30AF\u30EA\u30A2`\u3092\u30C1\u30A7\u30C3\u30AF\n if (typeof (po['\u521D\u671F\u5316']) === 'object') {\n const def = po['\u521D\u671F\u5316'];\n delete po['\u521D\u671F\u5316'];\n const initKey = `!${pluginName}:\u521D\u671F\u5316`;\n po[initKey] = def;\n }\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u5024\u3092\u3001\u306A\u3067\u3057\u3053\u30B7\u30B9\u30C6\u30E0\u5909\u6570(Map)\u306B\u30B3\u30D4\u30FC\n for (const key in po) {\n const v = po[key];\n this.funclist.set(key, v);\n if (persistent) {\n this.pluginFunclist[key] = JSON.parse(JSON.stringify(v));\n }\n if (v.type === 'func') {\n __v0.set(key, v.fn);\n if (v.asyncFn) { // asyncFn \u3092\u6B63\u3057\u304F\u5B9F\u884C\u3059\u308B\u305F\u3081\u306B pure \u306B\u5909\u66F4\u3059\u308B (core#142)\n v.pure = true;\n }\n }\n else if (v.type === 'const' || v.type === 'var') {\n // \u30E1\u30BF\u60C5\u5831\u3068\u3057\u3066\u306E const | var \u306F\u73FE\u5728\u5229\u7528\u3057\u3066\u3044\u306A\u3044\n // meta[key] = { readonly: v.type === 'const' }\n __v0.set(key, v.value);\n }\n else {\n console.error('[\u30D7\u30E9\u30B0\u30A4\u30F3\u8FFD\u52A0\u30A8\u30E9\u30FC]', v);\n throw new Error('\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u8FFD\u52A0\u3067\u30A8\u30E9\u30FC\u3002');\n }\n // \u30B3\u30DE\u30F3\u30C9\u3092\u767B\u9332\u3059\u308B\u304B?\n if (key === '\u521D\u671F\u5316' || key.substring(0, 1) === '!') { // \u767B\u9332\u3057\u306A\u3044\u95A2\u6570\u540D\n continue;\n }\n this.commandlist.add(key);\n }\n }\n /**\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u8FFD\u52A0(\u30D6\u30E9\u30A6\u30B6\u5411\u3051)\n * @param objName \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u540D (\u4ECA\u5F8C\u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u306F\u3001meta.value.pluginName\u306B\u6307\u5B9A\u3059\u308B)\n * @param po \u95A2\u6570\u30EA\u30B9\u30C8\n * @param persistent false\u306E\u3068\u304D\u3001\u6B21\u4EE5\u964D\u306E\u5B9F\u884C\u3067\u306F\u4F7F\u3048\u306A\u3044\n */\n addPluginObject(objName, po, persistent = true) {\n // meta\u30D7\u30ED\u30D1\u30C6\u30A3\u304C\u306A\u3051\u308C\u3070\u4E92\u63DB\u6027\u306E\u305F\u3081\u9069\u5F53\u306B\u8FFD\u52A0\n if (po.meta === undefined) {\n po.meta = { type: 'const', value: { pluginName: objName, nakoVersion: '0.0.0' } };\n }\n this.addPlugin(po, persistent);\n }\n /**\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u8FFD\u52A0(Node.js\u5411\u3051)\n * @param objName \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u540D(\u305F\u3060\u3057\u3001v3.6.3\u4EE5\u964D\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3067\u306F\u7121\u52B9\u306B\u306A\u308B)\n * @param fpath \u30D5\u30A1\u30A4\u30EB\u30D1\u30B9\n * @param po \u767B\u9332\u3059\u308B\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n * @param persistent false\u306E\u3068\u304D\u3001\u6B21\u4EE5\u964D\u306E\u5B9F\u884C\u3067\u306F\u4F7F\u3048\u306A\u3044\n * @deprecated \u5229\u7528\u306F\u975E\u63A8\u5968\n */\n addPluginFile(_objName, fpath, po, persistent = true) {\n this.addPluginFromFile(fpath, po, persistent);\n }\n /**\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u8FFD\u52A0(Node.js\u5411\u3051)\n * @param fpath \u30D5\u30A1\u30A4\u30EB\u30D1\u30B9\n * @param po \u767B\u9332\u3059\u308B\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n * @param persistent false\u306E\u3068\u304D\u3001\u6B21\u4EE5\u964D\u306E\u5B9F\u884C\u3067\u306F\u4F7F\u3048\u306A\u3044\n */\n addPluginFromFile(fpath, po, persistent = true) {\n this.addPlugin(po, persistent, fpath);\n }\n /**\n * \u95A2\u6570\u3092\u8FFD\u52A0\u3059\u308B\n * @param {string} key \u95A2\u6570\u540D\n * @param {string[][]} josi \u52A9\u8A5E\n * @param {Function} fn \u95A2\u6570\n * @param {boolean} returnNone \u5024\u3092\u8FD4\u3059\u95A2\u6570\u306E\u5834\u5408\u306Ffalse\u3092\u6307\u5B9A\n * @param {boolean} asyncFn Promise\u3092\u8FD4\u3059\u95A2\u6570\u304B\u3092\u6307\u5B9A\n */\n addFunc(key, josi, fn, returnNone = true, asyncFn = false) {\n const funcObj = { josi, fn, type: 'func', return_none: returnNone, asyncFn, pure: true };\n this.funclist.set(key, funcObj);\n this.pluginFunclist[key] = cloneAsJSON(funcObj);\n this.__varslist[0].set(key, fn);\n }\n /** (\u975E\u63A8\u5968) \u4E92\u63DB\u6027\u306E\u305F\u3081 ... \u95A2\u6570\u3092\u8FFD\u52A0\u3059\u308B\n * @deprecated \u4EE3\u308F\u308A\u306BaddFunc\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\n */\n setFunc(key, josi, fn, returnNone = true, asyncFn = false) {\n this.addFunc(key, josi, fn, returnNone, asyncFn);\n }\n /**\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u95A2\u6570\u3092\u53C2\u7167\u3059\u308B\n * @param key \u30D7\u30E9\u30B0\u30A4\u30F3\u95A2\u6570\u306E\u95A2\u6570\u540D\n * @returns \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n */\n getFunc(key) {\n return this.funclist.get(key);\n }\n /** \u540C\u671F\u7684\u306B\u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0code\u3092\u5B9F\u884C\u3059\u308B\n * @deprecated \u4EE3\u308F\u308A\u306BrunAsync\u30E1\u30BD\u30C3\u30C9\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002(core #52)\n */\n _runEx(code, filename, opts, preCode = '', nakoGlobal = undefined) {\n // \u30B3\u30F3\u30D1\u30A4\u30EB\n opts.preCode = preCode;\n if (nakoGlobal) {\n opts.nakoGlobal = nakoGlobal;\n }\n return this.runSync(code, filename, opts);\n }\n /** (\u975E\u63A8\u5968) \u540C\u671F\u7684\u306B\u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0code\u3092\u5B9F\u884C\u3059\u308B\n * @param code\n * @param fname\n * @param opts\n * @param [preCode]\n * @deprecated \u4EE3\u308F\u308A\u306BrunAsync\u30E1\u30BD\u30C3\u30C9\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002(core #52)\n */\n runEx(code, fname, opts, preCode = '') {\n return this._runEx(code, fname, opts, preCode);\n }\n /**\n * (\u975E\u63A8\u5968) \u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u5B9F\u884C\uFF08\u4ED6\u306B\u5B9F\u884C\u3057\u3066\u3044\u308B\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3082\u30EA\u30BB\u30C3\u30C8\u3059\u308B)\n * @param code\n * @param fname\n * @param [preCode]\n */\n async runReset(code, fname = 'main.nako3', preCode = '') {\n const opts = newCompilerOptions({ resetAll: true, resetEnv: true, preCode });\n return this.runAsync(code, fname, opts);\n }\n /**\n * \u65B0\u898F\u306E\u306A\u3067\u3057\u3053\u5909\u6570\u7BA1\u7406\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u751F\u6210\n * @returns \u5909\u6570\u7BA1\u7406\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n */\n newVaiables(initVars) {\n return new Map(initVars);\n }\n}\n", "// @ts-nocheck\nexport default {\n // @\u8272\u5B9A\u6570\n '\u6C34\u8272': { type: 'const', value: 'aqua' }, // @\u307F\u305A\u3044\u308D\n '\u7D2B\u8272': { type: 'const', value: 'fuchsia' }, // @\u3080\u3089\u3055\u304D\u3044\u308D\n '\u7DD1\u8272': { type: 'const', value: 'lime' }, // @\u307F\u3069\u308A\u3044\u308D\n '\u9752\u8272': { type: 'const', value: 'blue' }, // @\u3042\u304A\u3044\u308D\n '\u8D64\u8272': { type: 'const', value: 'red' }, // @\u3042\u304B\u3044\u308D\n '\u9EC4\u8272': { type: 'const', value: 'yellow' }, // @\u304D\u3044\u308D\n '\u9ED2\u8272': { type: 'const', value: 'black' }, // @\u304F\u308D\u3044\u308D\n '\u767D\u8272': { type: 'const', value: 'white' }, // @\u3057\u308D\u3044\u308D\n '\u8336\u8272': { type: 'const', value: 'maroon' }, // @\u3061\u3083\u3044\u308D\n '\u7070\u8272': { type: 'const', value: 'gray' }, // @\u306F\u3044\u3044\u308D\n '\u91D1\u8272': { type: 'const', value: 'gold' }, // @\u304D\u3093\u3044\u308D\n '\u9EC4\u91D1\u8272': { type: 'const', value: 'gold' }, // @\u3053\u304C\u306D\u3044\u308D\n '\u9280\u8272': { type: 'const', value: 'silver' }, // @\u304E\u3093\u3044\u308D\n '\u767D\u91D1\u8272': { type: 'const', value: 'silver' }, // @\u3057\u308D\u304C\u306D\u3044\u308D\n '\u30AA\u30EA\u30FC\u30D6\u8272': { type: 'const', value: 'olive' }, // @\u304A\u308A\u30FC\u3076\u3044\u308D\n '\u30D9\u30FC\u30B8\u30E5\u8272': { type: 'const', value: 'beige' }, // @\u3079\u30FC\u3058\u3085\u3044\u308D\n '\u30A2\u30EA\u30B9\u30D6\u30EB\u30FC\u8272': { type: 'const', value: 'aliceblue' }, // @\u3042\u308A\u3059\u3076\u308B\u30FC\u3044\u308D\n 'RGB': {\n type: 'func',\n josi: [['\u3068'], ['\u3068'], ['\u3067', '\u306E']],\n pure: true,\n fn: function (r, g, b) {\n const z2 = (v) => {\n const v2 = '00' + v.toString(16);\n return v2.substr(v2.length - 2, 2);\n };\n return '#' + z2(r) + z2(g) + z2(b);\n },\n return_none: false\n },\n '\u8272\u6DF7': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n const z2 = (v) => {\n const v2 = '00' + v.toString(16);\n return v2.substr(v2.length - 2, 2);\n };\n if (!a) {\n throw new Error('\u300E\u8272\u6DF7\u305C\u308B\u300F\u306E\u5F15\u6570\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3057\u307E\u3059');\n }\n if (a.length < 3) {\n throw new Error('\u300E\u8272\u6DF7\u305C\u308B\u300F\u306E\u5F15\u6570\u306B\u306F[RR,GG,BB]\u5F62\u5F0F\u306E\u914D\u5217\u3092\u6307\u5B9A\u3057\u307E\u3059');\n }\n return '#' + z2(a[0]) + z2(a[1]) + z2(a[2]);\n },\n return_none: false\n }\n};\n", "export default {\n // @HTTP\u3068AJAX\n 'HTTP\u53D6\u5F97': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089', '\u3092']],\n pure: true,\n asyncFn: true,\n fn: async function (url, sys) {\n return sys.__exec('AJAX\u30C6\u30AD\u30B9\u30C8\u53D6\u5F97', [url, sys]);\n }\n },\n 'AJAX\u53D7\u4FE1': {\n type: 'func',\n josi: [['\u304B\u3089', '\u3092']],\n pure: true,\n asyncFn: true,\n fn: async function (url, sys) {\n return sys.__exec('AJAX\u30C6\u30AD\u30B9\u30C8\u53D6\u5F97', [url, sys]);\n }\n },\n 'AJAX\u53D7\u4FE1\u6642': {\n type: 'func',\n josi: [['\u3067'], ['\u304B\u3089', '\u3092']],\n pure: true,\n fn: function (callback, url, sys) {\n sys.__exec('AJAX\u9001\u4FE1\u6642', [callback, url, sys]);\n },\n return_none: true\n },\n 'AJAX\u9001\u4FE1': {\n type: 'func',\n josi: [['\u307E\u3067', '\u3078', '\u306B']],\n pure: true,\n asyncFn: true,\n fn: async function (url, sys) {\n return sys.__exec('AJAX\u30C6\u30AD\u30B9\u30C8\u53D6\u5F97', [url, sys]);\n }\n },\n 'AJAX\u9001\u4FE1\u6642': {\n type: 'func',\n josi: [['\u306E'], ['\u307E\u3067', '\u3078', '\u306B']],\n pure: true,\n fn: function (callback, url, sys) {\n let options = sys.__getSysVar('AJAX\u30AA\u30D7\u30B7\u30E7\u30F3');\n if (options === '') {\n options = { method: 'GET' };\n }\n fetch(url, options).then(res => {\n // \u3082\u3057301\u3067\u3042\u308C\u3070\u81EA\u52D5\u3067\u30EA\u30C0\u30A4\u30EC\u30AF\u30C8\u3059\u308B\u305F\u3081,200\u3060\u3051\u3092\u30C1\u30A7\u30C3\u30AF\u3059\u308C\u3070\u826F\u3044\n if (res.status !== 200) {\n return sys.__getSysVar('AJAX:ONERROR')(res.status);\n }\n return res.text();\n }).then(text => {\n sys.__setSysVar('\u5BFE\u8C61', text);\n callback(text, sys);\n }).catch(err => {\n sys.__getSysVar('AJAX:ONERROR')(err);\n });\n },\n return_none: true\n },\n 'AJAX\u30AA\u30D7\u30B7\u30E7\u30F3': { type: 'const', value: '' }, // @AJAX\u304A\u3077\u3057\u3087\u3093\n 'AJAX\u30AA\u30D7\u30B7\u30E7\u30F3\u8A2D\u5B9A': {\n type: 'func',\n josi: [['\u306B', '\u3078', '\u3068']],\n pure: true,\n fn: function (option, sys) {\n sys.__setSysVar('AJAX\u30AA\u30D7\u30B7\u30E7\u30F3', option);\n },\n return_none: true\n },\n 'AJAX\u30AA\u30D7\u30B7\u30E7\u30F3POST\u8A2D\u5B9A': {\n type: 'func',\n josi: [['\u3092', '\u3067']],\n pure: true,\n fn: function (params, sys) {\n const bodyData = sys.__exec('POST\u30C7\u30FC\u30BF\u751F\u6210', [params, sys]);\n const options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n body: bodyData\n };\n sys.__setSysVar('AJAX\u30AA\u30D7\u30B7\u30E7\u30F3', options);\n },\n return_none: true\n },\n 'AJAX\u5931\u6557\u6642': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (callback, sys) {\n sys.__setSysVar('AJAX:ONERROR', callback);\n }\n },\n 'AJAX\u30C6\u30AD\u30B9\u30C8\u53D6\u5F97': {\n type: 'func',\n josi: [['\u304B\u3089', '\u3092']],\n pure: true,\n asyncFn: true,\n fn: async function (url, sys) {\n let options = sys.__getSysVar('AJAX\u30AA\u30D7\u30B7\u30E7\u30F3');\n if (options === '') {\n options = { method: 'GET' };\n }\n const res = await fetch(url, options);\n const txt = await res.text();\n return txt;\n },\n return_none: false\n },\n 'AJAX_JSON\u53D6\u5F97': {\n type: 'func',\n josi: [['\u304B\u3089']],\n pure: true,\n asyncFn: true,\n fn: async function (url, sys) {\n let options = sys.__getSysVar('AJAX\u30AA\u30D7\u30B7\u30E7\u30F3');\n if (options === '') {\n options = { method: 'GET' };\n }\n const res = await fetch(url, options);\n const text = await res.text();\n const status = res.status;\n const contentLength = res.headers.get('Content-Length');\n if ((!text || text.trim() === '') &&\n ((status === 204 || status === 205) || contentLength === '0')) {\n return null;\n }\n return JSON.parse(text);\n },\n return_none: false\n },\n 'AJAX\u30D0\u30A4\u30CA\u30EA\u53D6\u5F97': {\n type: 'func',\n josi: [['\u304B\u3089']],\n pure: true,\n asyncFn: true,\n fn: async function (url, sys) {\n let options = sys.__getSysVar('AJAX\u30AA\u30D7\u30B7\u30E7\u30F3');\n if (options === '') {\n options = { method: 'GET' };\n }\n const res = await fetch(url, options);\n const bin = await res.blob();\n return bin;\n },\n return_none: false\n },\n // @GET\u3068POST\n 'GET\u9001\u4FE1\u6642': {\n type: 'func',\n josi: [['\u306E'], ['\u307E\u3067', '\u3078', '\u306B']],\n pure: true,\n fn: function (callback, url, sys) {\n sys.__exec('AJAX\u9001\u4FE1\u6642', [callback, url, sys]);\n },\n return_none: true\n },\n 'POST\u9001\u4FE1\u6642': {\n type: 'func',\n josi: [['\u306E'], ['\u307E\u3067', '\u3078', '\u306B'], ['\u3092']],\n pure: true,\n fn: function (callback, url, params, sys) {\n const bodyData = sys.__exec('POST\u30C7\u30FC\u30BF\u751F\u6210', [params, sys]);\n const options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n body: bodyData\n };\n fetch(url, options).then(res => {\n return res.text();\n }).then(text => {\n sys.__setSysVar('\u5BFE\u8C61', text);\n callback(text);\n }).catch(err => {\n sys.__getSysVar('AJAX:ONERROR')(err);\n });\n }\n },\n 'POST\u30D5\u30A9\u30FC\u30E0\u9001\u4FE1\u6642': {\n type: 'func',\n josi: [['\u306E'], ['\u307E\u3067', '\u3078', '\u306B'], ['\u3092']],\n pure: true,\n fn: function (callback, url, params, sys) {\n const fd = new FormData();\n for (const key in params) {\n fd.set(key, params[key]);\n }\n const options = {\n method: 'POST',\n body: fd\n };\n fetch(url, options).then(res => {\n return res.text();\n }).then(text => {\n sys.__setSysVar('\u5BFE\u8C61', text);\n callback(text);\n }).catch(err => {\n sys.__getSysVar('AJAX:ONERROR')(err);\n });\n }\n },\n 'POST\u30C7\u30FC\u30BF\u751F\u6210': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (params, sys) {\n const flist = [];\n for (const key in params) {\n const v = params[key];\n const kv = encodeURIComponent(key) + '=' + encodeURIComponent(v);\n flist.push(kv);\n }\n return flist.join('&');\n }\n },\n 'POST\u9001\u4FE1': {\n type: 'func',\n josi: [['\u307E\u3067', '\u3078', '\u306B'], ['\u3092']],\n pure: true,\n asyncFn: true,\n fn: function (url, params, sys) {\n return new Promise((resolve, reject) => {\n const bodyData = sys.__exec('POST\u30C7\u30FC\u30BF\u751F\u6210', [params, sys]);\n const options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n body: bodyData\n };\n fetch(url, options).then(res => {\n return res.text();\n }).then(text => {\n resolve(text);\n }).catch(err => {\n reject(new Error(err.message));\n });\n });\n }\n },\n 'POST\u30D5\u30A9\u30FC\u30E0\u9001\u4FE1': {\n type: 'func',\n josi: [['\u307E\u3067', '\u3078', '\u306B'], ['\u3092']],\n pure: true,\n asyncFn: true,\n fn: function (url, params, sys) {\n return new Promise((resolve, reject) => {\n const fd = new FormData();\n for (const key in params) {\n fd.set(key, params[key]);\n }\n const options = {\n method: 'POST',\n body: fd\n };\n fetch(url, options).then(res => {\n return res.text();\n }).then(text => {\n resolve(text);\n }).catch(err => {\n reject(new Error(err.message));\n });\n });\n }\n },\n // @HTTP\u3068AJAX(\u4FDD\u8A3C)\n 'AJAX\u4FDD\u969C\u9001\u4FE1': {\n type: 'func',\n josi: [['\u307E\u3067', '\u3078', '\u306B']],\n pure: true,\n fn: function (url, sys) {\n let options = sys.__getSysVar('AJAX\u30AA\u30D7\u30B7\u30E7\u30F3');\n if (options === '') {\n options = { method: 'GET' };\n }\n return fetch(url, options);\n },\n return_none: false\n },\n 'HTTP\u4FDD\u969C\u53D6\u5F97': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089', '\u3092']],\n pure: true,\n fn: function (url, sys) {\n return sys.__exec('AJAX\u4FDD\u969C\u9001\u4FE1', [url, sys]);\n },\n return_none: false\n },\n 'POST\u4FDD\u969C\u9001\u4FE1': {\n type: 'func',\n josi: [['\u307E\u3067', '\u3078', '\u306B'], ['\u3092']],\n pure: true,\n fn: function (url, params, sys) {\n const bodyData = sys.__exec('POST\u30C7\u30FC\u30BF\u751F\u6210', [params, sys]);\n const options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n body: bodyData\n };\n return fetch(url, options);\n },\n return_none: false\n },\n 'POST\u30D5\u30A9\u30FC\u30E0\u4FDD\u969C\u9001\u4FE1': {\n type: 'func',\n josi: [['\u307E\u3067', '\u3078', '\u306B'], ['\u3092']],\n pure: true,\n fn: function (url, params, sys) {\n const fd = new FormData();\n for (const key in params) {\n fd.set(key, params[key]);\n }\n const options = {\n method: 'POST',\n body: fd\n };\n return fetch(url, options);\n },\n return_none: false\n },\n 'AJAX\u5185\u5BB9\u53D6\u5F97': {\n type: 'func',\n josi: [['\u304B\u3089'], ['\u3067']],\n pure: true,\n fn: function (res, type, sys) {\n type = type.toString().toUpperCase();\n if (type === 'TEXT' || type === '\u30C6\u30AD\u30B9\u30C8') {\n return res.text();\n }\n else if (type === 'JSON') {\n return res.json();\n }\n else if (type === 'BLOB') {\n return res.blob();\n }\n else if (type === 'ARRAY' || type === '\u914D\u5217') {\n return res.arrayBuffer();\n }\n else if (type === 'BODY' || type === '\u672C\u4F53') {\n return res.body;\n }\n return res.body();\n },\n return_none: false\n },\n // @Blob\n 'BLOB\u4F5C\u6210': {\n type: 'func',\n josi: [['\u3092', '\u304B\u3089'], ['\u3067']],\n pure: true,\n fn: function (data, options) {\n if (!(data instanceof Array)) {\n data = [data];\n }\n return new Blob(data, options);\n }\n },\n // @HTTP\u3068AJAX(\u975E\u63A8\u5968)\n 'AJAX\u9010\u6B21\u9001\u4FE1': {\n type: 'func',\n josi: [['\u307E\u3067', '\u3078', '\u306B']],\n pure: true,\n fn: function (url, sys) {\n if (!sys.resolve) {\n throw new Error('\u300EAJAX\u9010\u6B21\u9001\u4FE1\u300F\u306F\u300E\u9010\u6B21\u5B9F\u884C\u300F\u69CB\u6587\u5185\u3067\u5229\u7528\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n sys.resolveCount++;\n const resolve = sys.resolve;\n const reject = sys.reject;\n let options = sys.__getSysVar('AJAX\u30AA\u30D7\u30B7\u30E7\u30F3');\n if (options === '') {\n options = { method: 'GET' };\n }\n fetch(url, options).then(res => {\n return res.text();\n }).then(text => {\n sys.__setSysVar('\u5BFE\u8C61', text);\n resolve();\n }).catch(err => {\n reject(err.message);\n });\n },\n return_none: true\n },\n 'HTTP\u9010\u6B21\u53D6\u5F97': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089', '\u3092']],\n pure: true,\n fn: function (url, sys) {\n if (!sys.resolve) {\n throw new Error('\u300EHTTP\u9010\u6B21\u53D6\u5F97\u300F\u306F\u300E\u9010\u6B21\u5B9F\u884C\u300F\u69CB\u6587\u5185\u3067\u5229\u7528\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n sys.__exec('AJAX\u9010\u6B21\u9001\u4FE1', [url, sys]);\n },\n return_none: true\n },\n 'POST\u9010\u6B21\u9001\u4FE1': {\n type: 'func',\n josi: [['\u307E\u3067', '\u3078', '\u306B'], ['\u3092']],\n pure: true,\n fn: function (url, params, sys) {\n if (!sys.resolve) {\n throw new Error('\u300EPOST\u9001\u4FE1\u300F\u306F\u300E\u9010\u6B21\u5B9F\u884C\u300F\u69CB\u6587\u5185\u3067\u5229\u7528\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n sys.resolveCount++;\n const resolve = sys.resolve;\n const reject = sys.reject;\n const bodyData = sys.__exec('POST\u30C7\u30FC\u30BF\u751F\u6210', [params, sys]);\n const options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n body: bodyData\n };\n fetch(url, options).then(res => {\n return res.text();\n }).then(text => {\n sys.__setSysVar('\u5BFE\u8C61', text);\n resolve(text);\n }).catch(err => {\n reject(err.message);\n });\n },\n return_none: true\n },\n 'POST\u30D5\u30A9\u30FC\u30E0\u9010\u6B21\u9001\u4FE1': {\n type: 'func',\n josi: [['\u307E\u3067', '\u3078', '\u306B'], ['\u3092']],\n pure: true,\n fn: function (url, params, sys) {\n if (!sys.resolve) {\n throw new Error('\u300EPOST\u30D5\u30A9\u30FC\u30E0\u9010\u6B21\u9001\u4FE1\u300F\u306F\u300E\u9010\u6B21\u5B9F\u884C\u300F\u69CB\u6587\u5185\u3067\u5229\u7528\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n sys.resolveCount++;\n const resolve = sys.resolve;\n const reject = sys.reject;\n const fd = new FormData();\n for (const key in params) {\n fd.set(key, params[key]);\n }\n const options = {\n method: 'POST',\n body: fd\n };\n fetch(url, options).then(res => {\n return res.text();\n }).then(text => {\n sys.__setSysVar('\u5BFE\u8C61', text);\n resolve(text);\n }).catch(err => {\n reject(err.message);\n });\n },\n return_none: true\n }\n};\n", "// @ts-nocheck\nexport default {\n // @HTML\u64CD\u4F5C\n 'HTML\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (text) {\n return String(text)\n .replace(/&/g, '&amp;')\n .replace(/>/g, '&gt;')\n .replace(/</g, '&lt;');\n }\n },\n // @\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\n '\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u8A2D\u5B9A': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n asyncFn: true,\n fn: async function (text) {\n // Clipboard API\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u308B\u304B\n if (navigator.clipboard) {\n await navigator.clipboard.writeText(text);\n return;\n }\n // Clipboard API\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u306A\u3044\u5834\u5408\n const tmp = document.createElement('div');\n const pre = document.createElement('pre');\n pre.style.webkitUserSelect = 'auto';\n pre.style.userSelect = 'auto';\n tmp.appendChild(pre).textContent = text;\n // \u753B\u9762\u5916\u3078\u8868\u793A\u3059\u308B\n tmp.style.position = 'fixed';\n tmp.right = '200%';\n document.body.appendChild(tmp);\n document.getSelection().selectAllChildren(tmp);\n document.execCommand('copy');\n document.body.removeChild(tmp);\n },\n return_none: true\n },\n '\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u53D6\u5F97\u6642': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (f, sys) {\n // Clipboard API\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u308B\u304B\n if (navigator.clipboard) {\n if (typeof (f) === 'string') {\n f = sys.__findFunc(f, '\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u53D6\u5F97\u6642');\n }\n const pm = navigator.clipboard.readText();\n pm.then(text => {\n sys.__setSysVar('\u5BFE\u8C61', text);\n f(sys);\n });\n }\n else {\n throw new Error('Clipbard API\u304C\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002');\n }\n }\n },\n '\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u53D6\u5F97': {\n type: 'func',\n josi: [],\n pure: true,\n asyncFn: true,\n fn: async function (sys) {\n // Clipboard API\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u308B\u304B\n if (navigator.clipboard) {\n const result = await navigator.clipboard.readText();\n return result;\n }\n else {\n throw new Error('Clipbard API\u304C\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002');\n }\n }\n }\n};\n", "// @ts-nocheck\nexport default {\n // @WebSocket\n 'WS\u63A5\u7D9A\u5B8C\u4E86\u6642': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (callback, sys) {\n sys.__setSysVar('WS:ONOPEN', callback);\n },\n return_none: true\n },\n 'WS\u53D7\u4FE1\u6642': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (callback, sys) {\n sys.__setSysVar('WS:ONMESSAGE', callback);\n },\n return_none: true\n },\n 'WS\u30A8\u30E9\u30FC\u767A\u751F\u6642': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (callback, sys) {\n sys.__setSysVar('WS:ONERROR', callback);\n },\n return_none: true\n },\n 'WS\u63A5\u7D9A': {\n type: 'func',\n josi: [['\u306B', '\u3078', '\u306E']],\n pure: true,\n fn: function (s, sys) {\n const ws = new WebSocket(s);\n ws.onopen = () => {\n const cbOpen = sys.__getSysVar('WS:ONOPEN');\n if (cbOpen) {\n cbOpen(sys);\n }\n };\n ws.onerror = (err) => {\n const cbError = sys.__getSysVar('WS:ONERROR');\n if (cbError) {\n cbError(err, sys);\n }\n console.log('WS\u30A8\u30E9\u30FC', err);\n };\n ws.onmessage = (e) => {\n sys.__setSysVar('\u5BFE\u8C61', e.data);\n const cbMsg = sys.__getSysVar('WS:ONMESSAGE');\n if (cbMsg) {\n cbMsg(sys);\n }\n };\n sys.__setSysVar('WS:SOCKET', ws);\n return ws;\n }\n },\n 'WS\u9001\u4FE1': {\n type: 'func',\n josi: [['\u3092', '\u3068']],\n pure: true,\n fn: function (s, sys) {\n const ws = sys.__getSysVar('WS:SOCKET');\n ws.send(s);\n }\n },\n 'WS\u5207\u65AD': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n const ws = sys.__getSysVar('WS:SOCKET');\n ws.close();\n }\n }\n};\n", "// @ts-nocheck\n// plugin_browser_in_worker.js\nimport PartBrowserColor from './plugin_browser_color.mjs';\nimport PartBrowserAjax from './plugin_browser_ajax.mjs';\nimport PartBrowserHtml from './plugin_browser_html.mjs';\nimport PartBrowserWebsocket from './plugin_browser_websocket.mjs';\nconst BrowserParts = [\n PartBrowserColor,\n PartBrowserAjax,\n PartBrowserHtml,\n PartBrowserWebsocket\n];\nconst PluginBrowserInWorker = {\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n /* eslint no-global-assign: 0 */\n if (typeof self === 'undefined') {\n self = {};\n }\n if (typeof navigator === 'undefined') {\n navigator = {};\n }\n // \u5B9A\u6570\u3092\u521D\u671F\u5316\n sys.__setSysVar('AJAX:ONERROR', (err) => { console.log(err); });\n // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u521D\u671F\u5316\n sys.__v0.SELF = self;\n sys.__v0.NAVIGATOR = navigator;\n }\n }\n};\nBrowserParts.forEach((a) => {\n const b = {};\n Object.assign(b, a);\n if (typeof b['\u521D\u671F\u5316'] !== 'undefined') {\n delete b['\u521D\u671F\u5316'];\n }\n Object.assign(PluginBrowserInWorker, b);\n});\nexport default PluginBrowserInWorker;\n", "// @ts-nocheck\nconst PluginWorker = {\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n sys.__v0.SELF = self || {}\n sys.__v0['\u4F9D\u983C\u4E3B'] = self || {}\n }\n },\n\n '\u5BFE\u8C61\u30A4\u30D9\u30F3\u30C8': { type: 'const', value: '' }, // @\u305F\u3044\u3057\u3087\u3046\u3044\u3079\u3093\u3068\n '\u53D7\u4FE1\u30C7\u30FC\u30BF': { type: 'const', value: '' }, // @\u305F\u3044\u3057\u3087\u3046\u3044\u3079\u3093\u3068\n 'SELF': { type: 'const', value: '' }, // @SELF\n '\u4F9D\u983C\u4E3B': { type: 'const', value: '' }, // @SELF\n\n 'NAKO\u30EF\u30FC\u30AB\u30FC\u30C7\u30FC\u30BF\u53D7\u4FE1\u6642': { // @\u7121\u540D\u95A2\u6570F\u3067\u306A\u3067\u3057\u3053v3\u30A8\u30F3\u30B8\u30F3\u306B\u5BFE\u3057\u3066\u30EF\u30FC\u30AB\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8\u306B\u3088\u308A\u30C7\u30FC\u30BF\u3092\u53D7\u4FE1\u3057\u305F\u6642\u306B\u5B9F\u884C\u3059\u308B\u30A4\u30D9\u30F3\u30C8\u3092\u8A2D\u5B9A\u3002\u300E\u53D7\u4FE1\u30C7\u30FC\u30BF\u300F\u306B\u53D7\u4FE1\u3057\u305F\u30C7\u30FC\u30BFM\u3002\u300E\u5BFE\u8C61\u30A4\u30D9\u30F3\u30C8\u300F\u306B\u30A4\u30D9\u30F3\u30C8\u5F15\u6570\u3002 // @NAKO\u308F\u30FC\u304B\u30FC\u3067\u30FC\u305F\u3058\u3085\u3057\u3093\u3057\u305F\u3068\u304D\n type: 'func',\n josi: [['\u3067']],\n pure: false,\n fn: function (func, sys) {\n func = sys.__findVar(func, null) // \u6587\u5B57\u5217\u6307\u5B9A\u306A\u3089\u95A2\u6570\u306B\u5909\u63DB\n sys.__setSysVar('PluginWorker:ondata', (data, e) => {\n sys.__v0['\u53D7\u4FE1\u30C7\u30FC\u30BF'] = data\n sys.__v0['\u5BFE\u8C61\u30A4\u30D9\u30F3\u30C8'] = e\n return func(e, sys)\n })\n },\n return_none: true\n },\n '\u30EF\u30FC\u30AB\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8\u53D7\u4FE1\u6642': { // @\u7121\u540D\u95A2\u6570F\u3067self\u306B\u5BFE\u3057\u3066\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u53D7\u4FE1\u3057\u305F\u6642\u306B\u5B9F\u884C\u3059\u308B\u30A4\u30D9\u30F3\u30C8\u3092\u8A2D\u5B9A\u3002\u300E\u53D7\u4FE1\u30C7\u30FC\u30BF\u300F\u306B\u53D7\u4FE1\u3057\u305F\u30C7\u30FC\u30BF\u3002\u300E\u5BFE\u8C61\u30A4\u30D9\u30F3\u30C8\u300F\u306B\u30A4\u30D9\u30F3\u30C8\u5F15\u6570\u3002 // @\u308F\u30FC\u304B\u30FC\u3081\u3063\u305B\u30FC\u3058\u3058\u3085\u3057\u3093\u3057\u305F\u3068\u304D\n type: 'func',\n josi: [['\u3067']],\n pure: false,\n fn: function (func, sys) {\n func = sys.__findVar(func, null) // \u6587\u5B57\u5217\u6307\u5B9A\u306A\u3089\u95A2\u6570\u306B\u5909\u63DB\n self.onmessage = (e) => {\n sys.__v0['\u53D7\u4FE1\u30C7\u30FC\u30BF'] = e.data\n sys.__v0['\u5BFE\u8C61\u30A4\u30D9\u30F3\u30C8'] = e\n return func(e, sys)\n }\n },\n return_none: true\n },\n 'NAKO\u30EF\u30FC\u30AB\u30FC\u30C7\u30FC\u30BF\u9001\u4FE1': { // @\u8D77\u52D5\u3082\u3068\u306B\u56FA\u6709\u306E\u5F62\u5F0F\u3067\u30C7\u30FC\u30BF\u3092\u9001\u4FE1\u3059\u308B\u3002 // @NAKO\u308F\u30FC\u304B\u30FC\u3067\u30FC\u305F\u3078\u3093\u3057\u3093\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (data, sys) {\n const msg = {\n type: 'data',\n data: data\n }\n postMessage(msg)\n },\n return_none: true\n },\n '\u30EF\u30FC\u30AB\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8\u9001\u4FE1': { // @\u8D77\u52D5\u3082\u3068\u306B\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u9001\u4FE1\u3059\u308B\u3002 // @\u308F\u30FC\u304B\u30FC\u3081\u3063\u305B\u30FC\u3058\u3078\u3093\u3057\u3093\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (msg, sys) {\n postMessage(msg)\n },\n return_none: true\n },\n '\u8868\u793A': { // @\u30E1\u30A4\u30F3\u30B9\u30EC\u30C3\u30C9\u306B\u56FA\u6709\u306E\u5F62\u5F0F\u3067\u8868\u793A\u30C7\u30FC\u30BF\u3092\u9001\u4FE1\u3059\u308B\u3002 // @\u3072\u3087\u3046\u3058\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (data, sys) {\n const msg = {\n type: 'output',\n data: data\n }\n postMessage(msg)\n },\n return_none: true\n },\n '\u7D42\u4E86': { // @\u30EF\u30FC\u30AB\u30FC\u3092\u7D42\u4E86\u3059\u308B\u3002 // @\u3057\u3085\u3046\u308A\u3087\u3046\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n close()\n },\n return_none: true\n }\n}\n\n// module.exports = PluginWorker\nexport default PluginWorker\n\n\n", "// nadesiko for web browser worker\n// wwnako3.js\nimport { NakoCompiler } from '../core/src/nako3.mjs'\nimport PluginBrowserInWorker from './plugin_browser_in_worker.mjs'\nimport PluginWorker from './plugin_worker.mjs'\n\nclass WebWorkerNakoCompiler extends NakoCompiler {\n constructor () {\n super()\n this.__setSysVar('\u30CA\u30C7\u30B7\u30B3\u7A2E\u985E', 'wwnako3')\n this.__setSysVar('PluginWorker:ondata', (data, event) => {\n throw new Error('\u300ENAKO\u30EF\u30FC\u30AB\u30FC\u30C7\u30FC\u30BF\u53D7\u4FE1\u6642\u300F\u304C\u547C\u3070\u308C\u3066\u3044\u307E\u305B\u3093\u3002')\n })\n }\n}\n\n// \u30D6\u30E9\u30A6\u30B6\u30EF\u30FC\u30AB\u30FC\u306A\u3089 navigator.nako3 \u306B\u306A\u3067\u3057\u3053\u3092\u767B\u9332\n// eslint-disable-next-line no-undef\nif (typeof (navigator) === 'object' && self && self instanceof WorkerGlobalScope) {\n /** @type {WebWorkerNakoCompiler} */\n const nako3Compiler = navigator.nako3 = new WebWorkerNakoCompiler()\n /** @type {WebWorkerNakoCompiler | import('./nako_global')} */\n let nako3Global = nako3Compiler\n \n nako3Compiler.addPluginObject('PluginBrowserInWorker', PluginBrowserInWorker)\n nako3Compiler.addPluginObject('PluginWorker', PluginWorker)\n\n nako3Compiler.getLogger().addListener('error', function (obj) {\n self.postMessage({\n type: 'error',\n data: obj\n })\n }, false)\n\n self.onmessage = (event) => {\n const data = event.data || { type: '', data: '' }\n const type = data.type || ''\n const value = data.data || ''\n switch (type) {\n case 'reset':\n nako3Compiler.reset()\n break\n case 'close':\n self.close()\n break\n case 'run':\n nako3Global = nako3Global.runEx(value, '_webworker.nako3', { resetEnv: false, resetLog: false })\n break\n case 'trans':\n value.forEach(o => {\n if (o.type === 'func') {\n nako3Compiler.nakoFuncList[o.name] = o.content.meta\n nako3Compiler.funclist[o.name] = o.content.func\n nako3Compiler.__varslist[1].set(o.name, () => {})\n } else if (o.type === 'val') {\n nako3Compiler.__varslist[2].set(o.name, o.content)\n } else if (o.type === 'env') {\n if (o.name === 'modlist') {\n for (const modInfo of o.content) {\n if (nako3Compiler.lexer.modList.indexOf(modInfo.name) < 0) {\n nako3Compiler.lexer.modList.push(modInfo.name)\n }\n if (modInfo.export != null && !nako3Compiler.moduleExport.hasOwnProperty(modInfo.name)) {\n nako3Compiler.moduleExport[modInfo.name] = modInfo.export\n }\n }\n } else if (o.name === 'constPools') {\n nako3Compiler.constPools = o.content\n } else if (o.name === 'constPoolsTemplate') {\n nako3Compiler.constPoolsTemplate = o.content\n } else if (o.name === 'chk') {\n nako3Compiler.chk = o.content\n }\n }\n })\n break\n case 'data':\n if (nako3Global.__getSysVar('PluginWorker:ondata')) {\n nako3Global.__getSysVar('PluginWorker:ondata').apply(nako3Global, [value, event])\n }\n break\n }\n }\n}\n\n"],
4
+ "sourcesContent": ["export const opPriority = {\n // and or\n 'and': 1,\n 'or': 1,\n // compare\n 'eq': 2,\n 'noteq': 2,\n '===': 2,\n '!==': 2,\n 'gt': 2,\n 'gteq': 2,\n 'lt': 2,\n 'lteq': 2,\n '&': 3,\n // + - << >> >>>\n '+': 4,\n '-': 4,\n 'shift_l': 4,\n 'shift_r': 4,\n 'shift_r0': 4,\n // * /\n '*': 5,\n '/': 5, // \u4E00\u822C\u7684\u306A\u5272\u308A\u7B97\n '\u00F7': 5, // \u4E00\u822C\u7684\u306A\u5272\u308A\u7B97\n '\u00F7\u00F7': 5, // \u6574\u6570\u306E\u5272\u308A\u7B97\n '%': 5,\n // ^\n '^': 6,\n '**': 6\n};\nexport const RenbunJosi = [\n '\u3044\u3066', '\u3048\u3066', '\u304D\u3066', '\u3051\u3066', '\u3057\u3066', '\u3063\u3066', '\u306B\u3066', '\u307F\u3066', '\u3081\u3066', '\u306D\u3066', '\u306B\u306F', '\u3093\u3067'\n];\nexport const operatorList = [];\nfor (const key in opPriority) {\n operatorList.push(key);\n}\n", "/**\n * \u306A\u3067\u3057\u30533 \u306E TypeScript \u306E\u305F\u3081\u306E\u578B\u5B9A\u7FA9\n */\nexport function NewEmptyToken(type = '?', value = '', indent = -1, line = 0, file = 'main.nako3') {\n return {\n type,\n value,\n indent,\n line,\n column: 0,\n file,\n josi: ''\n };\n}\n", "import { NewEmptyToken } from './nako_types.mjs';\n/**\n * \u306A\u3067\u3057\u3053\u306E\u69CB\u6587\u89E3\u6790\u306E\u305F\u3081\u306E\u30E6\u30FC\u30C6\u30A3\u30EA\u30C6\u30A3\u30AF\u30E9\u30B9\n */\nexport class NakoParserBase {\n constructor(logger) {\n this.logger = logger;\n this.stackList = []; // \u95A2\u6570\u5B9A\u7FA9\u306E\u969B\u306B\u30B9\u30BF\u30C3\u30AF\u304C\u6DF7\u4E71\u3057\u306A\u3044\u3088\u3046\u306B\u6574\u7406\u3059\u308B\n this.tokens = [];\n this.usedFuncs = new Set();\n /** @type {import('./nako3.mjs').Ast[]} */\n this.stack = [];\n this.index = 0;\n /** \u30C8\u30FC\u30AF\u30F3\u51FA\u73FE\u30C1\u30A7\u30C3\u30AF(accept\u95A2\u6570)\u306B\u5229\u7528\u3059\u308B\n * @type {import('./nako3.mjs').Ast[]}\n */\n this.y = [];\n /** \u30E2\u30B8\u30E5\u30EB\u540D @type {string} */\n this.modName = 'inline';\n this.namespaceStack = [];\n /**\n * \u5229\u7528\u3059\u308B\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u540D\u524D\u4E00\u89A7\n * @type {Array<string>}\n */\n this.modList = [];\n /** \u30B0\u30ED\u30FC\u30D0\u30EB\u5909\u6570\u30FB\u95A2\u6570\u306E\u78BA\u8A8D\u7528 */\n this.funclist = new Map();\n this.funcLevel = 0;\n this.usedAsyncFn = false; // asyncFn\u306E\u547C\u3073\u51FA\u3057\u304C\u3042\u308B\u304B\u3069\u3046\u304B\n /**\n * \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u306E\u78BA\u8A8D\u7528\n * @type {Object.<string,Object>}\n */\n this.localvars = new Map([['\u305D\u308C', { type: 'var', value: '' }]]);\n /** \u30B3\u30FC\u30C9\u751F\u6210\u5668\u306E\u540D\u524D @type {string} */\n this.genMode = 'sync'; // #637\n /** \u914D\u5217\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u304C\u5148\u982D\u8981\u7D20(#1140) @type {int} */\n this.arrayIndexFrom = 0;\n /** \u914D\u5217\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u9806\u5E8F\u3092\u53CD\u5BFE\u306B\u3059\u308B\u304B(#1140) @type {boolean} */\n this.flagReverseArrayIndex = false;\n /** \u914D\u5217\u3092\u81EA\u52D5\u7684\u306B\u521D\u671F\u5316\u3059\u308B\u304B(#1140) @type {boolean} */\n this.flagCheckArrayInit = false;\n /** \u6700\u8FD1\u547C\u3073\u51FA\u3057\u305F\u95A2\u6570(\u4F59\u5270\u30A8\u30E9\u30FC\u306E\u5831\u544A\u306B\u4F7F\u3046) */\n this.recentlyCalledFunc = [];\n // \u69CB\u6587\u89E3\u6790\u306B\u5229\u7528\u3059\u308B - \u73FE\u5728\u8A08\u7B97\u5F0F\u3092\u8AAD\u3093\u3067\u3044\u308B\u304B\u3069\u3046\u304B\n this.isReadingCalc = false;\n // \u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u8A2D\u5B9A\u304C\u672A\u8A2D\u5B9A\u306E\u95A2\u6570\u30FB\u5909\u6570\u306B\u5BFE\u3059\u308B\u65E2\u5B9A\u5024\n this.isExportDefault = true;\n this.isExportStack = [];\n this.moduleExport = new Map();\n this.isModifiedNodes = false;\n this.init();\n }\n init() {\n this.funclist = new Map(); // \u95A2\u6570\u306E\u4E00\u89A7\n this.moduleExport = new Map();\n this.reset();\n }\n reset() {\n this.tokens = []; // \u5B57\u53E5\u89E3\u6790\u6E08\u307F\u306E\u30C8\u30FC\u30AF\u30F3\u306E\u4E00\u89A7\u3092\u4FDD\u5B58\n this.index = 0; // tokens[] \u306E\u3069\u3053\u307E\u3067\u8AAD\u3093\u3060\u304B\u3092\u7BA1\u7406\u3059\u308B\n this.stack = []; // \u8A08\u7B97\u7528\u306E\u30B9\u30BF\u30C3\u30AF ... \u76F4\u63A5\u306F\u64CD\u4F5C\u305B\u305A\u3001pushStack() popStack() \u3092\u4ECB\u3057\u3066\u4F7F\u3046\n this.y = []; // accept()\u3067\u89E3\u6790\u6E08\u307F\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u914D\u5217\u3067\u5F97\u308B\u3068\u304D\u306B\u4F7F\u3046\n this.genMode = 'sync'; // #637, #1056\n // \u6B21\u56DE\u5B9F\u884C\u6642\u306B\u6301\u3061\u8D8A\u3055\u308C\u306A\u3044\u3088\u3046\u306B\u521D\u671F\u5316\u3059\u308B (#1746)\n this.localvars = new Map([['\u305D\u308C', { type: 'var', value: '' }]]);\n this.usedFuncs = new Set();\n this.funcLevel = 0;\n this.usedAsyncFn = false;\n this.isReadingCalc = false;\n this.isExportDefault = true;\n this.isExportStack = [];\n this.namespaceStack = [];\n this.modList = [];\n this.stackList = [];\n this.recentlyCalledFunc = [];\n this.arrayIndexFrom = 0;\n this.flagReverseArrayIndex = false;\n this.flagCheckArrayInit = false;\n this.isModifiedNodes = false;\n }\n setFuncList(funclist) {\n this.funclist = funclist;\n }\n setModuleExport(moduleexport) {\n this.moduleExport = moduleexport;\n }\n /**\n * \u7279\u5B9A\u306E\u52A9\u8A5E\u3092\u6301\u3064\u8981\u7D20\u3092\u30B9\u30BF\u30C3\u30AF\u304B\u3089\u4E00\u3064\u4E0B\u308D\u3059\u3001\u6307\u5B9A\u304C\u306A\u3051\u308C\u3070\u672B\u5C3E\u3092\u4E0B\u308D\u3059\n * @param {string[]} josiList \u4E0B\u308D\u3057\u305F\u3044\u52A9\u8A5E\u306E\u914D\u5217\n */\n popStack(josiList = undefined) {\n if (!josiList) {\n const t = this.stack.pop();\n if (t) {\n return t;\n }\n return null;\n }\n // josiList \u306B\u30DE\u30C3\u30C1\u3059\u308B\u52A9\u8A5E\u3092\u63A2\u3059\n for (let i = this.stack.length - 1; i >= 0; i--) {\n const t = this.stack[i];\n if (josiList.length === 0 || josiList.indexOf(t.josi) >= 0) {\n this.stack.splice(i, 1); // remove stack\n this.logger.trace('POP :' + JSON.stringify(t));\n return t;\n }\n }\n // \u8A72\u5F53\u3059\u308B\u52A9\u8A5E\u304C\u898B\u3064\u304B\u3089\u306A\u304B\u3063\u305F\u5834\u5408\n return null;\n }\n /**\n * saveStack \u3068 loadStack \u306F\u5BFE\u3067\u4F7F\u3046\u3002\n * \u95A2\u6570\u5B9A\u7FA9\u306A\u3069\u3067\u30B9\u30BF\u30C3\u30AF\u304C\u6DF7\u4E71\u3057\u306A\u3044\u3088\u3046\u306B\u914D\u616E\u3059\u308B\u305F\u3081\u306E\u3082\u306E\n */\n saveStack() {\n this.stackList.push(this.stack);\n this.stack = [];\n }\n loadStack() {\n this.stack = this.stackList.pop();\n }\n /** \u5909\u6570\u540D\u3092\u63A2\u3059\n * @param {string} name\n * @returns {any}\u5909\u6570\u540D\u306E\u60C5\u5831\n */\n findVar(name) {\n // \u30ED\u30FC\u30AB\u30EB\u5909\u6570\uFF1F\n if (this.localvars.get(name)) {\n return {\n name,\n scope: 'local',\n info: this.localvars.get(name)\n };\n }\n // \u30E2\u30B8\u30E5\u30FC\u30EB\u540D\u3092\u542B\u3093\u3067\u3044\u308B?\n if (name.indexOf('__') >= 0) {\n if (this.funclist.get(name)) {\n return {\n name,\n scope: 'global',\n info: this.funclist.get(name)\n };\n }\n else {\n return undefined;\n }\n }\n // \u30B0\u30ED\u30FC\u30D0\u30EB\u5909\u6570\uFF08\u81EA\u8EAB\uFF09\uFF1F\n const gnameSelf = `${this.modName}__${name}`;\n if (this.funclist.get(gnameSelf)) {\n return {\n name: gnameSelf,\n scope: 'global',\n info: this.funclist.get(gnameSelf)\n };\n }\n // \u30B0\u30ED\u30FC\u30D0\u30EB\u5909\u6570\uFF08\u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u691C\u7D22\uFF09\uFF1F\n for (const mod of this.modList) {\n const gname = `${mod}__${name}`;\n const exportDefault = this.moduleExport.get(mod);\n const funcObj = this.funclist.get(gname);\n if (funcObj && (funcObj.isExport === true || (funcObj.isExport !== false && exportDefault !== false))) {\n return {\n name: gname,\n scope: 'global',\n info: this.funclist.get(gname)\n };\n }\n }\n // \u30B7\u30B9\u30C6\u30E0\u5909\u6570 (funclist\u3092\u666E\u901A\u306B\u691C\u7D22)\n if (this.funclist.get(name)) {\n return {\n name,\n scope: 'system',\n info: this.funclist.get(name)\n };\n }\n return undefined;\n }\n /**\n * \u8A08\u7B97\u7528\u306B\u8981\u7D20\u3092\u30B9\u30BF\u30C3\u30AF\u306B\u7A4D\u3080\n */\n pushStack(item) {\n this.logger.trace('PUSH:' + JSON.stringify(item));\n this.stack.push(item);\n }\n /**\n * \u30C8\u30FC\u30AF\u30F3\u306E\u672B\u5C3E\u306B\u9054\u3057\u305F\u304B\n */\n isEOF() {\n return (this.index >= this.tokens.length);\n }\n getIndex() {\n return this.index;\n }\n /**\n * \u30AB\u30FC\u30BD\u30EB\u4F4D\u7F6E\u306B\u3042\u308B\u5358\u8A9E\u306E\u578B\u3092\u78BA\u304B\u3081\u308B\n */\n check(ttype) {\n return (this.tokens[this.index].type === ttype);\n }\n /**\n * \u30AB\u30FC\u30BD\u30EB\u4F4D\u7F6E\u4EE5\u964D\u306B\u3042\u308B\u5358\u8A9E\u306E\u578B\u3092\u78BA\u304B\u3081\u308B 2\u5358\u8A9E\u4EE5\u4E0A\u306B\u5BFE\u5FDC\n * @param a [\u5358\u8A9E1\u306E\u578B, \u5358\u8A9E2\u306E\u578B, ... ]\n */\n check2(a) {\n for (let i = 0; i < a.length; i++) {\n const idx = i + this.index;\n if (this.tokens.length <= idx) {\n return false;\n }\n if (a[i] === '*') {\n continue;\n } // \u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9(\u3069\u3093\u306A\u30BF\u30A4\u30D7\u3082\u8A31\u5BB9)\n const t = this.tokens[idx];\n if (a[i] instanceof Array) {\n if (a[i].indexOf(t.type) < 0) {\n return false;\n }\n continue;\n }\n if (t.type !== a[i]) {\n return false;\n }\n }\n return true;\n }\n /**\n * \u30AB\u30FC\u30BD\u30EB\u4F4D\u7F6E\u306E\u578B\u3092\u78BA\u8A8D\u3059\u308B\u304C\u3001\u8907\u6570\u306E\u7A2E\u985E\u3092\u78BA\u304B\u3081\u3089\u308C\u308B\n */\n checkTypes(a) {\n const type = this.tokens[this.index].type;\n return (a.indexOf(type) >= 0);\n }\n /**\n * check2\u306E\u9AD8\u5EA6\u306A\u3084\u3064\u3001\u578B\u540D\u306E\u4ED6\u306B\u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u95A2\u6570\u3092\u6307\u5B9A\u3067\u304D\u308B\n * \u578B\u306B\u30DE\u30C3\u30C1\u3057\u306A\u3051\u308C\u3070 false \u3092\u8FD4\u3057\u3001\u30AB\u30FC\u30BD\u30EB\u3092\u5DFB\u304D\u623B\u3059\n */\n accept(types) {\n const y = [];\n const tmpIndex = this.index;\n const rollback = () => {\n this.index = tmpIndex;\n return false;\n };\n for (let i = 0; i < types.length; i++) {\n if (this.isEOF()) {\n return rollback();\n }\n const type = types[i];\n if (type === null) {\n return rollback();\n }\n if (typeof type === 'string') {\n const token = this.get();\n if (token && token.type !== type) {\n return rollback();\n }\n y[i] = token;\n continue;\n }\n if (typeof type === 'function') {\n const f = type.bind(this);\n const r = f(y);\n if (r === null) {\n return rollback();\n }\n y[i] = r;\n continue;\n }\n if (type instanceof Array) {\n if (!this.checkTypes(type)) {\n return rollback();\n }\n y[i] = this.get();\n continue;\n }\n throw new Error('System Error : accept broken : ' + typeof type);\n }\n this.y = y;\n return true;\n }\n /**\n * \u30AB\u30FC\u30BD\u30EB\u8A9E\u53E5\u3092\u53D6\u5F97\u3057\u3066\u3001\u30AB\u30FC\u30BD\u30EB\u3092\u5F8C\u308D\u306B\u79FB\u52D5\u3059\u308B\n */\n get() {\n if (this.isEOF()) {\n return null;\n }\n return this.tokens[this.index++];\n }\n /** \u30AB\u30FC\u30BD\u30EB\u8A9E\u53E5\u3092\u53D6\u5F97\u3057\u3066\u30AB\u30FC\u30BD\u30EB\u3092\u9032\u3081\u308B\u3001\u53D6\u5F97\u3067\u304D\u306A\u3051\u308C\u3070\u30A8\u30E9\u30FC\u3092\u51FA\u3059 */\n getCur() {\n if (this.isEOF()) {\n throw new Error('\u30C8\u30FC\u30AF\u30F3\u304C\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3002');\n }\n const t = this.tokens[this.index++];\n if (!t) {\n throw new Error('\u30C8\u30FC\u30AF\u30F3\u304C\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3002');\n }\n return t;\n }\n unget() {\n if (this.index > 0) {\n this.index--;\n }\n }\n /** \u89E3\u6790\u4E2D\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u8FD4\u3059 */\n peek(i = 0) {\n if (this.isEOF()) {\n return null;\n }\n return this.tokens[this.index + i];\n }\n /** \u89E3\u6790\u4E2D\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u8FD4\u3059\u3001\u7121\u7406\u306A\u3089 def \u3092\u8FD4\u3059 */\n peekDef(def = null) {\n if (this.isEOF()) {\n if (!def) {\n def = NewEmptyToken();\n }\n return def;\n }\n return this.tokens[this.index];\n }\n /**\n * \u73FE\u5728\u306E\u30AB\u30FC\u30BD\u30EB\u8A9E\u53E5\u306E\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u4E0A\u306E\u4F4D\u7F6E\u3092\u53D6\u5F97\u3059\u308B\u3002\n */\n peekSourceMap(t = undefined) {\n const token = (t === undefined) ? this.peek() : t;\n if (token === null) {\n return { startOffset: undefined, endOffset: undefined, file: undefined, line: 0, column: 0 };\n }\n return { startOffset: token.startOffset, endOffset: token.endOffset, file: token.file, line: token.line, column: token.column };\n }\n /**\n * depth: \u8868\u793A\u3059\u308B\u6DF1\u3055\n * typeName: \u5148\u982D\u306Etype\u306E\u8868\u793A\u3092\u4E0A\u66F8\u304D\u3059\u308B\u5834\u5408\u306B\u8A2D\u5B9A\u3059\u308B\n * @param {{ depth: number, typeName?: string }} opts\n * @param {boolean} debugMode\n */\n nodeToStr(node, opts, debugMode) {\n const depth = opts.depth - 1;\n const typeName = (name) => (opts.typeName !== undefined) ? opts.typeName : name;\n const debug = debugMode ? (' debug: ' + JSON.stringify(node, null, 2)) : '';\n if (!node) {\n return '(NULL)';\n }\n switch (node.type) {\n case 'not':\n if (depth >= 0) {\n const subNode = node.blocks[0];\n return `${typeName('')}\u300E${this.nodeToStr(subNode, { depth }, debugMode)}\u306B\u6F14\u7B97\u5B50\u300Enot\u300F\u3092\u9069\u7528\u3057\u305F\u5F0F${debug}\u300F`;\n }\n else {\n return `${typeName('\u6F14\u7B97\u5B50')}\u300Enot\u300F`;\n }\n case 'op': {\n const node2 = node;\n let operator = node2.operator || '';\n const table = { eq: '\uFF1D', not: '!', gt: '>', lt: '<', and: '\u304B\u3064', or: '\u307E\u305F\u306F' };\n if (operator in table) {\n operator = table[operator];\n }\n if (depth >= 0) {\n const left = this.nodeToStr(node2.blocks[0], { depth }, debugMode);\n const right = this.nodeToStr(node2.blocks[1], { depth }, debugMode);\n if (node2.operator === 'eq') {\n return `${typeName('')}\u300E${left}\u3068${right}\u304C\u7B49\u3057\u3044\u304B\u3069\u3046\u304B\u306E\u6BD4\u8F03${debug}\u300F`;\n }\n return `${typeName('')}\u300E${left}\u3068${right}\u306B\u6F14\u7B97\u5B50\u300E${operator}\u300F\u3092\u9069\u7528\u3057\u305F\u5F0F${debug}\u300F`;\n }\n else {\n return `${typeName('\u6F14\u7B97\u5B50')}\u300E${operator}${debug}\u300F`;\n }\n }\n case 'number':\n return `${typeName('\u6570\u5024')}${node.value}`;\n case 'bigint':\n return `${typeName('\u5DE8\u5927\u6574\u6570')}${node.value}`;\n case 'string':\n return `${typeName('\u6587\u5B57\u5217')}\u300E${node.value}${debug}\u300F`;\n case 'word':\n return `${typeName('\u5358\u8A9E')}\u300E${node.value}${debug}\u300F`;\n case 'func':\n return `${typeName('\u95A2\u6570')}\u300E${node.name || node.value}${debug}\u300F`;\n case 'eol':\n return '\u884C\u306E\u672B\u5C3E';\n case 'eof':\n return '\u30D5\u30A1\u30A4\u30EB\u306E\u672B\u5C3E';\n default: {\n let name = node.name;\n if (name) {\n name = node.value;\n }\n if (typeof name !== 'string') {\n name = node.type;\n }\n return `${typeName('')}\u300E${name}${debug}\u300F`;\n }\n }\n }\n}\n", "/**\n * \u306A\u3067\u3057\u3053\u8A00\u8A9E\u304C\u6295\u3052\u308B\u5168\u3066\u306E\u30A8\u30E9\u30FC\u304C\u7D99\u627F\u3059\u308B\u30AF\u30E9\u30B9\n */\nexport class NakoError extends Error {\n constructor(tag, msg, file = undefined, line = undefined) {\n // \u30A8\u30E9\u30FC\u4F4D\u7F6E\u3092\u5206\u304B\u308A\u3084\u3059\u304F\u65E5\u672C\u8A9E\u306B\u5909\u63DB\n const positionJa = `${file || ''}${line === undefined ? '' : `(${line + 1}\u884C\u76EE): `}`;\n // #1223 \u30A8\u30E9\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8\u306B\u300Cmain__\u95A2\u6570\u540D\u300D\u3068\u8868\u793A\u3055\u308C\u308B\u306E\u3067\u3001main__\u306F\u7701\u7565\u3057\u3066\u8868\u793A\n msg = msg.replace(/\u300Emain__(.+?)\u300F/g, '\u300E$1\u300F');\n // \u89AA\u306EError\u3092\u547C\u3076\n super(`[${tag}]${positionJa}${msg}`);\n // \u30A8\u30E9\u30FC\u306E\u7A2E\u985E\u3092\u8A2D\u5B9A\n this.name = 'NakoError';\n this.type = 'NakoError';\n this.tag = '[' + tag + ']';\n this.positionJa = positionJa;\n this.msg = msg;\n }\n}\nexport class NakoIndentError extends NakoError {\n /**\n * @param {string} msg\n * @param {number} line\n * @param {string} file\n */\n constructor(msg, line, file) {\n super('\u30A4\u30F3\u30C7\u30F3\u30C8\u30A8\u30E9\u30FC', msg, file, line);\n this.type = 'NakoIndentError';\n this.line = line;\n this.file = file;\n }\n}\n// \u30B3\u30F3\u30D1\u30A4\u30E9\u306E\u5185\u90E8\u3067\u306E\u307F\u4F7F\u3046\u30A8\u30E9\u30FC\u3002\u6295\u3052\u3089\u308C\u305F\u3089try\u3067\u30AD\u30E3\u30C3\u30C1\u3057\u3066LexerError\u3078\u5909\u66F4\u3059\u308B\u3002\nexport class InternalLexerError extends NakoError {\n /**\n * @param {string} msg\n * @param {number} preprocessedCodeStartOffset\n * @param {number} preprocessedCodeEndOffset\n * @param {number | undefined} [line]\n * @param {string | undefined} [file]\n */\n constructor(msg, preprocessedCodeStartOffset, preprocessedCodeEndOffset, line, file) {\n super('\u5B57\u53E5\u89E3\u6790\u30A8\u30E9\u30FC\uFF08\u5185\u90E8\u30A8\u30E9\u30FC\uFF09', msg, file, line);\n this.type = 'InternalLexerError';\n this.preprocessedCodeStartOffset = preprocessedCodeStartOffset;\n this.preprocessedCodeEndOffset = preprocessedCodeEndOffset;\n this.line = line;\n this.file = file;\n }\n}\nexport class NakoLexerError extends NakoError {\n /**\n * @param {string} msg\n * @param {number | null} startOffset\n * @param {number | null} endOffset,\n * @param {number | undefined} line\n * @param {string | undefined} file\n */\n constructor(msg, startOffset, endOffset, line, file) {\n super('\u5B57\u53E5\u89E3\u6790\u30A8\u30E9\u30FC', msg, file, line);\n this.type = 'NakoLexerError';\n this.startOffset = startOffset;\n this.endOffset = endOffset;\n this.line = line;\n this.file = file;\n }\n}\nexport class NakoSyntaxError extends NakoError {\n /**\n * @param {string} msg\n * @param {Ast} first\n * @param {Ast} [last]\n */\n static fromNode(msg, first, last = undefined) {\n if (!first) {\n return new NakoSyntaxError(msg, undefined, undefined, undefined, undefined);\n }\n const startOffset = typeof first.startOffset === 'number' ? first.startOffset : undefined;\n const endOffset = (last && typeof last.endOffset === 'number')\n ? last.endOffset\n : (typeof first.endOffset === 'number' ? first.endOffset : undefined);\n return new NakoSyntaxError(msg, first.line, startOffset, endOffset, first.file);\n }\n /**\n * @param {string} msg\n * @param {number | undefined} line\n * @param {number | undefined} startOffset\n * @param {number | undefined} endOffset\n * @param {string | undefined} file\n */\n constructor(msg, line, startOffset, endOffset, file) {\n super('\u6587\u6CD5\u30A8\u30E9\u30FC', msg, file, line);\n this.type = 'NakoSyntaxError';\n this.file = file;\n this.line = line;\n this.startOffset = startOffset;\n this.endOffset = endOffset;\n }\n}\nexport class NakoRuntimeError extends NakoError {\n /**\n * @param error \u30A8\u30E9\u30FC\n * @param lineNo \u767A\u751F\u884C\n */\n constructor(error, lineNo) {\n let msg = 'unknown';\n if (typeof error === 'string') {\n msg = error;\n }\n else {\n if (error instanceof NakoRuntimeError) {\n msg = error.msg;\n }\n else if (error instanceof NakoError) {\n msg = error.msg;\n }\n else if (error instanceof Error) {\n if (error.name === 'Error') {\n msg = error.message;\n }\n else {\n msg = `${error.name}: ${error.message}`;\n }\n }\n }\n // \u884C\u756A\u53F7\u3092\u8868\u3059\u6587\u5B57\u5217\u3092\u30D1\u30FC\u30B9\u3059\u308B\u3002\n let line;\n let file;\n let matches;\n if (lineNo === undefined) {\n line = undefined;\n file = undefined;\n // eslint-disable-next-line no-cond-assign\n }\n else if (matches = /^l(-?\\d+):(.*)$/.exec(lineNo)) {\n line = parseInt(matches[1]);\n file = matches[2];\n // eslint-disable-next-line no-cond-assign\n }\n else if (matches = /^l(-?\\d+)$/.exec(lineNo)) {\n line = parseInt(matches[1]);\n file = 'main.nako3';\n }\n else {\n line = 0;\n file = lineNo;\n }\n super('\u5B9F\u884C\u6642\u30A8\u30E9\u30FC', msg, file, line);\n this.type = 'NakoRuntimeError';\n this.lineNo = lineNo;\n this.line = line;\n this.file = file;\n }\n}\nexport class NakoImportError extends NakoError {\n /**\n * @param {string} msg\n * @param {string} file\n * @param {number} line\n */\n constructor(msg, file, line) {\n super('\u53D6\u308A\u8FBC\u307F\u30A8\u30E9\u30FC', msg, file, line);\n this.file = file;\n this.line = line;\n }\n}\n", "/** \u4E88\u7D04\u8A9E */\nconst reserved = new Map([\n ['\u3082\u3057', '\u3082\u3057'],\n ['\u56DE', '\u56DE'],\n ['\u56DE\u7E70\u8FD4', '\u56DE'], // (#924)\n ['\u9593', '\u9593'],\n ['\u9593\u7E70\u8FD4', '\u9593'], // (#927)\n ['\u7E70\u8FD4', '\u7E70\u8FD4'],\n ['\u5897\u7E70\u8FD4', '\u5897\u7E70\u8FD4'], // (#1140)\n ['\u6E1B\u7E70\u8FD4', '\u6E1B\u7E70\u8FD4'],\n ['\u5F8C\u5224\u5B9A', '\u5F8C\u5224\u5B9A'], // (#1147)\n ['\u53CD\u5FA9', '\u53CD\u5FA9'],\n ['\u629C', '\u629C\u3051\u308B'],\n ['\u7D9A', '\u7D9A\u3051\u308B'],\n ['\u623B', '\u623B\u308B'],\n ['\u5148', '\u5148\u306B'],\n ['\u6B21', '\u6B21\u306B'],\n ['\u4EE3\u5165', '\u4EE3\u5165'],\n ['\u5B9F\u884C\u901F\u5EA6\u512A\u5148', '\u5B9F\u884C\u901F\u5EA6\u512A\u5148'],\n ['\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u30E2\u30CB\u30BF\u9069\u7528', '\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u30E2\u30CB\u30BF\u9069\u7528'], // (#986)\n ['\u5B9A', '\u5B9A\u3081\u308B'],\n ['\u9010\u6B21\u5B9F\u884C', '\u9010\u6B21\u5B9F\u884C'], // \u5EC3\u6B62 #1611 \u305F\u3060\u3057\u5FF5\u306E\u305F\u3081\u6B8B\u3057\u3066\u304A\u304F\n ['\u6761\u4EF6\u5206\u5C90', '\u6761\u4EF6\u5206\u5C90'],\n ['\u5897', '\u5897'],\n ['\u6E1B', '\u6E1B'],\n ['\u5909\u6570', '\u5909\u6570'],\n ['\u5B9A\u6570', '\u5B9A\u6570'],\n ['\u30A8\u30E9\u30FC\u76E3\u8996', '\u30A8\u30E9\u30FC\u76E3\u8996'], // \u4F8B\u5916\u51E6\u7406:\u30A8\u30E9\u30FC\u306A\u3089\u3070\u3068\u5BFE\n ['\u30A8\u30E9\u30FC', '\u30A8\u30E9\u30FC'],\n ['\u305D\u308C', 'word'],\n ['\u305D\u3046', 'word'], // \u300C\u305D\u308C\u300D\u306E\u30A8\u30A4\u30EA\u30A2\u30B9\n ['\u95A2\u6570', 'def_func'], // \u7121\u540D\u95A2\u6570\u306E\u5B9A\u7FA9\u7528\n ['\u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587', '\u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587'], // https://nadesi.com/v3/doc/go.php?949\n ['\u975E\u540C\u671F\u30E2\u30FC\u30C9', '\u975E\u540C\u671F\u30E2\u30FC\u30C9'], // (#637)\n ['DNCL\u30E2\u30FC\u30C9', 'DNCL\u30E2\u30FC\u30C9'], // (#1140)\n ['DNCL2\u30E2\u30FC\u30C9', 'DNCL2\u30E2\u30FC\u30C9'],\n ['\u30E2\u30FC\u30C9\u8A2D\u5B9A', '\u30E2\u30FC\u30C9\u8A2D\u5B9A'], // (#1020)\n ['\u53D6\u8FBC', '\u53D6\u8FBC'],\n ['\u30E2\u30B8\u30E5\u30FC\u30EB\u516C\u958B\u65E2\u5B9A\u5024', '\u30E2\u30B8\u30E5\u30FC\u30EB\u516C\u958B\u65E2\u5B9A\u5024'],\n ['\u53B3\u30C1\u30A7\u30C3\u30AF', '\u53B3\u30C1\u30A7\u30C3\u30AF'] // \u53B3\u3057\u304F\u30C1\u30A7\u30C3\u30AF (#1698)\n]);\nexport default reserved;\n", "/**\n * \u306A\u3067\u3057\u30533\u3067\u884C\u982D\u30A4\u30F3\u30C7\u30F3\u30C8\u306B\u4F7F\u3048\u308B\u6587\u5B57\u3068\u30A4\u30F3\u30C7\u30F3\u30C8\u30AB\u30A6\u30F3\u30C8\u6570\n */\nexport function isIndentChars(ch) {\n const code = ch.charCodeAt(0);\n // \u7279\u5225\u306A\u30B3\u30FC\u30C9\n if (ch === '\\t') {\n return 4;\n }\n if (ch === ' ' || ch === '|') {\n return 1;\n }\n if (ch === '\u30FB' || ch === '\u3000') {\n return 2;\n }\n if (ch === '\u23CB' || ch === '\u23CC') {\n return 2;\n } // 0x23CB, 0x23CC\n // \u7F6B\u7DDA\u304B\u3089 --- https://github.com/kujirahand/unicode-sheets/blob/main/box-drawing.md\n if (code >= 0x2500 && code <= 0x257F) {\n return 2;\n }\n // \u8A18\u53F7\u304B\u3089 --- https://github.com/kujirahand/unicode-sheets/blob/main/misc-technical.md\n if ((code >= 0x23A0 && code <= 0x23AF) ||\n (code >= 0x23B8 && code <= 0x23BF)) {\n return 2;\n }\n return 0;\n}\n", "/**\n * \u52A9\u8A5E\u306E\u4E00\u89A7\n */\n// \u57FA\u672C\u7684\u306A\u52A9\u8A5E\u306E\u4E00\u89A7\nexport const josiList = [\n '\u306B\u3064\u3044\u3066', '\u304F\u3089\u3044', '\u306A\u306E\u304B', '\u307E\u3067\u3092', '\u307E\u3067\u306E', '\u306B\u3088\u308B', '\u3068\u3057\u3066',\n '\u3068\u306F', '\u304B\u3089', '\u307E\u3067', '\u3060\u3051', '\u3088\u308A', '\u307B\u3069', '\u306A\u3069',\n '\u3044\u3066', '\u3048\u3066', '\u304D\u3066', '\u3051\u3066', '\u3057\u3066', '\u3063\u3066', '\u306B\u3066', '\u307F\u3066',\n '\u3081\u3066', '\u306D\u3066', '\u3067\u306F', '\u306B\u306F', '\u3093\u3067', '\u305A\u3064',\n '\u306F', '\u3092', '\u306B', '\u3078', '\u3067', '\u3068', '\u304C', '\u306E'\n];\n// \u300C\u3082\u3057\u300D\u6587\u3067\u4F7F\u3046\u52A9\u8A5E\nexport const tararebaJosiList = [\n '\u3067\u306A\u3051\u308C\u3070', '\u306A\u3051\u308C\u3070', '\u306A\u3089\u3070', '\u306A\u3089', '\u305F\u3089', '\u308C\u3070'\n];\n// \u610F\u5473\u306E\u306A\u3044\u52A9\u8A5E(\u524A\u9664\u3059\u308B) #936 #939 #974\nexport const removeJosiList = [\n '\u3053\u3068', '\u3067\u3042\u308B', '\u3067\u3059', '\u3057\u307E\u3059', '\u3067\u3057\u305F', '\u306B\u3083\u3093'\n];\n/**\n * \u300C\u3082\u3057\u300D\u6587\u3067\u4F7F\u3046\u300C\u305F\u3089\u300D\u300C\u308C\u3070\u300D\u306A\u3069\u306E\u4E00\u89A7\u3092\u30D7\u30ED\u30B0\u30E9\u30E0\u3067\u6271\u3044\u3084\u3059\u3044\u3088\u3046\u30DE\u30C3\u30D7\u306B\u5909\u63DB\u3057\u305F\u3082\u306E\n */\nexport const tararebaMap = {};\ntararebaJosiList.forEach(josi => {\n josiList.push(josi);\n tararebaMap[josi] = true;\n});\n/**\n * \u610F\u5473\u306E\u306A\u3044\u52A9\u8A5E(\u524A\u9664\u3059\u308B)\u3092\u30DE\u30C3\u30D7\u306B\u5909\u63DB\u3057\u305F\u3082\u306E\n */\nexport const removeJosiMap = {};\nremoveJosiList.forEach(josi => {\n josiList.push(josi);\n removeJosiMap[josi] = true;\n});\n// \u300C\u3082\u306E\u300D\u69CB\u6587 (#1614)\nconst josiListMono = [];\nfor (const jo of josiList) {\n josiListMono.push('\u3082\u306E' + jo);\n josiListMono.push(jo);\n}\n// \u6587\u5B57\u6570\u306E\u9577\u3044\u9806\u306B\u4E26\u3073\u66FF\u3048\njosiListMono.sort((a, b) => b.length - a.length);\n// \u6B63\u898F\u8868\u73FE\u3067\u52A9\u8A5E\u3092\u30DE\u30C3\u30C1\u3067\u304D\u308B\u3088\u3046\u306B\u3059\u308B\nconst pat = '^[\\\\t \u3000]*(' + josiListMono.join('|') + ')';\nexport const josiRE = new RegExp(pat);\nexport const josiListExport = josiList;\n", "/**\n * \u306A\u3067\u3057\u30533\u5B57\u53E5\u89E3\u6790\u306E\u305F\u3081\u306E\u30EB\u30FC\u30EB\n */\nimport { josiRE, removeJosiMap } from './nako_josi_list.mjs';\nconst kanakanji = /^[\\u3005\\u4E00-\\u9FCF_a-zA-Z0-9\u30A1-\u30F6\u30FC\\u2460-\\u24FF\\u2776-\\u277F\\u3251-\\u32BF]+/;\nconst hira = /^[\u3041-\u3093]/;\nconst allHiragana = /^[\u3041-\u3093]+$/;\nconst wordHasIjoIka = /^.+(\u4EE5\u4E0A|\u4EE5\u4E0B|\u8D85|\u672A\u6E80)$/;\nconst wordSpecial = /^(\u304B\u3064|\u307E\u305F\u306F)/;\nconst errorRead = (ch) => {\n return function () { throw new Error('\u7A81\u7136\u306E\u300E' + ch + '\u300F\u304C\u3042\u308A\u307E\u3059\u3002'); };\n};\n// \u6570\u5024\u306E\u5F8C\u306E\u5358\u4F4D\u306F\u81EA\u52D5\u7684\u306B\u7701\u7565\u3055\u308C\u308B\u30EB\u30FC\u30EB (#994)\nexport const unitRE = /^(\u5186|\u30C9\u30EB|\u5143|\u6B69|\u33A1|\u576A|\u5EA6|\u2103|\u00B0|\u500B|\u3064|\u672C|\u518A|\u624D|\u6B73|\u5339|\u679A|\u76BF|\u30BB\u30C3\u30C8|\u7FBD|\u4EBA|\u4EF6|\u884C|\u5217|\u6A5F|\u54C1|m|mm|cm|km|g|kg|t|b|mb|kb|gb)/;\n// CSS\u306E\u5358\u4F4D\u3067\u3042\u308C\u3070\u81EA\u52D5\u7684\u306B\u6587\u5B57\u5217\u306B\u5909\u63DB\u3059\u308B\u30EB\u30FC\u30EB (#1811)\nexport const cssUnitRE = /^(px|em|ex|rem|vw|vh|vmin|vmax)/;\n/** \u30C8\u30FC\u30AF\u30F3\u306B\u533A\u5207\u308B\u30EB\u30FC\u30EB\u306E\u4E00\u89A7 */\nexport const rules = [\n // \u4E0A\u304B\u3089\u9806\u306B\u30DE\u30C3\u30C1\u3055\u305B\u3066\u3044\u304F\n { name: '\u3053\u3053\u307E\u3067', pattern: /^;;;/ }, // #925\n { name: 'eol', pattern: /^\\n/ },\n { name: 'eol', pattern: /^;/ },\n // eslint-disable-next-line no-irregular-whitespace\n { name: 'space', pattern: /^(\\x20|\\x09|\u3000|\u30FB|\u23BF |\u2514|\uFF5C)+/ }, // #877,#1015\n { name: 'comma', pattern: /^,/ },\n { name: 'line_comment', pattern: /^#[^\\n]*/ },\n { name: 'line_comment', pattern: /^\\/\\/[^\\n]*/ },\n { name: 'range_comment', pattern: /^\\/\\*/, cbParser: cbRangeComment },\n { name: 'def_test', pattern: /^\u25CF\u30C6\u30B9\u30C8:/ },\n { name: 'def_func', pattern: /^\u25CF/ },\n { name: '\u2026', pattern: /^\u2026/ }, // \u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8(#1704)\n { name: '\u2026', pattern: /^\\.{2,3}/ }, // \u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8(#1704)\n // \u591A\u500D\u9577\u6574\u6570\u30EA\u30C6\u30E9\u30EB\u306E\u5224\u5B9A\u3002\u6574\u6570\u306E\u672B\u5C3E\u306B\u300Cn\u300D\u304C\u3064\u3044\u3066\u3044\u308B\u3060\u3051\u306A\u70BA\u3001\u6570\u5024\u5224\u5B9A\u3088\u308A\u4E0A\u306B\u66F8\u304B\u306A\u3044\u3068\u305F\u3060\u306E\u6574\u6570\u306B\u3055\u308C\u308B\n { name: 'bigint', pattern: /^0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)*n/, readJosi: true },\n { name: 'bigint', pattern: /^0[oO][0-7]+(_[0-7]+)*n/, readJosi: true },\n { name: 'bigint', pattern: /^0[bB][0-1]+(_[0-1]+)*n/, readJosi: true },\n { name: 'bigint', pattern: /^\\d+(_\\d+)*?n/, readJosi: true },\n // 16\u9032/8\u9032/2\u9032\u6CD5\u306E\u6570\u5024\u5224\u5B9A --- \u3053\u306E\u5F8Cnako_lexer\u306B\u3066\u5358\u4F4D\u3092\u8AAD\u3080\u51E6\u7406\u304C\u5165\u308B(#994)\n { name: 'number', pattern: /^0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)*/, readJosi: true, cb: parseNumber },\n { name: 'number', pattern: /^0[oO][0-7]+(_[0-7]+)*/, readJosi: true, cb: parseNumber },\n { name: 'number', pattern: /^0[bB][0-1]+(_[0-1]+)*/, readJosi: true, cb: parseNumber },\n // \u4E0B\u306E\u4E09\u3064\u306F\u5C0F\u6570\u70B9\u304C\u631F\u307E\u3063\u3066\u3044\u308B\u5834\u5408\u3001\u5C0F\u6570\u70B9\u304B\u3089\u59CB\u307E\u3063\u3066\u3044\u308B\u5834\u5408\u3001\u5C0F\u6570\u70B9\u304C\u306A\u3044\u5834\u5408\u306E\u5341\u9032\u6CD5\u306E\u6570\u5024\u306B\u30DE\u30C3\u30C1\u3059\u308B\n { name: 'number', pattern: /^\\d+(_\\d+)*\\.(\\d+(_\\d+)*)?([eE][+|-]?\\d+(_\\d+)*)?/, readJosi: true, cb: parseNumber },\n { name: 'number', pattern: /^\\.\\d+(_\\d+)*([eE][+|-]?\\d+(_\\d+)*)?/, readJosi: true, cb: parseNumber },\n { name: 'number', pattern: /^\\d+(_\\d+)*([eE][+|-]?\\d+(_\\d+)*)?/, readJosi: true, cb: parseNumber },\n { name: '\u3053\u3053\u304B\u3089', pattern: /^(\u3053\u3053\u304B\u3089),?/ },\n { name: '\u3053\u3053\u307E\u3067', pattern: /^(\u3053\u3053\u307E\u3067|\uD83D\uDCA7)/ },\n { name: '\u3082\u3057', pattern: /^\u3082\u3057\u3082?/ },\n // \u300C\u306A\u3089\u3070\u300D\u306F\u52A9\u8A5E\u3068\u3057\u3066\u5B9A\u7FA9\u3057\u3066\u3044\u308B\n { name: '\u9055\u3048\u3070', pattern: /^\u9055(\u3048\u3070)?/ },\n // \u300C\u56DE\u300D\u300C\u9593\u300D\u300C\u7E70\u8FD4\u300D\u300C\u53CD\u5FA9\u300D\u300C\u629C\u300D\u300C\u7D9A\u300D\u300C\u623B\u300D\u300C\u4EE3\u5165\u300D\u300C\u6761\u4EF6\u5206\u5C90\u300D\u306A\u3069\u306F NakoLexer._replaceWord \u3067 word \u304B\u3089\u5909\u63DB\n // @see nako_reserved_words.js\n { name: 'shift_r0', pattern: /^>>>/ },\n { name: 'shift_r', pattern: /^>>/ },\n { name: 'shift_l', pattern: /^<</ },\n { name: '===', pattern: /^===/ }, // #999\n { name: '!==', pattern: /^!==/ }, // #999\n { name: 'gteq', pattern: /^(\u2267|>=|=>)/ },\n { name: 'lteq', pattern: /^(\u2266|<=|=<)/ },\n { name: 'noteq', pattern: /^(\u2260|<>|!=)/ },\n { name: '\u2190', pattern: /^(\u2190|<--)/ }, // \u77E2\u5370 --- \u305F\u3060\u3057(core#140)\u3067\u5EC3\u6B62\u3055\u308C\u305F\u6F14\u7B97\u5B50(#891,#899)\n { name: 'eq', pattern: /^(==|\uD83D\uDFF0\uD83D\uDFF0)/ },\n { name: 'eq', pattern: /^(=|\uD83D\uDFF0)/ },\n { name: 'line_comment', pattern: /^(!|\uD83D\uDCA1)(\u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587|\u3053\u3053\u307E\u3067\u3060\u308B\u3044|DNCL\u30E2\u30FC\u30C9|DNCL2\u30E2\u30FC\u30C9|DNCL2)[^\\n]*/ }, // #1184\n { name: 'not', pattern: /^(!|\uD83D\uDCA1)/ }, // #1184 #1457\n { name: 'gt', pattern: /^>/ },\n { name: 'lt', pattern: /^</ },\n { name: 'and', pattern: /^(\u304B\u3064|&&|and\\s)/ },\n { name: 'or', pattern: /^(\u307E\u305F\u306F|\u6216\u3044\u306F|\u3042\u308B\u3044\u306F|or\\s|\\|\\|)/ },\n { name: '@', pattern: /^@/ },\n { name: '+', pattern: /^\\+/ },\n { name: '-', pattern: /^-/ },\n { name: '**', pattern: /^(\u00D7\u00D7|\\*\\*)/ }, // Python\u98A8\u3079\u304D\u4E57\u6F14\u7B97\u5B50\n { name: '*', pattern: /^(\u00D7|\\*)/ },\n { name: '\u00F7\u00F7', pattern: /^\u00F7\u00F7/ }, // \u6574\u6570\u306E\u5272\u308A\u7B97\n { name: '\u00F7', pattern: /^(\u00F7|\\/)/ }, // \u666E\u901A\u306E\u5272\u308A\u7B97\n { name: '%', pattern: /^%/ },\n { name: '^', pattern: /^\\^/ },\n { name: '&', pattern: /^&/ },\n { name: '[', pattern: /^\\[/ },\n { name: ']', pattern: /^]/, readJosi: true },\n { name: '(', pattern: /^\\(/ },\n { name: ')', pattern: /^\\)/, readJosi: true },\n { name: '|', pattern: /^\\|/ },\n { name: '??', pattern: /^\\?\\?/ }, // \u300C\u8868\u793A\u300D\u306E\u30A8\u30A4\u30EA\u30A2\u30B9 #1745\n { name: 'word', pattern: /^\\$\\{.+?\\}/, cbParser: src => cbExtWord(src) }, // \u7279\u5225\u540D\u524D\u30C8\u30FC\u30AF\u30F3(#1836)(#672)\n { name: '$', pattern: /^(\\$|\\.)/ }, // \u30D7\u30ED\u30D1\u30C6\u30A3\u30A2\u30AF\u30BB\u30B9 (#1793)(#1807)\n { name: 'string', pattern: /^\uD83C\uDF3F/, cbParser: src => cbString('\uD83C\uDF3F', '\uD83C\uDF3F', src) },\n { name: 'string_ex', pattern: /^\uD83C\uDF34/, cbParser: src => cbString('\uD83C\uDF34', '\uD83C\uDF34', src) },\n { name: 'string_ex', pattern: /^\u300C/, cbParser: src => cbString('\u300C', '\u300D', src) },\n { name: 'string', pattern: /^\u300E/, cbParser: src => cbString('\u300E', '\u300F', src) },\n { name: 'string_ex', pattern: /^\u201C/, cbParser: src => cbString('\u201C', '\u201D', src) },\n { name: 'string_ex', pattern: /^\"/, cbParser: src => cbString('\"', '\"', src) },\n { name: 'string', pattern: /^'/, cbParser: src => cbString('\\'', '\\'', src) },\n { name: '\u300D', pattern: /^\u300D/, cbParser: errorRead('\u300D') }, // error\n { name: '\u300F', pattern: /^\u300F/, cbParser: errorRead('\u300F') }, // error\n { name: 'func', pattern: /^\\{\u95A2\u6570\\},?/ },\n { name: '{', pattern: /^\\{/ },\n { name: '}', pattern: /^\\}/, readJosi: true },\n { name: ':', pattern: /^:/ },\n { name: '_eol', pattern: /^_\\s*\\n/ },\n { name: 'dec_lineno', pattern: /^\u2030/ },\n // \u7D75\u6587\u5B57\u5909\u6570 = (\u7D75\u6587\u5B57)\u82F1\u6570\u5B57*\n { name: 'word', pattern: /^[\\uD800-\\uDBFF][\\uDC00-\\uDFFF][_a-zA-Z0-9]*/, readJosi: true },\n { name: 'word', pattern: /^[\\u1F60-\\u1F6F][_a-zA-Z0-9]*/, readJosi: true }, // \u7D75\u6587\u5B57\n { name: 'word', pattern: /^\u300A.+?\u300B/, readJosi: true }, // \u300A\u7279\u5225\u540D\u524D\u30C8\u30FC\u30AF\u30F3\u300B(#672)\n // \u5358\u8A9E\u53E5\n {\n name: 'word',\n pattern: /^[_a-zA-Z\\u3005\\u4E00-\\u9FCF\u3041-\u3093\u30A1-\u30F6\\u2460-\\u24FF\\u2776-\\u277F\\u3251-\\u32BF]/,\n cbParser: cbWordParser\n }\n];\nexport function trimOkurigana(s) {\n // \u3072\u3089\u304C\u306A\u304B\u3089\u59CB\u307E\u3089\u306A\u3044\u5834\u5408\u3001\u9001\u308A\u4EEE\u540D\u3092\u524A\u9664\u3002(\u4F8B)\u7F6E\u63DB\u3059\u308B\n if (!hira.test(s)) {\n return s.replace(/[\u3041-\u3093]+/g, '');\n }\n // \u5168\u3066\u3072\u3089\u304C\u306A\uFF1F (\u4F8B) \u3069\u3046\u305E\n if (allHiragana.test(s)) {\n return s;\n }\n // \u672B\u5C3E\u306E\u3072\u3089\u304C\u306A\u306E\u307F (\u4F8B)\u304A\u9858\u3044\u3057\u307E\u3059 \u2192\u304A\u9858\n return s.replace(/[\u3041-\u3093]+$/g, '');\n}\n// Utility for Rule\nfunction cbRangeComment(src) {\n let res = '';\n const josi = '';\n let numEOL = 0;\n src = src.substring(2); // skip /*\n const i = src.indexOf('*/');\n if (i < 0) { // not found\n res = src;\n src = '';\n }\n else {\n res = src.substring(0, i);\n src = src.substring(i + 2);\n }\n // \u6539\u884C\u3092\u6570\u3048\u308B\n for (let i = 0; i < res.length; i++) {\n if (res.charAt(i) === '\\n') {\n numEOL++;\n }\n }\n res = res.replace(/(^\\s+|\\s+$)/, ''); // trim\n return { src, res, josi, numEOL };\n}\n/**\n * @param {string} src\n */\nfunction cbWordParser(src, isTrimOkurigana = true) {\n /*\n kanji = [\\u3005\\u4E00-\\u9FCF]\n hiragana = [\u3041-\u3093]\n katakana = [\u30A1-\u30F6\u30FC]\n emoji = [\\u1F60-\\u1F6F]\n uni_extra = [\\uD800-\\uDBFF] [\\uDC00-\\uDFFF]\n alphabet = [_a-zA-Z]\n numchars = [0-9]\n */\n let res = '';\n let josi = '';\n while (src !== '') {\n // 1\u6587\u5B57\u4EE5\u4E0A\u306E\u3068\u304D\n if (res.length > 0) {\n // \u300C\u304B\u3064\u300D\u300C\u307E\u305F\u306F\u300D\u306A\u3089\u5206\u5272\u3059\u308B (#1379 core#84)\n const jsw = wordSpecial.exec(src);\n if (jsw) {\n break;\n }\n // \u52A9\u8A5E\u306E\u5224\u5B9A\n const j = josiRE.exec(src);\n if (j) {\n josi = j[0].replace(/^\\s+/, '');\n src = src.substring(j[0].length);\n // \u52A9\u8A5E\u306E\u76F4\u5F8C\u306B\u3042\u308B\u300C,\u300D\u3092\u98DB\u3070\u3059 #877\n if (src.charAt(0) === ',') {\n src = src.substring(1);\n }\n break;\n }\n }\n // \u30AB\u30BF\u30AB\u30CA\u6F22\u5B57\u82F1\u6570\u5B57\u304B\uFF1F\n const m = kanakanji.exec(src);\n if (m) {\n res += m[0];\n src = src.substring(m[0].length);\n continue;\n }\n // \u3072\u3089\u304C\u306A\uFF1F\n const h = hira.test(src);\n if (h) {\n res += src.charAt(0);\n src = src.substring(1);\n continue;\n }\n break; // other chars\n }\n // --- \u5358\u8A9E\u5206\u5272\u306B\u304A\u3051\u308B\u7279\u6B8A\u30EB\u30FC\u30EB ---\n // \u300C\u9593\u300D\u306E\u7279\u6B8A\u30EB\u30FC\u30EB (#831)\n // \u300C\u7B49\u3057\u3044\u9593\u300D\u3084\u300C\u4E00\u81F4\u3059\u308B\u9593\u300D\u306A\u3089\u300C\u9593\u300D\u3092src\u306B\u623B\u3059\u3002\u305F\u3060\u3057\u300C\u30B7\u30B9\u30C6\u30E0\u6642\u9593\u300D\u306F\u305D\u306E\u307E\u307E\u306B\u3059\u308B\u3002\n if (/[\u3041-\u3093]\u9593$/.test(res)) {\n src = res.charAt(res.length - 1) + src;\n res = res.slice(0, -1);\n }\n // \u300C\u4EE5\u4E0A\u300D\u300C\u4EE5\u4E0B\u300D\u300C\u8D85\u300D\u300C\u672A\u6E80\u300D #918\n const ii = wordHasIjoIka.exec(res);\n if (ii) {\n src = ii[1] + josi + src;\n josi = '';\n res = res.substring(0, res.length - ii[1].length);\n }\n // \u300C\u3082\u306E\u300D\u69CB\u6587 #1614\n if (josi.substring(0, 2) === '\u3082\u306E') {\n josi = josi.substring(2);\n }\n // \u52A9\u8A5E\u300C\u3053\u3068\u300D\u300C\u3067\u3042\u308B\u300D\u300C\u3067\u3059\u300D\u306A\u3069\u306F\u300C\uFF0A\uFF0A\u3059\u308B\u3053\u3068\u300D\u306E\u3088\u3046\u306B\u4F7F\u3046\u306E\u3067\u524A\u9664 #936 #939 #974\n if (removeJosiMap[josi]) {\n josi = '';\n }\n // \u9001\u308A\u4EEE\u540D\u306E\u7701\u7565\u30EB\u30FC\u30EB\n // \u6F22\u5B57\u30AB\u30BF\u30AB\u30CA\u82F1\u8A9E\u304B\u3089\u59CB\u307E\u308B\u8A9E\u53E5 --- \u9001\u308A\u4EEE\u540D\u3092\u7701\u7565\n if (isTrimOkurigana) {\n res = trimOkurigana(res);\n }\n // \u52A9\u8A5E\u3060\u3051\u306E\u8A9E\u53E5\u306E\u5834\u5408\n if (res === '' && josi !== '') {\n res = josi;\n josi = '';\n }\n return { src, res, josi, numEOL: 0 };\n}\nfunction cbString(beginTag, closeTag, src) {\n let res = '';\n let josi = '';\n let numEOL = 0;\n src = src.substring(beginTag.length); // skip beginTag\n const i = src.indexOf(closeTag);\n if (i < 0) { // not found\n res = src;\n src = '';\n throw new Error(`\u300E${beginTag}\u300F\u3067\u59CB\u3081\u305F\u6587\u5B57\u5217\u306E\u7D42\u7AEF\u8A18\u53F7\u300E${closeTag}\u300F\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002`);\n }\n else {\n res = src.substring(0, i);\n src = src.substring(i + closeTag.length);\n // res \u306E\u4E2D\u306B beginTag \u304C\u3042\u308C\u3070\u30A8\u30E9\u30FC\u306B\u3059\u308B #953\n if (res.indexOf(beginTag) >= 0) {\n if (beginTag === '\u300E') {\n throw new Error('\u300C\u300E\u300D\u3067\u59CB\u3081\u305F\u6587\u5B57\u5217\u306E\u4E2D\u306B\u300C\u300E\u300D\u3092\u542B\u3081\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002');\n }\n else {\n throw new Error(`\u300E${beginTag}\u300F\u3067\u59CB\u3081\u305F\u6587\u5B57\u5217\u306E\u4E2D\u306B\u300E${beginTag}\u300F\u3092\u542B\u3081\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002`);\n }\n }\n }\n // \u6587\u5B57\u5217\u76F4\u5F8C\u306E\u52A9\u8A5E\u3092\u53D6\u5F97\n const j = josiRE.exec(src);\n if (j) {\n josi = j[0].replace(/^\\s+/, '');\n src = src.substring(j[0].length);\n // \u52A9\u8A5E\u306E\u5F8C\u306E\u30AB\u30F3\u30DE #877\n if (src.charAt(0) === ',') {\n src = src.substring(1);\n }\n }\n // \u52A9\u8A5E\u300C\u3053\u3068\u300D\u300C\u3067\u3042\u308B\u300D\u300C\u3067\u3059\u300D\u306A\u3069\u306F\u300C\uFF0A\uFF0A\u3059\u308B\u3053\u3068\u300D\u306E\u3088\u3046\u306B\u4F7F\u3046\u306E\u3067\u524A\u9664 #936 #939 #974\n if (removeJosiMap[josi]) {\n josi = '';\n }\n // \u300C\u3082\u306E\u300D\u69CB\u6587 (#1614)\n if (josi.substring(0, 2) === '\u3082\u306E') {\n josi = josi.substring(2);\n }\n // \u6539\u884C\u3092\u6570\u3048\u308B\n for (let i = 0; i < res.length; i++) {\n if (res.charAt(i) === '\\n') {\n numEOL++;\n }\n }\n return { src, res, josi, numEOL };\n}\nfunction cbExtWord(src) {\n let res = '';\n let josi = '';\n let numEOL = 0;\n src = src.substring(2); // skip '${'\n const i = src.indexOf('}');\n if (i < 0) { // not found\n throw new Error('\u5909\u6570\u540D\u306E\u7D42\u308F\u308A\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002');\n }\n res = src.substring(0, i);\n src = src.substring(i + 1);\n // \u6587\u5B57\u5217\u76F4\u5F8C\u306E\u52A9\u8A5E\u3092\u53D6\u5F97\n const j = josiRE.exec(src);\n if (j) {\n josi = j[0].replace(/^\\s+/, '');\n src = src.substring(j[0].length);\n // \u52A9\u8A5E\u306E\u5F8C\u306E\u30AB\u30F3\u30DE #877\n if (src.charAt(0) === ',') {\n src = src.substring(1);\n }\n }\n // \u6539\u884C\u3092\u6570\u3048\u308B(\u3042\u308A\u5F97\u306A\u3044\u3051\u3069)\n for (let i = 0; i < res.length; i++) {\n if (res.charAt(i) === '\\n') {\n numEOL++;\n }\n }\n if (numEOL > 0) {\n throw new Error('\u5909\u6570\u540D\u306B\u6539\u884C\u3092\u542B\u3081\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002');\n }\n return { src, res, josi, numEOL };\n}\nfunction parseNumber(n) {\n return Number(n.replace(/_/g, ''));\n}\n", "// \u306A\u3067\u3057\u3053\u306E\u5B57\u53E5\u89E3\u6790\u3092\u884C\u3046\n// \u65E2\u306B\u5168\u89D2\u534A\u89D2\u3092\u63C3\u3048\u305F\u30B3\u30FC\u30C9\u306B\u5BFE\u3057\u3066\u5B57\u53E5\u89E3\u6790\u3092\u884C\u3046\nimport { opPriority } from './nako_parser_const.mjs';\n// \u4E88\u7D04\u8A9E\u53E5\n// (memo)\u300C\u56DE\u300D\u300C\u9593\u300D\u300C\u7E70\u8FD4\u300D\u300C\u53CD\u5FA9\u300D\u300C\u629C\u300D\u300C\u7D9A\u300D\u300C\u623B\u300D\u300C\u4EE3\u5165\u300D\u306A\u3069\u306F _replaceWord \u3067 word \u304B\u3089\u5909\u63DB\n/** @types {Record<string, string>} */\nimport reservedWords from './nako_reserved_words.mjs';\nimport { isIndentChars } from './nako_indent_chars.mjs';\n// \u52A9\u8A5E\u306E\u4E00\u89A7\nimport { josiRE, removeJosiMap, tararebaMap, josiListExport } from './nako_josi_list.mjs';\n// \u5B57\u53E5\u89E3\u6790\u30EB\u30FC\u30EB\u306E\u4E00\u89A7\nimport { rules, unitRE, cssUnitRE } from './nako_lex_rules.mjs';\nimport { NakoLexerError, InternalLexerError } from './nako_errors.mjs';\nexport class NakoLexer {\n /**\n * @param logger\n */\n constructor(logger) {\n this.logger = logger; // \u5B57\u53E5\u89E3\u6790\u3057\u305F\u969B,\u78BA\u8A8D\u3055\u308C\u305F\u95A2\u6570\u306E\u4E00\u89A7\n this.funclist = new Map();\n this.modList = []; // \u5B57\u53E5\u89E3\u6790\u3057\u305F\u969B,\u53D6\u308A\u8FBC\u3080\u30E2\u30B8\u30E5\u30FC\u30EB\u4E00\u89A7 --- nako3::lex \u3067\u66F4\u65B0\u3055\u308C\u308B\n this.result = [];\n this.modName = 'main.nako3'; // \u30E2\u30B8\u30E5\u30FC\u30EB\u540D\n this.moduleExport = new Map();\n this.reservedWords = Array.from(reservedWords.keys()); // for plugin_system::\u4E88\u7D04\u8A9E\u4E00\u89A7\u53D6\u5F97\n this.josiList = josiListExport; // for plugin_system::\u52A9\u8A5E\u4E00\u89A7\u53D6\u5F97\n }\n /** \u95A2\u6570\u4E00\u89A7\u3092\u30BB\u30C3\u30C8 */\n setFuncList(listMap) {\n this.funclist = listMap;\n }\n /** \u30E2\u30B8\u30E5\u30FC\u30EB\u516C\u958B\u65E2\u5B9A\u5024\u4E00\u89A7\u3092\u30BB\u30C3\u30C8 */\n setModuleExport(exportObj) {\n this.moduleExport = exportObj;\n }\n /**\n * @param tokens\n * @param {boolean} isFirst\n * @param {string} filename\n */\n replaceTokens(tokens, isFirst, filename) {\n this.result = tokens;\n this.modName = NakoLexer.filenameToModName(filename);\n // \u95A2\u6570\u306E\u5B9A\u7FA9\u304C\u3042\u308C\u3070 funclist \u3092\u66F4\u65B0\n NakoLexer.preDefineFunc(tokens, this.logger, this.funclist, this.moduleExport);\n this._replaceWord(this.result);\n if (isFirst) {\n if (this.result.length > 0) {\n const eof = this.result[this.result.length - 1];\n this.result.push({\n type: 'eol',\n line: eof.line,\n column: 0,\n indent: -1,\n file: eof.file,\n josi: '',\n value: '---',\n startOffset: eof.startOffset,\n endOffset: eof.endOffset,\n rawJosi: ''\n }); // \u6539\u884C\n this.result.push({\n type: 'eof',\n line: eof.line,\n indent: -1,\n column: 0,\n file: eof.file,\n josi: '',\n value: '',\n startOffset: eof.startOffset,\n endOffset: eof.endOffset,\n rawJosi: ''\n }); // \u30D5\u30A1\u30A4\u30EB\u672B\u5C3E\n }\n else {\n this.result.push({\n type: 'eol',\n line: 0,\n column: 0,\n indent: -1,\n file: '',\n josi: '',\n value: '---',\n startOffset: 0,\n endOffset: 0,\n rawJosi: ''\n }); // \u6539\u884C\n this.result.push({\n type: 'eof',\n line: 0,\n column: 0,\n indent: -1,\n file: '',\n josi: '',\n value: '',\n startOffset: 0,\n endOffset: 0,\n rawJosi: ''\n }); // \u30D5\u30A1\u30A4\u30EB\u672B\u5C3E\n }\n }\n return this.result;\n }\n /**\n * \u30D5\u30A1\u30A4\u30EB\u5185\u3067\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u308B\u95A2\u6570\u540D\u3092\u5217\u6319\u3059\u308B\u3002\u7D50\u679C\u306Ffunclist\u306B\u66F8\u304D\u8FBC\u3080\u3002\u305D\u306E\u4ED6\u306E\u30C8\u30FC\u30AF\u30F3\u306E\u7F6E\u63DB\u51E6\u7406\u3082\u884C\u3046\u3002\n * \u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u30CF\u30A4\u30E9\u30A4\u30C8\u306E\u51E6\u7406\u304B\u3089\u547C\u3073\u51FA\u3059\u305F\u3081\u306Bstatic\u30E1\u30BD\u30C3\u30C9\u306B\u3057\u3066\u3044\u308B\u3002\n */\n static preDefineFunc(tokens, logger, funclist, moduleexport) {\n // \u95A2\u6570\u3092\u5148\u8AAD\u307F\u3057\u3066\u5B9A\u7FA9\n let i = 0;\n let isFuncPointer = false;\n const readArgs = () => {\n const args = [];\n const keys = {};\n if (tokens[i].type !== '(') {\n return [];\n }\n i++;\n while (tokens[i]) {\n const t = tokens[i];\n i++;\n if (t.type === ')') {\n break;\n }\n if (t.type === 'func') {\n isFuncPointer = true;\n }\n else if (t.type !== '|' && t.type !== 'comma') {\n if (isFuncPointer) {\n t.funcPointer = true;\n isFuncPointer = false;\n }\n args.push(t);\n if (!keys[t.value]) {\n keys[t.value] = [];\n }\n keys[t.value].push(t.josi);\n }\n }\n const varnames = [];\n const funcPointers = [];\n const result = [];\n const already = {};\n for (const arg of args) {\n if (!already[arg.value]) {\n const josi = keys[arg.value];\n result.push(josi);\n varnames.push(arg.value);\n if (arg.funcPointer) {\n funcPointers.push(arg.value);\n }\n else {\n funcPointers.push(null);\n }\n already[arg.value] = true;\n }\n }\n return [result, varnames, funcPointers];\n };\n // \u30C8\u30FC\u30AF\u30F3\u3092\u4E00\u3064\u305A\u3064\u78BA\u8A8D\n while (i < tokens.length) {\n // \u30BF\u30A4\u30D7\u306E\u7F6E\u63DB\n const t = tokens[i];\n if (t.type === 'not' && tokens.length - i > 3) {\n let prevToken = { type: 'eol' };\n if (i >= 1) {\n prevToken = tokens[i - 1];\n }\n if (prevToken.type === 'eol') {\n let nextToken = tokens[i + 1];\n if (nextToken.type === 'word' && nextToken.value === '\u30E2\u30B8\u30E5\u30FC\u30EB\u516C\u958B\u65E2\u5B9A\u5024') {\n nextToken.type = '\u30E2\u30B8\u30E5\u30FC\u30EB\u516C\u958B\u65E2\u5B9A\u5024';\n nextToken = tokens[i + 2];\n if (nextToken.type === 'string' && nextToken.value === '\u975E\u516C\u958B') {\n const modName = NakoLexer.filenameToModName(t.file);\n moduleexport.set(modName, false);\n i += 3;\n continue;\n }\n else if (nextToken.type === 'string' && nextToken.value === '\u516C\u958B') {\n const modName = NakoLexer.filenameToModName(t.file);\n moduleexport.set(modName, true);\n i += 3;\n continue;\n }\n }\n }\n }\n // \u7121\u540D\u95A2\u6570\u306E\u5B9A\u7FA9\uFF1A\u300Cxx\u306B\u306F**\u300D\u304C\u3042\u3063\u305F\u5834\u5408 ... \u6697\u9ED9\u7684\u306A\u95A2\u6570\u5B9A\u7FA9\u3068\u3059\u308B\n if (t.type === 'word' && t.josi === '\u306B\u306F') {\n t.josi = '\u306B\u306F';\n tokens.splice(i + 1, 0, { type: 'def_func', value: '\u95A2\u6570', indent: t.indent, line: t.line, column: t.column, file: t.file, josi: '', startOffset: t.endOffset, endOffset: t.endOffset, rawJosi: '', tag: '\u7121\u540D\u95A2\u6570' });\n i++;\n continue;\n }\n // \u6C38\u9060\u306B\u7E70\u308A\u8FD4\u3059\u2192\u6C38\u9060\u306E\u9593\u306B\u7F6E\u63DB #1686\n if (t.type === 'word' && t.value === '\u6C38\u9060' && t.josi === '\u306B') {\n const t2 = tokens[i + 1];\n if (t2.value === '\u7E70\u8FD4') {\n t2.value = '\u9593';\n t2.josi = '\u306E';\n }\n i++;\n continue;\n }\n // N\u56DE\u3092N|\u56DE\u306B\u7F6E\u63DB\n if (t.type === 'word' && t.josi === '' && t.value.length >= 2) {\n if (t.value.match(/\u56DE$/)) {\n t.value = t.value.substring(0, t.value.length - 1);\n // N\u56DE\u3092\u633F\u5165\n if (!t.endOffset) {\n t.endOffset = 1;\n }\n const kai = { type: '\u56DE', value: '\u56DE', indent: t.indent, line: t.line, column: t.column, file: t.file, josi: '', startOffset: t.endOffset - 1, endOffset: t.endOffset, rawJosi: '' };\n tokens.splice(i + 1, 0, kai);\n t.endOffset--;\n i++;\n }\n }\n // \u4E88\u7D04\u8A9E\u306E\u7F6E\u63DB\n if (t.type === 'word') {\n const rtype = reservedWords.get(t.value);\n if (rtype) {\n t.type = rtype;\n }\n if (t.value === '\u305D\u3046') {\n t.value = '\u305D\u308C';\n }\n }\n // \u95A2\u6570\u5B9A\u7FA9\u306E\u78BA\u8A8D\n if (t.type !== 'def_test' && t.type !== 'def_func') {\n i++;\n continue;\n }\n // \u7121\u540D\u95A2\u6570\u304B\u666E\u901A\u95A2\u6570\u5B9A\u7FA9\u304B\u3092\u5224\u5B9A\u3059\u308B (1\u3064\u524D\u304C\u6539\u884C\u304B\u3069\u3046\u304B\u3067\u5224\u5B9A)\n let isMumei = true;\n let prevToken = { type: 'eol' };\n if (i >= 1) {\n prevToken = tokens[i - 1];\n }\n if (prevToken.type === 'eol') {\n isMumei = false;\n }\n // \u95A2\u6570\u540D\u3084\u5F15\u6570\u3092\u5F97\u308B\n const defToken = t;\n i++; // skip \"\u25CF\" or \"\u95A2\u6570\"\n let josi = [];\n let varnames = [];\n let funcPointers = [];\n let funcName = '';\n let funcNameToken = null;\n let isExport = null;\n // \u95A2\u6570\u306E\u5C5E\u6027\u6307\u5B9A\n if (tokens[i] && tokens[i].type === '{') {\n i++;\n const attr = tokens[i] && tokens[i].type === 'word' ? tokens[i].value : '';\n if (attr === '\u516C\u958B') {\n isExport = true;\n }\n else if (attr === '\u975E\u516C\u958B') {\n isExport = false;\n }\n else if (attr === '\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8') {\n isExport = true;\n }\n else {\n logger.warn(`\u4E0D\u660E\u306A\u95A2\u6570\u5C5E\u6027\u300E${String(attr)}\u300F\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002`);\n }\n i++;\n if (tokens[i] && tokens[i].type === '}') {\n i++;\n }\n }\n // \u95A2\u6570\u540D\u306E\u524D\u306B\u5F15\u6570\u5B9A\u7FA9\n if (tokens[i] && tokens[i].type === '(') {\n [josi, varnames, funcPointers] = readArgs();\n }\n // \u95A2\u6570\u540D\u3092\u5F97\u308B\n if (!isMumei && tokens[i] && tokens[i].type === 'word') {\n funcNameToken = tokens[i++];\n funcName = funcNameToken.value;\n }\n // \u95A2\u6570\u540D\u306E\u5F8C\u3067\u5F15\u6570\u5B9A\u7FA9\n if (josi.length === 0 && tokens[i] && tokens[i].type === '(') {\n [josi, varnames, funcPointers] = readArgs();\n }\n // \u540D\u524D\u306E\u3042\u308B\u95A2\u6570\u5B9A\u7FA9\u306A\u3089\u3070\u95A2\u6570\u30C6\u30FC\u30D6\u30EB\u306B\u95A2\u6570\u540D\u3092\u767B\u9332\n // \u7121\u540D\u95A2\u6570\u306F\u767B\u9332\u3057\u306A\u3044\u3088\u3046\u306B\u6C17\u3092\u3064\u3051\u308B\n if (funcName !== '' && funcNameToken) {\n const modName = NakoLexer.filenameToModName(t.file);\n funcName = modName + '__' + funcName;\n if (funclist.has(funcName)) { // \u95A2\u6570\u306E\u4E8C\u91CD\u5B9A\u7FA9\u3092\u8B66\u544A\n // main__\u306F\u7701\u7565 #1223\n const dispName = funcName.replace(/^main__/, '');\n logger.warn(`\u95A2\u6570\u300E${dispName}\u300F\u306F\u65E2\u306B\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u3059\u3002`, defToken);\n }\n funcNameToken.value = funcName;\n funclist.set(funcName, {\n type: 'func',\n josi,\n fn: null,\n asyncFn: false,\n isExport,\n varnames,\n funcPointers\n });\n }\n // \u7121\u540D\u95A2\u6570\u306E\u305F\u3081\u306B\n const metaValue = {\n 'type': 'func',\n josi,\n varnames,\n funcPointers\n };\n defToken.meta = metaValue;\n }\n }\n /** \u6587\u5B57\u5217\u3092{\u3068}\u306E\u90E8\u5206\u3067\u5206\u5272\u3059\u308B\u3002\u4E2D\u62EC\u5F27\u304C\u5BFE\u5FDC\u3057\u3066\u3044\u306A\u3044\u5834\u5408null\u3092\u8FD4\u3059\u3002 */\n splitStringEx(code) {\n /** @type {string[]} */\n const list = [];\n // \"A{B}C{D}E\" -> [\"A\", \"B}C\", \"D}E\"] -> [\"A\", \"B\", \"C\", \"D\", \"E\"]\n // \"A{B}C}D{E}F\" -> [\"A\", \"B}C}D\", \"E}F\"] -> [\"A\", \"B\", \"C}D\", \"E\", \"F\"]\n const arr = code.split(/[{\uFF5B]/);\n list.push(arr[0]);\n for (const s of arr.slice(1)) {\n const end = s.replace('\uFF5D', '}').indexOf('}');\n if (end === -1) {\n return null;\n }\n list.push(s.slice(0, end), s.slice(end + 1));\n }\n return list;\n }\n _replaceWord(tokens) {\n let comment = [];\n let i = 0;\n let isFuncPointer = false;\n const namespaceStack = [];\n const getLastType = () => {\n if (i <= 0) {\n return 'eol';\n }\n return tokens[i - 1].type;\n };\n let modSelf = (tokens.length > 0) ? NakoLexer.filenameToModName(tokens[0].file) : 'main';\n while (i < tokens.length) {\n const t = tokens[i];\n // \u30E2\u30B8\u30E5\u30FC\u30EB\u540D\u306E\u5909\u66F4\u306B\u5BFE\u5FDC\n if ((t.type === 'word' || t.type === 'func') && t.value === '\u540D\u524D\u7A7A\u9593\u8A2D\u5B9A') {\n if (isFuncPointer) {\n throw new InternalLexerError('\u540D\u524D\u7A7A\u9593\u8A2D\u5B9A\u306E\u95A2\u6570\u53C2\u7167\u3092\u53D6\u5F97\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002', t.startOffset === undefined ? 0 : t.startOffset, t.endOffset === undefined ? 0 : t.endOffset, t.line, t.file);\n }\n namespaceStack.push(modSelf);\n modSelf = tokens[i - 1].value;\n }\n if ((t.type === 'word' || t.type === 'func') && t.value === '\u540D\u524D\u7A7A\u9593\u30DD\u30C3\u30D7') {\n if (isFuncPointer) {\n throw new InternalLexerError('\u540D\u524D\u7A7A\u9593\u30DD\u30C3\u30D7\u306E\u95A2\u6570\u53C2\u7167\u3092\u53D6\u5F97\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002', t.startOffset === undefined ? 0 : t.startOffset, t.endOffset === undefined ? 0 : t.endOffset, t.line, t.file);\n }\n const space = namespaceStack.pop();\n if (space) {\n modSelf = space;\n }\n }\n // \u95A2\u6570\u3092\u5F37\u5236\u7684\u306B\u7F6E\u63DB( word => func )\n if (t.type === 'word' && t.value !== '\u305D\u308C') {\n // \u95A2\u6570\u3092\u5909\u63DB\n const funcName = String(t.value);\n if (funcName.indexOf('__') < 0) {\n // \u81EA\u8EAB\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u540D\u3092\u691C\u7D22\n const gname1 = `${modSelf}__${funcName}`;\n const gfo1 = this.funclist.get(gname1);\n if (gfo1 && gfo1.type === 'func') {\n const tt = t;\n tt.type = isFuncPointer ? 'func_pointer' : 'func';\n tt.meta = gfo1;\n tt.value = gname1;\n if (isFuncPointer) {\n isFuncPointer = false;\n tokens.splice(i - 1, 1);\n }\n continue;\n }\n // \u30E2\u30B8\u30E5\u30FC\u30EB\u95A2\u6570\u3092\u7F6E\u63DB\n for (const mod of this.modList) {\n const gname = `${mod}__${funcName}`;\n const gfo = this.funclist.get(gname);\n const exportDefault = this.moduleExport.get(mod);\n if (gfo && gfo.type === 'func' && (gfo.isExport === true || (gfo.isExport !== false && exportDefault !== false))) {\n const tt = t;\n tt.type = isFuncPointer ? 'func_pointer' : 'func';\n tt.meta = gfo;\n tt.value = gname;\n if (isFuncPointer) {\n isFuncPointer = false;\n tokens.splice(i - 1, 1);\n }\n break;\n }\n }\n }\n const fo = this.funclist.get(funcName);\n if (fo && fo.type === 'func') {\n const tt = t;\n tt.type = isFuncPointer ? 'func_pointer' : 'func';\n tt.meta = fo;\n if (isFuncPointer) {\n isFuncPointer = false;\n tokens.splice(i - 1, 1);\n continue;\n }\n }\n }\n // \u95A2\u6570\u30DD\u30A4\u30F3\u30BF\u306E\u524D\u7F6E\u8A5E\u3092\u691C\u51FA\n if (isFuncPointer) {\n // \u7121\u52B9\u306A\u95A2\u6570\u53C2\u7167\u306E\u6307\u5B9A\u304C\u3042\u308B\u3002\n }\n isFuncPointer = false;\n if (t.type === 'func' && t.value === '{\u95A2\u6570}') {\n i++;\n isFuncPointer = true;\n continue;\n }\n // \u6570\u5B57\u306B\u3064\u304F\u30DE\u30A4\u30CA\u30B9\u8A18\u53F7\u3092\u5224\u5B9A\n // (ng) 5 - 3 || word - 3\n // (ok) (\u884C\u982D)-3 || 1 * -3 || A\u306B -3\u3092 \u8DB3\u3059\n if (t.type === '-' && tokens[i + 1]) {\n const tokenType = tokens[i + 1].type;\n if (tokenType === 'number' || tokenType === 'bigint') {\n // \u4E00\u3064\u524D\u306E\u8A9E\u53E5\u304C\u3001(\u884C\u982D|\u6F14\u7B97\u5B50|\u52A9\u8A5E\u4ED8\u304D\u306E\u8A9E\u53E5)\u306A\u3089 \u8CA0\u6570\u3067\u3042\u308B\n const ltype = getLastType();\n if (ltype === 'eol' || opPriority[ltype] || tokens[i - 1].josi !== '') {\n tokens.splice(i, 1); // remove '-'\n if (tokenType === 'number') {\n tokens[i].value *= -1;\n }\n else {\n tokens[i].value = '-' + String(tokens[i].value);\n }\n }\n }\n }\n // \u52A9\u8A5E\u306E\u300C\u306F\u300D\u3092 = \u306B\u5C55\u958B\n if (t.josi === undefined) {\n t.josi = '';\n }\n if (t.josi === '\u306F') {\n if (!t.rawJosi) {\n t.rawJosi = t.josi;\n }\n const startOffset = (t.endOffset === undefined) ? undefined : t.endOffset - t.rawJosi.length;\n tokens.splice(i + 1, 0, {\n type: 'eq',\n indent: t.indent,\n line: t.line,\n column: t.column,\n file: t.file,\n startOffset,\n endOffset: t.endOffset,\n josi: '',\n rawJosi: '',\n value: undefined\n });\n i += 2;\n t.josi = t.rawJosi = '';\n t.endOffset = startOffset;\n continue;\n }\n // \u300C\u3068\u306F\u300D\u3092\u4E00\u3064\u306E\u5358\u8A9E\u306B\u3059\u308B\n if (t.josi === '\u3068\u306F') {\n if (!t.rawJosi) {\n t.rawJosi = t.josi;\n }\n const startOffset = t.endOffset === undefined ? undefined : t.endOffset - t.rawJosi.length;\n tokens.splice(i + 1, 0, {\n type: '\u3068\u306F',\n indent: t.indent,\n line: t.line,\n column: t.column,\n file: t.file,\n startOffset,\n endOffset: t.endOffset,\n josi: '',\n rawJosi: '',\n value: undefined\n });\n t.josi = t.rawJosi = '';\n t.endOffset = startOffset;\n i += 2;\n continue;\n }\n // \u52A9\u8A5E\u306E\u306A\u3089\u3070\u3092\u30C8\u30FC\u30AF\u30F3\u3068\u3059\u308B\n if (tararebaMap[t.josi]) {\n const josi = (t.josi === '\u3067\u306A\u3051\u308C\u3070' || t.josi === '\u306A\u3051\u308C\u3070') ? '\u3067\u306A\u3051\u308C\u3070' : '\u306A\u3089\u3070';\n if (!t.rawJosi) {\n t.rawJosi = josi;\n }\n const startOffset = t.endOffset === undefined ? undefined : t.endOffset - t.rawJosi.length;\n tokens.splice(i + 1, 0, {\n type: '\u306A\u3089\u3070',\n value: josi,\n indent: t.indent,\n line: t.line,\n column: t.column,\n file: t.file,\n startOffset,\n endOffset: t.endOffset,\n josi: '',\n rawJosi: ''\n });\n t.josi = t.rawJosi = '';\n t.endOffset = startOffset;\n i += 2;\n continue;\n }\n // '_' + \u6539\u884C \u3092\u98DB\u3070\u3059 (\u6F14\u7B97\u5B50\u76F4\u5F8C\u306B\u6539\u884C\u3092\u5165\u308C\u305F\u3044\u5834\u5408\u306B\u4F7F\u3046)\n if (t.type === '_eol') {\n tokens.splice(i, 1);\n continue;\n }\n // \u30B3\u30E1\u30F3\u30C8\u3092\u98DB\u3070\u3059\n if (t.type === 'line_comment' || t.type === 'range_comment') {\n comment.push(t.value);\n tokens.splice(i, 1);\n continue;\n }\n // \u6539\u884C\u306B\u30B3\u30E1\u30F3\u30C8\u3092\u57CB\u3081\u8FBC\u3080\n if (t.type === 'eol') {\n t.value = comment.join('/');\n comment = [];\n }\n i++;\n }\n }\n /**\n * \u30A4\u30F3\u30C7\u30F3\u30C8\u306E\u500B\u6570\u3092\u6570\u3048\u308B\n * @returns \u623B\u308A\u5024\u3068\u3057\u3066[\u30A4\u30F3\u30C7\u30F3\u30C8\u6570, \u8AAD\u307F\u98DB\u3070\u3059\u3079\u304D\u6587\u5B57\u6570]\u3092\u8FD4\u3059\n */\n countIndent(src) {\n let indent = 0;\n for (let i = 0; i < src.length; i++) {\n const c = src.charAt(i);\n const n = isIndentChars(c);\n if (n === 0) {\n return [indent, i];\n }\n indent += n;\n }\n return [indent, src.length];\n }\n /**\n * \u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u3092\u30C8\u30FC\u30AF\u30F3\u306B\u5206\u5272\u3059\u308B\n * @param src \u306A\u3067\u3057\u3053\u306E\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\n * @param line \u5148\u982D\u884C\u306E\u884C\u756A\u53F7\n * @param filename \u30D5\u30A1\u30A4\u30EB\u540D\n */\n tokenize(src, line, filename) {\n const srcLength = src.length;\n const result = [];\n let columnCurrent;\n let lineCurrent;\n let column = 1;\n let isDefTest = false;\n let indent = 0;\n // \u6700\u521D\u306B\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u6570\u3048\u308B\n const ia = this.countIndent(src);\n indent = ia[0]; // \u30A4\u30F3\u30C7\u30F3\u30C8\u6570\n src = src.substring(ia[1]); // \u8AAD\u307F\u98DB\u3070\u3059\u6587\u5B57\u6570\n column += ia[1];\n while (src !== '') {\n let ok = false;\n // \u5404\u30EB\u30FC\u30EB\u306B\u3064\u3044\u3066\n for (const rule of rules) {\n // \u6B63\u898F\u8868\u73FE\u3067\u30DE\u30C3\u30C1\n const m = rule.pattern.exec(src);\n if (!m) {\n continue;\n }\n let ruleName = rule.name;\n ok = true;\n // \u7A7A\u767D\u306A\u3089\u30B9\u30AD\u30C3\u30D7\n if (rule.name === 'space') {\n column += m[0].length;\n src = src.substring(m[0].length);\n continue;\n }\n // \u30DE\u30C3\u30C1\u3057\u305F\u30EB\u30FC\u30EB\u304C\u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u3092\u6301\u3064\u306A\u3089\n if (rule.cbParser) {\n // \u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u3092\u547C\u3076\n let rp;\n if (isDefTest && rule.name === 'word') {\n rp = rule.cbParser(src, false);\n }\n else {\n try {\n rp = rule.cbParser(src);\n }\n catch (e) {\n throw new NakoLexerError(e.message, srcLength - src.length, srcLength - src.length + 1, line, filename);\n }\n }\n // \u30EB\u30FC\u30EB\u53D6\u5F97\u5F8C\u306E\u7279\u5225\u306A\u51E6\u7406\n if (rule.name === 'string_ex') {\n // \u5C55\u958B\u3042\u308A\u6587\u5B57\u5217(\u57CB\u3081\u8FBC\u307F\u5F0F) \u2192 aaa{x}bbb{x}cccc\n const list = this.splitStringEx(rp.res);\n if (list === null) {\n throw new InternalLexerError('\u5C55\u958B\u3042\u308A\u6587\u5B57\u5217\u3067\u5024\u306E\u57CB\u3081\u8FBC\u307F{...}\u304C\u5BFE\u5FDC\u3057\u3066\u3044\u307E\u305B\u3093\u3002', srcLength - src.length, srcLength - rp.src.length, line, filename);\n }\n if (list.length === 1) {\n // \u5C55\u958B\u306A\u3057(\u57CB\u3081\u8FBC\u307F\u5F0F\u306A\u3057)\u306E\u5834\u5408\n result.push({ type: 'string', value: list[0], josi: rp.josi, indent, file: filename, line, column, preprocessedCodeOffset: srcLength - src.length, preprocessedCodeLength: src.length - rp.src.length });\n line += rp.numEOL;\n column += src.length - rp.src.length;\n src = rp.src;\n if (rp.numEOL > 0) {\n column = 1;\n }\n break;\n }\n // \u5C55\u958B\u3042\u308A(\u57CB\u3081\u8FBC\u307F\u5F0F\u3042\u308A)\u306E\u5834\u5408\n result.push({ type: '(', value: '(', josi: '', indent, file: filename, line, column, preprocessedCodeOffset: srcLength - src.length, preprocessedCodeLength: 0 });\n let offset = 0;\n for (let i = 0; i < list.length; i++) {\n if (i % 2 === 0) {\n result.push({\n type: 'string',\n value: list[i],\n file: filename,\n josi: '',\n indent,\n line,\n column,\n preprocessedCodeOffset: srcLength - src.length + offset,\n preprocessedCodeLength: list[i].length + 2\n });\n // \u5148\u982D\u306A\u3089'\"...{'\u3001\u305D\u308C\u4EE5\u5916\u306A\u3089'}...{'\u3001\u6700\u5F8C\u306F\u4F55\u3067\u3082\u826F\u3044\n offset += list[i].length + 2;\n }\n else {\n result.push({ type: '&', value: '&', josi: '', indent, file: filename, line, column, preprocessedCodeOffset: srcLength - src.length + offset, preprocessedCodeLength: 0 });\n result.push({ type: '(', value: '(', josi: '', indent, file: filename, line, column, preprocessedCodeOffset: srcLength - src.length + offset, preprocessedCodeLength: 0 });\n result.push({ type: 'code', value: list[i], josi: '', indent, file: filename, line, column, preprocessedCodeOffset: srcLength - src.length + offset, preprocessedCodeLength: list[i].length });\n result.push({ type: ')', value: ')', josi: '', indent, file: filename, line, column, preprocessedCodeOffset: srcLength - src.length + offset + list[i].length, preprocessedCodeLength: 0 });\n result.push({ type: '&', value: '&', josi: '', indent, file: filename, line, column, preprocessedCodeOffset: srcLength - src.length + offset + list[i].length, preprocessedCodeLength: 0 });\n offset += list[i].length;\n }\n }\n line += rp.numEOL;\n column += src.length - rp.src.length;\n src = rp.src;\n if (rp.numEOL > 0) {\n column = 1;\n }\n result.push({ type: ')', value: ')', josi: rp.josi, indent, file: filename, line, column, preprocessedCodeOffset: srcLength - src.length, preprocessedCodeLength: 0 });\n break;\n }\n // \u7D50\u679C\u3092\u683C\u7D0D\n columnCurrent = column;\n column += src.length - rp.src.length;\n result.push({ type: rule.name, value: rp.res, josi: rp.josi, indent, line, column: columnCurrent, file: filename, preprocessedCodeOffset: srcLength - src.length, preprocessedCodeLength: src.length - rp.src.length });\n src = rp.src;\n line += rp.numEOL;\n if (rp.numEOL > 0) {\n column = 1;\n }\n break;\n }\n // \u30BD\u30FC\u30B9\u3092\u9032\u3081\u308B\u524D\u306B\u4F4D\u7F6E\u3092\u8A08\u7B97\n const srcOffset = srcLength - src.length;\n // \u5024\u3092\u5909\u63DB\u3059\u308B\u5FC5\u8981\u304C\u3042\u308B\u304B\uFF1F\n let value = m[0];\n if (rule.cb) {\n value = rule.cb(value);\n }\n // \u30BD\u30FC\u30B9\u3092\u9032\u3081\u308B\n columnCurrent = column;\n lineCurrent = line;\n column += m[0].length;\n src = src.substring(m[0].length);\n // \u6539\u884C\u306E\u6642\u306E\u51E6\u7406\n if ((rule.name === 'eol' && value === '\\n') || rule.name === '_eol') {\n value = line++;\n column = 1;\n }\n // \u6570\u5024\u306A\u3089\u5358\u4F4D\u3092\u6301\u3064\u304B\uFF1F --- #994\n if (rule.name === 'number') {\n // \u5358\u4F4D\u304C\u3042\u308C\u3070\u8AAD\u307F\u98DB\u3070\u3059\n const um = unitRE.exec(src);\n if (um) {\n src = src.substring(um[0].length);\n column += m[0].length;\n }\n // CSS\u306E\u5358\u4F4D\u306A\u3089\u81EA\u52D5\u7684\u306B\u6587\u5B57\u5217\u3068\u3057\u3066\u8A8D\u8B58\u3055\u305B\u308B #1811\n const cssUnit = cssUnitRE.exec(src);\n if (cssUnit) {\n ruleName = 'string';\n src = src.substring(cssUnit[0].length);\n column += m[0].length;\n value += cssUnit[0];\n }\n }\n let josi = '';\n if (rule.readJosi) {\n // \u6B63\u898F\u8868\u73FE\u3067\u52A9\u8A5E\u304C\u3042\u308B\u304B\u8AAD\u307F\u53D6\u308B\n const j = josiRE.exec(src);\n if (j) {\n column += j[0].length;\n josi = j[0].replace(/^\\s+/, '');\n src = src.substring(j[0].length);\n // \u52A9\u8A5E\u306E\u76F4\u5F8C\u306B\u3042\u308B\u30AB\u30F3\u30DE\u3092\u7121\u8996 #877\n if (src.charAt(0) === ',') {\n src = src.substring(1);\n }\n // \u300C\uFF0A\uFF0A\u3067\u3042\u308B\u300D\u306A\u3089\u524A\u9664 #939 #974\n if (removeJosiMap[josi]) {\n josi = '';\n }\n // \u300C\u3082\u306E\u300D\u69CB\u6587 (#1614)\n if (josi.substring(0, 2) === '\u3082\u306E') {\n josi = josi.substring(2);\n }\n }\n }\n switch (ruleName) {\n case 'def_test': {\n isDefTest = true;\n break;\n }\n case 'eol': { // eol\u306E\u51E6\u7406\u306F\u307B\u304B\u306B\u2191\u3068\u2193\u306B\u3042\u308B\n isDefTest = false;\n break;\n }\n default: {\n break;\n }\n }\n // \u3053\u3053\u307E\u3067\u2030(#682) \u3092\u51E6\u7406\n if (ruleName === 'dec_lineno') {\n line--;\n continue;\n }\n result.push({\n type: ruleName,\n value,\n indent,\n line: lineCurrent,\n column: columnCurrent,\n file: filename,\n josi,\n preprocessedCodeOffset: srcOffset,\n preprocessedCodeLength: (srcLength - src.length) - srcOffset\n });\n // \u6539\u884C\u306E\u3068\u304D\u6B21\u306E\u884C\u306E\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u8ABF\u3079\u308B\u3002\u306A\u304A\u3001\u6539\u884C\u306E\u5F8C\u306F\u5FC5\u305Acolumn\u304C1\u306B\u306A\u308B\u3002\u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u306E\u305F\u3081\u3001\u4E00\u884C\u306B2\u3064\u4EE5\u4E0A\u306E\u6587\u3092\u542B\u3080\u3068\u304D\u3092\u8003\u616E\u3059\u308B\u3002(core #66)\n if (ruleName === 'eol' && column === 1) {\n const ia = this.countIndent(src);\n indent = ia[0];\n column += ia[1];\n src = src.substring(ia[1]); // \u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u98DB\u3070\u3059\n }\n break;\n }\n if (!ok) {\n throw new InternalLexerError('\u672A\u77E5\u306E\u8A9E\u53E5: ' + src.substring(0, 3) + '...', srcLength - src.length, srcLength - srcLength + 3, line, filename);\n }\n }\n return result;\n }\n // \u30C8\u30FC\u30AF\u30F3\u914D\u5217\u3092type\u6587\u5B57\u5217\u306B\u5909\u63DB\n static tokensToTypeStr(tokens, sep) {\n const a = tokens.map((v) => {\n return v.type;\n });\n return a.join(sep);\n }\n /**\n * \u30D5\u30A1\u30A4\u30EB\u540D\u304B\u3089\u30E2\u30B8\u30E5\u30FC\u30EB\u540D\u3078\u5909\u63DB\n * @param {string} filename\n * @returns {string}\n */\n static filenameToModName(filename) {\n if (!filename) {\n return 'main';\n }\n // \u30D1\u30B9\u304C\u3042\u308C\u3070\u30D1\u30B9\u3092\u524A\u9664\n filename = filename.replace(/[\\\\:]/g, '/'); // Windows\u306Epath\u8A18\u53F7\u3092/\u306B\u7F6E\u63DB\n if (filename.indexOf('/') >= 0) {\n const a = filename.split('/');\n filename = a[a.length - 1];\n }\n filename = filename.replace(/\\.nako3?$/, '');\n return filename;\n }\n}\n", "/**\n * nadesiko v3 parser\n */\nimport { opPriority, RenbunJosi, operatorList } from './nako_parser_const.mjs';\nimport { NakoParserBase } from './nako_parser_base.mjs';\nimport { NakoSyntaxError } from './nako_errors.mjs';\nimport { NakoLexer } from './nako_lexer.mjs';\nimport { NewEmptyToken } from './nako_types.mjs';\n/**\n * \u69CB\u6587\u89E3\u6790\u3092\u884C\u3046\u30AF\u30E9\u30B9\n */\nexport class NakoParser extends NakoParserBase {\n /**\n * \u69CB\u6587\u89E3\u6790\u3092\u5B9F\u884C\u3059\u308B\n */\n parse(tokens, filename) {\n this.reset();\n this.tokens = tokens;\n this.modName = NakoLexer.filenameToModName(filename);\n this.modList.push(this.modName);\n // \u89E3\u6790\u51E6\u7406 - \u5148\u982D\u304B\u3089\u89E3\u6790\u958B\u59CB\n const result = this.startParser();\n // \u95A2\u6570\u6BCE\u306B\u975E\u540C\u671F\u51E6\u7406\u304C\u5FC5\u8981\u304B\u3069\u3046\u304B\u3092\u5224\u5B9A\u3059\u308B\n this.isModifiedNodes = false;\n this._checkAsyncFn(result);\n while (this.isModifiedNodes) {\n this.isModifiedNodes = false;\n this._checkAsyncFn(result);\n }\n return result;\n }\n /** \u30D1\u30FC\u30B5\u30FC\u306E\u4E00\u756A\u6700\u521D\u306B\u547C\u3073\u51FA\u3059\u69CB\u6587\u898F\u5247 */\n startParser() {\n const b = this.ySentenceList();\n const c = this.get();\n if (c && c.type !== 'eof') {\n this.logger.debug(`\u69CB\u6587\u89E3\u6790\u3067\u30A8\u30E9\u30FC\u3002${this.nodeToStr(c, { depth: 1 }, true)}\u306E\u4F7F\u3044\u65B9\u304C\u9593\u9055\u3063\u3066\u3044\u307E\u3059\u3002`, c);\n throw NakoSyntaxError.fromNode(`\u69CB\u6587\u89E3\u6790\u3067\u30A8\u30E9\u30FC\u3002${this.nodeToStr(c, { depth: 1 }, false)}\u306E\u4F7F\u3044\u65B9\u304C\u9593\u9055\u3063\u3066\u3044\u307E\u3059\u3002`, c);\n }\n return b;\n }\n /** \u4F55\u3082\u3057\u306A\u3044\n * @returns {Ast}\n */\n yNop() {\n return {\n type: 'nop',\n josi: '',\n ...this.peekSourceMap(),\n end: this.peekSourceMap()\n };\n }\n /** \u8907\u6570\u6587\u3092\u8FD4\u3059 */\n ySentenceList() {\n const blocks = [];\n let line = -1;\n const map = this.peekSourceMap();\n while (!this.isEOF()) {\n const n = this.ySentence();\n if (!n) {\n break;\n }\n blocks.push(n);\n if (line < 0) {\n line = n.line;\n }\n }\n if (blocks.length === 0) {\n const token = this.peek() || this.tokens[0];\n this.logger.debug('\u69CB\u6587\u89E3\u6790\u306B\u5931\u6557:' + this.nodeToStr(this.peek(), { depth: 1 }, true), token);\n throw NakoSyntaxError.fromNode('\u69CB\u6587\u89E3\u6790\u306B\u5931\u6557:' + this.nodeToStr(this.peek(), { depth: 1 }, false), token);\n }\n return { type: 'block', blocks, josi: '', ...map, end: this.peekSourceMap() };\n }\n /** \u4F59\u5270\u30B9\u30BF\u30C3\u30AF\u306E\u30EC\u30DD\u30FC\u30C8\u3092\u4F5C\u308B */\n makeStackBalanceReport() {\n const words = [];\n this.stack.forEach((t) => {\n let w = this.nodeToStr(t, { depth: 1 }, false);\n if (t.josi) {\n w += t.josi;\n }\n words.push(w);\n });\n const desc = words.join(',');\n // \u6700\u8FD1\u4F7F\u3063\u305F\u95A2\u6570\u306E\u4F7F\u3044\u65B9\u30EC\u30DD\u30FC\u30C8\u3092\u4F5C\u308B #1093\n let descFunc = '';\n const chA = 'A'.charCodeAt(0);\n for (const f of this.recentlyCalledFunc) {\n descFunc += ' - ';\n let no = 0;\n const josiA = (f).josi;\n if (josiA) {\n for (const arg of josiA) {\n const ch = String.fromCharCode(chA + no);\n descFunc += ch;\n if (arg.length === 1) {\n descFunc += arg[0];\n }\n else {\n descFunc += `(${arg.join('|')})`;\n }\n no++;\n }\n }\n descFunc += String(f.name) + '\\n';\n }\n this.recentlyCalledFunc = [];\n return `\u672A\u89E3\u6C7A\u306E\u5358\u8A9E\u304C\u3042\u308A\u307E\u3059: [${desc}]\\n\u6B21\u306E\u547D\u4EE4\u306E\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059:\\n${descFunc}`;\n }\n yEOL() {\n // \u884C\u672B\u306E\u30C1\u30A7\u30C3\u30AF #1009\n const eol = this.get();\n if (!eol) {\n return null;\n }\n // \u4F59\u5270\u30B9\u30BF\u30C3\u30AF\u306E\u78BA\u8A8D\n if (this.stack.length > 0) {\n const report = this.makeStackBalanceReport();\n throw NakoSyntaxError.fromNode(report, eol);\n }\n this.recentlyCalledFunc = [];\n return {\n type: 'eol',\n comment: eol.value,\n line: eol.line,\n column: eol.column,\n file: eol.file\n };\n }\n /** @returns {Ast | null} */\n ySentence() {\n const map = this.peekSourceMap();\n // \u6700\u521D\u306E\u8A9E\u53E5\u304C\u6C7A\u307E\u3063\u3066\u3044\u308B\u69CB\u6587\n if (this.check('eol')) {\n return this.yEOL();\n }\n if (this.check('\u3082\u3057')) {\n return this.yIF();\n }\n if (this.check('\u5F8C\u5224\u5B9A')) {\n return this.yAtohantei();\n }\n if (this.check('\u30A8\u30E9\u30FC\u76E3\u8996')) {\n return this.yTryExcept();\n }\n if (this.accept(['\u629C\u3051\u308B'])) {\n return { type: 'break', josi: '', ...map, end: this.peekSourceMap() };\n }\n if (this.accept(['\u7D9A\u3051\u308B'])) {\n return { type: 'continue', josi: '', ...map, end: this.peekSourceMap() };\n }\n if (this.check('??')) {\n return this.yDebugPrint();\n }\n // \u5B9F\u884C\u30E2\u30FC\u30C9\u306E\u6307\u5B9A\n if (this.accept(['DNCL\u30E2\u30FC\u30C9'])) {\n return this.yDNCLMode(1);\n }\n if (this.accept(['DNCL2\u30E2\u30FC\u30C9'])) {\n return this.yDNCLMode(2);\n }\n if (this.accept(['not', 'string', '\u30E2\u30FC\u30C9\u8A2D\u5B9A'])) {\n return this.ySetGenMode(this.y[1].value);\n }\n if (this.accept(['not', '\u30E2\u30B8\u30E5\u30FC\u30EB\u516C\u958B\u65E2\u5B9A\u5024', 'eq', 'string'])) {\n return this.yExportDefault(this.y[3].value);\n }\n if (this.accept(['not', '\u53B3\u30C1\u30A7\u30C3\u30AF'])) {\n return this.ySetMode('\u53B3\u3057\u304F\u30C1\u30A7\u30C3\u30AF');\n } // (#1698)\n // (memo) \u73FE\u72B6\u300C\u53D6\u8FBC\u300D\u306F\u30D7\u30EA\u30D7\u30ED\u30BB\u30B9\u6BB5\u968E(NakoCompiler.listRequireStatements)\u3067\u51E6\u7406\u3055\u308C\u308B\n // if (this.accept(['require', 'string', '\u53D6\u8FBC'])) { return this.yRequire() }\n // <\u5EC3\u6B62\u3055\u308C\u305F\u69CB\u6587>\n if (this.check('\u9010\u6B21\u5B9F\u884C')) {\n return this.yTikuji();\n } // \u5EC3\u6B62 #1611\n if (this.accept(['not', '\u975E\u540C\u671F\u30E2\u30FC\u30C9'])) {\n return this.yASyncMode();\n }\n // </\u5EC3\u6B62\u3055\u308C\u305F\u69CB\u6587>\n if (this.check2(['func', 'eq'])) {\n const word = this.get() || NewEmptyToken();\n throw NakoSyntaxError.fromNode(`\u95A2\u6570\u300E${word.value}\u300F\u306B\u4EE3\u5165\u3067\u304D\u307E\u305B\u3093\u3002`, word);\n }\n // \u5148\u8AAD\u307F\u3057\u3066\u521D\u3081\u3066\u78BA\u5B9A\u3059\u308B\u69CB\u6587\n if (this.accept([this.ySpeedMode])) {\n return this.y[0];\n }\n if (this.accept([this.yPerformanceMonitor])) {\n return this.y[0];\n }\n if (this.accept([this.yLet])) {\n return this.y[0];\n }\n if (this.accept([this.yDefTest])) {\n return this.y[0];\n }\n if (this.accept([this.yDefFunc])) {\n return this.y[0];\n }\n // \u95A2\u6570\u547C\u3073\u51FA\u3057\u306E\u4ED6\u3001\u5404\u7A2E\u69CB\u6587\u306E\u5B9F\u88C5\n if (this.accept([this.yCall])) {\n const c1 = this.y[0];\n const nextToken = this.peek();\n if (nextToken && nextToken.type === '\u306A\u3089\u3070') {\n const map = this.peekSourceMap();\n const cond = c1;\n this.get(); // skip \u306A\u3089\u3070\n // \u3082\u3057\u6587\u306E\u6761\u4EF6\u3068\u3057\u3066\u95A2\u6570\u547C\u3073\u51FA\u3057\u304C\u3042\u308B\u5834\u5408\n return this.yIfThen(cond, map);\n }\n else if (RenbunJosi.indexOf(c1.josi || '') >= 0) { // \u9023\u6587\u3092block\u3068\u3057\u3066\u63A5\u7D9A\u3059\u308B(\u3082\u3057\u69CB\u6587\u306A\u3069\u306E\u305F\u3081)\n if (this.stack.length >= 1) { // \u30B9\u30BF\u30C3\u30AF\u306E\u4F59\u5270\u3092\u30C1\u30A7\u30C3\u30AF\n const report = this.makeStackBalanceReport();\n throw NakoSyntaxError.fromNode(report, c1);\n }\n const c2 = this.ySentence();\n if (c2 !== null) {\n return {\n type: 'block',\n blocks: [c1, c2],\n josi: c2.josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n }\n return c1;\n }\n return null;\n }\n /** [\u5EC3\u6B62] \u975E\u540C\u671F\u30E2\u30FC\u30C9 #11 @returns {Ast} */\n yASyncMode() {\n this.logger.error('\u300E\u975E\u540C\u671F\u30E2\u30FC\u30C9\u300F\u69CB\u6587\u306F\u5EC3\u6B62\u3055\u308C\u307E\u3057\u305F(https://nadesi.com/v3/doc/go.php?1028)\u3002', this.peek());\n const map = this.peekSourceMap();\n return { type: 'eol', ...map, end: this.peekSourceMap() };\n }\n /** set DNCL mode */\n yDNCLMode(ver) {\n const map = this.peekSourceMap();\n if (ver === 1) {\n // \u914D\u5217\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u306F1\u304B\u3089\n this.arrayIndexFrom = 1;\n // \u914D\u5217\u30A2\u30AF\u30BB\u30B9\u3092JS\u3068\u9006\u9806\u3067\u6307\u5B9A\u3059\u308B\n this.flagReverseArrayIndex = true;\n }\n else {\n // ver2\u306FPython\u306B\u8FD1\u3044\u3068\u306E\u3053\u3068\n }\n // \u914D\u5217\u4EE3\u5165\u6642\u81EA\u52D5\u3067\u521D\u671F\u5316\u30C1\u30A7\u30C3\u30AF\u3059\u308B\n this.flagCheckArrayInit = true;\n return { type: 'eol', ...map, end: this.peekSourceMap() };\n }\n /** @returns {Ast} */\n ySetGenMode(mode) {\n const map = this.peekSourceMap();\n this.genMode = mode;\n return { type: 'eol', ...map, end: this.peekSourceMap() };\n }\n /** @returns {Ast} */\n yExportDefault(mode) {\n const map = this.peekSourceMap();\n this.isExportDefault = mode === '\u516C\u958B';\n this.moduleExport.set(this.modName, this.isExportDefault);\n return { type: 'eol', ...map, end: this.peekSourceMap() };\n }\n /** @returns {AstStrValue} */\n ySetMode(mode) {\n const map = this.peekSourceMap();\n return { type: 'run_mode', value: mode, ...map, end: this.peekSourceMap() };\n }\n /** @returns {AstBlocks} */\n yBlock() {\n const map = this.peekSourceMap();\n const blocks = [];\n if (this.check('\u3053\u3053\u304B\u3089')) {\n this.get();\n }\n while (!this.isEOF()) {\n if (this.checkTypes(['\u9055\u3048\u3070', '\u3053\u3053\u307E\u3067', '\u30A8\u30E9\u30FC'])) {\n break;\n }\n if (!this.accept([this.ySentence])) {\n break;\n }\n blocks.push(this.y[0]);\n }\n return { type: 'block', blocks, josi: '', ...map, end: this.peekSourceMap() };\n }\n yDefFuncReadArgs() {\n if (!this.check('(')) {\n return null;\n }\n const a = [];\n this.get(); // skip '('\n while (!this.isEOF()) {\n if (this.check(')')) {\n this.get(); // skip ''\n break;\n }\n const t = this.get();\n if (t) {\n a.push(t);\n } // Token to Ast\n if (this.check('comma')) {\n this.get();\n }\n }\n return a;\n }\n yDefTest() {\n return this.yDefFuncCommon('def_test');\n }\n yDefFunc() {\n return this.yDefFuncCommon('def_func');\n }\n /** \u30E6\u30FC\u30B6\u30FC\u95A2\u6570\u306E\u5B9A\u7FA9\n * @returns {AstDefFunc | null}\n */\n yDefFuncCommon(type) {\n if (!this.check(type)) { // yDefFunc\u304B\u3089\u547C\u3070\u308C\u308C\u3070 def_func \u306A\u306E\u304B\u3092\u30C1\u30A7\u30C3\u30AF\u3059\u308B\n return null;\n }\n const map = this.peekSourceMap();\n // \u95A2\u6570\u5B9A\u7FA9\u30C8\u30FC\u30AF\u30F3\u3092\u53D6\u5F97(\u3053\u306Emeta\u306B\u5148\u8AAD\u307F\u3057\u305F\u95A2\u6570\u306E\u578B\u306A\u3069\u304C\u5165\u3063\u3066\u3044\u308B)\n // (ref) NakoLexer.preDefineFunc\n const defToken = this.get(); // 'def_func' or 'def_test'\n if (!defToken) {\n return null;\n }\n const def = defToken;\n let isExport = this.isExportDefault;\n if (this.check('{')) {\n this.get();\n const funcAttribute = this.get();\n if (this.check('}')) {\n this.get();\n }\n else {\n throw NakoSyntaxError.fromNode('\u95A2\u6570\u306E\u5C5E\u6027\u306E\u6307\u5B9A\u304C\u6B63\u3057\u304F\u3042\u308A\u307E\u305B\u3093\u3002\u300E{\u300F\u3068\u300E}\u300F\u3067\u56F2\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002', def);\n }\n if (funcAttribute !== null) {\n if (funcAttribute.value === '\u516C\u958B') {\n isExport = true;\n }\n if (funcAttribute.value === '\u975E\u516C\u958B') {\n isExport = false;\n }\n if (funcAttribute.value === '\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8') {\n isExport = true;\n }\n }\n }\n let defArgs = [];\n if (this.check('(')) {\n defArgs = this.yDefFuncReadArgs() || [];\n } // // lexer\u3067\u3082\u89E3\u6790\u3057\u3066\u3044\u308B\u304C\u518D\u5EA6\u8A73\u3057\u304F\n const funcName = this.get();\n if (!funcName || funcName.type !== 'func') {\n this.logger.debug(this.nodeToStr(funcName, { depth: 0, typeName: '\u95A2\u6570' }, true) + '\u306E\u5BA3\u8A00\u3067\u30A8\u30E9\u30FC\u3002', funcName);\n throw NakoSyntaxError.fromNode(this.nodeToStr(funcName, { depth: 0, typeName: '\u95A2\u6570' }, false) + '\u306E\u5BA3\u8A00\u3067\u30A8\u30E9\u30FC\u3002', def);\n }\n if (this.check('(')) {\n // \u95A2\u6570\u5F15\u6570\u306E\u4E8C\u91CD\u5B9A\u7FA9\n if (defArgs.length > 0) {\n this.logger.debug(this.nodeToStr(funcName, { depth: 0, typeName: '\u95A2\u6570' }, true) + '\u306E\u5BA3\u8A00\u3067\u3001\u5F15\u6570\u5B9A\u7FA9\u306F\u540D\u524D\u306E\u524D\u304B\u5F8C\u306B\u4E00\u5EA6\u3060\u3051\u53EF\u80FD\u3067\u3059\u3002', funcName);\n throw NakoSyntaxError.fromNode(this.nodeToStr(funcName, { depth: 0, typeName: '\u95A2\u6570' }, false) + '\u306E\u5BA3\u8A00\u3067\u3001\u5F15\u6570\u5B9A\u7FA9\u306F\u540D\u524D\u306E\u524D\u304B\u5F8C\u306B\u4E00\u5EA6\u3060\u3051\u53EF\u80FD\u3067\u3059\u3002', funcName);\n }\n defArgs = this.yDefFuncReadArgs() || [];\n }\n if (this.check('\u3068\u306F')) {\n this.get();\n }\n let block = this.yNop();\n let multiline = false;\n let asyncFn = false;\n if (this.check('\u3053\u3053\u304B\u3089')) {\n multiline = true;\n }\n if (this.check('eol')) {\n multiline = true;\n }\n try {\n this.funcLevel++;\n this.usedAsyncFn = false;\n // \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092\u751F\u6210\n const backupLocalvars = this.localvars;\n this.localvars = new Map([['\u305D\u308C', { type: 'var', value: '' }]]);\n if (multiline) {\n this.saveStack();\n // \u95A2\u6570\u306E\u5F15\u6570\u3092\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3068\u3057\u3066\u767B\u9332\u3059\u308B\n for (const arg of defArgs) {\n if (!arg) {\n continue;\n }\n if (!arg.value) {\n continue;\n }\n const fnName = arg.value;\n this.localvars.set(fnName, { 'type': 'var', 'value': '' });\n }\n block = this.yBlock();\n // \u300C\u3053\u3053\u307E\u3067\u300D\u306E\u30C1\u30A7\u30C3\u30AF\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get(); // skip '\u3053\u3053\u307E\u3067'\n }\n else {\n // \u300C\u3053\u3053\u307E\u3067\u300D\u304C\u898B\u5F53\u305F\u3089\u306A\u3044\n const nextWordO = this.peek();\n let nextWord = JSON.stringify(nextWordO);\n if (nextWordO && nextWordO.type && nextWordO.value) {\n nextWord = nextWordO.value;\n }\n throw NakoSyntaxError.fromNode(`\u300E\u3053\u3053\u307E\u3067\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u95A2\u6570\u5B9A\u7FA9\u306E\u672B\u5C3E\u306B\u5FC5\u8981\u3067\u3059\u3002\u300E${nextWord}\u300F\u306E\u524D\u306B\u300E\u3053\u3053\u307E\u3067\u300F\u3092\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002`, def);\n }\n this.loadStack();\n }\n else {\n this.saveStack();\n block = this.ySentence() || this.yNop();\n this.loadStack();\n }\n this.funcLevel--;\n asyncFn = this.usedAsyncFn;\n this.localvars = backupLocalvars;\n }\n catch (err) {\n this.logger.debug(this.nodeToStr(funcName, { depth: 0, typeName: '\u95A2\u6570' }, true) +\n '\u306E\u5B9A\u7FA9\u3067\u4EE5\u4E0B\u306E\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3057\u305F\u3002\\n' + String(err.message), def);\n throw NakoSyntaxError.fromNode(this.nodeToStr(funcName, { depth: 0, typeName: '\u95A2\u6570' }, false) +\n '\u306E\u5B9A\u7FA9\u3067\u4EE5\u4E0B\u306E\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3057\u305F\u3002\\n' + String(err.message), def);\n }\n const func = this.funclist.get(funcName.value);\n if (func && !func.asyncFn && asyncFn) {\n func.asyncFn = asyncFn;\n }\n return {\n type,\n name: funcName.value,\n args: defArgs,\n blocks: [block],\n asyncFn,\n isExport,\n josi: '',\n meta: def.meta,\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** \u300C\u3082\u3057\u300D\u6587\u306E\u6761\u4EF6\u3092\u53D6\u5F97 */\n yIFCond() {\n const map = this.peekSourceMap();\n let a = this.yGetArg();\n if (!a) {\n throw NakoSyntaxError.fromNode('\u300C\u3082\u3057\u300D\u6587\u306E\u6761\u4EF6\u5F0F\u306B\u9593\u9055\u3044\u304C\u3042\u308A\u307E\u3059\u3002' + this.nodeToStr(this.peek(), { depth: 1 }, false), map);\n }\n // console.log('@@yIFCond=', a)\n // \u30C1\u30A7\u30C3\u30AF : A\u306A\u3089\u3070\n if (a.josi === '\u306A\u3089\u3070') {\n return a;\n }\n if (a.josi === '\u3067\u306A\u3051\u308C\u3070') {\n a = { type: 'not', operator: 'not', blocks: [a], josi: '', ...map, end: this.peekSourceMap() };\n return a;\n }\n // \u30C1\u30A7\u30C3\u30AF : A\u304CB\u306A\u3089\u3070 --- \u300C\u95A2\u6570B(A)\u300D\u306E\u3068\u304D\n if ((a.josi !== '') && (this.check('func'))) {\n // \u3082\u3057\u6587\u3067\u95A2\u6570\u547C\u3073\u51FA\u3057\u304C\u3042\u308B\u5834\u5408\n this.stack.push(a);\n a = this.yCall();\n }\n else \n // \u30C1\u30A7\u30C3\u30AF : A\u304CB\u306A\u3089\u3070 --- \u300CA = B\u300D\u306E\u3068\u304D\n if (a.josi === '\u304C') {\n const tmpI = this.index;\n const b = this.yGetArg();\n if (!b) {\n throw NakoSyntaxError.fromNode('\u3082\u3057\u6587\u306E\u6761\u4EF6\u300CA\u304CB\u306A\u3089\u3070\u300D\u3067B\u304C\u306A\u3044\u304B\u6761\u4EF6\u304C\u8907\u96D1\u904E\u304E\u307E\u3059\u3002' +\n this.nodeToStr(this.peek(), { depth: 1 }, false), map);\n }\n if (this.check('\u306A\u3089\u3070')) {\n const naraba = this.get() || { 'value': '\u306A\u3089\u3070' };\n b.josi = naraba.value;\n }\n if (b && (b.josi === '\u306A\u3089\u3070' || b.josi === '\u3067\u306A\u3051\u308C\u3070')) {\n return {\n type: 'op',\n operator: (b.josi === '\u3067\u306A\u3051\u308C\u3070') ? 'noteq' : 'eq',\n blocks: [a, b],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n this.index = tmpI;\n }\n // \u3082\u3057\u6587\u3067\u8FFD\u52A0\u306E\u95A2\u6570\u547C\u3073\u51FA\u3057\u304C\u3042\u308B\u5834\u5408\n if (!this.check('\u306A\u3089\u3070')) {\n this.stack.push(a);\n a = this.yCall();\n }\n // (\u306A\u3089\u3070|\u3067\u306A\u3051\u308C\u3070)\u3092\u78BA\u8A8D\n if (!this.check('\u306A\u3089\u3070')) {\n const smap = a || this.yNop();\n this.logger.debug('\u3082\u3057\u6587\u3067\u300E\u306A\u3089\u3070\u300F\u304C\u306A\u3044\u304B\u3001\u6761\u4EF6\u304C\u8907\u96D1\u904E\u304E\u307E\u3059\u3002' + this.nodeToStr(this.peek(), { depth: 1 }, false) + '\u306E\u76F4\u524D\u306B\u300E\u306A\u3089\u3070\u300F\u3092\u66F8\u3044\u3066\u304F\u3060\u3055\u3044\u3002', smap);\n throw NakoSyntaxError.fromNode('\u3082\u3057\u6587\u3067\u300E\u306A\u3089\u3070\u300F\u304C\u306A\u3044\u304B\u3001\u6761\u4EF6\u304C\u8907\u96D1\u904E\u304E\u307E\u3059\u3002' + this.nodeToStr(this.peek(), { depth: 1 }, false) + '\u306E\u76F4\u524D\u306B\u300E\u306A\u3089\u3070\u300F\u3092\u66F8\u3044\u3066\u304F\u3060\u3055\u3044\u3002', smap);\n }\n const naraba = this.get();\n // \u5426\u5B9A\u5F62\u306E\u30C1\u30A7\u30C3\u30AF\n if (naraba && naraba.value === '\u3067\u306A\u3051\u308C\u3070') {\n a = {\n type: 'not',\n operator: 'not',\n blocks: [a],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n if (!a) {\n throw NakoSyntaxError.fromNode('\u300C\u3082\u3057\u300D\u6587\u306E\u6761\u4EF6\u5F0F\u306B\u9593\u9055\u3044\u304C\u3042\u308A\u307E\u3059\u3002' + this.nodeToStr(this.peek(), { depth: 1 }, false), map);\n }\n return a;\n }\n /** \u3082\u3057\u6587\n * @returns {AstIf | null} */\n yIF() {\n const map = this.peekSourceMap();\n // \u300C\u3082\u3057\u300D\u304C\u3042\u308C\u3070\u300C\u3082\u3057\u300D\u6587\u3067\u3042\u308B\n if (!this.check('\u3082\u3057')) {\n return null;\n }\n const mosi = this.get(); // skip \u3082\u3057\n if (mosi === null) {\n return null;\n }\n while (this.check('comma')) {\n this.get();\n } // skip comma\n // \u300C\u3082\u3057\u300D\u6587\u306E\u6761\u4EF6\u3092\u53D6\u5F97\n let expr = null;\n try {\n expr = this.yIFCond();\n }\n catch (err) {\n throw NakoSyntaxError.fromNode('\u300E\u3082\u3057\u300F\u6587\u306E\u6761\u4EF6\u3067\u6B21\u306E\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3059\u3002\\n' + String(err.message), mosi);\n }\n return this.yIfThen(expr, map);\n }\n /** \u300C\u3082\u3057\u300D\u6587\u306E\u300C\u3082\u3057\u300D\u4EE5\u964D\u306E\u5224\u5B9A ... \u300C\u3082\u3057\u300D\u304C\u306A\u304F\u3066\u3082\u6761\u4EF6\u5206\u5C90\u306F\u52D5\u304F\u3088\u3046\u306B\u306A\u3063\u3066\u3044\u308B\n * @returns {AstIf | null}\n */\n yIfThen(expr, map) {\n // \u300C\u3082\u3057\u300D\u6587\u306E \u771F\u507D\u306E\u30D6\u30ED\u30C3\u30AF\u3092\u53D6\u5F97\n let trueBlock = this.yNop();\n let falseBlock = this.yNop();\n let tanbun = false;\n // True Block\n if (this.check('eol')) {\n trueBlock = this.yBlock();\n }\n else {\n const block = this.ySentence();\n if (block) {\n trueBlock = block;\n }\n tanbun = true;\n }\n // skip EOL\n while (this.check('eol')) {\n this.get();\n }\n // Flase Block\n if (this.check('\u9055\u3048\u3070')) {\n this.get(); // skip \u9055\u3048\u3070\n while (this.check('comma')) {\n this.get();\n }\n if (this.check('eol')) {\n falseBlock = this.yBlock();\n }\n else {\n const block = this.ySentence();\n if (block) {\n falseBlock = block;\n }\n tanbun = true;\n }\n }\n if (tanbun === false) {\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get();\n }\n else {\n throw NakoSyntaxError.fromNode('\u300E\u3082\u3057\u300F\u6587\u3067\u300E\u3053\u3053\u307E\u3067\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002', map);\n }\n }\n return {\n type: 'if',\n blocks: [expr, trueBlock, falseBlock],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n ySpeedMode() {\n const map = this.peekSourceMap();\n if (!this.check2(['string', '\u5B9F\u884C\u901F\u5EA6\u512A\u5148'])) {\n return null;\n }\n const optionNode = this.get();\n this.get();\n let val = '';\n if (optionNode && optionNode.value) {\n val = optionNode.value;\n }\n else {\n return null;\n }\n const options = { \u884C\u756A\u53F7\u7121\u3057: false, \u6697\u9ED9\u306E\u578B\u5909\u63DB\u7121\u3057: false, \u5F37\u5236\u30D4\u30E5\u30A2: false, \u305D\u308C\u7121\u52B9: false };\n for (const name of val.split('/')) {\n // \u5168\u3066\u6709\u52B9\u5316\n if (name === '\u5168\u3066') {\n for (const k of Object.keys(options)) {\n options[k] = true;\n }\n break;\n }\n // \u500B\u5225\u306B\u6709\u52B9\u5316\n if (Object.keys(options).includes(name)) {\n options[name] = true;\n }\n else {\n // \u4E92\u63DB\u6027\u3092\u8003\u3048\u3066\u3001\u8B66\u544A\u306B\u7559\u3081\u308B\u3002\n this.logger.warn(`\u5B9F\u884C\u901F\u5EA6\u512A\u5148\u6587\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u300E${name}\u300F\u306F\u5B58\u5728\u3057\u307E\u305B\u3093\u3002`, optionNode);\n }\n }\n let multiline = false;\n if (this.check('\u3053\u3053\u304B\u3089')) {\n this.get();\n multiline = true;\n }\n else if (this.check('eol')) {\n multiline = true;\n }\n let block = this.yNop();\n if (multiline) {\n block = this.yBlock();\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get();\n }\n }\n else {\n block = this.ySentence() || block;\n }\n return {\n type: 'speed_mode',\n options,\n blocks: [block],\n josi: '',\n ...map\n };\n }\n yPerformanceMonitor() {\n const map = this.peekSourceMap();\n if (!this.check2(['string', '\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u30E2\u30CB\u30BF\u9069\u7528'])) {\n return null;\n }\n const optionNode = this.get();\n if (!optionNode) {\n return null;\n }\n this.get();\n const options = { \u30E6\u30FC\u30B6\u95A2\u6570: false, \u30B7\u30B9\u30C6\u30E0\u95A2\u6570\u672C\u4F53: false, \u30B7\u30B9\u30C6\u30E0\u95A2\u6570: false };\n for (const name of optionNode.value.split('/')) {\n // \u5168\u3066\u6709\u52B9\u5316\n if (name === '\u5168\u3066') {\n for (const k of Object.keys(options)) {\n options[k] = true;\n }\n break;\n }\n // \u500B\u5225\u306B\u6709\u52B9\u5316\n if (Object.keys(options).includes(name)) {\n options[name] = true;\n }\n else {\n // \u4E92\u63DB\u6027\u3092\u8003\u3048\u3066\u3001\u8B66\u544A\u306B\u7559\u3081\u308B\u3002\n this.logger.warn(`\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u30E2\u30CB\u30BF\u9069\u7528\u6587\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u300E${name}\u300F\u306F\u5B58\u5728\u3057\u307E\u305B\u3093\u3002`, optionNode);\n }\n }\n let multiline = false;\n if (this.check('\u3053\u3053\u304B\u3089')) {\n this.get();\n multiline = true;\n }\n else if (this.check('eol')) {\n multiline = true;\n }\n let block = this.yNop();\n if (multiline) {\n block = this.yBlock();\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get();\n }\n }\n else {\n block = this.ySentence() || block;\n }\n return {\n type: 'performance_monitor',\n options,\n blocks: [block],\n josi: '',\n ...map\n };\n }\n /** [\u5EC3\u6B62] #1611 \u300C\u9010\u6B21\u5B9F\u884C\u300D\u69CB\u6587 @returns {Ast | null} */\n yTikuji() {\n if (!this.check('\u9010\u6B21\u5B9F\u884C')) {\n return null;\n }\n const tikuji = this.getCur(); // skip\n this.logger.error('\u300E\u9010\u6B21\u5B9F\u884C\u300F\u69CB\u6587\u306F\u5EC3\u6B62\u3055\u308C\u307E\u3057\u305F(https://nadesi.com/v3/doc/go.php?944)\u3002', tikuji);\n return { type: 'eol', ...this.peekSourceMap(), end: this.peekSourceMap() };\n }\n /**\n * 1\u3064\u76EE\u306E\u5024\u3092\u4E0E\u3048\u3001\u305D\u306E\u5F8C\u306B\u7D9A\u304F\u8A08\u7B97\u5F0F\u3092\u53D6\u5F97\u3057\u3001\u512A\u5148\u898F\u5247\u306B\u6CBF\u3063\u3066\u4E26\u3073\u66FF\u3048\u3057\u3066\u623B\u3059\n * @param {Ast} firstValue\n */\n yGetArgOperator(firstValue) {\n const args = [firstValue];\n while (!this.isEOF()) {\n // \u6F14\u7B97\u5B50\u304C\u3042\u308B\uFF1F\n let op = this.peek();\n if (op && opPriority[op.type]) {\n op = this.getCur();\n args.push(op); // Token to Ast\n // \u6F14\u7B97\u5B50\u5F8C\u306E\u5024\u3092\u53D6\u5F97\n const v = this.yValue();\n if (v === null) {\n throw NakoSyntaxError.fromNode(`\u8A08\u7B97\u5F0F\u3067\u6F14\u7B97\u5B50\u300E${op.value}\u300F\u5F8C\u306B\u5024\u304C\u3042\u308A\u307E\u305B\u3093`, firstValue);\n }\n args.push(v);\n continue;\n }\n break;\n }\n if (args.length === 0) {\n return null;\n }\n if (args.length === 1) {\n return args[0];\n }\n return this.infixToAST(args);\n }\n /**\n * \u7BC4\u56F2(\u95A2\u6570)\u3092\u8FD4\u3059\n * @param kara\n * @returns {AstCallFunc | null}\n */\n yRange(kara) {\n // \u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8?\n if (!this.check('\u2026')) {\n return null;\n }\n const map = this.peekSourceMap();\n this.get(); // skip '\u2026'\n const made = this.yValue();\n if (!kara || !made) {\n throw NakoSyntaxError.fromNode('\u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u6307\u5B9A\u30A8\u30E9\u30FC\u3002\u300EA\u2026B\u300F\u306E\u66F8\u5F0F\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n const meta = this.funclist.get('\u7BC4\u56F2');\n if (!meta) {\n throw new Error('\u95A2\u6570\u300E\u7BC4\u56F2\u300F\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002plugin_system\u3092\u30B7\u30B9\u30C6\u30E0\u306B\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044\u3002');\n }\n return {\n type: 'func',\n name: '\u7BC4\u56F2',\n blocks: [kara, made],\n josi: made.josi,\n meta,\n asyncFn: false,\n ...map,\n end: this.peekSourceMap()\n };\n }\n /**\n * \u8868\u793A(\u95A2\u6570)\u3092\u8FD4\u3059 \u300C??\u300D\u306E\u30A8\u30A4\u30EA\u30A2\u30B9\u3067\u5229\u7528 (#1745)\n */\n yDebugPrint() {\n const map = this.peekSourceMap();\n const t = this.get(); // skip '??'\n if (!t || t.value !== '??') {\n throw NakoSyntaxError.fromNode('\u300E??\u300F\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n const arg = this.yCalc();\n if (!arg) {\n throw NakoSyntaxError.fromNode('\u300E??(\u8A08\u7B97\u5F0F)\u300F\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n const meta = this.funclist.get('\u30CF\u30C6\u30CA\u95A2\u6570\u5B9F\u884C');\n if (!meta) {\n throw new Error('\u95A2\u6570\u300E\u30CF\u30C6\u30CA\u95A2\u6570\u5B9F\u884C\u300F\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002plugin_system\u3092\u30B7\u30B9\u30C6\u30E0\u306B\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044\u3002');\n }\n return {\n type: 'func',\n name: '\u30CF\u30C6\u30CA\u95A2\u6570\u5B9F\u884C',\n blocks: [arg],\n josi: '',\n meta,\n asyncFn: false,\n ...map,\n end: this.peekSourceMap()\n };\n }\n yGetArg() {\n // \u5024\u3092\u4E00\u3064\u8AAD\u3080\n const value1 = this.yValue();\n if (value1 === null) {\n return null;\n }\n // \u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\uFF1F\n if (this.check('\u2026')) {\n return this.yRange(value1);\n }\n // \u8A08\u7B97\u5F0F\u304C\u3042\u308B\u5834\u5408\u3092\u8003\u616E\n return this.yGetArgOperator(value1);\n }\n infixToPolish(list) {\n // \u4E2D\u9593\u8A18\u6CD5\u304B\u3089\u9006\u30DD\u30FC\u30E9\u30F3\u30C9\u306B\u5909\u63DB\n const priority = (t) => {\n if (opPriority[t.type]) {\n return opPriority[t.type];\n }\n return 10;\n };\n const stack = [];\n const polish = [];\n while (list.length > 0) {\n const t = list.shift();\n if (!t) {\n break;\n }\n while (stack.length > 0) { // \u512A\u5148\u9806\u4F4D\u3092\u898B\u3066\u79FB\u52D5\u3059\u308B\n const sTop = stack[stack.length - 1];\n if (priority(t) > priority(sTop)) {\n break;\n }\n const tpop = stack.pop();\n if (!tpop) {\n this.logger.error('\u8A08\u7B97\u5F0F\u306B\u9593\u9055\u3044\u304C\u3042\u308A\u307E\u3059\u3002', t);\n break;\n }\n polish.push(tpop);\n }\n stack.push(t);\n }\n // \u6B8B\u3063\u305F\u8981\u7D20\u3092\u7A4D\u307F\u66FF\u3048\u308B\n while (stack.length > 0) {\n const t = stack.pop();\n if (t) {\n polish.push(t);\n }\n }\n return polish;\n }\n /** @returns {Ast | null} */\n infixToAST(list) {\n if (list.length === 0) {\n return null;\n }\n // \u9006\u30DD\u30FC\u30E9\u30F3\u30C9\u3092\u69CB\u6587\u6728\u306B\n const josi = list[list.length - 1].josi;\n const node = list[list.length - 1];\n const polish = this.infixToPolish(list);\n /** @type {Ast[]} */\n const stack = [];\n for (const t of polish) {\n if (!opPriority[t.type]) { // \u6F14\u7B97\u5B50\u3067\u306F\u306A\u3044\n stack.push(t);\n continue;\n }\n const b = stack.pop();\n const a = stack.pop();\n if (a === undefined || b === undefined) {\n this.logger.debug('--- \u8A08\u7B97\u5F0F(\u9006\u30DD\u30FC\u30E9\u30F3\u30C9) ---\\n' + JSON.stringify(polish));\n throw NakoSyntaxError.fromNode('\u8A08\u7B97\u5F0F\u3067\u30A8\u30E9\u30FC', node);\n }\n /** @type {AstOperator} */\n const op = {\n type: 'op',\n operator: t.type,\n blocks: [a, b],\n josi,\n startOffset: a.startOffset,\n endOffset: a.endOffset,\n line: a.line,\n column: a.column,\n file: a.file\n };\n stack.push(op);\n }\n const ans = stack.pop();\n if (!ans) {\n return null;\n }\n return ans;\n }\n yGetArgParen(y, funcName) {\n let isClose = false;\n const si = this.stack.length;\n while (!this.isEOF()) {\n if (this.check(')')) {\n isClose = true;\n break;\n }\n // \u30AB\u30C3\u30B3\u3092\u7528\u3044\u305F\u95A2\u6570\u547C\u3073\u51FA\u3057\u306E\u4E2D\u3067\u52A9\u8A5E\u3092\u7528\u3044\u305F\u95A2\u6570\u547C\u3073\u51FA\u3057\u3092\u6709\u52B9\u306B\u3059\u308B #2000\n const v = this.yCalc();\n if (v) {\n this.pushStack(v);\n if (this.check('comma')) {\n this.get();\n }\n continue;\n }\n break;\n }\n if (!isClose) {\n const name = funcName || y[0].value || this.nodeToStr(y[0], { depth: 0, typeName: '\u95A2\u6570' }, false);\n throw NakoSyntaxError.fromNode(`C\u98A8\u95A2\u6570\u300E${name}\u300F\u3067\u30AB\u30C3\u30B3\u304C\u9589\u3058\u3066\u3044\u307E\u305B\u3093`, y[0]);\n }\n const a = [];\n while (si < this.stack.length) {\n const v = this.popStack();\n if (v) {\n a.unshift(v);\n }\n }\n return a;\n }\n /** \u95A2\u6570\u306E\u623B\u308A\u5024\u3092\u7D9A\u3051\u3066C\u98A8\u547C\u3073\u51FA\u3057\u3059\u308B */\n yApplyCallValue(callee) {\n let node = callee;\n while (this.check('(')) {\n this.get(); // skip '('\n const args = this.yGetArgParen([node], '\u95A2\u6570\u547C\u3073\u51FA\u3057\u306E\u7D50\u679C');\n if (!this.check(')')) {\n throw NakoSyntaxError.fromNode('C\u98A8\u95A2\u6570\u547C\u3073\u51FA\u3057\u306E\u30A8\u30E9\u30FC', node);\n }\n const close = this.get();\n node = {\n type: 'call_value',\n blocks: [node, ...args],\n josi: close?.josi || '',\n startOffset: node.startOffset,\n endOffset: close?.endOffset,\n line: node.line,\n column: node.column,\n file: node.file,\n end: this.peekSourceMap()\n };\n }\n return node;\n }\n /** @returns {AstRepeatTimes | null} */\n yRepeatTime() {\n const map = this.peekSourceMap();\n if (!this.check('\u56DE')) {\n return null;\n }\n this.get(); // skip '\u56DE'\n if (this.check('comma')) {\n this.get();\n } // skip comma\n if (this.check('\u7E70\u8FD4')) {\n this.get();\n } // skip 'N\u56DE\u3001\u7E70\u308A\u8FD4\u3059' (#924)\n const num = this.popStack([]) || { type: 'word', value: '\u305D\u308C', josi: '', ...map, end: this.peekSourceMap() };\n let multiline = false;\n let block = this.yNop();\n if (this.check('comma')) {\n this.get();\n }\n if (this.check('\u3053\u3053\u304B\u3089')) {\n this.get();\n multiline = true;\n }\n else if (this.check('eol')) {\n multiline = true;\n }\n if (multiline) { // multiline\n block = this.yBlock();\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get();\n }\n else {\n throw NakoSyntaxError.fromNode('\u300E\u3053\u3053\u307E\u3067\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u300E\u56DE\u300F...\u300E\u3053\u3053\u307E\u3067\u300F\u3092\u5BFE\u5FDC\u3055\u305B\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n }\n else {\n // singleline\n const b = this.ySentence();\n if (b) {\n block = b;\n }\n }\n return {\n type: 'repeat_times',\n blocks: [num, block],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** @returns {AstWhile | null} */\n yWhile() {\n const map = this.peekSourceMap();\n if (!this.check('\u9593')) {\n return null;\n }\n this.get(); // skip '\u9593'\n while (this.check('comma')) {\n this.get();\n } // skip ','\n if (this.check('\u7E70\u8FD4')) {\n this.get();\n } // skip '\u7E70\u308A\u8FD4\u3059' #927\n const expr = this.popStack();\n if (expr === null) {\n throw NakoSyntaxError.fromNode('\u300E\u9593\u300F\u3067\u6761\u4EF6\u304C\u3042\u308A\u307E\u305B\u3093\u3002', map);\n }\n if (this.check('comma')) {\n this.get();\n }\n if (!this.checkTypes(['\u3053\u3053\u304B\u3089', 'eol'])) {\n throw NakoSyntaxError.fromNode('\u300E\u9593\u300F\u306E\u76F4\u5F8C\u306F\u6539\u884C\u304C\u5FC5\u8981\u3067\u3059', map);\n }\n const block = this.yBlock();\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get();\n }\n else {\n throw NakoSyntaxError.fromNode('\u300E\u3053\u3053\u307E\u3067\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u300E\u9593\u300F...\u300E\u3053\u3053\u307E\u3067\u300F\u3092\u5BFE\u5FDC\u3055\u305B\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n return {\n type: 'while',\n blocks: [expr, block],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** @returns {AstAtohantei | null} */\n yAtohantei() {\n const map = this.peekSourceMap();\n if (this.check('\u5F8C\u5224\u5B9A')) {\n this.get();\n } // skip \u5F8C\u5224\u5B9A\n if (this.check('\u7E70\u8FD4')) {\n this.get();\n } // skip \u7E70\u308A\u8FD4\u3059\n if (this.check('\u3053\u3053\u304B\u3089')) {\n this.get();\n }\n const block = this.yBlock();\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get();\n }\n if (this.check('comma')) {\n this.get();\n }\n let cond = this.yGetArg(); // \u6761\u4EF6\n let bUntil = false;\n const t = this.peek();\n if (t && t.value === '\u306A\u308B' && (t.josi === '\u307E\u3067' || t.josi === '\u307E\u3067\u306E')) {\n this.get(); // skip \u306A\u308B\u307E\u3067\n bUntil = true;\n }\n if (this.check('\u9593')) {\n this.get();\n } // skip \u9593\n if (bUntil) { // \u6761\u4EF6\u3092\u53CD\u8EE2\u3059\u308B\n cond = {\n type: 'not',\n operator: 'not',\n blocks: [cond],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n if (!cond) {\n cond = { type: 'number', value: 1, josi: '', ...map, end: this.peekSourceMap() };\n }\n return {\n type: 'atohantei',\n blocks: [cond, block],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** @returns {AstFor | null} */\n yFor() {\n const errorForArguments = '\u300E\u7E70\u308A\u8FD4\u3059\u300F\u6587\u3067A\u304B\u3089B\u307E\u3067\u306E\u6307\u5B9A\u304C\u3042\u308A\u307E\u305B\u3093\u3002';\n let flagDown = true; // A\u304B\u3089B\u307E\u3067\u306E\u6642\u3001A>=B\u3092\u8A31\u5BB9\u3059\u308B\u304B\u3069\u3046\u304B\n let flagUp = true; // A\u304B\u3089B\u307E\u3067\u306E\u6642\u3001A<=B\u3092\u8A31\u5BB9\u3059\u308B\u304B\u3069\u3046\u304B\n let loopDirection = null; // \u30EB\u30FC\u30D7\u306E\u65B9\u5411\u3092\u4E00\u65B9\u5411\u306B\u9650\u5B9A\u3059\u308B\n const map = this.peekSourceMap();\n if (this.check('\u7E70\u8FD4') || this.check('\u5897\u7E70\u8FD4') || this.check('\u6E1B\u7E70\u8FD4')) {\n // pass\n }\n else {\n return null;\n }\n const kurikaesu = this.getCur(); // skip \u7E70\u308A\u8FD4\u3059\n // \u30B9\u30BF\u30C3\u30AF\u306B(\u5897\u3084|\u6E1B\u3089)\u3057\u3066\u304C\u3042\u308B\uFF1F\n const incdec = this.stack.pop();\n if (incdec) {\n if (incdec.type === 'word' && (incdec.value === '\u5897' || incdec.value === '\u6E1B')) {\n if (incdec.value === '\u5897') {\n flagDown = false;\n }\n else {\n flagUp = false;\n }\n const w = String(incdec.value) + kurikaesu.type;\n if (w === '\u5897\u7E70\u8FD4') {\n kurikaesu.type = '\u5897\u7E70\u8FD4';\n }\n else if (w === '\u6E1B\u7E70\u8FD4') {\n kurikaesu.type = '\u6E1B\u7E70\u8FD4';\n }\n else {\n throw Error('[System Error] \u5897\u7E70\u308A\u8FD4\u3057 | \u6E1B\u7E70\u308A\u8FD4\u3057\u306E\u30A8\u30E9\u30FC\u3002');\n }\n }\n else {\n // \u666E\u901A\u306E\u7E70\u308A\u8FD4\u3057\u306E\u5834\u5408\n this.stack.push(incdec); // \u9055\u3063\u305F\u306E\u3067\u6539\u3081\u3066\u8FFD\u52A0\n }\n }\n let vInc = this.yNop();\n if (kurikaesu.type === '\u5897\u7E70\u8FD4' || kurikaesu.type === '\u6E1B\u7E70\u8FD4') {\n vInc = this.popStack(['\u305A\u3064']) || this.yNop();\n if (kurikaesu.type === '\u5897\u7E70\u8FD4') {\n flagDown = false;\n }\n else {\n flagUp = false;\n }\n loopDirection = kurikaesu.type === '\u5897\u7E70\u8FD4' ? 'up' : 'down';\n }\n const vTo = this.popStack(['\u307E\u3067', '\u3092']); // \u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u5834\u5408\u3082\u3042\u308A\n const vFrom = this.popStack(['\u304B\u3089']) || this.yNop();\n const vWord = this.popStack(['\u3092', '\u3067']);\n let wordStr = '';\n if (vWord !== null) { // \u5909\u6570\n if (vWord.type !== 'word') {\n throw NakoSyntaxError.fromNode('\u300E(\u5909\u6570\u540D)\u3092A\u304B\u3089B\u307E\u3067\u7E70\u308A\u8FD4\u3059\u300F\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002', vWord);\n }\n wordStr = vWord.value;\n }\n if (vFrom === null || vTo === null) {\n // \u300EA\u304B\u3089B\u306E\u7BC4\u56F2\u3092\u7E70\u308A\u8FD4\u3059\u300F\u69CB\u6587\u306E\u3068\u304D (#1704)\n if (vFrom === null && vTo && (vTo.type === 'func' && vTo.name === '\u7BC4\u56F2')) {\n // ok\n }\n else {\n throw NakoSyntaxError.fromNode(errorForArguments, kurikaesu);\n }\n }\n if (this.check('comma')) {\n this.get();\n } // skip comma\n let multiline = false;\n if (this.check('\u3053\u3053\u304B\u3089')) {\n multiline = true;\n this.get();\n }\n else if (this.check('eol')) {\n multiline = true;\n this.get();\n }\n let block = this.yNop();\n if (multiline) {\n block = this.yBlock();\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get();\n }\n else {\n throw NakoSyntaxError.fromNode('\u300E\u3053\u3053\u307E\u3067\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u300E\u7E70\u308A\u8FD4\u3059\u300F...\u300E\u3053\u3053\u307E\u3067\u300F\u3092\u5BFE\u5FDC\u3055\u305B\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n }\n else {\n const b = this.ySentence();\n if (b) {\n block = b;\n }\n }\n if (!block) {\n block = this.yNop();\n }\n return {\n type: 'for',\n blocks: [vFrom, vTo, vInc, block],\n flagDown,\n flagUp,\n loopDirection,\n word: wordStr,\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** @returns {AstBlocks | null} */\n yReturn() {\n const map = this.peekSourceMap();\n if (!this.check('\u623B\u308B')) {\n return null;\n }\n this.get(); // skip '\u623B\u308B'\n const v = this.popStack(['\u3067', '\u3092']) || this.yNop();\n if (this.stack.length > 0) {\n throw NakoSyntaxError.fromNode('\u300E\u623B\u300F\u6587\u306E\u76F4\u524D\u306B\u672A\u89E3\u6C7A\u306E\u5F15\u6570\u304C\u3042\u308A\u307E\u3059\u3002\u300E(\u5F0F)\u3092\u623B\u3059\u300F\u306E\u3088\u3046\u306B\u5F0F\u3092\u30AB\u30C3\u30B3\u3067\u62EC\u3063\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n return {\n type: 'return',\n blocks: [v],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** @returns {AstForeach | null} */\n yForEach() {\n const map = this.peekSourceMap();\n if (!this.check('\u53CD\u5FA9')) {\n return null;\n }\n this.get(); // skip '\u53CD\u5FA9'\n while (this.check('comma')) {\n this.get();\n } // skip ','\n const target = this.popStack(['\u3092']) || this.yNop();\n // target == null \u306A\u3089\u300C\u305D\u308C\u300D\u306E\u5024\u304C\u4F7F\u308F\u308C\u308B\n const name = this.popStack(['\u3067']);\n let wordStr = '';\n if (name !== null) {\n if (name.type !== 'word') {\n throw NakoSyntaxError.fromNode('\u300E(\u5909\u6570\u540D)\u3067(\u914D\u5217)\u3092\u53CD\u5FA9\u300F\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n wordStr = name.value;\n }\n let block = this.yNop();\n let multiline = false;\n if (this.check('\u3053\u3053\u304B\u3089')) {\n multiline = true;\n this.get();\n }\n else if (this.check('eol')) {\n multiline = true;\n }\n if (multiline) {\n block = this.yBlock();\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get();\n }\n else {\n throw NakoSyntaxError.fromNode('\u300E\u3053\u3053\u307E\u3067\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u300E\u53CD\u5FA9\u300F...\u300E\u3053\u3053\u307E\u3067\u300F\u3092\u5BFE\u5FDC\u3055\u305B\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n }\n else {\n const b = this.ySentence();\n if (b) {\n block = b;\n }\n }\n return {\n type: 'foreach',\n word: wordStr,\n blocks: [target, block],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** \u6761\u4EF6\u5206\u5C90\u69CB\u6587\n * @returns {AstSwitch | null}\n */\n ySwitch() {\n const map = this.peekSourceMap();\n if (!this.check('\u6761\u4EF6\u5206\u5C90')) {\n return null;\n }\n const joukenbunki = this.get(); // skip '\u6761\u4EF6\u5206\u5C90'\n if (!joukenbunki) {\n return null;\n }\n const eol = this.get(); // skip 'eol'\n if (!eol) {\n return null;\n }\n const expr = this.popStack(['\u3067']);\n if (!expr) {\n throw NakoSyntaxError.fromNode('\u300E(\u5024)\u3067\u6761\u4EF6\u5206\u5C90\u300F\u306E\u3088\u3046\u306B\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002', joukenbunki);\n }\n if (eol.type !== 'eol') {\n throw NakoSyntaxError.fromNode('\u300E\u6761\u4EF6\u5206\u5C90\u300F\u306E\u76F4\u5F8C\u306F\u6539\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002', joukenbunki);\n }\n //\n const blocks = [];\n blocks[0] = expr;\n blocks[1] = this.yNop(); // \u5F8C\u3067 default \u306EAst\u3092\u518D\u8A2D\u5B9A\u3059\u308B\u305F\u3081\n //\n while (!this.isEOF()) {\n if (this.check('eol')) {\n this.get();\n continue;\n }\n // \u3053\u3053\u307E\u3067\uFF1F\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get(); // skip \u3053\u3053\u307E\u3067\n break;\n }\n // \u9055\u3048\u3070\uFF1F\n const condToken = this.peek();\n if (condToken && condToken.type === '\u9055\u3048\u3070') {\n this.get(); // skip \u9055\u3048\u3070\n if (this.check('comma')) {\n this.get();\n } // skip ','\n const defaultBlock = this.yBlock();\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get(); // skip \u3053\u3053\u307E\u3067 (\u9055\u3048\u3070\u3068\u30DA\u30A2)\n }\n while (this.check('eol')) {\n this.get();\n } // skip eol\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get(); // skip \u3053\u3053\u307E\u3067 (\u6761\u4EF6\u5206\u5C90\uFF1A\u3053\u3053\u307E\u3067)\n }\n blocks[1] = defaultBlock;\n break;\n }\n // \u901A\u5E38\u306E\u6761\u4EF6\n const cond = this.yValue();\n if (!cond) {\n throw NakoSyntaxError.fromNode('\u300E\u6761\u4EF6\u5206\u5C90\u300F\u306F\u300E(\u6761\u4EF6)\u306A\u3089\u3070\u301C\u3053\u3053\u307E\u3067\u300F\u3068\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002', joukenbunki);\n }\n const naraba = this.get(); // skip \u306A\u3089\u3070\n if (!naraba || naraba.type !== '\u306A\u3089\u3070') {\n throw NakoSyntaxError.fromNode('\u300E\u6761\u4EF6\u5206\u5C90\u300F\u3067\u6761\u4EF6\u306F\uFF0A\uFF0A\u306A\u3089\u3070\u3068\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002', joukenbunki);\n }\n if (this.check('comma')) {\n this.get();\n } // skip ','\n // \u6761\u4EF6\u306B\u3042\u3063\u305F\u3068\u304D\u306B\u5B9F\u884C\u3059\u308B\u3053\u3068\n const condBlock = this.yBlock();\n const kokomade = this.peek();\n if (kokomade && kokomade.type === '\u3053\u3053\u307E\u3067') {\n this.get(); // skip \u3053\u3053\u307E\u3067\n }\n blocks.push(cond);\n blocks.push(condBlock);\n }\n const ast = {\n type: 'switch',\n blocks,\n case_count: blocks.length / 2 - 1,\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n return ast;\n }\n /** \u7121\u540D\u95A2\u6570\n * @returns {AstDefFunc|null}\n */\n yMumeiFunc() {\n const map = this.peekSourceMap();\n if (!this.check('def_func')) {\n return null;\n }\n const defToken = this.get();\n if (!defToken) {\n return null;\n }\n const def = defToken;\n let args = [];\n // \u300C,\u300D\u3092\u98DB\u3070\u3059\n if (this.check('comma')) {\n this.get();\n }\n // \u95A2\u6570\u306E\u5F15\u6570\u5B9A\u7FA9\u306F\u7701\u7565\u3067\u304D\u308B\n if (this.check('(')) {\n args = this.yDefFuncReadArgs() || [];\n }\n // \u300C,\u300D\u3092\u98DB\u3070\u3059\n if (this.check('comma')) {\n this.get();\n }\n // \u30D6\u30ED\u30C3\u30AF\u3092\u8AAD\u3080\n let block = this.yNop();\n let isAsyncFn = false;\n this.funcLevel++;\n this.saveStack();\n const backupAsyncFn = this.usedAsyncFn;\n this.usedAsyncFn = false;\n // \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092\u751F\u6210 (#1746)\n const backupLocalvars = this.localvars;\n this.localvars = new Map([['\u305D\u308C', { type: 'var', value: '' }]]);\n // \u95A2\u6570\u306E\u5F15\u6570\u3092\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3068\u3057\u3066\u767B\u9332\u3059\u308B\n for (const arg of args) {\n if (!arg) {\n continue;\n }\n if (!arg.value) {\n continue;\n }\n const fnName = arg.value;\n this.localvars.set(fnName, { 'type': 'var', 'value': '' });\n }\n try {\n block = this.yBlock();\n isAsyncFn = this.usedAsyncFn;\n // \u672B\u5C3E\u306E\u300C\u3053\u3053\u307E\u3067\u300D\u3092\u30C1\u30A7\u30C3\u30AF - \u3082\u3057\u306A\u3051\u308C\u3070\u30A8\u30E9\u30FC\u306B\u3059\u308B #1045\n if (!this.check('\u3053\u3053\u307E\u3067')) {\n throw NakoSyntaxError.fromNode('\u300E\u3053\u3053\u307E\u3067\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u300E\u306B\u306F\u300F\u69CB\u6587\u304B\u7121\u540D\u95A2\u6570\u306E\u672B\u5C3E\u306B\u300E\u3053\u3053\u307E\u3067\u300F\u304C\u5FC5\u8981\u3067\u3059\u3002', map);\n }\n this.get(); // skip \u3053\u3053\u307E\u3067\n }\n finally {\n this.loadStack();\n this.usedAsyncFn = backupAsyncFn;\n this.localvars = backupLocalvars;\n this.funcLevel--;\n }\n return {\n type: 'func_obj',\n name: '',\n args,\n blocks: [block],\n meta: def.meta,\n josi: '',\n isExport: false, // \u7121\u540D\u95A2\u6570\u306F\u5916\u90E8\u516C\u958B\u3057\u306A\u3044\n asyncFn: isAsyncFn, // asyncFn\u304B\u3069\u3046\u304B\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** \u4EE3\u5165\u69CB\u6587 */\n yDainyu() {\n const map = this.peekSourceMap();\n const dainyu = this.get(); // \u4EE3\u5165\n if (dainyu === null) {\n return null;\n }\n const value = this.popStack(['\u3092']) || { type: 'word', value: '\u305D\u308C', josi: '\u3092', ...map };\n const word = this.popStack(['\u3078', '\u306B']);\n if (!word || (word.type !== 'word' && word.type !== 'func' && word.type !== 'ref_array')) {\n throw NakoSyntaxError.fromNode('\u4EE3\u5165\u6587\u3067\u4EE3\u5165\u5148\u306E\u5909\u6570\u304C\u898B\u5F53\u305F\u308A\u307E\u305B\u3093\u3002\u300E(\u5909\u6570\u540D)\u306B(\u5024)\u3092\u4EE3\u5165\u300F\u306E\u3088\u3046\u306B\u4F7F\u3044\u307E\u3059\u3002', dainyu);\n }\n if (word.type === 'func') {\n throw NakoSyntaxError.fromNode('\u95A2\u6570\u300E' + String(word.name) + '\u300F\u306B\u4EE3\u5165\u3067\u304D\u307E\u305B\u3093\u3002\u300E(\u5909\u6570\u540D)\u306B(\u5024)\u3092\u4EE3\u5165\u300F\u306E\u3088\u3046\u306B\u4F7F\u3044\u307E\u3059\u3002', dainyu);\n }\n // \u914D\u5217\u3078\u306E\u4EE3\u5165\n if (word.type === 'ref_array') {\n const indexArray = word.index || [];\n const blocks = [value, ...indexArray];\n return {\n type: 'let_array',\n name: word.name.value,\n indexes: word.index,\n blocks,\n josi: '',\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E00\u822C\u7684\u306A\u5909\u6570\u3078\u306E\u4EE3\u5165\n const word2 = this.getVarName(word);\n return {\n type: 'let',\n name: word2.value,\n blocks: [value],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** \u5B9A\u3081\u308B\u69CB\u6587 */\n ySadameru() {\n const map = this.peekSourceMap();\n const sadameru = this.get(); // \u5B9A\u3081\u308B\n if (sadameru === null) {\n return null;\n }\n // \u5F15\u6570(\u5B9A\u6570\u540D)\u3092\u53D6\u5F97\n const word = this.popStack(['\u3092']) || { type: 'word', value: '\u305D\u308C', josi: '\u3092', ...map, end: this.peekSourceMap() };\n if (!word || (word.type !== 'word' && word.type !== 'func' && word.type !== 'ref_array')) {\n throw NakoSyntaxError.fromNode('\u300E\u5B9A\u3081\u308B\u300F\u6587\u3067\u5B9A\u6570\u304C\u898B\u5F53\u305F\u308A\u307E\u305B\u3093\u3002\u300E(\u5B9A\u6570\u540D)\u3092(\u5024)\u306B\u5B9A\u3081\u308B\u300F\u306E\u3088\u3046\u306B\u4F7F\u3044\u307E\u3059\u3002', sadameru);\n }\n // \u5F15\u6570(\u5024)\u3092\u53D6\u5F97\n const value = this.popStack(['\u3078', '\u306B', '\u3068']) || this.yNop();\n // \u516C\u958B\u8A2D\u5B9A\n let isExport = this.isExportDefault;\n if (this.check2(['{', 'word', '}'])) {\n this.get();\n const attrNode = this.get();\n if (attrNode === null) {\n throw NakoSyntaxError.fromNode('\u5B9A\u3081\u308B\u300E' + word.value + '\u300F\u306E\u5B9A\u7FA9\u30A8\u30E9\u30FC', word);\n }\n const attr = attrNode.value;\n if (attr === '\u516C\u958B') {\n isExport = true;\n }\n else if (attr === '\u975E\u516C\u958B') {\n isExport = false;\n }\n else if (attr === '\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8') {\n isExport = true;\n }\n else {\n this.logger.warn(`\u4E0D\u660E\u306A\u5909\u6570\u5C5E\u6027\u300E${attr}\u300F\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002`);\n }\n this.get();\n }\n // \u5909\u6570\u3092\u751F\u6210\u3059\u308B\n const nameToken = this.createVar(word, true, isExport);\n return {\n type: 'def_local_var',\n name: nameToken.value,\n vartype: '\u5B9A\u6570',\n isExport,\n blocks: [value],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n yIncDec() {\n const map = this.peekSourceMap();\n const action = this.get(); // (\u5897\u3084\u3059|\u6E1B\u3089\u3059)\n if (action === null) {\n return null;\n }\n // \u300EN\u305A\u3064\u5897\u3084\u3057\u3066\u7E70\u308A\u8FD4\u3059\u300F\u6587\u304B\uFF1F\n if (this.check('\u7E70\u8FD4')) {\n this.pushStack({ type: 'word', value: action.value, josi: action.josi, ...map, end: this.peekSourceMap() });\n return this.yFor();\n }\n // \u30B9\u30BF\u30C3\u30AF\u304B\u3089\u5F15\u6570\u3092\u30DD\u30C3\u30D7\n const word = this.popStack(['\u3092']);\n if (!word || (word.type !== 'word' && word.type !== 'ref_array' && word.type !== 'ref_prop')) {\n throw NakoSyntaxError.fromNode(`\u300E${action.type}\u300F\u6587\u3067\u5B9A\u6570\u304C\u898B\u5F53\u305F\u308A\u307E\u305B\u3093\u3002\u300E(\u5909\u6570\u540D)\u3092(\u5024)\u3060\u3051${action.type}\u300F\u306E\u3088\u3046\u306B\u4F7F\u3044\u307E\u3059\u3002`, action);\n }\n let value = this.popStack(['\u3060\u3051', '']);\n if (!value) {\n value = { type: 'number', value: 1, josi: '\u3060\u3051', ...map, end: this.peekSourceMap() };\n }\n // \u6E1B\u3089\u3059\u306A\u3089-1\u304B\u3051\u308B\n if (action.value === '\u6E1B') {\n const minusOne = { type: 'number', value: -1, line: action.line };\n value = { type: 'op', operator: '*', blocks: [value, minusOne], josi: '', ...map };\n }\n return {\n type: 'inc',\n name: word,\n blocks: [value],\n josi: action.josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n yCall() {\n if (this.isEOF()) {\n return null;\n }\n // \u30B9\u30BF\u30C3\u30AF\u306B\u7A4D\u3093\u3067\u3044\u304F\n while (!this.isEOF()) {\n if (this.check('\u3053\u3053\u304B\u3089')) {\n this.get();\n }\n // \u4EE3\u5165\n if (this.check('\u4EE3\u5165')) {\n return this.yDainyu();\n }\n if (this.check('\u5B9A\u3081\u308B')) {\n return this.ySadameru();\n }\n // \u5236\u5FA1\u69CB\u6587\n if (this.check('\u56DE')) {\n return this.yRepeatTime();\n }\n if (this.check('\u9593')) {\n return this.yWhile();\n }\n if (this.check('\u7E70\u8FD4') || this.check('\u5897\u7E70\u8FD4') || this.check('\u6E1B\u7E70\u8FD4')) {\n return this.yFor();\n }\n if (this.check('\u53CD\u5FA9')) {\n return this.yForEach();\n }\n if (this.check('\u6761\u4EF6\u5206\u5C90')) {\n return this.ySwitch();\n }\n if (this.check('\u623B\u308B')) {\n return this.yReturn();\n }\n if (this.check('\u5897') || this.check('\u6E1B')) {\n return this.yIncDec();\n }\n // C\u8A00\u8A9E\u98A8\u95A2\u6570\n if (this.check2([['func', 'word'], '('])) { // C\u8A00\u8A9E\u98A8\n const cur = this.peek();\n if (cur && cur.josi === '') {\n const t = this.yValue(); // yValue\u306B\u3066C\u8A00\u8A9E\u98A8\u547C\u3073\u51FA\u3057\u3092\u30D1\u30FC\u30B9\n if (t) {\n const josi = t.josi || '';\n if (t.type === 'func' && (t.josi === '' || RenbunJosi.indexOf(josi) >= 0)) {\n t.josi = '';\n return t; // \u95A2\u6570\u306A\u3089\u5024\u3068\u3059\u308B\n }\n this.pushStack(t);\n }\n if (this.check('comma')) {\n this.get();\n }\n continue;\n }\n }\n // \u306A\u3067\u3057\u3053\u5F0F\u95A2\u6570\n if (this.check('func')) {\n const r = this.yCallFunc();\n if (r === null) {\n continue;\n }\n // \u300C\u301C\u3059\u308B\u9593\u300D\u306E\u5F62\u306A\u3089\u30B9\u30BF\u30C3\u30AF\u306B\u7A4D\u3080\u3002\n if (this.check('\u9593')) {\n this.pushStack(r);\n continue;\n }\n // \u95A2\u6570\u547C\u3073\u51FA\u3057\u306E\u76F4\u5F8C\u306B\u3001\u56DB\u5247\u6F14\u7B97\u304C\u3042\u308B\u304B?\n if (!this.checkTypes(operatorList)) {\n return r; // \u95A2\u6570\u547C\u3073\u51FA\u3057\u306E\u5F8C\u306B\u6F14\u7B97\u5B50\u304C\u306A\u3044\u306E\u3067\u305D\u306E\u307E\u307E\u95A2\u6570\u547C\u3073\u51FA\u3057\u3092\u623B\u3059\n }\n // \u56DB\u5247\u6F14\u7B97\u304C\u3042\u3063\u305F\u5834\u5408\u3001\u8A08\u7B97\u3057\u3066\u30B9\u30BF\u30C3\u30AF\u306B\u8F09\u305B\u308B\n const s = this.yGetArgOperator(r);\n this.pushStack(s);\n continue;\n }\n // \u5024\u306E\u3068\u304D \u2192 \u30B9\u30BF\u30C3\u30AF\u306B\u8F09\u305B\u308B\n const t = this.yGetArg();\n if (t) {\n this.pushStack(t);\n continue;\n }\n break;\n } // end of while\n // \u52A9\u8A5E\u304C\u4F59\u3063\u3066\u3057\u307E\u3063\u305F\u5834\u5408\n if (this.stack.length > 0) {\n if (this.isReadingCalc) {\n return this.popStack();\n }\n this.logger.debug('--- stack dump ---\\n' + JSON.stringify(this.stack, null, 2) + '\\npeek: ' + JSON.stringify(this.peek(), null, 2));\n let msgDebug = `\u4E0D\u5B8C\u5168\u306A\u6587\u3067\u3059\u3002${this.stack.map((n) => this.nodeToStr(n, { depth: 0 }, true)).join('\u3001')}\u304C\u89E3\u6C7A\u3057\u3066\u3044\u307E\u305B\u3093\u3002`;\n let msg = `\u4E0D\u5B8C\u5168\u306A\u6587\u3067\u3059\u3002${this.stack.map((n) => this.nodeToStr(n, { depth: 0 }, false)).join('\u3001')}\u304C\u89E3\u6C7A\u3057\u3066\u3044\u307E\u305B\u3093\u3002`;\n // \u5404\u30CE\u30FC\u30C9\u306B\u3064\u3044\u3066\u3001\u66F4\u306B\u8A73\u7D30\u306A\u60C5\u5831\u304C\u3042\u308B\u306A\u3089\u8868\u793A\n for (const n of this.stack) {\n const d0 = this.nodeToStr(n, { depth: 0 }, false);\n const d1 = this.nodeToStr(n, { depth: 1 }, false);\n if (d0 !== d1) {\n msgDebug += `${this.nodeToStr(n, { depth: 0 }, true)}\u306F${this.nodeToStr(n, { depth: 1 }, true)}\u3068\u3057\u3066\u4F7F\u308F\u308C\u3066\u3044\u307E\u3059\u3002`;\n msg += `${d0}\u306F${d1}\u3068\u3057\u3066\u4F7F\u308F\u308C\u3066\u3044\u307E\u3059\u3002`;\n }\n }\n const first = this.stack[0];\n const last = this.stack[this.stack.length - 1];\n this.logger.debug(msgDebug, first);\n throw NakoSyntaxError.fromNode(msg, first, last);\n }\n return this.popStack([]);\n }\n /** @returns {Ast | null} */\n yCallFunc() {\n const map = this.peekSourceMap();\n const callToken = this.get();\n if (!callToken) {\n return null;\n }\n const t = callToken;\n const f = t.meta;\n const funcName = t.value;\n // (\u95A2\u6570)\u306B\u306F ... \u69CB\u6587 ... https://github.com/kujirahand/nadesiko3/issues/66\n let funcObj = null;\n if (t.josi === '\u306B\u306F') {\n try {\n funcObj = this.yMumeiFunc();\n }\n catch (err) {\n throw NakoSyntaxError.fromNode(`\u300E${t.value}\u306B\u306F...\u300F\u3067\u7121\u540D\u95A2\u6570\u306E\u5B9A\u7FA9\u3067\u4EE5\u4E0B\u306E\u9593\u9055\u3044\u304C\u3042\u308A\u307E\u3059\u3002\\n${err.message}`, t);\n }\n if (funcObj === null) {\n throw NakoSyntaxError.fromNode('\u300EF\u306B\u306F\u300F\u69CB\u6587\u304C\u3042\u308A\u307E\u3057\u305F\u304C\u3001\u95A2\u6570\u5B9A\u7FA9\u304C\u898B\u5F53\u305F\u308A\u307E\u305B\u3093\u3002', t);\n }\n }\n if (!f || typeof f.josi === 'undefined') {\n throw NakoSyntaxError.fromNode('\u95A2\u6570\u306E\u5B9A\u7FA9\u3067\u30A8\u30E9\u30FC\u3002', t);\n }\n // \u6700\u8FD1\u4F7F\u3063\u305F\u95A2\u6570\u3092\u8A18\u9332\n this.recentlyCalledFunc.push({ name: funcName, ...f });\n // \u547C\u3073\u51FA\u3059\u95A2\u6570\u304C\u975E\u540C\u671F\u547C\u3073\u51FA\u3057\u304C\u5FC5\u8981(asyncFn)\u306A\u3089\u30DE\u30FC\u30AF\n if (f && f.asyncFn) {\n this.usedAsyncFn = true;\n }\n // \u95A2\u6570\u306E\u5F15\u6570\u3092\u53D6\u308A\u51FA\u3059\u51E6\u7406\n const args = [];\n let nullCount = 0;\n let valueCount = 0;\n for (let i = f.josi.length - 1; i >= 0; i--) {\n for (;;) {\n // \u30B9\u30BF\u30C3\u30AF\u304B\u3089\u4EFB\u610F\u306E\u52A9\u8A5E\u3092\u6301\u3064\u5024\u3092\u4E00\u3064\u53D6\u308A\u51FA\u3059\u3001\u52A9\u8A5E\u304C\u306A\u3051\u308C\u3070\u672B\u5C3E\u304B\u3089\u5F97\u308B\n let popArg = this.popStack(f.josi[i]);\n if (popArg !== null) {\n valueCount++;\n }\n else if (i < f.josi.length - 1 || !f.isVariableJosi) {\n nullCount++;\n popArg = funcObj;\n }\n else {\n break;\n }\n // \u53C2\u7167\u6E21\u3057\u306E\u5834\u5408\u3001\u5F15\u6570\u304C\u95A2\u6570\u306E\u53C2\u7167\u6E21\u3057\u306B\u8A72\u5F53\u3059\u308B\u5834\u5408\u3001type\u3092\u300Efunc_pointer\u300F\u306B\u5909\u66F4\n if (popArg !== null && f.funcPointers !== undefined && f.funcPointers[i] !== null) {\n if (popArg.type === 'func') { // \u5F15\u6570\u304C\u95A2\u6570\u306E\u53C2\u7167\u6E21\u3057\u306B\u8A72\u5F53\u3059\u308B\u5834\u5408\n popArg.type = 'func_pointer';\n }\n else {\n const varname = (f.varnames) ? f.varnames[i] : `${i + 1}\u756A\u76EE\u306E\u5F15\u6570`;\n throw NakoSyntaxError.fromNode(`\u95A2\u6570\u300E${t.value}\u300F\u306E\u5F15\u6570\u300E${varname}\u300F\u306B\u306F\u95A2\u6570\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u304C\u5FC5\u8981\u3067\u3059\u3002`, t);\n }\n }\n // \u5F15\u6570\u304Cnull\u3067\u3042\u308C\u3070\u3001\u81EA\u52D5\u7684\u306B\u300E\u5909\u6570\u300C\u305D\u308C\u300D\u300F\u3067\u88DC\u5B8C\u3059\u308B\n if (popArg === null) {\n popArg = { type: 'word', value: '\u305D\u308C', josi: '', ...map, end: map };\n }\n args.unshift(popArg); // \u5148\u982D\u306B\u8FFD\u52A0\n if (i < f.josi.length - 1 || !f.isVariableJosi) {\n break;\n }\n }\n }\n // \u5F15\u6570\u304C\u4E0D\u8DB3\u3057\u3066\u3044\u308B\u3068\u304D(\u3064\u307E\u308A\u3001\u5F15\u6570\u306Bnull\u304C\u3042\u308B\u3068\u304D)\u3001\u81EA\u52D5\u7684\u306B\u300E\u5909\u6570\u300C\u305D\u308C\u300D\u300F\u3067\u88DC\u5B8C\u3055\u308C\u308B\u3002\n // \u305F\u3060\u3057\u3001null\u304C1\u3064\u3060\u3051\u306A\u3089\u3001\u5909\u6570\u300C\u305D\u308C\u300D\u3067\u88DC\u5B8C\u3055\u308C\u308B\u304C\u30012\u3064\u4EE5\u4E0A\u3042\u308B\u3068\u304D\u306F\u3001\u30A8\u30E9\u30FC\u306B\u3059\u308B\n if (nullCount >= 2 && (valueCount > 0 || t.josi === '' || RenbunJosi.indexOf(t.josi) >= 0)) {\n throw NakoSyntaxError.fromNode(`\u95A2\u6570\u300E${t.value}\u300F\u306E\u5F15\u6570\u304C\u4E0D\u8DB3\u3057\u3066\u3044\u307E\u3059\u3002`, t);\n }\n this.usedFuncs.add(t.value);\n // \u95A2\u6570\u547C\u3073\u51FA\u3057\u306EAst\u3092\u69CB\u7BC9\n const funcNode = {\n type: 'func',\n name: t.value,\n blocks: args,\n meta: f,\n josi: t.josi,\n asyncFn: !!f.asyncFn,\n ...map,\n end: this.peekSourceMap()\n };\n // \u300C\u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u8A2D\u5B9A\u300D\u306A\u3089\u3070\u3001\u305D\u3053\u3067\u30B9\u30B3\u30FC\u30D7\u3092\u5909\u66F4\u3059\u308B\u3053\u3068\u3092\u610F\u5473\u3059\u308B (#1112)\n if (funcNode.name === '\u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u8A2D\u5B9A') {\n if (args.length > 0 && args[0]) {\n let fname = String(args[0].value);\n if (fname === '\u30E1\u30A4\u30F3') {\n fname = String(args[0].file);\n }\n this.namespaceStack.push(this.modName);\n this.isExportStack.push(this.isExportDefault);\n this.modName = NakoLexer.filenameToModName(fname);\n this.modList.push(this.modName);\n }\n }\n else if (funcNode.name === '\u540D\u524D\u7A7A\u9593\u30DD\u30C3\u30D7') { // (#1409)\n const space = this.namespaceStack.pop();\n if (space) {\n this.modName = space;\n }\n const isexport = this.isExportStack.pop();\n if (isexport !== null && isexport !== undefined) {\n this.isExportDefault = isexport;\n }\n }\n // \u8A00\u3044\u5207\u308A\u306A\u3089\u305D\u3053\u3067\u4E00\u5EA6\u5207\u308B\n if (t.josi === '') {\n return funcNode;\n }\n // \u300C**\u3057\u3066\u3001**\u300D\u306E\u5834\u5408\u3082\u4E00\u5EA6\u5207\u308B\n if (RenbunJosi.indexOf(t.josi) >= 0) {\n funcNode.josi = (this.isReadingCalc && t.josi === '\u306B\u306F') ? '' : '\u3057\u3066';\n return funcNode;\n }\n // \u7D9A\u304D\n funcNode.meta = f;\n this.pushStack(funcNode);\n return null;\n }\n /** @returns {Ast | null} */\n yLet() {\n const map = this.peekSourceMap();\n // \u901A\u5E38\u306E\u5909\u6570\n if (this.check2(['word', 'eq'])) {\n const word = this.peek();\n let expectedError = false;\n try {\n if (this.accept(['word', 'eq', this.yCalc]) || this.accept(['word', 'eq', this.ySentence])) {\n if (this.y[2].type === 'eol') {\n throw new Error('\u5024\u304C\u7A7A\u3067\u3059\u3002');\n }\n if (this.check('comma')) {\n this.get();\n } // skip comma (ex) name1=val1, name2=val2\n const nameToken = this.getVarName(this.y[0]);\n const valueToken = this.y[2];\n return {\n type: 'let',\n name: nameToken.value,\n blocks: [valueToken],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n else {\n expectedError = true;\n this.logger.debug(`${this.nodeToStr(word, { depth: 1 }, true)}\u3078\u306E\u4EE3\u5165\u6587\u3067\u8A08\u7B97\u5F0F\u306B\u66F8\u304D\u9593\u9055\u3044\u304C\u3042\u308A\u307E\u3059\u3002`, word);\n throw NakoSyntaxError.fromNode(`${this.nodeToStr(word, { depth: 1 }, false)}\u3078\u306E\u4EE3\u5165\u6587\u3067\u8A08\u7B97\u5F0F\u306B\u66F8\u304D\u9593\u9055\u3044\u304C\u3042\u308A\u307E\u3059\u3002`, map);\n }\n }\n catch (err) {\n if (expectedError) {\n throw err;\n }\n this.logger.debug(`${this.nodeToStr(word, { depth: 1 }, true)}\u3078\u306E\u4EE3\u5165\u6587\u3067\u8A08\u7B97\u5F0F\u306B\u4EE5\u4E0B\u306E\u66F8\u304D\u9593\u9055\u3044\u304C\u3042\u308A\u307E\u3059\u3002\\n${err.message}`, word);\n throw NakoSyntaxError.fromNode(`${this.nodeToStr(word, { depth: 1 }, false)}\u3078\u306E\u4EE3\u5165\u6587\u3067\u8A08\u7B97\u5F0F\u306B\u4EE5\u4E0B\u306E\u66F8\u304D\u9593\u9055\u3044\u304C\u3042\u308A\u307E\u3059\u3002\\n${err.message}`, map);\n }\n }\n // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u69CB\u6587\uFF1A\u4EE3\u5165\u6587\uFF1A\uFF1A\u3053\u3053\u304B\u3089 (#1793)\n if (this.check2(['word', '$', '*', '$', '*', '$', '*', '$', '*', 'eq']) || this.check2(['word', '$', '*', '$', '*', '$', '*', 'eq']) || this.check2(['word', '$', '*', '$', '*', 'eq']) || this.check2(['word', '$', '*', 'eq'])) {\n const propList = [];\n const word = this.getVarName(this.get());\n for (;;) {\n const flag = this.peek();\n if (flag === null || flag.type !== '$') {\n break;\n }\n this.get(); // skip $\n propList.push(this.get()); // property\n }\n this.get(); // skip eq\n const valueToken = this.yCalc(); // calc\n if (valueToken === null) {\n throw NakoSyntaxError.fromNode(`${this.nodeToStr(word, { depth: 1 }, false)}\u3078\u306E\u4EE3\u5165\u6587\u306E\u8A08\u7B97\u5F0F\u306B\u66F8\u304D\u9593\u9055\u3044\u304C\u3042\u308A\u307E\u3059\u3002`, map);\n }\n return {\n type: 'let_prop',\n name: word.value,\n index: propList,\n blocks: [valueToken],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u69CB\u6587\uFF1A\u4EE3\u5165\u6587\uFF1A\uFF1A\u3053\u3053\u307E\u3067\n // let_array ?\n if (this.check2(['word', '@'])) {\n const la = this.yLetArrayAt(map);\n if (this.check('comma')) {\n this.get();\n } // skip comma (ex) name1=val1, name2=val2\n if (la) {\n la.checkInit = this.flagCheckArrayInit;\n return la;\n }\n }\n if (this.check2(['word', '['])) {\n const lb = this.yLetArrayBracket(map);\n if (this.check('comma')) {\n this.get();\n } // skip comma (ex) name1=val1, name2=val2\n if (lb) {\n lb.checkInit = this.flagCheckArrayInit;\n return lb;\n }\n }\n // \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u5B9A\u7FA9\n if (this.accept(['word', '\u3068\u306F'])) {\n const wordToken = this.y[0];\n if (!this.checkTypes(['\u5909\u6570', '\u5B9A\u6570'])) {\n throw NakoSyntaxError.fromNode('\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u300E' + String(wordToken.value) + '\u300F\u306E\u5B9A\u7FA9\u30A8\u30E9\u30FC', wordToken);\n }\n const vtype = this.getCur(); // \u5909\u6570 or \u5B9A\u6570\n let isExport = this.isExportDefault;\n if (this.check2(['{', 'word', '}'])) {\n this.get();\n const attrNode = this.get();\n if (attrNode === null) {\n throw NakoSyntaxError.fromNode('\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u300E' + String(wordToken.value) + '\u300F\u306E\u5B9A\u7FA9\u30A8\u30E9\u30FC', wordToken);\n }\n const attr = attrNode.value;\n if (attr === '\u516C\u958B') {\n isExport = true;\n }\n else if (attr === '\u975E\u516C\u958B') {\n isExport = false;\n }\n else if (attr === '\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8') {\n isExport = true;\n }\n else {\n this.logger.warn(`\u4E0D\u660E\u306A\u5909\u6570\u5C5E\u6027\u300E${attr}\u300F\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002`);\n }\n this.get();\n }\n const word = this.createVar(wordToken, vtype.type === '\u5B9A\u6570', isExport);\n // \u521D\u671F\u5024\u304C\u3042\u308B\uFF1F\n let value = this.yNop();\n if (this.check('eq')) {\n this.get(); // skip '='\n value = this.yCalc() || value;\n }\n if (this.check('comma')) {\n this.get();\n } // skip comma (ex) name1=val1, name2=val2\n return {\n type: 'def_local_var',\n name: word.value,\n vartype: vtype.type,\n isExport,\n blocks: [value],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u5B9A\u7FA9\uFF08\u305D\u306E\uFF12\uFF09\n if (this.accept(['\u5909\u6570', 'word'])) {\n const wordVar = this.y[1];\n this.index -= 2; // \u300C\u5909\u6570 word\u300D\u306E\u524D\u306B\u5DFB\u304D\u623B\u3059\n // \u5909\u6570\u306E\u5BA3\u8A00\u304A\u3088\u3073\u521D\u671F\u53161\n if (this.accept(['\u5909\u6570', 'word', 'eq', this.yCalc])) {\n const word = this.createVar(this.y[1], false, this.isExportDefault);\n const astValue = this.y[3] || this.yNop();\n return {\n type: 'def_local_var',\n name: word.value,\n vartype: '\u5909\u6570',\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u5909\u6570\u306E\u5BA3\u8A00\u304A\u3088\u3073\u521D\u671F\u53162\n if (this.accept(['\u5909\u6570', 'word', '{', 'word', '}', 'eq', this.yCalc])) {\n let isExport = this.isExportDefault;\n const attr = this.y[3].value;\n if (attr === '\u516C\u958B') {\n isExport = true;\n }\n else if (attr === '\u975E\u516C\u958B') {\n isExport = false;\n }\n else if (attr === '\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8') {\n isExport = true;\n }\n else {\n this.logger.warn(`\u4E0D\u660E\u306A\u5909\u6570\u5C5E\u6027\u300E${attr}\u300F\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002`);\n }\n const word = this.createVar(this.y[1], false, isExport);\n const astValue = this.y[6] || this.yNop();\n return {\n type: 'def_local_var',\n name: word.value,\n vartype: '\u5909\u6570',\n isExport,\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u5909\u6570\u5BA3\u8A00\u306E\u307F\u306E\u5834\u5408\n {\n this.index += 2; // \u5909\u6570 word \u3092\u8AAD\u3093\u3060\u3068\u3059\u308B\n const word = this.createVar(wordVar, false, this.isExportDefault);\n return {\n type: 'def_local_var',\n name: word.value,\n vartype: '\u5909\u6570',\n blocks: [this.yNop()],\n ...map,\n end: this.peekSourceMap()\n };\n }\n }\n if (this.accept(['\u5B9A\u6570', 'word', 'eq'])) {\n const constName = this.y[1];\n const word = this.createVar(constName, true, this.isExportDefault);\n const astValue = this.yCalc() || this.yNop();\n return {\n type: 'def_local_var',\n name: word.value,\n vartype: '\u5B9A\u6570',\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n if (this.accept(['\u5B9A\u6570', 'word', '{', 'word', '}', 'eq'])) {\n let isExport = this.isExportDefault;\n const attr = this.y[3].value;\n if (attr === '\u516C\u958B') {\n isExport = true;\n }\n else if (attr === '\u975E\u516C\u958B') {\n isExport = false;\n }\n else if (attr === '\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8') {\n isExport = true;\n }\n else {\n this.logger.warn(`\u4E0D\u660E\u306A\u5B9A\u6570\u5C5E\u6027\u300E${attr}\u300F\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u3059\u3002`);\n }\n const word = this.createVar(this.y[1], true, isExport);\n const astValue = this.yCalc() || this.yNop();\n return {\n type: 'def_local_var',\n name: word.value,\n vartype: '\u5B9A\u6570',\n isExport,\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u8907\u6570\u5B9A\u6570\u3078\u306E\u4EE3\u5165 #563\n if (this.accept(['\u5B9A\u6570', this.yJSONArray, 'eq'])) {\n const names = this.y[1];\n // check array\n if (names && names.blocks instanceof Array) {\n for (const i in names.blocks) {\n if (names.blocks[i].type !== 'word') {\n throw NakoSyntaxError.fromNode(`\u8907\u6570\u5B9A\u6570\u306E\u4EE3\u5165\u6587${Number(i) + 1}\u756A\u76EE\u3067\u30A8\u30E9\u30FC\u3002\u300E\u5B9A\u6570[A,B,C]=[1,2,3]\u300F\u306E\u66F8\u5F0F\u3067\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002`, this.y[0]);\n }\n }\n }\n else {\n throw NakoSyntaxError.fromNode('\u8907\u6570\u5B9A\u6570\u306E\u4EE3\u5165\u6587\u3067\u30A8\u30E9\u30FC\u3002\u300E\u5B9A\u6570[A,B,C]=[1,2,3]\u300F\u306E\u66F8\u5F0F\u3067\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002', this.y[0]);\n }\n const namesAst = this._tokensToNodes(this.createVarList(names.blocks, true, this.isExportDefault));\n const astValue = this.yCalc() || this.yNop();\n return {\n type: 'def_local_varlist',\n names: namesAst,\n vartype: '\u5B9A\u6570',\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u8907\u6570\u5909\u6570\u3078\u306E\u4EE3\u5165 #563\n if (this.accept(['\u5909\u6570', this.yJSONArray, 'eq'])) {\n const names = this.y[1];\n // check array\n if (names && names.blocks instanceof Array) {\n names.blocks.forEach((block, index) => {\n if (block.type !== 'word') {\n throw NakoSyntaxError.fromNode(`\u8907\u6570\u5909\u6570\u306E\u4EE3\u5165\u6587${String(index + 1)}\u756A\u76EE\u3067\u30A8\u30E9\u30FC\u300E\u5909\u6570[A,B,C]=[1,2,3]\u300F\u306E\u66F8\u5F0F\u3067\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002`, this.y[0]);\n }\n });\n }\n else {\n throw NakoSyntaxError.fromNode('\u8907\u6570\u5909\u6570\u306E\u4EE3\u5165\u6587\u3067\u30A8\u30E9\u30FC\u3002\u300E\u5909\u6570[A,B,C]=[1,2,3]\u300F\u306E\u66F8\u5F0F\u3067\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002', this.y[0]);\n }\n const namesAst = this._tokensToNodes(this.createVarList(names.blocks, false, this.isExportDefault));\n const astValue = this.yCalc() || this.yNop();\n return {\n type: 'def_local_varlist',\n names: namesAst,\n vartype: '\u5909\u6570',\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u8907\u6570\u5909\u6570\u3078\u306E\u4EE3\u5165 #563\n if (this.check2(['word', 'comma', 'word'])) {\n // 2 word\n if (this.accept(['word', 'comma', 'word', 'eq'])) {\n let names = [this.y[0], this.y[2]];\n names = this.createVarList(names, false, this.isExportDefault);\n const astValue = this.yCalc() || this.yNop();\n return {\n type: 'def_local_varlist',\n names,\n vartype: '\u5909\u6570',\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // 3 word\n if (this.accept(['word', 'comma', 'word', 'comma', 'word', 'eq'])) {\n let names = [this.y[0], this.y[2], this.y[4]];\n names = this.createVarList(names, false, this.isExportDefault);\n const astValue = this.yCalc() || this.yNop();\n return {\n type: 'def_local_varlist',\n names,\n vartype: '\u5909\u6570',\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // 4 word\n if (this.accept(['word', 'comma', 'word', 'comma', 'word', 'comma', 'word', 'eq'])) {\n let names = [this.y[0], this.y[2], this.y[4], this.y[6]];\n names = this.createVarList(names, false, this.isExportDefault);\n const astValue = this.yCalc() || this.yNop();\n return {\n type: 'def_local_varlist',\n names,\n vartype: '\u5909\u6570',\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // 5 word\n if (this.accept(['word', 'comma', 'word', 'comma', 'word', 'comma', 'word', 'comma', 'word', 'eq'])) {\n let names = [this.y[0], this.y[2], this.y[4], this.y[6], this.y[8]];\n names = this.createVarList(names, false, this.isExportDefault);\n const astValue = this.yCalc() || this.yNop();\n return {\n type: 'def_local_varlist',\n names,\n vartype: '\u5909\u6570',\n blocks: [astValue],\n ...map,\n end: this.peekSourceMap()\n };\n }\n }\n return null;\n }\n /**\n * \u914D\u5217\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u304C1\u304B\u3089\u59CB\u307E\u308B\u5834\u5408\u3092\u8003\u616E\u3059\u308B\u304B\n * @param {Ast} node\n * @returns\n */\n checkArrayIndex(node) {\n // \u914D\u5217\u304C0\u304B\u3089\u59CB\u307E\u308B\u306E\u3067\u3042\u308C\u3070\u305D\u306E\u307E\u307E\u8FD4\u3059\n if (this.arrayIndexFrom === 0) {\n return node;\n }\n // \u914D\u5217\u304C1\u304B\u3089\u59CB\u307E\u308B\u306E\u3067\u3042\u308C\u3070\u6F14\u7B97\u3092\u52A0\u3048\u3066\u8FD4\u3059\n const minusNum = {\n ...node,\n 'type': 'number',\n 'value': this.arrayIndexFrom\n };\n return {\n ...node,\n type: 'op',\n operator: '-',\n blocks: [node, minusNum]\n };\n }\n /**\n * \u914D\u5217\u306E\u30A4\u30F3\u30C7\u30C3\u30AF\u30B9\u3092\u9006\u9806\u306B\u3059\u308B\u306E\u3092\u8003\u616E\u3059\u308B\u304B\n * @param {Ast[]| null} ary\n */\n checkArrayReverse(ary) {\n if (!ary) {\n return [];\n }\n if (!this.flagReverseArrayIndex) {\n return ary;\n }\n // \u4E8C\u6B21\u5143\u4EE5\u4E0A\u306E\u914D\u5217\u5909\u6570\u306E\u30A2\u30AF\u30BB\u30B9\u3092[y][x]\u3067\u306F\u306A\u304F[x][y]\u3068\u9806\u5E8F\u3092\u5909\u66F4\u3059\u308B\n if (ary.length <= 1) {\n return ary;\n }\n return ary.reverse();\n }\n /** @returns {AstLetArray | null} */\n yLetArrayAt(map) {\n // \u4E00\u6B21\u5143\u914D\u5217\n if (this.accept(['word', '@', this.yValue, 'eq', this.yCalc])) {\n const astValue = this.y[4];\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, this.checkArrayIndex(this.y[2])],\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E8C\u6B21\u5143\u914D\u5217\n if (this.accept(['word', '@', this.yValue, '@', this.yValue, 'eq', this.yCalc])) {\n const astValue = this.y[6];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[4])]);\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E09\u6B21\u5143\u914D\u5217\n if (this.accept(['word', '@', this.yValue, '@', this.yValue, '@', this.yValue, 'eq', this.yCalc])) {\n const astValue = this.y[8];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[4]), this.checkArrayIndex(this.y[6])]);\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E8C\u6B21\u5143\u914D\u5217(\u30AB\u30F3\u30DE\u6307\u5B9A)\n if (this.accept(['word', '@', this.yValue, 'comma', this.yValue, 'eq', this.yCalc])) {\n const astValue = this.y[6];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[4])]);\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E09\u6B21\u5143\u914D\u5217(\u30AB\u30F3\u30DE\u6307\u5B9A)\n if (this.accept(['word', '@', this.yValue, 'comma', this.yValue, 'comma', this.yValue, 'eq', this.yCalc])) {\n const astValue = this.y[8];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[4]), this.checkArrayIndex(this.y[6])]);\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n return null;\n }\n /** @returns {Ast | null} */\n yLetArrayBracket(map) {\n // \u4E00\u6B21\u5143\u914D\u5217\n if (this.accept(['word', '[', this.yCalc, ']', 'eq', this.yCalc])) {\n const astValue = this.y[5];\n const astIndexes = [this.checkArrayIndex(this.y[2])];\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E8C\u6B21\u5143\u914D\u5217 --- word[a][b] = c\n if (this.accept(['word', '[', this.yCalc, ']', '[', this.yCalc, ']', 'eq', this.yCalc])) {\n const astValue = this.y[8];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[5])]);\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n tag: '2',\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E8C\u6B21\u5143\u914D\u5217 --- word[a, b] = c\n if (this.accept(['word', '[', this.yCalc, 'comma', this.yCalc, ']', 'eq', this.yCalc])) {\n const astValue = this.y[7];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[4])]);\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n checkInit: this.flagCheckArrayInit,\n tag: '2',\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E09\u6B21\u5143\u914D\u5217 --- word[a][b][c] = d\n if (this.accept(['word', '[', this.yCalc, ']', '[', this.yCalc, ']', '[', this.yCalc, ']', 'eq', this.yCalc])) {\n const astValue = this.y[11];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[5]), this.checkArrayIndex(this.y[8])]);\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E09\u6B21\u5143\u914D\u5217 --- word[a, b, c] = d\n if (this.accept(['word', '[', this.yCalc, 'comma', this.yCalc, 'comma', this.yCalc, ']', 'eq', this.yCalc])) {\n const astValue = this.y[9];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[4]), this.checkArrayIndex(this.y[6])]);\n return {\n type: 'let_array',\n name: this.getVarName(this.y[0]).value,\n index: this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[4]), this.checkArrayIndex(this.y[6])]),\n blocks: [astValue, ...astIndexes],\n checkInit: this.flagCheckArrayInit,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // --- --- --- --- --- --- --- --- --- --- --- --- ---\n // \u914D\u5217 + \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u69CB\u6587 (#2139)\n // --- --- --- --- --- --- --- --- --- --- --- --- ---\n // \u4E00\u6B21\u5143\u914D\u5217 + \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u69CB\u6587 --- word[a]$b = c\n if (this.accept(['word', '[', this.yCalc, ']', '$', 'word', 'eq', this.yCalc])) {\n const astValue = this.y[7];\n const astIndexes = [this.checkArrayIndex(this.y[2])];\n const astProp = this.y[5];\n astProp.type = 'string';\n return {\n type: 'let_prop',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n index: [astProp],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E00\u6B21\u5143\u914D\u5217 + \u4E8C\u6B21\u5143\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u69CB\u6587 --- word[a]$b$c = d\n if (this.accept(['word', '[', this.yCalc, ']', '$', 'word', '$', 'word', 'eq', this.yCalc])) {\n const astVarName = this.y[0];\n const astIndex = this.y[2];\n const astProp1 = this.y[5];\n const astProp2 = this.y[7];\n const astValue = this.y[9];\n astProp1.type = 'string';\n astProp2.type = 'string';\n return {\n type: 'let_prop',\n name: this.getVarName(astVarName).value,\n blocks: [astValue, astIndex],\n index: [astProp1, astProp2],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E8C\u6B21\u5143\u914D\u5217 + \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u69CB\u6587 --- word[a][b]$c = d\n if (this.accept(['word', '[', this.yCalc, ']', '[', this.yCalc, ']', '$', 'word', 'eq', this.yCalc])) {\n const astValue = this.y[10];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[5])]);\n const astProp = this.y[8];\n astProp.type = 'string';\n return {\n type: 'let_prop',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n index: [astProp],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E8C\u6B21\u5143\u914D\u5217 + \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u69CB\u6587 --- word[a, b]$c = d\n if (this.accept(['word', '[', this.yCalc, ',', this.yCalc, ']', '$', 'word', 'eq', this.yCalc])) {\n const astValue = this.y[9];\n const astIndexes = this.checkArrayReverse([this.checkArrayIndex(this.y[2]), this.checkArrayIndex(this.y[4])]);\n const astProp = this.y[7];\n astProp.type = 'string';\n return {\n type: 'let_prop',\n name: this.getVarName(this.y[0]).value,\n blocks: [astValue, ...astIndexes],\n index: [astProp],\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u4E8C\u6B21\u5143\u914D\u5217 + \u4E8C\u6B21\u5143\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u69CB\u6587 --- word[a][b]$c$d = e\n if (this.accept([\n 'word', '[', this.yCalc, ']', '[', this.yCalc, ']', // 0...6\n '$', 'word', '$', 'word', 'eq', this.yCalc // 7...12\n ])) {\n const astVarName = this.y[0];\n const astIndex1 = this.y[2];\n const astIndex2 = this.y[5];\n const astProp1 = this.y[8];\n const astProp2 = this.y[10];\n const astValue = this.y[12];\n astProp1.type = 'string';\n astProp2.type = 'string';\n return {\n type: 'let_prop',\n name: this.getVarName(astVarName).value,\n blocks: [astValue, astIndex1, astIndex2],\n index: [astProp1, astProp2],\n ...map,\n end: this.peekSourceMap()\n };\n }\n return null;\n }\n /** @returns {Ast | null} */\n yCalc() {\n const map = this.peekSourceMap();\n if (this.check('eol')) {\n return null;\n }\n // \u5024\u3092\u4E00\u3064\u8AAD\u3080\n const t = this.yGetArg();\n if (!t) {\n return null;\n }\n // \u52A9\u8A5E\u304C\u3042\u308B\uFF1F \u3064\u307E\u308A\u3001\u95A2\u6570\u547C\u3073\u51FA\u3057\u304C\u3042\u308B\uFF1F\n if (t.josi === '' && !this.canNextFuncTakeNoJosiArg()) {\n return t;\n } // \u5024\u3060\u3051\u306E\u5834\u5408\n // \u95A2\u6570\u306E\u547C\u3073\u51FA\u3057\u304C\u3042\u308B\u306A\u3089\u3001\u30B9\u30BF\u30C3\u30AF\u306B\u8F09\u305B\u3066\u95A2\u6570\u8AAD\u307F\u51FA\u3057\u3092\u547C\u3076\n const tmpReadingCalc = this.isReadingCalc;\n this.isReadingCalc = true;\n this.pushStack(t);\n const t1 = this.yCall();\n this.isReadingCalc = tmpReadingCalc;\n if (!t1) {\n // \u95A2\u6570\u304C\u306A\u3051\u308C\u3070\u3001\u5148\u307B\u3069\u7A4D\u3093\u3060\u5024\u3092\u30B9\u30BF\u30C3\u30AF\u304B\u3089\u53D6\u308A\u51FA\u3057\u3066\u8FD4\u3059\n return this.popStack();\n }\n // \u8A08\u7B97\u5F0F\u3092fCalc\u3068\u3059\u308B\n let fCalc = t1;\n // \u305D\u308C\u304C\u9023\u6587\u304B\u52A9\u8A5E\u3092\u8AAD\u3093\u3067\u78BA\u8A8D\n if (RenbunJosi.indexOf(t1.josi || '') >= 0) {\n // \u9023\u6587\u306A\u3089\u53F3\u5074\u3092\u8AAD\u3093\u3067\u5DE6\u5074\u3068\u304F\u3063\u3064\u3051\u308B\n const t2 = this.yCalc();\n if (t2) {\n fCalc = {\n type: 'renbun',\n operator: 'renbun',\n blocks: [t1, t2],\n josi: t2.josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n }\n // \u6F14\u7B97\u5B50\u304C\u3042\u308C\u3070\u7D9A\u3051\u308B\n const op = this.peek();\n if (!op) {\n return fCalc;\n }\n if (opPriority[op.type]) {\n return this.yGetArgOperator(fCalc);\n }\n return fCalc;\n }\n /** \u6B21\u306E\u95A2\u6570\u304C\u7A7A\u52A9\u8A5E\u306E\u5024\u3092\u5F15\u6570\u3068\u3057\u3066\u53D7\u3051\u53D6\u308C\u308B\u304B */\n canNextFuncTakeNoJosiArg() {\n if (!this.check('func')) {\n return false;\n }\n const func = this.peek();\n const josiList = func?.meta?.josi;\n if (!josiList) {\n return false;\n }\n return josiList.some((josi) => josi.indexOf('') >= 0);\n }\n /** @returns {Ast | null} */\n yValueKakko() {\n if (!this.check('(')) {\n return null;\n }\n const t = this.get(); // skip '('\n if (!t) {\n throw new Error('[System Error] check \u3057\u305F\u306E\u306B get \u3067\u304D\u306A\u3044');\n }\n this.saveStack();\n const v = this.yCalc() || this.ySentence();\n if (v === null) {\n const v2 = this.get();\n this.logger.debug('(...)\u306E\u89E3\u6790\u30A8\u30E9\u30FC\u3002' + this.nodeToStr(v2, { depth: 1 }, true) + '\u306E\u8FD1\u304F', t);\n throw NakoSyntaxError.fromNode('(...)\u306E\u89E3\u6790\u30A8\u30E9\u30FC\u3002' + this.nodeToStr(v2, { depth: 1 }, false) + '\u306E\u8FD1\u304F', t);\n }\n if (!this.check(')')) {\n this.logger.debug('(...)\u306E\u89E3\u6790\u30A8\u30E9\u30FC\u3002' + this.nodeToStr(v, { depth: 1 }, true) + '\u306E\u8FD1\u304F', t);\n throw NakoSyntaxError.fromNode('(...)\u306E\u89E3\u6790\u30A8\u30E9\u30FC\u3002' + this.nodeToStr(v, { depth: 1 }, false) + '\u306E\u8FD1\u304F', t);\n }\n const closeParent = this.get(); // skip ')'\n this.loadStack();\n if (closeParent) {\n v.josi = closeParent.josi;\n }\n // (...)\u306E\u5F8C\u306E\u914D\u5217\u30A2\u30AF\u30BB\u30B9\u306B\u5BFE\u5FDC #1985\n return this.yRefArrayValue(v);\n }\n yConst(tok, map) {\n // ['number', 'bigint', 'string']\n const astConst = {\n type: tok.type,\n value: tok.value,\n josi: tok.josi,\n ...map\n };\n return astConst;\n }\n /** @returns {Ast | null} */\n yValue() {\n const map = this.peekSourceMap();\n // \u30AB\u30F3\u30DE\u306A\u3089\u98DB\u3070\u3059 #877\n if (this.check('comma')) {\n this.get();\n }\n // \u30D7\u30EA\u30DF\u30C6\u30A3\u30D6\u306A\u5024\n if (this.checkTypes(['number', 'bigint', 'string'])) {\n return this.yConst(this.getCur(), map);\n }\n // \u4E38\u62EC\u5F27\n if (this.check('(')) {\n return this.yValueKakko();\n }\n // \u30DE\u30A4\u30CA\u30B9\u8A18\u53F7\n if (this.check2(['-', 'number']) || this.check2(['-', 'word']) || this.check2(['-', 'func'])) {\n const m = this.get(); // skip '-'\n const v = this.yValue();\n const josi = (v && v.josi) ? v.josi : '';\n const line = (m && m.line) ? m.line : 0;\n const astLeft = { type: 'number', value: -1, line };\n const astRight = v || this.yNop();\n return {\n type: 'op',\n operator: '*',\n blocks: [astLeft, astRight],\n josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // NOT\n if (this.check('not')) {\n this.get(); // skip '!'\n const v = this.yValue();\n const josi = (v && v.josi) ? v.josi : '';\n return {\n type: 'not',\n operator: 'not',\n blocks: [v],\n josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // JSON object\n const a = this.yJSONArray();\n if (a) {\n return a;\n }\n const o = this.yJSONObject();\n if (o) {\n return o;\n }\n // \u4E00\u8A9E\u95A2\u6570\n if (this.check('func')) {\n const oneWordFuncToken = this.peek();\n if (!oneWordFuncToken) {\n throw new Error('[System Error] \u6B63\u3057\u304F\u5024\u304C\u53D6\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002');\n }\n const splitType = operatorList.concat(['eol', ')', ']', '\u306A\u3089\u3070', '\u56DE', '\u9593', '\u53CD\u5FA9', '\u6761\u4EF6\u5206\u5C90']);\n if (this.check2(['func', splitType]) || (oneWordFuncToken?.josi && oneWordFuncToken.josi !== '')) {\n this.get(); // skip oneWordFuncToken\n const tt = oneWordFuncToken;\n const f = this.getVarNameRef(tt);\n this.usedFuncs.add(f.value);\n // \u5F15\u6570\u306E\u500B\u6570\u3092\u30C1\u30A7\u30C3\u30AF\n const meta = tt.meta;\n const args = [];\n if (!meta) {\n throw NakoSyntaxError.fromNode(`\u4E00\u8A9E\u95A2\u6570\u300E${f.value}\u300F\u306F\u5B58\u5728\u3057\u307E\u305B\u3093\u3002`, tt);\n }\n if (meta.josi && meta.josi.length === 1) {\n args.push({ type: 'word', value: '\u305D\u308C' });\n }\n else if (meta.josi && meta.josi.length >= 2) {\n throw NakoSyntaxError.fromNode(`\u95A2\u6570\u300E${f.value}\u300F\u3067\u5F15\u6570\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002${meta.josi.length}\u500B\u306E\u5F15\u6570\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`, tt);\n }\n return {\n type: 'func',\n name: f.value,\n blocks: args,\n josi: f.josi,\n meta,\n asyncFn: !!meta.asyncFn,\n ...map,\n end: this.peekSourceMap()\n };\n }\n }\n // C\u98A8\u95A2\u6570\u547C\u3073\u51FA\u3057 FUNC(...)\n if (this.check2([['func', 'word'], '(']) && this.peekDef().josi === '') {\n const funcNameToken = this.peek();\n if (this.accept([['func', 'word'], '(', this.yGetArgParen, ')'])) {\n const funcToken = this.getVarNameRef(this.y[0]);\n const meta = funcToken.meta; // undefined\u304B\u3082\u3057\u308C\u306A\u3044\n const args = this.y[2];\n const funcName = funcToken.value;\n let asyncFn = false;\n this.usedFuncs.add(funcName);\n // \u5F15\u6570\u306E\u500B\u6570\u3092\u30C1\u30A7\u30C3\u30AF\n if (meta && meta.josi) {\n // \u5F15\u6570\u306E\u500B\u6570\u304C\u7570\u306A\u308B\u5834\u5408\n if (meta.josi.length === args.length) {\n // ok\n }\n else if (meta.isVariableJosi) {\n // ok\n }\n else { // \u5F15\u6570\u306E\u500B\u6570\u304C\u9055\u3046\n throw NakoSyntaxError.fromNode(`\u95A2\u6570\u300E${funcToken.value}\u300F\u3067\u5F15\u6570${args.length}\u500B\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u304C\u3001${meta.josi.length}\u500B\u306E\u5F15\u6570\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002`, funcToken);\n }\n asyncFn = !!meta.asyncFn;\n }\n const funcNode = {\n type: 'func',\n name: funcName,\n blocks: args,\n josi: this.y[3].josi,\n meta,\n asyncFn,\n ...map,\n end: this.peekSourceMap()\n };\n return this.yApplyCallValue(funcNode);\n }\n throw NakoSyntaxError.fromNode('C\u98A8\u95A2\u6570\u547C\u3073\u51FA\u3057\u306E\u30A8\u30E9\u30FC', funcNameToken || NewEmptyToken());\n }\n // \u7121\u540D\u95A2\u6570(\u95A2\u6570\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8)\n if (this.check('def_func')) {\n return this.yMumeiFunc();\n }\n // \u5909\u6570\n const word = this.yValueWord();\n if (word) {\n return word;\n }\n // \u95A2\u6570\u3078\u306E\u53C2\u7167\n const funcPtr = this.yValueFuncPointer();\n if (funcPtr) {\n return funcPtr;\n }\n // \u305D\u306E\u4ED6\n return null;\n }\n yValueWordGetIndex(ast) {\n if (!ast.index) {\n ast.index = [];\n }\n // word @ a, b, c\n if (this.check('@')) {\n if (this.accept(['@', this.yValue, 'comma', this.yValue, 'comma', this.yValue])) {\n ast.index.push(this.checkArrayIndex(this.y[1]));\n ast.index.push(this.checkArrayIndex(this.y[3]));\n ast.index.push(this.checkArrayIndex(this.y[5]));\n ast.index = this.checkArrayReverse(ast.index);\n ast.josi = this.y[5].josi;\n return true;\n }\n if (this.accept(['@', this.yValue, 'comma', this.yValue])) {\n ast.index.push(this.checkArrayIndex(this.y[1]));\n ast.index.push(this.checkArrayIndex(this.y[3]));\n ast.index = this.checkArrayReverse(ast.index);\n ast.josi = this.y[3].josi;\n return true;\n }\n if (this.accept(['@', this.yValue])) {\n ast.index.push(this.checkArrayIndex(this.y[1]));\n ast.josi = this.y[1].josi;\n return true;\n }\n throw NakoSyntaxError.fromNode('\u5909\u6570\u306E\u5F8C\u308D\u306E\u300E@\u8981\u7D20\u300F\u306E\u6307\u5B9A\u304C\u4E0D\u6B63\u3067\u3059\u3002', ast);\n }\n if (this.check('[')) {\n // 1\u6B21\u5143\u914D\u5217\u5909\u6570 + 3\u6B21\u5143\u30D7\u30ED\u30D1\u30C6\u30A3\n if (this.accept(['[', this.yCalc, ']', '$', 'word', '$', 'word', '$', 'word'])) {\n ast.index.push(this.checkArrayIndex(this.y[1]));\n const prop1 = this.y[4];\n const prop2 = this.y[6];\n const prop3 = this.y[8];\n prop1.type = 'string';\n prop2.type = 'string';\n prop3.type = 'string';\n ast.index.push(prop1);\n ast.index.push(prop2);\n ast.index.push(prop3);\n ast.josi = prop3.josi;\n return ast.josi === ''; // \u52A9\u8A5E\u304C\u3042\u308C\u3070\u305D\u3053\u3067\u7D42\u4E86(false)\u3092\u8FD4\u3059 (#1627)\n }\n // 1\u6B21\u5143\u914D\u5217\u5909\u6570 + 2\u6B21\u5143\u30D7\u30ED\u30D1\u30C6\u30A3\n if (this.accept(['[', this.yCalc, ']', '$', 'word', '$', 'word'])) {\n ast.index.push(this.checkArrayIndex(this.y[1]));\n const prop1 = this.y[4];\n const prop2 = this.y[6];\n prop1.type = 'string';\n prop2.type = 'string';\n ast.index.push(prop1);\n ast.index.push(prop2);\n ast.josi = prop2.josi;\n return ast.josi === ''; // \u52A9\u8A5E\u304C\u3042\u308C\u3070\u305D\u3053\u3067\u7D42\u4E86(false)\u3092\u8FD4\u3059 (#1627)\n }\n // 1\u6B21\u5143\u914D\u5217\u5909\u6570 + 1\u6B21\u5143\u30D7\u30ED\u30D1\u30C6\u30A3\n if (this.accept(['[', this.yCalc, ']', '$', 'word'])) {\n ast.index.push(this.checkArrayIndex(this.y[1]));\n const prop = this.y[4];\n prop.type = 'string';\n ast.index.push(prop);\n ast.josi = this.y[4].josi;\n return this.y[4].josi === ''; // \u52A9\u8A5E\u304C\u3042\u308C\u3070\u305D\u3053\u3067\u7D42\u4E86(false)\u3092\u8FD4\u3059 (#1627)\n }\n if (this.accept(['[', this.yCalc, ']'])) {\n ast.index.push(this.checkArrayIndex(this.y[1]));\n ast.josi = this.y[2].josi;\n return this.y[2].josi === ''; // \u52A9\u8A5E\u304C\u3042\u308C\u3070\u305D\u3053\u3067\u7D42\u4E86(false)\u3092\u8FD4\u3059 (#1627)\n }\n if (this.accept(['[', this.yCalc, 'comma', this.yCalc, ']'])) {\n const index = [\n this.checkArrayIndex(this.y[1]),\n this.checkArrayIndex(this.y[3])\n ];\n const aa = ast.index.pop();\n ast.index = this.checkArrayReverse(index);\n if (aa) {\n ast.index.unshift(aa);\n }\n ast.josi = this.y[4].josi;\n return this.y[4].josi === ''; // \u52A9\u8A5E\u304C\u3042\u308C\u3070\u305D\u3053\u3067\u7D42\u4E86(false)\u3092\u8FD4\u3059\n }\n }\n if (this.check('[')) {\n if (this.accept(['[', this.yCalc, 'comma', this.yCalc, 'comma', this.yCalc, ']'])) {\n const index = [\n this.checkArrayIndex(this.y[1]),\n this.checkArrayIndex(this.y[3]),\n this.checkArrayIndex(this.y[5])\n ];\n const aa = ast.index.pop();\n ast.index = this.checkArrayReverse(index);\n if (aa) {\n ast.index.unshift(aa);\n }\n ast.josi = this.y[6].josi;\n return this.y[6].josi === ''; // \u52A9\u8A5E\u304C\u3042\u308C\u3070\u305D\u3053\u3067\u7D42\u4E86(false)\u3092\u8FD4\u3059\n }\n }\n return false;\n }\n yValueWordGetProp(ast) {\n if (!ast.index) {\n ast.index = [];\n }\n if (this.accept(['$', 'word', '$', 'word'])) {\n const prop1 = this.y[1];\n const prop2 = this.y[3];\n prop1.type = 'string';\n prop2.type = 'string';\n ast.index.push(prop1);\n ast.index.push(prop2);\n ast.josi = this.y[3].josi;\n return ast.josi === ''; // \u52A9\u8A5E\u304C\u3042\u308C\u3070\u305D\u3053\u3067\u7D42\u4E86(false)\u3092\u8FD4\u3059\n }\n if (this.check('$')) {\n if (this.accept(['$', 'word'])) {\n this.y[1].type = 'string';\n ast.index.push(this.y[1]);\n ast.josi = this.y[1].josi;\n return this.y[1].josi === ''; // \u52A9\u8A5E\u304C\u3042\u308C\u3070\u305D\u3053\u3067\u7D42\u4E86(false)\u3092\u8FD4\u3059\n }\n }\n if (this.accept(['$', this.yValue])) {\n ast.index.push(this.y[1]);\n ast.josi = this.y[1].josi;\n return this.y[1].josi === ''; // \u52A9\u8A5E\u304C\u3042\u308C\u3070\u305D\u3053\u3067\u7D42\u4E86(false)\u3092\u8FD4\u3059\n }\n return false;\n }\n /** @returns {Ast | null} */\n yValueFuncPointer() {\n const map = this.peekSourceMap();\n if (this.check('func_pointer')) {\n const t = this.getCur();\n const ast = {\n type: 'func_pointer',\n name: t.value,\n josi: t.josi,\n ...map,\n end: this.peekSourceMap()\n };\n return ast;\n }\n return null;\n }\n /** @returns {Ast | null} */\n yValueWord() {\n const map = this.peekSourceMap();\n if (this.check('word')) {\n const t = this.getCur();\n const word = this.getVarNameRef(t);\n // word[n] || word@n\n if ((word.josi === '' && this.checkTypes(['[', '@'])) || (word.josi !== '' && this.check('@'))) {\n const ast = {\n type: 'ref_array', // \u914D\u5217\u53C2\u7167\n name: word,\n index: [],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n while (!this.isEOF()) {\n if (!this.yValueWordGetIndex(ast)) {\n break;\n }\n }\n if (ast.index && ast.index.length === 0) {\n throw NakoSyntaxError.fromNode(`\u914D\u5217\u300E${word.value}\u300F\u30A2\u30AF\u30BB\u30B9\u3067\u6307\u5B9A\u30DF\u30B9`, word);\n }\n return ast;\n }\n // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u69CB\u6587(\u53C2\u7167) word$prop (#1793)\n if (this.check2(['$', 'word']) || this.check2(['$', 'string'])) {\n const propList = [];\n let josi = '';\n while (this.check('$')) {\n this.get(); // skip '$'\n const prop = this.get();\n propList.push(prop);\n josi = prop.josi;\n }\n return {\n type: 'ref_prop', // \u30D7\u30ED\u30D1\u30C6\u30A3\u53C2\u7167\n name: word,\n index: propList,\n josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n return word; // Token to Ast\n }\n return null;\n }\n /** \u5909\u6570\u3092\u751F\u6210 */\n createVar(word, isConst, isExport) {\n let gname = word.value;\n const typeName = isConst ? 'const' : 'var';\n if (this.funcLevel === 0) {\n // global ?\n if (gname.indexOf('__') < 0) {\n gname = this.modName + '__' + gname;\n }\n const defValue = { type: typeName, value: '', isExport };\n this.funclist.set(gname, defValue);\n const wordAst = word;\n wordAst.value = gname;\n return word;\n }\n else {\n // local\n this.localvars.set(gname, { type: typeName, value: '' });\n return word;\n }\n }\n /** \u5909\u6570\u540D\u3092\u691C\u7D22\u3057\u3066\u89E3\u6C7A\u3059\u308B\n * @param {Ast|Token} word\n * @return {Ast|Token}\n */\n getVarName(word) {\n // check word name\n const f = this.findVar(word.value);\n if (f) {\n if (f && f.scope === 'global') {\n word.value = f.name;\n }\n return word;\n }\n // \u5909\u6570\u304C\u898B\u3064\u304B\u3089\u306A\u3044\n this.createVar(word, false, this.isExportDefault);\n return word;\n }\n /** \u5909\u6570\u540D\u3092\u691C\u7D22\u3057\u3066\u89E3\u6C7A\u3059\u308B */\n getVarNameRef(word) {\n // check word name\n const f = this.findVar(word.value);\n if (!f) { // \u5909\u6570\u304C\u898B\u3064\u304B\u3089\u306A\u3044\n if (this.funcLevel === 0 && word.value.indexOf('__') < 0) {\n word.value = this.modName + '__' + String(word.value);\n }\n }\n else if (f && f.scope === 'global') {\n word.value = f.name;\n }\n return word;\n }\n /** \u8907\u6570\u306E\u5909\u6570\u540D\u3092\u691C\u7D22\u3057\u3066\u89E3\u6C7A\u3059\u308B */\n createVarList(words, isConst, isExport) {\n for (let i = 0; i < words.length; i++) {\n words[i] = this.createVar(words[i], isConst, isExport);\n }\n return words;\n }\n yJSONObjectValue() {\n // \u623B\u308A\u5024\u306E\u5F62\u5F0F\n // Astblocks.blocks = [key1, value1, key2, value2, key3, value3 ...]\n const a = [];\n const firstToken = this.peek();\n if (!firstToken) {\n return [];\n }\n while (!this.isEOF()) {\n while (this.check('eol')) {\n this.get();\n }\n if (this.check('}')) {\n break;\n }\n // key : value\n if (this.accept(['word', ':', this.yCalc])) {\n this.y[0].type = 'string'; // \u30AD\u30FC\u540D\u306E\u6587\u5B57\u5217\u8A18\u53F7\u7701\u7565\u306E\u5834\u5408\n a.push(this.y[0]);\n a.push(this.y[2]);\n }\n else if (this.accept(['string', ':', this.yCalc])) { // 'key' : value\n a.push(this.y[0]);\n a.push(this.y[2]);\n }\n else if (this.accept(['word'])) { // key\n const key = this.y[0];\n const val = JSON.parse(JSON.stringify(key));\n key.type = 'string'; // \u30AD\u30FC\u540D\u306E\u6587\u5B57\u5217\u8A18\u53F7\u7701\u7565\u306E\u5834\u5408\n a.push(key);\n a.push(val);\n }\n else if (this.checkTypes(['string', 'number'])) { // str or num\n const w = this.getCur(); // Token\u3092\u5F37\u5236\u7684\u306BAst\u306B\u5909\u63DB\u3057\u3066\u3044\u308B\n a.push(w);\n a.push(w);\n }\n else {\n throw NakoSyntaxError.fromNode('\u8F9E\u66F8\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u5BA3\u8A00\u3067\u672B\u5C3E\u306E\u300E}\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002', firstToken);\n }\n if (this.check('comma')) {\n this.get();\n }\n }\n return a;\n }\n // \u8F9E\u66F8\u578B\u5909\u6570\u306E\u53D6\u5F97\n yJSONObject() {\n const a = this.yJSONObjectRaw();\n if (!a) {\n return null;\n }\n return this.yRefArrayValue(a);\n }\n yJSONObjectRaw() {\n const map = this.peekSourceMap();\n if (this.accept(['{', '}'])) {\n return {\n type: 'json_obj',\n blocks: [],\n josi: this.y[1].josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n if (this.accept(['{', this.yJSONObjectValue, '}'])) {\n return {\n type: 'json_obj',\n blocks: this.y[1],\n josi: this.y[2].josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u8F9E\u66F8\u521D\u671F\u5316\u306B\u7D42\u308F\u308A\u304C\u306A\u304B\u3063\u305F\u5834\u5408 (\u30A8\u30E9\u30FC\u30C1\u30A7\u30C3\u30AF\u306E\u305F\u3081) #958\n if (this.accept(['{', this.yJSONObjectValue])) {\n throw NakoSyntaxError.fromNode('\u8F9E\u66F8\u578B\u5909\u6570\u306E\u521D\u671F\u5316\u304C\u300E}\u300F\u3067\u9589\u3058\u3089\u308C\u3066\u3044\u307E\u305B\u3093\u3002', this.y[1]);\n }\n return null;\n }\n yJSONArrayValue() {\n if (this.check('eol')) {\n this.get();\n }\n // Array\u306E\u6700\u521D\u306E\u5024\n const v1 = this.yCalc();\n if (v1 === null) {\n return [];\n }\n if (this.check('comma')) {\n this.get();\n }\n const a = [v1];\n // 2\u3064\u76EE\u4EE5\u964D\u306E\u5024\u3092\u53D6\u5F97\n while (!this.isEOF()) {\n if (this.check('eol')) {\n this.get();\n }\n if (this.check(']')) {\n break;\n }\n const v2 = this.yCalc();\n if (v2 === null) {\n break;\n }\n if (this.check('comma')) {\n this.get();\n }\n a.push(v2);\n }\n return a;\n }\n // \u914D\u5217\u3084(\u5024)\u306E\u76F4\u5F8C\u306B\u3042\u308B\u914D\u5217\u30A2\u30AF\u30BB\u30B9\u3084\u30D7\u30ED\u30D1\u30C6\u30A3\u30A2\u30AF\u30BB\u30B9\u3092\u8ABF\u3079\u308B\n yRefArrayValue(value) {\n let val = value;\n for (;;) {\n // \u914D\u5217\u306E\u76F4\u5F8C\u306B@\u3084[]\u304C\u3042\u308B\u304B\uFF1F\n // \u305F\u3060\u3057\u3001\u52A9\u8A5E\u304C\u3042\u308B\u5834\u5408\u306B\u306F\u3001\u5225\u306E\u5F15\u6570\u306E\u53EF\u80FD\u6027\u304C\u3042\u308B\u306E\u3067\u7121\u8996\u3002 (\u4F8B) [0,1,2]\u3092[3,4,5]\u306B\u914D\u5217\uFF0A\uFF0A\uFF0A\n if (val.josi === '' && this.checkTypes(['@', '['])) {\n const ast = {\n type: 'ref_array_value',\n name: '@',\n index: [val],\n josi: '',\n line: val.line,\n end: this.peekSourceMap()\n };\n while (!this.isEOF()) {\n if (!this.yValueWordGetIndex(ast)) {\n break;\n }\n }\n val = ast;\n continue;\n }\n // \u914D\u5217\u306E\u76F4\u306E\u5F8C\u306B$(\u30D7\u30ED\u30D1\u30C6\u30A3)\u304C\u3042\u308B\u304B\uFF1F\n if (this.check('$')) {\n const ast = {\n type: 'ref_array_value',\n name: '$',\n index: [val],\n josi: '',\n line: val.line,\n end: this.peekSourceMap()\n };\n while (!this.isEOF()) {\n if (!this.yValueWordGetProp(ast)) {\n break;\n }\n }\n val = ast;\n continue;\n }\n break;\n }\n return val;\n }\n yJSONArray() {\n // \u914D\u5217\u3092\u5F97\u308B\n const a = this.yJSONArrayRaw();\n if (!a) {\n return null;\n }\n return this.yRefArrayValue(a);\n }\n /** @returns {AstBlocks | null} */\n yJSONArrayRaw() {\n const map = this.peekSourceMap();\n if (this.accept(['[', ']'])) {\n return {\n type: 'json_array',\n blocks: [],\n josi: this.y[1].josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n if (this.accept(['[', this.yJSONArrayValue, ']'])) {\n return {\n type: 'json_array',\n blocks: this.y[1],\n josi: this.y[2].josi,\n ...map,\n end: this.peekSourceMap()\n };\n }\n // \u914D\u5217\u306B\u7D42\u308F\u308A\u304C\u306A\u304B\u3063\u305F\u5834\u5408 (\u30A8\u30E9\u30FC\u30C1\u30A7\u30C3\u30AF\u306E\u305F\u3081) #958\n if (this.accept(['[', this.yJSONArrayValue])) {\n throw NakoSyntaxError.fromNode('\u914D\u5217\u5909\u6570\u306E\u521D\u671F\u5316\u304C\u300E]\u300F\u3067\u9589\u3058\u3089\u308C\u3066\u3044\u307E\u305B\u3093\u3002', this.y[1]);\n }\n return null;\n }\n /** \u30A8\u30E9\u30FC\u76E3\u8996\u69CB\u6587 */\n yTryExcept() {\n const map = this.peekSourceMap();\n if (!this.check('\u30A8\u30E9\u30FC\u76E3\u8996')) {\n return null;\n }\n const kansi = this.getCur(); // skip \u30A8\u30E9\u30FC\u76E3\u8996\n const block = this.yBlock();\n if (!this.check2(['\u30A8\u30E9\u30FC', '\u306A\u3089\u3070'])) {\n throw NakoSyntaxError.fromNode('\u30A8\u30E9\u30FC\u69CB\u6587\u3067\u300E\u30A8\u30E9\u30FC\u306A\u3089\u3070\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002' +\n '\u300E\u30A8\u30E9\u30FC\u76E3\u8996..\u30A8\u30E9\u30FC\u306A\u3089\u3070..\u3053\u3053\u307E\u3067\u300F\u3092\u5BFE\u3067\u8A18\u8FF0\u3057\u307E\u3059\u3002', kansi);\n }\n this.get(); // skip \u30A8\u30E9\u30FC\n this.get(); // skip \u306A\u3089\u3070\n const errBlock = this.yBlock();\n if (this.check('\u3053\u3053\u307E\u3067')) {\n this.get();\n }\n else {\n throw NakoSyntaxError.fromNode('\u300E\u3053\u3053\u307E\u3067\u300F\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u300E\u30A8\u30E9\u30FC\u76E3\u8996\u300F...\u300E\u30A8\u30E9\u30FC\u306A\u3089\u3070\u300F...\u300E\u3053\u3053\u307E\u3067\u300F\u3092\u5BFE\u5FDC\u3055\u305B\u3066\u304F\u3060\u3055\u3044\u3002', map);\n }\n return {\n type: 'try_except',\n blocks: [block, errBlock],\n josi: '',\n ...map,\n end: this.peekSourceMap()\n };\n }\n /** \u95A2\u6570\u3054\u3068\u306BasyncFn\u304C\u5FC5\u8981\u304B\u78BA\u8A8D\u3059\u308B */\n _checkAsyncFn(node) {\n if (!node) {\n return false;\n }\n // \u95A2\u6570\u5B9A\u7FA9\u304C\u3042\u308C\u3070\u95A2\u6570\n if (node.type === 'def_func' || node.type === 'def_test' || node.type === 'func_obj') {\n // \u95A2\u6570\u5B9A\u7FA9\u3067asyncFn\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u308B\u306A\u3089true\u3092\u8FD4\u3059\n const def = node;\n if (def.asyncFn) {\n return true;\n } // \u65E2\u306BasyncFn\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u308B\n // \u95A2\u6570\u5B9A\u7FA9\u306E\u4E2D\u8EAB\u3092\u8ABF\u3079\u3066asyncFn\u3067\u3042\u308B\u306A\u3089true\u306B\u5909\u66F4\u3059\u308B\n let isAsyncFn = false;\n for (const n of def.blocks) {\n if (this._checkAsyncFn(n)) {\n isAsyncFn = true;\n def.asyncFn = isAsyncFn;\n def.meta.asyncFn = isAsyncFn;\n this.isModifiedNodes = true;\n return true;\n }\n }\n }\n // \u95A2\u6570\u547C\u3073\u51FA\u3057\u3092\u8ABF\u3079\u3066\u975E\u540C\u671F\u51E6\u7406\u304C\u5FC5\u8981\u306A\u3089true\u3092\u8FD4\u3059\n if (node.type === 'func') {\n // \u95A2\u6570\u547C\u3073\u51FA\u3057\u81EA\u4F53\u304C\u975E\u540C\u671F\u51E6\u7406\u306A\u3089true\u3092\u8FD4\u3059\n const callNode = node;\n if (callNode.asyncFn) {\n return true;\n }\n // \u7D9A\u3051\u3066\u3001\u4EE5\u4E0B\u306E\u95A2\u6570\u547C\u3073\u51FA\u3057\u306E\u5F15\u6570\u306A\u3069\u306B\u975E\u540C\u671F\u51E6\u7406\u304C\u3042\u308B\u304B\u3069\u3046\u304B\u8ABF\u3079\u308B\n // \u95A2\u6570\u306E\u5F15\u6570\u306F\u3001node.blocks\u306B\u683C\u7D0D\u3055\u308C\u3066\u3044\u308B\n if (callNode.blocks) {\n for (const n of callNode.blocks) {\n if (this._checkAsyncFn(n)) {\n callNode.asyncFn = true;\n this.isModifiedNodes = true;\n return true;\n }\n }\n }\n // \u3055\u3089\u306B\u3001\u95A2\u6570\u306E\u30EA\u30F3\u30AF\u3092\u8ABF\u3079\u308B\n const func = this.funclist.get(callNode.name);\n if (func && func.asyncFn) {\n callNode.asyncFn = true;\n this.isModifiedNodes = true;\n return true;\n }\n return false;\n }\n // \u9023\u6587 ... \u73FE\u5728\u3001\u52B9\u7387\u306F\u60AA\u3044\u304C\u975E\u540C\u671F\u3067\u5B9F\u884C\u3059\u308B\u3053\u3068\u306B\u306A\u3063\u3066\u3044\u308B\n if (node.type === 'renbun') {\n return true;\n }\n // \u305D\u306E\u4ED6\n if (node.blocks) {\n for (const n of node.blocks) {\n if (this._checkAsyncFn(n)) {\n return true;\n }\n }\n }\n return false;\n }\n /** Token\u3092\u305D\u306E\u307E\u307ENode\u306B\u5909\u63DB\u3059\u308B\u30E1\u30BD\u30C3\u30C9(\u305F\u3060\u3057\u7C21\u5358\u306A\u3082\u306E\u3060\u3051\u5BFE\u5FDC)\n * @returns {Ast[]}\n */\n _tokensToNodes(tokens) {\n const nodes = [];\n for (const token of tokens) {\n nodes.push(this._tokenToNode(token));\n }\n return nodes;\n }\n /** Token\u3092\u305D\u306E\u307E\u307ENode\u306B\u5909\u63DB\u3059\u308B\u30E1\u30BD\u30C3\u30C9(\u305F\u3060\u3057\u7C21\u5358\u306A\u3082\u306E\u3060\u3051\u5BFE\u5FDC)\n * @returns {Ast}\n */\n _tokenToNode(token) {\n const map = this.peekSourceMap(token);\n if (token.type === 'string' || token.type === 'number' || token.type === 'bigint') {\n return this.yConst(token, map);\n }\n if (token.type === 'word') {\n return {\n type: 'word',\n value: token.value,\n josi: token.josi,\n ...map\n };\n }\n if (token.type === 'eol' || token.type === '_eol') {\n return {\n type: 'eol',\n ...map\n };\n }\n throw new Error('[System Error] \u672A\u77E5\u306E\u30C8\u30FC\u30AF\u30F3\u304CAst\u306B\u5909\u63DB\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n}\n", "/**\n * nako_prepare.js\n * \u5B57\u53E5\u89E3\u6790\u306E\u524D\u306E\u524D\u51E6\u7406\u3002\u5168\u89D2\u6587\u5B57\u3092\u534A\u89D2\u6587\u5B57\u306B\u5909\u63DB\u3059\u308B\u306E\u304C\u4E3B\u306A\u51E6\u7406\u3002\n * \u305F\u3060\u3057\u3001\u30B3\u30E1\u30F3\u30C8\u3084\u6587\u5B57\u5217\u306E\u4E2D\u306F\u5909\u63DB\u3057\u306A\u3044\u3088\u3046\u306B\u8003\u616E\u3057\u3066\u5909\u63DB\u3059\u308B\u3002\n */\nclass ReplaceHistory {\n constructor(from, to, index) {\n this.from = from;\n this.to = to;\n this.index = index;\n }\n}\nexport class ConvertResult {\n constructor(text, sourcePosition) {\n this.text = text;\n this.sourcePosition = sourcePosition;\n }\n}\n/**\n * \u7F6E\u63DB\u5F8C\u306E\u4F4D\u7F6E\u304B\u3089\u7F6E\u63DB\u524D\u306E\u4F4D\u7F6E\u3078\u30DE\u30C3\u30D4\u30F3\u30B0\u3067\u304D\u308B\u6587\u5B57\u5217\n */\nexport class Replace {\n constructor(code) {\n this.history = [];\n this.code = code;\n }\n getText() {\n return this.code;\n }\n replaceAll(from, to) {\n while (true) {\n const index = this.getText().indexOf(from);\n if (index === -1) {\n break;\n }\n if (from.length !== to.length) {\n this.history.unshift(new ReplaceHistory(from.length, to.length, index));\n }\n this.code = this.code.replace(from, to);\n }\n }\n getSourcePosition(i) {\n // \u5C11\u3057\u9045\u3044\u3002\u30D1\u30FC\u30B9\u6642\u95931.4\u79D2\u306B\u5BFE\u3057\u30660.15\u79D2\u304B\u304B\u308B\u3002i\u304C\u5358\u8ABF\u5897\u52A0\u3059\u308B\u3053\u3068\u3092\u5229\u7528\u3057\u3066\u9AD8\u901F\u5316\u3067\u304D\u308B\u306F\u305A\u3002\n for (const item of this.history) {\n if (i >= item.index + item.to) { // \u7F6E\u63DB\u7BC4\u56F2\u3088\u308A\u5F8C\u308D\n i += item.from - item.to;\n }\n else if (item.index <= i && i < item.index + item.to) { // \u7F6E\u63DB\u7BC4\u56F2\n // \u7F6E\u63DB\u6587\u5B57\u5217\u304C2\u6587\u5B57\u4EE5\u4E0A\u306E\u3068\u304D\u3001\u6700\u5F8C\u306E\u6587\u5B57\u306F\u6700\u5F8C\u306E\u6587\u5B57\u3078\u30DE\u30C3\u30D7\u3059\u308B\u3002\u305D\u308C\u4EE5\u5916\u306F\u6700\u521D\u306E\u6587\u5B57\u3078\u30DE\u30C3\u30D7\u3059\u308B\u3002\n if (item.to >= 2 && i === item.index + item.to - 1) {\n i = item.index + item.from - 1;\n }\n else {\n i = item.index;\n }\n }\n }\n return i;\n }\n}\n/**\n * \u5B57\u53E5\u89E3\u6790\u3092\u884C\u3046\u524D\u306B\u5168\u89D2\u6587\u5B57\u3092\u534A\u89D2\u306B\u63C3\u3048\u308B\n * [memo]\n * \u305F\u3060\u3057\u3001\u6587\u5B57\u5217\u90E8\u5206\u3060\u3051\u306F\u3001\u305D\u306E\u307E\u307E\u5168\u89D2\u3067\u51FA\u529B\u3059\u308B\u3088\u3046\u306B\u3059\u308B\n * for https://github.com/kujirahand/nadesiko3/issues/94\n */\nexport class NakoPrepare {\n /** \u552F\u4E00\u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3092\u8FD4\u3059 */\n static getInstance() {\n if (!NakoPrepare._instance) {\n NakoPrepare._instance = new NakoPrepare();\n }\n return NakoPrepare._instance;\n }\n constructor() {\n // \u5358\u7D14\u306A\u5909\u63DB\u30C6\u30FC\u30D6\u30EB\n this.convertTable = new Map([\n // \u30CF\u30A4\u30D5\u30F3\u3078\u306E\u5909\u63DB\n // \u53C2\u8003) https://hydrocul.github.io/wiki/blog/2014/1101-hyphen-minus-wave-tilde\n // 0x2d: true, // ASCII\u306E\u30CF\u30A4\u30D5\u30F3\n [0x2010, '-'], // \u5225\u306E\u30CF\u30A4\u30D5\u30F3\n [0x2011, '-'], // \u6539\u884C\u3057\u306A\u3044\u30CF\u30A4\u30D5\u30F3\n [0x2013, '-'], // EN\u30C0\u30C3\u30B7\u30E5\n [0x2014, '-'], // EM\u30C0\u30C3\u30B7\u30E5\n [0x2015, '-'], // \u5168\u89D2\u306E\u30C0\u30C3\u30B7\u30E5\n [0x2212, '-'], // \u5168\u89D2\u306E\u30DE\u30A4\u30CA\u30B9\n // \u30C1\u30EB\u30C0\u306E\u5909\u63DB\n // 0x7e: true,\n [0x02dc, '~'], // \u5C0F\u3055\u306A\u30C1\u30EB\u30C0\n [0x02F7, '~'], // Modifier Letter Low Tilde\n [0x2053, '~'], // Swung Dash - \u8F9E\u66F8\u306E\u307F\u3060\u3057\n [0x223c, '~'], // Tilde Operator: \u6570\u5B66\u3067 Similar to\n [0x301c, '~'], // Wave Dash(\u4E00\u822C\u7684\u306A\u6CE2\u30C0\u30C3\u30B7\u30E5)\n [0xFF5E, '~'], // \u5168\u89D2\u30C1\u30EB\u30C0\n // \u30B9\u30DA\u30FC\u30B9\u306E\u5909\u63DB\n // \u53C2\u8003) http://anti.rosx.net/etc/memo/002_space.html\n // 0x20: true,\n [0x2000, ' '], // EN QUAD\n [0x2002, ' '], // EN SPACE\n [0x2003, ' '], // EM SPACE\n [0x2004, ' '], // THREE-PER-EM SPACE\n [0x2005, ' '], // FOUR-PER-EM SPACE\n [0x2006, ' '], // SIX-PER-EM SPACE\n [0x2007, ' '], // FIGURE SPACE\n [0x2009, ' '], // THIN SPACE\n [0x200A, ' '], // HAIR SPACE\n [0x200B, ' '], // ZERO WIDTH SPACE\n [0x202F, ' '], // NARROW NO-BREAK SPACE\n [0x205F, ' '], // MEDIUM MATHEMATICAL SPACE\n // [0x3000, ' '], // \u5168\u89D2\u30B9\u30DA\u30FC\u30B9 --- \u30A4\u30F3\u30C7\u30F3\u30C8\u91CF2\u3068\u3057\u3066\u6271\u3046\u305F\u3081\u306B\u30B3\u30E1\u30F3\u30C8\u30A2\u30A6\u30C8 (#issue)\n [0x3164, ' '], // HANGUL FILLER\n // \u305D\u306E\u4ED6\u306E\u5909\u63DB\n // [0x09, ' '], // TAB --> SPC\n [0x203B, '#'], // '\u203B' --- \u30B3\u30E1\u30F3\u30C8\n [0x3002, ';'], // \u53E5\u70B9\n [0x3010, '['], // '\u3010'\n [0x3011, ']'], // '\u3011'\n // \u8AAD\u70B9\u306F\u300C,\u300D\u306B\u5909\u63DB\u3059\u308B (#877)\n [0x3001, ','], // \u8AAD\u70B9 --- JSON\u8A18\u6CD5\u3067\u300C,\u300D\u3068\u300C\u3001\u300D\u3092\u533A\u5225\u3057\u305F\u3044\u306E\u3067\u8AAD\u70B9\u306F\u5909\u63DB\u3057\u306A\u3044\u3053\u3068\u306B\u3002(#276)\n [0xFF0C, ','], // \u8AAD\u70B9 '\uFF0C' \u8AD6\u6587\u306A\u3069\u3067\u5229\u7528\u3001\u305F\u3060\u3057\u53E5\u70B9\u306F\u30C9\u30C3\u30C8\u3068\u88AB\u308B\u306E\u3067\u5909\u63DB\u3057\u306A\u3044 (#735)\n [0x2715, '*'], // \u2715\u306E\u7D75\u6587\u5B57 (#1781) @see https://ja.wikipedia.org/wiki/%C3%97#%E7%AC%A6%E5%8F%B7%E4%BD%8D%E7%BD%AE\n [0x2716, '*'], // \u2716\u306E\u7D75\u6587\u5B57 (#1183)\n [0x2717, '*'], // \u2717\u306E\u7D75\u6587\u5B57 (#1781)\n [0x2718, '*'], // \u2718\u306E\u7D75\u6587\u5B57 (#1781)\n [0x274C, '*'], // \u274C\u306E\u7D75\u6587\u5B57 (#1781) CROSS MARK\n [0x2795, '+'], // +\u306E\u7D75\u6587\u5B57 (#1183)\n [0x2796, '-'], // -\u306E\u7D75\u6587\u5B57 (#1183)\n [0x2797, '\u00F7'], // \u00F7\u306E\u7D75\u6587\u5B57 (#1183)\n [0x1F7F0, '='] // \uD83D\uDFF0\u306E\u7D75\u6587\u5B57(#1781)\n ]);\n }\n // \u4E00\u6587\u5B57\u3060\u3051\u5909\u63DB\n /**\n * @param {string} ch\n */\n convert1ch(ch) {\n if (!ch) {\n return '';\n }\n const c = ch.codePointAt(0) || 0;\n // \u30C6\u30FC\u30D6\u30EB\u306B\u3088\u308B\u5909\u63DB\n const c2 = this.convertTable.get(c) || '';\n if (c2) {\n return c2;\n }\n // ASCII\u30A8\u30EA\u30A2\n if (c < 0x7F) {\n return ch;\n }\n // \u5168\u89D2\u534A\u89D2\u5358\u7D14\u5909\u63DB\u53EF\u80FD --- '\uFF01' - '\uFF5E'\n if (c >= 0xFF01 && c <= 0xFF5E) {\n const c2 = c - 0xFEE0;\n return String.fromCodePoint(c2);\n }\n return ch;\n }\n /** convert code */\n convert(code) {\n if (!code) {\n return [];\n }\n const src = new Replace(code);\n // \u6539\u884C\u30B3\u30FC\u30C9\u3092\u7D71\u4E00\n src.replaceAll('\\r\\n', '\\n');\n src.replaceAll('\\r', '\\n');\n let flagStr = false; // \u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u5185\u304B\u3069\u3046\u304B\n let flagStr2 = false; // \u7D75\u6587\u5B57\u306B\u3088\u308B\u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u5185\u304B\u3069\u3046\u304B\n let endOfStr = ''; // \u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u3092\u7D42\u4E86\u3055\u305B\u308B\u8A18\u53F7\n const res = [];\n let left = 0; // \u73FE\u5728\u51E6\u7406\u4E2D\u306E\u90E8\u5206\u6587\u5B57\u5217\u306E\u5DE6\u7AEF\u306E\u4F4D\u7F6E\n let str = ''; // \u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u306E\u5024\n // \u4E00\u6587\u5B57\u305A\u3064\u5168\u89D2\u3092\u534A\u89D2\u306B\u7F6E\u63DB\u3059\u308B\n let i = 0;\n while (i < src.getText().length) {\n const c = src.getText().charAt(i);\n const ch2 = src.getText().substring(i, i + 2);\n // \u6587\u5B57\u5217\u306E\u3068\u304D\n if (flagStr) {\n if (c === endOfStr) {\n flagStr = false;\n res.push(new ConvertResult(str + endOfStr, src.getSourcePosition(left)));\n i++;\n left = i;\n continue;\n }\n str += c;\n i++;\n continue;\n }\n // \u7D75\u6587\u5B57\u5236\u5FA1\u306B\u3088\u308B\u6587\u5B57\u5217\u306E\u3068\u304D\n if (flagStr2) {\n if (ch2 === endOfStr) {\n flagStr2 = false;\n if (endOfStr === '\uFF0A\uFF0F') {\n endOfStr = '*/';\n } // \u5F37\u5236\u5909\u63DB\n res.push(new ConvertResult(str + endOfStr, src.getSourcePosition(left)));\n i += 2;\n left = i;\n continue;\n }\n str += c;\n i++;\n continue;\n }\n // \u6587\u5B57\u5217\u5224\u5B9A\n if (c === '\u300C') {\n res.push(new ConvertResult(c, src.getSourcePosition(left)));\n i++;\n left = i;\n flagStr = true;\n endOfStr = '\u300D';\n str = '';\n continue;\n }\n if (c === '\u300E') {\n res.push(new ConvertResult(c, src.getSourcePosition(left)));\n i++;\n left = i;\n flagStr = true;\n endOfStr = '\u300F';\n str = '';\n continue;\n }\n if (c === '\u201C') {\n res.push(new ConvertResult(c, src.getSourcePosition(left)));\n i++;\n left = i;\n flagStr = true;\n endOfStr = '\u201D';\n str = '';\n continue;\n }\n // JavaScript\u306E\u5185\u90E8\u7684\u306B\u306F\u6587\u5B57\u5217\u306FUTF-16\u3067\u6271\u308F\u308C\u3066\u308B\u306E\u3067 charAt \u3092\u4F7F\u3046\u5834\u5408 \u7D75\u6587\u5B57\u304C2\u6587\u5B57\u6271\u3044\u306B\u306A\u308B --- #726\n if (ch2 === '\uD83C\uDF34' || ch2 === '\uD83C\uDF3F') {\n res.push(new ConvertResult(ch2, src.getSourcePosition(left)));\n i += 2;\n left = i;\n flagStr2 = true;\n endOfStr = ch2;\n str = '';\n continue;\n }\n const c1 = this.convert1ch(c);\n if (c1 === '\"' || c1 === '\\'') {\n res.push(new ConvertResult(c1, src.getSourcePosition(left)));\n i++;\n left = i;\n flagStr = true;\n endOfStr = c;\n str = '';\n continue;\n }\n // \u30E9\u30A4\u30F3\u30B3\u30E1\u30F3\u30C8\u3092\u98DB\u3070\u3059 (#725)\n if (c1 === '#') {\n res.push(new ConvertResult(c1, src.getSourcePosition(left)));\n i++;\n left = i;\n flagStr = true; // \u672C\u5F53\u306F\u30B3\u30E1\u30F3\u30C8\u3060\u3051\u3069\u4FBF\u5B9C\u4E0A\n endOfStr = '\\n';\n str = '';\n continue;\n }\n // \u30E9\u30A4\u30F3\u30B3\u30E1\u30F3\u30C8\u3092\u98DB\u3070\u3059\n if (ch2 === '//' || ch2 === '\uFF0F\uFF0F') {\n res.push(new ConvertResult('//', src.getSourcePosition(left))); // \u5F37\u5236\u7684\u306B'//'\u3068\u3059\u308B\n i += 2;\n left = i;\n flagStr = true;\n endOfStr = '\\n';\n str = '';\n continue;\n }\n // \u8907\u6570\u884C\u30B3\u30E1\u30F3\u30C8\u5185\u3092\u98DB\u3070\u3059\n if (ch2 === '\uFF0F\uFF0A') {\n res.push(new ConvertResult('/*', src.getSourcePosition(left))); // \u5F37\u5236\u5909\u63DB\n i += 2;\n left = i;\n flagStr2 = true;\n endOfStr = '\uFF0A\uFF0F';\n str = '';\n continue;\n }\n // \u8907\u6570\u884C\u30B3\u30E1\u30F3\u30C8\u5185\u3092\u98DB\u3070\u3059 (#731)\n if (ch2 === '/*') {\n res.push(new ConvertResult(ch2, src.getSourcePosition(left)));\n i += 2;\n left = i;\n flagStr2 = true;\n endOfStr = '*/';\n str = '';\n continue;\n }\n // \u5909\u63DB\u3057\u305F\u3082\u306E\u3092\u8FFD\u52A0\n res.push(new ConvertResult(c1, src.getSourcePosition(left)));\n i++;\n left = i;\n }\n if (flagStr || flagStr2) {\n if (endOfStr === '\"' || endOfStr === '\\'' || endOfStr === '\u300D' || endOfStr === '\u300F') {\n // throw new Error(`(${startLineOfStr+1}\u884C\u76EE) \u6587\u5B57\u5217\u304C\u8A18\u53F7\u300E${endOfStr}\u300F\u3067\u9589\u3058\u3089\u308C\u3066\u3044\u307E\u305B\u3093\u3002`)\n // \u3053\u3053\u3067\u306F\u30A8\u30E9\u30FC\u306F\u30EA\u30DD\u30FC\u30C8\u3057\u306A\u3044 nako_lex_rule.js \u3067\u30A8\u30E9\u30FC\u3092\u30EA\u30DD\u30FC\u30C8\u3059\u308B\n }\n else {\n // \u6587\u5B57\u5217\u4EE5\u5916\u306E\u30B3\u30E1\u30F3\u30C8\u306A\u3069\u306F\u81EA\u52D5\u3067\u9589\u3058\u308B\n res.push(new ConvertResult(str + endOfStr, src.getSourcePosition(left)));\n }\n }\n return res;\n }\n}\n/** \u306A\u3067\u3057\u3053\u306E\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u306E\u30E2\u30FC\u30C9(!\u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u306A\u3069)\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u308B\u304B\u8ABF\u3079\u308B */\nexport function checkNakoMode(code, modeNames) {\n // \u5148\u982D\u306E256\u6587\u5B57\u306B\u3064\u3044\u3066\u8ABF\u3079\u308B\n code = code.substring(0, 256);\n // \u5168\u89D2\u534A\u89D2\u306E\u63FA\u308C\u3092\u5438\u53CE\n code = code.replace(/(\uFF01|\uD83D\uDCA1)/, '!');\n // \u7BC4\u56F2\u30B3\u30E1\u30F3\u30C8\u3092\u524A\u9664\n code = code.replace(/\\/\\*.*?\\*\\//g, '');\n // \u6BCE\u6587\u8ABF\u3079\u308B\n const lines = code.split(/[;\u3002\\n]/, 30);\n for (let line of lines) {\n line = line.replace(/^\\s+/, '').replace(/\\s+$/, ''); // trim\n if (modeNames.indexOf(line) >= 0) {\n return true;\n }\n }\n return false;\n}\n", "/**\n * \u30D1\u30FC\u30B5\u30FC\u304C\u751F\u6210\u3057\u305F\u4E2D\u9593\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u5B9F\u969B\u306EJavaScript\u306E\u30B3\u30FC\u30C9\u306B\u5909\u63DB\u3059\u308B\u3002\n * \u306A\u304A\u901F\u5EA6\u512A\u5148\u3067\u5FE0\u5B9F\u306BJavaScript\u306E\u30B3\u30FC\u30C9\u3092\u751F\u6210\u3059\u308B\u3002\n */\nimport { NakoSyntaxError } from './nako_errors.mjs';\n// \u306A\u3067\u3057\u3053\u3067\u5B9A\u7FA9\u3057\u305F\u95A2\u6570\u306E\u958B\u59CB\u30B3\u30FC\u30C9\u3068\u7D42\u4E86\u30B3\u30FC\u30C9\nconst topOfFunction = '(function(){\\n';\nconst endOfFunction = '})';\nconst topOfFunctionAsync = '(async function(){\\n';\n/** \u30B3\u30FC\u30C9\u751F\u6210\u30AA\u30D7\u30B7\u30E7\u30F3 */\nexport class NakoGenOptions {\n constructor(isTest = false, importFiles = [], codeStandalone = '', convEnv = '') {\n this.isTest = isTest;\n this.codeStandalone = codeStandalone;\n this.codeEnv = convEnv;\n this.importFiles = ['plugin_system.mjs', 'plugin_math.mjs', 'plugin_csv.mjs', 'plugin_promise.mjs', 'plugin_test.mjs'];\n for (const fname of importFiles) {\n this.importFiles.push(fname);\n }\n }\n}\n/**\n * \u69CB\u6587\u6728\u304B\u3089JS\u306E\u30B3\u30FC\u30C9\u3092\u751F\u6210\u3059\u308B\u30AF\u30E9\u30B9\n */\nexport class NakoGen {\n /** constructor\n * @param com \u30B3\u30F3\u30D1\u30A4\u30E9\u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\n */\n constructor(com) {\n /**\n * \u51FA\u529B\u3059\u308BJavaScript\u30B3\u30FC\u30C9\u306E\u30D8\u30C3\u30C0\u30FC\u90E8\u5206\u3067\u5B9A\u7FA9\u3059\u308B\u5FC5\u8981\u306E\u3042\u308B\u95A2\u6570\u3002fn\u306Fjs\u306E\u30B3\u30FC\u30C9\u3002\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u95A2\u6570\u306F\u542B\u307E\u308C\u306A\u3044\u3002\n */\n this.nakoFuncList = new Map(com.getNakoFuncList());\n /**\n * \u306A\u3067\u3057\u3053\u3067\u5B9A\u7FA9\u3057\u305F\u30C6\u30B9\u30C8\u306E\u4E00\u89A7\n */\n this.nakoTestFuncs = new Map();\n /**\n * \u30D7\u30ED\u30B0\u30E9\u30E0\u5185\u3067\u53C2\u7167\u3055\u308C\u305F\u95A2\u6570\u306E\u30EA\u30B9\u30C8\u3002\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u547D\u4EE4\u3092\u542B\u3080\u3002\n * JavaScript\u5358\u4F53\u3067\u5B9F\u884C\u3059\u308B\u3068\u304D\u3001\u3053\u306E\u30EA\u30B9\u30C8\u306B\u3042\u308B\u95A2\u6570\u306E\u5B9A\u7FA9\u3092JavaScript\u30B3\u30FC\u30C9\u306E\u5148\u982D\u306B\u4ED8\u3051\u8DB3\u3059\u3002\n */\n this.usedFuncSet = new Set();\n /**\n * \u30EB\u30FC\u30D7\u6642\u306E\u4E00\u6642\u5909\u6570\u304C\u88AB\u3089\u306A\u3044\u3088\u3046\u306BID\u3067\u7BA1\u7406\n */\n this.loopId = 1;\n /**\n * \u975E\u540C\u95A2\u6570\u3092\u4F55\u56DE\u4F7F\u3063\u305F\u304B\n */\n this.numAsyncFn = 0;\n /**\n * \u95A2\u6570\u5B9A\u7FA9\u306E\u969B\u3001\u95A2\u6570\u306E\u4E2D\u3067asyncFn=true\u306E\u95A2\u6570\u3092\u547C\u3073\u51FA\u3057\u305F\u304B\u3069\u3046\u304B\u3092\u8ABF\u3079\u308B @see convDefFuncCommon\n */\n this.usedAsyncFn = false;\n /** \u5909\u63DB\u4E2D\u306E\u51E6\u7406\u304C\u3001\u30EB\u30FC\u30D7\u306E\u4E2D\u304B\u3069\u3046\u304B\u3092\u5224\u5B9A\u3059\u308B */\n this.flagLoop = false;\n this.__self = com;\n /** \u30B3\u30FC\u30C9\u30B8\u30A7\u30CD\u30EC\u30FC\u30BF\u306E\u7A2E\u985E */\n this.genMode = 'sync';\n /** \u884C\u756A\u53F7\u3068\u30D5\u30A1\u30A4\u30EB\u540D\u304C\u5206\u304B\u308B\u3068\u304D\u306F `l123:main.nako3`\u3001\u884C\u756A\u53F7\u3060\u3051\u5206\u304B\u308B\u3068\u304D\u306F `l123`\u3001\u305D\u3046\u3067\u306A\u3051\u308C\u3070\u4EFB\u610F\u306E\u6587\u5B57\u5217\u3002 */\n this.lastLineNo = null;\n /** \u30B9\u30BF\u30C3\u30AF */\n this.varslistSet = this.setVarslistSet(com.__varslist);\n /** \u30B9\u30BF\u30C3\u30AF\u30C8\u30C3\u30D7 */\n this.varsSet = { isFunction: false, names: new Set(), readonly: new Set() };\n this.varslistSet[2] = this.varsSet;\n this.functionContextStack = [];\n // \u73FE\u5728\u5B9A\u7FA9\u4E2D\u306E\u95A2\u6570\u540D\n this.defFuncName = '';\n // 1\u4EE5\u4E0A\u306E\u3068\u304D\u9AD8\u901F\u5316\u3059\u308B\u3002\n // \u5B9F\u884C\u901F\u5EA6\u512A\u5148\u30D6\u30ED\u30C3\u30AF\u5185\u30671\u5897\u3048\u308B\u3002\n this.speedMode = {\n lineNumbers: 0, // \u884C\u756A\u53F7\u3092\u51FA\u529B\u3057\u306A\u3044\n implicitTypeCasting: 0, // \u6570\u5024\u52A0\u7B97\u3067parseFloat\u3092\u51FA\u529B\u3057\u306A\u3044\n invalidSore: 0, // \u300C\u305D\u308C\u300D\u3092\u7528\u3044\u306A\u3044\n forcePure: 0 // \u5168\u3066\u306E\u30B7\u30B9\u30C6\u30E0\u547D\u4EE4\u3092pure\u3068\u3057\u3066\u6271\u3046\u3002\u547D\u4EE4\u304B\u3089\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3078\u306E\u53C2\u7167\u304C\u51FA\u6765\u306A\u304F\u306A\u308B\u3002\n };\n // 1\u4EE5\u4E0A\u306E\u3068\u304D\u6E2C\u5B9A\u3092inject\u3059\u308B\u3002\n // \u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u30E2\u30CB\u30BF\u306E\u30D6\u30ED\u30C3\u30AF\u5185\u30671\u5897\u3048\u308B\u3002\n this.performanceMonitor = {\n userFunction: 0, // \u547C\u3073\u51FA\u3055\u308C\u305F\u30E6\u30FC\u30B6\u95A2\u6570\n systemFunction: 0, // \u30B7\u30B9\u30C6\u30E0\u95A2\u6570(\u547C\u3073\u51FA\u3057\u30B3\u30FC\u30C9\u3092\u542B\u3080)\n systemFunctionBody: 0, // \u30B7\u30B9\u30C6\u30E0\u95A2\u6570(\u547C\u3073\u51FA\u3057\u30B3\u30FC\u30C9\u3092\u9664\u304F)\n mumeiId: 0\n };\n /**\n * \u672A\u5B9A\u7FA9\u306E\u5909\u6570\u306E\u8B66\u544A\u3092\u884C\u3046\n */\n this.constPools = [];\n this.constPoolsTemplate = [];\n // undefined\u306E\u8B66\u544A\u5236\u5FA1 (\u300C\u53B3\u3057\u304F\u30C1\u30A7\u30C3\u30AF\u300D\u3067\u30AA\u30F3\u306B\u306A\u308B)\n this.warnUndefinedVar = false;\n this.warnUndefinedReturnUserFunc = false;\n this.warnUndefinedCallingUserFunc = false;\n this.warnUndefinedCallingSystemFunc = false;\n this.warnUndefinedCalledUserFuncArgs = false;\n this.debugOption = com.debugOption;\n }\n static isValidIdentifier(name) {\n // TODO: \u3044\u3089\u306A\u305D\u3046\u306A\u90E8\u5206\u306F\u524A\u308B\n // https://stackoverflow.com/a/9337047\n // eslint-disable-next-line no-misleading-character-class\n 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(name);\n }\n /**\n * com.__varslist\u3092\u5143\u306B\u3001this.varslistSet\u3092\u8A2D\u5B9A\n */\n setVarslistSet(varslist) {\n const vlist = [];\n // \u5909\u6570\u540D\u306E\u4E00\u89A7\u3092VarsSet\u306B\u683C\u7D0D (0: \u30B7\u30B9\u30C6\u30E0\u5909\u6570, 1: \u30B0\u30ED\u30FC\u30D0\u30EB\u5909\u6570, 2: \u30ED\u30FC\u30AB\u30EB\u5909\u6570) 0\u30681\u306E\u307F\u79FB\u3059\n for (let i = 0; i <= 1; i++) {\n const scope = varslist[i];\n const names = new Set(scope.keys());\n names.delete('meta'); // remove 'meta' from names\n vlist[i] = { isFunction: false, names, readonly: new Set() };\n }\n return vlist;\n }\n /**\n * \u6539\u884C\u3092\u57CB\u3081\u8FBC\u3080\n */\n convLineno(node, forceUpdate = false, incLine = 0) {\n // \u30B9\u30D4\u30FC\u30C9\u30E2\u30FC\u30C9\u3067\u306F\u884C\u756A\u53F7\u3092\u57CB\u3081\u8FBC\u307E\u306A\u3044\n if (this.speedMode.lineNumbers > 0) {\n return '';\n }\n const lineNo = node.line + incLine;\n let lineNoStr;\n if (typeof node.line !== 'number') {\n lineNoStr = 'unknown';\n }\n else if (typeof node.file !== 'string') {\n lineNoStr = `l${lineNo}`;\n }\n else {\n lineNoStr = `l${lineNo}:${node.file}`;\n }\n // \u5F37\u5236\u7684\u306B\u884C\u756A\u53F7\u3092\u30A2\u30C3\u30D7\u30C7\u30FC\u30C8\u3059\u308B\u304B\n if (!forceUpdate) {\n if (lineNoStr === this.lastLineNo) {\n return '';\n }\n this.lastLineNo = lineNoStr;\n }\n // \u5B9F\u884C\u884C\u306E\u30C7\u30FC\u30BF\n const lineDataJSON = JSON.stringify(lineNoStr);\n // \u30C7\u30D0\u30C3\u30B0\u5B9F\u884C\u304B\n let debugCode = '';\n if (this.debugOption.useDebug) {\n // messageAction\n if (this.debugOption.messageAction) {\n debugCode += `window.postMessage({action:'${this.debugOption.messageAction}',` +\n `line: ${lineDataJSON}});`;\n }\n // waitTime\n if (lineNo >= 1) {\n if (this.debugOption.waitTime > 0) {\n debugCode += `await __v0.get('\u79D2\u5F85')(${this.debugOption.waitTime},__self);`;\n }\n // breakpoints\n this.numAsyncFn += 1;\n this.usedAsyncFn = true;\n debugCode += `await __v0.get('__DEBUG_BP_WAIT')(${lineNo}, __self);`;\n }\n // end\n debugCode += 'if (__v0.get(\\'__forceClose\\')) { return -1 };';\n }\n // \u4F8B: __v0.set('__line', 'l1:main.nako3')\n // return `__v0.set('__line', ${lineDataJSON});` + debugCode\n return `__line(${lineDataJSON});` + debugCode;\n }\n /**\n * \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u306E\u53D6\u5F97\u7528JavaScript\u30B3\u30FC\u30C9\u3092\u751F\u6210\u3059\u308B\u3002\n * @param {string} name\n */\n varname_get(name) {\n if (this.varslistSet.length === 3) {\n // \u30B0\u30ED\u30FC\u30D0\u30EB\n return `__self.__varslist[${2}].get(${JSON.stringify(name)})`;\n }\n else {\n // \u30ED\u30FC\u30AB\u30EB\n return `__self.__vars.get(${JSON.stringify(name)})`;\n }\n }\n /**\n * \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u306E\u8A2D\u5B9A\u7528JavaScript\u30B3\u30FC\u30C9\u3092\u751F\u6210\u3059\u308B\u3002\n * @param {string} name\n * @param {string} jsvalue\n */\n varname_set(name, jsvalue) {\n if (this.varslistSet.length === 3) {\n return `__self.__varslist[2].set(${JSON.stringify(name)}, (${jsvalue}))`;\n }\n else {\n return `__self.__vars.set(${JSON.stringify(name)}, (${jsvalue}))`;\n }\n }\n /**\n * \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u306E\u8A2D\u5B9A\u7528JavaScript\u30B3\u30FC\u30C9\u3092\u751F\u6210\u3059\u308B\u3002\n * @param {string} name\n * @param {string} jsvalue\n */\n varname_set_sys(name, jsvalue) {\n return `__self.__setSysVar(${JSON.stringify(name)}, (${jsvalue}))`;\n }\n /**\n * @param {string} name\n * @returns {string}\n */\n static getFuncName(name) {\n if (name.indexOf('__') >= 0) { // \u30B9\u30B3\u30FC\u30D7\u304C\u3042\u308B\u5834\u5408\n const a = name.split('__');\n const scope = a[0];\n const name3 = NakoGen.getFuncName(a[1]);\n return `${scope}__${name3}`;\n }\n let name2 = name.replace(/[\u3041-\u3093]+$/, '');\n if (name2 === '') {\n name2 = name;\n }\n return name2;\n }\n /** @param {Ast} node */\n static convPrint(node) {\n return `__print(${node});`;\n }\n /** @param {AstStrValue} node */\n convRequire(node) {\n const moduleName = node.value;\n return this.convLineno(node, false) +\n `__module['${moduleName}'] = require('${moduleName}');\\n`;\n }\n /**\n * \u30D7\u30ED\u30B0\u30E9\u30E0\u306E\u5B9F\u884C\u306B\u5FC5\u8981\u306A\u95A2\u6570\u5B9A\u7FA9\u3092\u66F8\u304D\u51FA\u3059(\u30B0\u30ED\u30FC\u30D0\u30EB\u9818\u57DF)\n * convGen\u306E\u7D50\u679C\u3092\u5229\u7528\u3059\u308B\u305F\u3081\u3001convGen\u306E\u5F8C\u306B\u547C\u3073\u51FA\u3059\u3053\u3068\u3002\n * @param com\n * @param opt\n */\n getDefFuncCode(com, opt) {\n let code = '';\n // \u3088\u304F\u4F7F\u3046\u5909\u6570\u306E\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\n // jsInit \u306E\u90E8\u5206\u306B\u8A2D\u5B9A\u3059\u308B\u30B3\u30FC\u30C9\n code += `const nakoVersion = { version: ${JSON.stringify(com.version)} }\\n`;\n code += 'const __self = self;\\n';\n code += '__self.__self = __self;\\n';\n code += 'const __varslist = __self.__varslist;\\n';\n code += 'const __module = __self.__module;\\n';\n code += 'const __v0 = __self.__v0 = __self.__varslist[0];\\n';\n code += 'const __v1 = __self.__v1 = __self.__varslist[1];\\n';\n code += 'const __vars = __self.__vars = __self.__varslist[2];\\n';\n code += 'const __nako_make_closure = (local, parent) => ({\\n' +\n ' has: (key) => local.has(key) || (parent !== null && parent.has(key)),\\n' +\n ' get: (key) => local.has(key) ? local.get(key) : (parent !== null ? parent.get(key) : undefined),\\n' +\n ' set: (key, value) => { if (local.has(key) || parent === null || !parent.has(key)) { local.set(key, value); } else { parent.set(key, value); } return value; }\\n' +\n '});\\n';\n code += `const __modList = __self.__modList = ${JSON.stringify(com.getModList())}\\n`;\n code += 'const __line = (lineno) => { __self.__v0.set(\\'__line\\', lineno); }\\n';\n code += '__v0.set(\\'__line\\', \\'l0:__getDefFuncCode\\');\\n';\n code += '__v0.set(\\'__forceClose\\', false);\\n';\n code += `__v0.set('__useDebug', ${String(this.debugOption.useDebug)});\\n`;\n // \u5B9A\u6570\u3092\u57CB\u3081\u8FBC\u3080\n code += '__self.constPools = ' + JSON.stringify(this.constPools) + ';\\n';\n code += '__self.constPoolsTemplate = ' + JSON.stringify(this.constPoolsTemplate) + ';\\n';\n //\n code += '__self.__propAccessor = [];\\n';\n // \u306A\u3067\u3057\u3053\u306E\u95A2\u6570\u5B9A\u7FA9\u3092\u884C\u3046\n let nakoFuncCode = '';\n this.nakoFuncList.forEach((value, key) => {\n const f = trim(cleanGeneratedCode(String(value.fn), 1));\n const isAsync = value.asyncFn ? 'true' : 'false';\n nakoFuncCode += '' +\n `//[DEF_FUNC name='${key}' asyncFn=${isAsync}]\\n` +\n `__self.__varslist[1].set(\"${key}\", ${f});\\n` +\n `//[/DEF_FUNC name='${key}']\\n`;\n });\n if (nakoFuncCode !== '') {\n code += '__v0.set(\\'__line\\', \\'\u95A2\u6570\u306E\u5B9A\u7FA9\\');\\n' + nakoFuncCode;\n }\n // \u30C6\u30B9\u30C8\u306E\u5B9A\u7FA9\u3092\u884C\u3046\n if (opt.isTest) {\n let testCode = 'const __tests = [];\\n';\n this.nakoTestFuncs.forEach((value) => {\n const f = value.fn;\n testCode += `${String(f)};\\n`;\n });\n if (testCode !== '') {\n code += '__v0.set(\\'__line\\', \\'\u30C6\u30B9\u30C8\u306E\u5B9A\u7FA9\\');\\n';\n code += testCode + '\\n';\n }\n }\n return code;\n }\n /**\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u8FFD\u52A0\n * @param po \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n */\n addPlugin(po) {\n return this.__self.addPlugin(po);\n }\n /**\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u8FFD\u52A0(\u30D6\u30E9\u30A6\u30B6\u5411\u3051)\n * @param name \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u540D\n * @param po \u95A2\u6570\u30EA\u30B9\u30C8\n */\n addPluginObject(name, po) {\n this.__self.addPluginObject(name, po);\n }\n /**\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u8FFD\u52A0(Node.js\u5411\u3051)\n * @param objName \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u540D\n * @param path \u30D5\u30A1\u30A4\u30EB\u30D1\u30B9\n * @param po \u767B\u9332\u3059\u308B\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n */\n addPluginFile(objName, path, po) {\n this.__self.addPluginFile(objName, path, po);\n }\n /**\n * \u95A2\u6570\u3092\u8FFD\u52A0\u3059\u308B\n * @param key \u95A2\u6570\u540D\n * @param josi \u52A9\u8A5E\n * @param fn \u95A2\u6570\n */\n addFunc(key, josi, fn) {\n this.__self.addFunc(key, josi, fn);\n }\n /**\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u95A2\u6570\u3092\u53C2\u7167\u3059\u308B\n * @param key \u30D7\u30E9\u30B0\u30A4\u30F3\u95A2\u6570\u306E\u95A2\u6570\u540D\n * @returns \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n */\n getFunc(key) {\n return this.__self.getFunc(key);\n }\n /**\n * \u95A2\u6570\u3092\u5148\u306B\u767B\u9332\u3057\u3066\u3057\u307E\u3046\n */\n registerFunction(ast) {\n if (ast.type !== 'block') {\n throw NakoSyntaxError.fromNode('\u69CB\u6587\u89E3\u6790\u306B\u5931\u6557\u3057\u3066\u3044\u307E\u3059\u3002\u69CB\u6587\u306F\u5FC5\u305Ablock\u304C\u5148\u982D\u306B\u306A\u308A\u307E\u3059', ast);\n }\n /** \u95A2\u6570\u4E00\u89A7 */\n const funcList = [];\n // \u306A\u3067\u3057\u3053\u95A2\u6570\u3092\u5B9A\u7FA9\u3057\u3066 this.nako_func[name] \u306B\u5B9A\u7FA9\u3059\u308B\n const registFunc = (t) => {\n // (t.type == 'def_func') \u306F\u30C1\u30A7\u30C3\u30AF\u6E08\u307F\n if (!t.name) {\n throw new Error('[System Error] \u95A2\u6570\u306E\u5B9A\u7FA9\u3067\u95A2\u6570\u540D\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093');\n }\n const name = t.name;\n this.usedFuncSet.add(name);\n this.__self.__varslist[1].set(name, () => { }); // \u4E8B\u524D\u306B\u9069\u5F53\u306A\u5024\u3092\u8A2D\u5B9A\n this.varslistSet[1].names.add(name); // global\n const meta = t.meta;\n if (!meta) {\n throw new Error('[System Error] \u95A2\u6570\u306E\u5B9A\u7FA9\u3067\u95A2\u6570\u540D\u306E\u30E1\u30BF\u60C5\u5831\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093');\n }\n this.nakoFuncList.set(name, {\n josi: meta.josi,\n fn: () => { },\n type: 'func',\n asyncFn: !!t.asyncFn,\n isExport: t.isExport\n });\n funcList.push({ name, node: t });\n };\n const registFuncs = (ast) => {\n // blocks\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u6301\u3063\u3066\u3044\u308B\u304B\uFF1F\n if (ast.blocks) {\n // \u5404\u30D6\u30ED\u30C3\u30AF\u3092\u304F\u307E\u306A\u304F\u5DE1\u56DE\u30C1\u30A7\u30C3\u30AF\n for (const t of ast.blocks) {\n if (t.type === 'def_func') { // \u95A2\u6570\u5B9A\u7FA9\n registFunc(t);\n }\n else {\n registFuncs(t);\n }\n }\n }\n };\n // \u95A2\u6570\u306E\u767B\u9332\n registFuncs(ast);\n // __self.__varslist\u306E\u5909\u66F4\u3092\u53CD\u6620\n const initialNames = new Set();\n if (this.speedMode.invalidSore === 0) {\n initialNames.add('\u305D\u308C');\n }\n this.varsSet = { isFunction: false, names: initialNames, readonly: new Set() };\n this.varslistSet = this.setVarslistSet(this.__self.__varslist);\n this.varslistSet[2] = this.varsSet;\n }\n /**\n * @param node\n * @param opt\n */\n convGen(node, opt) {\n const result = this.convLineno(node, false) + this._convGen(node, true);\n if (opt.isTest) {\n return '';\n }\n else {\n return result;\n }\n }\n /**\n * @param {Ast} node\n * @param {boolean} isExpression\n */\n _convGen(node, isExpression) {\n if (!node) {\n return '';\n }\n let code = '';\n if (node instanceof Array) {\n for (let i = 0; i < node.length; i++) {\n const n = node[i];\n code += this._convGen(n, isExpression);\n }\n return code;\n }\n if (node === null) {\n return 'null';\n }\n if (node === undefined) {\n return 'undefined';\n }\n if (typeof (node) !== 'object') {\n return '' + String(node);\n }\n // switch\n switch (node.type) {\n case 'nop':\n break;\n case 'block':\n code += this.convBlock(node);\n break;\n case 'comment':\n case 'eol':\n code += this.convComment(node);\n break;\n case 'run_mode':\n code += this.convRunMode(node);\n break;\n case 'break':\n code += this.convCheckLoop(node, 'break');\n break;\n case 'continue':\n code += this.convCheckLoop(node, 'continue');\n break;\n case 'end':\n code += '__v0.get(\\'\u7D42\\')(__self);';\n break;\n case 'number':\n code += node.value;\n break;\n case 'bigint':\n code += node.value;\n break;\n case 'string':\n code += this.convString(node);\n break;\n case 'def_local_var':\n code += this.convDefLocalVar(node);\n break;\n case 'def_local_varlist':\n code += this.convDefLocalVarlist(node);\n break;\n case 'let':\n code += this.convLet(node);\n break;\n case 'let_prop':\n code += this.convLetProp(node);\n break;\n case 'ref_prop':\n code += this.convRefProp(node);\n break;\n case 'inc':\n code += this.convInc(node);\n break;\n case 'word':\n case 'variable':\n code += this.convGetVar(node);\n break;\n case 'op':\n case 'calc':\n code += this.convOp(node);\n break;\n case 'renbun':\n code += this.convRenbun(node);\n break;\n case 'not':\n code += '((' + this._convGen(node.blocks[0], true) + ')?false:true)';\n break;\n case 'func':\n case 'func_pointer':\n case 'calc_func':\n code += this.convCallFunc(node, isExpression);\n break;\n case 'call_value':\n code += this.convCallValue(node, isExpression);\n break;\n case 'if':\n code += this.convIf(node);\n break;\n case 'for':\n code += this.convFor(node);\n break;\n case 'foreach': // \u53CD\u5FA9\n code += this.convForeach(node);\n break;\n case 'repeat_times': // \u56DE\n code += this.convRepeatTimes(node);\n break;\n case 'speed_mode':\n code += this.convSpeedMode(node, isExpression);\n break;\n case 'performance_monitor':\n code += this.convPerformanceMonitor(node, isExpression);\n break;\n case 'while':\n code += this.convWhile(node);\n break;\n case 'atohantei':\n code += this.convAtohantei(node);\n break;\n case 'switch':\n code += this.convSwitch(node);\n break;\n case 'let_array':\n code += this.convLetArray(node);\n break;\n case 'ref_array':\n code += this.convRefArray(node);\n break;\n case 'ref_array_value':\n code += this.convRefArrayValue(node);\n break;\n case 'json_array':\n code += this.convJsonArray(node);\n break;\n case 'json_obj':\n code += this.convJsonObj(node);\n break;\n case 'bool':\n code += (node.value) ? 'true' : 'false';\n break;\n case 'null':\n code += 'null';\n break;\n case 'def_test':\n code += this.convDefTest(node);\n break;\n case 'def_func':\n code += this.convDefFunc(node);\n break;\n case 'func_obj':\n code += this.convFuncObj(node);\n break;\n case 'return':\n code += this.convReturn(node);\n break;\n case 'try_except':\n code += this.convTryExcept(node);\n break;\n case 'require':\n code += this.convRequire(node);\n break;\n default:\n throw new Error('System Error: unknown_type=' + node.type);\n }\n return code;\n }\n /** \u5909\u6570\u3092\u691C\u7D22 */\n findVar(name, jsvalue = null) {\n // __vars ? (\u30ED\u30FC\u30AB\u30EB\u5909\u6570)\n if (this.varslistSet.length > 3 && this.varsSet.names.has(name)) {\n return {\n i: this.varslistSet.length - 1,\n name,\n isTop: true,\n js: this.varname_get(name),\n js_set: this.varname_set(name, String(jsvalue))\n };\n }\n // \u5916\u5074\u306E\u7121\u540D\u95A2\u6570\u306E\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092\u30AF\u30ED\u30FC\u30B8\u30E3\u3068\u3057\u3066\u53C2\u7167\u3059\u308B #2268\n const currentFunc = this.functionContextStack[this.functionContextStack.length - 1];\n if (this.varslistSet.length > 4 && currentFunc?.isAnonymous) {\n const currentIndex = this.varslistSet.length - 1;\n for (let i = currentIndex - 1; i >= 3; i--) {\n if (this.varslistSet[i].names.has(name)) {\n for (const context of this.functionContextStack) {\n if (context.isAnonymous && context.varsIndex > i) {\n context.usesClosure = true;\n }\n }\n const nameJson = JSON.stringify(name);\n return {\n i,\n name,\n isTop: false,\n js: `__nako_closure.get(${nameJson})`,\n js_set: `__nako_closure.set(${nameJson}, ${jsvalue ?? 'undefined'})`\n };\n }\n }\n }\n // __varslist ?\n for (let i = 2; i >= 0; i--) {\n if (this.varslistSet[i].names.has(name)) {\n // \u30E6\u30FC\u30B6\u30FC\u306E\u5B9A\u7FA9\u3057\u305F\u30B0\u30ED\u30FC\u30D0\u30EB\u5909\u6570 (__varslist[2]) \u306F\u3001\u5909\u6570\u5C55\u958B\u3055\u308C\u3066\u3044\u308B\uFF08\u305D\u306E\u307E\u307E\u306E\u540D\u524D\u3067\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u308B\uFF09\u53EF\u80FD\u6027\u304C\u3042\u308B\u3002\n // \u305D\u308C\u4EE5\u5916\u306E\u5909\u6570\u306F\u3001\u5FC5\u305A__varslist\u306B\u5165\u3063\u3066\u3044\u308B\u3002\n return {\n i,\n name,\n isTop: false,\n js: `__self.__varslist[${i}].get(${JSON.stringify(name)})`,\n js_set: `__self.__varslist[${i}].set(${JSON.stringify(name)}, ${jsvalue ?? 'undefined'})`\n };\n }\n }\n return null;\n }\n /**\n * \u5B9A\u7FA9\u6E08\u307F\u306E\u5909\u6570\u306E\u53C2\u7167\n * @param {string} name\n * @param {Ast} position\n */\n genVar(name, position) {\n const res = this.findVar(name);\n const lno = position.line;\n if (res === null) {\n // \u5B9A\u7FA9\u3055\u308C\u3066\u3044\u306A\u3044\u540D\u524D\u306E\u53C2\u7167\u306F\u5909\u6570\u306E\u5B9A\u7FA9\u3068\u307F\u306A\u3059\u3002\n // \u591A\u304F\u306E\u5834\u5408\u306Fundefined\u5024\u3092\u6301\u3064\u5909\u6570\u3067\u3042\u308A\u5206\u304B\u308A\u3065\u3089\u3044\u30D0\u30B0\u3092\u5F15\u304D\u8D77\u3053\u3059\u304C\u3001\n // \u300C\u30CA\u30C7\u30B7\u30B3\u3059\u308B\u300D\u306A\u3069\u306E\u547D\u4EE4\u306E\u4E2D\u3067\u5B9A\u7FA9\u3055\u308C\u305F\u5909\u6570\u306E\u53C2\u7167\u306E\u5834\u5408\u304C\u3042\u308B\u305F\u3081\u8B66\u544A\u306B\u7559\u3081\u308B\u3002\n // \u305F\u3060\u3057\u3001\u81EA\u52D5\u7684\u306B\u5B9A\u7FA9\u3055\u308C\u308B\u5909\u6570\u300E\u5F15\u6570\u300F\u300E\u305D\u308C\u300F\u306A\u3069\u306F\u4F8B\u5916 #952\n if (name === '\u5F15\u6570' || name === '\u305D\u308C' || name === '\u5BFE\u8C61' || name === '\u5BFE\u8C61\u30AD\u30FC') {\n // \u30C7\u30D5\u30A9\u30EB\u30C8\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u308B\u5909\u6570\u540D\n }\n else {\n if (this.warnUndefinedVar) {\n // main__\u306F\u7701\u7565\u3057\u3066\u8868\u793A\u3059\u308B\u3088\u3046\u306B\u3002 #1223\n const dispName = name.replace(/^main__(.+)$/, '$1');\n this.__self.getLogger().warn(`\u5909\u6570\u300E${dispName}\u300F\u306F\u5B9A\u7FA9\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002`, position);\n }\n }\n this.varsSet.names.add(name);\n return this.varname_get(name);\n }\n const i = res.i;\n // \u30B7\u30B9\u30C6\u30E0\u95A2\u6570\u30FB\u5909\u6570\u306E\u5834\u5408\n if (i === 0) {\n const pv = this.__self.getNakoFunc(name);\n if (!pv) {\n return `${res.js}/*[link_error]l${lno}:${position.file ?? 'unknown'}*/`;\n }\n if (pv.type === 'const' || pv.type === 'var') {\n return res.js;\n }\n if (pv.type === 'func') {\n if (!pv.josi || pv.josi.length === 0) {\n return `(${res.js}())`;\n }\n throw NakoSyntaxError.fromNode(`\u300E${name}\u300F\u304C\u8907\u6587\u3067\u4F7F\u308F\u308C\u307E\u3057\u305F\u3002\u5358\u6587\u3067\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002(v1\u975E\u4E92\u63DB)`, position);\n }\n throw NakoSyntaxError.fromNode(`\u300E${name}\u300F\u306F\u95A2\u6570\u3067\u3042\u308A\u53C2\u7167\u3067\u304D\u307E\u305B\u3093\u3002`, position);\n }\n return res.js;\n }\n convGetVar(node) {\n // \u5909\u6570\u540D\u3092\u5F97\u308B\n const name = node.value;\n // \u5909\u6570\u3092\u53D6\u5F97\u3059\u308B\u30B3\u30FC\u30C9\u3092\u751F\u6210\n return this.genVar(name, node);\n }\n convBlock(node) {\n let code = '';\n for (const block of node.blocks) {\n code += this._convGen(block, false);\n }\n return code;\n }\n convComment(node) {\n let commentSrc = String(node.comment);\n // \u30B3\u30E1\u30F3\u30C8\u306E\u6539\u884C\u3084\u7A7A\u884C\u3092\u7121\u52B9\u5316\n commentSrc = commentSrc.replace(/\\n/g, '\u00B6');\n commentSrc = commentSrc.replace(/\\*\\//g, '\uFF0A\uFF0F');\n commentSrc = commentSrc.replace(/(^\\s+|\\s+$)/g, '');\n // \u30B3\u30E1\u30F3\u30C8\u306E\u884C\u756A\u53F7\u3092\u5F97\u308B\n const lineNo = this.convLineno(node, false);\n if (commentSrc === '' && lineNo === '') {\n return ';';\n }\n if (commentSrc === '') {\n return ';' + lineNo + '\\n';\n }\n return ';' + lineNo + '//' + commentSrc + '\\n';\n }\n convRunMode(node) {\n const mode = node.value;\n let isStrict = false;\n if (mode === '\u53B3\u3057\u304F\u30C1\u30A7\u30C3\u30AF') {\n // \u53B3\u3057\u304F\u30C1\u30A7\u30C3\u30AF\u30E2\u30FC\u30C9\u306E\u5834\u5408\u3001\u5909\u6570\u306E\u672A\u5B9A\u7FA9\u30C1\u30A7\u30C3\u30AF\u3092\u884C\u3046\n isStrict = true;\n }\n this.warnUndefinedVar = isStrict;\n this.warnUndefinedReturnUserFunc = isStrict;\n this.warnUndefinedCallingUserFunc = isStrict;\n this.warnUndefinedCallingSystemFunc = isStrict;\n this.warnUndefinedCalledUserFuncArgs = isStrict;\n return `/* \u5B9F\u884C\u30E2\u30FC\u30C9: ${mode} */`;\n }\n convReturn(node) {\n // \u95A2\u6570\u306E\u4E2D\u3067\u3042\u308C\u3070\u5229\u7528\u53EF\u80FD\n if (this.varsSet.names.has('!\u95A2\u6570')) {\n throw NakoSyntaxError.fromNode('\u300E\u623B\u308B\u300F\u304C\u3042\u308A\u307E\u3059\u304C\u3001\u95A2\u6570\u5B9A\u7FA9\u5185\u306E\u307F\u3067\u4F7F\u7528\u53EF\u80FD\u3067\u3059\u3002', node);\n }\n const astValue = node.blocks[0];\n const lno = this.convLineno(node, false);\n // \u623B\u308A\u5024\u306E\u30B3\u30FC\u30C9\u3092\u5F97\u308B\n let value = '';\n if (astValue.type !== 'nop') {\n value = this._convGen(astValue, true);\n }\n else if (this.speedMode.invalidSore === 0) {\n value = this.varname_get('\u305D\u308C');\n }\n // \u623B\u308A\u5024\u306E\u306A\u3044\u95A2\u6570\u306E\u5834\u5408\n if (value === '') {\n return lno + 'return;';\n }\n // \u623B\u308A\u5024\u304Cundefind\u304B\u3092\u30C1\u30A7\u30C3\u30AF\u3059\u308B\u304B\u3069\u3046\u304B\n if (!this.warnUndefinedReturnUserFunc) {\n return lno + `return ${value};`;\n }\n else {\n const funcName = (this.defFuncName) ? this.defFuncName : '\u7121\u540D\u95A2\u6570';\n const poolIndex = this.addConstPool(`\u30E6\u30FC\u30B6\u95A2\u6570\u300E${funcName}\u300F\u304B\u3089undefined\u304C\u8FD4\u3055\u308C\u3066\u3044\u307E\u3059`, [], node.file, node.line);\n return lno + `return (__self.chk(${value}, ${poolIndex}));`;\n }\n }\n getConstPoolsTemplateId(msg) {\n let id = this.constPoolsTemplate.indexOf(msg);\n if (id < 0) {\n id = this.constPoolsTemplate.length;\n this.constPoolsTemplate[id] = msg;\n }\n return id;\n }\n addConstPool(msg, args, file, line) {\n // file\n file = String(file);\n const fileNo = this.getConstPoolsTemplateId(file);\n // msg\n const msgNo = this.getConstPoolsTemplateId(msg);\n // args\n const args2 = [];\n for (const arg of args) {\n const argStr = '' + String(arg);\n const argNo = this.getConstPoolsTemplateId(argStr);\n args2.push(argNo);\n }\n const poolIndex = this.constPools.length;\n this.constPools.push([msgNo, args2, fileNo, line]);\n return poolIndex;\n }\n convCheckLoop(node, cmd) {\n // \u30EB\u30FC\u30D7\u306E\u4E2D\u3067\u3042\u308C\u3070\u5229\u7528\u53EF\u80FD\n if (!this.flagLoop) {\n const cmdj = (cmd === 'continue') ? '\u7D9A\u3051\u308B' : '\u629C\u3051\u308B';\n throw NakoSyntaxError.fromNode(`\u300E${cmdj}\u300F\u6587\u304C\u3042\u308A\u307E\u3059\u304C\u3001\u305D\u308C\u306F\u7E70\u308A\u8FD4\u3057\u306E\u4E2D\u3067\u5229\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002`, node);\n }\n return this.convLineno(node) + cmd + ';';\n }\n convDefFuncCommon(node, name) {\n // \u5B9A\u7FA9\u4E2D\u306E\u95A2\u6570\u540D\u3092\u8A18\u9332\n this.defFuncName = name;\n // \u5909\u6570\u3092JS\u5909\u6570\u306B\u5C55\u958B\u3059\u308B\u304B\u3069\u3046\u304B (TODO)\n const isExtractJS = false;\n // \u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u30E2\u30CB\u30BF:\u30E6\u30FC\u30B6\u95A2\u6570\u306Einject\u306E\u5B9A\u7FA9\n let performanceMonitorInjectAtStart = '';\n let performanceMonitorInjectAtEnd = '';\n if (this.performanceMonitor.userFunction !== 0) {\n let key = name;\n if (!key) {\n if (typeof this.performanceMonitor.mumeiId === 'undefined') {\n this.performanceMonitor.mumeiId = 0;\n }\n this.performanceMonitor.mumeiId++;\n key = `anous_${this.performanceMonitor.mumeiId}`;\n }\n performanceMonitorInjectAtStart = 'const performanceMonitorEnd = (function (key, type) {\\n' +\n 'const uf_start = performance.now() * 1000;\\n' +\n 'return function () {\\n' +\n 'const el_time = performance.now() * 1000 - uf_start;\\n' +\n 'if (!__self.__performance_monitor) {\\n' +\n '__self.__performance_monitor={};\\n' +\n '__self.__performance_monitor[key] = { called:1, totel_usec: el_time, min_usec: el_time, max_usec: el_time, type: type };\\n' +\n '} else if (!__self.__performance_monitor[key]) {\\n' +\n '__self.__performance_monitor[key] = { called:1, totel_usec: el_time, min_usec: el_time, max_usec: el_time, type: type };\\n' +\n '} else {\\n' +\n '__self.__performance_monitor[key].called++;\\n' +\n '__self.__performance_monitor[key].totel_usec+=el_time;\\n' +\n 'if(__self.__performance_monitor[key].min_usec>el_time){__self.__performance_monitor[key].min_usec=el_time;}\\n' +\n 'if(__self.__performance_monitor[key].max_usec<el_time){__self.__performance_monitor[key].max_usec=el_time;}\\n' +\n `}};})('${key}', 'user');` +\n 'try {\\n';\n performanceMonitorInjectAtEnd = '} finally { performanceMonitorEnd(); }\\n';\n }\n let variableDeclarations = '';\n const indent = ' ';\n let pushStack = '';\n let popStack = '';\n const initialNames = new Set();\n if (this.speedMode.invalidSore === 0) {\n initialNames.add('\u305D\u308C');\n }\n this.varsSet = { isFunction: true, names: initialNames, readonly: new Set() };\n // \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092PUSH\u3059\u308B\n this.varslistSet.push(this.varsSet);\n const funcContext = {\n isAnonymous: name === '',\n varsIndex: this.varslistSet.length - 1,\n usesClosure: false\n };\n this.functionContextStack.push(funcContext);\n // JS\u306E\u5F15\u6570\u3068\u5F15\u6570\u3092\u30D0\u30A4\u30F3\u30C9\n if (isExtractJS) {\n variableDeclarations += indent + 'var \u5F15\u6570 = arguments;\\n';\n }\n else {\n variableDeclarations += indent + '__self.__vars.set(\\'\u5F15\u6570\\', arguments);\\n';\n }\n // \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092\u751F\u6210 (\u518D\u5E30\u95A2\u6570\u547C\u3073\u51FA\u3057\u3067\u5F15\u6570\u306E\u5024\u304C\u58CA\u308C\u308B\u554F\u984C\u304C\u3042\u308B\u306E\u3067\u4FEE\u6B63 #1663 / \u30BF\u30A4\u30DF\u30F3\u30B0\u306B\u3088\u3063\u3066\u58CA\u308C\u308B\u306E\u3067\u4FEE\u7406 #1758)\n // \u66AB\u5B9A\u5909\u6570__localVars\u306B\u73FE\u5728\u306E\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u306E\u5024\u3092PUSH\u3057\u3001\u5909\u6570\u3092\u629C\u3051\u308B\u6642\u306BPOP\u3059\u308B)\n // \u95A2\u6570\u3068\u3057\u3066\u5BA3\u8A00\u3057\u3066\u3044\u308B\u304C\u3001JS\u95A2\u6570\u3068\u306A\u3067\u3057\u3053\u95A2\u6570\u3067\u306F\u5909\u6570\u7BA1\u7406\u306E\u65B9\u6CD5\u304C\u7570\u306A\u308B\u305F\u3081\u3001\u5B8C\u5168\u306A\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3068\u3057\u3066\u306F\u4F7F\u3048\u306A\u3044\n // \u5FC5\u305A\u3001pushStack/popStack \u3059\u308B\u5FC5\u8981\u304C\u3042\u308B\n pushStack += '\\n// PUSH STACK\\n';\n pushStack += 'const __localvars = __self.__vars;\\n';\n pushStack += '__self.__vars = new Map();\\n';\n pushStack += 'try {\\n';\n popStack += '} finally {\\n';\n popStack += indent + '// POP STACK\\n';\n popStack += indent + 'self.__vars = __localvars;\\n';\n popStack += '}\\n';\n // \u5BA3\u8A00\u6E08\u307F\u306E\u540D\u524D\u3092\u4FDD\u5B58\n const varsDeclared = Array.from(this.varsSet.names.values());\n let code = '';\n // \u5F15\u6570\u3092\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u306B\u8A2D\u5B9A\n const meta = node.meta;\n if (!meta) {\n throw new Error('[System Error] \u95A2\u6570\u306E\u5B9A\u7FA9\u3067\u30E1\u30BF\u60C5\u5831\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093');\n }\n if (!meta.varnames) {\n meta.varnames = [];\n }\n for (let i = 0; i < meta.varnames.length; i++) {\n const word = meta.varnames[i];\n if (word === '\u5F15\u6570') {\n continue;\n }\n if (!this.warnUndefinedCalledUserFuncArgs) {\n code += indent + this.varname_set(word, `arguments[${i}]`) + ';\\n';\n }\n else {\n // check undefined\n let errMsg = `\u533F\u540D\u95A2\u6570\u306E\u5F15\u6570\u300E${word}\u300F\u306Bundefined\u304C\u6E21\u3055\u308C\u307E\u3057\u305F`;\n if (name) {\n errMsg = `\u30E6\u30FC\u30B6\u95A2\u6570\u300E${name}\u300F\u306E\u5F15\u6570\u300E${word}\u300F\u306Bundefined\u304C\u6E21\u3055\u308C\u307E\u3057\u305F`;\n }\n const warnJS = `__self.logger.warn('${errMsg}', {line: ${node.line}, file: ${JSON.stringify(node.file)}});`;\n const checkFunc = `((a) => { if (a === undefined) { ${warnJS} }; return a; })`;\n const callCheckFunc = `${checkFunc}(arguments[${i}])`;\n code += indent + this.varname_set(word, callCheckFunc) + ';\\n';\n }\n this.varsSet.names.add(word);\n }\n // \u95A2\u6570\u5B9A\u7FA9\u306F\u3001\u30B0\u30ED\u30FC\u30D0\u30EB\u9818\u57DF\u3067\u3002\n if (name) {\n this.usedFuncSet.add(name);\n this.varslistSet[1].names.add(name);\n if (this.nakoFuncList.get(name) === undefined) {\n if (!node.meta) {\n throw new Error('[System Error] \u95A2\u6570\u306E\u5B9A\u7FA9\u3067\u30E1\u30BF\u60C5\u5831\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093');\n }\n // \u65E2\u306B generate \u3067\u4F5C\u6210\u6E08\u307F\u306E\u306F\u305A(\u5FF5\u306E\u305F\u3081)\n this.nakoFuncList.set(name, {\n josi: node.meta.josi,\n fn: () => { },\n type: 'func',\n asyncFn: false,\n isExport: null\n });\n this.__self.getLogger().warn(`generate\u3067\u672A\u5B9A\u7FA9\u306E\u72B6\u614B\u306E\u95A2\u6570\u300E${name}\u300F\u304C\u52D5\u7684\u306B\u767B\u9332\u3055\u308C\u3066\u3044\u307E\u3059\u3002`);\n }\n }\n // \u30D6\u30ED\u30C3\u30AF\u3092\u89E3\u6790\n const oldUsedAsyncFn = this.usedAsyncFn;\n this.usedAsyncFn = false;\n if (this.debugOption.useDebug) {\n this.usedAsyncFn = true;\n }\n const block = this._convGen(node.blocks[0], false);\n code += block.split('\\n').map((line) => ' ' + line).join('\\n') + '\\n';\n // \u95A2\u6570\u306E\u6700\u5F8C\u306B\u3001\u5909\u6570\u300C\u305D\u308C\u300D\u3092return\u3059\u308B\u3088\u3046\u306B\u3059\u308B\n if (this.speedMode.invalidSore === 0) {\n code += ` return (${this.varname_get('\u305D\u308C')});\\n`;\n }\n // \u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u30E2\u30CB\u30BF:\u30E6\u30FC\u30B6\u95A2\u6570\u306Einject\n code += performanceMonitorInjectAtEnd;\n // \u540D\u524D\u306E\u3042\u308B\u95A2\u6570\u3067\u975E\u540C\u671F\u95A2\u6570\u3067\u3042\u308C\u3070\u3001\u95A2\u6570\u306Basync\u3092\u4ED8\u4E0E\u3059\u308B\n if (name && this.usedAsyncFn) {\n const f = this.nakoFuncList.get(name);\n if (f) {\n f.asyncFn = true;\n }\n }\n // \u95A2\u6570\u306E\u672B\u5C3E\u306B\u3001\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092POP\n // \u95A2\u6570\u5185\u3067\u5B9A\u7FA9\u3055\u308C\u305F\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u306E\u5BA3\u8A00\n if (isExtractJS) {\n for (const name of Array.from(this.varsSet.names.values())) {\n if (!varsDeclared.includes(name)) {\n if (NakoGen.isValidIdentifier(name)) {\n variableDeclarations += ` var ${name};\\n`;\n }\n }\n }\n if (this.speedMode.invalidSore === 0) {\n if (NakoGen.isValidIdentifier('\u305D\u308C')) {\n variableDeclarations += ' var \u305D\u308C = \\'\\';\\n';\n }\n else {\n variableDeclarations += ` ${this.varname_get('\u305D\u308C')} = '';`;\n }\n }\n }\n // usedAsyncFn\u306E\u5024\u306B\u5FDC\u3058\u3066\u95A2\u6570\u5B9A\u7FA9\u306E\u65B9\u6CD5\u3092\u5909\u66F4\n const tof = (this.usedAsyncFn) ? topOfFunctionAsync : topOfFunction;\n // \u95A2\u6570\u30B3\u30FC\u30C9\u5168\u4F53\u3092\u69CB\u7BC9\n const lineInfo = ' ' + this.convLineno(node, true, 1) + '\\n';\n code = tof + performanceMonitorInjectAtStart + pushStack + variableDeclarations + lineInfo + code + popStack;\n code += endOfFunction;\n if (funcContext.isAnonymous && funcContext.usesClosure) {\n const parentClosure = `(typeof __nako_closure === 'undefined' ? null : __nako_closure)`;\n code = `(function(__nako_closure) {\\n return ${code}\\n})(__nako_make_closure(__self.__vars, ${parentClosure}))`;\n }\n // \u540D\u524D\u304C\u3042\u308C\u3070\u3001\u95A2\u6570\u3092\u767B\u9332\u3059\u308B\n if (name) {\n const nameFuncValue = this.nakoFuncList.get(name);\n if (nameFuncValue) {\n nameFuncValue.fn = code;\n nameFuncValue.asyncFn = this.usedAsyncFn;\n meta.asyncFn = this.usedAsyncFn;\n }\n }\n this.usedAsyncFn = oldUsedAsyncFn; // \u4EE5\u524D\u306E\u5024\u3092\u623B\u3059\n this.varslistSet.pop();\n this.functionContextStack.pop();\n this.varsSet = this.varslistSet[this.varslistSet.length - 1];\n if (name) {\n this.__self.__varslist[1].set(name, code);\n }\n this.defFuncName = ''; // \u95A2\u6570\u540D\u3092\u30AF\u30EA\u30A2\n return code;\n }\n convDefTest(node) {\n const name = node.name;\n let code = `__tests.push({ name: '${name}', f: () => {\\n`;\n // \u30D6\u30ED\u30C3\u30AF\u3092\u89E3\u6790\n const block = this._convGen(node.blocks[0], false);\n code += ` ${block}\\n` +\n '}});';\n if (!node.meta) {\n throw new Error('[System Error] \u30C6\u30B9\u30C8\u306E\u30E1\u30BF\u60C5\u5831\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093');\n }\n this.nakoTestFuncs.set(name, {\n josi: node.meta.josi,\n fn: code,\n type: 'test_func'\n });\n // \u2605\u3053\u306E\u6642\u70B9\u3067\u306F\u30C6\u30B9\u30C8\u30B3\u30FC\u30C9\u3092\u751F\u6210\u3057\u306A\u3044\u2605\n // \u30D7\u30ED\u30B0\u30E9\u30E0\u5192\u982D\u3067\u30B3\u30FC\u30C9\u751F\u6210\u6642\u306B\u30C6\u30B9\u30C8\u306E\u5B9A\u7FA9\u3092\u884C\u3046\n return '';\n }\n convDefFunc(node) {\n // \u203B [\u95A2\u6570\u5B9A\u7FA9\u306E\u30E1\u30E2]\n // \u203B \u95A2\u6570\u306E\u5B9A\u7FA9\u306F\u30D7\u30ED\u30B0\u30E9\u30E0\u306E\u5192\u982D\u306B\u79FB\u3055\u308C\u308B\u3002\n // \u203B \u305D\u306E\u305F\u3081\u3001\u751F\u6210\u3055\u308C\u305F\u30B3\u30FC\u30C9\u306F\u3053\u3053\u3067\u306F\u8FD4\u3055\u306A\u3044\n // \u203B registerFunction \u3092\u53C2\u7167\n if (!node.name) {\n return '';\n }\n const name = NakoGen.getFuncName(node.name);\n this.convDefFuncCommon(node, name);\n return '';\n }\n convFuncObj(node) {\n return '/*convFuncObj*/' + this.convDefFuncCommon(node, '');\n }\n convJsonObj(node) {\n const resultArray = [];\n const list = node.blocks;\n for (let i = 0; i < list.length / 2; i++) {\n const idx = i * 2;\n const key = list[idx + 0];\n const val = list[idx + 1];\n const keyStr = this._convGen(key, true);\n const valStr = this._convGen(val, true);\n resultArray.push(`${keyStr}: ${valStr}`);\n }\n return '{' + resultArray.join(', ') + '}';\n }\n convJsonArray(node) {\n const list = node.blocks;\n const codelist = list.map((e) => {\n return this._convGen(e, true);\n });\n return '[' + codelist.join(',') + ']';\n }\n convRefArray(node) {\n let code = '';\n code = this._convGen(node.name, true);\n const list = node.index;\n if (!list) {\n return code;\n }\n for (let i = 0; i < list.length; i++) {\n const idx = this._convGen(list[i], true);\n code += '[' + idx + ']';\n }\n return code;\n }\n convRefArrayValue(node) {\n let code = '';\n const op = node.name ? String(node.name) : '???';\n const val = node.index ? node.index.shift() : undefined;\n if (!val) {\n return '/*[WARNING] convRefArrayOperator::InvalidValue */';\n }\n code = this._convGen(val, true);\n const list = node.index;\n if (!list) {\n return code;\n }\n if (op === '@' || op === '[') {\n for (let i = 0; i < list.length; i++) {\n const idx = this._convGen(list[i], true);\n code += '[' + idx + ']';\n }\n return code;\n }\n if (op === '$') {\n return this.convRefProp_genCode(code, list);\n }\n // operator not found\n const op2 = op.replace('*/', '\uFF0A/');\n return `/* [WARNING] convRefArrayOperator::UnknownOperator [${op2}] */` + code;\n }\n convLetArray(node) {\n const id = this.loopId++;\n const valueNode = node.blocks[0];\n const indexNodes = node.blocks.slice(1);\n const name = this.genVar(node.name, node);\n let codeInit = '';\n let code = name;\n let codeArray = '';\n // codeInit?\n if (node.checkInit) { // DNCL\u306E\u305F\u3081\u306E\u521D\u671F\u5316\u51E6\u7406 ... DNCL\u3067\u306F\u914D\u5217\u306E\u521D\u671F\u5316\u306A\u3057\u3067\u3044\u304D\u306A\u308A\u914D\u5217\u3092\u4F7F\u3046\u8A66\u9A13\u554F\u984C\u304C\u3042\u308B\u305F\u3081\n const arrayDefCode = '[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]';\n // [name]\u306E\u5185\u5BB9\u306F[__self.__varslist[2].get(\"a__A\")]\u306E\u3088\u3046\u306A\u3082\u306E\u306B\u306A\u3063\u3066\u3044\u308B\u306F\u305A\n if (node.name) {\n const word = node.name;\n const tmpVar = `$nako_tmp_a${id}`;\n const initArrayCode = this.varname_set(word, arrayDefCode);\n codeInit += `\\n/*\u914D\u5217\u521D\u671F\u5316*/if (!(${name} instanceof Array)) { ${initArrayCode} };\\n`;\n codeInit += `${tmpVar} = ${name};\\n`;\n for (let i = 0; i < indexNodes.length - 1; i++) {\n const idx = this._convGen(indexNodes[i], true);\n codeArray += `[${idx}]`;\n codeInit += `\\n/*\u914D\u5217\u521D\u671F\u5316${i}*/if (!(${tmpVar}${codeArray} instanceof Array)) { ${tmpVar}${codeArray} = ${arrayDefCode}; };`;\n }\n codeInit += '\\n';\n }\n }\n // array\n for (let i = 0; i < indexNodes.length; i++) {\n const idx = this._convGen(indexNodes[i], true);\n code += '[' + idx + ']';\n }\n // value\n let value = null;\n if (this.speedMode.invalidSore === 0) {\n value = this.varname_get('\u305D\u308C');\n }\n if (valueNode.type !== 'nop') {\n value = this._convGen(valueNode, true);\n }\n if (value === null) {\n throw NakoSyntaxError.fromNode('\u4EE3\u5165\u3059\u308B\u5148\u306E\u5909\u6570\u540D\u304C\u3042\u308A\u307E\u305B\u3093\u3002', node);\n }\n code += ' = ' + value + ';\\n';\n // generate code\n const src = this.convLineno(node, false) + codeInit + code;\n return src;\n }\n convGenLoop(node) {\n const tmpflag = this.flagLoop;\n this.flagLoop = true;\n try {\n return this._convGen(node, false);\n }\n finally {\n this.flagLoop = tmpflag;\n }\n }\n convFor(node) {\n const astFrom = node.blocks[0];\n const astTo = node.blocks[1];\n const astInc = node.blocks[2];\n const astBlock = node.blocks[3];\n // for\u306EID\u3092\u53D6\u5F97\n const idLoop = this.loopId++;\n const varI = `$nako_i${idLoop}`;\n // \u30EB\u30FC\u30D7\u5909\u6570\u306B\u3064\u3044\u3066\n let loopVarSetter = '';\n if (node.word !== '') { // \u30EB\u30FC\u30D7\u5909\u6570\u3092\u4F7F\u3046\u6642\n const varName = node.word;\n this.varsSet.names.add(varName);\n loopVarSetter = this.varname_set(varName, varI);\n }\n // \u30EB\u30FC\u30D7\u6761\u4EF6\u3092\u5909\u6570\u306B\u5165\u308C\u308B\u7528\n const varFrom = `$nako_from${idLoop}`;\n const varTo = `$nako_to${idLoop}`;\n const varTemp = `$nako_temp${idLoop}`;\n let sorePrefex = '';\n if (this.speedMode.invalidSore === 0) {\n sorePrefex = this.varname_set('\u305D\u308C', varI);\n }\n // \u30EB\u30FC\u30D7\u6761\u4EF6\u3092\u78BA\u8A8D\n let kara = '0';\n let made = '0';\n let temp = '0';\n if (astTo && astTo.type === 'func' && astTo.name === '\u7BC4\u56F2') {\n temp = this._convGen(astTo, true);\n kara = `${varTemp}['\u5148\u982D'] || 0`;\n made = `${varTemp}['\u672B\u5C3E'] || 0`;\n }\n else {\n kara = this._convGen(astFrom, true);\n made = this._convGen(astTo, true);\n }\n const flagDown = node.flagDown;\n const flagUp = node.flagUp;\n let inc = '1';\n if (astInc.type !== 'nop') {\n inc = this._convGen(astInc, true);\n }\n // \u30EB\u30FC\u30D7\u5185\u306E\u30D6\u30ED\u30C3\u30AF\u5185\u5BB9\u3092\u5F97\u308B\n const block = this.convGenLoop(astBlock);\n const code = this.convLineno(node, false) + '\\n' +\n `/*[convFor id=${idLoop}]*/\\n` +\n `const ${varTemp} = ${temp};\\n` +\n `const ${varFrom} = ${kara};\\n` +\n `const ${varTo} = ${made};\\n` +\n `if (${varFrom} < ${varTo}) { // up\\n` +\n ` if (${String(flagUp)}) {` +\n ` for (let ${varI} = ${varFrom}; ${varI} <= ${varTo}; ${varI}+= ${inc}) {\\n` +\n ` ${sorePrefex};${loopVarSetter}\\n` +\n ' // for block begin\\n' +\n ` ${block}\\n` +\n ' // for block end\\n' +\n ' };\\n' +\n ' };\\n' +\n `} else if (${varFrom} > ${varTo}) { // down\\n` +\n ` if (${String(flagDown)}) {` +\n ` for (let ${varI} = ${varFrom}; ${varI} >= ${varTo}; ${varI}-= ${inc}) {\\n` +\n ` ${sorePrefex};${loopVarSetter}\\n` +\n ' // for block begin\\n' +\n ` ${block}\\n` +\n ' // for block end\\n' +\n ' }\\n' +\n ' };\\n' +\n '} else { // from == to\\n' +\n ` for (let ${varI} = ${varFrom}; ${varI} <= ${varTo}; ${varI}+= 1) {\\n` +\n ` ${sorePrefex};${loopVarSetter}\\n` +\n ' // for block begin\\n' +\n ` ${block}\\n` +\n ' // for block end\\n' +\n ' };\\n' +\n '};\\n' +\n `//[/convFor id=${idLoop}]\\n`;\n return code;\n }\n convForeach(node) {\n const exprAst = node.blocks[0];\n const blockAst = node.blocks[1];\n // foreach\u306EID\u3092\u53D6\u5F97\n const id = this.loopId++;\n const loopKeyVar = `$nako_i${id}`;\n const loopValueVar = `$nako_foreach_value${id}`;\n const loopDataVar = `$nako_foreach_data${id}`;\n const taisyouTemp = `$nako_taisyou_temp${id}`;\n const taisyouKeyTemp = `$nako_taisyou_key_temp${id}`;\n const soreTemp = `$nako_foreach_sore_temp${id}`;\n // \u300C\u5BFE\u8C61\u300D\u300C\u5BFE\u8C61\u30AD\u30FC\u300D\u3092\u53D6\u5F97 --- block\u3088\u308A\u65E9\u304F\u5909\u6570\u3092\u5B9A\u7FA9\u3059\u308B\u5FC5\u8981\u304C\u3042\u308B\n let taisyoPrefex = this.varname_set_sys('\u5BFE\u8C61', loopValueVar);\n if (node.word !== '') { // \u5BFE\u8C61\u5909\u6570\u304C\u3042\u308B\u5834\u5408\u3001\u5BFE\u8C61\u306F\u8A2D\u5B9A\u3055\u308C\u306A\u3044\n const valueVar = node.word;\n this.varsSet.names.add(valueVar);\n taisyoPrefex = this.varname_set(valueVar, loopValueVar);\n }\n const keyVar = '\u5BFE\u8C61\u30AD\u30FC';\n const keySetter = this.varname_set_sys(keyVar, loopKeyVar);\n // \u300C\u305D\u308C\u300D(\u5BFE\u8C61\u306E\u30A8\u30A4\u30EA\u30A2\u30B9)\u306E\u8A2D\u5B9A\n let sorePrefex = '';\n let soreRecover = '';\n let soreBackup = '';\n if (this.speedMode.invalidSore === 0) {\n sorePrefex = this.varname_set('\u305D\u308C', loopValueVar);\n soreRecover = this.varname_set('\u305D\u308C', soreTemp);\n soreBackup = `let ${soreTemp} = ` + this.varname_get('\u305D\u308C') + ';';\n }\n // \u53CD\u5FA9\u3059\u308B\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\n let targetData = '';\n if (exprAst.type === 'nop') {\n if (this.speedMode.invalidSore === 0) {\n targetData = this.varname_get('\u305D\u308C');\n }\n else {\n throw NakoSyntaxError.fromNode('\u300E\u53CD\u5FA9\u300F\u306E\u5BFE\u8C61\u304C\u3042\u308A\u307E\u305B\u3093\u3002', node);\n }\n }\n else {\n targetData = this._convGen(exprAst, true);\n }\n // \u53CD\u5FA9\u3059\u308B\u30D6\u30ED\u30C3\u30AF\u3092\u53D6\u5F97\n const block = trim(cleanGeneratedCode(this.convGenLoop(blockAst), 1));\n // \u30B3\u30FC\u30C9\u3092\u751F\u6210\n const code = this.convLineno(node, false) + '\\n' +\n `// [convForeach id=${id}]\\n` +\n `const ${taisyouTemp} = __self.__getSysVar('\u5BFE\u8C61'); ${soreBackup}; ` +\n `const ${taisyouKeyTemp} = __self.__getSysVar('\u5BFE\u8C61\u30AD\u30FC');\\n` +\n `let ${loopDataVar} = ${targetData};\\n` +\n '// foreach Map?\\n' +\n `if (${loopDataVar} instanceof Map) { // Object\u306B\u5F37\u5236\u5909\u63DB\\n` +\n ` let tmp = {}; for (let tmpKey of ${loopDataVar}.keys()) { tmp[tmpKey] = ${loopDataVar}.get(tmpKey); }; \\n` +\n ` ${loopDataVar} = tmp;\\n` +\n '}\\n' +\n `for (let ${loopKeyVar} in ${loopDataVar}) {\\n` +\n ` if (!${loopDataVar}.hasOwnProperty(${loopKeyVar})) { continue }\\n` +\n ' // \u5BFE\u8C61\u30AD\u30FC\u306E\u8A2D\u5B9A\\n' +\n ` ${keySetter}\\n` +\n ' // \u5BFE\u8C61\u306E\u8A2D\u5B9A\\n' +\n ` let ${loopValueVar} = $nako_foreach_data${id}[${loopKeyVar}]\\n` +\n ` ${sorePrefex};\\n` +\n ` ${taisyoPrefex};\\n` +\n ' // [convForeach::block]\\n' +\n ` ${block}\\n` +\n ' // [/convForeach::block]\\n' +\n '}\\n' +\n `__self.__setSysVar('\u5BFE\u8C61', ${taisyouTemp});${soreRecover};` +\n `__self.__setSysVar('\u5BFE\u8C61\u30AD\u30FC', ${taisyouKeyTemp});` +\n `// [/convForeach id=${id}]\\n`;\n return code;\n }\n convRepeatTimes(node) {\n // \u30EB\u30FC\u30D7\u306EID\u3092\u53D6\u5F97\n const id = this.loopId++;\n const varI = `$nako_i${id}`;\n const varCount = `$nako_times_data${id}`;\n const varKaisuTemp = `$nako_kaisu_temp${id}`;\n const codeCount = this._convGen(node.blocks[0], true);\n // \u30D6\u30ED\u30C3\u30AF\u3092\u5F97\u308B\n const block = trim(cleanGeneratedCode(this.convGenLoop(node.blocks[1]), 1));\n // \u305D\u308C\n let sorePrefex = '';\n let soreRecover = '';\n if (this.speedMode.invalidSore === 0) {\n sorePrefex = this.varname_set('\u305D\u308C', varI);\n soreRecover = this.varname_set('\u305D\u308C', varKaisuTemp);\n }\n // \u56DE\u6570\n sorePrefex += `;__self.__setSysVar('\u56DE\u6570', ${varI});`;\n soreRecover += `;__self.__setSysVar('\u56DE\u6570', ${varKaisuTemp});`;\n const code = this.convLineno(node, false) + '\\n' +\n `// [convRepeatTimes id=${id}] // \u300En\u56DE\u300F\u69CB\u6587\\n` +\n `let ${varKaisuTemp} = __self.__getSysVar('\u56DE\u6570')\\n` +\n `let ${varCount} = ${codeCount};\\n` +\n `for (let ${varI} = 1; ${varI} <= ${varCount}; ${varI}++) {\\n` +\n ` ${sorePrefex}\\n` +\n ` ${block}\\n` +\n '}\\n' +\n `${soreRecover}\\n` +\n `// [/convRepeatTimes id=${id}]\\n`;\n return code;\n }\n /**\n * @param {Ast} node\n * @param {boolean} isExpression\n */\n convSpeedMode(node, isExpression) {\n if (!node.options) {\n return '';\n }\n const prev = { ...this.speedMode };\n if (node.options['\u884C\u756A\u53F7\u7121\u3057']) {\n this.speedMode.lineNumbers++;\n }\n if (node.options['\u6697\u9ED9\u306E\u578B\u5909\u63DB\u7121\u3057']) {\n this.speedMode.implicitTypeCasting++;\n }\n if (node.options['\u5F37\u5236\u30D4\u30E5\u30A2']) {\n this.speedMode.forcePure++;\n }\n if (node.options['\u305D\u308C\u7121\u52B9']) {\n this.speedMode.invalidSore++;\n }\n try {\n return this._convGen(node.blocks[0], isExpression);\n }\n finally {\n this.speedMode = prev;\n }\n }\n /**\n * @param {Ast} node\n * @param {boolean} isExpression\n */\n convPerformanceMonitor(node, isExpression) {\n const prev = { ...this.performanceMonitor };\n if (!node.options) {\n return '';\n }\n if (node.options['\u30E6\u30FC\u30B6\u95A2\u6570']) {\n this.performanceMonitor.userFunction++;\n }\n if (node.options['\u30B7\u30B9\u30C6\u30E0\u95A2\u6570\u672C\u4F53']) {\n this.performanceMonitor.systemFunctionBody++;\n }\n if (node.options['\u30B7\u30B9\u30C6\u30E0\u95A2\u6570']) {\n this.performanceMonitor.systemFunction++;\n }\n try {\n return this._convGen(node.blocks[0], isExpression);\n }\n finally {\n this.performanceMonitor = prev;\n }\n }\n convWhile(node) {\n const exprAst = node.blocks[0];\n const blockAst = node.blocks[1];\n const cond = this._convGen(exprAst, true);\n const block = trim(cleanGeneratedCode(this.convGenLoop(blockAst), 1));\n const code = '// [convWhile]\\n' +\n this.convLineno(node, false) + '\\n' +\n `while (${cond})` + '{\\n' +\n ` ${block}` + '\\n' +\n '}\\n' +\n '// [convWhile]\\n';\n return code;\n }\n convAtohantei(node) {\n const id = this.loopId++;\n const varId = `$nako_i${id}`;\n const cond = this._convGen(node.blocks[0], true);\n const block = this.convGenLoop(node.blocks[1]);\n const code = 'while (true) {\\n' +\n ` ${block}\\n` +\n ` let ${varId} = ${cond};\\n` +\n ` if (${varId}) { continue } else { break }\\n` +\n '}\\n\\n';\n return this.convLineno(node, false) + code;\n }\n convSwitch(node) {\n const expr = this._convGen(node.blocks[0], true);\n const defaultStr = this._convGen(node.blocks[1], false);\n let body = '';\n for (let i = 0; i < node.case_count; i++) {\n const caseIndex = i * 2 + 2;\n const condStr = this._convGen(node.blocks[caseIndex + 0], true);\n const blockStr = this.convGenLoop(node.blocks[caseIndex + 1]);\n body += ` case ${condStr}:\\n`;\n body += ` ${blockStr}\\n` +\n ' break\\n';\n }\n const code = '// [switch]\\n' +\n `switch (${expr})` + '{\\n' +\n `${body}` + '\\n' +\n ' default:\\n' +\n ` ${defaultStr}\\n` +\n '}\\n' +\n '// [/switch]\\n';\n return this.convLineno(node, false) + code;\n }\n convIf(node) {\n const exprAst = node.blocks[0];\n const trueAst = node.blocks[1];\n const falseAst = node.blocks[2];\n // \u6761\u4EF6\n const expr = this._convGen(exprAst, true);\n // TRUE\u30D6\u30ED\u30C3\u30AF\n const trueBlock = trim(cleanGeneratedCode(this._convGen(trueAst, false), 1));\n // FALSE\u30D6\u30ED\u30C3\u30AF\n const falseBlock = trim(cleanGeneratedCode(this._convGen(falseAst, false), 1));\n let code = '// [convIf]\\n' +\n this.convLineno(node, false) + '\\n' +\n `if (${expr}) {\\n` +\n ` ${trueBlock}\\n` +\n '}';\n if (trim(falseBlock) !== '') {\n code +=\n ' else {\\n' +\n ` ${falseBlock}\\n` +\n '}\\n';\n }\n code += '\\n// [/convIf]\\n';\n return code;\n }\n convFuncGetArgsCalcType(_funcName, _func, node) {\n const args = [];\n const opts = {};\n const nodeArgs = (node.blocks) ? node.blocks : [];\n for (let i = 0; i < nodeArgs.length; i++) {\n const arg = nodeArgs[i];\n if (i === 0 && arg === null && this.speedMode.invalidSore === 0) {\n args.push(this.varname_get('\u305D\u308C'));\n opts.sore = true;\n }\n else {\n let argCode = this._convGen(arg, true);\n if (argCode === '') {\n argCode = 'undefined';\n }\n if (typeof argCode !== 'string') {\n argCode = 'undefined';\n }\n args.push(`/*arg${i}*/${argCode}`);\n }\n }\n return [args, opts];\n }\n getPluginList() {\n const r = [];\n for (const name in this.__self.__module) {\n r.push(name);\n }\n return r;\n }\n /**\n * \u95A2\u6570\u306E\u547C\u3073\u51FA\u3057\n * @param {Ast} node\n * @param {boolean} isExpression\n * @returns string \u30B3\u30FC\u30C9\n */\n convCallFunc(node, isExpression) {\n const funcName = NakoGen.getFuncName(node.name);\n const res = this.findVar(funcName);\n if (res === null) {\n throw NakoSyntaxError.fromNode(`\u95A2\u6570\u300E${funcName}\u300F\u304C\u898B\u5F53\u305F\u308A\u307E\u305B\u3093\u3002\u6709\u52B9\u30D7\u30E9\u30B0\u30A4\u30F3=[` + this.getPluginList().join(', ') + ']', node);\n }\n // \u3069\u306E\u95A2\u6570\u3092\u547C\u3073\u51FA\u3059\u306E\u304B\u95A2\u6570\u3092\u7279\u5B9A\u3059\u308B\n let func;\n if (res.i === 0) { // plugin function\n func = this.__self.getFunc(funcName);\n if (!func) {\n throw new Error(`[System Error] \u95A2\u6570\u300C${funcName}\u300DNakoCompiler.nakoFuncList \u306E\u4E0D\u6574\u5408\u304C\u3042\u308A\u307E\u3059\u3002`);\n }\n if (func.type !== 'func') {\n throw NakoSyntaxError.fromNode(`\u300E${funcName}\u300F\u306F\u95A2\u6570\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002`, node);\n }\n }\n else {\n func = this.nakoFuncList.get(funcName);\n // \u7121\u540D\u95A2\u6570\u306E\u53EF\u80FD\u6027\n if (func === undefined) {\n func = { return_none: false, asyncFn: !!node.asyncFn };\n }\n }\n // \u95A2\u6570\u306E\u53C2\u7167\u6E21\u3057\u304B\uFF1F\n if (node.type === 'func_pointer') {\n return res.js;\n }\n // \u95A2\u6570\u306E\u53C2\u7167\u6E21\u3057\u3067\u306A\u3044\u5834\u5408\n // \u95A2\u6570\u5B9A\u7FA9\u3088\u308A\u52A9\u8A5E\u3092\u4E00\u3064\u305A\u3064\u8ABF\u3079\u308B\n const argsInfo = this.convFuncGetArgsCalcType(funcName, func, node);\n const args = argsInfo[0];\n const argsOpts = argsInfo[1];\n // function\n this.usedFuncSet.add(funcName);\n if (funcName === '\u540D\u524D\u7A7A\u9593\u8A2D\u5B9A') {\n return `\\n// --- \u540D\u524D\u7A7A\u9593(${args[0]}) ---\\n__self.__varslist[0].get('\u540D\u524D\u7A7A\u9593\u8A2D\u5B9A')(${args[0]}, __self);__self.__modName=${args[0]};\\n`;\n }\n else if (funcName === '\u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u8A2D\u5B9A') {\n return `\\n__self.__varslist[0].get('\u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u8A2D\u5B9A')(${args[0]}, __self);\\n`;\n }\n // \u95A2\u6570\u547C\u3073\u51FA\u3057\u3067\u3001\u5F15\u6570\u306E\u672B\u5C3E\u306Bthis\u3092\u8FFD\u52A0\u3059\u308B-\u30B7\u30B9\u30C6\u30E0\u60C5\u5831\u3092\u53C2\u7167\u3059\u308B\u305F\u3081\n args.push('__self');\n let funcDef = 'function';\n let funcBegin = '';\n let funcEnd = '';\n // setter?\n if (node.setter) {\n funcBegin += ';__self.isSetter = true;\\n';\n funcEnd += ';__self.isSetter = false;\\n';\n }\n // \u95A2\u6570\u5185 (__varslist.length > 3) \u304B\u3089\u30D7\u30E9\u30B0\u30A4\u30F3\u95A2\u6570 (res.i === 0) \u3092\u547C\u3073\u51FA\u3059\u3068\u304D\u3001 \u305D\u306E\u30D7\u30E9\u30B0\u30A4\u30F3\u95A2\u6570\u304Cpure\u3067\u306A\u3051\u308C\u3070\n // \u547C\u3073\u51FA\u3057\u306E\u76F4\u524D\u306B\u5168\u3066\u306E\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092this.__locals\u306B\u5165\u308C\u308B\u3002\n if (res.i === 0 && this.varslistSet.length > 3 && func.pure !== true && this.speedMode.forcePure === 0) { // undefined\u306Ffalse\u3068\u307F\u306A\u3059\n // \u5C55\u958B\u3055\u308C\u305F\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u306E\u5217\u6319\n const localVars = [];\n for (const name of Array.from(this.varsSet.names.values())) {\n if (NakoGen.isValidIdentifier(name)) {\n localVars.push({ str: JSON.stringify(name), js: this.varname_get(name) });\n }\n }\n // --- \u5B9F\u884C\u524D ---\n // \u5168\u3066\u306E\u5C55\u958B\u3055\u308C\u3066\u3044\u306A\u3044\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092 __self.__locals \u306B\u30B3\u30D4\u30FC\u3059\u308B\n funcBegin += '__self.__locals = __vars;\\n';\n // \u5168\u3066\u306E\u5C55\u958B\u3055\u308C\u305F\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092 __self.__locals \u306B\u4FDD\u5B58\u3059\u308B\n if (localVars.length > 0) {\n funcBegin += '/* \u5168\u3066\u306E\u5C55\u958B\u3055\u308C\u305F\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092 __self.__locals \u306B\u4FDD\u5B58 */\\n';\n for (const v of localVars) {\n funcBegin += `__self.__locals.set(${v.str}, ${v.js});\\n`;\n }\n }\n // --- \u5B9F\u884C\u5F8C ---\n // \u5168\u3066\u306E\u5C55\u958B\u3055\u308C\u305F\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092 __self.__locals \u304B\u3089\u53D7\u3051\u53D6\u308B\n // \u300C\u305D\u308C\u300D\u306F\u95A2\u6570\u306E\u5B9F\u884C\u7D50\u679C\u3092\u53D7\u3051\u53D6\u308B\u305F\u3081\u306B\u4F7F\u3046\u305F\u3081\u30B9\u30AD\u30C3\u30D7\u3002\n if (localVars.length > 0) {\n funcEnd += '/* \u5168\u3066\u306E\u5C55\u958B\u3055\u308C\u305F\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092 __self.__locals \u304B\u3089\u53D7\u3051\u53D6\u308B */\\n';\n for (const v of localVars) {\n if (v.js !== '\u305D\u308C') {\n funcEnd += `__self.__varslist[2].set(${v.str}, __self.__locals[${v.str}]);\\n`;\n }\n }\n }\n }\n // \u5909\u6570\u300C\u305D\u308C\u300D\u304C\u88DC\u5B8C\u3055\u308C\u3066\u3044\u308B\u3053\u3068\u3092\u30D2\u30F3\u30C8\u3068\u3057\u3066\u51FA\u529B\n if (argsOpts.sore) {\n funcBegin += '/*[sore]*/';\n }\n const indent = (text, n) => {\n let result = '';\n for (const line of text.split('\\n')) {\n if (line !== '') {\n result += ' '.repeat(n) + line + '\\n';\n }\n }\n return result;\n };\n // \u5F15\u6570\u30C1\u30A7\u30C3\u30AF\u306E\u4F8B\u5916 #1260\n const noCheckFuncs = { 'TYPEOF': true, '\u5909\u6570\u578B\u78BA\u8A8D': true };\n // \u95A2\u6570\u547C\u3073\u51FA\u3057\u30B3\u30FC\u30C9\u306E\u69CB\u7BC9\n let argsCode;\n if ((!this.warnUndefinedCallingUserFunc && res.i !== 0) || (!this.warnUndefinedCallingSystemFunc && res.i === 0)) {\n argsCode = args.join(',');\n }\n else {\n const argsA = [];\n args.forEach((arg) => {\n if (arg === '__self' || noCheckFuncs[funcName] === true) { // #1260\n argsA.push(`${arg}`);\n }\n else {\n // \u5F15\u6570\u306Eundefined\u30C1\u30A7\u30C3\u30AF\u306E\u30B3\u30FC\u30C9\u3092\u5165\u308C\u308B\n const msg = (res.i === 0) ? '\u547D\u4EE4\u300E$0\u300F\u306E\u5F15\u6570\u306Bundefined\u3092\u6E21\u3057\u3066\u3044\u307E\u3059\u3002' : '\u30E6\u30FC\u30B6\u547D\u4EE4\u300E$0\u300F\u306E\u5F15\u6570\u306Bundefined\u3092\u6E21\u3057\u3066\u3044\u307E\u3059\u3002';\n const poolIndex = this.addConstPool(msg, [funcName], node.file, node.line);\n // arg\u304C\u7A7A\u306B\u306A\u308B\u5BFE\u7B56 #1315\n const argStr = (arg === '') ? '\"\"' : arg;\n argsA.push(`(__self.chk(${argStr}, ${poolIndex}))`);\n }\n });\n argsCode = argsA.join(', ');\n }\n let funcCall = `${res.js}(${argsCode})`;\n if (func.asyncFn) {\n funcDef = `async ${funcDef}`;\n funcCall = `await ${funcCall}`;\n this.numAsyncFn++;\n this.usedAsyncFn = true;\n // \u975E\u540C\u671F\u95A2\u6570\u306E\u547C\u3073\u51FA\u3057\u524D\u306B __self.__vars \u3092\u5F85\u907F\u3057\u3066\u304A\u304F\u5FC5\u8981\u304C\u3042\u308B (#1758)\n const varI = `$nako_i${this.loopId}`;\n this.loopId++;\n funcBegin += `const __local_async${varI} = __self.__vars;\\n`;\n funcEnd += `__self.__vars = __local_async${varI};\\n`;\n }\n if (res.i === 0 && this.performanceMonitor.systemFunctionBody !== 0) {\n let key = funcName;\n if (!key) {\n if (typeof this.performanceMonitor.mumeiId === 'undefined') {\n this.performanceMonitor.mumeiId = 0;\n }\n this.performanceMonitor.mumeiId++;\n key = `anous_${this.performanceMonitor.mumeiId}`;\n }\n funcCall = `(${funcDef} (key, type) {\\n` +\n 'const sbf_start = performance.now() * 1000;\\n' +\n 'try {\\n' +\n 'return ' + funcCall + ';\\n' +\n '} finally {\\n' +\n 'const sbl_time = performance.now() * 1000 - sbf_start;\\n' +\n 'if (!__self.__performance_monitor) {\\n' +\n '__self.__performance_monitor={};\\n' +\n '__self.__performance_monitor[key] = { called:1, totel_usec: sbl_time, min_usec: sbl_time, max_usec: sbl_time, type: type };\\n' +\n '} else if (!__self.__performance_monitor[key]) {\\n' +\n '__self.__performance_monitor[key] = { called:1, totel_usec: sbl_time, min_usec: sbl_time, max_usec: sbl_time, type: type };\\n' +\n '} else {\\n' +\n '__self.__performance_monitor[key].called++;\\n' +\n '__self.__performance_monitor[key].totel_usec+=sbl_time;\\n' +\n 'if(__self.__performance_monitor[key].min_usec>sbl_time){__self.__performance_monitor[key].min_usec=sbl_time;}\\n' +\n 'if(__self.__performance_monitor[key].max_usec<sbl_time){__self.__performance_monitor[key].max_usec=sbl_time;}\\n' +\n `}}})('${funcName}_body', 'sysbody')\\n`;\n }\n let code = '';\n if (func.return_none) {\n // ------------------------------------\n // \u623B\u308A\u5024\u306E\u306A\u3044\u95A2\u6570\u306E\u5834\u5408\n // ------------------------------------\n if (funcEnd === '') {\n code = `/*VOID\u95A2\u6570\u547C\u51FA*/${funcBegin}${funcCall}\\n`;\n }\n else {\n code = `/*VOID\u95A2\u6570\u547C\u51FA(\u524D\u5F8C\u51E6\u7406\u4ED8)*/${funcBegin}try {\\n${indent(funcCall, 1)};\\n} finally {\\n${indent(funcEnd, 1)}}\\n`;\n }\n // \u884C\u756A\u53F7\u3092\u8FFD\u52A0\n code = this.convLineno(node, false) + code;\n }\n else {\n // ------------------------------------\n // \u623B\u308A\u5024\u306E\u3042\u308B\u95A2\u6570\u306E\u5834\u5408\n // ------------------------------------\n let sorePrefex = '';\n let sorePostfix = '';\n if (this.speedMode.invalidSore === 0) {\n // \u95A2\u6570\u306E\u623B\u308A\u5024\u3092\u8A18\u9332\n sorePrefex = '__self.__setSore(';\n sorePostfix = ')';\n }\n if (funcBegin === '' && funcEnd === '') {\n code = `${sorePrefex}${funcCall}${sorePostfix}`;\n }\n else {\n if (funcEnd === '') {\n const funcBody = `${sorePrefex}${funcCall}${sorePostfix}`;\n const funcObj = `${funcDef}(){ return ${funcBody} }`;\n const funcCallThis = `(${funcObj}).call(this)`;\n code = `/* funcCallThis1 */${funcCallThis}`;\n }\n else { // \u3064\u307E\u308A\u3001pure=false\u306E\u5834\u5408\n const varI = `$nako_i${this.loopId}`;\n this.loopId++;\n code = `/* funcCallThis2 */(${funcDef}(){\\n` +\n indent(funcBegin, 1) + '\\n' +\n indent('try {', 1) + '\\n' +\n indent(`let ${varI} = ${funcCall};`, 2) + '\\n' +\n indent(`return ${varI};`, 2) + '\\n' +\n indent('} finally {', 2) + '\\n' +\n indent(funcEnd, 1) + '\\n' +\n indent('}', 1) + '\\n' +\n '}).call(this)';\n if (func.asyncFn) {\n code = `await (${code})`;\n }\n code = `${sorePrefex}${code}${sorePostfix}`;\n }\n }\n // ...\u3057\u3066\n if (node.josi === '\u3057\u3066' || (node.josi === '' && !isExpression)) {\n code = this.convLineno(node, false) + code;\n code += ';\\n';\n }\n }\n if (res.i === 0 && this.performanceMonitor.systemFunction !== 0) {\n code = '(function (key, type) {\\n' +\n 'const sf_start = performance.now() * 1000;\\n' +\n 'try {\\n' +\n 'return ' + code + ';\\n' +\n '} finally {\\n' +\n 'const sl_time = performance.now() * 1000 - sf_start;\\n' +\n 'if (!__self.__performance_monitor) {\\n' +\n '__self.__performance_monitor={};\\n' +\n '__self.__performance_monitor[key] = { called:1, totel_usec: sl_time, min_usec: sl_time, max_usec: sl_time, type: type };\\n' +\n '} else if (!__self.__performance_monitor[key]) {\\n' +\n '__self.__performance_monitor[key] = { called:1, totel_usec: sl_time, min_usec: sl_time, max_usec: sl_time, type: type };\\n' +\n '} else {\\n' +\n '__self.__performance_monitor[key].called++;\\n' +\n '__self.__performance_monitor[key].totel_usec+=sl_time;\\n' +\n 'if(__self.__performance_monitor[key].min_usec>sl_time){__self.__performance_monitor[key].min_usec=sl_time;}\\n' +\n 'if(__self.__performance_monitor[key].max_usec<sl_time){__self.__performance_monitor[key].max_usec=sl_time;}\\n' +\n `}}})('${funcName}_sys', 'system')\\n`;\n }\n return code;\n }\n convCallValue(node, isExpression) {\n const callee = this._convGen(node.blocks[0], true);\n const args = node.blocks.slice(1).map((arg) => this._convGen(arg, true));\n args.push('__self');\n const funcCall = `${callee}(${args.join(',')})`;\n if (isExpression) {\n return funcCall;\n }\n const sorePrefex = (this.speedMode.invalidSore === 0) ? '__self.__setSore(' : '';\n const sorePostfix = (this.speedMode.invalidSore === 0) ? ')' : '';\n return this.convLineno(node, false) + `${sorePrefex}${funcCall}${sorePostfix};\\n`;\n }\n convRenbun(node) {\n const right = this._convGen(node.blocks[1], true);\n const left = this._convGen(node.blocks[0], false);\n this.numAsyncFn++;\n this.usedAsyncFn = true;\n return `/*[\u9023\u6587]*/await (async function(){ ${left}; return ${right} }).call(this)/*[/\u9023\u6587]*/`;\n }\n convOp(node) {\n // \u30C8\u30FC\u30AF\u30F3\u540D\u304B\u3089JS\u6F14\u7B97\u5B50\u3078\u306E\u5909\u63DB - \u5358\u7D14\u306A\u5909\u63DB\u304C\u53EF\u80FD\u306A\u3082\u306E\u3092\u3053\u3053\u3067\u5B9A\u7FA9\n const OP_TBL = {\n '&': '+\"\"+',\n eq: '==',\n noteq: '!=',\n '===': '===',\n '!==': '!==',\n gt: '>',\n lt: '<',\n gteq: '>=',\n lteq: '<=',\n and: '&&',\n or: '||',\n shift_l: '<<',\n shift_r: '>>',\n shift_r0: '>>>',\n '\u00F7': '/'\n };\n let op = node.operator || ''; // \u6F14\u7B97\u5B50\n let right = this._convGen(node.blocks[1], true);\n let left = this._convGen(node.blocks[0], true);\n if (op === '+' && this.speedMode.implicitTypeCasting === 0) {\n if (node.blocks[0] && (node.blocks[0]).type !== 'number' && (node.blocks[0]).type !== 'bigint') {\n left = `self.__parseFloatOrBigint(${left})`;\n }\n if (node.blocks[1] && (node.blocks[1]).type !== 'number' && (node.blocks[1]).type !== 'bigint') {\n right = `self.__parseFloatOrBigint(${right})`;\n }\n }\n // \u968E\u4E57\n if (op === '^' || op === '**') {\n return `((${left}) ** (${right}))`;\n }\n // \u6574\u6570\u306E\u5272\u308A\u7B97 #1152\n if (op === '\u00F7\u00F7') {\n return `(Math.floor(${left} / ${right}))`;\n }\n // \u4E00\u822C\u7684\u306A\u30AA\u30DA\u30EC\u30FC\u30BF\u306B\u5909\u63DB\n if (OP_TBL[op]) {\n op = OP_TBL[op];\n }\n //\n return `(${left} ${op} ${right})`;\n }\n convInc(node) {\n // id\u3092\u5F97\u308B\n const id = this.loopId++;\n const valueVar = `$nako_v${id}`;\n // \u3082\u3057\u5024\u304C\u7701\u7565\u3055\u308C\u3066\u3044\u305F\u3089\u3001\u5909\u6570\u300C\u305D\u308C\u300D\u306B\u4EE3\u5165\u3059\u308B\n let incValue = '1';\n if (this.speedMode.invalidSore === 0) {\n incValue = this.varname_get('\u305D\u308C');\n }\n const astValue = node.blocks[0];\n if (astValue.type !== 'nop') {\n incValue = this._convGen(astValue, true);\n }\n // \u914D\u5217\u3078\u306E\u4EE3\u5165\u304B(core#86)\n let code = '';\n let varGetter = '';\n let varSetter = '';\n let varInitter = '';\n const nodeName = node.name;\n if (nodeName.type === 'ref_array') {\n varGetter = this.convRefArray(nodeName);\n varSetter = `${varGetter} = ${valueVar}`;\n varInitter = `${varGetter} = 0`;\n }\n else if (nodeName.type === 'ref_prop') {\n // \u30D7\u30ED\u30D1\u30C6\u30A3\u30A2\u30AF\u30BB\u30B9(A$a)\u306E\u5834\u5408 (#1793)\n const baseName = this._convGen(nodeName.name, true);\n const propList = nodeName.index;\n // __getProp/__setProp\u3092\u6301\u3064\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306B\u3082\u5BFE\u5FDC\u3059\u308Bgetter/setter\u751F\u6210\n const buildPropGetter = (targetExpr, propKey) => `(()=>{const __nako_obj=${targetExpr};` +\n `return (__nako_obj!=null&&typeof __nako_obj.__getProp==='function')` +\n `?__nako_obj.__getProp(${propKey}, __self)` +\n `:__nako_obj[${propKey}]})()`;\n const buildPropSetter = (targetExpr, propKey, valueExpr) => `(()=>{const __nako_obj=${targetExpr};` +\n `return (__nako_obj!=null&&typeof __nako_obj.__setProp==='function')` +\n `?__nako_obj.__setProp(${propKey}, ${valueExpr}, __self)` +\n `:(__nako_obj[${propKey}]=${valueExpr})})()`;\n const propKeys = propList.map((prop) => JSON.stringify(prop.value));\n // getter: \u5168\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u9806\u306B\u305F\u3069\u308B\n let currentExpr = baseName;\n for (const propKey of propKeys) {\n currentExpr = buildPropGetter(currentExpr, propKey);\n }\n varGetter = currentExpr;\n // setter/initter: \u6700\u5F8C\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u3060\u3051setter\u3067\u3001\u6B8B\u308A\u306Fgetter\u3067\u305F\u3069\u308B\n let parentExpr = baseName;\n for (const propKey of propKeys.slice(0, -1)) {\n parentExpr = buildPropGetter(parentExpr, propKey);\n }\n const lastPropKey = propKeys[propKeys.length - 1];\n varSetter = buildPropSetter(parentExpr, lastPropKey, valueVar);\n varInitter = buildPropSetter(parentExpr, lastPropKey, '0');\n }\n else {\n // \u5909\u6570\u540D\n const name = nodeName.value;\n let res = this.findVar(name, valueVar);\n if (res === null) {\n this.varsSet.names.add(name);\n res = this.findVar(name, valueVar);\n if (!res) {\n throw new Error('\u300E\u5897\u300F\u307E\u305F\u306F\u300E\u6E1B\u300F\u3067\u5909\u6570\u304C\u898B\u5F53\u305F\u308A\u307E\u305B\u3093\u3002');\n }\n }\n varGetter = res.js;\n varSetter = res.js_set;\n res = this.findVar(name, '0');\n if (res !== null) {\n varInitter = res.js_set;\n }\n }\n // \u81EA\u52D5\u521D\u671F\u5316\u3059\u308B\u304B\n code += '\\n/*[convInc]*/\\n';\n code += this.convLineno(node, false) + '\\n';\n code += `let ${valueVar} = ${varGetter}\\n`;\n code += `if (typeof ${valueVar} === 'undefined') { ${varInitter}; }\\n`;\n code += `${valueVar} = Number(${varGetter}) + Number(${incValue});\\n`;\n code += `${varSetter}\\n`;\n code += '/*[/convInc]*/\\n';\n return code;\n }\n convLet(node) {\n const astValue = node.blocks[0];\n // \u3082\u3057\u5024\u304C\u7701\u7565\u3055\u308C\u3066\u3044\u305F\u3089\u3001\u5909\u6570\u300C\u305D\u308C\u300D\u306B\u4EE3\u5165\u3059\u308B\n let value = null;\n if (this.speedMode.invalidSore === 0) {\n value = this.varname_get('\u305D\u308C');\n }\n // \u5024\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u751F\u6210\n if (astValue) {\n // \u95A2\u6570\u306E\u623B\u308A\u5024\u304C\u306A\u3044\u5834\u5408\u306F\u30A8\u30E9\u30FC\u3092\u51FA\u3059\n if (astValue.type === 'func' && astValue.name !== undefined) {\n const astFunc = astValue;\n const func = this.__self.getFunc(astFunc.name);\n if (func && func.return_none) {\n throw NakoSyntaxError.fromNode(`\u95A2\u6570\u300E${astValue.name}\u300F\u306F\u623B\u308A\u5024\u304C\u306A\u3044\u306E\u3067\u7D50\u679C\u3092\u4EE3\u5165\u3067\u304D\u307E\u305B\u3093\u3002`, node);\n }\n }\n value = this._convGen(astValue, true);\n }\n // \u623B\u308A\u5024\u306E\u691C\u8A3C\n if (value === null) {\n throw NakoSyntaxError.fromNode('\u4EE3\u5165\u3059\u308B\u5148\u306E\u5909\u6570\u540D\u304C\u3042\u308A\u307E\u305B\u3093\u3002', node);\n }\n // \u5909\u6570\u540D\n const name = node.name;\n const res = this.findVar(name, value);\n let code = '/*[convLet]*/';\n if (res === null) {\n this.varsSet.names.add(name);\n code = `${this.varname_set(name, value)};`;\n }\n else {\n // \u5B9A\u6570\u306A\u3089\u30A8\u30E9\u30FC\u3092\u51FA\u3059\n if (this.varslistSet[res.i].readonly.has(name)) {\n throw NakoSyntaxError.fromNode(`\u5B9A\u6570\u300E${name}\u300F\u306F\u65E2\u306B\u5B9A\u7FA9\u6E08\u307F\u306A\u306E\u3067\u3001\u5024\u3092\u4EE3\u5165\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002`, node);\n }\n code = `${res.js_set};`;\n }\n return ';' + this.convLineno(node, false) + code + '\\n';\n }\n // \u30D7\u30ED\u30D1\u30C6\u30A3\u3078\u306E\u4EE3\u5165\u5F0F (#1793)\n convLetProp(node) {\n if (!node.index || node.index.length === 0) {\n throw NakoSyntaxError.fromNode('\u4EE3\u5165\u3059\u308B\u5148\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u540D\u304C\u3042\u308A\u307E\u305B\u3093\u3002', node);\n }\n if (!node.blocks || node.blocks.length === 0) {\n throw NakoSyntaxError.fromNode('\u4EE3\u5165\u3059\u308B\u5024\u304C\u3042\u308A\u307E\u305B\u3093\u3002', node);\n }\n const propList = node.index;\n const propTopAst = propList.pop();\n if (propTopAst === undefined) {\n throw NakoSyntaxError.fromNode('\u4EE3\u5165\u3059\u308B\u5148\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u540D\u304C\u3042\u308A\u307E\u305B\u3093\u3002', node);\n }\n const propTop = (typeof propTopAst.value === 'string') ? propTopAst.value : '';\n const astValue = node.blocks[0];\n let value = null;\n // \u5024\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u751F\u6210\n if (astValue) {\n value = this._convGen(astValue, true);\n }\n else {\n throw NakoSyntaxError.fromNode('\u4EE3\u5165\u3059\u308B\u5024\u304C\u3042\u308A\u307E\u305B\u3093\u3002', node);\n }\n // \u5909\u6570\u540D\n const name = node.name;\n const res = this.findVar(name, value);\n let code = '/*[convLetProp]*/\\n';\n // \u5909\u6570\u304C\u5B58\u5728\u3057\u306A\u3044\u3068\u304D\n if (res === null) {\n throw NakoSyntaxError.fromNode(`\u5909\u6570\u300E${name}\u300F\u304C\u898B\u5F53\u305F\u308A\u307E\u305B\u3093\u3002`, node);\n }\n // \u5909\u6570\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\n let nameJs = res.js;\n // \u914D\u5217\u30A2\u30AF\u30BB\u30B9\n if (node.blocks.length >= 2) {\n for (let i = 1; i < node.blocks.length; i++) {\n const indexNode = node.blocks[i];\n const indexJs = this._convGen(indexNode, true);\n nameJs += `[${indexJs}]`;\n }\n }\n if (propList.length > 0) {\n for (const prop of propList) {\n if (typeof prop.value === 'string') {\n nameJs += `['${prop.value}']`;\n }\n else {\n throw NakoSyntaxError.fromNode(`\u5909\u6570\u300E${nameJs}\u300F\u4EE5\u4E0B\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u306B\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u307E\u305B\u3093\u3002`, node);\n }\n }\n }\n // \u30D7\u30ED\u30D1\u30C6\u30A3\u3078\u306E\u4EE3\u5165\u5F0F\u3092\u4F5C\u308B\n code += `if (typeof ${nameJs}.__setProp === 'function') { ${nameJs}.__setProp('${propTop}', ${value}, __self); } else { `;\n code += `__self.__checkPropAccessor('set', ${nameJs});`;\n code += `if (typeof ${nameJs}.__setProp === 'function') { ${nameJs}.__setProp('${propTop}', ${value}, __self); } else { `;\n code += `${nameJs}['${propTop}'] = ${value} }};`;\n return ';' + this.convLineno(node, false) + code + '\\n';\n }\n // \u30D7\u30ED\u30D1\u30C6\u30A3\u3078\u306E\u53C2\u7167 (#1793)\n convRefProp(node) {\n const name = this._convGen(node.name, true);\n const list = node.index;\n if (!list || list.length <= 0) {\n throw NakoSyntaxError.fromNode('\u30D7\u30ED\u30D1\u30C6\u30A3\u304C\u3042\u308A\u307E\u305B\u3093\u3002', node);\n }\n return this.convRefProp_genCode(name, list);\n }\n // \u30D7\u30ED\u30D1\u30C6\u30A3\u3078\u306E\u53C2\u7167\u306E\u30B3\u30FC\u30C9\u751F\u6210\u90E8\u5206 (#1793)\n convRefProp_genCode(name, propList) {\n let code;\n if (propList.length <= 1) {\n const propKey = propList[0].value;\n const codeCall = `${name}.__getProp('${propKey}', __self)`;\n const codeProp = `${name}['${propKey}']`;\n const codeCheckAccessor = `__self.__checkPropAccessor('get', ${name});\\n` +\n `if (typeof ${name}.__getProp === 'function') { return ${codeCall} }\\n` +\n `return ${codeProp}\\n`;\n const codeIf = `if (${name}.__getProp) { return ${codeCall} } else { ${codeCheckAccessor} }`;\n code = `( (()=>{ ${codeIf} })() )`;\n }\n else {\n const arrs = [];\n const keys = [];\n for (let i = 0; i < propList.length; i++) {\n const propKey = propList[i].value;\n keys.push(`['${propKey}']`);\n arrs.push(`'${propKey}'`);\n }\n const keyStr = keys.join('');\n const arrStr = '[' + arrs.join(',') + ']';\n const codeCall = `${name}.__getProp(${arrStr}, __self)`;\n const codeProp = `${name}${keyStr}`;\n const codeCheckAccessor = `__self.__checkPropAccessor('get', ${name});\\n` +\n `if (${name}.__getProp) { return ${codeCall} }\\n` +\n `return ${codeProp}\\n`;\n const codeIf = `if (${name}.__getProp) { return ${codeCall} } else { ${codeCheckAccessor} }`;\n code = `( (()=>{ ${codeIf} })() )`;\n }\n return code;\n }\n convDefLocalVar(node) {\n const astValue = node.blocks[0];\n let value = '0';\n if (astValue.type !== 'nop') {\n value = this._convGen(astValue, true);\n }\n const name = node.name; // \u5909\u6570\u540D\n const vtype = node.vartype; // \u5909\u6570 or \u5B9A\u6570\n // \u4E8C\u91CD\u5B9A\u7FA9\uFF1F\n if (this.varsSet.names.has(name)) {\n throw NakoSyntaxError.fromNode(`${vtype}\u300E${name}\u300F\u306E\u4E8C\u91CD\u5B9A\u7FA9\u306F\u3067\u304D\u307E\u305B\u3093\u3002`, node);\n }\n //\n this.varsSet.names.add(name);\n if (vtype === '\u5B9A\u6570') {\n this.varsSet.readonly.add(name);\n }\n const code = `/*${vtype}*/${this.varname_set(name, value)};\\n`;\n return this.convLineno(node, false) + code;\n }\n // #563 \u8907\u6570\u5909\u6570\u3078\u306E\u4EE3\u5165\n convDefLocalVarlist(node) {\n let code = '';\n const vtype = node.vartype; // \u5909\u6570 or \u5B9A\u6570\n // \u521D\u671F\u5024\u3092\u53D6\u5F97\n let value = '0';\n if (node.blocks.length > 0) {\n const astValue = node.blocks[0];\n if (astValue.type !== 'nop') {\n value = this._convGen(astValue, true);\n }\n }\n // \u4EE3\u5165\u3059\u308B\u5909\u6570\u540D\u3092\u53D6\u5F97\n const id = this.loopId++;\n const varI = `$nako_i${id}`;\n code += `let ${varI} = ${value}\\n`;\n code += `if (!(${varI} instanceof Array)) { ${varI}=[${varI}] }\\n`;\n const names = (node.names) ? node.names : [];\n for (let i = 0; i < names.length; i++) {\n const nameObj = names[i];\n const name = nameObj.value;\n // \u4E8C\u91CD\u5B9A\u7FA9\uFF1F\n if (this.varsSet.names.has(name)) {\n // \u8907\u6570\u5909\u6570\u6587\u3067\u306F\u3001\u4E8C\u91CD\u5B9A\u7FA9\u3082\u8A31\u5BB9\u3059\u308B #1027\n // throw NakoSyntaxError.fromNode(`${vtype}\u300E${name}\u300F\u306E\u4E8C\u91CD\u5B9A\u7FA9\u306F\u3067\u304D\u307E\u305B\u3093\u3002`, node)\n }\n this.varsSet.names.add(name);\n if (vtype === '\u5B9A\u6570') {\n this.varsSet.readonly.add(name);\n }\n code += this.varname_set(name, `${varI}[${i}]`) + ';\\n';\n }\n return this.convLineno(node, false) +\n '/*[convDefLocalVarlist]*/\\n' +\n code +\n '/*[/convDefLocalVarlist]*/\\n';\n }\n convString(node) {\n let value = String(node.value);\n value = value.replace(/\\\\/g, '\\\\\\\\');\n value = value.replace(/\"/g, '\\\\\"');\n value = value.replace(/\\r/g, '\\\\r');\n value = value.replace(/\\n/g, '\\\\n');\n return '\"' + value + '\"';\n }\n convTryExcept(node) {\n const block = this._convGen(node.blocks[0], false);\n const errBlock = this._convGen(node.blocks[1], false);\n return this.convLineno(node, false) +\n `try {\\n${block}\\n} catch (e) {\\n` +\n ' __self.__setSysVar(\"\u30A8\u30E9\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8\", e.message);\\n' +\n ';\\n' +\n `${errBlock}}\\n`;\n }\n getUsedFuncSet() {\n return this.usedFuncSet;\n }\n getPluginInitCode() {\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u521D\u671F\u5316\u95A2\u6570\u3092\u5B9F\u884C\u3059\u308B\n let code = '';\n let pluginCode = '';\n for (const name in this.__self.__module) {\n const initkey = `!${name}:\u521D\u671F\u5316`;\n if (this.varslistSet[0].names.has(initkey)) {\n const initkeyDone = `!${name}:\u521D\u671F\u5316\u6E08`;\n this.usedFuncSet.add(initkey);\n pluginCode += `if (!__v0.has('${initkeyDone}')) { __v0.get('${initkey}')(__self); __v0.set('${initkeyDone}', true) }\\n`;\n }\n }\n if (pluginCode !== '') {\n code += '__v0.set(\\'__line\\', \\'l0:\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u521D\u671F\u5316\\');\\n' + pluginCode;\n }\n return code;\n }\n}\n/** template of standalone js code */\nconst STANDALONE_CODE = `\n// === generated by nadesiko3 v__version__(core:__coreVersion__) ===\n// -----------------------------------------------------------------\n// <nadesiko3standalone>\n// -----------------------------------------------------------------\n// --- import\nimport path from 'path'\nimport { NakoRuntimeError } from './nako3runtime/nako_errors.mjs'\n__codeImportFiles__\n// --- init global self\nconst self = {\n newVariables: () => {\n const map = new Map()\n return map\n }\n}\nself.coreVersion = '__coreVersion__'\nself.version = '__version__'\nself.logger = {\n error: (message) => { console.error(message) },\n warn: (message) => { console.warn(message) },\n send: (level, message) => { console.log(message) },\n runtimeError: (message, lineInfo) => { console.error(message, lineInfo) }\n};\nself.__varslist = [self.newVariables(), self.newVariables(), self.newVariables()]\nself.__v0 = self.__varslist[0]\nself.initFuncList = []\nself.clearFuncList = []\nself.__propAccessor = []\n// --- jsInit ---\n__jsInit__\n// --- Copy module functions ---\nfor (const mod of __importNames__) {\n for (const funcName in mod) {\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u521D\u671F\u5316\u3068\u30AF\u30EA\u30A2\u95A2\u6570\u3092\u767B\u9332\n if (funcName === '\u521D\u671F\u5316') {\n __self.initFuncList.push(mod[funcName].fn)\n continue\n }\n if (funcName === '!\u30AF\u30EA\u30A2') {\n __self.clearFuncList.push(mod[funcName].fn)\n continue\n }\n // \u95A2\u6570\u3084\u5B9A\u6570\u3092\u767B\u9332\n const f = mod[funcName]\n if (f.type === 'func') { // \u95A2\u6570\n __self.__varslist[0].set(funcName, f.fn)\n } else { // \u5B9A\u6570\n __self.__varslist[0].set(funcName, f.value)\n }\n }\n}\n__self.__vars = __self.__varslist[2];\n__self.__module = {};\n__self.__locals = __self.newVariables();\n__self.__genMode = 'sync';\n// \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u521D\u671F\u5316\u30B3\u30FC\u30C9\u3092\u5B9F\u884C\n__self.initFuncList.map(f => f(self))\n// standalone\n__self.__v0.set('__standalone', true)\n// -----------------------------------------------------------------\ntry {\n try {\n// -----------------------------------------------------------------\n// <prepareMainCode>\n__codeStandalone__\n// </prepareMainCode>\n// -----------------------------------------------------------------\n// <mainCode>\n// -----------------------------------------------------------------\n__codeJS__\n// -----------------------------------------------------------------\n// </mainCode>\n// -----------------------------------------------------------------\n } catch (err) {\n __self.logger.error(err);\n throw err;\n }\n} finally {\n // standaloneCode\u3067\u306F\u3001\u5373\u6642\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30AF\u30EA\u30A2\u30B3\u30FC\u30C9\u3092\u5B9F\u884C\n __self.clearFuncList.map(f => f(__self))\n}\n// -----------------------------------------------------------------\n// </nadesiko3standalone>\n// -----------------------------------------------------------------\n`;\n/**\n * @param com\n * @param ast\n * @param opt\n */\nexport function generateJS(com, ast, opt) {\n // NakoGen\u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3092\u4F5C\u6210\n const gen = new NakoGen(com);\n // \u203B [\u95A2\u6570\u5B9A\u7FA9\u306B\u95A2\u3059\u308B\u30B3\u30FC\u30C9\u751F\u6210\u306E\u30D2\u30F3\u30C8]\n // \u203B \u95A2\u6570\u306E\u540D\u524D\u3060\u3051\u3092(1)\u3067\u767B\u9332\u3057\u3066\u3001(2)\u3067\u5B9F\u969B\u306B\u95A2\u6570\u306E\u30B3\u30FC\u30C9\u3092\u751F\u6210\u3059\u308B\u3002\n // \u203B \u305F\u3060\u3057(2)\u3067\u306F\u751F\u6210\u3059\u308B\u3060\u3051\u306A\u306E\u3067\u3001(3)\u3067\u30D7\u30ED\u30B0\u30E9\u30E0\u5192\u982D\u306B\u95A2\u6570\u5B9A\u7FA9\u306E\u30B3\u30FC\u30C9\u3092\u8A18\u8FF0\u3059\u308B\u3002\n // \u3053\u306E\u9806\u756A\u3092\u5909\u3048\u308B\u3053\u3068\u306F\u3067\u304D\u306A\u3044 (\u30B0\u30ED\u30FC\u30D0\u30EB\u5909\u6570\u304C\u8A8D\u8B58\u3067\u304D\u306A\u304F\u306A\u3063\u305F\u308A\u3001\u95A2\u6570\u5B9A\u7FA9\u306E\u30BF\u30A4\u30DF\u30F3\u30B0\u304C\u305A\u308C\u308B)\n // (1) \u30E6\u30FC\u30B6\u30FC\u5B9A\u7FA9\u95A2\u6570\u3092\u30B7\u30B9\u30C6\u30E0\u306B\u767B\u9332\u3059\u308B\n gen.registerFunction(ast);\n // (2) JS\u30B3\u30FC\u30C9\u3092\u751F\u6210\u3059\u308B\n let js = trim(cleanGeneratedCode(gen.convGen(ast, opt), 1));\n // (3) JS\u30B3\u30FC\u30C9\u3092\u5B9F\u884C\u3059\u308B\u305F\u3081\u306E\u4E8B\u524D\u30D8\u30C3\u30C0\u90E8\u5206\u306E\u751F\u6210\n const jsInit = gen.getDefFuncCode(com, opt);\n // \u30E9\u30F3\u30C0\u30E0\u306A\u95A2\u6570\u540D\u3092\u751F\u6210\n const funcID = String((new Date()).getTime()) + '_' + Math.floor(0xFFFFFFFF * Math.random()).toString();\n // \u30C6\u30B9\u30C8\u306E\u5B9F\u884C\n if (js && opt.isTest) {\n js += '\\n__self._runTests(__tests);\\n';\n }\n // async method\n if (gen.numAsyncFn > 0 || gen.debugOption.useDebug) {\n const asyncMain = '__eval_nako3async_' + funcID + '__';\n js = `\n// ------------------------------------------------------------------\n// <nadesiko3::gen::async id=\"${funcID}\" times=\"${gen.numAsyncFn}\">\n// ------------------------------------------------------------------\nasync function ${asyncMain}(__self) {\n // --- code_begin ---\n ${js}\n // --- code_end ---\n // __\u51E6\u7406\u672B\u5C3E__ // \u2190 \u30C6\u30B9\u30C8\u306A\u3069\u3067\u5FC5\u8981\u306A\u306E\u3067\u6D88\u3055\u306A\u3044\n} // end of ${asyncMain}\n// ------------------------------------------------------------------\n// call ${asyncMain}\n(async () => {\n if (__self.__v0.get('__standalone')) {\n await ${asyncMain}(self);\n } else {\n ${asyncMain}.call(self, self)\n .then(() => { /* __async_ok__ */ })\n .catch(err => {\n if (err.message === '__\u7D42\u308F\u308B__') { return }\n __self.numFailures++\n // send errors to logger\n let rterr = __self.logger.runtimeError(err, __self.__v0.get('__line'))\n __self.logger.error(rterr)\n })\n }\n})();\n// ------------------------------------------------------------------\n// </nadesiko3::gen::async id=\"${funcID}\">\n// ------------------------------------------------------------------\n`;\n }\n else {\n const syncMain = '__eval_nako3sync_' + funcID + '__';\n js = `\n// ------------------------------------------------------------------\n// <nadesiko3::gen::syncMode>\n// ------------------------------------------------------------------\nfunction ${syncMain}(__self) {\ntry {\n ${js}\n // __\u51E6\u7406\u672B\u5C3E__ // \u2190 \u30C6\u30B9\u30C8\u306A\u3069\u3067\u5FC5\u8981\u306A\u306E\u3067\u6D88\u3055\u306A\u3044\n} catch (err) {\n if (err.message === '__\u7D42\u308F\u308B__') { return }\n __self.numFailures++\n throw __self.logger.runtimeError(err, __self.__v0.get('__line'))\n}\n} // end of ${syncMain}\n${syncMain}(__self)\n// ------------------------------------------------------------------\n// </nadesiko3::gen::syncMode>\n// ------------------------------------------------------------------\n`;\n }\n // --- \u751F\u6210\u3057\u305F\u30B3\u30FC\u30C9\u306E\u7C21\u5358\u306A\u6574\u5F62 ---\n js = cleanGeneratedCode(js);\n // \u30C7\u30D0\u30C3\u30B0\u30E1\u30C3\u30BB\u30FC\u30B8\n let codeImportFiles = '';\n const importNames = [];\n for (const f of opt.importFiles) {\n if (f === 'nako_errors.mjs') {\n continue;\n }\n const ff = 'nako3runtime_' + f.replace(/\\.(js|mjs)$/, '').replace(/[^a-zA-Z0-9_]/g, '_');\n importNames.push(ff);\n codeImportFiles += `import ${ff} from './nako3runtime/${f}'\\n`;\n }\n // ---\n const initCode = gen.getPluginInitCode();\n const runtimeEnvCode = `\n// <runtimeEnvCode>\nconst self = this\n${opt.codeEnv}\n${jsInit}\n${initCode}\n${js}\n// </runtimeEnvCode>\n`;\n com.getLogger().trace('--- generate::jsInit ---\\n' + jsInit);\n com.getLogger().trace('--- generate::js ---\\n' + js);\n return {\n // \u306A\u3067\u3057\u3053\u306E\u5B9F\u884C\u74B0\u5883\u3042\u308A\u306E\u5834\u5408(this\u304C\u6709\u52B9)\n runtimeEnv: runtimeEnvCode,\n // JavaScript\u5358\u4F53\u3067\u52D5\u304B\u3059\u5834\u5408\n standalone: replaceTemplateCode(STANDALONE_CODE, {\n codeImportFiles,\n 'coreVersion': com.coreVersion,\n 'version': com.version,\n 'importNames': ('[' + importNames.join(', ') + ']'),\n 'codeStandalone': opt.codeStandalone,\n 'codeJS': js,\n jsInit\n }),\n // \u30B3\u30FC\u30C9\u751F\u6210\u306B\u4F7F\u3063\u305FNakoGen\u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\n gen\n };\n}\n// template\nfunction replaceTemplateCode(template, values) {\n for (const key in values) {\n const pat = `__${key}__`;\n const val = values[key];\n template = template.split(pat).join(val);\n }\n return template;\n}\n// clean generated code\nfunction cleanGeneratedCode(code, indent = 0) {\n // 1. \u7121\u610F\u5473\u306A\u6539\u884C\u3084\u30BB\u30DF\u30B3\u30ED\u30F3\u3092\u524A\u9664\n // 2. \u884C\u982D\u306E\u7A7A\u767D\u3084\u30BB\u30DF\u30B3\u30ED\u30F3\u3092\u524A\u9664\n // 3. indent\u5206\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u8FFD\u52A0\n // \u305F\u3060\u3057\u3001\u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u5185\u306E\u6539\u884C\u3084\u30BB\u30DF\u30B3\u30ED\u30F3\u306F\u524A\u9664\u3057\u306A\u3044 (#2153)\n // \u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u5916\u306E\u9023\u7D9A\u30BB\u30DF\u30B3\u30ED\u30F3\u3068\u9023\u7D9A\u6539\u884C\u3092\u524A\u9664\n code = removeDuplicateChars(code);\n // indent\u5206\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u8FFD\u52A0\n let spc = '';\n for (let i = 0; i < indent; i++) {\n spc += ' ';\n }\n // \u884C\u982D\u306E\";\"\u3092\u524A\u9664\n const result = [];\n const lines = code.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n let line = lines[i];\n line = line.replace(/^(\\s*);/, '$1');\n if (trim(line) === '') {\n continue;\n }\n result.push(spc + line);\n }\n // \u7D50\u679C\u306E\u30B3\u30FC\u30C9\u3092\u8FD4\u3059\n code = result.join('\\n');\n return code;\n}\n/**\n * \u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u5916\u306E\u9023\u7D9A\u30BB\u30DF\u30B3\u30ED\u30F3\u3068\u9023\u7D9A\u6539\u884C\u30921\u3064\u306B\u7F6E\u63DB\u3059\u308B\n * \u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u5185\u306E\u30BB\u30DF\u30B3\u30ED\u30F3\u3068\u6539\u884C\u306F\u4FDD\u8B77\u3059\u308B (#2153)\n * JavaScript\u306E\u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u3001\u6B63\u898F\u8868\u73FE\u3001\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30EA\u30C6\u30E9\u30EB\u3001\u30B3\u30E1\u30F3\u30C8\u3092\u8003\u616E\n */\nfunction removeDuplicateChars(code) {\n const result = [];\n let i = 0;\n let inString = false;\n let inRegex = false;\n let inTemplate = false;\n let inLineComment = false;\n let inBlockComment = false;\n let stringDelimiter = '';\n let prevChar = '';\n let lastSemiPos = -2; // \u6700\u5F8C\u306E\u30BB\u30DF\u30B3\u30ED\u30F3\u306E\u4F4D\u7F6E\n let lastNewlinePos = -2; // \u6700\u5F8C\u306E\u6539\u884C\u306E\u4F4D\u7F6E\n /**\n * \u76F4\u524D\u306E\u30D0\u30C3\u30AF\u30B9\u30E9\u30C3\u30B7\u30E5\u306E\u6570\u3092\u30AB\u30A6\u30F3\u30C8\n * \u5076\u6570\u500B\u306A\u3089\u6B21\u306E\u6587\u5B57\u306F\u30A8\u30B9\u30B1\u30FC\u30D7\u3055\u308C\u3066\u3044\u306A\u3044\n */\n const countBackslashes = (pos) => {\n let count = 0;\n let p = pos - 1;\n while (p >= 0 && code.charAt(p) === '\\\\') {\n count++;\n p--;\n }\n return count;\n };\n while (i < code.length) {\n const ch = code.charAt(i);\n const nextCh = i + 1 < code.length ? code.charAt(i + 1) : '';\n // \u884C\u30B3\u30E1\u30F3\u30C8\u306E\u51E6\u7406\n if (inLineComment) {\n result.push(ch);\n if (ch === '\\n') {\n inLineComment = false;\n }\n prevChar = ch;\n i++;\n continue;\n }\n // \u30D6\u30ED\u30C3\u30AF\u30B3\u30E1\u30F3\u30C8\u306E\u51E6\u7406\n if (inBlockComment) {\n result.push(ch);\n if (ch === '*' && nextCh === '/') {\n result.push(nextCh);\n inBlockComment = false;\n i += 2;\n prevChar = '/';\n continue;\n }\n prevChar = ch;\n i++;\n continue;\n }\n // \u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30EA\u30C6\u30E9\u30EB\u306E\u51E6\u7406\n if (inTemplate) {\n result.push(ch);\n if (ch === '`') {\n const backslashCount = countBackslashes(i);\n if (backslashCount % 2 === 0) {\n // \u5076\u6570\u500B\u306E\u30D0\u30C3\u30AF\u30B9\u30E9\u30C3\u30B7\u30E5 = \u30A8\u30B9\u30B1\u30FC\u30D7\u3055\u308C\u3066\u3044\u306A\u3044\n inTemplate = false;\n }\n }\n prevChar = ch;\n i++;\n continue;\n }\n // \u6B63\u898F\u8868\u73FE\u306E\u51E6\u7406\n if (inRegex) {\n result.push(ch);\n if (ch === '/') {\n const backslashCount = countBackslashes(i);\n if (backslashCount % 2 === 0) {\n inRegex = false;\n }\n }\n prevChar = ch;\n i++;\n continue;\n }\n // \u6587\u5B57\u5217\u30EA\u30C6\u30E9\u30EB\u306E\u51E6\u7406\n if (inString) {\n result.push(ch);\n if (ch === stringDelimiter) {\n const backslashCount = countBackslashes(i);\n if (backslashCount % 2 === 0) {\n // \u5076\u6570\u500B\u306E\u30D0\u30C3\u30AF\u30B9\u30E9\u30C3\u30B7\u30E5 = \u30A8\u30B9\u30B1\u30FC\u30D7\u3055\u308C\u3066\u3044\u306A\u3044\n inString = false;\n stringDelimiter = '';\n }\n }\n prevChar = ch;\n i++;\n continue;\n }\n // \u30B3\u30E1\u30F3\u30C8\u958B\u59CB\u30C1\u30A7\u30C3\u30AF\n if (ch === '/' && nextCh === '/') {\n result.push(ch);\n result.push(nextCh);\n inLineComment = true;\n i += 2;\n prevChar = '/';\n continue;\n }\n if (ch === '/' && nextCh === '*') {\n result.push(ch);\n result.push(nextCh);\n inBlockComment = true;\n i += 2;\n prevChar = '*';\n continue;\n }\n // \u6587\u5B57\u5217\u30FB\u6B63\u898F\u8868\u73FE\u30FB\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u30EA\u30C6\u30E9\u30EB\u306E\u958B\u59CB\u30C1\u30A7\u30C3\u30AF\n if (ch === '\"' || ch === '\\'') {\n inString = true;\n stringDelimiter = ch;\n result.push(ch);\n prevChar = ch;\n i++;\n continue;\n }\n if (ch === '`') {\n inTemplate = true;\n result.push(ch);\n prevChar = ch;\n i++;\n continue;\n }\n // \u6B63\u898F\u8868\u73FE\u30EA\u30C6\u30E9\u30EB\u306E\u958B\u59CB\u30C1\u30A7\u30C3\u30AF\uFF08\u7C21\u6613\u7248\uFF09\n // / \u306E\u524D\u304C\u6F14\u7B97\u5B50\u3084 ( \u3084 , \u3084 = \u306A\u3069\u306E\u5834\u5408\u306F\u6B63\u898F\u8868\u73FE\u306E\u53EF\u80FD\u6027\u304C\u9AD8\u3044\n if (ch === '/' && /[=([,;:!&|?+\\-*%^~{]|\\breturn\\b|\\bnew\\b/.test(prevChar)) {\n inRegex = true;\n result.push(ch);\n prevChar = ch;\n i++;\n continue;\n }\n // \u6587\u5B57\u5217\u5916\u306E\u9023\u7D9A\u30BB\u30DF\u30B3\u30ED\u30F3\u3092\u30B9\u30AD\u30C3\u30D7\n if (ch === ';' && lastSemiPos === i - 1) {\n // \u9023\u7D9A\u3059\u308B\u30BB\u30DF\u30B3\u30ED\u30F3\u306E2\u756A\u76EE\u4EE5\u964D\u306F\u30B9\u30AD\u30C3\u30D7\n lastSemiPos = i;\n i++;\n prevChar = ch;\n continue;\n }\n if (ch === ';') {\n lastSemiPos = i;\n }\n // \u6587\u5B57\u5217\u5916\u306E\u9023\u7D9A\u6539\u884C\u3092\u30B9\u30AD\u30C3\u30D7\n if (ch === '\\n' && lastNewlinePos === i - 1) {\n // \u9023\u7D9A\u3059\u308B\u6539\u884C\u306E2\u756A\u76EE\u4EE5\u964D\u306F\u30B9\u30AD\u30C3\u30D7\n lastNewlinePos = i;\n i++;\n prevChar = ch;\n continue;\n }\n if (ch === '\\n') {\n lastNewlinePos = i;\n }\n result.push(ch);\n prevChar = ch;\n i++;\n }\n return result.join('');\n}\n/**\n * \u524D\u5F8C\u306E\u7A7A\u767D\u3092\u524A\u9664\u3059\u308B\n * @param str \u5BFE\u8C61\u6587\u5B57\u5217\n * @returns \u30C8\u30EA\u30E0\u3057\u305F\u6587\u5B57\u5217\n */\nfunction trim(str) {\n str = String(str);\n return str.replace(/^\\s+|\\s+$/g, '');\n}\n", "/**\n * \u3088\u304F\u4F7F\u3046\u51E6\u7406\u3092\u307E\u3068\u3081\u305F\u3082\u306E\n */\nimport { NewEmptyToken } from './nako_types.mjs';\n/**\n * \u30C8\u30FC\u30AF\u30F3\u306E\u5185\u5BB9\u3092\u30C7\u30D0\u30C3\u30B0\u51FA\u529B\u3059\u308B\u95A2\u6570\n * @param tokens \u30C8\u30FC\u30AF\u30F3\u306E\u4E00\u89A7\n * @returns \u6587\u5B57\u5217\n */\nexport function debugTokens(tokens) {\n const result = [];\n for (let i = 0; i < tokens.length; i++) {\n const t = tokens[i];\n const ftype = t.type;\n const fvalue = t.value;\n let s = `[${ftype}:${fvalue}]`;\n if (ftype === fvalue) {\n s = ftype;\n }\n if (ftype === 'comma') {\n s = ',';\n }\n if (ftype === 'string') {\n s = `\"${fvalue}\"`;\n }\n if (ftype === 'number') {\n s = `(${fvalue})`;\n }\n if (ftype === 'word') {\n s = `[word:${fvalue}]`;\n }\n if (!result[t.line]) {\n result[t.line] = makeIndent(t.indent);\n }\n result[t.line] += s + t.josi + '|';\n }\n return result.join('\\n');\n}\nexport function makeIndent(n) {\n let s = '';\n for (let i = 0; i < n; i++) {\n s += ' ';\n }\n return s;\n}\nlet lastTokenInfo = NewEmptyToken();\nexport function newToken(type, value, templateToken = undefined) {\n if (templateToken) {\n lastTokenInfo = templateToken;\n }\n const t = NewEmptyToken(type, value, lastTokenInfo.indent, lastTokenInfo.line, lastTokenInfo.file);\n return t;\n}\n", "/** \u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u3092\u51E6\u7406\u3059\u308B\u30E2\u30B8\u30E5\u30FC\u30EB */\nimport { NakoIndentError } from '../src/nako_errors.mjs';\nimport { NewEmptyToken } from './nako_types.mjs';\nimport { debugTokens, newToken } from './nako_tools.mjs';\nconst IS_DEBUG = false;\nfunction isSkipWord(t) {\n if (t.type === '\u9055\u3048\u3070') {\n return true;\n }\n if (t.type === 'word' && t.value === '\u30A8\u30E9\u30FC' && t.josi === '\u306A\u3089\u3070') {\n return true;\n }\n return false;\n}\n// \u524D\u51E6\u7406\u3068\u3057\u3066\u3001JSON\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u5185\u306B\u6539\u884C\u304C\u3042\u308C\u3070\u524A\u9664\u3059\u308B\u51E6\u7406\u3092\u8FFD\u52A0\nfunction removeJsonEol(tokens) {\n let jsonObjLevel = 0;\n let jsonArrayLevel = 0;\n let jsonStartIndent = -1;\n let flagNeedResetIndent = false;\n for (let i = 0; i < tokens.length; i++) {\n const t = tokens[i];\n // start of JSON\n if (t.type === '{') {\n jsonObjLevel++;\n if (jsonStartIndent === -1) {\n jsonStartIndent = t.indent;\n }\n continue;\n }\n if (t.type === '[') {\n jsonArrayLevel++;\n if (jsonStartIndent === -1) {\n jsonStartIndent = t.indent;\n }\n continue;\n }\n // end of JSON\n if (t.type === '}') {\n jsonObjLevel--;\n if (jsonObjLevel === 0 && jsonArrayLevel === 0) {\n flagNeedResetIndent = true;\n }\n continue;\n }\n if (t.type === ']') {\n jsonArrayLevel--;\n if (jsonObjLevel === 0 && jsonArrayLevel === 0) {\n flagNeedResetIndent = true;\n }\n continue;\n }\n if (jsonObjLevel > 0 || jsonArrayLevel > 0) {\n t.indent = jsonStartIndent;\n if (t.type === 'eol') {\n // replace eol to comment\n t.type = 'range_comment';\n t.value = 'json::eol';\n }\n continue;\n }\n if (flagNeedResetIndent) {\n t.indent = jsonStartIndent;\n if (t.type === 'eol') {\n flagNeedResetIndent = false;\n jsonStartIndent = -1;\n }\n }\n }\n}\n/** \u30A4\u30F3\u30E9\u30A4\u30F3\u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587 --- \u672B\u5C3E\u306E\":\"\u3092\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u8003\u616E\u3057\u3066\"\u3053\u3053\u307E\u3067\"\u3092\u633F\u5165 (#1215) */\nexport function convertInlineIndent(tokens) {\n //\n // 0:\u3082\u3057\u3001A=0\u306A\u3089\u3070:\n // 2: \u3082\u3057\u3001B=0\u306A\u3089\u3070:\n // 4: \u300CA=0,B=0\u300D\u3092\u8868\u793A\u3002\n // 2: \u9055\u3048\u3070:\n // 4: \u300CA=0,B!=0\u300D\u3092\u8868\u793A\u3002\n // 5:\u9055\u3048\u3070:\n // 6: \u300CA!=0\u300D\u3092\u8868\u793A\u3002\n // \u524D\u51E6\u7406\n removeJsonEol(tokens);\n // \u4E00\u884C\u305A\u3064\u51E6\u7406\u3059\u308B\n const lines = splitTokens(tokens, 'eol');\n const blockIndents = [];\n let checkICount = -1;\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n // \u7A7A\u884C\u306F\u98DB\u3070\u3059 || \u30B3\u30E1\u30F3\u30C8\u884C\u3060\u3051\u306E\u884C\u3082\u98DB\u3070\u3059\n if (IsEmptyLine(line)) {\n continue;\n }\n const leftToken = GetLeftTokens(line);\n // \u30A4\u30F3\u30C7\u30F3\u30C8\u306E\u7D42\u4E86\u3092\u78BA\u8A8D\u3059\u308B\u5FC5\u8981\u304C\u3042\u308B\u304B\uFF1F\n if (checkICount >= 0) {\n const lineICount = leftToken.indent;\n while (checkICount >= lineICount) {\n const tFirst = leftToken;\n // console.log('@@', lineICount, '>>', checkICount, tFirst.type)\n if (isSkipWord(tFirst) && (checkICount === lineICount)) { // \u300C\u9055\u3048\u3070\u300D\u3084\u300C\u30A8\u30E9\u30FC\u306A\u3089\u3070\u300D\n // \u300C\u3053\u3053\u307E\u3067\u300D\u306E\u633F\u5165\u4E0D\u8981 / \u305F\u3060\u3057\u30CD\u30B9\u30C8\u3057\u305F\u969B\u306E\u300C\u9055\u3048\u3070\u300D(\u4E0A\u8A18\u306E5\u306E\u72B6\u614B\u306A\u3089\u5FC5\u8981)\n }\n else {\n // \u3053\u3053\u307E\u3067\u3092\u633F\u5165\u3059\u308B\n lines[i - 1].push(newToken('\u3053\u3053\u307E\u3067', '\u3053\u3053\u307E\u3067', tFirst));\n lines[i - 1].push(newToken('eol', '\\n', tFirst));\n }\n blockIndents.pop();\n if (blockIndents.length > 0) {\n checkICount = blockIndents[blockIndents.length - 1];\n }\n else {\n checkICount = -1;\n break;\n }\n }\n }\n // \u672B\u5C3E\u306E\u300C:\u300D\u3092\u30C1\u30A7\u30C3\u30AF\n const tLast = getLastTokenWithoutEOL(line);\n if (tLast.type === ':') {\n // \u672B\u5C3E\u306E\u300C:\u300D\u3092\u524A\u9664\n lines[i] = lines[i].filter(t => t !== tLast);\n checkICount = tLast.indent;\n blockIndents.push(checkICount);\n }\n }\n if (lines.length > 0 && blockIndents.length > 0) {\n // \u30C8\u30FC\u30AF\u30F3\u60C5\u5831\u3092\u5F97\u308B\u305F\u3081\u3001\u76F4\u8FD1\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u5F97\u308B\n let t = tokens[0];\n for (let i = lines.length - 1; i >= 0; i--) {\n const line = lines[i];\n if (line.length > 0) {\n t = line[line.length - 1];\n break;\n }\n }\n // \u3053\u3053\u307E\u3067\u3092\u5DEE\u3057\u8FBC\u3080\n for (let i = 0; i < blockIndents.length; i++) {\n lines[lines.length - 1].push(newToken('\u3053\u3053\u307E\u3067', '\u3053\u3053\u307E\u3067', t));\n lines[lines.length - 1].push(newToken('eol', '\\n', t));\n }\n }\n const result = joinTokenLines(lines);\n if (IS_DEBUG) {\n console.log('###', debugTokens(result));\n }\n return result;\n}\n/** \u884C\u3054\u3068\u306B\u5206\u5272\u3057\u3066\u3044\u305F\u30C8\u30FC\u30AF\u30F3\u3092\u304F\u3063\u3064\u3051\u308B */\nexport function joinTokenLines(lines) {\n const r = [];\n for (const line of lines) {\n for (const t of line) {\n r.push(t);\n }\n }\n return r;\n}\n// \u30C8\u30FC\u30AF\u30F3\u884C\u306E\u6700\u5F8C\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u53D6\u5F97\u3059\u308B\nfunction getLastTokenWithoutEOL(line) {\n const len = line.length;\n let res = NewEmptyToken('?');\n if (len === 0) {\n return res;\n }\n // \u6539\u884C\u3084\u30B3\u30E1\u30F3\u30C8\u306A\u3089\u3070\u3001\u524D\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u53D6\u5F97\n for (let i = 0; i < len; i++) {\n // \u884C\u672B\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u53D6\u5F97\n res = line[len - i - 1];\n if (res.type === 'eol') {\n continue;\n }\n if (res.type === 'line_comment' || res.type === 'range_comment') {\n continue;\n }\n break;\n }\n return res;\n}\nexport function splitTokens(tokens, delimiter) {\n const result = [];\n let line = [];\n let kakko = 0;\n for (const t of tokens) {\n line.push(t);\n if (t.type === '{') {\n kakko++;\n }\n else if (t.type === '}') {\n kakko--;\n }\n else if (kakko === 0 && t.type === delimiter) {\n result.push(line);\n line = [];\n }\n }\n if (line.length > 0) {\n result.push(line);\n }\n return result;\n}\n/** \u30C8\u30FC\u30AF\u30F3\u884C\u304C\u7A7A\u304B\u3069\u3046\u304B\u8ABF\u3079\u308B */\nfunction IsEmptyLine(line) {\n if (line.length === 0) {\n return true;\n }\n for (let j = 0; j < line.length; j++) {\n const ty = line[j].type;\n if (ty === 'eol' || ty === 'line_comment' || ty === 'range_comment') {\n continue;\n }\n return false;\n }\n return true;\n}\n/** \u30B3\u30E1\u30F3\u30C8\u3092\u9664\u53BB\u3057\u305F\u6700\u521D\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u8FD4\u3059 */\nfunction GetLeftTokens(line) {\n for (let i = 0; i < line.length; i++) {\n const t = line[i].type;\n if (t === 'eol' || t === 'line_comment' || t === 'range_comment') {\n continue;\n }\n return line[i];\n }\n return line[0];\n}\n// \u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\nconst INDENT_MODE_KEYWORDS = ['!\u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587', '!\u3053\u3053\u307E\u3067\u3060\u308B\u3044', '\uD83D\uDCA1\u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587', '\uD83D\uDCA1\u3053\u3053\u307E\u3067\u3060\u308B\u3044'];\n/** \u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587 --- \u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u898B\u3066\"\u3053\u3053\u307E\u3067\"\u3092\u81EA\u52D5\u633F\u5165 (#596) */\nexport function convertIndentSyntax(tokens) {\n // \u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u306E\u5909\u63DB\u304C\u5FC5\u8981\u304B?\n if (!useIndentSynax(tokens)) {\n return tokens;\n }\n // \u300E\u3053\u3053\u307E\u3067\u300F\u304C\u3042\u3063\u305F\u3089\u30A8\u30E9\u30FC\u3092\u51FA\u3059\n for (const t of tokens) {\n if (t.type === '\u3053\u3053\u307E\u3067') {\n // \u30A8\u30E9\u30FC\u3092\u51FA\u3059\n throw new NakoIndentError('\u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u304C\u6709\u52B9\u5316\u3055\u308C\u3066\u3044\u308B\u3068\u304D\u306B\u300E\u3053\u3053\u307E\u3067\u300F\u3092\u4F7F\u3046\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002', t.line, t.file);\n }\n }\n // JSON\u69CB\u6587\u306E\u30C1\u30A7\u30C3\u30AF\n let jsonObjLevel = 0;\n let jsonArrayLevel = 0;\n const checkJsonSyntax = (line) => {\n // JSON\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u304C\u3042\u308B\u304B\uFF1F\n line.forEach((t) => {\n if (t.type === '{') {\n jsonObjLevel++;\n }\n if (t.type === '}') {\n jsonObjLevel--;\n }\n if (t.type === '[') {\n jsonArrayLevel++;\n }\n if (t.type === ']') {\n jsonArrayLevel--;\n }\n });\n };\n // \u884C\u3054\u3068\u306B\u30C8\u30FC\u30AF\u30F3\u3092\u5206\u5272\n const blockIndents = [];\n const lines = splitTokens(tokens, 'eol');\n let lastI = 0;\n // \u5404\u884C\u3092\u78BA\u8A8D\u3059\u308B\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n // \u7A7A\u884C\u306F\u98DB\u3070\u3059 || \u30B3\u30E1\u30F3\u30C8\u884C\u3060\u3051\u306E\u884C\u3082\u98DB\u3070\u3059\n if (IsEmptyLine(line)) {\n continue;\n }\n // JSON\u69CB\u6587\u306E\u30C1\u30A7\u30C3\u30AF\n if (jsonArrayLevel > 0 || jsonObjLevel > 0) {\n checkJsonSyntax(line);\n continue;\n }\n const leftToken = GetLeftTokens(line);\n const curI = leftToken.indent;\n if (curI === lastI) {\n continue;\n }\n // \u30D6\u30ED\u30C3\u30AF\u306E\u7D42\u4E86?\n // 0: 3\u56DE\n // 2: \u3082\u3057\u30011 > 1\u306A\u3089\u3070\n // 4: 1\u3092\u8868\u793A\n // 2: \u9055\u3048\u3070\n // 4: 2\u3092\u8868\u793A\n // 0:\n // \u30D6\u30ED\u30C3\u30AF\u306E\u7D42\u4E86?\n if (lastI >= 0) {\n while (lastI > curI) {\n const blockIndentTopLast = blockIndents[blockIndents.length - 1][1];\n // console.log('@@[', i, ']', lastI, '>', curI, '@', blockIndentTopLast, leftToken.type)\n if (isSkipWord(leftToken) && blockIndentTopLast === curI) {\n // \u300C\u9055\u3048\u3070\u300D\u306A\u3069\u306A\u3089\u4E0D\u8981 (\u305F\u3060\u3057\u3001\u9055\u3048\u3070\u304C\u30CD\u30B9\u30C8\u3057\u3066\u3044\u308B\u5834\u5408\u306F\u5FC5\u8981)\n }\n else {\n const t = lines[i - 1][0];\n lines[i - 1].push(newToken('\u3053\u3053\u307E\u3067', '\u3053\u3053\u307E\u3067', t));\n lines[i - 1].push(newToken('eol', '\\n', t));\n }\n blockIndents.pop();\n if (blockIndents.length > 0) {\n lastI = blockIndents[blockIndents.length - 1][0];\n }\n else {\n lastI = 0;\n break;\n }\n }\n }\n if (jsonArrayLevel > 0 || jsonObjLevel > 0) {\n continue;\n }\n // JSON\u69CB\u6587\u306E\u30C1\u30A7\u30C3\u30AF\n checkJsonSyntax(line);\n // \u30D6\u30ED\u30C3\u30AF\u306E\u958B\u59CB\uFF1F\n if (curI > lastI) {\n blockIndents.push([curI, lastI]);\n lastI = curI;\n continue;\n }\n }\n // \u672B\u5C3E\u306B\u300C\u3053\u3053\u307E\u3067\u300D\u3092\u8FFD\u52A0\u3059\u308B\n for (let i = 0; i < blockIndents.length; i++) {\n // \u30C8\u30FC\u30AF\u30F3\u60C5\u5831\u3092\u5F97\u308B\u305F\u3081\u3001\u76F4\u8FD1\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u5F97\u308B\n let t = tokens[0];\n for (let i = lines.length - 1; i >= 0; i--) {\n const line = lines[i];\n if (line.length > 0) {\n // \u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3068\u306A\u308B\u30C8\u30FC\u30AF\u30F3\u3092\u884C\u306E\u5F8C\u65B9\u304B\u3089\u9806\u306B\u63A2\u3059\n for (let j = 0; j < line.length; j++) {\n const tt = line[line.length - j - 1];\n if (tt.line > 0) {\n t = tt;\n break;\n }\n }\n break;\n }\n }\n lines[lines.length - 1].push(newToken('\u3053\u3053\u307E\u3067', '\u3053\u3053\u307E\u3067', t));\n lines[lines.length - 1].push(newToken('eol', '\\n', t));\n }\n const result = joinTokenLines(lines);\n return result;\n}\nfunction useIndentSynax(tokens) {\n // \u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u304C\u5FC5\u8981\u304B\u30C1\u30A7\u30C3\u30AF (\u6700\u521D\u306E100\u500B\u3092\u30C1\u30A7\u30C3\u30AF)\n for (let i = 0; i < tokens.length; i++) {\n if (i > 100) {\n break;\n }\n const t = tokens[i];\n if (t.type === 'line_comment' && (INDENT_MODE_KEYWORDS.indexOf(t.value) >= 0)) {\n return true;\n }\n }\n return false;\n}\n", "/**\n * DNCL\u306B\u5BFE\u5FDC\u3059\u308B\u69CB\u6587\n */\n// import { NakoIndentError } from './nako_errors.mjs'\nimport { NewEmptyToken } from './nako_types.mjs';\nimport { joinTokenLines, splitTokens } from './nako_indent_inline.mjs';\n// DNCL\u30E2\u30FC\u30C9\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\nconst DNCL_KEYWORDS = ['!DNCL\u30E2\u30FC\u30C9', '\uD83D\uDCA1DNCL\u30E2\u30FC\u30C9'];\n// \u5358\u7D14\u306A\u7F6E\u63DB\u30C1\u30A7\u30C3\u30AF\nconst DNCL_SIMPLES = {\n '\u2190:\u2190': ['eq', '='],\n '\u00F7:\u00F7': ['\u00F7\u00F7', '\u00F7\u00F7'],\n '{:{': ['[', '['],\n '}:}': [']', ']'],\n 'word:\u3092\u5B9F\u884C': ['\u3053\u3053\u307E\u3067', '\u3053\u3053\u307E\u3067'],\n 'word:\u4E71\u6570': ['word', '\u4E71\u6570\u7BC4\u56F2'],\n 'word:\u8868\u793A': ['word', '\u9023\u7D9A\u8868\u793A']\n};\n/**\n * DNCL\u306E\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u3092\u306A\u3067\u3057\u3053\u306B\u5909\u63DB\u3059\u308B\n */\nexport function convertDNCL(tokens) {\n if (!useDNCLmode(tokens)) {\n return tokens;\n }\n // \u4E00\u884C\u305A\u3064\u306B\u5206\u3051\u308B\n const lines = splitTokens(tokens, 'eol');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (line.length <= 1) {\n continue;\n } // \u7A7A\u884C\u306F\u98DB\u3070\u3059\n // \u884C\u982D\u306E | \u306F\u305F\u3060\u306E\u30A4\u30F3\u30C7\u30F3\u30C8\n for (let j = 0; j < line.length; j++) {\n if (line[j].type === '|') {\n line[j].type = 'range_comment';\n continue;\n }\n break;\n }\n // \u5F8C\u5224\u5B9A\u306E\u7E70\u308A\u8FD4\u3057\u306E\u5B9F\u88C5\u306E\u305F\u3081\n const t = line[0];\n if (t.type === 'word' && t.value === '\u7E70\u8FD4') {\n line.splice(0, line.length, NewEmptyToken('word', '\u5F8C\u5224\u5B9A', t.indent, t.line, t.file), NewEmptyToken('word', '\u7E70\u8FD4', t.indent, t.line, t.file));\n }\n // ^\\s*\u3092,?(.+)\u306B\u306A\u308B\u307E\u3067(\u7E70\u308A\u8FD4\u3059|\u5B9F\u884C\u3059\u308B)/\n const fi = findTokens(line, ['word:\u306A\u308B', 'word:\u7E70\u8FD4']);\n if (fi > 0) {\n replaceAtohantei(line, fi);\n }\n const fi2 = findTokens(line, ['word:\u306A\u308B', 'word:\u5B9F\u884C']);\n if (fi2 > 0) {\n replaceAtohantei(line, fi2);\n }\n // \u3082\u3057(\u6761\u4EF6)\u3067\u306A\u3044\u306A\u3089\u3070 \u2192 \u3082\u3057(\u6761\u4EF6)\u3067\u306A\u3051\u308C\u3070\n const nai = findTokens(line, ['word:\u306A\u3044']);\n if (nai >= 1) {\n const tt = line[nai];\n if (tt.josi === '\u306A\u3089\u3070') {\n line[nai - 1].josi = '\u3067\u306A\u3051\u308C\u3070';\n line.splice(nai, 1);\n }\n }\n // \u4E8C\u9032\u3067\u8868\u793A (255) \u2192 \u4E8C\u9032\u8868\u793A(255)\n for (;;) {\n const ni = findTokens(line, ['word:\u4E8C\u9032', 'word:\u8868\u793A']);\n if (ni < 0) {\n break;\n }\n line[ni].value = '\u4E8C\u9032\u8868\u793A';\n line[ni].josi = '';\n line.splice(ni + 1, 1);\n }\n // '\u6539\u884C\u306A\u3057\u3067\u8868\u793A' \u2192 '\u9023\u7D9A\u7121\u6539\u884C\u8868\u793A'\n for (;;) {\n const ni = findTokens(line, ['word:\u6539\u884C', 'word:\u8868\u793A']);\n if (ni < 0) {\n break;\n }\n // \u3053\u3053\u300C\u6539\u884C\u306A\u3057\u3067\u8868\u793A\u300D\u3067\u3082\u300C\u6539\u884C\u3042\u308A\u3067\u8868\u793A\u300D\u3067\u3082\u540C\u3058\u306B\u306A\u3063\u3066\u3057\u307E\u3046\n // \u306A\u3067\u3057\u3053\u306E\u5236\u9650\u306E\u305F\u3081\u4ED5\u65B9\u306A\u3057\n // \u300C\u6539\u884C\u3042\u308A\u3067\u8868\u793A\u300D\u306F\u4ECA\u306E\u3068\u3053\u308DDNCL\u306B\u5B58\u5728\u3057\u306A\u3044\u306E\u3067\u7121\u8996\u3059\u308B\n // \u3082\u3057\u5C06\u6765\u7684\u306B\u533A\u5225\u304C\u5FC5\u8981\u306A\u3089\u3001\u30D7\u30EA\u30D7\u30ED\u30BB\u30B9\u51E6\u7406\u3067\u30DE\u30AF\u30ED\u7684\u306B\u7F6E\u63DB\u51E6\u7406\u3092\u884C\u3046\u3053\u3068\u3067\u5BFE\u5FDC\u3067\u304D\u308B\u3068\u601D\u3046\n const t = line[ni];\n t.value = '\u9023\u7D9A\u7121\u6539\u884C\u8868\u793A';\n t.josi = '';\n line.splice(ni + 1, 1);\n }\n // '\u3092\u5B9F\u884C\u3057,\u305D\u3046\u3067\u306A\u3051\u308C\u3070': '\u9055\u3048\u3070',\n for (;;) {\n const ni = findTokens(line, ['word:\u3092\u5B9F\u884C', 'comma:,', 'word:\u305D\u3046']);\n if (ni < 0) {\n break;\n }\n const sou = line[ni + 2];\n if (sou.josi === '\u3067\u306A\u3051\u308C\u3070') {\n sou.type = '\u9055\u3048\u3070';\n sou.value = '\u9055\u3048\u3070';\n sou.josi = '';\n line.splice(ni, 3, sou);\n continue;\n }\n else if (sou.josi === '\u3067') {\n const nakumosi = line[ni + 3];\n if (nakumosi.value.substring(0, 4) === '\u306A\u304F\u3082\u3057') {\n sou.type = '\u9055\u3048\u3070';\n sou.value = '\u9055\u3048\u3070';\n sou.josi = '';\n line.splice(ni, 3, sou);\n if (nakumosi.value.length > 4) {\n const nakumosiTudukiStr = nakumosi.value.substring(4);\n const nakumosiToken = NewEmptyToken('word', nakumosiTudukiStr, nakumosi.indent, nakumosi.line, nakumosi.file);\n if (nakumosiTudukiStr.match(/^\\d/)) {\n nakumosiToken.type = 'number';\n }\n line.splice(ni + 2, 0, nakumosiToken);\n nakumosi.value = nakumosi.value.substring(0, 4);\n }\n nakumosi.type = '\u3082\u3057';\n nakumosi.value = '\u3082\u3057';\n nakumosi.josi = '';\n continue;\n }\n }\n break;\n }\n // I\u30921\u304B\u3089100\u307E\u30671(\u305A\u3064)|\u5897\u3084\u3057\u306A(\u304C)|\u3089\n for (;;) {\n const ni = findTokens(line, ['word:\u5897', 'word:\u3089']);\n if (ni < 0) {\n break;\n }\n const fu = line[ni];\n fu.type = 'word';\n fu.value = '\u5897\u7E70\u8FD4';\n fu.josi = '';\n line.splice(ni, 2, fu);\n }\n // I\u30921\u304B\u3089100\u307E\u30671(\u305A\u3064)|\u5897\u3084\u3057\u306A(\u304C)|\u3089\n for (;;) {\n const ni = findTokens(line, ['word:\u6E1B', 'word:\u3089']);\n if (ni < 0) {\n break;\n }\n const fu = line[ni];\n fu.type = 'word';\n fu.value = '\u6E1B\u7E70\u8FD4';\n fu.josi = '';\n line.splice(ni, 2, fu);\n }\n // \u3092\u7E70\u308A\u8FD4\u3059 \u2192 \u3053\u3053\u307E\u3067\n for (;;) {\n const ni = findTokens(line, ['word:\u3092\u7E70\u308A\u8FD4']);\n if (ni < 0) {\n break;\n }\n const fu = line[ni];\n fu.type = '\u3053\u3053\u307E\u3067';\n fu.value = '\u3053\u3053\u307E\u3067';\n fu.josi = '';\n }\n // '\u306E\u3059\u3079\u3066\u306E\u8981\u7D20\u30920\u306B\u3059\u308B'\n // '\u306E\u3059\u3079\u3066\u306E\u8981\u7D20\u306B0\u3092\u4EE3\u5165\u3059\u308B'\n for (;;) {\n const ni = findTokens(line, ['word:\u3059\u3079\u3066', 'word:\u8981\u7D20']);\n if (ni >= 1) {\n replaceAllElementV(line, ni);\n }\n else {\n break;\n }\n }\n // '\u306E\u3059\u3079\u3066\u306E\u5024\u30920\u306B\u3059\u308B'\n for (;;) {\n const ni = findTokens(line, ['word:\u3059\u3079\u3066', 'word:\u5024']);\n if (ni >= 1) {\n replaceAllElementV(line, ni);\n }\n else {\n break;\n }\n }\n // \u4E00\u3064\u305A\u3064\u30C1\u30A7\u30C3\u30AF\n let j = 0;\n while (j < line.length) {\n const t = line[j];\n // \u6E1B\u3068\u5897\u306E\u5206\u5272\n if (t.type === 'word' && t.value.length >= 2) {\n const c = t.value.charAt(t.value.length - 1);\n if (c === '\u6E1B' || c === '\u5897') {\n t.value = t.value.substring(0, t.value.length - 1);\n t.josi = '\u3060\u3051';\n line.splice(j + 1, 0, NewEmptyToken('word', c, t.indent, t.line, t.file));\n }\n j++;\n continue;\n }\n j++;\n }\n }\n // \u6700\u5F8C\u306B\u5358\u7D14\u306A\u7F6E\u63DB\u3092\u884C\u3046\n for (let i = 0; i < tokens.length; i++) {\n const t = tokens[i];\n const a = DNCL_SIMPLES[String(t.type) + ':' + String(t.value)];\n if (a !== undefined) {\n t.type = a[0];\n t.value = a[1];\n }\n }\n tokens = joinTokenLines(lines);\n return tokens;\n}\nfunction replaceAllElementV(line, ni) {\n //\n // const ni = findTokens(line, ['word:\u3059\u3079\u3066', 'word:\u8981\u7D20'])\n //\n const t = line[ni];\n line[ni - 1].josi = '';\n const eq = NewEmptyToken('eq', '=', t.indent, t.line, t.file);\n const begin = NewEmptyToken('[', '[', t.indent, t.line, t.file);\n const end = NewEmptyToken(']', ']', t.indent, t.line, t.file);\n end.josi = '\u306B';\n const val = line[ni + 2];\n val.josi = '';\n const times = NewEmptyToken('number', 100, t.indent, t.line, t.file);\n times.josi = '\u3092';\n const mul = NewEmptyToken('word', '\u639B', t.indent, t.line, t.file);\n line.splice(ni, 4, eq, begin, val, end, times, mul);\n}\nfunction replaceAtohantei(tokens, fi) {\n // `\u3053\u3053\u307E\u3067\u3001(${r[1]})\u306B\u306A\u308B\u307E\u3067\u306E\u9593`\n const wo = findTokens(tokens, ['word:\u3092']);\n if (wo >= 0) {\n tokens[wo].type = '\u3053\u3053\u307E\u3067';\n tokens[wo].value = '\u3053\u3053\u307E\u3067';\n }\n const ga = findTokens(tokens, ['word:\u304C']);\n if (ga >= 0) {\n tokens[ga].type = '\u3053\u3053\u307E\u3067';\n tokens[ga].value = '\u3053\u3053\u307E\u3067';\n }\n // \u306A\u308B:\u307E\u3067(fi) \u5B9F\u884C(fi+1)\n tokens[fi + 1].value = '\u9593';\n}\nfunction findTokens(tokens, findTypeValue) {\n const findA = findTypeValue.map(s => s.split(':'));\n for (let i = 0; i < tokens.length; i++) {\n let flag = true;\n for (let j = 0; j < findA.length; j++) {\n const f = findA[j];\n const idx = i + j;\n if (idx >= tokens.length) {\n return -1;\n }\n if (tokens[idx].type === f[0] && tokens[idx].value === f[1]) {\n continue;\n }\n else {\n flag = false;\n break;\n }\n }\n if (flag) {\n return i;\n }\n }\n return -1;\n}\nfunction useDNCLmode(tokens) {\n // \u5148\u982D\u306E100\u8A9E\u8ABF\u3079\u308B\n for (let i = 0; i < tokens.length; i++) {\n if (i > 100) {\n break;\n }\n const t = tokens[i];\n if (t.type === 'line_comment' && DNCL_KEYWORDS.indexOf(t.value) >= 0) {\n t.type = 'DNCL\u30E2\u30FC\u30C9';\n return true;\n }\n }\n return false;\n}\nexport const NakoDncl = {\n convert: convertDNCL\n};\n", "/**\n * DNCL ver2 \u306B\u5BFE\u5FDC\u3059\u308B\u69CB\u6587\n */\n// import { NakoIndentError } from './nako_errors.mjs'\nimport { NewEmptyToken } from './nako_types.mjs';\nimport { joinTokenLines, splitTokens } from './nako_indent_inline.mjs';\nimport { newToken, debugTokens } from './nako_tools.mjs';\nconst IS_DEBUG = false;\nconst DNCL_ARRAY_INIT_COUNT = 30;\n// DNCL2\u30E2\u30FC\u30C9\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\nconst DNCL2_KEYWORDS = ['!DNCL2\u30E2\u30FC\u30C9', '\uD83D\uDCA1DNCL2\u30E2\u30FC\u30C9', '!DNCL2', '\uD83D\uDCA1DNCL2'];\n// \u5358\u7D14\u306A\u7F6E\u63DB\u30C1\u30A7\u30C3\u30AF\nconst DNCL_SIMPLES = {\n '\u2190:\u2190': ['eq', '='],\n '\u00F7:\u00F7': ['\u00F7\u00F7', '\u00F7\u00F7'],\n '{:{': ['[', '['],\n '}:}': [']', ']'],\n // 'word:and': ['and', '\u304B\u3064'],\n // 'word:or': ['or', '\u307E\u305F\u306F'],\n 'word:not': ['not', '!'],\n 'word:\u4E71\u6570': ['word', '\u4E71\u6570\u7BC4\u56F2'],\n 'word:\u8868\u793A': ['word', '\u9023\u7D9A\u8868\u793A'],\n 'word:\u3068\u5B9A\u7FA9': ['\u3053\u3053\u307E\u3067', '\u3053\u3053\u307E\u3067'] // \u300C\u3068\u5B9A\u7FA9\u300D\u2192\u300C\u3053\u3053\u307E\u3067\u300D\n};\n/**\n * DNCL\u306E\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u3092\u306A\u3067\u3057\u3053\u306B\u5909\u63DB\u3059\u308B\n */\nexport function convertDNCL2(tokens) {\n if (!useDNCL2mode(tokens)) {\n return tokens;\n }\n // \u4E00\u884C\u305A\u3064\u306B\u5206\u3051\u308B\n const lines = splitTokens(tokens, 'eol');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (line.length <= 1) {\n continue;\n } // \u7A7A\u884C\u306F\u98DB\u3070\u3059\n // --- \u5236\u5FA1\u69CB\u6587\u306E\u5909\u63DB ---\n // \u3082\u3057(\u6761\u4EF6)\u3067\u306A\u3044\u306A\u3089\u3070 \u2192 \u3082\u3057(\u6761\u4EF6)\u3067\u306A\u3051\u308C\u3070\n const nai = findTokens(line, ['word:\u306A\u3044']);\n if (nai >= 1) {\n const tt = line[nai];\n if (tt.josi === '\u306A\u3089\u3070') {\n line[nai - 1].josi = '\u3067\u306A\u3051\u308C\u3070';\n line.splice(nai, 1);\n }\n }\n // \u305D\u3046\u3067\u306A\u3051\u308C\u3070(\u305D\u3046|\u3067\u306A\u3051\u308C\u3070) or \u305D\u3046\u3067\u306A\u304F \u2192 \u9055\u3048\u3070\n for (let ni = 0; ni < line.length; ni++) {\n const t = line[ni];\n if ((t.value === '\u305D\u3046' || t.value === '\u305D\u308C') && (t.josi === '\u3067\u306A\u3051\u308C\u3070' || t.josi === '\u3067\u306A\u304F')) {\n t.type = '\u9055\u3048\u3070';\n t.value = '\u9055\u3048\u3070';\n t.josi = '';\n }\n }\n // '\u3092\u5B9F\u884C\u3057,\u305D\u3046\u3067\u306A\u3051\u308C\u3070': '\u9055\u3048\u3070',\n for (;;) {\n const ni = findTokens(line, ['word:\u3092\u5B9F\u884C', 'comma:,', 'word:\u305D\u3046']);\n if (ni < 0) {\n break;\n }\n const sou = line[ni + 2];\n if (sou.josi === '\u3067\u306A\u3051\u308C\u3070') {\n sou.type = '\u9055\u3048\u3070';\n sou.value = '\u9055\u3048\u3070';\n sou.josi = '';\n line.splice(ni, 3, sou);\n continue;\n }\n else if (sou.josi === '\u3067') {\n const nakumosi = line[ni + 3];\n if (nakumosi.value.substring(0, 4) === '\u306A\u304F\u3082\u3057') {\n sou.type = '\u9055\u3048\u3070';\n sou.value = '\u9055\u3048\u3070';\n sou.josi = '';\n line.splice(ni, 3, sou);\n if (nakumosi.value.length > 4) {\n const nakumosiTudukiStr = nakumosi.value.substring(4);\n const nakumosiToken = NewEmptyToken('word', nakumosiTudukiStr, nakumosi.indent, nakumosi.line, nakumosi.file);\n if (nakumosiTudukiStr.match(/^\\d/)) {\n nakumosiToken.type = 'number';\n }\n line.splice(ni + 2, 0, nakumosiToken);\n nakumosi.value = nakumosi.value.substring(0, 4);\n }\n nakumosi.type = '\u3082\u3057';\n nakumosi.value = '\u3082\u3057';\n nakumosi.josi = '';\n continue;\n }\n }\n break;\n }\n // '\u305D\u3046\u3067\u306A\u304F': '\u9055\u3048\u3070',\n for (;;) {\n const ni = findTokens(line, ['word:\u305D\u3046', 'word:\u306A\u304F']);\n if (ni < 0) {\n break;\n }\n const sou = line[ni];\n if (sou.josi === '\u3067') {\n sou.type = '\u9055\u3048\u3070';\n sou.value = '\u9055\u3048\u3070';\n sou.josi = '';\n line.splice(ni + 1, 1);\n // console.log('@@@', line.map(v => v.value).join('|'))\n continue;\n }\n break;\n }\n // '\u305D\u3046\u3067\u306A\u304F\u3082\u3057': '\u9055\u3048\u3070,\u3082\u3057'\n for (;;) {\n const ni = findTokens(line, ['word:\u305D\u3046', 'word:\u306A\u304F\u3082\u3057']);\n if (ni < 0) {\n break;\n }\n const sou = line[ni];\n const nakumosi = line[ni + 1];\n sou.type = '\u9055\u3048\u3070';\n sou.value = '\u9055\u3048\u3070';\n sou.josi = '';\n nakumosi.type = '\u3082\u3057';\n nakumosi.value = '\u3082\u3057';\n nakumosi.josi = '';\n }\n // I\u30921\u304B\u3089100\u307E\u30671(\u305A\u3064)|\u5897\u3084\u3057\u306A(\u304C)|\u3089\n for (;;) {\n const ni = findTokens(line, ['word:\u5897', 'word:\u3089']);\n if (ni < 0) {\n break;\n }\n const fu = line[ni];\n fu.type = 'word';\n fu.value = '\u5897\u7E70\u8FD4';\n fu.josi = '';\n line.splice(ni, 2, fu);\n }\n // I\u30921\u304B\u3089100\u307E\u30671(\u305A\u3064)|\u5897\u3084\u3057\u306A(\u304C)|\u3089\n for (;;) {\n const ni = findTokens(line, ['word:\u6E1B', 'word:\u3089']);\n if (ni < 0) {\n break;\n }\n const fu = line[ni];\n fu.type = 'word';\n fu.value = '\u6E1B\u7E70\u8FD4';\n fu.josi = '';\n line.splice(ni, 2, fu);\n }\n // I\u30921\u304B\u3089100\u307E\u30671(\u305A\u3064)|\u5897\u3084\u3057\u306A(\u304C)|\u3089\u7E70\u308A\u8FD4(\u3059)\n for (;;) {\n const ni = findTokens(line, ['word:\u5897', 'word:\u3089\u7E70\u308A\u8FD4']);\n if (ni < 0) {\n break;\n }\n const fu = line[ni];\n fu.type = 'word';\n fu.value = '\u5897\u7E70\u8FD4';\n fu.josi = '';\n line.splice(ni, 2, fu);\n }\n // I\u30921\u304B\u3089100\u307E\u30671(\u305A\u3064)|\u5897\u3084\u3057\u306A(\u304C)|\u3089\u7E70\u308A\u8FD4\u3059\n for (;;) {\n const ni = findTokens(line, ['word:\u6E1B', 'word:\u3089\u7E70\u308A\u8FD4']);\n if (ni < 0) {\n break;\n }\n const fu = line[ni];\n fu.type = 'word';\n fu.value = '\u6E1B\u7E70\u8FD4';\n fu.josi = '';\n line.splice(ni, 2, fu);\n }\n // --- \u914D\u5217\u5909\u6570\u5468\u308A\u306E\u5909\u63DB ---\n for (let i = 0; i < line.length; i++) {\n // \u914D\u5217|Hindo\u306E|\u3059\u3079\u3066\u306E|(\u8981\u7D20\u306B|\u5024\u306B)|10\u3092|\u4EE3\u5165\u3059\u308B\n if (tokenEq([['word:\u914D\u5217', 'word:\u914D\u5217\u5909\u6570'], 'word', 'word:\u3059\u3079\u3066', ['word:\u8981\u7D20', 'word:\u5024'], '*', 'word:\u4EE3\u5165'], line, i)) {\n const varToken = line[i + 1];\n varToken.josi = '';\n const valToken = line[i + 4];\n valToken.josi = '';\n line.splice(i, 6, varToken, newToken('eq', '=', varToken), newToken('word', '\u639B'), newToken('(', '('), newToken('[', '['), valToken, newToken(']', ']'), newToken('comma', ','), newToken('number', DNCL_ARRAY_INIT_COUNT), newToken(')', ')'));\n i += 6; // skip\n }\n // Hensu\u306E|\u3059\u3079\u3066\u306E|(\u8981\u7D20\u3092|\u5024\u3092)|0\u306B|\u3059\u308B\n if (tokenEq(['word', 'word:\u3059\u3079\u3066', ['word:\u8981\u7D20', 'word:\u5024'], ['number', 'string', 'word'], 'word:\u3059\u308B'], line, i)) {\n const varToken = line[i];\n varToken.josi = '';\n const valToken = line[i + 3];\n valToken.josi = '';\n line.splice(i, 5, varToken, newToken('eq', '=', varToken), newToken('word', '\u639B'), newToken('(', '('), newToken('[', '['), valToken, newToken(']', ']'), newToken('comma', ','), newToken('number', DNCL_ARRAY_INIT_COUNT), newToken(')', ')'));\n }\n // \u914D\u5217\u5909\u6570 | xx\u3092 | \u521D\u671F\u5316\u3059\u308B\n if (tokenEq([['word:\u914D\u5217\u5909\u6570', 'word:\u914D\u5217'], 'word', 'word:\u521D\u671F\u5316'], line, i)) {\n const varToken = line[i + 1];\n varToken.josi = '';\n line.splice(i, 3, varToken, newToken('eq', '=', varToken), newToken('word', '\u639B'), newToken('(', '('), newToken('[', '['), newToken('number', 0), newToken(']', ']'), newToken('comma', ','), newToken('number', DNCL_ARRAY_INIT_COUNT), newToken(')', ')'));\n }\n }\n // --- \u305D\u306E\u4ED6\u306E\u5909\u63DB ---\n // \u4E8C\u9032\u3067\u8868\u793A (255) \u2192 \u4E8C\u9032\u8868\u793A(255)\n for (;;) {\n const ni = findTokens(line, ['word:\u4E8C\u9032', 'word:\u8868\u793A']);\n if (ni < 0) {\n break;\n }\n line[ni].value = '\u4E8C\u9032\u8868\u793A';\n line[ni].josi = '';\n line.splice(ni + 1, 1);\n }\n // '\u6539\u884C\u306A\u3057\u3067\u8868\u793A' \u2192 '\u9023\u7D9A\u7121\u6539\u884C\u8868\u793A'\n for (;;) {\n const ni = findTokens(line, ['word:\u6539\u884C', 'word:\u8868\u793A']);\n if (ni < 0) {\n break;\n }\n // \u3053\u3053\u300C\u6539\u884C\u306A\u3057\u3067\u8868\u793A\u300D\u3067\u3082\u300C\u6539\u884C\u3042\u308A\u3067\u8868\u793A\u300D\u3067\u3082\u540C\u3058\u306B\u306A\u3063\u3066\u3057\u307E\u3046\n // \u306A\u3067\u3057\u3053\u306E\u5236\u9650\u306E\u305F\u3081\u4ED5\u65B9\u306A\u3057\n // \u300C\u6539\u884C\u3042\u308A\u3067\u8868\u793A\u300D\u306F\u4ECA\u306E\u3068\u3053\u308DDNCL\u306B\u5B58\u5728\u3057\u306A\u3044\u306E\u3067\u7121\u8996\u3059\u308B\n // \u3082\u3057\u5C06\u6765\u7684\u306B\u533A\u5225\u304C\u5FC5\u8981\u306A\u3089\u3001\u30D7\u30EA\u30D7\u30ED\u30BB\u30B9\u51E6\u7406\u3067\u30DE\u30AF\u30ED\u7684\u306B\u7F6E\u63DB\u51E6\u7406\u3092\u884C\u3046\u3053\u3068\u3067\u5BFE\u5FDC\u3067\u304D\u308B\u3068\u601D\u3046\n const t = line[ni];\n t.value = '\u9023\u7D9A\u7121\u6539\u884C\u8868\u793A';\n t.josi = '';\n line.splice(ni + 1, 1);\n }\n // \u4E00\u3064\u305A\u3064\u30C1\u30A7\u30C3\u30AF\n let j = 0;\n while (j < line.length) {\n const t = line[j];\n // \u6E1B\u3068\u5897\u306E\u5206\u5272\n if (t.type === 'word' && t.value.length >= 2) {\n const c = t.value.charAt(t.value.length - 1);\n if (c === '\u6E1B' || c === '\u5897') {\n t.value = t.value.substring(0, t.value.length - 1);\n t.josi = '\u3060\u3051';\n line.splice(j + 1, 0, NewEmptyToken('word', c, t.indent, t.line, t.file));\n }\n j++;\n continue;\n }\n j++;\n }\n }\n // \u6700\u5F8C\u306B\u5358\u7D14\u306A\u7F6E\u63DB\u3092\u884C\u3046\n for (let i = 0; i < tokens.length; i++) {\n const t = tokens[i];\n const a = DNCL_SIMPLES[String(t.type) + ':' + String(t.value)];\n if (a !== undefined) {\n t.type = a[0];\n t.value = a[1];\n }\n }\n tokens = joinTokenLines(lines);\n if (IS_DEBUG) {\n console.log('// DEBUG---DNCL:tokens---BEGIN');\n console.log(debugTokens(tokens));\n console.log('// DEBUG---DNCL:tokens---END');\n }\n return tokens;\n}\n/**\n * \u30C8\u30FC\u30AF\u30F3\u304C\u5408\u81F4\u3059\u308B\u304B\u3092\u78BA\u8A8D\u3059\u308B\n * @param typeValues ['word:\u305D\u308C']\u306E\u3088\u3046\u306A\u30BF\u30A4\u30D7\u540D\u3068\u5024\u306E\u914D\u5217/'*'\u3067\u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u304C\u4F7F\u3048\u308B/\":\"\u304C\u306A\u308C\u3070\u30BF\u30A4\u30D7\u3060\u3051\u78BA\u8A8D/\u914D\u5217\u3067\u9078\u629E\n * @param lines \u5DEE\u3057\u66FF\u3048\n * @param fromIndex \u691C\u7D22\u5834\u6240\n * @returns \u5408\u81F4\u3057\u305F\u304B\u3069\u3046\u304B\n */\nfunction tokenEq(typeValues, lines, fromIndex) {\n const check = (pattern, t) => {\n if (pattern instanceof Array) {\n for (let i = 0; i < pattern.length; i++) {\n if (check(pattern[i], t)) {\n return true;\n }\n }\n return false;\n }\n if (pattern === '*') {\n return true;\n }\n if (pattern.indexOf(':') < 0) {\n if (pattern === t.type) {\n return true;\n }\n else {\n return false;\n }\n }\n const tv = `${t.type}:${t.value}`;\n if (pattern === tv) {\n return true;\n }\n return false;\n };\n for (let i = 0; i < typeValues.length; i++) {\n const idx = i + fromIndex;\n if (idx >= lines.length) {\n return false;\n }\n const pat = typeValues[i];\n const t = lines[idx];\n if (!check(pat, t)) {\n return false;\n }\n }\n return true;\n}\nfunction findTokens(tokens, findTypeValue) {\n const findA = findTypeValue.map(s => s.split(':'));\n for (let i = 0; i < tokens.length; i++) {\n let flag = true;\n for (let j = 0; j < findA.length; j++) {\n const f = findA[j];\n const idx = i + j;\n if (idx >= tokens.length) {\n return -1;\n }\n if (tokens[idx].type === f[0] && tokens[idx].value === f[1]) {\n continue;\n }\n else {\n flag = false;\n break;\n }\n }\n if (flag) {\n return i;\n }\n }\n return -1;\n}\nfunction useDNCL2mode(tokens) {\n // \u5148\u982D\u306E100\u8A9E\u8ABF\u3079\u308B\n for (let i = 0; i < tokens.length; i++) {\n if (i > 100) {\n break;\n }\n const t = tokens[i];\n if (t.type === 'line_comment' && DNCL2_KEYWORDS.indexOf(t.value) >= 0) {\n t.type = 'DNCL2\u30E2\u30FC\u30C9';\n return true;\n }\n }\n return false;\n}\n", "/** prepare\u3068tokenize\u306E\u30BD\u30FC\u30B9\u30DE\u30C3\u30D4\u30F3\u30B0 */\nexport class SourceMappingOfTokenization {\n /**\n * @param {number} sourceCodeLength\n * @param {PreprocessItem[]} preprocessed\n */\n constructor(sourceCodeLength, preprocessed) {\n /** @private @readonly */\n this.sourceCodeLength = sourceCodeLength;\n /** @private @readonly */\n this.preprocessed = preprocessed;\n let i = 0;\n /** @private @readonly @type {number[]} */\n this.cumulativeSum = [];\n for (const el of preprocessed) {\n this.cumulativeSum.push(i);\n i += el.text.length;\n }\n /** @private */\n this.lastIndex = 0;\n /** @private */\n this.lastPreprocessedCodePosition = 0;\n }\n /**\n * preprocess\u5F8C\u306E\u6587\u5B57\u5217\u4E0A\u306Eoffset\u304B\u3089\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u4E0A\u306Eoffset\u3078\u5909\u63DB\n * @param {number} preprocessedCodePosition\n * @returns {number}\n */\n map(preprocessedCodePosition) {\n const i = this.findIndex(preprocessedCodePosition);\n return Math.min(this.preprocessed[i].sourcePosition + (preprocessedCodePosition - this.cumulativeSum[i]), i === this.preprocessed.length - 1 ? this.sourceCodeLength : this.preprocessed[i + 1].sourcePosition - 1);\n }\n /**\n * @param {number} preprocessedCodePosition\n * @returns {number}\n */\n findIndex(preprocessedCodePosition) {\n // \u9023\u7D9A\u30A2\u30AF\u30BB\u30B9\u306B\u5BFE\u3059\u308B\u9AD8\u901F\u5316\n if (preprocessedCodePosition < this.lastPreprocessedCodePosition) {\n this.lastIndex = 0;\n }\n this.lastPreprocessedCodePosition = preprocessedCodePosition;\n for (let i = this.lastIndex; i < this.preprocessed.length - 1; i++) {\n if (preprocessedCodePosition < this.cumulativeSum[i + 1]) {\n this.lastIndex = i;\n return i;\n }\n }\n this.lastIndex = this.preprocessed.length - 1;\n return this.preprocessed.length - 1;\n }\n}\nexport class SourceMappingOfIndentSyntax {\n /**\n * @param {string} codeAfterProcessingIndentationSyntax\n * @param {readonly number[]} linesInsertedByIndentationSyntax\n * @param {readonly { lineNumber: number, len: number }[]} linesDeletedByIndentationSyntax\n */\n constructor(codeAfterProcessingIndentationSyntax, linesInsertedByIndentationSyntax, linesDeletedByIndentationSyntax) {\n /** @private @type {{ offset: number, len: number }[]} */\n this.lines = [];\n /** @private @readonly */\n this.linesInsertedByIndentationSyntax = linesInsertedByIndentationSyntax;\n /** @private @readonly */\n this.linesDeletedByIndentationSyntax = linesDeletedByIndentationSyntax;\n let offset = 0;\n for (const line of codeAfterProcessingIndentationSyntax.split('\\n')) {\n this.lines.push({ offset, len: line.length });\n offset += line.length + 1;\n }\n /** @private */\n this.lastLineNumber = 0;\n /** @private */\n this.lastOffset = 0;\n }\n /**\n * @param {number | null} startOffset\n * @param {number | null} endOffset\n * @returns {{ startOffset: number | null, endOffset: number | null }}\n */\n map(startOffset, endOffset) {\n if (startOffset === null) {\n return { startOffset, endOffset };\n }\n // \u4F55\u884C\u76EE\u304B\u3092\u5224\u5B9A\n const tokenLine = this.getLineNumber(startOffset);\n for (const insertedLine of this.linesInsertedByIndentationSyntax) {\n // \u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u306E\u51E6\u7406\u5F8C\u306E\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u306E `insertedLine` \u884C\u76EE\u306B\u3042\u308B\u30C8\u30FC\u30AF\u30F3\u306E\u30BD\u30FC\u30B9\u30DE\u30C3\u30D7\u60C5\u5831\u3092\u524A\u9664\u3059\u308B\u3002\n if (tokenLine === insertedLine) {\n startOffset = null;\n endOffset = null;\n break;\n }\n // \u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u306E\u51E6\u7406\u5F8C\u306E\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u306E `insertedLine` \u884C\u76EE\u4EE5\u964D\u306B\u3042\u308B\u30C8\u30FC\u30AF\u30F3\u306Eoffset\u304B\u3089\n // `linesInsertedByIndentationSyntax[i]` \u884C\u76EE\u306E\u6587\u5B57\u6570\uFF08\\r\u3092\u542B\u3080\uFF09 \u3092\u5F15\u304F\u3002\n if (tokenLine > insertedLine) {\n // \"\\n\"\u306E\u52061\u8DB3\u3059\n startOffset -= this.lines[insertedLine].len + 1;\n if (endOffset !== null) {\n endOffset -= this.lines[insertedLine].len + 1;\n }\n }\n }\n for (const deletedLine of this.linesDeletedByIndentationSyntax) {\n if (tokenLine >= deletedLine.lineNumber) {\n // \"\\n\"\u306E\u52061\u8DB3\u3059\n if (startOffset !== null) {\n startOffset += deletedLine.len + 1;\n }\n if (endOffset !== null) {\n endOffset += deletedLine.len + 1;\n }\n }\n }\n return { startOffset, endOffset };\n }\n /**\n * @param {number} offset\n * @returns {number}\n * @private\n */\n getLineNumber(offset) {\n // \u9023\u7D9A\u30A2\u30AF\u30BB\u30B9\u306B\u5BFE\u3059\u308B\u9AD8\u901F\u5316\n if (offset < this.lastOffset) {\n this.lastLineNumber = 0;\n }\n this.lastOffset = offset;\n for (let i = this.lastLineNumber; i < this.lines.length - 1; i++) {\n if (offset < this.lines[i + 1].offset) {\n this.lastLineNumber = i;\n return i;\n }\n }\n this.lastLineNumber = this.lines.length - 1;\n return this.lines.length - 1;\n }\n}\n/** offset\u304B\u3089 (line, column) \u3078\u5909\u63DB\u3059\u308B\u3002 */\nexport class OffsetToLineColumn {\n /**\n * @param {string} code\n */\n constructor(code) {\n /** @private @type {number[]} */\n this.lineOffsets = [];\n // \u5404\u884C\u306E\u5148\u982D\u4F4D\u7F6E\u3092\u5148\u306B\u8A08\u7B97\u3057\u3066\u304A\u304F\n let offset = 0;\n for (const line of code.split('\\n')) {\n this.lineOffsets.push(offset);\n offset += line.length + 1;\n }\n /** @private */\n this.lastLineNumber = 0;\n /** @private */\n this.lastOffset = 0;\n }\n /**\n * @param {number} offset\n * @param {boolean} oneBasedLineNumber true\u306E\u3068\u304Dline\u30921\u304B\u3089\u59CB\u3081\u308B\n * @returns {{ line: number, column: number }}\n */\n map(offset, oneBasedLineNumber) {\n // \u9023\u7D9A\u30A2\u30AF\u30BB\u30B9\u306B\u5BFE\u3059\u308B\u9AD8\u901F\u5316\n if (offset < this.lastOffset) {\n this.lastLineNumber = 0;\n }\n this.lastOffset = offset;\n for (let i = this.lastLineNumber; i < this.lineOffsets.length - 1; i++) {\n if (offset < this.lineOffsets[i + 1]) {\n this.lastLineNumber = i;\n return {\n line: i + (oneBasedLineNumber ? 1 : 0),\n column: offset - this.lineOffsets[i]\n };\n }\n }\n this.lastLineNumber = this.lineOffsets.length - 1;\n return {\n line: this.lineOffsets.length - 1 + (oneBasedLineNumber ? 1 : 0),\n column: offset - this.lineOffsets[this.lineOffsets.length - 1]\n };\n }\n}\n/**\n * preCode\u306E\u5206\u3001\u30BD\u30FC\u30B9\u30DE\u30C3\u30D7\u306Eoffset\u3001\u884C\u6570\u3001\u5217\u6570\u3092\u6E1B\u3089\u3059\u3002\n * @type {<T extends {line?: number, column?: number, startOffset: number | null, endOffset: number | null }>(sourceMap: T, preCode: string) => T}\n */\nexport function subtractSourceMapByPreCodeLength(sourceMap, preCode) {\n // offset\u306F\u5358\u7D14\u306B\u5F15\u304F\u3060\u3051\u3067\u3088\u3044\n if (typeof sourceMap.startOffset === 'number') {\n sourceMap.startOffset -= preCode.length;\n }\n if (typeof sourceMap.endOffset === 'number') {\n sourceMap.endOffset -= preCode.length;\n }\n // \u305F\u3068\u3048\u3070 preCode = 'abc\\ndef\\nghi' \u306E\u3068\u304D\u3001line -= 2 \u3057\u3066\u3001\u5148\u982D\u884C\u306A\u3089 column -= 3 \u3082\u3059\u308B\u3002\n if (preCode !== '') {\n const lines = preCode.split('\\n');\n if (typeof sourceMap.line === 'number') {\n sourceMap.line -= lines.length - 1;\n }\n if (sourceMap.line === 0 && typeof sourceMap.column === 'number') {\n sourceMap.column -= lines[lines.length - 1].length;\n }\n }\n return sourceMap;\n}\n", "/**\n * \u30D6\u30E9\u30A6\u30B6\u3068Node.js\u3067\u30C6\u30AD\u30B9\u30C8\u3078\u306E\u8272\u4ED8\u3051\u3092\u5171\u901A\u5316\u3059\u308B\u305F\u3081\u306E\u30B3\u30FC\u30C9\n */\n/**\n * ANSI escape code \u306E\u4E00\u90E8\n */\nconst color = { reset: '\\x1b[0m', bold: '\\x1b[1m', black: '\\x1b[30m', red: '\\x1b[31m', green: '\\x1b[32m', yellow: '\\x1b[33m', blue: '\\x1b[34m', magenta: '\\x1b[35m', cyan: '\\x1b[36m', white: '\\x1b[37m' };\n// 30 ~ 37\nconst colorNames = ['black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white'];\n/** @param {string} t */\nconst escapeHTML = (t) => t.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&#039;');\n/**\n * ANSI escape code \u3067\u8272\u4ED8\u3051\u3057\u305F\u30C6\u30AD\u30B9\u30C8\u3092\u3001HTML\u3084\u30D6\u30E9\u30A6\u30B6\u306Econsole.log\u7528\u306E\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u306B\u5909\u63DB\u3059\u308B\u3002\n * \u305F\u3068\u3048\u3070 `convertColorTextFormat(`foo${color.red}bar`).html` \u3067 `\"foobar\"` \u306E `\"bar\"` \u306E\u90E8\u5206\u304C\u8D64\u304F\u8868\u793A\u3055\u308C\u308BHTML\u3092\u53D6\u5F97\u3067\u304D\u308B\u3002\n * @param {string} text\n * @returns {{ nodeConsole: string, noColor: string, html: string, browserConsole: string[] }}\n */\nconst convertColorTextFormat = (text) => {\n // text\u304B\u3089 [ANSI escape code](https://en.wikipedia.org/wiki/ANSI_escape_code) \u3092\u524A\u9664\u3057\u3066\u3001\u8272\u306E\u7121\u3044\u30C6\u30AD\u30B9\u30C8\u3092\u4F5C\u308B\u3002\n // eslint-disable-next-line no-control-regex\n const noColor = text.replace(/\\x1b\\[\\d+m/g, '');\n // nodeConsole\u304B\u3089browserConsole\u3092\u4F5C\u308B\n /** @type {string[]} */\n const browserConsoleStyles = [];\n let consoleColor = 'inherit'; // \u6587\u5B57\u8272\n let consoleFontWeight = 'inherit'; // \u6587\u5B57\u306E\u592A\u3055\n // /\\x1b\\[(\\d+)m/ \u3067\u6B63\u898F\u8868\u73FE\u30DE\u30C3\u30C1\u3057\u3001\u305D\u308C\u305E\u308C\u3092 %c \u3067\u7F6E\u63DB\u3059\u308B\u3068\u540C\u6642\u306B browserConsoleStyles \u306BCSS\u3067\u306E\u8868\u73FE\u3092push\u3059\u308B\u3002\n // console.log(browserConsoleText, ...browserConsoleStyles) \u3067\u8868\u793A\u3059\u308B\u3053\u3068\u3092\u60F3\u5B9A\u3002\n const browserConsoleText = text === noColor\n ? noColor\n // eslint-disable-next-line no-control-regex\n : text.replace(/\\x1b\\[(\\d+)m/g, (_, m1str) => {\n const m1 = +m1str;\n if (m1 === 0) {\n consoleColor = 'inherit';\n consoleFontWeight = 'inherit';\n }\n if (m1 === 1) {\n consoleFontWeight = 'bold';\n }\n if (m1 >= 30 && m1 <= 37) {\n consoleColor = colorNames[m1 - 30];\n }\n browserConsoleStyles.push(`color: ${consoleColor}; font-weight: ${consoleFontWeight};`);\n return '%c';\n });\n // nodeConsole\u304B\u3089html\u3092\u4F5C\u308B\n let htmlColor = 'inherit'; // \u6587\u5B57\u8272\n let htmlFontWeight = 'inherit'; // \u6587\u5B57\u306E\u592A\u3055\n // text\u304C\u8272\u60C5\u5831\u3092\u542B\u307E\u306A\u3044\u306A\u3089\u305D\u308C\u3092\u305D\u306E\u307E\u307E\u4F7F\u3044\u3001\u542B\u3080\u306A\u3089\u5168\u4F53\u3092 <span>\u3067\u56F2\u3093\u3067\u3001\u66F4\u306B\u3001ANSI escape code \u3067\u56F2\u307E\u308C\u305F\u90E8\u5206\u3092\u5BFE\u5FDC\u3059\u308B style \u3092\u4ED8\u3051\u305F <span> \u3067\u56F2\u3080\u3002\n const html = text === noColor ? noColor : ('<span>' + escapeHTML(text)\n // eslint-disable-next-line no-control-regex\n .replace(/\\x1b\\[(\\d+)m/g, (_, m1str) => {\n const m1 = +m1str;\n if (m1 === 0) { // \u30EA\u30BB\u30C3\u30C8\n htmlColor = 'inherit';\n htmlFontWeight = 'inherit';\n }\n if (m1 === 1) { // \u592A\u5B57\u5316\n htmlFontWeight = 'bold';\n }\n if (m1 >= 30 && m1 <= 37) { // \u6587\u5B57\u8272\u306E\u5909\u66F4\n htmlColor = colorNames[m1 - 30];\n }\n return `</span><span style=\"color: ${htmlColor}; font-weight: ${htmlFontWeight};\">`;\n }) + '</span>');\n // \u5404\u8868\u73FE\u3092\u8FD4\u3059\u3002\n return {\n noColor,\n nodeConsole: text === noColor\n ? noColor // text\u304C\u8272\u306E\u60C5\u5831\u3092\u542B\u307E\u306A\u3044\u306A\u3089noColor\u3092\u8FD4\u3059\u3002\n : text + '\\x1b[0m', // \u305D\u3046\u3067\u306A\u3051\u308C\u3070text\u306E\u672B\u5C3E\u306B\u8272\u3092\u30EA\u30BB\u30C3\u30C8\u3059\u308B\u30B3\u30FC\u30C9\u3092\u4ED8\u3051\u3066\u8FD4\u3059\u3002\n html,\n browserConsole: [browserConsoleText, ...browserConsoleStyles]\n };\n};\nexport const NakoColors = { convertColorTextFormat, colorNames, color };\n", "/** NakoLogger */\nimport { NakoError, NakoRuntimeError } from './nako_errors.mjs';\nimport { NakoColors } from './nako_colors.mjs';\n/**\n * \u30ED\u30B0\u30EC\u30D9\u30EB - \u6570\u5B57\u304C\u9AD8\u3044\u307B\u3069\u512A\u5148\u5EA6\u304C\u9AD8\u3044\u3002\n */\nexport class LogLevel {\n // string to level no\n static fromS(levelStr) {\n let level = LogLevel.trace;\n switch (levelStr) {\n case 'all':\n level = LogLevel.all;\n break;\n case 'trace':\n level = LogLevel.trace;\n break;\n case 'debug':\n level = LogLevel.debug;\n break;\n case 'info':\n level = LogLevel.info;\n break;\n case 'warn':\n level = LogLevel.warn;\n break;\n case 'error':\n level = LogLevel.error;\n break;\n case 'stdout':\n level = LogLevel.stdout;\n break;\n default:\n throw new Error('[NakoLogger] unknown logger level:' + levelStr);\n }\n return level;\n }\n static toString(level) {\n const levels = ['all', 'trace', 'debug', 'info', 'warn', 'error', 'stdout'];\n return levels[level];\n }\n}\n// level no\nLogLevel.all = 0;\nLogLevel.trace = 1;\nLogLevel.debug = 2;\nLogLevel.info = 3;\nLogLevel.warn = 4;\nLogLevel.error = 5;\nLogLevel.stdout = 6;\n/**\n * \u30A8\u30E9\u30FC\u4F4D\u7F6E\u3092\u65E5\u672C\u8A9E\u3067\u8868\u793A\u3059\u308B\u3002\n * \u305F\u3068\u3048\u3070 `stringifyPosition({ file: \"foo.txt\", line: 5 })` \u306F `\"foo.txt(6\u884C\u76EE):\"` \u3092\u51FA\u529B\u3059\u308B\u3002\n */\nfunction stringifyPosition(p) {\n if (!p) {\n return '';\n }\n return `${p.file || ''}${p.line === undefined ? '' : `(${p.line + 1}\u884C\u76EE): `}`;\n}\nexport function parsePosition(line) {\n const m = line.match(/^l(\\d+):(.+)/);\n let lineNo = 0;\n let fileName = 'main.nako3';\n if (m) {\n lineNo = parseInt(m[1], 10);\n fileName = m[2];\n }\n return {\n startOffset: 0,\n endOffset: 0,\n line: lineNo,\n file: fileName\n };\n}\n/**\n * \u30B3\u30F3\u30D1\u30A4\u30E9\u306E\u30ED\u30B0\u60C5\u5831\u3092\u51FA\u529B\u3059\u308B\u305F\u3081\u306E\u30AF\u30E9\u30B9\u3002\n * trace(), debug(), info(), warn(), error() \u306F\u305D\u308C\u305E\u308C\u30E1\u30C3\u30BB\u30FC\u30B8\u306B `[\u8B66\u544A]` \u306A\u3069\u306E\u30BF\u30B0\u3068\u30A8\u30E9\u30FC\u4F4D\u7F6E\u306E\u65E5\u672C\u8A9E\u8868\u73FE\u3092\u4ED8\u3051\u3066\u8868\u793A\u3059\u308B\u3002\n * error() \u306F\u5F15\u6570\u306B\u30A8\u30E9\u30FC\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u53D7\u3051\u53D6\u308B\u3053\u3068\u3082\u3067\u304D\u3001\u305D\u306E\u5834\u5408\u30A8\u30E9\u30FC\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u304B\u3089\u30A8\u30E9\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8\u3068\u30A8\u30E9\u30FC\u4F4D\u7F6E\u304C\u53D6\u308A\u51FA\u3055\u308C\u308B\u3002\n */\nexport class NakoLogger {\n constructor() {\n this.listeners = [];\n this.logs = '';\n this.position = '';\n }\n getErrorLogs() {\n return [this.logs.replace(/\\s+$/, ''), this.position];\n }\n clear() {\n this.logs = '';\n this.position = '';\n }\n /**\n * send\u30E1\u30BD\u30C3\u30C9\u3067\u9001\u3089\u308C\u305F\u60C5\u5831\u3092\u53D7\u3051\u53D6\u308B\u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u3092\u8A2D\u5B9A\u3059\u308B\u3002\n * @param levelStr\n * @param callback\n */\n addListener(levelStr, callback) {\n const level = LogLevel.fromS(levelStr);\n this.listeners.push({ level, callback });\n }\n /**\n * addListener\u30E1\u30BD\u30C3\u30C9\u3067\u8A2D\u5B9A\u3057\u305F\u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u3092\u53D6\u308A\u5916\u3059\u3002\n * @param {LogListener} callback\n */\n removeListener(callback) {\n this.listeners = this.listeners.filter((l) => l.callback !== callback);\n }\n /** \u672C\u4F53\u958B\u767A\u6642\u306E\u30C7\u30D0\u30C3\u30B0\u60C5\u5831\uFF08debug\u3088\u308A\u66F4\u306B\u8A73\u7D30\u306A\u60C5\u5831\uFF09\n * @param {string} message\n * @param {Position | null} position\n */\n trace(message, position = null) {\n this.sendI(LogLevel.trace, `${NakoColors.color.bold}[\u30C7\u30D0\u30C3\u30B0\u60C5\u5831\uFF08\u8A73\u7D30\uFF09]${NakoColors.color.reset}${stringifyPosition(position)}${message}`, position);\n }\n /** \u672C\u4F53\u958B\u767A\u6642\u306E\u30C7\u30D0\u30C3\u30B0\u60C5\u5831\n * @param {string} message\n * @param {Position | null} position\n */\n debug(message, position = null) {\n this.sendI(LogLevel.debug, `${NakoColors.color.bold}[\u30C7\u30D0\u30C3\u30B0\u60C5\u5831]${NakoColors.color.reset}${stringifyPosition(position)}${message}`, position);\n }\n /** \u30E6\u30FC\u30B6\u30FC\u30D7\u30ED\u30B0\u30E9\u30E0\u306E\u30C7\u30D0\u30C3\u30B0\u60C5\u5831\uFF08\u3042\u307E\u308A\u91CD\u8981\u3067\u306F\u306A\u3044\u3082\u306E\uFF09\n * @param {string} message\n * @param {Position | null} position\n */\n info(message, position = null) {\n this.sendI(LogLevel.info, `${NakoColors.color.bold}${NakoColors.color.blue}[\u60C5\u5831]${NakoColors.color.reset}${stringifyPosition(position)}${message}`, position);\n }\n /** \u30E6\u30FC\u30B6\u30FC\u30D7\u30ED\u30B0\u30E9\u30E0\u306E\u30C7\u30D0\u30C3\u30B0\u60C5\u5831\uFF08\u91CD\u8981\u306A\u3082\u306E\uFF09\n * @param {string} message\n * @param {Position | null} position\n */\n warn(message, position = null) {\n this.sendI(LogLevel.warn, `${NakoColors.color.bold}${NakoColors.color.green}[\u8B66\u544A]${NakoColors.color.reset}${stringifyPosition(position)}${message}`, position);\n }\n /** \u30A8\u30E9\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8\n * @param {string | Error} message\n * @param {Position | null} position\n */\n error(message, position = null) {\n // NakoError\u304B\u5224\u5B9A (`message instanceof NakoError`\u3067\u306F\u5224\u5B9A\u3067\u304D\u306A\u3044\u5834\u5408\u304C\u3042\u308B)\n if (message instanceof Error && typeof message.type === 'string') {\n // NakoError\u304B\n const etype = message.type;\n switch (etype) {\n case 'NakoRuntimeError':\n case 'NakoError':\n if (message instanceof NakoError) {\n const e = message;\n let pos = position;\n if (pos === null || pos === undefined) {\n pos = { file: e.file, line: e.line || 0, startOffset: 0, endOffset: 0 };\n }\n this.sendI(LogLevel.error, e.message, pos);\n return;\n }\n }\n }\n if (message instanceof Error) {\n // \u4E00\u822C\u306E\u30A8\u30E9\u30FC\u306E\u5834\u5408\u306F\u3001message\u306E\u307F\u53D6\u5F97\u3067\u304D\u308B\u3002\n message = message.message;\n }\n this.sendI(LogLevel.error, `${NakoColors.color.bold}${NakoColors.color.red}[\u30A8\u30E9\u30FC]${NakoColors.color.reset}${stringifyPosition(position)}${message}`, position);\n }\n /** RuntimeError\u3092\u751F\u6210\u3059\u308B */\n runtimeError(error, posStr) {\n const e = new NakoRuntimeError(error, posStr);\n return e;\n }\n /** \u30E6\u30FC\u30B6\u30FC\u30D7\u30ED\u30B0\u30E9\u30E0\u306E\u30C7\u30D0\u30C3\u30B0\u60C5\u5831\uFF08\u3059\u3079\u3066)\n * @param {string} message\n * @param {Position | null} position\n */\n stdout(message, position = null) {\n this.sendI(LogLevel.stdout, `${message}`, position);\n }\n /** \u6307\u5B9A\u3057\u305Flevel\u306Elistener\u306B\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u9001\u308B\u3002html\u3084browserConsole\u306F\u7121\u3051\u308C\u3070nodeConsole\u304B\u3089\u751F\u6210\u3059\u308B\u3002 */\n send(levelStr, nodeConsole, position, html = null, browserConsole = null) {\n const i = LogLevel.fromS(levelStr);\n this.sendI(i, nodeConsole, position, html, browserConsole);\n }\n /** \u6307\u5B9A\u3057\u305Flevel\u306Elistener\u306B\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u9001\u308B\u3002html\u3084browserConsole\u306F\u7121\u3051\u308C\u3070nodeConsole\u304B\u3089\u751F\u6210\u3059\u308B\u3002 */\n sendI(level, nodeConsole, position, html = null, browserConsole = null) {\n const makeData = () => {\n // nodeConsole\u304B\u3089noColor, nodeCondole\u306A\u3069\u306E\u5F62\u5F0F\u3092\u751F\u6210\u3059\u308B\u3002\n const formats = NakoColors.convertColorTextFormat(nodeConsole);\n // \u30ED\u30B0\u304C\u8907\u6570\u884C\u304B\u3089\u69CB\u6210\u3055\u308C\u308B\u5834\u5408\u306F\u3001html\u3067\u306E\u8868\u73FE\u306Bborder\u3092\u8A2D\u5B9A\u3059\u308B\u3002\n let style = '';\n if (nodeConsole.includes('\\n')) {\n style += 'border-top: 1px solid #8080806b; border-bottom: 1px solid #8080806b;';\n }\n // \u5404\u30A4\u30D9\u30F3\u30C8\u30EA\u30B9\u30CA\u30FC\u304C\u53D7\u3051\u53D6\u308B\u30C7\u30FC\u30BF\n const data = {\n noColor: formats.noColor,\n nodeConsole: formats.nodeConsole,\n browserConsole: browserConsole || formats.browserConsole,\n html: `<div style=\"${style}\">` + (html || formats.html) + '</div>', // \u5404\u884C\u3092 style: block \u3067\u8868\u793A\u3059\u308B\u305F\u3081\u306B\u3001<div>\u3067\u56F2\u3080\u3002\n level: LogLevel.toString(level),\n position\n };\n return data;\n };\n // \u30A8\u30E9\u30FC\u306A\u3089\u30ED\u30B0\u306B\u8FFD\u52A0\n if (level === LogLevel.error) {\n const data = makeData();\n this.logs += data.noColor + '\\n';\n if (position && this.position !== null) {\n this.position = `l${position.line}:${position.file || 'unknown'}`;\n }\n }\n // \u767B\u9332\u3057\u305F\u30EA\u30B9\u30CA\u30FC\u306B\u901A\u77E5\u3059\u308B\n for (const l of this.listeners) {\n if (l.level <= level) {\n const data = makeData();\n l.callback(data);\n }\n }\n }\n}\n", "import { NakoColors } from './nako_colors.mjs';\n/**\n * \u30B3\u30F3\u30D1\u30A4\u30EB\u3055\u308C\u305F\u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u3067\u3001\u30B0\u30ED\u30FC\u30D0\u30EB\u7A7A\u9593\u306Ethis\u304C\u6307\u3059\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n */\nexport class NakoGlobal {\n /**\n * @param compiler\n * @param gen\n */\n constructor(compiler, gen, guid = 0) {\n this.guid = guid;\n this.lastJSCode = '';\n // \u30E6\u30FC\u30B6\u30FC\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u304B\u3089\u7DE8\u96C6\u3055\u308C\u308B\u5909\u6570\n this.__locals = new Map();\n this.__varslist = [\n compiler.newVaiables(compiler.__varslist[0]), // system\n compiler.newVaiables(compiler.__varslist[1]), // global\n compiler.newVaiables(compiler.__varslist[2]) // local [2][3][4][5] ...\n ];\n this.numFailures = 0;\n this.index = 0;\n this.nextIndex = -1;\n this.__code = [];\n this.__callstack = [];\n this.__stack = [];\n this.__labels = [];\n this.__genMode = gen.genMode;\n // \u30D0\u30FC\u30B8\u30E7\u30F3\u60C5\u5831\u306E\u5F15\u304D\u7D99\u304E\n this.version = compiler.version;\n this.coreVersion = compiler.coreVersion;\n // PluginSystem\u3068destroy()\u304B\u3089\u53C2\u7167\u3059\u308B\u305F\u3081\n this.__module = { ...compiler.__module }; // shallow copy\n this.pluginfiles = { ...compiler.getPluginfiles() };\n // PluginWorker\u3067\u30E6\u30FC\u30B6\u30FC\u5B9A\u7FA9\u95A2\u6570\u306EJavaScript\u30B3\u30FC\u30C9\u3092worker\u306E\u30B3\u30F3\u30D1\u30A4\u30E9\u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3078\u30B3\u30D4\u30FC\u3059\u308B\u305F\u3081\n this.gen = gen;\n // \u4EE5\u4E0B\u306E\u30E1\u30BD\u30C3\u30C9\u3067\u4F7F\u3046\u305F\u3081\n this.logger = compiler.getLogger();\n this.compiler = compiler;\n this.josiList = compiler.josiList;\n this.reservedWords = compiler.reservedWords;\n }\n clearLog() {\n this.__varslist[0].set('\u8868\u793A\u30ED\u30B0', '');\n }\n get log() {\n let s = this.__varslist[0].get('\u8868\u793A\u30ED\u30B0');\n s = s.replace(/\\s+$/, '');\n return s;\n }\n /**\n * \u30B7\u30B9\u30C6\u30E0\u5909\u6570\u3092\u8A2D\u5B9A\u3059\u308B\n * @param name \u30B7\u30B9\u30C6\u30E0\u5909\u6570\u540D\n * @param value \u8A2D\u5B9A\u3057\u305F\u3044\u5024\n */\n __setSysVar(name, value) {\n this.__varslist[0].set(name, value);\n }\n /**\n * \u30B7\u30B9\u30C6\u30E0\u5909\u6570\u3092\u53D6\u5F97\u3059\u308B\n * @param name \u30B7\u30B9\u30C6\u30E0\u5909\u6570\u540D\n * @returns \u30B7\u30B9\u30C6\u30E0\u5909\u6570\u306E\u5024\n */\n __getSysVar(name) {\n return this.__varslist[0].get(name);\n }\n /**\n * \u300C\u30CA\u30C7\u30B7\u30B3\u300D\u547D\u4EE4\u306E\u305F\u3081\u306E\u30E1\u30BD\u30C3\u30C9\n */\n runEx(code, fname, opts, preCode = '') {\n // \u30B9\u30B3\u30FC\u30D7\u3092\u5171\u6709\u3057\u3066\u5B9F\u884C\n opts.preCode = preCode;\n opts.nakoGlobal = this;\n return this.compiler.runSync(code, fname, opts);\n }\n async runAsync(code, fname, opts, preCode = '') {\n // \u30B9\u30B3\u30FC\u30D7\u3092\u5171\u6709\u3057\u3066\u5B9F\u884C\n opts.preCode = preCode;\n opts.nakoGlobal = this;\n return await this.compiler.runAsync(code, fname, opts);\n }\n /**\n * \u30C6\u30B9\u30C8\u5B9F\u884C\u306E\u305F\u3081\u306E\u30E1\u30BD\u30C3\u30C9\n * @param {{ name: string, f: () => void }[]} tests\n */\n _runTests(tests) {\n let text = `${NakoColors.color.bold}\u30C6\u30B9\u30C8\u306E\u5B9F\u884C\u7D50\u679C${NakoColors.color.reset}\\n`;\n let pass = 0;\n let numFailures = 0;\n for (const t of tests) {\n try {\n t.f();\n text += `${NakoColors.color.green}\u2714${NakoColors.color.reset} ${t.name}\\n`;\n pass++;\n }\n catch (err) {\n const errorMessage = (err instanceof Error) ? err.message : String(err);\n text += `${NakoColors.color.red}\u2613${NakoColors.color.reset} ${t.name}: ${errorMessage}\\n`;\n numFailures++;\n }\n }\n if (numFailures > 0) {\n text += `${NakoColors.color.green}\u6210\u529F ${pass}\u4EF6 ${NakoColors.color.red}\u5931\u6557 ${numFailures}\u4EF6`;\n }\n else {\n text += `${NakoColors.color.green}\u6210\u529F ${pass}\u4EF6`;\n }\n this.numFailures = numFailures;\n this.logger.stdout(text);\n }\n /**\n * \u6BCE\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u300C!\u30AF\u30EA\u30A2\u300D\u95A2\u6570\u3092\u5B9F\u884C\n */\n clearPlugins() {\n // \u5B9F\u884C\u3057\u3066\u3044\u308B\u95A2\u6570\u3092\u3059\u3079\u3066\u7D42\u4E86\u3055\u305B\u308B\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30AF\u30EA\u30A2\u95A2\u6570\u3092\u547C\u3073\u51FA\u3059\n const clearName = '!\u30AF\u30EA\u30A2';\n for (const pname in this.pluginfiles) {\n const po = this.__module[pname];\n if (po[clearName] && po[clearName].fn) {\n try {\n po[clearName].fn(this);\n }\n catch (e) {\n this.logger.error(`\u30D7\u30E9\u30B0\u30A4\u30F3\u300E${pname}\u300F\u306E\u30AF\u30EA\u30A2\u95A2\u6570\u3067\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F:` + String(e.message));\n }\n }\n }\n }\n /**\n * \u5404\u7A2E\u30EA\u30BB\u30C3\u30C8\u51E6\u7406\n */\n reset() {\n this.clearPlugins();\n }\n destroy() {\n this.reset();\n }\n}\n", "// \u5B9F\u969B\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u5B9A\u7FA9 (\u81EA\u52D5\u751F\u6210\u3055\u308C\u308B\u306E\u3067\u4EE5\u4E0B\u3092\u7DE8\u96C6\u3057\u306A\u3044)\nconst coreVersion = {\n version: '3.7.21',\n major: 3,\n minor: 7,\n patch: 21\n};\nexport default coreVersion;\n", "import { NakoRuntimeError } from './nako_errors.mjs';\nexport default {\n 'meta': {\n type: 'const',\n value: {\n pluginName: 'plugin_system', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u540D\u524D\n description: '\u30B7\u30B9\u30C6\u30E0\u95A2\u9023\u306E\u547D\u4EE4\u3092\u63D0\u4F9B\u3059\u308B\u30D7\u30E9\u30B0\u30A4\u30F3', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u8AAC\u660E\n pluginVersion: '3.6.0', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\n nakoRuntime: ['wnako', 'cnako', 'phpnako'], // \u5BFE\u8C61\u30E9\u30F3\u30BF\u30A4\u30E0\n nakoVersion: '3.6.0' // \u8981\u6C42\u306A\u3067\u3057\u3053\u30D0\u30FC\u30B8\u30E7\u30F3\n }\n },\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: false,\n fn: function (sys) {\n // \u30B7\u30B9\u30C6\u30E0\u5909\u6570\u306E\u521D\u671F\u5316\n const system = sys;\n sys.pathSeparator = '/'; // \u30D1\u30B9\u8A18\u53F7 #2185\n sys.engine = '?'; // \u30A8\u30F3\u30B8\u30F3\u540D\n sys.isDebug = false;\n // \u30B7\u30B9\u30C6\u30E0\u5909\u6570\u306B\u30A2\u30AF\u30BB\u30B9\u3059\u308B\u305F\u3081\u306E\u95A2\u6570\u3092\u5B9A\u7FA9\n sys.__setSysVar = (name, value) => system.__v0.set(name, value);\n sys.__getSysVar = (name, defaultValue = undefined) => {\n const v = system.__v0.get(name);\n if (v === undefined) {\n return defaultValue;\n }\n return v;\n };\n sys.__setSore = (v) => { sys.__vars.set('\u305D\u308C', v); return v; };\n sys.__getSore = () => sys.__vars.get('\u305D\u308C');\n sys.tags = {}; // \u30BF\u30B0 - \u30D7\u30E9\u30B0\u30A4\u30F3\u5074\u3067\u81EA\u7531\u306B\u4F7F\u3048\u308B\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n // \u8A00\u8A9E\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u8A2D\u5B9A\n sys.__setSysVar('\u30CA\u30C7\u30B7\u30B3\u30D0\u30FC\u30B8\u30E7\u30F3', sys.version);\n sys.__setSysVar('\u30CA\u30C7\u30B7\u30B3\u8A00\u8A9E\u30D0\u30FC\u30B8\u30E7\u30F3', sys.coreVersion);\n if (!system.__namespaceList) {\n system.__namespaceList = [];\n }\n // \u306A\u3067\u3057\u3053\u306E\u95A2\u6570\u3084\u5909\u6570\u3092\u63A2\u3057\u3066\u8FD4\u3059\n sys.__findVar = function (nameStr, def) {\n if (typeof nameStr === 'function') {\n return nameStr;\n }\n // \u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092\u63A2\u3059\n const localVar = system.__locals.get(nameStr);\n if (localVar) {\n return localVar;\n }\n // \u540D\u524D\u7A7A\u9593\u304C\u6307\u5B9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\n if (nameStr.indexOf('__') >= 0) {\n for (let i = 2; i >= 0; i--) {\n const varScope = system.__varslist[i];\n const scopeValue = varScope.get(nameStr);\n if (scopeValue) {\n return scopeValue;\n }\n }\n return def;\n }\n // \u540D\u524D\u7A7A\u9593\u3092\u53C2\u7167\u3057\u3066\u95A2\u6570\u30FB\u5909\u6570\u540D\u3092\u89E3\u6C7A\u3059\u308B\n const modList = system.__modList ? system.__modList : [system.__modName];\n for (const modName of modList) {\n const gname = `${modName}__${nameStr}`;\n for (let i = 2; i >= 0; i--) {\n const scope = system.__varslist[i];\n const scopeValue = scope.get(gname);\n if (scopeValue) {\n return scopeValue;\n }\n }\n }\n return def;\n };\n // \u6587\u5B57\u5217\u304B\u3089\u95A2\u6570\u3092\u63A2\u3059\n sys.__findFunc = function (nameStr, parentFunc) {\n const f = sys.__findVar(nameStr);\n if (typeof f === 'function') {\n return f;\n }\n throw new Error(`\u300E${parentFunc}\u300F\u306B\u5B9F\u884C\u3067\u304D\u306A\u3044\u95A2\u6570\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002`);\n };\n // \u30B7\u30B9\u30C6\u30E0\u95A2\u6570\u3092\u5B9F\u884C\n sys.__exec = function (func, params) {\n // \u30B7\u30B9\u30C6\u30E0\u547D\u4EE4\u3092\u512A\u5148\n const f0 = sys.__getSysVar(func);\n if (f0) {\n return f0.apply(this, params);\n }\n // \u30B0\u30ED\u30FC\u30D0\u30EB\u30FB\u30ED\u30FC\u30AB\u30EB\u3092\u63A2\u3059\n const f = sys.__findVar(func);\n if (!f) {\n throw new Error('\u30B7\u30B9\u30C6\u30E0\u95A2\u6570\u3067\u30A8\u30A4\u30EA\u30A2\u30B9\u306E\u6307\u5B9A\u30DF\u30B9:' + func);\n }\n return f.apply(this, params);\n };\n // \u30BF\u30A4\u30DE\u30FC\u306B\u95A2\u3059\u308B\u51E6\u7406(\u30BF\u30A4\u30DE\u30FC\u306F\u300C!\u30AF\u30EA\u30A2\u300D\u3067\u5168\u90E8\u505C\u6B62\u3059\u308B)\n sys.__timeout = [];\n sys.__interval = [];\n // \u65E5\u4ED8\u51E6\u7406\u306A\u3069\u306B\u4F7F\u3046\n const z2 = sys.__zero2 = (s) => {\n s = '00' + String(s);\n return s.substring(s.length - 2);\n };\n sys.__zero = (s, keta) => {\n let zeroS = '';\n for (let i = 0; i < keta; i++) {\n zeroS += '0';\n }\n s = zeroS + s;\n return s.substring(s.length - keta);\n };\n sys.__formatDate = (t) => {\n return String(t.getFullYear()) + '/' + z2(t.getMonth() + 1) + '/' + z2(t.getDate());\n };\n sys.__formatTime = (t) => {\n return z2(t.getHours()) + ':' + z2(t.getSeconds()) + ':' + z2(t.getMinutes());\n };\n sys.__formatDateTime = (t, fmt) => {\n const dateStr = String(t.getFullYear()) + '/' + z2(t.getMonth() + 1) + '/' + z2(t.getDate());\n const timeStr = z2(t.getHours()) + ':' + z2(t.getMinutes()) + ':' + z2(t.getSeconds());\n if (fmt.match(/^\\d+\\/\\d+\\/\\d+\\s+\\d+:\\d+:\\d+$/)) {\n return dateStr + ' ' + timeStr;\n }\n if (fmt.match(/^\\d+\\/\\d+\\/\\d+$/)) {\n return dateStr;\n }\n if (fmt.match(/^\\d+:\\d+:\\d+$/)) {\n return timeStr;\n }\n return dateStr + ' ' + timeStr;\n };\n sys.__str2date = (s) => {\n // trim\n s = ('' + s).replace(/(^\\s+|\\s+$)/, '');\n // is unix time\n if (s.match(/^(\\d+|\\d+\\.\\d+)$/)) {\n return new Date(parseFloat(s) * 1000);\n }\n // is time ?\n if (s.match(/^\\d+:\\d+(:\\d+)?$/)) {\n const t = new Date();\n const a = (s + ':0').split(':');\n return new Date(t.getFullYear(), t.getMonth(), t.getDate(), parseInt(a[0]), parseInt(a[1]), parseInt(a[2]));\n }\n // replace splitter to '/'\n s = s.replace(/[\\s:\\-T]/g, '/');\n s += '/0/0/0'; // \u65E5\u4ED8\u3060\u3051\u306E\u3068\u304D\u306E\u305F\u3081\u306B\u6642\u9593\u5206\u3092\u8DB3\u3059\n const a = s.split('/');\n return new Date(parseInt(a[0]), parseInt(a[1]) - 1, parseInt(a[2]), parseInt(a[3]), parseInt(a[4]), parseInt(a[5]));\n };\n // \u300E\u7D99\u7D9A\u8868\u793A\u300F\u306E\u305F\u3081\u306E\u4E00\u6642\u5909\u6570(\u300E\u8868\u793A\u300F\u5B9F\u884C\u3067\u521D\u671F\u5316)\n sys.__printPool = '';\n // \u6697\u9ED9\u306E\u578B\u5909\u63DB\u3067\u8DB3\u3057\u7B97\u3092\u884C\u3046\u3068\u304D\u306B\u4F7F\u7528\u3002bigint \u306F\u305D\u306E\u307E\u307E\u3001\u305D\u306E\u4ED6\u306F number \u306B\u81EA\u52D5\u5909\u63DB\n sys.__parseFloatOrBigint = (v) => {\n return (typeof v) === 'bigint' ? v : parseFloat(v);\n };\n // undefined\u30C1\u30A7\u30C3\u30AF\n system.chk = (value, constId) => {\n if (typeof value === 'undefined') {\n const cp = system.constPools[constId];\n const [msgNo, msgArgs, fileNo, lineNo] = cp;\n let msg = system.constPoolsTemplate[msgNo];\n for (const i in msgArgs) {\n const arg = system.constPoolsTemplate[msgArgs[i]];\n msg = msg.split(`$${i}`).join(arg);\n }\n const fileStr = system.constPoolsTemplate[fileNo];\n sys.logger.warn(msg, { file: fileStr, line: lineNo });\n }\n return value;\n };\n // eval function #1733\n sys.__evalSafe = (src) => {\n // eval\u306E\u30B9\u30B3\u30FC\u30D7\u3092\u5909\u3048\u308B\u305F\u3081\u306E\u30C6\u30AF\u30CB\u30C3\u30AF\n // https://esbuild.github.io/content-types/#direct-eval\n const _eval = eval;\n try {\n return _eval(src);\n }\n catch (e) {\n console.warn('[eval]', e);\n return null;\n }\n };\n // eval function #1733 - \u4E92\u63DB\u6027\u3092\u512A\u5148\u3059\u308B\u305F\u3081\u3001direct eval\u3092\u4F7F\u3046\u3053\u3068\u306B\n sys.__evalJS = (src, sys) => {\n try {\n // \u307E\u305A\u5F93\u6765\u901A\u308Aeval\u3067\u8A55\u4FA1\uFF08\u5F0F\u306E\u5024\u3092\u8FD4\u3059\u4E92\u63DB\u6027\u3092\u7DAD\u6301\uFF09\n return eval(src);\n }\n catch (e) {\n // return\u6587\u306B\u3088\u308BSyntaxError\u306E\u5834\u5408\u306E\u307FIIFE\u3067\u518D\u8A66\u884C (#NE-006)\n if (e instanceof SyntaxError && e.message.includes('return')) {\n try {\n return (new Function('sys', `return (function(sys){\\n${src}\\n})(sys)`))(sys);\n }\n catch (e2) {\n console.warn('[eval]', e2);\n return null;\n }\n }\n console.warn('[eval]', e);\n return null;\n }\n };\n // Prop\u30A2\u30AF\u30BB\u30B9\u652F\u63F4\n sys.__registPropAccessor = (f, getProp, setProp) => {\n system.__propAccessor.push({\n target: f,\n getProp,\n setProp\n });\n };\n sys.__checkPropAccessor = (mode, obj) => {\n if ((mode === 'get' && obj.__getProp === undefined) || (mode === 'set' && obj.__setProp === undefined)) {\n for (let i = 0; i < system.__propAccessor.length; i++) {\n const accs = system.__propAccessor[i];\n if (accs.target[Symbol.hasInstance](obj)) {\n if (accs.getProp) {\n obj.__getProp = accs.getProp;\n }\n else {\n obj.__getProp = null;\n }\n if (accs.setProp) {\n obj.__setProp = accs.setProp;\n }\n else {\n obj.__setProp = null;\n }\n return;\n }\n }\n obj.__getProp = obj.__setProp = null;\n }\n };\n // \u300C??\u300D\u30CF\u30C6\u30CA\u95A2\u6570\u306E\u8A2D\u5B9A\n sys.__hatena = sys.__getSysVar('\u30C7\u30D0\u30C3\u30B0\u8868\u793A');\n }\n },\n '!\u30AF\u30EA\u30A2': {\n type: 'func',\n josi: [],\n fn: function (sys) {\n if (sys.__exec) {\n sys.__exec('\u5168\u30BF\u30A4\u30DE\u30FC\u505C\u6B62', [sys]);\n }\n sys.__setSysVar('\u8868\u793A\u30ED\u30B0', '');\n }\n },\n // @\u30B7\u30B9\u30C6\u30E0\u5B9A\u6570\n '\u30CA\u30C7\u30B7\u30B3\u30D0\u30FC\u30B8\u30E7\u30F3': { type: 'const', value: '?' }, // @\u306A\u3067\u3057\u3053\u3070\u30FC\u3058\u3087\u3093\n '\u30CA\u30C7\u30B7\u30B3\u8A00\u8A9E\u30D0\u30FC\u30B8\u30E7\u30F3': { type: 'const', value: '?' }, // @\u306A\u3067\u3057\u3053\u3052\u3093\u3054\u3070\u30FC\u3058\u3087\u3093\n '\u30CA\u30C7\u30B7\u30B3\u30A8\u30F3\u30B8\u30F3': { type: 'const', value: 'nadesi.com/v3' }, // @\u306A\u3067\u3057\u3053\u3048\u3093\u3058\u3093\n '\u30CA\u30C7\u30B7\u30B3\u7A2E\u985E': { type: 'const', value: '?' }, // @\u306A\u3067\u3057\u3053\u3057\u3085\u308B\u3044\n '\u306F\u3044': { type: 'const', value: true }, // @\u306F\u3044\n '\u3044\u3044\u3048': { type: 'const', value: false }, // @\u3044\u3044\u3048\n '\u771F': { type: 'const', value: true }, // @\u3057\u3093\n '\u507D': { type: 'const', value: false }, // @\u304E\n '\u6C38\u9060': { type: 'const', value: true }, // @\u3048\u3044\u3048\u3093\n '\u30AA\u30F3': { type: 'const', value: true }, // @\u304A\u3093\n '\u30AA\u30D5': { type: 'const', value: false }, // @\u304A\u3075\n '\u6539\u884C': { type: 'const', value: '\\n' }, // @\u304B\u3044\u304E\u3087\u3046\n '\u30BF\u30D6': { type: 'const', value: '\\t' }, // @\u305F\u3076\n '\u30AB\u30C3\u30B3': { type: 'const', value: '\u300C' }, // @\u304B\u3063\u3053\n '\u30AB\u30C3\u30B3\u9589': { type: 'const', value: '\u300D' }, // @\u304B\u3063\u3053\u3068\u3058\n '\u6CE2\u30AB\u30C3\u30B3': { type: 'const', value: '{' }, // @\u306A\u307F\u304B\u3063\u3053\n '\u6CE2\u30AB\u30C3\u30B3\u9589': { type: 'const', value: '}' }, // @\u306A\u307F\u304B\u3063\u3053\u3068\u3058\n 'OK': { type: 'const', value: true }, // @OK\n 'NG': { type: 'const', value: false }, // @NG\n '\u30AD\u30E3\u30F3\u30BB\u30EB': { type: 'const', value: 0 }, // @\u304D\u3083\u3093\u305B\u308B\n 'TRUE': { type: 'const', value: true }, // @TRUE\n 'FALSE': { type: 'const', value: false }, // @FALSE\n 'true': { type: 'const', value: true }, // @true\n 'false': { type: 'const', value: false }, // @false\n 'PI': { type: 'const', value: Math.PI }, // @PI\n '\u7A7A': { type: 'const', value: '' }, // @\u304B\u3089\n 'NULL': { type: 'const', value: null }, // @NULL\n 'undefined': { type: 'const', value: undefined }, // @undefined\n '\u672A\u5B9A\u7FA9': { type: 'const', value: undefined }, // @\u307F\u3066\u3044\u304E\n '\u30A8\u30E9\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8': { type: 'const', value: '' }, // @\u3048\u3089\u30FC\u3081\u3063\u305B\u30FC\u3058\n '\u5BFE\u8C61': { type: 'const', value: '' }, // @\u305F\u3044\u3057\u3087\u3046\n '\u5BFE\u8C61\u30AD\u30FC': { type: 'const', value: '' }, // @\u305F\u3044\u3057\u3087\u3046\u304D\u30FC\n '\u56DE\u6570': { type: 'const', value: '' }, // @\u304B\u3044\u3059\u3046\n 'CR': { type: 'const', value: '\\r' }, // @CR\n 'LF': { type: 'const', value: '\\n' }, // @LF\n '\u975E\u6570': { type: 'const', value: NaN }, // @\u3072\u3059\u3046\n '\u7121\u9650\u5927': { type: 'const', value: Infinity }, // @\u3080\u3052\u3093\u3060\u3044\n '\u623B\u5024\u7121': { type: 'const', value: 0 }, // @\u3082\u3069\u308A\u3061\u306A\u3057\n '\u623B\u5024\u6709': { type: 'const', value: 1 }, // @\u3082\u3069\u308A\u3061\u3042\u308A\n '\u7A7A\u914D\u5217': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n return [];\n }\n },\n '\u7A7A\u8F9E\u66F8': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n return {};\n }\n },\n '\u7A7A\u30CF\u30C3\u30B7\u30E5': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n return {};\n }\n },\n '\u7A7A\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8': {\n type: 'func',\n josi: [],\n pure: false,\n fn: function (sys) {\n return sys.__exec('\u7A7A\u30CF\u30C3\u30B7\u30E5', [sys]);\n }\n },\n '\u771F\u507D\u5224\u5B9A': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (b) {\n return b ? '\u771F' : '\u507D';\n }\n },\n // @\u6A19\u6E96\u51FA\u529B\n '\u8868\u793A': {\n type: 'func',\n josi: [['\u3092', '\u3068']],\n pure: true,\n fn: function (s, sys) {\n // \u7D99\u7D9A\u8868\u793A\u306E\u4E00\u6642\u30D7\u30FC\u30EB\u3092\u51FA\u529B\n s = String(sys.__printPool) + s;\n sys.__printPool = '';\n //\n sys.__setSysVar('\u8868\u793A\u30ED\u30B0', String(sys.__getSysVar('\u8868\u793A\u30ED\u30B0')) + s + '\\n');\n sys.logger.send('stdout', s + '');\n },\n return_none: true\n },\n '\u7D99\u7D9A\u8868\u793A': {\n type: 'func',\n josi: [['\u3092', '\u3068']],\n pure: true,\n fn: function (s, sys) {\n sys.__printPool += s;\n },\n return_none: true\n },\n '\u9023\u7D9A\u8868\u793A': {\n type: 'func',\n josi: [['\u3068', '\u3092']],\n isVariableJosi: true,\n pure: true,\n fn: function (...a) {\n const sys = a.pop();\n const v = a.join('');\n sys.__exec('\u8868\u793A', [v, sys]);\n },\n return_none: true\n },\n '\u9023\u7D9A\u7121\u6539\u884C\u8868\u793A': {\n type: 'func',\n josi: [['\u3068', '\u3092']],\n isVariableJosi: true,\n pure: true,\n fn: function (...a) {\n const sys = a.pop();\n const v = a.join('');\n sys.__exec('\u7D99\u7D9A\u8868\u793A', [v, sys]);\n },\n return_none: true\n },\n '\u8868\u793A\u30ED\u30B0': { type: 'const', value: '' }, // @\u3072\u3087\u3046\u3058\u308D\u3050\n '\u8868\u793A\u30ED\u30B0\u30AF\u30EA\u30A2': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n sys.__setSysVar('\u8868\u793A\u30ED\u30B0', '');\n },\n return_none: true\n },\n '\u8A00': {\n type: 'func',\n josi: [['\u3092', '\u3068']],\n pure: true,\n fn: function (s, sys) {\n sys.logger.send('stdout', s + '');\n },\n return_none: true\n },\n '\u30B3\u30F3\u30BD\u30FC\u30EB\u8868\u793A': {\n type: 'func',\n josi: [['\u3092', '\u3068']],\n pure: true,\n fn: function (s) {\n console.log(s);\n },\n return_none: true\n },\n // @\u56DB\u5247\u6F14\u7B97\n '\u8DB3': {\n type: 'func',\n josi: [['\u306B', '\u3068'], ['\u3092']],\n isVariableJosi: false,\n pure: true,\n fn: function (a, b) {\n if (typeof (a) === 'bigint' || typeof (b) === 'bigint') {\n return BigInt(a) + BigInt(b);\n }\n return parseFloat(a) + parseFloat(b);\n }\n },\n '\u5408\u8A08': {\n type: 'func',\n josi: [['\u3068', '\u3092', '\u306E']],\n isVariableJosi: true,\n pure: true,\n fn: function (...a) {\n const sys = a.pop(); // remove NakoSystem\n if (a.length >= 1 && a[0] instanceof Array) {\n return sys.__exec('\u914D\u5217\u5408\u8A08', [a[0], sys]);\n }\n let isBigInt = false;\n let sum = 0;\n for (const v of a) {\n if (typeof (v) === 'bigint') {\n isBigInt = true;\n break;\n }\n sum += parseFloat(v);\n }\n if (isBigInt) {\n let bigsum = 0n;\n for (const v of a) {\n bigsum += BigInt(v);\n }\n return bigsum;\n }\n return sum;\n }\n },\n '\u5F15': {\n type: 'func',\n josi: [['\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (a, b) {\n return a - b;\n }\n },\n '\u639B': {\n type: 'func',\n josi: [['\u306B', '\u3068'], ['\u3092']],\n pure: true,\n fn: function (a, b) {\n // \u6570\u5024\u306E\u639B\u3051\u7B97\n if (typeof a === 'number') {\n return a * b;\n }\n // \u6587\u5B57\u5217\u306E\u639B\u3051\u7B97(\u6587\u5B57\u5217\u306E\u7E70\u308A\u8FD4\u3057)\n if (typeof a === 'string') {\n let s = '';\n for (let i = 0; i < parseInt(b); i++) {\n s += a;\n }\n return s;\n }\n // \u914D\u5217\u306E\u7E70\u308A\u8FD4\u3057\n if (a instanceof Array) {\n const aa = [];\n for (let i = 0; i < parseInt(b); i++) {\n aa.push(...a);\n }\n return aa;\n }\n return a * b;\n }\n },\n '\u500D': {\n type: 'func',\n josi: [['\u306E', '\u3092'], ['']],\n pure: true,\n fn: function (a, b) {\n return a * b;\n }\n },\n '\u5272': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (a, b) {\n return a / b;\n }\n },\n '\u5272\u4F59': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (a, b) {\n return a % b;\n }\n },\n '\u5076\u6570': {\n type: 'func',\n josi: [['\u304C']],\n pure: true,\n fn: function (a) {\n return (parseInt(a) % 2 === 0);\n }\n },\n '\u5947\u6570': {\n type: 'func',\n josi: [['\u304C']],\n pure: true,\n fn: function (a) {\n return (parseInt(a) % 2 === 1);\n }\n },\n '\u4E8C\u4E57': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (a) {\n return a * a;\n }\n },\n '\u3079\u304D\u4E57': {\n type: 'func',\n josi: [['\u306E'], ['\u306E']],\n pure: true,\n fn: function (a, b) {\n return Math.pow(a, b);\n }\n },\n '\u4EE5\u4E0A': {\n type: 'func',\n josi: [['\u304C'], ['']],\n pure: true,\n fn: function (a, b) {\n return a >= b;\n }\n },\n '\u4EE5\u4E0B': {\n type: 'func',\n josi: [['\u304C'], ['']],\n pure: true,\n fn: function (a, b) {\n return a <= b;\n }\n },\n '\u672A\u6E80': {\n type: 'func',\n josi: [['\u304C'], ['']],\n pure: true,\n fn: function (a, b) {\n return a < b;\n }\n },\n '\u8D85': {\n type: 'func',\n josi: [['\u304C'], ['']],\n pure: true,\n fn: function (a, b) {\n return a > b;\n }\n },\n '\u7B49': {\n type: 'func',\n josi: [['\u304C'], ['\u3068']],\n pure: true,\n fn: function (a, b) {\n return a === b;\n }\n },\n '\u7B49\u7121': {\n type: 'func',\n josi: [['\u304C'], ['\u3068']],\n pure: true,\n fn: function (a, b) {\n return a !== b;\n }\n },\n '\u4E00\u81F4': {\n type: 'func',\n josi: [['\u304C'], ['\u3068']],\n pure: true,\n fn: function (a, b) {\n // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u5834\u5408\u3001JSON\u306B\u5909\u63DB\u3057\u3066\u6BD4\u8F03\n if (typeof (a) === 'object') {\n const jsonA = JSON.stringify(a);\n const jsonB = JSON.stringify(b);\n return jsonA === jsonB;\n }\n return a === b;\n }\n },\n '\u4E0D\u4E00\u81F4': {\n type: 'func',\n josi: [['\u304C'], ['\u3068']],\n pure: true,\n fn: function (a, b) {\n // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u5834\u5408\u3001JSON\u306B\u5909\u63DB\u3057\u3066\u6BD4\u8F03\n if (typeof (a) === 'object') {\n const jsonA = JSON.stringify(a);\n const jsonB = JSON.stringify(b);\n return jsonA !== jsonB;\n }\n return a !== b;\n }\n },\n '\u7BC4\u56F2\u5185': {\n type: 'func',\n josi: [['\u304C'], ['\u304B\u3089'], ['\u306E', '\u307E\u3067\u306E']],\n pure: true,\n fn: function (v, a, b) {\n return (a <= v) && (v <= b);\n }\n },\n '\u7BC4\u56F2': {\n type: 'func',\n josi: [['\u304B\u3089'], ['\u306E', '\u307E\u3067\u306E']],\n pure: true,\n fn: function (a, b) {\n return {\n '\u5148\u982D': a,\n '\u672B\u5C3E': b\n };\n }\n },\n '\u9023\u7D9A\u52A0\u7B97': {\n type: 'func',\n josi: [['\u3092'], ['\u306B', '\u3068']],\n isVariableJosi: true,\n pure: true,\n fn: function (b, ...a) {\n a.pop(); // \u5FC5\u305A\u672B\u5C3E\u306B sys \u304C\u3042\u308B\u306E\u3067\u3001\u672B\u5C3E\u306E\u30B7\u30B9\u30C6\u30E0\u5909\u6570\u3092\u9664\u5916\n a.push(b);\n return a.reduce((p, c) => p + c);\n }\n },\n 'MAX': {\n type: 'func',\n josi: [['\u306E'], ['\u3068']],\n isVariableJosi: true,\n pure: true,\n fn: function (b, ...a) {\n const sys = a.pop();\n return sys.__exec('\u6700\u5927\u5024', [b, ...a, sys]);\n }\n },\n '\u6700\u5927\u5024': {\n type: 'func',\n josi: [['\u306E'], ['\u3068']],\n isVariableJosi: true,\n pure: true,\n fn: function (b, ...a) {\n a.pop(); // \u5FC5\u305A\u672B\u5C3E\u306B sys \u304C\u3042\u308B\u306E\u3067\u3001\u672B\u5C3E\u306E\u30B7\u30B9\u30C6\u30E0\u5909\u6570\u3092\u9664\u5916\n a.push(b);\n return a.reduce((p, c) => Math.max(p, c));\n }\n },\n 'MIN': {\n type: 'func',\n josi: [['\u306E'], ['\u3068']],\n isVariableJosi: true,\n pure: true,\n fn: function (b, ...a) {\n const sys = a.pop();\n return sys.__exec('\u6700\u5C0F\u5024', [b, ...a, sys]);\n }\n },\n '\u6700\u5C0F\u5024': {\n type: 'func',\n josi: [['\u306E'], ['\u3068']],\n isVariableJosi: true,\n pure: true,\n fn: function (b, ...a) {\n a.pop(); // \u5FC5\u305A\u672B\u5C3E\u306B sys \u304C\u3042\u308B\u306E\u3067\u3001\u672B\u5C3E\u306E\u30B7\u30B9\u30C6\u30E0\u5909\u6570\u3092\u9664\u5916\n a.push(b);\n return a.reduce((p, c) => Math.min(p, c));\n }\n },\n 'CLAMP': {\n type: 'func',\n josi: [['\u306E', '\u3092'], ['\u304B\u3089'], ['\u307E\u3067\u306E', '\u3067']],\n pure: true,\n fn: function (x, a, b) {\n return Math.min(Math.max(x, a), b);\n }\n },\n // @\u656C\u8A9E\n '\u304F\u3060\u3055\u3044': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n if (!sys.__reisetu) {\n sys.__reisetu = 0;\n }\n sys.__reisetu++;\n },\n return_none: true\n },\n '\u304A\u9858': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n if (!sys.__reisetu) {\n sys.__reisetu = 0;\n }\n sys.__reisetu++;\n },\n return_none: true\n },\n '\u3067\u3059': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n if (!sys.__reisetu) {\n sys.__reisetu = 0;\n }\n sys.__reisetu++;\n },\n return_none: true\n },\n '\u62DD\u5553': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n sys.__reisetu = 0;\n },\n return_none: true\n },\n '\u656C\u5177': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n sys.__reisetu += 100; // bonus point\n },\n return_none: true\n },\n '\u793C\u7BC0\u30EC\u30D9\u30EB\u53D6\u5F97': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n if (!sys.__reisetu) {\n sys.__reisetu = 0;\n }\n return sys.__reisetu;\n }\n },\n // @\u7279\u6B8A\u547D\u4EE4\n 'JS\u5B9F\u884C': {\n type: 'func',\n josi: [['\u3092', '\u3067']],\n pure: true,\n fn: function (src, sys) {\n return sys.__evalJS(src, sys); // #1733\n }\n },\n 'JS\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u53D6\u5F97': {\n type: 'func',\n josi: [['\u306E']],\n pure: false,\n fn: function (name, sys) {\n return sys.__findVar(name, null);\n }\n },\n 'JS\u95A2\u6570\u5B9F\u884C': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n fn: function (name, args, sys) {\n // name\u304C\u6587\u5B57\u5217\u306A\u3089eval\u3057\u3066\u95A2\u6570\u3092\u5F97\u308B\n if (typeof name === 'string') {\n name = sys.__evalJS(name, sys);\n }\n if (typeof name !== 'function') {\n throw new Error('JS\u95A2\u6570\u53D6\u5F97\u3067\u5B9F\u884C\u3067\u304D\u307E\u305B\u3093\u3002');\n }\n // args\u304CArray\u3067\u306A\u3051\u308C\u3070Array\u306B\u5909\u63DB\u3059\u308B\n if (!(args instanceof Array)) {\n args = [args];\n }\n // \u5B9F\u884C\n // eslint-disable-next-line prefer-spread\n return name.apply(null, args);\n }\n },\n 'ASYNC': {\n type: 'func',\n josi: [],\n asyncFn: true,\n pure: true,\n fn: async function () {\n // empty\n },\n return_none: true\n },\n 'AWAIT\u5B9F\u884C': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n asyncFn: true,\n fn: async function (f, args, sys) {\n // name\u304C\u6587\u5B57\u5217\u306A\u3089eval\u3057\u3066\u95A2\u6570\u3092\u5F97\u308B\n if (typeof f === 'string') {\n f = sys.__findFunc(f, 'AWAIT\u5B9F\u884C');\n }\n if (!(f instanceof Function)) {\n throw new Error('\u300EAWAIT\u5B9F\u884C\u300F\u306E\u7B2C\u4E00\u5F15\u6570\u306F\u306A\u3067\u3057\u3053\u95A2\u6570\u540D\u304BFunction\u578B\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002');\n }\n // \u5B9F\u884C\n return await f(...args);\n }\n },\n 'JS\u30E1\u30BD\u30C3\u30C9\u5B9F\u884C': {\n type: 'func',\n josi: [['\u306E'], ['\u3092'], ['\u3067']],\n fn: function (obj, m, args, sys) {\n // obj\u304C\u6587\u5B57\u5217\u306A\u3089eval\u3057\u3066\u95A2\u6570\u3092\u5F97\u308B\n if (typeof obj === 'string') {\n obj = sys.__evalJS(obj, sys);\n }\n if (typeof obj !== 'object') {\n throw new Error('JS\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002');\n }\n // method \u3092\u6C42\u3081\u308B\n if (typeof m !== 'function') {\n m = obj[m];\n }\n // args\u304CArray\u3067\u306A\u3051\u308C\u3070Array\u306B\u5909\u63DB\u3059\u308B\n if (!(args instanceof Array)) {\n args = [args];\n }\n // \u5B9F\u884C\n return m.apply(obj, args);\n }\n },\n '\u30CA\u30C7\u30B7\u30B3': {\n type: 'func',\n josi: [['\u3092', '\u3067']],\n pure: false,\n asyncFn: true,\n fn: async function (code, sys) {\n const options = {\n resetEnv: false,\n resetAll: true,\n nakoGlobal: sys\n };\n const tmpLog = String(sys.__getSysVar('\u8868\u793A\u30ED\u30B0', ''));\n sys.__setSysVar('\u8868\u793A\u30ED\u30B0', '');\n await sys.__self.runAsync(code, sys.__modName, options);\n const outLog = String(sys.__getSysVar('\u8868\u793A\u30ED\u30B0'));\n sys.__setSysVar('\u8868\u793A\u30ED\u30B0', tmpLog + outLog);\n return outLog;\n }\n },\n '\u30CA\u30C7\u30B7\u30B3\u7D9A': {\n type: 'func',\n josi: [['\u3092', '\u3067']],\n pure: false,\n asyncFn: true,\n fn: async function (code, sys) {\n const options = {\n resetEnv: false,\n resetAll: false,\n nakoGlobal: sys.__self\n };\n const tmpLog = sys.__getSysVar('\u8868\u793A\u30ED\u30B0', '');\n sys.__setSysVar('\u8868\u793A\u30ED\u30B0', '');\n await sys.__self.runAsync(code, sys.__modName, options);\n const outLog = String(sys.__getSysVar('\u8868\u793A\u30ED\u30B0'));\n if (outLog) {\n sys.logger.trace(outLog);\n }\n sys.__setSysVar('\u8868\u793A\u30ED\u30B0', tmpLog + outLog);\n return outLog;\n }\n },\n '\u5B9F\u884C': {\n type: 'func',\n josi: [['\u3092', '\u306B', '\u3067']],\n pure: false,\n fn: function (f, sys) {\n // #938 \u306E\u898F\u5247\u306B\u5F93\u3063\u3066\u51E6\u7406\n // \u5F15\u6570\u304C\u95A2\u6570\u306A\u3089\u5B9F\u884C\n if (typeof f === 'function') {\n return f(sys);\n }\n // \u6587\u5B57\u5217\u306A\u3089\u95A2\u6570\u306B\u5909\u63DB\u3067\u304D\u308B\u304B\u5224\u5B9A\u3057\u3066\u5B9F\u884C\n if (typeof f === 'string') {\n const tf = sys.__findFunc(f, '\u5B9F\u884C');\n if (typeof tf === 'function') {\n return tf(sys);\n }\n }\n // \u305D\u308C\u4EE5\u5916\u306A\u3089\u305D\u306E\u307E\u307E\u5024\u3092\u8FD4\u3059\n return f;\n }\n },\n '\u5B9F\u884C\u6642\u9593\u8A08\u6E2C': {\n type: 'func',\n josi: [['\u306E']],\n pure: false,\n fn: function (f, sys) {\n if (typeof f === 'string') {\n f = sys.__findFunc(f, '\u5B9F\u884C\u6642\u9593\u8A08\u6E2C');\n }\n //\n if (performance && performance.now) {\n const t1 = performance.now();\n f(sys);\n const t2 = performance.now();\n return (t2 - t1);\n }\n else {\n const t1 = Date.now();\n f(sys);\n const t2 = Date.now();\n return (t2 - t1);\n }\n }\n },\n '\u7D42': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n // \u30C7\u30D0\u30C3\u30B0\u30E2\u30FC\u30C9\u3067\u306A\u3051\u308C\u3070\u4F8B\u5916\u3092\u6295\u3052\u308B\u3053\u3068\u3067\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u7D42\u4E86\u3055\u305B\u308B\n sys.__setSysVar('__forceClose', true);\n if (!sys.__getSysVar('__useDebug')) {\n throw new Error('__\u7D42\u308F\u308B__');\n }\n }\n },\n // @\u578B\u5909\u63DB\n '\u5909\u6570\u578B\u78BA\u8A8D': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return (typeof v);\n }\n },\n 'TYPEOF': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return (typeof v);\n }\n },\n '\u6587\u5B57\u5217\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return String(v);\n }\n },\n 'TOSTR': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return String(v);\n }\n },\n '\u6574\u6570\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return parseInt(v);\n }\n },\n 'TOINT': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return parseInt(v);\n }\n },\n '\u5B9F\u6570\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return parseFloat(v);\n }\n },\n 'TOFLOAT': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return parseFloat(v);\n }\n },\n 'INT': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return parseInt(v);\n }\n },\n 'FLOAT': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return parseFloat(v);\n }\n },\n 'NAN\u5224\u5B9A': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return isNaN(v);\n }\n },\n '\u975E\u6570\u5224\u5B9A': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n // https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN\n return Number.isNaN(v);\n }\n },\n 'HEX': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return parseInt(a).toString(16);\n }\n },\n '\u9032\u6570\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092', '\u306E'], ['']],\n pure: true,\n fn: function (v, n) {\n return parseInt(v).toString(n);\n }\n },\n '\u4E8C\u9032': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (v) {\n return parseInt(v).toString(2);\n }\n },\n '\u4E8C\u9032\u8868\u793A': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (v, sys) {\n const s = parseInt(v).toString(2);\n sys.__exec('\u8868\u793A', [s, sys]);\n }\n },\n 'RGB': {\n type: 'func',\n josi: [['\u3068'], ['\u306E'], ['\u3067']],\n pure: true,\n fn: function (r, g, b) {\n const z2 = (v) => {\n const v2 = '00' + (parseInt(String(v)).toString(16));\n return v2.substring(v2.length - 2, v2.length);\n };\n return '#' + z2(r) + z2(g) + z2(b);\n }\n },\n // @\u8AD6\u7406\u6F14\u7B97\n '\u8AD6\u7406OR': {\n type: 'func',\n josi: [['\u3068'], ['\u306E']],\n pure: true,\n fn: function (a, b) {\n return (a || b);\n }\n },\n '\u8AD6\u7406AND': {\n type: 'func',\n josi: [['\u3068'], ['\u306E']],\n pure: true,\n fn: function (a, b) {\n return (a && b);\n }\n },\n '\u8AD6\u7406NOT': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return (!v);\n }\n },\n // @\u30D3\u30C3\u30C8\u6F14\u7B97\n 'OR': {\n type: 'func',\n josi: [['\u3068'], ['\u306E']],\n pure: true,\n fn: function (a, b) {\n return (a | b);\n }\n },\n 'AND': {\n type: 'func',\n josi: [['\u3068'], ['\u306E']],\n pure: true,\n fn: function (a, b) {\n return (a & b);\n }\n },\n 'XOR': {\n type: 'func',\n josi: [['\u3068'], ['\u306E']],\n pure: true,\n fn: function (a, b) {\n return (a ^ b);\n }\n },\n 'NOT': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return (~v);\n }\n },\n 'SHIFT_L': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (v, a) {\n return (v << a);\n }\n },\n 'SHIFT_R': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (v, a) {\n return (v >> a);\n }\n },\n 'SHIFT_UR': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (v, a) {\n return (v >>> a);\n }\n },\n // @\u6587\u5B57\u5217\u51E6\u7406\n '\u6587\u5B57\u6570': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n if (!Array.from) {\n return String(v).length;\n }\n // Unicode\u306E\u30B5\u30ED\u30B2\u30FC\u30C8\u30DA\u30A2\u3092\u8003\u616E\u3057\u3066\u6587\u5B57\u6570\u3092\u30AB\u30A6\u30F3\u30C8 #1954 \u3092\u53C2\u7167\n return Array.from(v).length;\n }\n },\n '\u4F55\u6587\u5B57\u76EE': {\n type: 'func',\n josi: [['\u3067', '\u306E'], ['\u304C']],\n pure: true,\n fn: function (s, a) {\n // Unicode\u306E\u30B5\u30ED\u30B2\u30FC\u30C8\u30DA\u30A2\u3092\u8003\u616E\u3057\u3066\u3001\u6587\u5B57\u5217\u3092\u691C\u7D22 #1954 \u3092\u53C2\u7167\n // return String(s).indexOf(a) + 1 // \u30B5\u30ED\u30B2\u30FC\u30C8\u30DA\u30A2\u3092\u7121\u8996\u3057\u305F\u5834\u5408\n const strArray = Array.from(s);\n const searchArray = Array.from(a);\n for (let i = 0; i < strArray.length; i++) {\n if (strArray.slice(i, i + searchArray.length).join('') === searchArray.join('')) {\n return i + 1;\n }\n }\n return 0;\n }\n },\n 'CHR': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n // \u6570\u5024\u306E\u3068\u304D\n if (typeof v === 'number') {\n if (!String.fromCodePoint) {\n return String.fromCharCode(v);\n }\n return String.fromCodePoint(v);\n }\n // \u914D\u5217\u306E\u3068\u304D\n const res = [];\n for (const s of v) {\n if (!String.fromCodePoint) {\n res.push(String.fromCharCode(s));\n }\n res.push(String.fromCodePoint(s));\n }\n return res;\n }\n },\n 'ASC': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n if (typeof v === 'string') {\n if (!String.prototype.codePointAt) {\n return String(v).charCodeAt(0);\n }\n return String(v).codePointAt(0) || 0;\n }\n const res = [];\n for (const s of v) {\n if (!String.prototype.codePointAt) {\n res.push(String(s).charCodeAt(0));\n }\n res.push(String(s).codePointAt(0) || 0);\n }\n return res;\n }\n },\n '\u6587\u5B57\u633F\u5165': {\n type: 'func',\n josi: [['\u3067', '\u306E'], ['\u306B', '\u3078'], ['\u3092']],\n pure: true,\n fn: function (s, i, a) {\n if (i <= 0) {\n i = 1;\n }\n const strArray = Array.from(s);\n strArray.splice(i - 1, 0, a);\n return strArray.join('');\n }\n },\n '\u6587\u5B57\u691C\u7D22': {\n type: 'func',\n josi: [['\u3067', '\u306E'], ['\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (s, a, b) {\n // \u30B5\u30ED\u30B2\u30FC\u30C8\u30DA\u30A2\u3092\u8003\u616E\u3057\u3066\u6587\u5B57\u5217\u3092\u691C\u7D22\u3059\u308B\n // return String(s).indexOf(b, a - 1) + 1\n if (a <= 0) {\n a = 1;\n }\n const strArray = Array.from(s);\n const searchArray = Array.from(b);\n // Unicode\u5358\u4F4D\u3067\u691C\u7D22\n for (let i = a - 1; i < strArray.length; i++) {\n if (strArray.slice(i, i + searchArray.length).join('') === searchArray.join('')) {\n // \u5408\u81F4\u3057\u305F\n return i + 1;\n }\n }\n return 0;\n }\n },\n '\u8FFD\u52A0': {\n type: 'func',\n josi: [['\u3067', '\u306B', '\u3078'], ['\u3092']],\n pure: true,\n fn: function (s, a) {\n if (s instanceof Array) {\n s.push(a);\n return s;\n }\n return String(s) + String(a);\n }\n },\n '\u4E00\u884C\u8FFD\u52A0': {\n type: 'func',\n josi: [['\u3067', '\u306B', '\u3078'], ['\u3092']],\n pure: true,\n fn: function (s, a) {\n if (s instanceof Array) {\n s.push(a);\n return s;\n }\n return String(s) + String(a) + '\\n';\n }\n },\n '\u9023\u7D50': {\n type: 'func',\n josi: [['\u3068', '\u3092']],\n pure: true,\n isVariableJosi: true,\n fn: function (...a) {\n a.pop(); // NakoSystem\u3092\u53D6\u308A\u9664\u304F\n return a.join('');\n }\n },\n '\u6587\u5B57\u5217\u9023\u7D50': {\n type: 'func',\n josi: [['\u3068', '\u3092']],\n pure: true,\n isVariableJosi: true,\n fn: function (...a) {\n a.pop(); // NakoSystem\u3092\u53D6\u308A\u9664\u304F\n return a.join('');\n }\n },\n '\u6587\u5B57\u5217\u5206\u89E3': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u3067']],\n pure: true,\n fn: function (v) {\n if (!Array.from) {\n return String(v).split('');\n }\n return Array.from(v);\n }\n },\n '\u30EA\u30D5\u30EC\u30A4\u30F3': {\n type: 'func',\n josi: [['\u3092', '\u306E'], ['\u3067']],\n pure: true,\n fn: function (v, cnt) {\n let s = '';\n for (let i = 0; i < cnt; i++) {\n s += String(v);\n }\n return s;\n }\n },\n '\u51FA\u73FE\u56DE\u6570': {\n type: 'func',\n josi: [['\u3067'], ['\u306E']],\n pure: true,\n fn: function (s, a) {\n s = '' + s;\n a = '' + a;\n return s.split(a).length - 1;\n }\n },\n 'MID': {\n type: 'func',\n josi: [['\u3067', '\u306E'], ['\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (s, a, cnt, sys) {\n return sys.__exec('\u6587\u5B57\u629C\u51FA', [s, a, cnt]);\n }\n },\n '\u6587\u5B57\u629C\u51FA': {\n type: 'func',\n josi: [['\u3067', '\u306E'], ['\u304B\u3089'], ['\u3092', '']],\n pure: true,\n fn: function (s, a, cnt) {\n // \u5F15\u6570\u306E\u578B\u30C1\u30A7\u30C3\u30AF #1995\n if (typeof a === 'string') {\n a = parseInt(a);\n }\n if (typeof cnt === 'string') {\n cnt = parseInt(cnt);\n }\n // \u3082\u3057\u3001cnt\u304C0\u4EE5\u4E0B\u306A\u3089\u7A7A\u6587\u5B57\u3092\u8FD4\u3059\n if (cnt <= 0) {\n return '';\n }\n // \u30B5\u30ED\u30B2\u30FC\u30C8\u30DA\u30A2\u3092\u8003\u616E\u3057\u305F\u51E6\u7406\u3092\u884C\u3046\n const strArray = Array.from(s);\n // \u3082\u3057\u3001a\u306E\u5024\u304C0\u672A\u6E80\u306E\u6642\u306F\u5F8C\u308D\u304B\u3089a\u6587\u5B57\u76EE\u304B\u3089cnt\u6587\u5B57\u3092\u62BD\u51FA\n if (a < 0) {\n a = strArray.length + a + 1;\n if (a < 0) {\n a = 1;\n }\n }\n return strArray.slice(a - 1, a + cnt - 1).join('');\n }\n },\n 'LEFT': {\n type: 'func',\n josi: [['\u306E', '\u3067'], ['\u3060\u3051']],\n pure: true,\n fn: function (s, cnt, sys) {\n return sys.__exec('\u6587\u5B57\u5DE6\u90E8\u5206', [s, cnt]);\n }\n },\n '\u6587\u5B57\u5DE6\u90E8\u5206': {\n type: 'func',\n josi: [['\u306E', '\u3067'], ['\u3060\u3051', '']],\n pure: true,\n fn: function (s, cnt) {\n // return (String(s).substring(0, cnt))\n // \u30B5\u30ED\u30B2\u30FC\u30C8\u30DA\u30A2\u3092\u8003\u616E\n const strArray = Array.from(s);\n return strArray.slice(0, cnt).join('');\n }\n },\n 'RIGHT': {\n type: 'func',\n josi: [['\u306E', '\u3067'], ['\u3060\u3051']],\n pure: true,\n fn: function (s, cnt, sys) {\n return sys.__exec('\u6587\u5B57\u53F3\u90E8\u5206', [s, cnt]);\n }\n },\n '\u6587\u5B57\u53F3\u90E8\u5206': {\n type: 'func',\n josi: [['\u306E', '\u3067'], ['\u3060\u3051', '']],\n pure: true,\n fn: function (s, cnt) {\n // return (s.substring(s.length - cnt, s.length))\n // \u30B5\u30ED\u30B2\u30FC\u30C8\u30DA\u30A2\u3092\u8003\u616E\n const strArray = Array.from(s);\n let index = strArray.length - cnt;\n if (index < 0) {\n index = 0;\n }\n return strArray.slice(index, strArray.length).join('');\n }\n },\n '\u533A\u5207': {\n type: 'func',\n josi: [['\u306E', '\u3092'], ['\u3067']],\n pure: true,\n fn: function (s, a) {\n return ('' + s).split('' + a);\n }\n },\n '\u6587\u5B57\u5217\u5206\u5272': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (s, a) {\n s = '' + s;\n a = '' + a;\n const i = s.indexOf(a);\n if (i < 0) {\n return [s];\n }\n return [s.substring(0, i), s.substring(i + a.length)];\n }\n },\n '\u5207\u53D6': {\n type: 'func',\n josi: [['\u304B\u3089', '\u306E'], ['\u307E\u3067', '\u3092']],\n pure: true,\n fn: function (s, a, sys) {\n s = String(s);\n const i = s.indexOf(a);\n if (i < 0) {\n sys.__setSysVar('\u5BFE\u8C61', '');\n return s;\n }\n sys.__setSysVar('\u5BFE\u8C61', s.substring(i + a.length));\n return s.substring(0, i);\n }\n },\n '\u7BC4\u56F2\u5207\u53D6': {\n type: 'func',\n josi: [['\u3067', '\u306E'], ['\u304B\u3089'], ['\u307E\u3067', '\u3092']],\n pure: true,\n fn: function (s, a, b, sys) {\n s = String(s);\n let mae = '';\n let usiro = '';\n const i = s.indexOf(a);\n if (i < 0) {\n sys.__setSysVar('\u5BFE\u8C61', s);\n return '';\n }\n mae = s.substring(0, i);\n const subS = s.substring(i + a.length);\n const j = subS.indexOf(b);\n if (j < 0) {\n sys.__setSysVar('\u5BFE\u8C61', mae);\n return subS;\n }\n const result = subS.substring(0, j);\n usiro = subS.substring(j + b.length);\n sys.__setSysVar('\u5BFE\u8C61', mae + usiro);\n return result;\n }\n },\n '\u6587\u5B57\u524A\u9664': {\n type: 'func',\n josi: [['\u306E'], ['\u304B\u3089'], ['\u3060\u3051', '\u3092', '']],\n pure: true,\n fn: function (s, a, b) {\n // \u30B5\u30ED\u30B2\u30FC\u30C8\u30DA\u30A2\u3092\u8003\u616E\n const strArray = Array.from(s);\n strArray.splice(a - 1, b);\n return strArray.join('');\n }\n },\n '\u6587\u5B57\u59CB': {\n type: 'func',\n josi: [['\u304C'], ['\u3067', '\u304B\u3089']],\n pure: true,\n fn: function (s, a) {\n return s.startsWith(a);\n }\n },\n '\u6587\u5B57\u7D42': {\n type: 'func',\n josi: [['\u304C'], ['\u3067']],\n pure: true,\n fn: function (s, a) {\n return s.endsWith(a);\n }\n },\n '\u51FA\u73FE': {\n type: 'func',\n josi: [['\u306B', '\u3067'], ['\u304C']],\n pure: true,\n fn: function (s, a) {\n if (typeof (s) === 'string') {\n return s.includes(a);\n }\n if (s instanceof Array) {\n return s.includes(a);\n }\n const ss = String(s);\n return ss.includes(a);\n }\n },\n // @\u7F6E\u63DB\u30FB\u30C8\u30EA\u30E0\n '\u7F6E\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3067'], ['\u3092', '\u304B\u3089'], ['\u306B', '\u3078']],\n pure: true,\n fn: function (s, a, b) {\n return String(s).split(a).join(b);\n }\n },\n '\u5358\u7F6E\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3067'], ['\u3092'], ['\u306B', '\u3078']],\n pure: true,\n fn: function (s, a, b) {\n // replace\u306F\u6700\u521D\u306E\u4E00\u5EA6\u3060\u3051\u7F6E\u63DB\u3059\u308B\n return String(s).replace(a, b);\n }\n },\n '\u30C8\u30EA\u30E0': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).replace(/^\\s+/, '').replace(/\\s+$/, '');\n }\n },\n '\u7A7A\u767D\u9664\u53BB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).replace(/^\\s+/, '').replace(/\\s+$/, '');\n }\n },\n '\u53F3\u30C8\u30EA\u30E0': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).replace(/\\s+$/, '');\n }\n },\n '\u5DE6\u30C8\u30EA\u30E0': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).replace(/^\\s+/, '');\n }\n },\n '\u672B\u5C3E\u7A7A\u767D\u9664\u53BB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).replace(/\\s+$/, '');\n }\n },\n // @\u6587\u5B57\u5909\u63DB\n '\u5927\u6587\u5B57\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).toUpperCase();\n }\n },\n '\u5C0F\u6587\u5B57\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).toLowerCase();\n }\n },\n '\u5E73\u4EEE\u540D\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n const kanaToHira = (str) => {\n return String(str).replace(/[\\u30a1-\\u30f6]/g, function (m) {\n const chr = m.charCodeAt(0) - 0x60;\n return String.fromCharCode(chr);\n });\n };\n return kanaToHira('' + s);\n }\n },\n '\u30AB\u30BF\u30AB\u30CA\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n const hiraToKana = (str) => {\n return String(str).replace(/[\\u3041-\\u3096]/g, function (m) {\n const chr = m.charCodeAt(0) + 0x60;\n return String.fromCharCode(chr);\n });\n };\n return hiraToKana('' + s);\n }\n },\n '\u82F1\u6570\u5168\u89D2\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).replace(/[A-Za-z0-9]/g, function (v) {\n return String.fromCharCode(v.charCodeAt(0) + 0xFEE0);\n });\n }\n },\n '\u82F1\u6570\u534A\u89D2\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).replace(/[\uFF21-\uFF3A\uFF41-\uFF5A\uFF10-\uFF19]/g, function (v) {\n return String.fromCharCode(v.charCodeAt(0) - 0xFEE0);\n });\n }\n },\n '\u82F1\u6570\u8A18\u53F7\u5168\u89D2\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).replace(/[\\x20-\\x7E]/g, function (v) {\n if (v === ' ') {\n return '\u3000';\n } // \u534A\u89D2\u30B9\u30DA\u30FC\u30B9(0x20)\u3092\u5168\u89D2\u30B9\u30DA\u30FC\u30B9(U+3000)\u306B\n return String.fromCharCode(v.charCodeAt(0) + 0xFEE0);\n });\n }\n },\n '\u82F1\u6570\u8A18\u53F7\u534A\u89D2\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n return String(s).replace(/[\\u3000\\uFF00-\\uFF5F]/g, function (v) {\n if (v === '\u3000') {\n return ' ';\n } // \u5168\u89D2\u30B9\u30DA\u30FC\u30B9(U+3000)\u3092\u534A\u89D2\u30B9\u30DA\u30FC\u30B9(U+0020)\n return String.fromCharCode(v.charCodeAt(0) - 0xFEE0);\n });\n }\n },\n '\u30AB\u30BF\u30AB\u30CA\u5168\u89D2\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s, sys) {\n // \u534A\u89D2\u30AB\u30BF\u30AB\u30CA\n const zen1 = sys.__getSysVar('\u5168\u89D2\u30AB\u30CA\u4E00\u89A7');\n const han1 = sys.__getSysVar('\u534A\u89D2\u30AB\u30CA\u4E00\u89A7');\n const zen2 = sys.__getSysVar('\u5168\u89D2\u30AB\u30CA\u6FC1\u97F3\u4E00\u89A7');\n const han2 = sys.__getSysVar('\u534A\u89D2\u30AB\u30CA\u6FC1\u97F3\u4E00\u89A7');\n let str = '';\n let i = 0;\n while (i < s.length) {\n // \u6FC1\u70B9\u306E\u5909\u63DB\n const c2 = s.substring(i, i + 2);\n const n2 = han2.indexOf(c2);\n if (n2 >= 0) {\n str += zen2.charAt(n2 / 2);\n i += 2;\n continue;\n }\n // \u6FC1\u70B9\u4EE5\u5916\u306E\u5909\u63DB\n const c = s.charAt(i);\n const n = han1.indexOf(c);\n if (n >= 0) {\n str += zen1.charAt(n);\n i++;\n continue;\n }\n str += c;\n i++;\n }\n return str;\n }\n },\n '\u30AB\u30BF\u30AB\u30CA\u534A\u89D2\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s, sys) {\n // \u534A\u89D2\u30AB\u30BF\u30AB\u30CA\n const zen1 = sys.__getSysVar('\u5168\u89D2\u30AB\u30CA\u4E00\u89A7');\n const han1 = sys.__getSysVar('\u534A\u89D2\u30AB\u30CA\u4E00\u89A7');\n const zen2 = sys.__getSysVar('\u5168\u89D2\u30AB\u30CA\u6FC1\u97F3\u4E00\u89A7');\n const han2 = sys.__getSysVar('\u534A\u89D2\u30AB\u30CA\u6FC1\u97F3\u4E00\u89A7');\n return s.split('').map((c) => {\n const i = zen1.indexOf(c);\n if (i >= 0) {\n return han1.charAt(i);\n }\n const j = zen2.indexOf(c);\n if (j >= 0) {\n return han2.substring(j * 2, j * 2 + 2);\n }\n return c;\n }).join('');\n }\n },\n '\u5168\u89D2\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: false,\n fn: function (s, sys) {\n let result = s;\n result = sys.__exec('\u30AB\u30BF\u30AB\u30CA\u5168\u89D2\u5909\u63DB', [result, sys]);\n result = sys.__exec('\u82F1\u6570\u8A18\u53F7\u5168\u89D2\u5909\u63DB', [result, sys]);\n return result;\n }\n },\n '\u534A\u89D2\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: false,\n fn: function (s, sys) {\n let result = s;\n result = sys.__exec('\u30AB\u30BF\u30AB\u30CA\u534A\u89D2\u5909\u63DB', [result, sys]);\n result = sys.__exec('\u82F1\u6570\u8A18\u53F7\u534A\u89D2\u5909\u63DB', [result, sys]);\n return result;\n }\n },\n '\u5168\u89D2\u30AB\u30CA\u4E00\u89A7': { type: 'const', value: '\u30A2\u30A4\u30A6\u30A8\u30AA\u30AB\u30AD\u30AF\u30B1\u30B3\u30B5\u30B7\u30B9\u30BB\u30BD\u30BF\u30C1\u30C4\u30C6\u30C8\u30CA\u30CB\u30CC\u30CD\u30CE\u30CF\u30D2\u30D5\u30D8\u30DB\u30DE\u30DF\u30E0\u30E1\u30E2\u30E4\u30E6\u30E8\u30E9\u30EA\u30EB\u30EC\u30ED\u30EF\u30F2\u30F3\u30A1\u30A3\u30A5\u30A7\u30A9\u30E3\u30E5\u30E7\u30C3\u3001\u3002\u30FC\u300C\u300D' }, // @\u305C\u3093\u304B\u304F\u304B\u306A\u3044\u3061\u3089\u3093\n '\u5168\u89D2\u30AB\u30CA\u6FC1\u97F3\u4E00\u89A7': { type: 'const', value: '\u30AC\u30AE\u30B0\u30B2\u30B4\u30B6\u30B8\u30BA\u30BC\u30BE\u30C0\u30C2\u30C5\u30C7\u30C9\u30D0\u30D3\u30D6\u30D9\u30DC\u30D1\u30D4\u30D7\u30DA\u30DD' }, // @\u305C\u3093\u304B\u304F\u304B\u306A\u3060\u304F\u304A\u3093\u3044\u3061\u3089\u3093\n '\u534A\u89D2\u30AB\u30CA\u4E00\u89A7': { type: 'const', value: '\uFF71\uFF72\uFF73\uFF74\uFF75\uFF76\uFF77\uFF78\uFF79\uFF7A\uFF7B\uFF7C\uFF7D\uFF7E\uFF7F\uFF80\uFF81\uFF82\uFF83\uFF84\uFF85\uFF86\uFF87\uFF88\uFF89\uFF8A\uFF8B\uFF8C\uFF8D\uFF8E\uFF8F\uFF90\uFF91\uFF92\uFF93\uFF94\uFF95\uFF96\uFF97\uFF98\uFF99\uFF9A\uFF9B\uFF9C\uFF66\uFF9D\uFF67\uFF68\uFF69\uFF6A\uFF6B\uFF6C\uFF6D\uFF6E\uFF6F\uFF64\uFF61\uFF70\uFF62\uFF63\uFF9E\uFF9F' }, // @\u306F\u3093\u304B\u304F\u304B\u306A\u3044\u3061\u3089\u3093\n '\u534A\u89D2\u30AB\u30CA\u6FC1\u97F3\u4E00\u89A7': { type: 'const', value: '\uFF76\uFF9E\uFF77\uFF9E\uFF78\uFF9E\uFF79\uFF9E\uFF7A\uFF9E\uFF7B\uFF9E\uFF7C\uFF9E\uFF7D\uFF9E\uFF7E\uFF9E\uFF7F\uFF9E\uFF80\uFF9E\uFF81\uFF9E\uFF82\uFF9E\uFF83\uFF9E\uFF84\uFF9E\uFF8A\uFF9E\uFF8B\uFF9E\uFF8C\uFF9E\uFF8D\uFF9E\uFF8E\uFF9E\uFF8A\uFF9F\uFF8B\uFF9F\uFF8C\uFF9F\uFF8D\uFF9F\uFF8E\uFF9F' }, // @\u306F\u3093\u304B\u304F\u304B\u306A\u3060\u304F\u304A\u3093\u3044\u3061\u3089\u3093\n // @JSON\n 'JSON\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (v) {\n return JSON.stringify(v);\n }\n },\n 'JSON\u53D6\u5F97': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (v) {\n return JSON.parse(v);\n }\n },\n 'JSON\u30A8\u30F3\u30B3\u30FC\u30C9': {\n type: 'func',\n josi: [['\u3092', '\u306E']],\n pure: true,\n fn: function (v) {\n return JSON.stringify(v);\n }\n },\n 'JSON\u30A8\u30F3\u30B3\u30FC\u30C9\u6574\u5F62': {\n type: 'func',\n josi: [['\u3092', '\u306E']],\n pure: true,\n fn: function (v) {\n return JSON.stringify(v, null, 2);\n }\n },\n 'JSON\u30C7\u30B3\u30FC\u30C9': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (s) {\n return JSON.parse(s);\n }\n },\n 'JSON_E': {\n type: 'func',\n josi: [['\u3092', '\u306E']],\n pure: true,\n fn: function (v) {\n return JSON.stringify(v);\n }\n },\n 'JSON_ES': {\n type: 'func',\n josi: [['\u3092', '\u306E']],\n pure: true,\n fn: function (v) {\n return JSON.stringify(v, null, 2);\n }\n },\n 'JSON_D': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (s) {\n return JSON.parse(s);\n }\n },\n // @\u6B63\u898F\u8868\u73FE\n '\u6B63\u898F\u8868\u73FE\u30DE\u30C3\u30C1': {\n type: 'func',\n josi: [['\u3092', '\u304C'], ['\u3067', '\u306B']],\n pure: true,\n fn: function (a, b, sys) {\n let re;\n const f = ('' + b).match(/^\\/(.+)\\/([a-zA-Z]*)$/);\n // \u30D1\u30BF\u30FC\u30F3\u304C\u306A\u3044\u5834\u5408\n if (f === null) {\n re = new RegExp(b, 'g');\n }\n else {\n re = new RegExp(f[1], f[2]);\n }\n const sa = sys.__getSysVar('\u62BD\u51FA\u6587\u5B57\u5217');\n sa.splice(0, sa.length); // clear\n const m = String(a).match(re);\n let result = m;\n if (re.global) {\n // no groups\n }\n else if (m) {\n // has group?\n if (m.length > 0) {\n result = m[0];\n for (let i = 1; i < m.length; i++) {\n sa[i - 1] = m[i];\n }\n }\n }\n return result;\n }\n },\n '\u6B63\u898F\u8868\u73FE\u62BD\u51FA': {\n type: 'func',\n josi: [['\u304B\u3089', '\u3092'], ['\u3067']],\n pure: true,\n fn: function (a, b, sys) {\n let pattern = '' + b;\n let flags = 'g';\n const f = pattern.match(/^\\/(.+)\\/([a-zA-Z]*)$/);\n if (f) {\n pattern = f[1];\n flags = f[2] || '';\n }\n if (!flags.includes('g'))\n flags += 'g';\n const re = new RegExp(pattern, flags);\n const sa = sys.__getSysVar('\u62BD\u51FA\u6587\u5B57\u5217');\n sa.splice(0, sa.length); // clear\n const result = []; // \u4E00\u6B21\u5143\u914D\u5217\n const caps2d = []; // \u4E8C\u6B21\u5143\u914D\u5217\uFF08sa \u306B\u5165\u308C\u308B\uFF09\n for (const m of String(a).matchAll(re)) {\n // \u2605 \u540D\u524D\u4ED8\u304D\u30AD\u30E3\u30D7\u30C1\u30E3\u304C\u3042\u308B\u5834\u5408\n if (m.groups && Object.keys(m.groups).length > 0) {\n const row = {};\n for (const [key, val] of Object.entries(m.groups)) {\n row[key] = val;\n result.push(val); // result \u306F\u5E73\u5766\u5316\n }\n caps2d.push(row);\n continue;\n }\n // \u2605 \u901A\u5E38\u30AD\u30E3\u30D7\u30C1\u30E3\uFF08\u5F93\u6765\u3069\u304A\u308A\uFF09\n let caps = [...m].slice(1);\n if (caps.length === 0) {\n caps = [m[0]]; //\u30AD\u30E3\u30D7\u30C1\u30E3\u304C\u306A\u3044\u5834\u5408\n }\n caps2d.push(caps);\n result.push(...caps);\n }\n // \u30DE\u30C3\u30C1\u306A\u3057 \u2192 \u4E21\u65B9\u7A7A\u306E\u307E\u307E\n if (caps2d.length === 0) {\n return result;\n }\n // sa \u306B\u4E8C\u6B21\u5143\u914D\u5217\u3092\u30B3\u30D4\u30FC\n for (const row of caps2d) {\n sa.push(row);\n }\n return result;\n }\n },\n '\u62BD\u51FA\u6587\u5B57\u5217': { type: 'const', value: [] }, // @\u3061\u3085\u3046\u3057\u3085\u3064\u3082\u3058\u308C\u3064\n '\u6B63\u898F\u8868\u73FE\u7F6E\u63DB': {\n type: 'func',\n josi: [['\u306E'], ['\u3092', '\u304B\u3089'], ['\u3067', '\u306B', '\u3078']],\n pure: true,\n fn: function (s, a, b) {\n let re;\n const f = a.match(/^\\/(.+)\\/([a-zA-Z]*)/);\n if (f === null) {\n re = new RegExp(a, 'g');\n }\n else {\n re = new RegExp(f[1], f[2]);\n }\n return String(s).replace(re, b);\n }\n },\n '\u6B63\u898F\u8868\u73FE\u533A\u5207': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (s, a) {\n let re;\n const f = a.match(/^\\/(.+)\\/([a-zA-Z]*)/);\n if (f === null) {\n re = new RegExp(a, 'g');\n }\n else {\n re = new RegExp(f[1], f[2]);\n }\n return String(s).split(re);\n }\n },\n // @\u6307\u5B9A\u5F62\u5F0F\n '\u901A\u8CA8\u5F62\u5F0F': {\n type: 'func',\n josi: [['\u3092', '\u306E']],\n pure: true,\n fn: function (v) {\n return String(v).replace(/(?<!\\.\\d*?)(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1,');\n }\n },\n '\u30BC\u30ED\u57CB': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (v, a) {\n v = String(v);\n let z = '0';\n for (let i = 0; i < a; i++) {\n z += '0';\n }\n a = parseInt(a);\n if (a < v.length) {\n a = v.length;\n }\n const s = z + String(v);\n return s.substring(s.length - a, s.length);\n }\n },\n '\u7A7A\u767D\u57CB': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (v, a) {\n v = String(v);\n let z = ' ';\n for (let i = 0; i < a; i++) {\n z += ' ';\n }\n a = parseInt(a);\n if (a < v.length) {\n a = v.length;\n }\n const s = z + String(v);\n return s.substring(s.length - a, s.length);\n }\n },\n // @\u6587\u5B57\u7A2E\u985E\n '\u304B\u306A\u304B\u5224\u5B9A': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304C']],\n pure: true,\n fn: function (s) {\n const c = String(s).charCodeAt(0);\n return (c >= 0x3041 && c <= 0x309F);\n }\n },\n '\u30AB\u30BF\u30AB\u30CA\u5224\u5B9A': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304C']],\n pure: true,\n fn: function (s) {\n const c = String(s).charCodeAt(0);\n return (c >= 0x30A1 && c <= 0x30FA);\n }\n },\n '\u6570\u5B57\u5224\u5B9A': {\n type: 'func',\n josi: [['\u3092', '\u304C']],\n pure: true,\n fn: function (s) {\n const c = String(s).charAt(0);\n return ((c >= '0' && c <= '9') || (c >= '\uFF10' && c <= '\uFF19'));\n }\n },\n '\u6570\u5217\u5224\u5B9A': {\n type: 'func',\n josi: [['\u3092', '\u304C']],\n pure: true,\n fn: function (s) {\n const checkerRE = /^[+\\-\uFF0B\uFF0D]?([0-9\uFF10-\uFF19]*)(([.\uFF0E][0-9\uFF10-\uFF19]+)?|([.\uFF0E][0-9\uFF10-\uFF19]+[eE\uFF45\uFF25][+\\-\uFF0B\uFF0D]?[0-9\uFF10-\uFF19]+)?)$/;\n if (s === '') {\n return false;\n } // \u7A7A\u6587\u5B57\u5217\u306Ffalse\n return String(s).match(checkerRE) !== null;\n }\n },\n // @\u914D\u5217\u64CD\u4F5C\n '\u914D\u5217\u7D50\u5408': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (a, s) {\n // \u914D\u5217\u306A\u3089OK\n if (a instanceof Array) {\n return a.join('' + s);\n }\n const a2 = String(a).split('\\n'); // \u914D\u5217\u3067\u306A\u3051\u308C\u3070\u7121\u7406\u77E2\u7406\u6539\u884C\u3067\u533A\u5207\u3063\u3066\u307F\u308B\n return a2.join('' + s);\n }\n },\n '\u914D\u5217\u53EA\u7D50\u5408': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (a) {\n if (a instanceof Array) {\n return a.join('');\n }\n const a2 = String(a).split('\\n'); // \u914D\u5217\u3067\u306A\u3051\u308C\u3070\u7121\u7406\u77E2\u7406\u6539\u884C\u3067\u533A\u5207\u3063\u3066\u307F\u308B\n return a2.join('');\n }\n },\n '\u914D\u5217\u691C\u7D22': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (a, s) {\n if (a instanceof Array) {\n return a.indexOf(s);\n } // \u914D\u5217\u306A\u3089OK\n return -1;\n }\n },\n '\u914D\u5217\u8981\u7D20\u6570': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n if (a instanceof Array) {\n return a.length;\n } // \u914D\u5217\u306A\u3089OK\n if (a instanceof Object) {\n return Object.keys(a).length;\n } // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n if (typeof a === 'string') {\n return String(a).length;\n } // \u6587\u5B57\u5217\n return 1;\n }\n },\n '\u8981\u7D20\u6570': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a, sys) {\n return sys.__exec('\u914D\u5217\u8981\u7D20\u6570', [a]);\n }\n },\n 'LEN': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a, sys) {\n return sys.__exec('\u914D\u5217\u8981\u7D20\u6570', [a]);\n }\n },\n '\u914D\u5217\u633F\u5165': {\n type: 'func',\n josi: [['\u306E'], ['\u306B', '\u3078'], ['\u3092']],\n pure: true,\n fn: function (a, i, s) {\n if (a instanceof Array) {\n return a.splice(i, 0, s);\n } // \u914D\u5217\u306A\u3089OK\n throw new Error('\u300E\u914D\u5217\u633F\u5165\u300F\u3067\u914D\u5217\u4EE5\u5916\u306E\u8981\u7D20\u3078\u306E\u633F\u5165\u3002');\n }\n },\n '\u914D\u5217\u4E00\u62EC\u633F\u5165': {\n type: 'func',\n josi: [['\u306E'], ['\u306B', '\u3078'], ['\u3092']],\n pure: true,\n fn: function (a, i, b) {\n if (a instanceof Array && b instanceof Array) { // \u914D\u5217\u306A\u3089OK\n for (let j = 0; j < b.length; j++) {\n a.splice(i + j, 0, b[j]);\n }\n return a;\n }\n throw new Error('\u300E\u914D\u5217\u4E00\u62EC\u633F\u5165\u300F\u3067\u914D\u5217\u4EE5\u5916\u306E\u8981\u7D20\u3078\u306E\u633F\u5165\u3002');\n }\n },\n '\u914D\u5217\u30BD\u30FC\u30C8': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (a) {\n if (a instanceof Array) {\n return a.sort();\n } // \u914D\u5217\u306A\u3089OK\n throw new Error('\u300E\u914D\u5217\u30BD\u30FC\u30C8\u300F\u3067\u914D\u5217\u4EE5\u5916\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u914D\u5217\u6570\u5024\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (a) {\n // \u914D\u5217\u306A\u3089OK\n if (a instanceof Array) {\n for (let i = 0; i < a.length; i++) {\n a[i] = parseFloat(a[i]);\n }\n return a;\n }\n throw new Error('\u300E\u914D\u5217\u6570\u5024\u5909\u63DB\u300F\u3067\u914D\u5217\u4EE5\u5916\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u914D\u5217\u6570\u5024\u30BD\u30FC\u30C8': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (a) {\n // \u914D\u5217\u306A\u3089OK\n if (a instanceof Array) {\n return a.sort((a, b) => {\n return parseFloat(a) - parseFloat(b);\n });\n }\n throw new Error('\u300E\u914D\u5217\u6570\u5024\u30BD\u30FC\u30C8\u300F\u3067\u914D\u5217\u4EE5\u5916\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u914D\u5217\u30AB\u30B9\u30BF\u30E0\u30BD\u30FC\u30C8': {\n type: 'func',\n josi: [['\u3067'], ['\u306E', '\u3092']],\n pure: false,\n fn: function (f, a, sys) {\n let ufunc = f;\n if (typeof f === 'string') {\n ufunc = sys.__findFunc(f, '\u914D\u5217\u30AB\u30B9\u30BF\u30E0\u30BD\u30FC\u30C8');\n }\n if (a instanceof Array) {\n return a.sort(ufunc);\n }\n throw new Error('\u300E\u914D\u5217\u30AB\u30B9\u30BF\u30E0\u30BD\u30FC\u30C8\u300F\u3067\u914D\u5217\u4EE5\u5916\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u914D\u5217\u9006\u9806': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (a) {\n if (a instanceof Array) {\n return a.reverse();\n } // \u914D\u5217\u306A\u3089OK\n throw new Error('\u300E\u914D\u5217\u30BD\u30FC\u30C8\u300F\u3067\u914D\u5217\u4EE5\u5916\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u914D\u5217\u30B7\u30E3\u30C3\u30D5\u30EB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (a) {\n if (a instanceof Array) { // \u914D\u5217\u306A\u3089OK\n for (let i = a.length - 1; i > 0; i--) {\n const r = Math.floor(Math.random() * (i + 1));\n const tmp = a[i];\n a[i] = a[r];\n a[r] = tmp;\n }\n return a;\n }\n throw new Error('\u300E\u914D\u5217\u30B7\u30E3\u30C3\u30D5\u30EB\u300F\u3067\u914D\u5217\u4EE5\u5916\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u914D\u5217\u524A\u9664': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (a, i, sys) {\n return sys.__exec('\u914D\u5217\u5207\u53D6', [a, i, sys]);\n }\n },\n '\u914D\u5217\u5207\u53D6': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (a, i) {\n // \u914D\u5217\u5909\u6570\u306E\u3068\u304D\n if (a instanceof Array) {\n if (typeof i === 'number') {\n const b = a.splice(i, 1);\n if (b instanceof Array) {\n return b[0];\n } // \u5207\u308A\u53D6\u3063\u305F\u623B\u308A\u5024\u306F\u5FC5\u305AArray\u306B\u306A\u308B\u306E\u3067\u3002\n }\n if (typeof i === 'object' && typeof i['\u5148\u982D'] === 'number') {\n const idx = i['\u5148\u982D'];\n const cnt = i['\u672B\u5C3E'] - i['\u5148\u982D'] + 1;\n return a.splice(idx, cnt);\n }\n return null;\n }\n // \u8F9E\u66F8\u578B\u5909\u6570\u306E\u3068\u304D\n if (a instanceof Object && typeof (i) === 'string') { // \u8F9E\u66F8\u578B\u5909\u6570\u3082\u8A31\u5BB9\n if (a[i]) {\n const old = a[i];\n delete a[i];\n return old;\n }\n return undefined;\n }\n throw new Error('\u300E\u914D\u5217\u5207\u53D6\u300F\u3067\u914D\u5217\u4EE5\u5916\u3092\u6307\u5B9A\u3002');\n }\n },\n '\u914D\u5217\u53D6\u51FA': {\n type: 'func',\n josi: [['\u306E'], ['\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (a, i, cnt) {\n if (a instanceof Array) {\n return a.splice(i, cnt);\n }\n throw new Error('\u300E\u914D\u5217\u53D6\u51FA\u300F\u3067\u914D\u5217\u4EE5\u5916\u3092\u6307\u5B9A\u3002');\n }\n },\n '\u914D\u5217\u30DD\u30C3\u30D7': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (a) {\n if (a instanceof Array) {\n return a.pop();\n }\n throw new Error('\u300E\u914D\u5217\u30DD\u30C3\u30D7\u300F\u3067\u914D\u5217\u4EE5\u5916\u306E\u51E6\u7406\u3002');\n }\n },\n '\u914D\u5217\u30D7\u30C3\u30B7\u30E5': {\n type: 'func',\n josi: [['\u306B', '\u3078'], ['\u3092']],\n pure: true,\n fn: function (a, b, sys) {\n return sys.__exec('\u914D\u5217\u8FFD\u52A0', [a, b, sys]);\n }\n },\n '\u914D\u5217\u8FFD\u52A0': {\n type: 'func',\n josi: [['\u306B', '\u3078'], ['\u3092']],\n pure: true,\n fn: function (a, b) {\n if (a instanceof Array) { // \u914D\u5217\u306A\u3089OK\n a.push(b);\n return a;\n }\n throw new Error('\u300E\u914D\u5217\u8FFD\u52A0\u300F\u3067\u914D\u5217\u4EE5\u5916\u306E\u51E6\u7406\u3002');\n }\n },\n '\u914D\u5217\u8907\u88FD': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (a) {\n return JSON.parse(JSON.stringify(a));\n }\n },\n '\u914D\u5217\u7BC4\u56F2\u30B3\u30D4\u30FC': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (a, i) {\n if (!Array.isArray(a)) {\n throw new Error('\u300E\u914D\u5217\u7BC4\u56F2\u30B3\u30D4\u30FC\u300F\u3067\u914D\u5217\u4EE5\u5916\u306E\u5024\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n if (typeof i === 'number') {\n if (typeof a[i] === 'object') {\n return JSON.parse(JSON.stringify(a[i]));\n }\n return a[i];\n }\n // \u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u3068\u304D\n if (typeof i === 'object' && typeof i['\u5148\u982D'] === 'number') {\n const start = i['\u5148\u982D'];\n const last = Number(i['\u672B\u5C3E']) + 1;\n return JSON.parse(JSON.stringify(a.slice(start, last)));\n }\n return undefined;\n }\n },\n '\u53C2\u7167': {\n type: 'func',\n josi: [['\u304B\u3089', '\u306E'], ['\u3092']],\n pure: true,\n fn: function (a, i, sys) {\n // \u6587\u5B57\u5217\u306E\u3068\u304D\n if (typeof a === 'string') {\n if (typeof i === 'number') {\n return a.charAt(i);\n }\n // \u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u3068\u304D\n if (typeof i === 'object' && typeof i['\u5148\u982D'] === 'number') {\n const start = i['\u5148\u982D'];\n const last = Number(i['\u672B\u5C3E']) + 1;\n return a.substring(start, last);\n }\n throw new Error(`\u300E\u53C2\u7167\u300F\u3067\u6587\u5B57\u5217\u578B\u306E\u7BC4\u56F2\u6307\u5B9A(${JSON.stringify(i)})\u304C\u4E0D\u6B63\u3067\u3059\u3002`);\n }\n // \u914D\u5217\u578B\u306E\u3068\u304D\n if (Array.isArray(a)) {\n if (typeof i === 'number') {\n return a[i];\n }\n // \u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u3068\u304D\n if (typeof i === 'object' && typeof i['\u5148\u982D'] === 'number') {\n const start = i['\u5148\u982D'];\n const last = Number(i['\u672B\u5C3E']) + 1;\n return a.slice(start, last);\n }\n }\n // \u8F9E\u66F8\u578B\u306E\u3068\u304D\n if (typeof a === 'object') {\n return a[i];\n }\n throw new Error('\u300E\u53C2\u7167\u300F\u3067\u6587\u5B57\u5217/\u914D\u5217/\u8F9E\u66F8\u578B\u4EE5\u5916\u306E\u5024\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u914D\u5217\u53C2\u7167': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (a, i, sys) {\n return sys.__exec('\u53C2\u7167', [a, i, sys]);\n }\n },\n '\u914D\u5217\u8DB3': {\n type: 'func',\n josi: [['\u306B', '\u3078', '\u3068'], ['\u3092']],\n pure: true,\n fn: function (a, b) {\n if (a instanceof Array) {\n return a.concat(b);\n }\n return JSON.parse(JSON.stringify(a));\n }\n },\n '\u914D\u5217\u6700\u5927\u5024': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return a.reduce((x, y) => Math.max(x, y));\n }\n },\n '\u914D\u5217\u6700\u5C0F\u5024': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return a.reduce((x, y) => Math.min(x, y));\n }\n },\n '\u914D\u5217\u5408\u8A08': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n if (a instanceof Array) {\n let v = 0;\n a.forEach((n) => {\n const nn = parseFloat(n);\n if (isNaN(nn)) {\n return;\n }\n v += nn;\n });\n return v;\n }\n throw new Error('\u300E\u914D\u5217\u5408\u8A08\u300F\u3067\u914D\u5217\u5909\u6570\u4EE5\u5916\u306E\u5024\u304C\u6307\u5B9A\u3055\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u914D\u5217\u5165\u66FF': {\n type: 'func',\n josi: [['\u306E'], ['\u3068'], ['\u3092']],\n pure: true,\n fn: function (a, i, j) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u914D\u5217\u5165\u66FF\u300F\u306E\u7B2C1\u5F15\u6570\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002');\n }\n const tmp = a[i];\n a[i] = a[j];\n a[j] = tmp;\n return a;\n }\n },\n '\u914D\u5217\u9023\u756A\u4F5C\u6210': {\n type: 'func',\n josi: [['\u304B\u3089'], ['\u307E\u3067\u306E', '\u307E\u3067', '\u306E']],\n pure: true,\n fn: function (a, b) {\n const result = [];\n for (let i = a; i <= b; i++) {\n result.push(i);\n }\n return result;\n }\n },\n '\u914D\u5217\u8981\u7D20\u4F5C\u6210': {\n type: 'func',\n josi: [['\u3092'], ['\u3060\u3051', '\u3067']],\n pure: true,\n fn: function (a, b) {\n // value \u304C\u914D\u5217\u3084\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067\u3082\u6DF1\u304F\u30B3\u30D4\u30FC\u3059\u308B\u30D8\u30EB\u30D1\u30FC\n const cloneValue = (v) => {\n if (Array.isArray(v)) {\n return (v).map(item => cloneValue(item));\n }\n if (v instanceof Date) {\n return new Date(v.getTime());\n }\n if (typeof v === 'object' && v !== null) {\n return JSON.parse(JSON.stringify(v));\n }\n return v;\n };\n // \u518D\u5E30\u7684\u306B\u914D\u5217\u3092\u751F\u6210\u3059\u308B\u95A2\u6570\n const full = function (value, shape) {\n // 1\u6B21\u5143\uFF1Ashape \u304C\u6570\u5024\n if (!Array.isArray(shape)) {\n return Array.from({ length: shape }, () => cloneValue(value));\n }\n // 1\u6B21\u5143\uFF1Ashape \u304C\u6570\u5024\n if (Array.isArray(shape) && shape.length === 1) {\n return Array.from({ length: shape[0] }, () => cloneValue(value));\n }\n // \u591A\u6B21\u5143\uFF1Ashape \u304C\u914D\u5217\n const [first, ...rest] = shape;\n return Array.from({ length: first }, () => full(cloneValue(value), rest));\n };\n return full(a, b);\n }\n },\n '\u914D\u5217\u95A2\u6570\u9069\u7528': {\n type: 'func',\n josi: [['\u3092'], ['\u3078', '\u306B']],\n pure: true,\n fn: function (f, a, sys) {\n let ufunc = f;\n if (typeof f === 'string') {\n ufunc = sys.__findFunc(f, '\u914D\u5217\u95A2\u6570\u9069\u7528');\n }\n const result = [];\n for (const e of a) {\n result.push(ufunc(e));\n }\n return result;\n }\n },\n '\u914D\u5217\u30DE\u30C3\u30D7': {\n type: 'func',\n josi: [['\u3092'], ['\u3078', '\u306B']],\n pure: true,\n fn: function (f, a, sys) {\n return sys.__exec('\u914D\u5217\u95A2\u6570\u9069\u7528', [f, a, sys]);\n }\n },\n '\u914D\u5217\u30D5\u30A3\u30EB\u30BF': {\n type: 'func',\n josi: [['\u3067', '\u306E'], ['\u3092', '\u306B\u3064\u3044\u3066']],\n pure: true,\n fn: function (f, a, sys) {\n let ufunc = f;\n if (typeof f === 'string') {\n ufunc = sys.__findFunc(f, '\u914D\u5217\u30D5\u30A3\u30EB\u30BF');\n }\n const result = [];\n for (const e of a) {\n if (ufunc(e)) {\n result.push(e);\n }\n }\n return result;\n }\n },\n // @\u4E8C\u6B21\u5143\u914D\u5217\u51E6\u7406\n '\u8868\u30BD\u30FC\u30C8': {\n type: 'func',\n josi: [['\u306E'], ['\u3092']],\n pure: true,\n fn: function (a, no) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u30BD\u30FC\u30C8\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n a.sort((n, m) => {\n const ns = n[no];\n const ms = m[no];\n if (ns === ms) {\n return 0;\n }\n else if (ns < ms) {\n return -1;\n }\n else {\n return 1;\n }\n });\n return a;\n }\n },\n '\u8868\u6570\u5024\u30BD\u30FC\u30C8': {\n type: 'func',\n josi: [['\u306E'], ['\u3092']],\n pure: true,\n fn: function (a, no) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u6570\u5024\u30BD\u30FC\u30C8\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n a.sort((n, m) => {\n const ns = n[no];\n const ms = m[no];\n return ns - ms;\n });\n return a;\n }\n },\n '\u8868\u30D4\u30C3\u30AF\u30A2\u30C3\u30D7': {\n type: 'func',\n josi: [['\u306E'], ['\u304B\u3089'], ['\u3092', '\u3067']],\n pure: true,\n fn: function (a, no, s) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u30D4\u30C3\u30AF\u30A2\u30C3\u30D7\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n return a.filter((row) => String(row[no]).indexOf(s) >= 0);\n }\n },\n '\u8868\u5B8C\u5168\u4E00\u81F4\u30D4\u30C3\u30AF\u30A2\u30C3\u30D7': {\n type: 'func',\n josi: [['\u306E'], ['\u304B\u3089'], ['\u3092', '\u3067']],\n pure: true,\n fn: function (a, no, s) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u5B8C\u5168\u30D4\u30C3\u30AF\u30A2\u30C3\u30D7\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n return a.filter((row) => row[no] === s);\n }\n },\n '\u8868\u691C\u7D22': {\n type: 'func',\n josi: [['\u306E'], ['\u3067', '\u306B'], ['\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (a, col, row, s) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u691C\u7D22\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n for (let i = row; i < a.length; i++) {\n if (a[i][col] === s) {\n return i;\n }\n }\n return -1;\n }\n },\n '\u8868\u5217\u6570': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u5217\u6570\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n let cols = 1;\n for (let i = 0; i < a.length; i++) {\n if (a[i].length > cols) {\n cols = a[i].length;\n }\n }\n return cols;\n }\n },\n '\u8868\u884C\u6570': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u884C\u6570\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n return a.length;\n }\n },\n '\u8868\u884C\u5217\u4EA4\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (a, sys) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u884C\u5217\u4EA4\u63DB\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n const cols = sys.__exec('\u8868\u5217\u6570', [a]);\n const rows = a.length;\n const res = [];\n for (let r = 0; r < cols; r++) {\n const row = [];\n res.push(row);\n for (let c = 0; c < rows; c++) {\n row[c] = (a[c][r] !== undefined) ? a[c][r] : '';\n }\n }\n return res;\n }\n },\n '\u8868\u53F3\u56DE\u8EE2': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (a, sys) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u53F3\u56DE\u8EE2\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n const cols = sys.__exec('\u8868\u5217\u6570', [a]);\n const rows = a.length;\n const res = [];\n for (let r = 0; r < cols; r++) {\n const row = [];\n res.push(row);\n for (let c = 0; c < rows; c++) {\n row[c] = a[rows - c - 1][r];\n }\n }\n return res;\n }\n },\n '\u8868\u91CD\u8907\u524A\u9664': {\n type: 'func',\n josi: [['\u306E'], ['\u3092', '\u3067']],\n pure: true,\n fn: function (a, i) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u91CD\u8907\u524A\u9664\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n const res = [];\n const keys = {};\n for (let n = 0; n < a.length; n++) {\n const k = a[n][i];\n if (undefined === keys[k]) {\n keys[k] = true;\n res.push(a[n]);\n }\n }\n return res;\n }\n },\n '\u8868\u5217\u53D6\u5F97': {\n type: 'func',\n josi: [['\u306E'], ['\u3092']],\n pure: true,\n fn: function (a, i) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u5217\u53D6\u5F97\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n const res = a.map(row => row[i]);\n return res;\n }\n },\n '\u8868\u5217\u633F\u5165': {\n type: 'func',\n josi: [['\u306E'], ['\u306B', '\u3078'], ['\u3092']],\n pure: true,\n fn: function (a, i, s) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u5217\u633F\u5165\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n const res = [];\n a.forEach((row, idx) => {\n let nr = [];\n if (i > 0) {\n nr = nr.concat(row.slice(0, i));\n }\n nr.push(s[idx]);\n nr = nr.concat(row.slice(i));\n res.push(nr);\n });\n return res;\n }\n },\n '\u8868\u5217\u524A\u9664': {\n type: 'func',\n josi: [['\u306E'], ['\u3092']],\n pure: true,\n fn: function (a, i) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u5217\u524A\u9664\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n const res = [];\n a.forEach((row) => {\n const nr = row.slice(0);\n nr.splice(i, 1);\n res.push(nr);\n });\n return res;\n }\n },\n '\u8868\u5217\u5408\u8A08': {\n type: 'func',\n josi: [['\u306E'], ['\u3092', '\u3067']],\n pure: true,\n fn: function (a, i) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u5217\u5408\u8A08\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n let sum = 0;\n a.forEach((row) => { sum += row[i]; });\n return sum;\n }\n },\n '\u8868\u66D6\u6627\u691C\u7D22': {\n type: 'func',\n josi: [['\u306E'], ['\u304B\u3089'], ['\u3067'], ['\u3092']],\n pure: true,\n fn: function (a, row, col, s) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u66D6\u6627\u691C\u7D22\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n const re = new RegExp(s);\n for (let i = row; i < a.length; i++) {\n const line = a[i];\n if (re.test(line[col])) {\n return i;\n }\n }\n return -1;\n }\n },\n '\u8868\u6B63\u898F\u8868\u73FE\u30D4\u30C3\u30AF\u30A2\u30C3\u30D7': {\n type: 'func',\n josi: [['\u306E', '\u3067'], ['\u304B\u3089'], ['\u3092']],\n pure: true,\n fn: function (a, col, s) {\n if (!(a instanceof Array)) {\n throw new Error('\u300E\u8868\u6B63\u898F\u8868\u73FE\u30D4\u30C3\u30AF\u30A2\u30C3\u30D7\u300F\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n const re = new RegExp(s);\n const res = [];\n for (let i = 0; i < a.length; i++) {\n const row = a[i];\n if (re.test(row[col])) {\n res.push(row.slice(0));\n }\n }\n return res;\n }\n },\n // @\u8F9E\u66F8\u578B\u5909\u6570\u306E\u64CD\u4F5C\n '\u8F9E\u66F8\u30AD\u30FC\u5217\u6319': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n const keys = [];\n if (a instanceof Object) { // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u30AD\u30FC\u3092\u8FD4\u3059\n for (const key in a) {\n keys.push(key);\n }\n return keys;\n }\n if (a instanceof Array) { // \u914D\u5217\u306A\u3089\u6570\u5B57\u3092\u8FD4\u3059\n for (let i = 0; i < a.length; i++) {\n keys.push(i);\n }\n return keys;\n }\n throw new Error('\u300E\u8F9E\u66F8\u30AD\u30FC\u5217\u6319\u300F\u3067\u30CF\u30C3\u30B7\u30E5\u4EE5\u5916\u304C\u4E0E\u3048\u3089\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u8F9E\u66F8\u30AD\u30FC\u524A\u9664': {\n type: 'func',\n josi: [['\u304B\u3089', '\u306E'], ['\u3092']],\n pure: true,\n fn: function (a, key) {\n if (a instanceof Object) { // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u30AD\u30FC\u3092\u8FD4\u3059\n if (key in a) {\n delete a[key];\n }\n return a;\n }\n throw new Error('\u300E\u8F9E\u66F8\u30AD\u30FC\u524A\u9664\u300F\u3067\u30CF\u30C3\u30B7\u30E5\u4EE5\u5916\u304C\u4E0E\u3048\u3089\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u8F9E\u66F8\u30AD\u30FC\u5B58\u5728': {\n type: 'func',\n josi: [['\u306E', '\u306B'], ['\u304C']],\n pure: true,\n fn: function (a, key) {\n return key in a;\n }\n },\n // @\u30CF\u30C3\u30B7\u30E5\n '\u30CF\u30C3\u30B7\u30E5\u30AD\u30FC\u5217\u6319': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a, sys) {\n return sys.__exec('\u8F9E\u66F8\u30AD\u30FC\u5217\u6319', [a, sys]);\n }\n },\n '\u30CF\u30C3\u30B7\u30E5\u5185\u5BB9\u5217\u6319': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n const body = [];\n if (a instanceof Object) { // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u30AD\u30FC\u3092\u8FD4\u3059\n for (const key in a) {\n body.push(a[key]);\n }\n return body;\n }\n throw new Error('\u300E\u30CF\u30C3\u30B7\u30E5\u5185\u5BB9\u5217\u6319\u300F\u3067\u30CF\u30C3\u30B7\u30E5\u4EE5\u5916\u304C\u4E0E\u3048\u3089\u308C\u307E\u3057\u305F\u3002');\n }\n },\n '\u30CF\u30C3\u30B7\u30E5\u30AD\u30FC\u524A\u9664': {\n type: 'func',\n josi: [['\u304B\u3089', '\u306E'], ['\u3092']],\n pure: true,\n fn: function (a, key, sys) {\n return sys.__exec('\u8F9E\u66F8\u30AD\u30FC\u524A\u9664', [a, key, sys]);\n }\n },\n '\u30CF\u30C3\u30B7\u30E5\u30AD\u30FC\u5B58\u5728': {\n type: 'func',\n josi: [['\u306E', '\u306B'], ['\u304C']],\n pure: true,\n fn: function (a, key) {\n return key in a;\n }\n },\n // @\u30BF\u30A4\u30DE\u30FC\n '\u79D2\u5F85': {\n type: 'func',\n josi: [['']],\n pure: true,\n asyncFn: true,\n fn: function (n, sys) {\n return new Promise((resolve, reject) => {\n try {\n // \u30BF\u30A4\u30DE\u30FC\u3092\u4ED5\u639B\u3051\u308B\n const timerId = setTimeout(() => {\n // \u30BF\u30A4\u30DE\u30FC\u4F7F\u7528\u4E2D\u30EA\u30B9\u30C8\u306B\u8FFD\u52A0\u3057\u305FID\u3092\u524A\u9664\n const i = sys.__timeout.indexOf(timerId);\n if (i >= 0) {\n sys.__timeout.splice(i, 1);\n }\n // Promise\u3092\u7D42\u4E86\n resolve();\n }, parseFloat(n) * 1000);\n // \u30BF\u30A4\u30DE\u30FC\u4F7F\u7528\u4E2D\u30EA\u30B9\u30C8\u306B\u8FFD\u52A0\n sys.__timeout.push(timerId);\n }\n catch (err) {\n reject(err);\n }\n });\n },\n return_none: true\n },\n '\u79D2\u5F85\u6A5F': {\n type: 'func',\n josi: [['']],\n pure: true,\n asyncFn: true,\n fn: async function (n, sys) {\n const p = sys.__exec('\u79D2\u5F85', [n, sys]);\n return await p;\n },\n return_none: true\n },\n '\u79D2\u9010\u6B21\u5F85\u6A5F': {\n type: 'func',\n josi: [['']],\n pure: true,\n asyncFn: true,\n fn: async function (n, sys) {\n const p = sys.__exec('\u79D2\u5F85', [n, sys]);\n return await p;\n },\n return_none: true\n },\n '\u79D2\u5F8C': {\n type: 'func',\n josi: [['\u3092'], ['']],\n pure: true,\n fn: function (f, n, sys) {\n // \u6587\u5B57\u5217\u3067\u6307\u5B9A\u3055\u308C\u305F\u95A2\u6570\u3092\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306B\u5909\u63DB\n if (typeof f === 'string') {\n f = sys.__findFunc(f, '\u79D2\u5F8C');\n }\n // 1\u56DE\u9650\u308A\u306E\u30BF\u30A4\u30DE\u30FC\u3092\u30BB\u30C3\u30C8\n const timerId = setTimeout(() => {\n // \u4F7F\u7528\u4E2D\u30EA\u30B9\u30C8\u306B\u8FFD\u52A0\u3057\u305FID\u3092\u524A\u9664\n const i = sys.__timeout.indexOf(timerId);\n if (i >= 0) {\n sys.__timeout.splice(i, 1);\n }\n try {\n f(timerId, sys);\n }\n catch (e) {\n let err = e;\n if (!(e instanceof NakoRuntimeError)) {\n err = new NakoRuntimeError(e, sys.__getSysVar('__line'));\n }\n sys.logger.error(err);\n }\n }, parseFloat(n) * 1000);\n sys.__timeout.unshift(timerId);\n sys.__setSysVar('\u5BFE\u8C61', timerId);\n return timerId;\n }\n },\n '\u79D2\u6BCE': {\n type: 'func',\n josi: [['\u3092'], ['']],\n pure: false,\n fn: function (f, n, sys) {\n // \u6587\u5B57\u5217\u3067\u6307\u5B9A\u3055\u308C\u305F\u95A2\u6570\u3092\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306B\u5909\u63DB\n if (typeof f === 'string') {\n f = sys.__findFunc(f, '\u79D2\u6BCE');\n }\n // \u30BF\u30A4\u30DE\u30FC\u3092\u30BB\u30C3\u30C8\n const timerId = setInterval(() => {\n f(timerId, sys);\n }, parseFloat(n) * 1000);\n // \u30BF\u30A4\u30DE\u30FCID\u3092\u8FFD\u52A0\n sys.__interval.unshift(timerId);\n sys.__setSysVar('\u5BFE\u8C61', timerId);\n return timerId;\n }\n },\n '\u79D2\u30BF\u30A4\u30DE\u30FC\u958B\u59CB\u6642': {\n type: 'func',\n josi: [['\u3092'], ['']],\n pure: false,\n fn: function (f, n, sys) {\n return sys.__exec('\u79D2\u6BCE', [f, n, sys]);\n }\n },\n '\u30BF\u30A4\u30DE\u30FC\u505C\u6B62': {\n type: 'func',\n josi: [['\u306E', '\u3067']],\n pure: true,\n fn: function (timerId, sys) {\n const i = sys.__interval.indexOf(timerId);\n if (i >= 0) {\n sys.__interval.splice(i, 1);\n clearInterval(timerId);\n return true;\n }\n const j = sys.__timeout.indexOf(timerId);\n if (j >= 0) {\n sys.__timeout.splice(j, 1);\n clearTimeout(timerId);\n return true;\n }\n return false;\n },\n return_none: false\n },\n '\u5168\u30BF\u30A4\u30DE\u30FC\u505C\u6B62': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n // clearInterval\n for (let i = 0; i < sys.__interval.length; i++) {\n const timerId = sys.__interval[i];\n clearInterval(timerId);\n }\n sys.__interval = [];\n // clearTimeout\n for (let i = 0; i < sys.__timeout.length; i++) {\n const timerId = sys.__timeout[i];\n clearTimeout(timerId);\n }\n sys.__timeout = [];\n },\n return_none: true\n },\n // @\u65E5\u6642\u51E6\u7406(\u7C21\u6613)\n '\u5143\u53F7\u30C7\u30FC\u30BF': { type: 'const', value: [{ '\u5143\u53F7': '\u4EE4\u548C', '\u6539\u5143\u65E5': '2019/05/01' }, { '\u5143\u53F7': '\u5E73\u6210', '\u6539\u5143\u65E5': '1989/01/08' }, { '\u5143\u53F7': '\u662D\u548C', '\u6539\u5143\u65E5': '1926/12/25' }, { '\u5143\u53F7': '\u5927\u6B63', '\u6539\u5143\u65E5': '1912/07/30' }, { '\u5143\u53F7': '\u660E\u6CBB', '\u6539\u5143\u65E5': '1868/10/23' }] }, // @\u3052\u3093\u3054\u3046\u3067\u30FC\u305F\n '\u4ECA': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n const z2 = (n) => {\n const ns = '00' + String(n);\n return ns.substring(ns.length - 2, ns.length);\n };\n const t = new Date();\n return z2(t.getHours()) + ':' + z2(t.getMinutes()) + ':' + z2(t.getSeconds());\n }\n },\n '\u30B7\u30B9\u30C6\u30E0\u6642\u9593': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n const now = new Date();\n return Math.floor(now.getTime() / 1000);\n }\n },\n '\u30B7\u30B9\u30C6\u30E0\u6642\u9593\u30DF\u30EA\u79D2': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n const now = new Date();\n return now.getTime();\n }\n },\n '\u4ECA\u65E5': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n return sys.__formatDate(new Date());\n }\n },\n '\u660E\u65E5': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n const t = Date.now() + (24 * 60 * 60 * 1000);\n return sys.__formatDate(new Date(t));\n }\n },\n '\u6628\u65E5': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n const t = Date.now() - (24 * 60 * 60 * 1000);\n return sys.__formatDate(new Date(t));\n }\n },\n '\u4ECA\u5E74': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n return (new Date()).getFullYear();\n }\n },\n '\u6765\u5E74': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n return (new Date()).getFullYear() + 1;\n }\n },\n '\u53BB\u5E74': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n return (new Date()).getFullYear() - 1;\n }\n },\n '\u4ECA\u6708': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n return (new Date()).getMonth() + 1;\n }\n },\n '\u6765\u6708': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n return (new Date()).getMonth() + 2;\n }\n },\n '\u5148\u6708': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n return (new Date()).getMonth();\n }\n },\n '\u66DC\u65E5': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (s, sys) {\n const d = sys.__str2date(s);\n return '\u65E5\u6708\u706B\u6C34\u6728\u91D1\u571F'.charAt(d.getDay() % 7);\n }\n },\n '\u66DC\u65E5\u756A\u53F7\u53D6\u5F97': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (s) {\n const a = s.split('/');\n const t = new Date(a[0], a[1] - 1, a[2]);\n return t.getDay();\n }\n },\n 'UNIXTIME\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092', '\u304B\u3089']],\n pure: true,\n fn: function (s, sys) {\n const d = sys.__str2date(s);\n return d.getTime() / 1000;\n }\n },\n 'UNIX\u6642\u9593\u5909\u63DB': {\n type: 'func',\n josi: [['\u306E', '\u3092', '\u304B\u3089']],\n pure: true,\n fn: function (s, sys) {\n const d = sys.__str2date(s);\n return d.getTime() / 1000;\n }\n },\n '\u65E5\u6642\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092', '\u304B\u3089']],\n pure: true,\n fn: function (tm, sys) {\n const t = tm * 1000;\n return sys.__formatDateTime(new Date(t), '2022/01/01 00:00:00');\n }\n },\n '\u65E5\u6642\u66F8\u5F0F\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (tm, fmt, sys) {\n const t = sys.__str2date(tm);\n fmt = fmt.replace(/(YYYY|ccc|WWW|MMM|YY|MM|DD|HH|mm|ss|[MDHmsW])/g, (m) => {\n switch (m) {\n case 'YYYY': return t.getFullYear();\n case 'YY': return (String(t.getFullYear())).substring(2);\n case 'MM': return sys.__zero2(String(t.getMonth() + 1));\n case 'DD': return sys.__zero2(t.getDate());\n case 'M': return (t.getMonth() + 1);\n case 'D': return (t.getDate());\n case 'HH': return sys.__zero2(t.getHours());\n case 'mm': return sys.__zero2(t.getMinutes());\n case 'ss': return sys.__zero2(t.getSeconds());\n case 'ccc': return sys.__zero(t.getMilliseconds(), 3);\n case 'H': return (t.getHours());\n case 'm': return (t.getMinutes());\n case 's': return (t.getSeconds());\n case 'W': return '\u65E5\u6708\u706B\u6C34\u6728\u91D1\u571F'.charAt(t.getDay() % 7);\n case 'WWW': return ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][t.getDay() % 7];\n case 'MMM': return ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][t.getMonth()];\n }\n return m;\n });\n return fmt;\n }\n },\n '\u548C\u66A6\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (s, sys) {\n const d = sys.__str2date(s);\n const t = d.getTime();\n for (const era of sys.__getSysVar('\u5143\u53F7\u30C7\u30FC\u30BF')) {\n const gengo = String(era['\u5143\u53F7']);\n const d2 = sys.__str2date(era['\u6539\u5143\u65E5']);\n const t2 = d2.getTime();\n if (t2 <= t) {\n let y = (d.getFullYear() - d2.getFullYear()) + 1;\n if (y === 1) {\n y = '\u5143';\n }\n return gengo + String(y) + '\u5E74' + sys.__zero2(d.getMonth() + 1) + '\u6708' + sys.__zero2(d.getDate()) + '\u65E5';\n }\n }\n throw new Error('\u300E\u548C\u66A6\u5909\u63DB\u300F\u306F\u660E\u793A\u4EE5\u524D\u306E\u65E5\u4ED8\u306B\u306F\u5BFE\u5FDC\u3057\u3066\u3044\u307E\u305B\u3093\u3002');\n }\n },\n '\u5E74\u6570\u5DEE': {\n type: 'func',\n josi: [['\u3068', '\u304B\u3089'], ['\u306E', '\u307E\u3067\u306E']],\n pure: true,\n fn: function (a, b, sys) {\n const t1 = sys.__str2date(a);\n const t2 = sys.__str2date(b);\n return (t2.getFullYear() - t1.getFullYear());\n }\n },\n '\u6708\u6570\u5DEE': {\n type: 'func',\n josi: [['\u3068', '\u304B\u3089'], ['\u306E', '\u307E\u3067\u306E']],\n pure: true,\n fn: function (a, b, sys) {\n const t1 = sys.__str2date(a);\n const t2 = sys.__str2date(b);\n return (t2.getFullYear() * 12 + Number(t2.getMonth())) -\n (t1.getFullYear() * 12 + Number(t1.getMonth()));\n }\n },\n '\u65E5\u6570\u5DEE': {\n type: 'func',\n josi: [['\u3068', '\u304B\u3089'], ['\u306E', '\u307E\u3067\u306E']],\n pure: true,\n fn: function (a, b, sys) {\n const t1 = Math.ceil(sys.__str2date(a).getTime() / 1000);\n const t2 = Math.ceil(sys.__str2date(b).getTime() / 1000);\n const days = Math.ceil((t2 - t1) / (60 * 60 * 24));\n return days;\n }\n },\n '\u6642\u9593\u5DEE': {\n type: 'func',\n josi: [['\u3068', '\u304B\u3089'], ['\u306E', '\u307E\u3067\u306E']],\n pure: true,\n fn: function (a, b, sys) {\n const t1 = Math.ceil(sys.__str2date(a).getTime() / 1000);\n const t2 = Math.ceil(sys.__str2date(b).getTime() / 1000);\n const hours = Math.ceil((t2 - t1) / (60 * 60));\n return hours;\n }\n },\n '\u5206\u5DEE': {\n type: 'func',\n josi: [['\u3068', '\u304B\u3089'], ['\u306E', '\u307E\u3067\u306E']],\n pure: true,\n fn: function (a, b, sys) {\n const t1 = Math.ceil(sys.__str2date(a).getTime() / 1000);\n const t2 = Math.ceil(sys.__str2date(b).getTime() / 1000);\n const min = Math.ceil((t2 - t1) / (60));\n return min;\n }\n },\n '\u79D2\u5DEE': {\n type: 'func',\n josi: [['\u3068', '\u304B\u3089'], ['\u306E', '\u307E\u3067\u306E']],\n pure: true,\n fn: function (a, b, sys) {\n const t1 = Math.ceil(sys.__str2date(a).getTime() / 1000);\n const t2 = Math.ceil(sys.__str2date(b).getTime() / 1000);\n const sec = Math.ceil((t2 - t1));\n return sec;\n }\n },\n '\u65E5\u6642\u5DEE': {\n type: 'func',\n josi: [['\u3068', '\u304B\u3089'], ['\u306E', '\u307E\u3067\u306E'], ['\u306B\u3088\u308B']],\n pure: true,\n fn: function (a, b, unit, sys) {\n switch (unit) {\n case '\u5E74': return sys.__exec('\u5E74\u6570\u5DEE', [a, b, sys]);\n case '\u6708': return sys.__exec('\u6708\u6570\u5DEE', [a, b, sys]);\n case '\u65E5': return sys.__exec('\u65E5\u6570\u5DEE', [a, b, sys]);\n case '\u6642\u9593': return sys.__exec('\u6642\u9593\u5DEE', [a, b, sys]);\n case '\u5206': return sys.__exec('\u5206\u5DEE', [a, b, sys]);\n case '\u79D2': return sys.__exec('\u79D2\u5DEE', [a, b, sys]);\n }\n throw new Error('\u300E\u65E5\u6642\u5DEE\u300F\u3067\u4E0D\u660E\u306A\u5358\u4F4D\u3067\u3059\u3002');\n }\n },\n '\u6642\u9593\u52A0\u7B97': {\n type: 'func',\n josi: [['\u306B'], ['\u3092']],\n pure: true,\n fn: function (s, a, sys) {\n const op = a.charAt(0);\n if (op === '-' || op === '+') {\n a = a.substring(1);\n }\n const d = sys.__str2date(s);\n const aa = (a + ':0:0').split(':');\n let sec = parseInt(aa[0]) * 60 * 60 +\n parseInt(aa[1]) * 60 +\n parseInt(aa[2]);\n if (op === '-') {\n sec *= -1;\n }\n const rd = new Date(Number(d.getTime()) + (sec * 1000));\n return sys.__formatDateTime(rd, s);\n }\n },\n '\u65E5\u4ED8\u52A0\u7B97': {\n type: 'func',\n josi: [['\u306B'], ['\u3092']],\n pure: true,\n fn: function (s, a, sys) {\n let op = 1;\n const opc = a.charAt(0);\n if (opc === '-' || opc === '+') {\n a = a.substring(1);\n if (opc === '-') {\n op *= -1;\n }\n }\n const d = sys.__str2date(s);\n const aa = (a + '/0/0').split('/');\n const addY = parseInt(aa[0]) * op;\n const addM = parseInt(aa[1]) * op;\n const addD = parseInt(aa[2]) * op;\n d.setFullYear(Number(d.getFullYear()) + addY);\n d.setMonth(Number(d.getMonth()) + addM);\n d.setDate(Number(d.getDate()) + addD);\n return sys.__formatDateTime(d, s);\n }\n },\n '\u65E5\u6642\u52A0\u7B97': {\n type: 'func',\n josi: [['\u306B'], ['\u3092']],\n pure: true,\n fn: function (s, a, sys) {\n const r = ('' + a).match(/([+|-]?)(\\d+)(\u5E74|\u30F6\u6708|\u65E5|\u9031\u9593|\u6642\u9593|\u5206|\u79D2)$/);\n if (!r) {\n throw new Error('\u300E\u65E5\u4ED8\u52A0\u7B97\u300F\u306F\u300E(+\uFF5C-)1(\u5E74|\u30F6\u6708|\u65E5|\u6642\u9593|\u5206|\u79D2)\u300F\u306E\u66F8\u5F0F\u3067\u6307\u5B9A\u3057\u307E\u3059\u3002');\n }\n switch (r[3]) {\n case '\u5E74': return sys.__exec('\u65E5\u4ED8\u52A0\u7B97', [s, `${r[1]}${r[2]}/0/0`, sys]);\n case '\u30F6\u6708': return sys.__exec('\u65E5\u4ED8\u52A0\u7B97', [s, `${r[1]}0/${r[2]}/0`, sys]);\n case '\u9031\u9593': return sys.__exec('\u65E5\u4ED8\u52A0\u7B97', [s, `${r[1]}0/0/${parseInt(r[2]) * 7}`, sys]);\n case '\u65E5': return sys.__exec('\u65E5\u4ED8\u52A0\u7B97', [s, `${r[1]}0/0/${r[2]}`, sys]);\n case '\u6642\u9593': return sys.__exec('\u6642\u9593\u52A0\u7B97', [s, `${r[1]}${r[2]}:0:0`, sys]);\n case '\u5206': return sys.__exec('\u6642\u9593\u52A0\u7B97', [s, `${r[1]}0:${r[2]}:0`, sys]);\n case '\u79D2': return sys.__exec('\u6642\u9593\u52A0\u7B97', [s, `${r[1]}0:0:${r[2]}`, sys]);\n }\n }\n },\n '\u6642\u9593\u30DF\u30EA\u79D2\u53D6\u5F97': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n if (performance && performance.now) {\n return performance.now();\n }\n else if (Date.now) {\n return Date.now();\n }\n else {\n const now = new Date();\n return now.getTime();\n }\n }\n },\n // @\u30C7\u30D0\u30C3\u30B0\u652F\u63F4\n '\u30C7\u30D0\u30C3\u30B0\u8868\u793A': {\n type: 'func',\n josi: [['\u3068', '\u3092', '\u306E']],\n pure: true,\n fn: function (s, sys) {\n // \u884C\u756A\u53F7\u306E\u60C5\u5831\u3092\u5F97\u308B\n const lineInfo = String(sys.__getSysVar('__line', 0)) + '::';\n const a = lineInfo.split(':', 2);\n const no = parseInt(String(a[0]).replace('l', '')) + 1;\n const fname = a[1];\n // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306A\u3089JSON\u6587\u5B57\u5217\u306B\u5909\u63DB\n if (typeof s === 'object') {\n s = JSON.stringify(s);\n }\n s = `${fname}(${no}): ${s}`;\n sys.__exec('\u8868\u793A', [s, sys]);\n },\n return_none: true\n },\n '\u30CF\u30C6\u30CA\u95A2\u6570\u8A2D\u5B9A': {\n type: 'func',\n josi: [['\u3092', '\u306E']],\n pure: true,\n fn: function (s, sys) {\n if (typeof s === 'function') {\n sys.__hatena = s;\n return;\n }\n if (typeof s === 'string') {\n sys.__hatena = sys.__getSysVar(s, '\u30C7\u30D0\u30C3\u30B0\u8868\u793A');\n return;\n }\n if (s instanceof Array) {\n const fa = s.map((fstr) => {\n if (fstr.substring(0, 3) === 'JS:') {\n const code = fstr.substring(3);\n return sys.__evalJS(code, sys);\n }\n else {\n return sys.__getSysVar(fstr, '\u30C7\u30D0\u30C3\u30B0\u8868\u793A');\n }\n });\n sys.__hatena = (p, sys) => {\n let param = p;\n for (const f of fa) {\n param = f(param, sys);\n }\n };\n return;\n }\n sys.__hatena = sys.__getSysVar('\u30C7\u30D0\u30C3\u30B0\u8868\u793A');\n },\n return_none: true\n },\n '\u30CF\u30C6\u30CA\u95A2\u6570\u5B9F\u884C': {\n type: 'func',\n josi: [['\u306E', '\u3092', '\u3068']],\n pure: true,\n fn: function (s, sys) {\n sys.__hatena(s, sys);\n },\n return_none: true\n },\n '\u30A8\u30E9\u30FC\u767A\u751F': {\n type: 'func',\n josi: [['\u306E', '\u3067']],\n pure: true,\n fn: function (s) {\n throw new Error(s);\n },\n return_none: true\n },\n '__DEBUG': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n sys.isDebug = true;\n console.log(sys);\n }\n },\n '__DEBUG\u5F37\u5236\u5F85\u6A5F': { type: 'const', value: 0 }, // @__DEBUG\u304D\u3087\u3046\u305B\u3044\u305F\u3044\u304D\n '__DEBUG\u30D6\u30EC\u30A4\u30AF\u30DD\u30A4\u30F3\u30C8\u4E00\u89A7': { type: 'const', value: [] }, // @__DEBUG\u3076\u308C\u3044\u304F\u307D\u3044\u3093\u3068\u3044\u3061\u3089\u3093\n '__DEBUG\u5F85\u6A5F\u30D5\u30E9\u30B0': { type: 'const', value: 0 }, // @__DEBUG\u305F\u3044\u304D\u3075\u3089\u3050\n '__DEBUG_BP_WAIT': {\n type: 'func',\n josi: [['\u3067']],\n pure: true,\n asyncFn: true,\n fn: function (curLine, sys) {\n return new Promise((resolve) => {\n const breakpoints = sys.__getSysVar('__DEBUG\u30D6\u30EC\u30A4\u30AF\u30DD\u30A4\u30F3\u30C8\u4E00\u89A7');\n const forceLine = sys.__getSysVar('__DEBUG\u5F37\u5236\u5F85\u6A5F');\n sys.__setSysVar('__DEBUG\u5F37\u5236\u5F85\u6A5F', 0);\n // \u30D6\u30EC\u30A4\u30AF\u30DD\u30A4\u30F3\u30C8 or __DEBUG\u5F37\u5236\u5F85\u6A5F \u304C\u6307\u5B9A\u3055\u308C\u305F\u304B\uFF1F\n if (breakpoints.indexOf(curLine) >= 0 || forceLine) {\n if (sys.__getSysVar('\u30D7\u30E9\u30B0\u30A4\u30F3\u540D') !== '\u30E1\u30A4\u30F3') {\n return;\n } // \u73FE\u72B6\u30E1\u30A4\u30F3\u306E\u307F\u30C7\u30D0\u30C3\u30B0\u3059\u308B\n console.log(`@__DEBUG_BP_WAIT(${curLine})`);\n const timerId = setInterval(() => {\n if (sys.__getSysVar('__DEBUG\u5F85\u6A5F\u30D5\u30E9\u30B0') === 1) {\n sys.__setSysVar('__DEBUG\u5F85\u6A5F\u30D5\u30E9\u30B0', 0);\n clearInterval(timerId);\n resolve(curLine);\n }\n }, 500);\n }\n else {\n resolve(curLine);\n }\n });\n }\n },\n '\u30B0\u30ED\u30FC\u30D0\u30EB\u95A2\u6570\u4E00\u89A7\u53D6\u5F97': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n const vars = sys.__varslist[1];\n const res = [];\n for (const key of vars.keys()) {\n res.push(key);\n }\n return res;\n }\n },\n '\u30B7\u30B9\u30C6\u30E0\u95A2\u6570\u4E00\u89A7\u53D6\u5F97': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n const vars = sys.__v0;\n const res = [];\n for (const key of vars.keys()) {\n if (key.startsWith('__') || key.startsWith('!') || key === 'meta') {\n continue;\n }\n res.push(key);\n }\n return res;\n }\n },\n '\u30B7\u30B9\u30C6\u30E0\u95A2\u6570\u5B58\u5728': {\n type: 'func',\n josi: [['\u304C', '\u306E']],\n pure: true,\n fn: function (fname, sys) {\n return (typeof sys.__getSysVar(fname) !== 'undefined');\n }\n },\n '\u30D7\u30E9\u30B0\u30A4\u30F3\u4E00\u89A7\u53D6\u5F97': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n const a = [];\n for (const f in sys.pluginfiles) {\n a.push(f);\n }\n return a;\n }\n },\n '\u30E2\u30B8\u30E5\u30FC\u30EB\u4E00\u89A7\u53D6\u5F97': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n const a = [];\n for (const f in sys.__module) {\n a.push(f);\n }\n return a;\n }\n },\n '\u52A9\u8A5E\u4E00\u89A7\u53D6\u5F97': {\n type: 'func',\n josi: [],\n pure: true,\n asyncFn: false,\n fn: function (sys) {\n return sys.josiList;\n }\n },\n '\u4E88\u7D04\u8A9E\u4E00\u89A7\u53D6\u5F97': {\n type: 'func',\n josi: [],\n pure: true,\n asyncFn: false,\n fn: function (sys) {\n return sys.reservedWords;\n }\n },\n // @\u30D7\u30E9\u30B0\u30A4\u30F3\u7BA1\u7406\n '\u30D7\u30E9\u30B0\u30A4\u30F3\u540D': { type: 'const', value: '\u30E1\u30A4\u30F3' }, // @\u3077\u3089\u3050\u3044\u3093\u3081\u3044\n '\u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u8A2D\u5B9A': {\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function (s, sys) {\n sys.__setSysVar('\u30D7\u30E9\u30B0\u30A4\u30F3\u540D', s);\n },\n return_none: true\n },\n '\u540D\u524D\u7A7A\u9593': { type: 'const', value: '' }, // @\u306A\u307E\u3048\u304F\u3046\u304B\u3093\n '\u540D\u524D\u7A7A\u9593\u8A2D\u5B9A': {\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function (s, sys) {\n // push namespace\n sys.__namespaceList.push([sys.__getSysVar('\u540D\u524D\u7A7A\u9593'), sys.__getSysVar('\u30D7\u30E9\u30B0\u30A4\u30F3\u540D')]);\n sys.__setSysVar('\u540D\u524D\u7A7A\u9593', s);\n },\n return_none: true\n },\n '\u540D\u524D\u7A7A\u9593\u30DD\u30C3\u30D7': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n // pop namespace\n const a = sys.__namespaceList.pop();\n if (a) {\n sys.__setSysVar('\u540D\u524D\u7A7A\u9593', a[0]);\n sys.__setSysVar('\u30D7\u30E9\u30B0\u30A4\u30F3\u540D', a[1]);\n }\n },\n return_none: true\n },\n // @URL\u30A8\u30F3\u30B3\u30FC\u30C9\u3068\u30D1\u30E9\u30E1\u30FC\u30BF\n 'URL\u30A8\u30F3\u30B3\u30FC\u30C9': {\n type: 'func',\n josi: [['\u3092', '\u304B\u3089']],\n pure: true,\n fn: function (text) {\n return encodeURIComponent(text);\n }\n },\n 'URL\u30C7\u30B3\u30FC\u30C9': {\n type: 'func',\n josi: [['\u3092', '\u3078', '\u306B']],\n pure: true,\n fn: function (text) {\n return decodeURIComponent(text);\n }\n },\n 'URL\u30D1\u30E9\u30E1\u30FC\u30BF\u89E3\u6790': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (url, sys) {\n const res = {};\n if (typeof url !== 'string') {\n return res;\n }\n const p = url.split('?');\n if (p.length <= 1) {\n return res;\n }\n const params = p[1].split('&');\n for (const line of params) {\n const line2 = line + '=';\n const kv = line2.split('=');\n const k = sys.__exec('URL\u30C7\u30B3\u30FC\u30C9', [kv[0]]);\n res[k] = sys.__exec('URL\u30C7\u30B3\u30FC\u30C9', [kv[1]]);\n }\n return res;\n }\n },\n // @BASE64\n 'BASE64\u30A8\u30F3\u30B3\u30FC\u30C9': {\n type: 'func',\n josi: [['\u3092', '\u304B\u3089']],\n pure: true,\n fn: function (text) {\n // browser?\n if (typeof (window) !== 'undefined' && window.btoa) {\n const u8a = new TextEncoder().encode(text);\n const utf8str = String.fromCharCode.apply(null, u8a);\n return btoa(utf8str);\n }\n // Node?\n if (typeof (Buffer) !== 'undefined') {\n return Buffer.from(text).toString('base64');\n }\n throw new Error('\u300EBASE64\u30A8\u30F3\u30B3\u30FC\u30C9\u300F\u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002');\n }\n },\n 'BASE64\u30C7\u30B3\u30FC\u30C9': {\n type: 'func',\n josi: [['\u3092', '\u3078', '\u306B']],\n pure: true,\n fn: function (text) {\n if (typeof (window) !== 'undefined' && window.atob) {\n const decodedUtf8str = atob(text);\n const dec = Array.prototype.map.call(decodedUtf8str, c => c.charCodeAt());\n const decodedArray = new Uint8Array(dec);\n return new TextDecoder('UTF-8').decode(decodedArray);\n }\n // Node?\n if (typeof (Buffer) !== 'undefined') {\n return Buffer.from(text, 'base64').toString();\n }\n throw new Error('\u300EBASE64\u30C7\u30B3\u30FC\u30C9\u300F\u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002');\n }\n },\n // @\u30D1\u30B9\u64CD\u4F5C\n '\u62E1\u5F35\u5B50\u62BD\u51FA': {\n type: 'func',\n josi: [['\u304B\u3089', '\u306E']],\n pure: true,\n fn: function (fname, sys) {\n if (fname === null || fname === undefined) {\n return '';\n }\n const sep = sys.pathSeparator || '/';\n if (fname.indexOf(sep) >= 0) { // \u30D1\u30B9\u8A18\u53F7\u304C\u3042\u308C\u3070\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u62BD\u51FA\n const parts = fname.split(sep);\n fname = parts[parts.length - 1];\n }\n const m = fname.match(/(\\.[a-zA-Z0-9_\\-+]+)$/);\n if (m) {\n return m[1];\n }\n return '';\n }\n },\n '\u62E1\u5F35\u5B50\u5909\u66F4': {\n type: 'func',\n josi: [['\u306E', '\u3092', '\u304B\u3089'], ['\u306B', '\u3078']],\n pure: true,\n fn: function (fname, ext, sys) {\n if (fname === null || fname === undefined) {\n return ext;\n }\n const sep = sys.pathSeparator || '/';\n const pathList = fname.split(sep);\n const filename = pathList[pathList.length - 1];\n const pathStr = pathList.slice(0, -1).join(sep);\n const rawExt = (ext ?? '').trim();\n let extWithDot = rawExt;\n if (rawExt !== '') {\n extWithDot = rawExt.startsWith('.') ? rawExt : '.' + rawExt;\n }\n const newFilename = filename.replace(/(\\.[a-zA-Z0-9_\\-+]+)?$/, extWithDot);\n return sys.__exec('\u7D42\u7AEF\u30D1\u30B9\u8FFD\u52A0', [pathStr, sys]) + newFilename;\n }\n },\n '\u7D42\u7AEF\u30D1\u30B9\u8FFD\u52A0': {\n type: 'func',\n josi: [['\u306B', '\u3078']],\n pure: true,\n fn: function (path, sys) {\n const sep = sys.pathSeparator || '/';\n if (path === undefined || path === null || path === '') {\n return '';\n }\n if (path.endsWith(sep)) {\n return path;\n }\n return path + sep;\n }\n },\n '\u7D42\u7AEF\u30D1\u30B9\u9664\u53BB': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (dir, sys) {\n const sep = sys.pathSeparator || '/';\n if (!dir) {\n return '';\n }\n if (dir.endsWith(sep)) {\n return dir.substring(0, dir.length - 1);\n }\n else {\n return dir;\n }\n }\n },\n '\u7D42\u7AEF\u30D1\u30B9\u524A\u9664': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (dir, sys) {\n return sys.__exec('\u7D42\u7AEF\u30D1\u30B9\u9664\u53BB', [dir, sys]);\n }\n },\n '\u30D5\u30A1\u30A4\u30EB\u540D\u62BD\u51FA': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (dir, sys) {\n const sep = sys.pathSeparator || '/';\n const parts = dir.split(sep);\n return parts[parts.length - 1];\n }\n },\n '\u30D1\u30B9\u62BD\u51FA': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (dir, sys) {\n const sep = sys.pathSeparator || '/';\n const parts = dir.split(sep);\n parts.pop();\n return parts.join(sep);\n }\n }\n};\n", "export default {\n 'meta': {\n type: 'const',\n value: {\n pluginName: 'plugin_math', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u540D\u524D\n description: '\u6570\u5B66\u95A2\u6570\u3092\u63D0\u4F9B\u3059\u308B\u30D7\u30E9\u30B0\u30A4\u30F3', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u8AAC\u660E\n pluginVersion: '3.6.0', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\n nakoRuntime: ['wnako', 'cnako', 'phpnako'], // \u5BFE\u8C61\u30E9\u30F3\u30BF\u30A4\u30E0\n nakoVersion: '^3.6.0' // \u8981\u6C42\u306A\u3067\u3057\u3053\u30D0\u30FC\u30B8\u30E7\u30F3\n }\n },\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n // \u521D\u671F\u5316\u4E0D\u8981\n }\n },\n // @\u4E09\u89D2\u95A2\u6570\n 'SIN': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return Math.sin(v);\n }\n },\n 'COS': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return Math.cos(v);\n }\n },\n 'TAN': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return Math.tan(v);\n }\n },\n 'ARCSIN': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return Math.asin(v);\n }\n },\n 'ARCCOS': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return Math.acos(v);\n }\n },\n 'ARCTAN': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return Math.atan(v);\n }\n },\n 'ATAN2': {\n type: 'func',\n josi: [['\u3068'], ['\u306E']],\n pure: true,\n fn: function (y, x) {\n return Math.atan2(y, x);\n }\n },\n '\u5EA7\u6A19\u89D2\u5EA6\u8A08\u7B97': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (XY) {\n return Math.atan2(XY[1], XY[0]) / Math.PI * 180;\n }\n },\n 'RAD2DEG': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return v / Math.PI * 180;\n }\n },\n 'DEG2RAD': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return (v / 180) * Math.PI;\n }\n },\n '\u5EA6\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return v / Math.PI * 180;\n }\n },\n '\u30E9\u30B8\u30A2\u30F3\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return (v / 180) * Math.PI;\n }\n },\n // @\u7B97\u8853\u95A2\u6570\n 'SIGN': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n return (parseFloat(v) === 0) ? 0 : (v > 0) ? 1 : -1;\n }\n },\n '\u7B26\u53F7': {\n type: 'func',\n josi: [['\u306E']],\n pure: false,\n fn: function (v, sys) {\n return sys.__exec('SIGN', [v]);\n }\n },\n 'ABS': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return Math.abs(a);\n }\n },\n '\u7D76\u5BFE\u5024': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return Math.abs(a);\n }\n },\n 'EXP': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return Math.exp(a);\n }\n },\n 'HYPOT': {\n type: 'func',\n josi: [['\u3068'], ['\u306E']],\n pure: true,\n fn: function (a, b) {\n return Math.hypot(a, b);\n }\n },\n '\u659C\u8FBA': {\n type: 'func',\n josi: [['\u3068'], ['\u306E']],\n pure: true,\n fn: function (a, b) {\n return Math.hypot(a, b);\n }\n },\n 'LN': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return Math.log(a);\n }\n },\n 'LOG': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return Math.log(a);\n }\n },\n 'LOGN': {\n type: 'func',\n josi: [['\u3067'], ['\u306E']],\n pure: true,\n fn: function (a, b) {\n if (a === 2) {\n return Math.LOG2E * Math.log(b);\n }\n if (a === 10) {\n return Math.LOG10E * Math.log(b);\n }\n return Math.log(b) / Math.log(a);\n }\n },\n 'FRAC': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return a % 1;\n }\n },\n '\u5C0F\u6570\u90E8\u5206': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return a % 1;\n }\n },\n '\u6574\u6570\u90E8\u5206': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return Math.trunc(a);\n }\n },\n '\u4E71\u6570': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n // number\u306E\u5834\u5408\n if (typeof a === 'number') {\n return Math.floor(Math.random() * a);\n }\n // \u7BC4\u56F2\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u5834\u5408\n if (typeof a === 'object' && a['\u5148\u982D'] !== undefined) {\n const min = a['\u5148\u982D'];\n const max = a['\u672B\u5C3E'];\n return Math.floor(Math.random() * (max - min + 1)) + Number(min);\n }\n // \u914D\u5217\u306E\u5834\u5408\n if (Array.isArray(a)) {\n const min = a[0];\n const max = a[1];\n return Math.floor(Math.random() * (max - min + 1)) + Number(min);\n }\n return undefined;\n }\n },\n '\u4E71\u6570\u7BC4\u56F2': {\n type: 'func',\n josi: [['\u304B\u3089'], ['\u307E\u3067\u306E', '\u306E']],\n pure: true,\n fn: function (a, b) {\n return (Math.floor(Math.random() * (b - a + 1)) + a);\n }\n },\n 'SQRT': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return Math.sqrt(a);\n }\n },\n '\u5E73\u65B9\u6839': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n return Math.sqrt(a);\n }\n },\n // @\u6570\u5024\u5207\u4E0A\u5207\u6368\u4E38\u3081\n 'ROUND': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return Math.round(v);\n }\n },\n '\u56DB\u6368\u4E94\u5165': {\n type: 'func',\n josi: [['\u3092', '\u306E']],\n pure: true,\n fn: function (v) {\n return Math.round(v);\n }\n },\n '\u5C0F\u6570\u70B9\u5207\u4E0A': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (a, b) {\n const base = Math.pow(10, b);\n return Math.ceil(a * base) / base;\n }\n },\n '\u5C0F\u6570\u70B9\u5207\u4E0B': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (a, b) {\n const base = Math.pow(10, b);\n return Math.floor(a * base) / base;\n }\n },\n '\u5C0F\u6570\u70B9\u56DB\u6368\u4E94\u5165': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (a, b) {\n const base = Math.pow(10, b);\n return Math.round(a * base) / base;\n }\n },\n 'CEIL': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return Math.ceil(v);\n }\n },\n '\u5207\u4E0A': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return Math.ceil(v);\n }\n },\n 'FLOOR': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return Math.floor(v);\n }\n },\n '\u5207\u6368': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (v) {\n return Math.floor(v);\n }\n }\n};\n", "export const options = {\n delimiter: ',',\n eol: '\\r\\n',\n auto_convert_number: true\n};\nexport function resetEnv() {\n options.delimiter = ',';\n options.eol = '\\r\\n';\n options.auto_convert_number = true;\n}\n/// \u6587\u5B57\u5217\u304C\u6570\u5024\u5316\u3069\u3046\u304B\u5224\u5B9A\u3059\u308B\u95A2\u6570\nfunction is_numeric(str) {\n return /^-?\\d+(\\.\\d+)?([eE][-+]?\\d+)?$/.test(str);\n}\nexport function parse(txt, delimiter = undefined) {\n // delimiter\n if (delimiter === undefined) {\n delimiter = options.delimiter;\n }\n // check txt\n txt = '' + txt + '\\n';\n // convert CRLF to LF, and CR to LF\n txt = txt.replace(/(\\r\\n|\\r)/g, '\\n');\n // trim right\n txt = txt.replace(/\\s+$/, '') + '\\n';\n // set pattern\n const patToDelim = '^(.*?)([\\\\' + delimiter + '\\\\n])';\n const reToDelim = new RegExp(patToDelim);\n // if value is number then convert to float\n const convType = function (v) {\n let result = v;\n if (typeof (v) === 'string') {\n if (options.auto_convert_number && is_numeric(v)) {\n result = parseFloat(v); // convert number\n }\n }\n return result;\n };\n // parse txt\n const res = [];\n let cells = [];\n let c = '';\n while (txt !== '') {\n // first check delimiter (because /^\\s+/ skip delimiter'\\t') (#3)\n c = txt.charAt(0);\n if (c === delimiter) {\n txt = txt.substring(1);\n cells.push('');\n continue;\n }\n // second check LF (#7)\n if (c === '\\n') {\n cells.push('');\n res.push(cells);\n cells = [];\n txt = txt.substring(1);\n continue;\n }\n // trim white space\n txt = txt.replace(/^\\s+/, '');\n c = txt.charAt(0);\n // no data\n if (c === delimiter) {\n console.log('delimiter');\n cells.push('');\n txt = txt.substring(delimiter.length);\n continue;\n }\n // written using the dialect of Excel\n if (c === '=' && txt.charAt(1) === '\"') {\n txt = txt.substring(1);\n continue;\n }\n // number or simple string\n if (c !== '\"') { // number or simple str\n const m = reToDelim.exec(txt);\n if (!m) {\n cells.push(convType(txt));\n res.push(cells);\n cells = [];\n break;\n }\n if (m[2] === '\\n') {\n cells.push(convType(m[1]));\n res.push(cells);\n cells = [];\n }\n else if (m[2] === delimiter) {\n cells.push(convType(m[1]));\n }\n txt = txt.substring(m[0].length);\n continue;\n }\n // \"\" ... blank data\n if (txt.substring(0, 2) === '\"\"') {\n cells.push('');\n txt = txt.substring(2);\n continue;\n }\n // \"...\"\n let i = 1;\n let s = '';\n while (i < txt.length) {\n const c1 = txt.charAt(i);\n const c2 = txt.charAt(i + 1);\n // console.log(\"@\" + c1 + c2);\n // 2quote => 1quote char\n if (c1 === '\"' && c2 === '\"') {\n i += 2;\n s += '\"';\n continue;\n }\n if (c1 === '\"') {\n i++;\n if (c2 === delimiter) {\n i++;\n cells.push(convType(s));\n s = '';\n break;\n }\n if (c2 === '\\n') {\n i++;\n cells.push(convType(s));\n res.push(cells);\n cells = [];\n break;\n }\n // if (c2 === \" \" || c2 === \"\\t\") {\n i++;\n continue;\n }\n s += c1;\n i++;\n }\n txt = txt.substr(i);\n }\n if (cells.length > 0)\n res.push(cells);\n return res;\n}\n// convert 2D array to CSV string\nexport function stringify(ary, delimiter = undefined, eol = undefined) {\n // check arguments\n if (delimiter === undefined) {\n delimiter = options.delimiter;\n }\n if (eol === undefined) {\n eol = options.eol;\n }\n const valueConv = genValueConverter(delimiter);\n if (ary === undefined)\n return '';\n let r = '';\n for (let i = 0; i < ary.length; i++) {\n const cells = ary[i];\n if (cells === undefined) {\n r += eol;\n continue;\n }\n for (let j = 0; j < cells.length; j++) {\n cells[j] = valueConv(cells[j]);\n }\n r += cells.join(delimiter) + eol;\n }\n // replace return code\n r = r.replace(/(\\r\\n|\\r|\\n)/g, eol);\n return r;\n}\nexport function replaceEolMark(eol) {\n eol = eol.replace(/\\n\\r/g, '[CRLF]');\n eol = eol.replace(/\\r/g, '[CR]');\n eol = eol.replace(/\\n/g, '[LF]');\n return eol;\n}\nfunction genValueConverter(delimiter) {\n return function (s) {\n s = '' + s;\n let fQuot = false;\n if (s.indexOf('\\n') >= 0 || s.indexOf('\\r') >= 0) {\n fQuot = true;\n }\n if (s.indexOf(delimiter) >= 0) {\n fQuot = true;\n }\n if (s.indexOf('\"') >= 0) {\n fQuot = true;\n s = s.replace(/\"/g, '\"\"');\n }\n if (fQuot)\n s = '\"' + s + '\"';\n return s;\n };\n}\n", "import { options, parse, stringify } from './nako_csv.mjs';\nconst PluginCSV = {\n 'meta': {\n type: 'const',\n value: {\n pluginName: 'plugin_csv', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u540D\u524D\n description: 'CSV\u95A2\u9023\u306E\u547D\u4EE4\u3092\u63D0\u4F9B\u3059\u308B\u30D7\u30E9\u30B0\u30A4\u30F3', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u8AAC\u660E\n pluginVersion: '3.6.0', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\n nakoRuntime: ['wnako', 'cnako', 'phpnako'], // \u5BFE\u8C61\u30E9\u30F3\u30BF\u30A4\u30E0\n nakoVersion: '3.6.0' // \u8981\u6C42\u306A\u3067\u3057\u3053\u30D0\u30FC\u30B8\u30E7\u30F3\n }\n },\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n // \u57FA\u672C\u7684\u306B\u521D\u671F\u5316\u4E0D\u8981\n }\n },\n // @CSV\u64CD\u4F5C\n 'CSV\u53D6\u5F97': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u3067']],\n pure: true,\n fn: function (str) {\n options.delimiter = ',';\n return parse(str);\n }\n },\n 'TSV\u53D6\u5F97': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u3067']],\n pure: true,\n fn: function (str) {\n options.delimiter = '\\t';\n return parse(str);\n }\n },\n '\u8868CSV\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (a) {\n options.delimiter = ',';\n return stringify(a);\n }\n },\n 'CSV\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (a) {\n options.delimiter = ',';\n return stringify(a);\n }\n },\n '\u8868TSV\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (a) {\n options.delimiter = '\\t';\n return stringify(a);\n }\n },\n 'TSV\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (a) {\n options.delimiter = '\\t';\n return stringify(a);\n }\n },\n 'CSV\u30AA\u30D7\u30B7\u30E7\u30F3\u8A2D\u5B9A': {\n type: 'func',\n josi: [['\u3092', '\u3067']],\n pure: true,\n fn: function (obj) {\n for (const key in obj) {\n const value = obj[key];\n if (key === 'delimiter' || key === '\u533A\u5207\u6587\u5B57') {\n options.delimiter = value;\n }\n else if (key === 'eol') {\n options.eol = value;\n }\n else if (key === 'auto_convert_number') {\n options.auto_convert_number = value;\n }\n }\n },\n return_none: true\n }\n};\nexport default PluginCSV;\n", "export default {\n 'meta': {\n type: 'const',\n value: {\n pluginName: 'plugin_promise', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u540D\u524D\n description: 'promise\u95A2\u9023\u306E\u547D\u4EE4\u3092\u63D0\u4F9B\u3059\u308B\u30D7\u30E9\u30B0\u30A4\u30F3', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u8AAC\u660E\n pluginVersion: '3.6.0', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\n nakoRuntime: ['wnako', 'cnako'], // \u5BFE\u8C61\u30E9\u30F3\u30BF\u30A4\u30E0\n nakoVersion: '^3.6.0' // \u8981\u6C42\u306A\u3067\u3057\u3053\u30D0\u30FC\u30B8\u30E7\u30F3\n }\n },\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n if (sys.__promise === null || sys.__promise === undefined) {\n sys.__promise = {\n setLastPromise: function (promise) {\n sys.__setSysVar('\u305D', promise);\n return promise;\n }\n };\n }\n }\n },\n // @\u975E\u540C\u671F\u51E6\u7406\u306E\u4FDD\u8A3C\u306E\u5B9A\u6570\n '\u305D': { type: 'const', value: '' }, // @\u305D\n // @\u975E\u540C\u671F\u51E6\u7406\u306E\u4FDD\u8A3C\n '\u52D5\u6642': {\n type: 'func',\n josi: [['\u3092', '\u3067']],\n pure: true,\n fn: function (callback, sys) {\n return sys.__promise.setLastPromise(new Promise((resolve, reject) => {\n return callback(resolve, reject);\n }));\n },\n return_none: false\n },\n '\u6210\u529F\u6642': {\n type: 'func',\n josi: [['\u3092'], ['\u306E', '\u304C', '\u306B']],\n pure: true,\n fn: function (callback, promise, sys) {\n return sys.__promise.setLastPromise(promise.then((result) => {\n sys.__setSysVar('\u5BFE\u8C61', result);\n return callback(result);\n }));\n },\n return_none: false\n },\n '\u51E6\u7406\u6642': {\n type: 'func',\n josi: [['\u3092'], ['\u306E', '\u304C', '\u306B']],\n pure: true,\n fn: function (cbFunc, promise, sys) {\n return sys.__promise.setLastPromise(promise.then((result) => {\n sys.__setSysVar('\u5BFE\u8C61', result);\n return cbFunc(true, result, sys);\n }, (reason) => {\n sys.__setSysVar('\u5BFE\u8C61', reason);\n return cbFunc(false, reason, sys);\n }));\n },\n return_none: false\n },\n '\u5931\u6557\u6642': {\n type: 'func',\n josi: [['\u3092'], ['\u306E', '\u304C', '\u306B']],\n pure: true,\n fn: function (callback, promise, sys) {\n return sys.__promise.setLastPromise(promise.catch((err) => {\n sys.__setSysVar('\u5BFE\u8C61', err);\n return callback(err);\n }));\n },\n return_none: false\n },\n '\u7D42\u4E86\u6642': {\n type: 'func',\n josi: [['\u3092'], ['\u306E', '\u304C', '\u306B']],\n pure: true,\n fn: function (callback, promise, sys) {\n return sys.__promise.setLastPromise(promise.finally(() => {\n return callback();\n }));\n },\n return_none: false\n },\n '\u675F': {\n type: 'func',\n josi: [['\u3068', '\u3092']],\n isVariableJosi: true,\n pure: true,\n fn: function (...args) {\n const sys = args.pop();\n return (sys).__promise.setLastPromise(Promise.all(args));\n },\n return_none: false\n }\n};\n", "/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nfunction getLineColFromPtr(string, ptr) {\n let lines = string.slice(0, ptr).split(/\\r\\n|\\n|\\r/g);\n return [lines.length, lines.pop().length + 1];\n}\nfunction makeCodeBlock(string, line, column) {\n let lines = string.split(/\\r\\n|\\n|\\r/g);\n let codeblock = '';\n let numberLen = (Math.log10(line + 1) | 0) + 1;\n for (let i = line - 1; i <= line + 1; i++) {\n let l = lines[i - 1];\n if (!l)\n continue;\n codeblock += i.toString().padEnd(numberLen, ' ');\n codeblock += ': ';\n codeblock += l;\n codeblock += '\\n';\n if (i === line) {\n codeblock += ' '.repeat(numberLen + column + 2);\n codeblock += '^\\n';\n }\n }\n return codeblock;\n}\nexport class TomlError extends Error {\n line;\n column;\n codeblock;\n constructor(message, options) {\n const [line, column] = getLineColFromPtr(options.toml, options.ptr);\n const codeblock = makeCodeBlock(options.toml, line, column);\n super(`Invalid TOML document: ${message}\\n\\n${codeblock}`, options);\n this.line = line;\n this.column = column;\n this.codeblock = codeblock;\n }\n}\n", "/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { TomlError } from './error.js';\nfunction isEscaped(str, ptr) {\n let i = 0;\n while (str[ptr - ++i] === '\\\\')\n ;\n return --i && (i % 2);\n}\nexport function indexOfNewline(str, start = 0, end = str.length) {\n let idx = str.indexOf('\\n', start);\n if (str[idx - 1] === '\\r')\n idx--;\n return idx <= end ? idx : -1;\n}\nexport function skipComment(str, ptr) {\n for (let i = ptr; i < str.length; i++) {\n let c = str[i];\n if (c === '\\n')\n return i;\n if (c === '\\r' && str[i + 1] === '\\n')\n return i + 1;\n if ((c < '\\x20' && c !== '\\t') || c === '\\x7f') {\n throw new TomlError('control characters are not allowed in comments', {\n toml: str,\n ptr: ptr,\n });\n }\n }\n return str.length;\n}\nexport function skipVoid(str, ptr, banNewLines, banComments) {\n let c;\n while (1) {\n while ((c = str[ptr]) === ' ' || c === '\\t' || (!banNewLines && (c === '\\n' || c === '\\r' && str[ptr + 1] === '\\n')))\n ptr++;\n // Tucking the return statement here would save 5 characters >:)\n // But TypeScript fails to detect there is no way to exit the loop so it complains about the lack of final return\n if (banComments || c !== '#')\n break;\n ptr = skipComment(str, ptr);\n }\n return ptr;\n}\nexport function skipUntil(str, ptr, sep, end, banNewLines = false) {\n if (!end) {\n ptr = indexOfNewline(str, ptr);\n return ptr < 0 ? str.length : ptr;\n }\n for (let i = ptr; i < str.length; i++) {\n let c = str[i];\n if (c === '#') {\n i = indexOfNewline(str, i);\n }\n else if (c === sep) {\n return i + 1;\n }\n else if (c === end || (banNewLines && (c === '\\n' || (c === '\\r' && str[i + 1] === '\\n')))) {\n return i;\n }\n }\n throw new TomlError('cannot find end of structure', {\n toml: str,\n ptr: ptr\n });\n}\nexport function getStringEnd(str, seek) {\n let first = str[seek];\n let target = first === str[seek + 1] && str[seek + 1] === str[seek + 2]\n ? str.slice(seek, seek + 3)\n : first;\n seek += target.length - 1;\n do\n seek = str.indexOf(target, ++seek);\n while (seek > -1 && first !== \"'\" && isEscaped(str, seek));\n if (seek > -1) {\n seek += target.length;\n if (target.length > 1) {\n if (str[seek] === first)\n seek++;\n if (str[seek] === first)\n seek++;\n }\n }\n return seek;\n}\n", "/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nlet DATE_TIME_RE = /^(\\d{4}-\\d{2}-\\d{2})?[T ]?(?:(\\d{2}):\\d{2}(?::\\d{2}(?:\\.\\d+)?)?)?(Z|[-+]\\d{2}:\\d{2})?$/i;\nexport class TomlDate extends Date {\n #hasDate = false;\n #hasTime = false;\n #offset = null;\n constructor(date) {\n let hasDate = true;\n let hasTime = true;\n let offset = 'Z';\n if (typeof date === 'string') {\n let match = date.match(DATE_TIME_RE);\n if (match) {\n if (!match[1]) {\n hasDate = false;\n date = `0000-01-01T${date}`;\n }\n hasTime = !!match[2];\n // Make sure to use T instead of a space. Breaks in case of extreme values otherwise.\n hasTime && date[10] === ' ' && (date = date.replace(' ', 'T'));\n // Do not allow rollover hours.\n if (match[2] && +match[2] > 23) {\n date = '';\n }\n else {\n offset = match[3] || null;\n date = date.toUpperCase();\n if (!offset && hasTime)\n date += 'Z';\n }\n }\n else {\n date = '';\n }\n }\n super(date);\n if (!isNaN(this.getTime())) {\n this.#hasDate = hasDate;\n this.#hasTime = hasTime;\n this.#offset = offset;\n }\n }\n isDateTime() {\n return this.#hasDate && this.#hasTime;\n }\n isLocal() {\n return !this.#hasDate || !this.#hasTime || !this.#offset;\n }\n isDate() {\n return this.#hasDate && !this.#hasTime;\n }\n isTime() {\n return this.#hasTime && !this.#hasDate;\n }\n isValid() {\n return this.#hasDate || this.#hasTime;\n }\n toISOString() {\n let iso = super.toISOString();\n // Local Date\n if (this.isDate())\n return iso.slice(0, 10);\n // Local Time\n if (this.isTime())\n return iso.slice(11, 23);\n // Local DateTime\n if (this.#offset === null)\n return iso.slice(0, -1);\n // Offset DateTime\n if (this.#offset === 'Z')\n return iso;\n // This part is quite annoying: JS strips the original timezone from the ISO string representation\n // Instead of using a \"modified\" date and \"Z\", we restore the representation \"as authored\"\n let offset = (+(this.#offset.slice(1, 3)) * 60) + +(this.#offset.slice(4, 6));\n offset = this.#offset[0] === '-' ? offset : -offset;\n let offsetDate = new Date(this.getTime() - (offset * 60e3));\n return offsetDate.toISOString().slice(0, -1) + this.#offset;\n }\n static wrapAsOffsetDateTime(jsDate, offset = 'Z') {\n let date = new TomlDate(jsDate);\n date.#offset = offset;\n return date;\n }\n static wrapAsLocalDateTime(jsDate) {\n let date = new TomlDate(jsDate);\n date.#offset = null;\n return date;\n }\n static wrapAsLocalDate(jsDate) {\n let date = new TomlDate(jsDate);\n date.#hasTime = false;\n date.#offset = null;\n return date;\n }\n static wrapAsLocalTime(jsDate) {\n let date = new TomlDate(jsDate);\n date.#hasDate = false;\n date.#offset = null;\n return date;\n }\n}\n", "/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { skipVoid } from './util.js';\nimport { TomlDate } from './date.js';\nimport { TomlError } from './error.js';\nlet INT_REGEX = /^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\\d(_?\\d)*))$/;\nlet FLOAT_REGEX = /^[+-]?\\d(_?\\d)*(\\.\\d(_?\\d)*)?([eE][+-]?\\d(_?\\d)*)?$/;\nlet LEADING_ZERO = /^[+-]?0[0-9_]/;\nlet ESCAPE_REGEX = /^[0-9a-f]{2,8}$/i;\nlet ESC_MAP = {\n b: '\\b',\n t: '\\t',\n n: '\\n',\n f: '\\f',\n r: '\\r',\n e: '\\x1b',\n '\"': '\"',\n '\\\\': '\\\\',\n};\nexport function parseString(str, ptr = 0, endPtr = str.length) {\n let isLiteral = str[ptr] === '\\'';\n let isMultiline = str[ptr++] === str[ptr] && str[ptr] === str[ptr + 1];\n if (isMultiline) {\n endPtr -= 2;\n if (str[ptr += 2] === '\\r')\n ptr++;\n if (str[ptr] === '\\n')\n ptr++;\n }\n let tmp = 0;\n let isEscape;\n let parsed = '';\n let sliceStart = ptr;\n while (ptr < endPtr - 1) {\n let c = str[ptr++];\n if (c === '\\n' || (c === '\\r' && str[ptr] === '\\n')) {\n if (!isMultiline) {\n throw new TomlError('newlines are not allowed in strings', {\n toml: str,\n ptr: ptr - 1,\n });\n }\n }\n else if ((c < '\\x20' && c !== '\\t') || c === '\\x7f') {\n throw new TomlError('control characters are not allowed in strings', {\n toml: str,\n ptr: ptr - 1,\n });\n }\n if (isEscape) {\n isEscape = false;\n if (c === 'x' || c === 'u' || c === 'U') {\n // Unicode escape\n let code = str.slice(ptr, (ptr += (c === 'x' ? 2 : c === 'u' ? 4 : 8)));\n if (!ESCAPE_REGEX.test(code)) {\n throw new TomlError('invalid unicode escape', {\n toml: str,\n ptr: tmp,\n });\n }\n try {\n parsed += String.fromCodePoint(parseInt(code, 16));\n }\n catch {\n throw new TomlError('invalid unicode escape', {\n toml: str,\n ptr: tmp,\n });\n }\n }\n else if (isMultiline && (c === '\\n' || c === ' ' || c === '\\t' || c === '\\r')) {\n // Multiline escape\n ptr = skipVoid(str, ptr - 1, true);\n if (str[ptr] !== '\\n' && str[ptr] !== '\\r') {\n throw new TomlError('invalid escape: only line-ending whitespace may be escaped', {\n toml: str,\n ptr: tmp,\n });\n }\n ptr = skipVoid(str, ptr);\n }\n else if (c in ESC_MAP) {\n // Classic escape\n parsed += ESC_MAP[c];\n }\n else {\n throw new TomlError('unrecognized escape sequence', {\n toml: str,\n ptr: tmp,\n });\n }\n sliceStart = ptr;\n }\n else if (!isLiteral && c === '\\\\') {\n tmp = ptr - 1;\n isEscape = true;\n parsed += str.slice(sliceStart, tmp);\n }\n }\n return parsed + str.slice(sliceStart, endPtr - 1);\n}\nexport function parseValue(value, toml, ptr, integersAsBigInt) {\n // Constant values\n if (value === 'true')\n return true;\n if (value === 'false')\n return false;\n if (value === '-inf')\n return -Infinity;\n if (value === 'inf' || value === '+inf')\n return Infinity;\n if (value === 'nan' || value === '+nan' || value === '-nan')\n return NaN;\n // Avoid FP representation of -0\n if (value === '-0')\n return integersAsBigInt ? 0n : 0;\n // Numbers\n let isInt = INT_REGEX.test(value);\n if (isInt || FLOAT_REGEX.test(value)) {\n if (LEADING_ZERO.test(value)) {\n throw new TomlError('leading zeroes are not allowed', {\n toml: toml,\n ptr: ptr,\n });\n }\n value = value.replace(/_/g, '');\n let numeric = +value;\n if (isNaN(numeric)) {\n throw new TomlError('invalid number', {\n toml: toml,\n ptr: ptr,\n });\n }\n if (isInt) {\n if ((isInt = !Number.isSafeInteger(numeric)) && !integersAsBigInt) {\n throw new TomlError('integer value cannot be represented losslessly', {\n toml: toml,\n ptr: ptr,\n });\n }\n if (isInt || integersAsBigInt === true)\n numeric = BigInt(value);\n }\n return numeric;\n }\n const date = new TomlDate(value);\n if (!date.isValid()) {\n throw new TomlError('invalid value', {\n toml: toml,\n ptr: ptr,\n });\n }\n return date;\n}\n", "/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { parseString, parseValue } from './primitive.js';\nimport { parseArray, parseInlineTable } from './struct.js';\nimport { skipVoid, skipUntil, skipComment, getStringEnd } from './util.js';\nimport { TomlError } from './error.js';\nfunction sliceAndTrimEndOf(str, startPtr, endPtr) {\n let value = str.slice(startPtr, endPtr);\n let commentIdx = value.indexOf('#');\n if (commentIdx > -1) {\n // The call to skipComment allows to \"validate\" the comment\n // (absence of control characters)\n skipComment(str, commentIdx);\n value = value.slice(0, commentIdx);\n }\n return [value.trimEnd(), commentIdx];\n}\nexport function extractValue(str, ptr, end, depth, integersAsBigInt) {\n if (depth === 0) {\n throw new TomlError('document contains excessively nested structures. aborting.', {\n toml: str,\n ptr: ptr\n });\n }\n let c = str[ptr];\n if (c === '[' || c === '{') {\n let [value, endPtr] = c === '['\n ? parseArray(str, ptr, depth, integersAsBigInt)\n : parseInlineTable(str, ptr, depth, integersAsBigInt);\n if (end) {\n endPtr = skipVoid(str, endPtr);\n if (str[endPtr] === ',')\n endPtr++;\n else if (str[endPtr] !== end) {\n throw new TomlError('expected comma or end of structure', {\n toml: str,\n ptr: endPtr,\n });\n }\n }\n return [value, endPtr];\n }\n let endPtr;\n if (c === '\"' || c === \"'\") {\n endPtr = getStringEnd(str, ptr);\n let parsed = parseString(str, ptr, endPtr);\n if (end) {\n endPtr = skipVoid(str, endPtr);\n if (str[endPtr] && str[endPtr] !== ',' && str[endPtr] !== end && str[endPtr] !== '\\n' && str[endPtr] !== '\\r') {\n throw new TomlError('unexpected character encountered', {\n toml: str,\n ptr: endPtr,\n });\n }\n endPtr += (+(str[endPtr] === ','));\n }\n return [parsed, endPtr];\n }\n endPtr = skipUntil(str, ptr, ',', end);\n let slice = sliceAndTrimEndOf(str, ptr, endPtr - (+(str[endPtr - 1] === ',')));\n if (!slice[0]) {\n throw new TomlError('incomplete key-value declaration: no value specified', {\n toml: str,\n ptr: ptr\n });\n }\n if (end && slice[1] > -1) {\n endPtr = skipVoid(str, ptr + slice[1]);\n endPtr += +(str[endPtr] === ',');\n }\n return [\n parseValue(slice[0], str, ptr, integersAsBigInt),\n endPtr,\n ];\n}\n", "/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { parseString } from './primitive.js';\nimport { extractValue } from './extract.js';\nimport { getStringEnd, indexOfNewline, skipComment, skipVoid } from './util.js';\nimport { TomlError } from './error.js';\nlet KEY_PART_RE = /^[a-zA-Z0-9-_]+[ \\t]*$/;\nexport function parseKey(str, ptr, end = '=') {\n let dot = ptr - 1;\n let parsed = [];\n let endPtr = str.indexOf(end, ptr);\n if (endPtr < 0) {\n throw new TomlError('incomplete key-value: cannot find end of key', {\n toml: str,\n ptr: ptr,\n });\n }\n do {\n let c = str[ptr = ++dot];\n // If it's whitespace, ignore\n if (c !== ' ' && c !== '\\t') {\n // If it's a string\n if (c === '\"' || c === '\\'') {\n if (c === str[ptr + 1] && c === str[ptr + 2]) {\n throw new TomlError('multiline strings are not allowed in keys', {\n toml: str,\n ptr: ptr,\n });\n }\n let eos = getStringEnd(str, ptr);\n if (eos < 0) {\n throw new TomlError('unfinished string encountered', {\n toml: str,\n ptr: ptr,\n });\n }\n dot = str.indexOf('.', eos);\n let strEnd = str.slice(eos, dot < 0 || dot > endPtr ? endPtr : dot);\n let newLine = indexOfNewline(strEnd);\n if (newLine > -1) {\n throw new TomlError('newlines are not allowed in keys', {\n toml: str,\n ptr: ptr + dot + newLine,\n });\n }\n if (strEnd.trimStart()) {\n throw new TomlError('found extra tokens after the string part', {\n toml: str,\n ptr: eos,\n });\n }\n if (endPtr < eos) {\n endPtr = str.indexOf(end, eos);\n if (endPtr < 0) {\n throw new TomlError('incomplete key-value: cannot find end of key', {\n toml: str,\n ptr: ptr,\n });\n }\n }\n parsed.push(parseString(str, ptr, eos));\n }\n else {\n // Normal raw key part consumption and validation\n dot = str.indexOf('.', ptr);\n let part = str.slice(ptr, dot < 0 || dot > endPtr ? endPtr : dot);\n if (!KEY_PART_RE.test(part)) {\n throw new TomlError('only letter, numbers, dashes and underscores are allowed in keys', {\n toml: str,\n ptr: ptr,\n });\n }\n parsed.push(part.trimEnd());\n }\n }\n // Until there's no more dot\n } while (dot + 1 && dot < endPtr);\n return [parsed, skipVoid(str, endPtr + 1, true, true)];\n}\nexport function parseInlineTable(str, ptr, depth, integersAsBigInt) {\n let res = {};\n let seen = new Set();\n let c;\n ptr++;\n while ((c = str[ptr++]) !== '}' && c) {\n if (c === ',') {\n throw new TomlError('expected value, found comma', {\n toml: str,\n ptr: ptr - 1,\n });\n }\n else if (c === '#')\n ptr = skipComment(str, ptr);\n else if (c !== ' ' && c !== '\\t' && c !== '\\n' && c !== '\\r') {\n let k;\n let t = res;\n let hasOwn = false;\n let [key, keyEndPtr] = parseKey(str, ptr - 1);\n for (let i = 0; i < key.length; i++) {\n if (i)\n t = hasOwn ? t[k] : (t[k] = {});\n k = key[i];\n if ((hasOwn = Object.hasOwn(t, k)) && (typeof t[k] !== 'object' || seen.has(t[k]))) {\n throw new TomlError('trying to redefine an already defined value', {\n toml: str,\n ptr: ptr,\n });\n }\n if (!hasOwn && k === '__proto__') {\n Object.defineProperty(t, k, { enumerable: true, configurable: true, writable: true });\n }\n }\n if (hasOwn) {\n throw new TomlError('trying to redefine an already defined value', {\n toml: str,\n ptr: ptr,\n });\n }\n let [value, valueEndPtr] = extractValue(str, keyEndPtr, '}', depth - 1, integersAsBigInt);\n seen.add(value);\n t[k] = value;\n ptr = valueEndPtr;\n }\n }\n if (!c) {\n throw new TomlError('unfinished table encountered', {\n toml: str,\n ptr: ptr,\n });\n }\n return [res, ptr];\n}\nexport function parseArray(str, ptr, depth, integersAsBigInt) {\n let res = [];\n let c;\n ptr++;\n while ((c = str[ptr++]) !== ']' && c) {\n if (c === ',') {\n throw new TomlError('expected value, found comma', {\n toml: str,\n ptr: ptr - 1,\n });\n }\n else if (c === '#')\n ptr = skipComment(str, ptr);\n else if (c !== ' ' && c !== '\\t' && c !== '\\n' && c !== '\\r') {\n let e = extractValue(str, ptr - 1, ']', depth - 1, integersAsBigInt);\n res.push(e[0]);\n ptr = e[1];\n }\n }\n if (!c) {\n throw new TomlError('unfinished array encountered', {\n toml: str,\n ptr: ptr,\n });\n }\n return [res, ptr];\n}\n", "/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { parseKey } from './struct.js';\nimport { extractValue } from './extract.js';\nimport { skipVoid } from './util.js';\nimport { TomlError } from './error.js';\nfunction peekTable(key, table, meta, type) {\n let t = table;\n let m = meta;\n let k;\n let hasOwn = false;\n let state;\n for (let i = 0; i < key.length; i++) {\n if (i) {\n t = hasOwn ? t[k] : (t[k] = {});\n m = (state = m[k]).c;\n if (type === 0 /* Type.DOTTED */ && (state.t === 1 /* Type.EXPLICIT */ || state.t === 2 /* Type.ARRAY */)) {\n return null;\n }\n if (state.t === 2 /* Type.ARRAY */) {\n let l = t.length - 1;\n t = t[l];\n m = m[l].c;\n }\n }\n k = key[i];\n if ((hasOwn = Object.hasOwn(t, k)) && m[k]?.t === 0 /* Type.DOTTED */ && m[k]?.d) {\n return null;\n }\n if (!hasOwn) {\n if (k === '__proto__') {\n Object.defineProperty(t, k, { enumerable: true, configurable: true, writable: true });\n Object.defineProperty(m, k, { enumerable: true, configurable: true, writable: true });\n }\n m[k] = {\n t: i < key.length - 1 && type === 2 /* Type.ARRAY */\n ? 3 /* Type.ARRAY_DOTTED */\n : type,\n d: false,\n i: 0,\n c: {},\n };\n }\n }\n state = m[k];\n if (state.t !== type && !(type === 1 /* Type.EXPLICIT */ && state.t === 3 /* Type.ARRAY_DOTTED */)) {\n // Bad key type!\n return null;\n }\n if (type === 2 /* Type.ARRAY */) {\n if (!state.d) {\n state.d = true;\n t[k] = [];\n }\n t[k].push(t = {});\n state.c[state.i++] = (state = { t: 1 /* Type.EXPLICIT */, d: false, i: 0, c: {} });\n }\n if (state.d) {\n // Redefining a table!\n return null;\n }\n state.d = true;\n if (type === 1 /* Type.EXPLICIT */) {\n t = hasOwn ? t[k] : (t[k] = {});\n }\n else if (type === 0 /* Type.DOTTED */ && hasOwn) {\n return null;\n }\n return [k, t, state.c];\n}\nexport function parse(toml, { maxDepth = 1000, integersAsBigInt } = {}) {\n let res = {};\n let meta = {};\n let tbl = res;\n let m = meta;\n for (let ptr = skipVoid(toml, 0); ptr < toml.length;) {\n if (toml[ptr] === '[') {\n let isTableArray = toml[++ptr] === '[';\n let k = parseKey(toml, ptr += +isTableArray, ']');\n if (isTableArray) {\n if (toml[k[1] - 1] !== ']') {\n throw new TomlError('expected end of table declaration', {\n toml: toml,\n ptr: k[1] - 1,\n });\n }\n k[1]++;\n }\n let p = peekTable(k[0], res, meta, isTableArray ? 2 /* Type.ARRAY */ : 1 /* Type.EXPLICIT */);\n if (!p) {\n throw new TomlError('trying to redefine an already defined table or value', {\n toml: toml,\n ptr: ptr,\n });\n }\n m = p[2];\n tbl = p[1];\n ptr = k[1];\n }\n else {\n let k = parseKey(toml, ptr);\n let p = peekTable(k[0], tbl, m, 0 /* Type.DOTTED */);\n if (!p) {\n throw new TomlError('trying to redefine an already defined table or value', {\n toml: toml,\n ptr: ptr,\n });\n }\n let v = extractValue(toml, k[1], void 0, maxDepth, integersAsBigInt);\n p[1][p[0]] = v[0];\n ptr = v[1];\n }\n ptr = skipVoid(toml, ptr, true);\n if (toml[ptr] && toml[ptr] !== '\\n' && toml[ptr] !== '\\r') {\n throw new TomlError('each key-value declaration must be followed by an end-of-line', {\n toml: toml,\n ptr: ptr\n });\n }\n ptr = skipVoid(toml, ptr);\n }\n return res;\n}\n", "/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nlet BARE_KEY = /^[a-z0-9-_]+$/i;\nfunction extendedTypeOf(obj) {\n let type = typeof obj;\n if (type === 'object') {\n if (Array.isArray(obj))\n return 'array';\n if (obj instanceof Date)\n return 'date';\n }\n return type;\n}\nfunction isArrayOfTables(obj) {\n for (let i = 0; i < obj.length; i++) {\n if (extendedTypeOf(obj[i]) !== 'object')\n return false;\n }\n return obj.length != 0;\n}\nfunction formatString(s) {\n return JSON.stringify(s).replace(/\\x7f/g, '\\\\u007f');\n}\nfunction stringifyValue(val, type, depth, numberAsFloat) {\n if (depth === 0) {\n throw new Error('Could not stringify the object: maximum object depth exceeded');\n }\n if (type === 'number') {\n if (isNaN(val))\n return 'nan';\n if (val === Infinity)\n return 'inf';\n if (val === -Infinity)\n return '-inf';\n if (numberAsFloat && Number.isInteger(val))\n return val.toFixed(1);\n return val.toString();\n }\n if (type === 'bigint' || type === 'boolean') {\n return val.toString();\n }\n if (type === 'string') {\n return formatString(val);\n }\n if (type === 'date') {\n if (isNaN(val.getTime())) {\n throw new TypeError('cannot serialize invalid date');\n }\n return val.toISOString();\n }\n if (type === 'object') {\n return stringifyInlineTable(val, depth, numberAsFloat);\n }\n if (type === 'array') {\n return stringifyArray(val, depth, numberAsFloat);\n }\n}\nfunction stringifyInlineTable(obj, depth, numberAsFloat) {\n let keys = Object.keys(obj);\n if (keys.length === 0)\n return '{}';\n let res = '{ ';\n for (let i = 0; i < keys.length; i++) {\n let k = keys[i];\n if (i)\n res += ', ';\n res += BARE_KEY.test(k) ? k : formatString(k);\n res += ' = ';\n res += stringifyValue(obj[k], extendedTypeOf(obj[k]), depth - 1, numberAsFloat);\n }\n return res + ' }';\n}\nfunction stringifyArray(array, depth, numberAsFloat) {\n if (array.length === 0)\n return '[]';\n let res = '[ ';\n for (let i = 0; i < array.length; i++) {\n if (i)\n res += ', ';\n if (array[i] === null || array[i] === void 0) {\n throw new TypeError('arrays cannot contain null or undefined values');\n }\n res += stringifyValue(array[i], extendedTypeOf(array[i]), depth - 1, numberAsFloat);\n }\n return res + ' ]';\n}\nfunction stringifyArrayTable(array, key, depth, numberAsFloat) {\n if (depth === 0) {\n throw new Error('Could not stringify the object: maximum object depth exceeded');\n }\n let res = '';\n for (let i = 0; i < array.length; i++) {\n res += `${res && '\\n'}[[${key}]]\\n`;\n res += stringifyTable(0, array[i], key, depth, numberAsFloat);\n }\n return res;\n}\nfunction stringifyTable(tableKey, obj, prefix, depth, numberAsFloat) {\n if (depth === 0) {\n throw new Error('Could not stringify the object: maximum object depth exceeded');\n }\n let preamble = '';\n let tables = '';\n let keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n let k = keys[i];\n if (obj[k] !== null && obj[k] !== void 0) {\n let type = extendedTypeOf(obj[k]);\n if (type === 'symbol' || type === 'function') {\n throw new TypeError(`cannot serialize values of type '${type}'`);\n }\n let key = BARE_KEY.test(k) ? k : formatString(k);\n if (type === 'array' && isArrayOfTables(obj[k])) {\n tables += (tables && '\\n') + stringifyArrayTable(obj[k], prefix ? `${prefix}.${key}` : key, depth - 1, numberAsFloat);\n }\n else if (type === 'object') {\n let tblKey = prefix ? `${prefix}.${key}` : key;\n tables += (tables && '\\n') + stringifyTable(tblKey, obj[k], tblKey, depth - 1, numberAsFloat);\n }\n else {\n preamble += key;\n preamble += ' = ';\n preamble += stringifyValue(obj[k], type, depth, numberAsFloat);\n preamble += '\\n';\n }\n }\n }\n if (tableKey && (preamble || !tables)) // Create table only if necessary\n preamble = preamble ? `[${tableKey}]\\n${preamble}` : `[${tableKey}]`;\n return preamble && tables\n ? `${preamble}\\n${tables}`\n : preamble || tables;\n}\nexport function stringify(obj, { maxDepth = 1000, numbersAsFloat = false } = {}) {\n if (extendedTypeOf(obj) !== 'object') {\n throw new TypeError('stringify can only be called with an object');\n }\n let str = stringifyTable(0, obj, '', maxDepth, numbersAsFloat);\n if (str[str.length - 1] !== '\\n')\n return str + '\\n';\n return str;\n}\n", "/*!\n * Copyright (c) Squirrel Chat et al., All rights reserved.\n * SPDX-License-Identifier: BSD-3-Clause\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors\n * may be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\n * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\n * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\n * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\n * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\nimport { parse } from './parse.js';\nimport { stringify } from './stringify.js';\nimport { TomlDate } from './date.js';\nimport { TomlError } from './error.js';\nexport default { parse, stringify, TomlDate, TomlError };\nexport { parse, stringify, TomlDate, TomlError };\n", "// TOML\u3092\u8AAD\u3080\u305F\u3081\u306E\u30D7\u30E9\u30B0\u30A4\u30F3\nimport TOML from 'smol-toml';\nconst PluginTOML = {\n 'meta': {\n type: 'const',\n value: {\n pluginName: 'plugin_toml', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u540D\u524D\n description: 'TOML\u5F62\u5F0F\u306E\u30C7\u30FC\u30BF\u8AAD\u307F\u66F8\u304D\u3059\u308B\u30D7\u30E9\u30B0\u30A4\u30F3', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u8AAC\u660E\n pluginVersion: '3.7.6', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\n nakoRuntime: ['wnako', 'cnako'], // \u5BFE\u8C61\u30E9\u30F3\u30BF\u30A4\u30E0\n nakoVersion: '3.7.6' // \u8981\u6C42\u306A\u3067\u3057\u3053\u30D0\u30FC\u30B8\u30E7\u30F3\n }\n },\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n }\n },\n // @TOML\n 'TOML\u53D6\u5F97': {\n type: 'func',\n josi: [['\u3092', '\u306E', '\u304B\u3089']],\n pure: true,\n fn: function (s, sys) {\n return TOML.parse(s);\n }\n },\n 'TOML\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092', '\u304B\u3089', '\u306E']],\n pure: true,\n fn: function (s, sys) {\n return TOML.stringify(s);\n }\n }\n};\nexport default PluginTOML;\n", "/**\n * file: plugin_test.js\n * \u30C6\u30B9\u30C8\u5B9F\u884C\u7528\u30D7\u30E9\u30B0\u30A4\u30F3\n */\nexport default {\n 'meta': {\n type: 'const',\n value: {\n pluginName: 'plugin_test', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u540D\u524D\n description: '\u30C6\u30B9\u30C8\u3092\u63D0\u4F9B\u3059\u308B\u30D7\u30E9\u30B0\u30A4\u30F3', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u8AAC\u660E\n pluginVersion: '3.6.0', // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\n nakoRuntime: ['wnako', 'cnako', 'phpnako'], // \u5BFE\u8C61\u30E9\u30F3\u30BF\u30A4\u30E0\n nakoVersion: '^3.6.0' // \u8981\u6C42\u306A\u3067\u3057\u3053\u30D0\u30FC\u30B8\u30E7\u30F3\n }\n },\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function () {\n // \u521D\u671F\u5316\u4E0D\u8981\n }\n },\n // @\u30C6\u30B9\u30C8\n 'ASSERT\u7B49': {\n type: 'func',\n josi: [['\u3068'], ['\u304C']],\n pure: true,\n fn: function (a, b) {\n if (a !== b) {\n throw new Error(`\u4E0D\u4E00\u81F4 [\u5B9F\u969B]${JSON.stringify(a)} [\u671F\u5F85]${JSON.stringify(b)}`);\n }\n return true;\n }\n },\n '\u30C6\u30B9\u30C8\u5B9F\u884C': {\n type: 'func',\n josi: [['\u3068'], ['\u3067']],\n pure: false,\n fn: function (a, b, sys) {\n sys.__exec('ASSERT\u7B49', [a, b, sys]);\n }\n },\n '\u30C6\u30B9\u30C8\u7B49': {\n type: 'func',\n josi: [['\u3068'], ['\u304C']],\n pure: false,\n fn: function (a, b, sys) {\n sys.__exec('ASSERT\u7B49', [a, b, sys]);\n }\n }\n};\n", "// parser / lexer\nimport { NakoParser } from './nako_parser3.mjs';\nimport { NakoLexer } from './nako_lexer.mjs';\nimport { NakoPrepare } from './nako_prepare.mjs';\nimport { generateJS, NakoGenOptions } from './nako_gen.mjs';\nimport { convertInlineIndent, convertIndentSyntax } from './nako_indent_inline.mjs';\nimport { convertDNCL } from './nako_from_dncl.mjs';\nimport { convertDNCL2 } from './nako_from_dncl2.mjs';\nimport { SourceMappingOfTokenization, SourceMappingOfIndentSyntax, OffsetToLineColumn, subtractSourceMapByPreCodeLength } from './nako_source_mapping.mjs';\nimport { NakoLexerError, NakoImportError, NakoSyntaxError, InternalLexerError } from './nako_errors.mjs';\nimport { NakoLogger } from './nako_logger.mjs';\nimport { NakoGlobal } from './nako_global.mjs';\n// version info\nimport coreVersion from './nako_core_version.mjs';\n// basic plugins\nimport PluginSystem from './plugin_system.mjs';\nimport PluginMath from './plugin_math.mjs';\nimport PluginCSV from './plugin_csv.mjs';\nimport PluginPromise from './plugin_promise.mjs';\nimport PluginTOML from './plugin_toml.mjs';\nimport PluginTest from './plugin_test.mjs';\nconst cloneAsJSON = (x) => JSON.parse(JSON.stringify(x));\nconst PLUGIN_MIN_VERSION_INT = 600; // = minor * 100 + patch\n/** \u30B3\u30F3\u30D1\u30A4\u30E9\u5B9F\u884C\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u751F\u6210 */\nexport function newCompilerOptions(initObj = {}) {\n if (typeof initObj !== 'object') {\n initObj = {};\n }\n initObj.testOnly = initObj.testOnly || false;\n initObj.resetEnv = initObj.resetEnv || false;\n initObj.resetAll = initObj.resetAll || false;\n initObj.preCode = initObj.preCode || '';\n initObj.nakoGlobal = initObj.nakoGlobal || null;\n return initObj;\n}\n/** \u306A\u3067\u3057\u3053\u30B3\u30F3\u30D1\u30A4\u30E9 */\nexport class NakoCompiler {\n /**\n * @param {undefined | {'useBasicPlugin':true|false}} options\n */\n constructor(options = undefined) {\n if (options === undefined) {\n options = { useBasicPlugin: true };\n }\n // \u74B0\u5883\u306E\u30EA\u30BB\u30C3\u30C8\n this.__varslist = [this.newVaiables(), this.newVaiables(), this.newVaiables()]; // \u3053\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306F\u5909\u66F4\u3057\u306A\u3044\u3053\u3068 (this.gen.__varslist \u3068\u5171\u6709\u3059\u308B)\n this.__locals = this.newVaiables(); // \u30ED\u30FC\u30AB\u30EB\u5909\u6570\n this.__self = this;\n this.__vars = this.__varslist[2]; // alias of __varslist[2]\n this.__v1 = this.__varslist[1]; // alias of __varslist[1]\n this.__v0 = this.__varslist[0]; // alias of __varslist[0]\n // \u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u8A2D\u5B9A\n this.version = coreVersion.version;\n this.coreVersion = coreVersion.version;\n this.__globals = []; // \u751F\u6210\u3057\u305F NakoGlobal \u306E\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3092\u4FDD\u6301\n this.__globalObj = null;\n this.__module = {}; // require\u306A\u3069\u3067\u53D6\u308A\u8FBC\u3093\u3060\u30E2\u30B8\u30E5\u30FC\u30EB\u306E\u4E00\u89A7\n this.pluginFunclist = {}; // \u30D7\u30E9\u30B0\u30A4\u30F3\u3067\u5B9A\u7FA9\u3055\u308C\u305F\u95A2\u6570\n this.funclist = this.newVaiables(); // \u30D7\u30E9\u30B0\u30A4\u30F3\u3067\u5B9A\u7FA9\u3055\u308C\u305F\u95A2\u6570 + \u30E6\u30FC\u30B6\u30FC\u304C\u5B9A\u7FA9\u3057\u305F\u95A2\u6570\n this.moduleExport = this.newVaiables();\n this.pluginfiles = {}; // \u53D6\u308A\u8FBC\u3093\u3060\u30D5\u30A1\u30A4\u30EB\u4E00\u89A7\n this.commandlist = new Set(); // \u30D7\u30E9\u30B0\u30A4\u30F3\u3067\u5B9A\u7FA9\u3055\u308C\u305F\u5B9A\u6570\u30FB\u5909\u6570\u30FB\u95A2\u6570\u306E\u540D\u524D\n this.nakoFuncList = this.newVaiables(); // __v1\u306B\u914D\u7F6E\u3059\u308BJavaScript\u306E\u30B3\u30FC\u30C9\u3067\u5B9A\u7FA9\u3055\u308C\u305F\u95A2\u6570\n this.eventList = []; // \u5B9F\u884C\u524D\u306B\u74B0\u5883\u3092\u5909\u66F4\u3059\u308B\u305F\u3081\u306E\u30A4\u30D9\u30F3\u30C8\n this.codeGenerateor = {}; // \u30B3\u30FC\u30C9\u30B8\u30A7\u30CD\u30EC\u30FC\u30BF\n this.debugOption = { useDebug: false, waitTime: 0 };\n this.logger = new NakoLogger();\n this.filename = 'main.nako3';\n /**\n * \u53D6\u308A\u8FBC\u307F\u6587\u3092\u7F6E\u63DB\u3059\u308B\u305F\u3081\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3002\n * \u6B63\u898F\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u540D\u304C\u30AD\u30FC\u306B\u306A\u308A\u3001\u53D6\u308A\u8FBC\u307F\u6587\u306E\u5F15\u6570\u306B\u6307\u5B9A\u3055\u308C\u305F\u6B63\u898F\u5316\u3055\u308C\u3066\u3044\u306A\u3044\u30D5\u30A1\u30A4\u30EB\u540D\u306Falias\u306B\u5165\u308C\u3089\u308C\u308B\u3002\n * JavaScript\u30D5\u30A1\u30A4\u30EB\u306B\u3088\u308B\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u5834\u5408\u3001content\u306F\u7A7A\u6587\u5B57\u5217\u3002\n * funclist\u306F\u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u30CF\u30A4\u30E9\u30A4\u30C8\u306E\u9AD8\u901F\u5316\u306E\u305F\u3081\u306B\u4E8B\u524D\u306B\u53D6\u308A\u51FA\u3057\u305F\u3001\u30D5\u30A1\u30A4\u30EB\u304C\u5B9A\u7FA9\u3059\u308B\u95A2\u6570\u540D\u306E\u30EA\u30B9\u30C8\u3002\n */\n this.dependencies = {};\n this.usedFuncs = new Set();\n this.numFailures = 0;\n if (options.useBasicPlugin) {\n this.addBasicPlugins();\n }\n // \u5FC5\u8981\u306A\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u899A\u3048\u3066\u304A\u304F\n this.prepare = NakoPrepare.getInstance();\n this.parser = new NakoParser(this.logger);\n this.lexer = new NakoLexer(this.logger);\n // \u95A2\u6570\u4E00\u89A7\u3092\u8A2D\u5B9A\n this.lexer.setFuncList(this.funclist);\n this.lexer.setModuleExport(this.moduleExport);\n // link for plysin_system::\u4E88\u7D04\u8A9E\u4E00\u89A7\u53D6\u5F97/\u52A9\u8A5E\u4E00\u89A7\u53D6\u5F97\n this.reservedWords = JSON.parse(JSON.stringify(this.lexer.reservedWords)); // \u5916\u90E8\u516C\u958B\u7528\u306E\u30C7\u30FC\u30BF\u306A\u306E\u3067\u8907\u88FD\u3057\u3066\u4FDD\u6301\u3059\u308B\n this.josiList = JSON.parse(JSON.stringify(this.lexer.josiList));\n }\n /** \u30E2\u30B8\u30E5\u30FC\u30EB(\u540D\u524D\u7A7A\u9593)\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B */\n getModList() {\n return this.lexer.modList;\n }\n getLogger() {\n return this.logger;\n }\n getNakoFuncList() {\n return this.nakoFuncList;\n }\n getNakoFunc(name) {\n return this.nakoFuncList.get(name);\n }\n getPluginfiles() {\n return this.pluginfiles;\n }\n /**\n * \u57FA\u672C\u7684\u306A\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u8FFD\u52A0\u3059\u308B\n */\n addBasicPlugins() {\n this.addPlugin(PluginSystem);\n this.addPlugin(PluginMath);\n this.addPlugin(PluginPromise);\n this.addPlugin(PluginTest);\n this.addPlugin(PluginCSV);\n this.addPlugin(PluginTOML);\n }\n /**\n * logger\u3092\u65B0\u3057\u3044\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3067\u7F6E\u304D\u63DB\u3048\u308B\u3002\n */\n replaceLogger() {\n const logger = this.lexer.logger = this.parser.logger = this.logger = new NakoLogger();\n return logger;\n }\n /**\n * \u30D5\u30A1\u30A4\u30EB\u5185\u306Erequire\u6587\u306E\u4F4D\u7F6E\u3092\u5217\u6319\u3059\u308B\u3002\u51FA\u529B\u306E\u914D\u5217\u306Fstart\u3067\u30BD\u30FC\u30C8\u3055\u308C\u3066\u3044\u308B\u3002\n * @param {Token[]} tokens rawtokenize\u306E\u51FA\u529B\n */\n static listRequireStatements(tokens) {\n const requireStatements = [];\n for (let i = 0; i + 2 < tokens.length; i++) {\n // not (string|string_ex) '\u53D6\u308A\u8FBC\u307F'\n if (!(tokens[i].type === 'not' &&\n (tokens[i + 1].type === 'string' || tokens[i + 1].type === 'string_ex') &&\n tokens[i + 2].value === '\u53D6\u8FBC')) {\n continue;\n }\n // \u53D6\u308A\u8FBC\u3080\u30E9\u30A4\u30D6\u30E9\u30EA\n let filename = String(tokens[i + 1].value) + '';\n // \u5168\u89D2\u30B3\u30ED\u30F3\u300C\uFF1A\u300D\u3092\u534A\u89D2\u30B3\u30ED\u30F3\u300C:\u300D\u306B\u6B63\u898F\u5316\u3059\u308B\uFF08\u300C\u8CAF\u8535\u5EAB\uFF1A\u300D\u300C\u62E1\u5F35\u30D7\u30E9\u30B0\u30A4\u30F3\uFF1A\u300D\u306E\u8A18\u6CD5\u306B\u5BFE\u5FDC #2282\uFF09\n filename = filename.replace(/^(\u8CAF\u8535\u5EAB|\u62E1\u5F35\u30D7\u30E9\u30B0\u30A4\u30F3)\uFF1A/, '$1:');\n // \u300E\u53D6\u308A\u8FBC\u3080\u300F\u6587\u3067\u300C\u62E1\u5F35\u30D7\u30E9\u30B0\u30A4\u30F3:\u300D\u6A5F\u69CB\u3092\u8FFD\u52A0\u3059\u308B #139\n // (ex) !\u300E\u8CAF\u8535\u5EAB:ojyo-sama.nako3\u300F\u3092\u53D6\u308A\u8FBC\u3080 \u2192 https://n3s.nadesi.com/plain/ojyo-sama.nako3\n if (filename.startsWith('\u8CAF\u8535\u5EAB:') || filename.startsWith('\u8CAF\u8535\u5EAB\uFF1A')) {\n filename = `https://n3s.nadesi.com/plain/${filename.substring(4)}`;\n }\n // (ex) !\u300E\u62E1\u5F35\u30D7\u30E9\u30B0\u30A4\u30F3:music.js@1.0.2\u300F\u3092\u53D6\u308A\u8FBC\u3080 \u2192 https://cdn.jsdelivr.net/npm/nadesiko3-music@1.0.2/nadesiko3-music.js\n if (filename.startsWith('\u62E1\u5F35\u30D7\u30E9\u30B0\u30A4\u30F3:') || filename.startsWith('\u62E1\u5F35\u30D7\u30E9\u30B0\u30A4\u30F3\uFF1A')) {\n const name = filename.substring('\u62E1\u5F35\u30D7\u30E9\u30B0\u30A4\u30F3:'.length);\n const m = name.match(/^([a-zA-Z0-9_-]+)\\.(js|mjs|nako3)(@[0-9.]+)?$/);\n if (m) {\n let basename = m[1];\n const ext = m[2];\n const version = m[3] || '@latest';\n if (ext === 'js' || ext === 'mjs') {\n // JS\u30D7\u30E9\u30B0\u30A4\u30F3\n if (!basename.startsWith('nadesiko3-')) {\n basename = `nadesiko3-${basename}`;\n }\n filename = `https://cdn.jsdelivr.net/npm/${basename}${version}/${basename}.${ext}`;\n }\n else {\n // \u306A\u3067\u3057\u30533\u30D7\u30E9\u30B0\u30A4\u30F3\n filename = `https://n3s.nadesi.com/plain/${basename}.${ext}`;\n }\n }\n else {\n throw new NakoImportError('\u300E\u53D6\u8FBC\u300F\u306E\u6307\u5B9A\u30A8\u30E9\u30FC\u3002\u300E\u62E1\u5F35\u30D7\u30E9\u30B0\u30A4\u30F3:(\u30D5\u30A1\u30A4\u30EB\u540D).(js|nako3)(@ver)\u300F\u306E\u66F8\u5F0F\u3067\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002', tokens[i].file, tokens[i].line);\n }\n }\n // push\n requireStatements.push({\n ...tokens[i],\n start: i,\n end: i + 3,\n value: filename,\n firstToken: tokens[i],\n lastToken: tokens[i + 2]\n });\n i += 2;\n }\n return requireStatements;\n }\n /**\n * \u30D7\u30ED\u30B0\u30E9\u30E0\u304C\u4F9D\u5B58\u3059\u308B\u30D5\u30A1\u30A4\u30EB\u3092\u518D\u5E30\u7684\u306B\u53D6\u5F97\u3059\u308B\u3002\n * - \u4F9D\u5B58\u3059\u308B\u30D5\u30A1\u30A4\u30EB\u304CJavaScript\u30D5\u30A1\u30A4\u30EB\u306E\u5834\u5408\u3001\u305D\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u5B9F\u884C\u3057\u3066\u8A55\u4FA1\u7D50\u679C\u3092this.addPluginFile\u306B\u6E21\u3059\u3002\n * - \u4F9D\u5B58\u3059\u308B\u30D5\u30A1\u30A4\u30EB\u304C\u306A\u3067\u3057\u3053\u8A00\u8A9E\u306E\u5834\u5408\u3001\u30D5\u30A1\u30A4\u30EB\u306E\u4E2D\u8EAB\u3092\u53D6\u5F97\u3057\u3066\u5909\u6570\u306B\u4FDD\u5B58\u3057\u3001\u518D\u5E30\u3059\u308B\u3002\n *\n * @param {string} code\n * @param {string} filename\n * @param {string} preCode\n * @param {LoaderTool} tools \u5B9F\u884C\u74B0\u5883 (\u30D6\u30E9\u30A6\u30B6 or Node.js) \u306B\u3088\u3063\u3066\u5916\u90E8\u30D5\u30A1\u30A4\u30EB\u306E\u53D6\u5F97\u30FB\u5B9F\u884C\u65B9\u6CD5\u306F\u7570\u306A\u308B\u305F\u3081\u3001\u5F15\u6570\u3067\u305D\u308C\u3089\u3092\u884C\u3046\u95A2\u6570\u3092\u53D7\u3051\u53D6\u308B\u3002\n * - resolvePath \u306F\u6307\u5B9A\u3057\u305F\u540D\u524D\u3092\u3082\u3064\u30D5\u30A1\u30A4\u30EB\u3092\u691C\u7D22\u3057\u3001\u6B63\u898F\u5316\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u8FD4\u3059\u95A2\u6570\u3002\u8FD4\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u540D\u306FreadNako3\u304BreadJs\u306E\u5F15\u6570\u306B\u306A\u308B\u3002\n * - readNako3\u306F\u6307\u5B9A\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u306E\u4E2D\u8EAB\u3092\u8FD4\u3059\u95A2\u6570\u3002\n * - readJs\u306F\u6307\u5B9A\u3057\u305F\u30D5\u30A1\u30A4\u30EB\u3092JavaScript\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u3068\u3057\u3066\u5B9F\u884C\u3057\u3001`export default` \u3067\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3055\u308C\u305F\u5024\u3092\u8FD4\u3059\u95A2\u6570\u3002\n * @returns {Promise<unknown> | void}\n * @protected\n */\n _loadDependencies(code, filename, preCode, tools) {\n const dependencies = {};\n const compiler = new NakoCompiler({ useBasicPlugin: true });\n /**\n * @param {any} item\n * @param {any} tasks\n */\n const loadJS = (item, tasks) => {\n // js\u306A\u3089\u30D7\u30E9\u30B0\u30A4\u30F3\u3068\u3057\u3066\u8AAD\u307F\u8FBC\u3080\u3002(ESM\u3067\u306F\u5FC5\u305A\u52D5\u7684\u306B\u8AAD\u3080)\n const obj = tools.readJs(item.filePath, item.firstToken);\n tasks.push(obj.task.then((res) => {\n const pluginFuncs = res();\n this.addPluginFromFile(item.filePath, pluginFuncs);\n dependencies[item.filePath].funclist = pluginFuncs;\n dependencies[item.filePath].moduleExport = {};\n dependencies[item.filePath].addPluginFile = () => { this.addPluginFromFile(item.filePath, pluginFuncs); };\n }));\n };\n const loadNako3 = (item, tasks) => {\n // nako3\u306A\u3089\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u3093\u3067dependencies\u306B\u4FDD\u5B58\u3059\u308B\u3002\n const content = tools.readNako3(item.filePath, item.firstToken);\n const registerFile = (code) => {\n // \u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u30CF\u30A4\u30E9\u30A4\u30C8\u306E\u9AD8\u901F\u5316\u306E\u305F\u3081\u306B\u3001\u4E8B\u524D\u306B\u30D5\u30A1\u30A4\u30EB\u304C\u5B9A\u7FA9\u3059\u308B\u95A2\u6570\u540D\u306E\u30EA\u30B9\u30C8\u3092\u53D6\u308A\u51FA\u3057\u3066\u304A\u304F\u3002\n // preDefineFunc\u306F\u30C8\u30FC\u30AF\u30F3\u5217\u306B\u5909\u66F4\u3092\u52A0\u3048\u308B\u305F\u3081\u3001\u4E8B\u524D\u306B\u30AF\u30ED\u30FC\u30F3\u3057\u3066\u304A\u304F\u3002\n // \u300C\u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u8A2D\u5B9A\u300D\u3092\u884C\u3046 (#956)\n const modName = NakoLexer.filenameToModName(item.filePath);\n code = `\u300E${modName}\u300F\u306B\u540D\u524D\u7A7A\u9593\u8A2D\u5B9A;\u300E${modName}\u300F\u306B\u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u8A2D\u5B9A;` + code + ';\u540D\u524D\u7A7A\u9593\u30DD\u30C3\u30D7;';\n const tokens = this.rawtokenize(code, 0, item.filePath);\n dependencies[item.filePath].tokens = tokens;\n const funclist = new Map();\n const moduleexport = new Map();\n NakoLexer.preDefineFunc(cloneAsJSON(tokens), this.logger, funclist, moduleexport);\n dependencies[item.filePath].funclist = funclist;\n dependencies[item.filePath].moduleExport = moduleexport;\n // \u518D\u5E30\n return loadRec(code, item.filePath, '');\n };\n // \u53D6\u308A\u8FBC\u307F\u69CB\u6587\u306B\u304A\u3051\u308B\u554F\u984C\u3092\u6E1B\u3089\u3059\u305F\u3081\u3001\u5FC5\u305A\u975E\u540C\u671F\u3067\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u8AAD\u307F\u8FBC\u3080\u4ED5\u69D8\u3068\u3057\u305F #1219\n tasks.push(content.task.then((res) => registerFile(res)));\n };\n const loadRec = (code, filename, preCode) => {\n const tasks = [];\n // \u53D6\u308A\u8FBC\u307F\u304C\u5FC5\u8981\u306A\u60C5\u5831\u4E00\u89A7\u3092\u8ABF\u3079\u308B(\u30C8\u30FC\u30AF\u30F3\u5206\u5272\u3057\u3066\u3001\u53D6\u308A\u8FBC\u307F\u30BF\u30B0\u3092\u5F97\u308B)\n const tags = NakoCompiler.listRequireStatements(compiler.rawtokenize(code, 0, filename, preCode));\n // \u30D1\u30B9\u3092\u89E3\u6C7A\u3059\u308B\n const tagsResolvePath = tags.map((v) => ({ ...v, ...tools.resolvePath(v.value, v.firstToken, filename) }));\n // \u53D6\u308A\u8FBC\u307F\u958B\u59CB\n for (const item of tagsResolvePath) {\n // 2\u56DE\u76EE\u4EE5\u964D\u306E\u8AAD\u307F\u8FBC\u307F\n // eslint-disable-next-line no-prototype-builtins\n if (dependencies.hasOwnProperty(item.filePath)) {\n dependencies[item.filePath].alias.add(item.value);\n continue;\n }\n // \u521D\u56DE\u306E\u8AAD\u307F\u8FBC\u307F\n dependencies[item.filePath] = { tokens: [], alias: new Set([item.value]), addPluginFile: () => { }, funclist: {}, moduleExport: {} };\n if (item.type === 'js' || item.type === 'mjs') {\n loadJS(item, tasks);\n }\n else if (item.type === 'nako3') {\n loadNako3(item, tasks);\n }\n else {\n throw new NakoImportError(`\u30D5\u30A1\u30A4\u30EB\u300E${String(item.value)}\u300F\u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093\u3002\u30D5\u30A1\u30A4\u30EB\u304C\u5B58\u5728\u3057\u306A\u3044\u304B\u672A\u5BFE\u5FDC\u306E\u62E1\u5F35\u5B50\u3067\u3059\u3002`, item.firstToken.file, item.firstToken.line);\n }\n }\n if (tasks.length > 0) {\n return Promise.all(tasks);\n }\n return undefined;\n };\n try {\n const result = loadRec(code, filename, preCode);\n // \u975E\u540C\u671F\u306A\u5834\u5408\u306E\u30A8\u30E9\u30FC\u30CF\u30F3\u30C9\u30EA\u30F3\u30B0\n if (result !== undefined) {\n result.catch((err) => {\n // \u8AAD\u307F\u8FBC\u307F\u306B\u5931\u6557\u3057\u305F\u3089\u51E6\u7406\u3092\u4E2D\u65AD\u3059\u308B\n this.logger.error(err.msg);\n this.numFailures++;\n });\n }\n // \u3059\u3079\u3066\u304C\u7D42\u308F\u3063\u3066\u304B\u3089this.dependencies\u306B\u4EE3\u5165\u3059\u308B\u3002\u305D\u3046\u3057\u306A\u3044\u3068\u3001\u300C\u5B9F\u884C\u300D\u30DC\u30BF\u30F3\u3092\u9023\u6253\u3057\u305F\u5834\u5408\u306A\u3069\u3001\n // loadDependencies() \u304C\u4E26\u5217\u5B9F\u884C\u3055\u308C\u308B\u3068\u304D\u306B\u6B63\u3057\u304F\u52D5\u4F5C\u3057\u306A\u3044\u3002\n this.dependencies = dependencies;\n return result;\n }\n catch (err) {\n // \u540C\u671F\u51E6\u7406\u3067\u306F\u7D20\u76F4\u306B\u4F8B\u5916\u3092\u6295\u3052\u308B\n this.logger.error(String(err));\n throw err;\n }\n }\n /**\n * \u30B3\u30FC\u30C9\u3092\u5358\u8A9E\u306B\u5206\u5272\u3059\u308B\n * @param code \u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\n * @param line \u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u306E\u884C\u756A\u53F7\n * @param filename\n * @param preCode\n * @returns \u30C8\u30FC\u30AF\u30F3\u306E\u30EA\u30B9\u30C8\n */\n rawtokenize(code, line, filename, preCode = '') {\n if (!code.startsWith(preCode)) {\n throw new Error('code\u306E\u5148\u982D\u306B\u306FpreCode\u3092\u542B\u3081\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n // \u540D\u524D\u7A7A\u9593\u306E\u30E2\u30B8\u30E5\u30FC\u30EB\u30EA\u30B9\u30C8\u306B\u81EA\u8EAB\u3092\u8FFD\u52A0\n const modName = NakoLexer.filenameToModName(filename);\n const modList = this.getModList();\n if (modList.indexOf(modName) < 0) {\n modList.unshift(modName);\n }\n // \u5168\u89D2\u534A\u89D2\u306E\u7D71\u4E00\u51E6\u7406\n const preprocessed = this.prepare.convert(code);\n const tokenizationSourceMapping = new SourceMappingOfTokenization(code.length, preprocessed);\n const indentationSyntaxSourceMapping = new SourceMappingOfIndentSyntax(code, [], []);\n const offsetToLineColumn = new OffsetToLineColumn(code);\n // \u30C8\u30FC\u30AF\u30F3\u5206\u5272\n let tokens;\n try {\n tokens = this.lexer.tokenize(preprocessed.map((v) => v.text).join(''), line, filename);\n }\n catch (err) {\n if (!(err instanceof InternalLexerError)) {\n throw err;\n }\n // \u30A8\u30E9\u30FC\u4F4D\u7F6E\u3092\u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u4E0A\u306E\u4F4D\u7F6E\u306B\u5909\u63DB\u3057\u3066\u8FD4\u3059\n const dest = indentationSyntaxSourceMapping.map(tokenizationSourceMapping.map(err.preprocessedCodeStartOffset), tokenizationSourceMapping.map(err.preprocessedCodeEndOffset));\n const line = dest.startOffset === null ? err.line : offsetToLineColumn.map(dest.startOffset, false).line;\n const map = subtractSourceMapByPreCodeLength({ ...dest, line }, preCode);\n throw new NakoLexerError(err.msg, map.startOffset, map.endOffset, map.line, filename);\n }\n // DNCL ver2 (core #41)\n tokens = convertDNCL2(tokens);\n // DNCL ver1 (#1140)\n tokens = convertDNCL(tokens);\n // \u30A4\u30F3\u30C7\u30F3\u30C8\u69CB\u6587\u3092\u5909\u63DB #596\n tokens = convertIndentSyntax(tokens);\n // \u30A4\u30F3\u30E9\u30A4\u30F3\u30A4\u30F3\u30C7\u30F3\u30C8\u3092\u5909\u63DB #1215\n tokens = convertInlineIndent(tokens);\n // \u30BD\u30FC\u30B9\u30B3\u30FC\u30C9\u4E0A\u306E\u4F4D\u7F6E\u306B\u5909\u63DB\n tokens = tokens.map((token) => {\n const dest = indentationSyntaxSourceMapping.map(tokenizationSourceMapping.map(token.preprocessedCodeOffset || 0), tokenizationSourceMapping.map((token.preprocessedCodeOffset || 0) + (token.preprocessedCodeLength || 0)));\n let line = token.line;\n let column = 0;\n if (token.type === 'eol' && dest.endOffset !== null) {\n // eol\u306Fnako_gen\u3067 `line = ${eolToken.line};` \u306B\u5909\u63DB\u3055\u308C\u308B\u305F\u3081\u3001\n // \u884C\u672B\u306Eeol\u306Eline\u306F\u6B21\u306E\u884C\u306E\u884C\u6570\u3092\u8868\u3059\u5FC5\u8981\u304C\u3042\u308B\u3002\n const out = offsetToLineColumn.map(dest.endOffset, false);\n line = out.line;\n column = out.column;\n }\n else if (dest.startOffset !== null) {\n const out = offsetToLineColumn.map(dest.startOffset, false);\n line = out.line;\n column = out.column;\n }\n return {\n ...token,\n ...subtractSourceMapByPreCodeLength({ line, column, startOffset: dest.startOffset, endOffset: dest.endOffset }, preCode),\n rawJosi: token.josi\n };\n });\n return tokens;\n }\n /**\n * \u5358\u8A9E\u306E\u5C5E\u6027\u3092\u69CB\u6587\u89E3\u6790\u306B\u5148\u7ACB\u3061\u88DC\u6B63\u3059\u308B\n * @param {Token[]} tokens \u30C8\u30FC\u30AF\u30F3\u306E\u30EA\u30B9\u30C8\n * @param {boolean} isFirst \u6700\u521D\u306E\u547C\u3073\u51FA\u3057\u304B\u3069\u3046\u304B\n * @param {string} filename\n * @returns \u30B3\u30FC\u30C9 (\u306A\u3067\u3057\u3053)\n */\n converttoken(tokens, isFirst, filename) {\n const tok = this.lexer.replaceTokens(tokens, isFirst, filename);\n return tok;\n }\n /**\n * \u74B0\u5883\u306E\u30EA\u30BB\u30C3\u30C8\n * {NakoResetOption|undefined}\n */\n reset(options = undefined) {\n if (!options || options.needToClearPlugin) {\n // (\u30E1\u30E2) #1245\n // \u901A\u5E38\u3001\u30EA\u30BB\u30C3\u30C8\u51E6\u7406\u3067\u306F\u3001\u30D7\u30E9\u30B0\u30A4\u30F3\u306E!\u30AF\u30EA\u30A2\u3092\u547C\u3076\u3002\n // \u3057\u304B\u3057\u3001\u30A8\u30C7\u30A3\u30BF\u3067\u306F\u30AF\u30EA\u30A2\u30A4\u30D9\u30F3\u30C8\u3092\u547C\u3076\u3068\u3001\u6642\u8A08\u306A\u3069\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u304C\u6B62\u307E\u3063\u3066\u3057\u307E\u3046\n // \u305D\u306E\u305F\u3081\u3001\u4F8B\u5916\u7684\u306B\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u6307\u5B9A\u3059\u308B\u3068\u3001\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30AF\u30EA\u30A2\u30A4\u30D9\u30F3\u30C8\u3092\u547C\u3070\u306A\u3044\n try {\n this.clearPlugins();\n }\n catch (_) {\n // pass\n }\n }\n /**\n * \u306A\u3067\u3057\u3053\u306E\u30ED\u30FC\u30AB\u30EB\u5909\u6570\u3092\u30B9\u30BF\u30C3\u30AF\u3067\u7BA1\u7406\n * __varslist[0] \u30D7\u30E9\u30B0\u30A4\u30F3\u9818\u57DF\n * __varslist[1] \u306A\u3067\u3057\u3053\u30B0\u30ED\u30FC\u30D0\u30EB\u9818\u57DF\n * __varslist[2] \u6700\u521D\u306E\u30ED\u30FC\u30AB\u30EB\u5909\u6570 ( == __vars }\n */\n this.__varslist = [this.__varslist[0], this.newVaiables(), this.newVaiables()];\n this.__v0 = this.__varslist[0]; // alias of __varslist[0]\n this.__v1 = this.__varslist[1]; // alias of __varslist[1]\n this.__vars = this.__varslist[2]; // alias of __varslist[2]\n this.__locals = this.newVaiables();\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u547D\u4EE4\u4EE5\u5916\u3092\u524A\u9664\u3059\u308B\u3002\n this.funclist = new Map();\n for (const name of this.__v0.keys()) {\n const original = this.pluginFunclist[name]; // record\n if (!original) {\n continue;\n }\n this.funclist.set(name, JSON.parse(JSON.stringify(original)));\n }\n this.lexer.setFuncList(this.funclist);\n this.moduleExport = new Map();\n this.lexer.setModuleExport(this.moduleExport);\n this.logger.clear();\n }\n /**\n * type\u304Ccode\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u5358\u8A9E\u306B\u5206\u5272\u3059\u308B\u305F\u3081\u306E\u51E6\u7406\n * @param {string} code\n * @param {number} line\n * @param {string} filename\n * @param {number | null} startOffset\n * @returns\n * @private\n */\n lexCodeToken(code, line, filename, startOffset) {\n // \u5358\u8A9E\u306B\u5206\u5272\n let tokens = this.rawtokenize(code, line, filename, '');\n // \u6587\u5B57\u5217\u5185\u4F4D\u7F6E\u304B\u3089\u30D5\u30A1\u30A4\u30EB\u5185\u4F4D\u7F6E\u3078\u5909\u63DB\n if (startOffset === null) {\n for (const token of tokens) {\n token.startOffset = undefined;\n token.endOffset = undefined;\n }\n }\n else {\n for (const token of tokens) {\n if (token.startOffset !== undefined) {\n token.startOffset += startOffset;\n }\n if (token.endOffset !== undefined) {\n token.endOffset += startOffset;\n }\n }\n }\n // convertToken\u3067\u6D88\u3055\u308C\u308B\u30B3\u30E1\u30F3\u30C8\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u6B8B\u3059\n const commentTokens = tokens.filter((t) => t.type === 'line_comment' || t.type === 'range_comment')\n .map((v) => ({ ...v })); // clone\n tokens = this.converttoken(tokens, false, filename);\n return { tokens, commentTokens };\n }\n /**\n * \u518D\u5E30\u7684\u306Brequire\u6587\u3092\u7F6E\u63DB\u3059\u308B\u3002\n * .js\u3067\u3042\u308C\u3070\u524A\u9664\u3057\u3001.nako3\u3067\u3042\u308C\u3070\u305D\u306E\u30D5\u30A1\u30A4\u30EB\u306E\u30C8\u30FC\u30AF\u30F3\u5217\u3067\u7F6E\u63DB\u3059\u308B\u3002\n * @param {TokenWithSourceMap[]} tokens\n * @param {Set<string>} [includeGuard]\n * @returns {Token[]} \u524A\u9664\u3055\u308C\u305F\u53D6\u308A\u8FBC\u307F\u6587\u306E\u30C8\u30FC\u30AF\u30F3\n */\n replaceRequireStatements(tokens, includeGuard = new Set()) {\n /** @type {TokenWithSourceMap[]} */\n const deletedTokens = [];\n for (const r of NakoCompiler.listRequireStatements(tokens).reverse()) {\n // C\u8A00\u8A9E\u306Einclude guard\u3068\u540C\u3058\u4ED5\u7D44\u307F\u3067\u7121\u9650\u30EB\u30FC\u30D7\u3092\u9632\u3050\u3002\n if (includeGuard.has(r.value)) {\n deletedTokens.push(...tokens.splice((r.start || 0), (r.end || 0) - (r.start || 0)));\n continue;\n }\n const filePath = Object.keys(this.dependencies).find((key) => this.dependencies[key].alias.has(r.value));\n if (filePath === undefined) {\n if (!r.firstToken) {\n throw new Error(`\u30D5\u30A1\u30A4\u30EB\u300E${String(r.value)}\u300F\u304C\u8AAD\u307F\u8FBC\u307E\u308C\u3066\u3044\u307E\u305B\u3093\u3002`);\n }\n throw new NakoLexerError(`\u30D5\u30A1\u30A4\u30EB\u300E${String(r.value)}\u300F\u304C\u8AAD\u307F\u8FBC\u307E\u308C\u3066\u3044\u307E\u305B\u3093\u3002`, (r.firstToken).startOffset || 0, (r.firstToken).endOffset || 0, (r.firstToken).line, (r.firstToken).file);\n }\n this.dependencies[filePath].addPluginFile();\n const children = cloneAsJSON(this.dependencies[filePath].tokens);\n includeGuard.add(r.value);\n deletedTokens.push(...this.replaceRequireStatements(children, includeGuard));\n deletedTokens.push(...tokens.splice(r.start || 0, (r.end || 0) - (r.start || 0), ...children));\n }\n return deletedTokens;\n }\n /**\n * replaceRequireStatements\u306E\u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u30CF\u30A4\u30E9\u30A4\u30C8\u7528\u306E\u5B9F\u88C5\u3002\n * @param {TokenWithSourceMap[]} tokens\n * @returns {TokenWithSourceMap[]} \u524A\u9664\u3055\u308C\u305F\u53D6\u308A\u8FBC\u307F\u6587\u306E\u30C8\u30FC\u30AF\u30F3\n */\n removeRequireStatements(tokens) {\n /** @type {TokenWithSourceMap[]} */\n const deletedTokens = [];\n for (const r of NakoCompiler.listRequireStatements(tokens).reverse()) {\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u547D\u4EE4\u306E\u30B7\u30F3\u30BF\u30C3\u30AF\u30B9\u30CF\u30A4\u30E9\u30A4\u30C8\u306E\u305F\u3081\u306B\u3001addPluginFile\u3092\u547C\u3093\u3067\u95A2\u6570\u306E\u30EA\u30B9\u30C8\u3092this.dependencies[filePath].funclist\u306B\u4FDD\u5B58\u3055\u305B\u308B\u3002\n const filePath = Object.keys(this.dependencies).find((key) => this.dependencies[key].alias.has(r.value));\n if (filePath !== undefined) {\n this.dependencies[filePath].addPluginFile();\n }\n // \u5168\u3066\u306E\u53D6\u308A\u8FBC\u307F\u6587\u3092\u524A\u9664\u3059\u308B\u3002\u305D\u3046\u3057\u306A\u3044\u3068\u30C8\u30FC\u30AF\u30F3\u5316\u306B\u6642\u9593\u304C\u304B\u304B\u308A\u3059\u304E\u308B\u3002\n deletedTokens.push(...tokens.splice(r.start || 0, (r.end || 0) - (r.start || 0)));\n }\n return deletedTokens;\n }\n /** \u5B57\u53E5\u89E3\u6790\u3092\u884C\u3046 */\n lex(code, filename = 'main.nako3', preCode = '', syntaxHighlighting = false) {\n // \u5358\u8A9E\u306B\u5206\u5272\n let tokens = this.rawtokenize(code, 0, filename, preCode);\n // require\u6587\u3092\u518D\u5E30\u7684\u306B\u7F6E\u63DB\u3059\u308B\n const requireStatementTokens = syntaxHighlighting ? this.removeRequireStatements(tokens) : this.replaceRequireStatements(tokens, undefined);\n for (const t of requireStatementTokens) {\n if (t.type === 'word' || t.type === 'not') {\n t.type = 'require';\n }\n }\n if (requireStatementTokens.length >= 3) {\n // modList \u3092\u66F4\u65B0\n for (let i = 0; i < requireStatementTokens.length; i += 3) {\n let modName = requireStatementTokens[i + 1].value;\n modName = NakoLexer.filenameToModName(modName);\n if (this.lexer.modList.indexOf(modName) < 0) {\n this.lexer.modList.push(modName);\n }\n }\n }\n // convertToken\u3067\u6D88\u3055\u308C\u308B\u30B3\u30E1\u30F3\u30C8\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u6B8B\u3059\n const commentTokens = tokens.filter((t) => t.type === 'line_comment' || t.type === 'range_comment')\n .map((v) => ({ ...v })); // clone\n tokens = this.converttoken(tokens, true, filename);\n // 'string_ex'\u30C8\u30FC\u30AF\u30F3\u304B\u3089\u5909\u63DB\u3055\u308C\u305F'code'\u30C8\u30FC\u30AF\u30F3\u3092\u5B57\u53E5\u89E3\u6790\u3059\u308B\n for (let i = 0; i < tokens.length; i++) {\n if (tokens[i] && tokens[i].type === 'code') {\n const children = this.lexCodeToken(tokens[i].value, tokens[i].line, filename, tokens[i].startOffset || 0);\n commentTokens.push(...children.commentTokens);\n tokens.splice(i, 1, ...children.tokens);\n i--;\n }\n }\n this.logger.trace('--- lex ---\\n' + JSON.stringify(tokens, null, 2));\n return { commentTokens, tokens, requireTokens: requireStatementTokens };\n }\n /**\n * \u30B3\u30FC\u30C9\u3092\u30D1\u30FC\u30B9\u3057\u3066AST\u306B\u3059\u308B\n */\n parse(code, filename, preCode = '') {\n // \u95A2\u6570\u30EA\u30B9\u30C8\u3092\u5B57\u53E5\u89E3\u6790\u3068\u69CB\u6587\u89E3\u6790\u306B\u767B\u9332\n this.lexer.setFuncList(this.funclist);\n this.parser.setFuncList(this.funclist);\n // \u95A2\u6570\u30EA\u30B9\u30C8\u3092\u5B57\u53E5\u89E3\u6790\u3068\u69CB\u6587\u89E3\u6790\u306B\u767B\u9332\n this.lexer.setModuleExport(this.moduleExport);\n this.parser.setModuleExport(this.moduleExport);\n // \u5B57\u53E5\u89E3\u6790\u3092\u884C\u3046\n const lexerOutput = this.lex(code, filename, preCode);\n // \u69CB\u6587\u6728\u3092\u4F5C\u6210\n let ast;\n try {\n this.parser.genMode = 'sync'; // set default\n ast = this.parser.parse(lexerOutput.tokens, filename);\n }\n catch (err) {\n if (typeof err.startOffset !== 'number') {\n throw NakoSyntaxError.fromNode(err.message, lexerOutput.tokens[this.parser.getIndex()]);\n }\n throw err;\n }\n // \u4F7F\u7528\u3057\u305F\u30B7\u30B9\u30C6\u30E0\u95A2\u6570\u306E\u4E00\u89A7\u3092 this.usedFuns \u306B\u5165\u308C\u308B(\u30A8\u30C7\u30A3\u30BF\u306A\u3069\u3067\u5229\u7528\u3055\u308C\u308B)\n this.usedFuncs = this.parser.usedFuncs; // \u5168\u3066\u306E\u95A2\u6570\u547C\u3073\u51FA\u3057\n this.deleteUnNakoFuncs(); // \u30B7\u30B9\u30C6\u30E0\u95A2\u6570\u4EE5\u5916\u3092\u524A\u9664\n this.logger.trace('--- ast ---\\n' + JSON.stringify(ast, null, 2));\n return ast;\n }\n getUsedFuncs(ast) {\n this.usedFuncs = new Set();\n this._getUsedFuncs(ast);\n return this.deleteUnNakoFuncs();\n }\n _getUsedFuncs(ast) {\n if (!ast) {\n return;\n }\n if ((ast.type === 'func' || ast.type === 'func_pointer') && ast.name) {\n this.usedFuncs.add(ast.name);\n }\n else if (ast.blocks) { // \u30D7\u30ED\u30D1\u30C6\u30A3\u306Bblocks\u3092\u542B\u3093\u3067\u3044\u308B\uFF1F\n for (const a of ast.blocks) {\n this._getUsedFuncs(a);\n }\n }\n }\n deleteUnNakoFuncs() {\n for (const func of this.usedFuncs) {\n if (!this.commandlist.has(func)) {\n this.usedFuncs.delete(func);\n }\n }\n return this.usedFuncs;\n }\n /**\n * \u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u30B3\u30F3\u30D1\u30A4\u30EB\u3057\u3066\u30E9\u30F3\u30BF\u30A4\u30E0\u7528\u306EJavaScript\u306E\u30B3\u30FC\u30C9\u3092\u8FD4\u3059\n * @param code \u30B3\u30FC\u30C9 (\u306A\u3067\u3057\u3053)\n * @param filename\n * @param isTest \u30C6\u30B9\u30C8\u304B\u3069\u3046\u304B\n * @param preCode\n */\n compile(code, filename, isTest = false, preCode = '') {\n const opt = newCompilerOptions();\n opt.testOnly = isTest;\n opt.preCode = preCode;\n const res = this.compileFromCode(code, filename, opt);\n return res.runtimeEnv;\n }\n /** parse & generate */\n compileFromCode(code, filename, options = undefined) {\n if (filename === '') {\n filename = 'main.nako3';\n }\n if (options === undefined) {\n options = newCompilerOptions();\n }\n try {\n if (options.resetEnv) {\n this.reset();\n }\n if (options.resetAll) {\n this.clearPlugins();\n }\n // onBeforeParse\n this.eventList.filter(o => o.eventName === 'beforeParse').map(e => e.callback(code));\n // parse\n const ast = this.parse(code, filename, options.preCode);\n // onBeforeGenerate\n this.eventList.filter(o => o.eventName === 'beforeGenerate').map(e => e.callback(ast));\n // generate\n const genOptions = new NakoGenOptions(options.testOnly);\n const outCode = this.generateCode(ast, genOptions);\n // onAfterGenerate\n this.eventList.filter(o => o.eventName === 'afterGenerate').map(e => e.callback(outCode));\n return outCode;\n }\n catch (e) {\n this.logger.error(e);\n throw e;\n }\n }\n /**\n * \u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u30B3\u30F3\u30D1\u30A4\u30EB\u3057\u3066JavaScript\u306E\u30B3\u30FC\u30C9\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u8FD4\u3059\n * @param ast\n * @param opt \u30C6\u30B9\u30C8\u304B\u3069\u3046\u304B\n * @param mode \u4E00\u822C\u7684\u306B 'sync' \u3092\u6307\u5B9A\n */\n generateCode(ast, opt, mode = 'sync') {\n // Select Code Generator #637\n // normal mode\n if (mode === 'sync') {\n return generateJS(this, ast, opt);\n }\n // \u5EC3\u6B62\u306E\u975E\u540C\u671F\u30E2\u30FC\u30C9 #1164\n if (mode === '\u975E\u540C\u671F\u30E2\u30FC\u30C9') {\n this.logger.error('\u300E!\u975E\u540C\u671F\u30E2\u30FC\u30C9\u300F\u306F\u5EC3\u6B62\u3055\u308C\u307E\u3057\u305F\u3002[\u8A73\u7D30](https://github.com/kujirahand/nadesiko3/issues/1164)');\n }\n // \u305D\u306E\u4ED6\u306E\u30B3\u30FC\u30C9\u30B8\u30A7\u30CD\u30EC\u30FC\u30BF(PHP\u306A\u3069)\n const genObj = this.codeGenerateor[mode];\n if (!genObj) {\n throw new Error(`\u30B3\u30FC\u30C9\u30B8\u30A7\u30CD\u30EC\u30FC\u30BF\u306E\u300C${mode}\u300D\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002`);\n }\n return genObj.generate(this, ast, opt.isTest);\n }\n /** \u30B3\u30FC\u30C9\u30B8\u30A7\u30CD\u30EC\u30FC\u30BF\u3092\u8FFD\u52A0\u3059\u308B */\n addCodeGenerator(mode, obj) {\n this.codeGenerateor[mode] = obj;\n }\n /** (\u975E\u63A8\u5968)\n * @param code \u975E\u540C\u671F\u3067\u5B9F\u884C\u3059\u308B\n * @param fname\n * @param isReset\n * @param isTest \u30C6\u30B9\u30C8\u304B\u3069\u3046\u304B\u3002string\u306E\u5834\u5408\u306F1\u3064\u306E\u30C6\u30B9\u30C8\u306E\u307F\u3002\n * @param [preCode]\n * @deprecated \u4EE3\u308F\u308A\u306BrunAsync\u30E1\u30BD\u30C3\u30C9\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002(core #52)\n */\n async _run(code, fname, isReset, isTest, preCode = '') {\n const opts = newCompilerOptions({\n resetEnv: isReset,\n resetAll: isReset,\n testOnly: isTest,\n preCode\n });\n return this._runEx(code, fname, opts);\n }\n /** \u5404\u30D7\u30E9\u30B0\u30A4\u30F3\u3092\u30EA\u30BB\u30C3\u30C8\u3059\u308B */\n clearPlugins() {\n // \u4ED6\u306B\u5B9F\u884C\u3057\u3066\u3044\u308B\u300C\u306A\u3067\u3057\u3053\u300D\u304C\u3042\u308C\u3070\u30AF\u30EA\u30A2\u3059\u308B\n this.__globals.forEach((sys) => {\n if (!sys) {\n return;\n }\n // core #56\n sys.__setSysVar('__forceClose', true);\n sys.reset();\n });\n this.__globals = []; // clear\n }\n /**\n * \u74B0\u5883\u3092\u6307\u5B9A\u3057\u3066JavaScript\u306E\u30B3\u30FC\u30C9\u3092\u5B9F\u884C\u3059\u308B\n * @param code JavaScript\u306E\u30B3\u30FC\u30C9\n * @param nakoGlobal \u5B9F\u884C\u74B0\u5883\n */\n evalJS(code, nakoGlobal) {\n this.__globalObj = nakoGlobal; // \u73FE\u5728\u306EnakoGlobal\u3092\u8A18\u9332\n this.__globalObj.lastJSCode = code;\n // \u5B9F\u884C\u524D\u306B\u74B0\u5883\u3092\u521D\u671F\u5316\u3059\u308B\u30A4\u30D9\u30F3\u30C8\u3092\u5B9F\u884C(beforeRun)\n this.eventList.filter(o => o.eventName === 'beforeRun').map(e => e.callback(nakoGlobal));\n try {\n const f = new Function(nakoGlobal.lastJSCode);\n f.apply(nakoGlobal);\n }\n catch (err) {\n // \u306A\u3067\u3057\u3053\u30B3\u30FC\u30C9\u306E\u30A8\u30E9\u30FC\u306F\u6291\u6B62\u3057\u3066\u30ED\u30B0\u306B\u306E\u307F\u8A18\u9332\n nakoGlobal.numFailures++;\n this.getLogger().error(err);\n throw err;\n }\n // \u5B9F\u884C\u5F8C\u306B\u7D42\u4E86\u30A4\u30D9\u30F3\u30C8\u3092\u5B9F\u884C(finish)\n this.eventList.filter(o => o.eventName === 'finish').map(e => e.callback(nakoGlobal));\n }\n /**\n * (\u975E\u63A8\u5968) \u540C\u671F\u7684\u306B\u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0code\u3092\u5B9F\u884C\u3059\u308B\n * @param code \u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\n * @param filename \u30D5\u30A1\u30A4\u30EB\u540D\n * @param options \u30AA\u30D7\u30B7\u30E7\u30F3\n * @returns \u5B9F\u884C\u306B\u5229\u7528\u3057\u305F\u30B0\u30ED\u30FC\u30D0\u30EB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n * @deprecated \u4EE3\u308F\u308A\u306BrunAsync\u30E1\u30BD\u30C3\u30C9\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002(core #52)\n */\n runSync(code, filename, options = undefined) {\n // \u30B3\u30F3\u30D1\u30A4\u30EB\n options = newCompilerOptions(options);\n const out = this.compileFromCode(code, filename, options);\n // \u5B9F\u884C\u524D\u306B\u74B0\u5883\u3092\u751F\u6210\n const nakoGlobal = this.getNakoGlobal(options, out.gen, filename);\n // \u5B9F\u884C\n this.evalJS(out.runtimeEnv, nakoGlobal);\n return nakoGlobal;\n }\n /**\n * \u975E\u540C\u671F\u306B\u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0code\u3092\u5B9F\u884C\u3059\u308B\n * @param code \u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\n * @param filename \u30D5\u30A1\u30A4\u30EB\u540D\n * @param options \u30AA\u30D7\u30B7\u30E7\u30F3\n * @returns \u5B9F\u884C\u306B\u5229\u7528\u3057\u305F\u30B0\u30ED\u30FC\u30D0\u30EB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n */\n async runAsync(code, filename, options = undefined) {\n // \u30B3\u30F3\u30D1\u30A4\u30EB\n options = newCompilerOptions(options);\n const compiledCode = this.compileFromCode(code, filename, options);\n // \u5B9F\u884C\u524D\u306B\u74B0\u5883\u3092\u751F\u6210\n const nakoGlobal = this.getNakoGlobal(options, compiledCode.gen, filename);\n // \u5B9F\u884C\n this.evalJS(compiledCode.runtimeEnv, nakoGlobal);\n return nakoGlobal;\n }\n getNakoGlobal(options, gen, filename) {\n // \u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u53C2\u7167\n let g = options.nakoGlobal;\n if (!g) {\n // \u7A7A\u306A\u3089\u3070\u524D\u56DE\u306E\u5024\u3092\u53C2\u7167(\u30EA\u30BB\u30C3\u30C8\u3059\u308B\u306A\u3089\u65B0\u898F\u3067\u4F5C\u6210\u3059\u308B)\n if (this.__globals.length > 0 && options.resetAll === false && options.resetEnv === false) {\n g = this.__globals[this.__globals.length - 1];\n }\n else {\n g = new NakoGlobal(this, gen, (this.__globals.length + 1));\n }\n // \u540D\u524D\u7A7A\u9593\u3092\u8A2D\u5B9A\n g.__varslist[0].set('\u540D\u524D\u7A7A\u9593', NakoLexer.filenameToModName(filename));\n }\n if (this.__globals.indexOf(g) < 0) {\n this.__globals.push(g);\n }\n return g;\n }\n /**\n * \u30A4\u30D9\u30F3\u30C8\u3092\u767B\u9332\u3059\u308B\n * @param eventName \u30A4\u30D9\u30F3\u30C8\u540D\n * @param callback \u30B3\u30FC\u30EB\u30D0\u30C3\u30AF\u95A2\u6570\n */\n addListener(eventName, callback) {\n this.eventList.push({ eventName, callback });\n }\n /**\n * \u30C6\u30B9\u30C8\u3092\u5B9F\u884C\u3059\u308B\n * @param code\n * @param fname\n * @param preCode\n * @param testOnly\n */\n test(code, fname, preCode = '', testOnly = false) {\n const options = newCompilerOptions();\n options.preCode = preCode;\n options.testOnly = testOnly;\n return this.runSync(code, fname, options);\n }\n /**\n * \u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u5B9F\u884C\uFF08\u4ED6\u306B\u5B9F\u884C\u3057\u3066\u3044\u308B\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u306F\u305D\u306E\u307E\u307E\uFF09\n * @param code\n * @param fname\n * @param [preCode]\n * @deprecated \u4EE3\u308F\u308A\u306B runAsync \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002\n */\n run(code, fname = 'main.nako3', preCode = '') {\n const options = newCompilerOptions();\n options.preCode = preCode;\n return this.runSync(code, fname, options);\n }\n /**\n * JavaScript\u306E\u307F\u3067\u52D5\u304F\u30B3\u30FC\u30C9\u3092\u53D6\u5F97\u3059\u308B\u5834\u5408\n * @param code\n * @param filename\n * @param opt? \u30AA\u30D7\u30B7\u30E7\u30F3\n */\n compileStandalone(code, filename, options) {\n if (options === undefined) {\n options = new NakoGenOptions();\n }\n const ast = this.parse(code, filename);\n return this.generateCode(ast, options).standalone;\n }\n /**\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u8FFD\u52A0\n * @param po \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n * @param persistent false\u306E\u3068\u304D\u3001\u6B21\u4EE5\u964D\u306E\u5B9F\u884C\u3067\u306F\u4F7F\u3048\u306A\u3044\n * @param fpath \u30D5\u30A1\u30A4\u30EB\u30D1\u30B9\n */\n addPlugin(po, persistent = true, fpath = '') {\n // __v0\u3092\u53D6\u5F97\n const __v0 = this.__varslist[0];\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30E1\u30BF\u60C5\u5831\u3092\u30C1\u30A7\u30C3\u30AF (#1034) (#1647)\n let __pluginInfo = __v0.get('__pluginInfo');\n if (!__pluginInfo) {\n __pluginInfo = {};\n __v0.set('__pluginInfo', __pluginInfo);\n }\n // \u30D0\u30FC\u30B8\u30E7\u30F3\u30C1\u30A7\u30C3\u30AF\n let intVersion = 0;\n let pluginName = 'unknown';\n let metaValue = { pluginName: 'unknown', nakoVersionResult: true, nakoVersion: '0.0.0', path: '' };\n if (po.meta) {\n if (po.meta.value && typeof (po.meta) === 'object') {\n const meta = po.meta;\n metaValue = meta.value || { pluginName: 'unknown', nakoVersion: '0.0.0' };\n pluginName = metaValue.pluginName || 'unknown';\n // version check\n const nakoVersion = (metaValue.nakoVersion || '0.0.0') + '.0.0';\n const versions = nakoVersion.split('.').map((v) => parseInt(v));\n intVersion = versions[1] * 100 + versions[2];\n // fpath\n metaValue.path = fpath;\n }\n }\n // unknown \u306E\u5834\u5408\u306F\u3001\u95A2\u6570\u540D\u304B\u3089\u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u3092\u81EA\u52D5\u751F\u6210\u3059\u308B\n if (pluginName === 'unknown') {\n pluginName = Object.keys(po).join('-');\n }\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u306E\u91CD\u8907\u3092\u78BA\u8A8D\n if (__pluginInfo[pluginName] !== undefined) {\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u304C\u91CD\u8907\u3057\u305F\u5834\u5408\u306F\u30D7\u30E9\u30B0\u30A4\u30F3\u3068\u3057\u3066\u767B\u9332\u3057\u306A\u3044\n return;\n }\n // Windows\u306E\u30D1\u30B9\u3084\u30D5\u30A1\u30A4\u30EB\u540D\u306B\u4F7F\u3048\u306A\u3044\u6587\u5B57\u5217\u304C\u3042\u308B\u3068\u3001JS\u30D5\u30A1\u30A4\u30EB\u66F8\u304D\u51FA\u3057\u3067\u30A8\u30E9\u30FC\u306B\u306A\u308B\u306E\u3067\u7F6E\u63DB\n const removeInvalidFilenameChars = (str) => {\n return str.replace(/[^a-zA-z0-9\\-_\\u3040-\\u309F\\u30A0-\\u30FF\\u4E00-\\u9FAF\\u3400-\\u4DBF\\uF900-\\uFAFF]/g, '_');\n };\n pluginName = removeInvalidFilenameChars(pluginName);\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u60C5\u5831\u3092\u8A18\u9332\n __pluginInfo[pluginName] = metaValue;\n // \u30D0\u30FC\u30B8\u30E7\u30F3\u30C1\u30A7\u30C3\u30AF\n if (PLUGIN_MIN_VERSION_INT > intVersion) {\n const keyStr = Object.keys(po).join(',');\n if (pluginName === 'unknown') {\n pluginName = keyStr.substring(0, 30) + '...';\n }\n if (pluginName !== '') {\n const errMsg = `\u306A\u3067\u3057\u3053\u30D7\u30E9\u30B0\u30A4\u30F3\u300E${pluginName}\u300F\u306F\u53E4\u3044\u5F62\u5F0F\u306A\u306E\u3067\u6B63\u3057\u304F\u52D5\u4F5C\u3057\u306A\u3044\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002` +\n `(\u30E9\u30F3\u30BF\u30A4\u30E0\u306E\u8981\u6C42: ${PLUGIN_MIN_VERSION_INT}/\u30D7\u30E9\u30B0\u30A4\u30F3: ${intVersion})`;\n console.warn(errMsg, 'see', 'https://github.com/kujirahand/nadesiko3/issues/1647');\n this.logger.warn(errMsg);\n metaValue.nakoVersionResult = false;\n }\n }\n // \u521D\u671F\u5316\u3068\u30AF\u30EA\u30A2\u3092\u5909\u63DB\u3059\u308B\n this.__module[pluginName] = po;\n this.pluginfiles[pluginName] = '*';\n // `\u521D\u671F\u5316`\u3068`\u30AF\u30EA\u30A2`\u3092\u30C1\u30A7\u30C3\u30AF\n if (typeof (po['\u521D\u671F\u5316']) === 'object') {\n const def = po['\u521D\u671F\u5316'];\n delete po['\u521D\u671F\u5316'];\n const initKey = `!${pluginName}:\u521D\u671F\u5316`;\n po[initKey] = def;\n }\n // \u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u5024\u3092\u3001\u306A\u3067\u3057\u3053\u30B7\u30B9\u30C6\u30E0\u5909\u6570(Map)\u306B\u30B3\u30D4\u30FC\n for (const key in po) {\n const v = po[key];\n this.funclist.set(key, v);\n if (persistent) {\n this.pluginFunclist[key] = JSON.parse(JSON.stringify(v));\n }\n if (v.type === 'func') {\n __v0.set(key, v.fn);\n if (v.asyncFn) { // asyncFn \u3092\u6B63\u3057\u304F\u5B9F\u884C\u3059\u308B\u305F\u3081\u306B pure \u306B\u5909\u66F4\u3059\u308B (core#142)\n v.pure = true;\n }\n }\n else if (v.type === 'const' || v.type === 'var') {\n // \u30E1\u30BF\u60C5\u5831\u3068\u3057\u3066\u306E const | var \u306F\u73FE\u5728\u5229\u7528\u3057\u3066\u3044\u306A\u3044\n // meta[key] = { readonly: v.type === 'const' }\n __v0.set(key, v.value);\n }\n else {\n console.error('[\u30D7\u30E9\u30B0\u30A4\u30F3\u8FFD\u52A0\u30A8\u30E9\u30FC]', v);\n throw new Error('\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u8FFD\u52A0\u3067\u30A8\u30E9\u30FC\u3002');\n }\n // \u30B3\u30DE\u30F3\u30C9\u3092\u767B\u9332\u3059\u308B\u304B?\n if (key === '\u521D\u671F\u5316' || key.substring(0, 1) === '!') { // \u767B\u9332\u3057\u306A\u3044\u95A2\u6570\u540D\n continue;\n }\n this.commandlist.add(key);\n }\n }\n /**\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u8FFD\u52A0(\u30D6\u30E9\u30A6\u30B6\u5411\u3051)\n * @param objName \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u540D (\u4ECA\u5F8C\u30D7\u30E9\u30B0\u30A4\u30F3\u540D\u306F\u3001meta.value.pluginName\u306B\u6307\u5B9A\u3059\u308B)\n * @param po \u95A2\u6570\u30EA\u30B9\u30C8\n * @param persistent false\u306E\u3068\u304D\u3001\u6B21\u4EE5\u964D\u306E\u5B9F\u884C\u3067\u306F\u4F7F\u3048\u306A\u3044\n */\n addPluginObject(objName, po, persistent = true) {\n // meta\u30D7\u30ED\u30D1\u30C6\u30A3\u304C\u306A\u3051\u308C\u3070\u4E92\u63DB\u6027\u306E\u305F\u3081\u9069\u5F53\u306B\u8FFD\u52A0\n if (po.meta === undefined) {\n po.meta = { type: 'const', value: { pluginName: objName, nakoVersion: '0.0.0' } };\n }\n this.addPlugin(po, persistent);\n }\n /**\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u8FFD\u52A0(Node.js\u5411\u3051)\n * @param objName \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u540D(\u305F\u3060\u3057\u3001v3.6.3\u4EE5\u964D\u306E\u30D0\u30FC\u30B8\u30E7\u30F3\u3067\u306F\u7121\u52B9\u306B\u306A\u308B)\n * @param fpath \u30D5\u30A1\u30A4\u30EB\u30D1\u30B9\n * @param po \u767B\u9332\u3059\u308B\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n * @param persistent false\u306E\u3068\u304D\u3001\u6B21\u4EE5\u964D\u306E\u5B9F\u884C\u3067\u306F\u4F7F\u3048\u306A\u3044\n * @deprecated \u5229\u7528\u306F\u975E\u63A8\u5968\n */\n addPluginFile(_objName, fpath, po, persistent = true) {\n this.addPluginFromFile(fpath, po, persistent);\n }\n /**\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u8FFD\u52A0(Node.js\u5411\u3051)\n * @param fpath \u30D5\u30A1\u30A4\u30EB\u30D1\u30B9\n * @param po \u767B\u9332\u3059\u308B\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n * @param persistent false\u306E\u3068\u304D\u3001\u6B21\u4EE5\u964D\u306E\u5B9F\u884C\u3067\u306F\u4F7F\u3048\u306A\u3044\n */\n addPluginFromFile(fpath, po, persistent = true) {\n this.addPlugin(po, persistent, fpath);\n }\n /**\n * \u95A2\u6570\u3092\u8FFD\u52A0\u3059\u308B\n * @param {string} key \u95A2\u6570\u540D\n * @param {string[][]} josi \u52A9\u8A5E\n * @param {Function} fn \u95A2\u6570\n * @param {boolean} returnNone \u5024\u3092\u8FD4\u3059\u95A2\u6570\u306E\u5834\u5408\u306Ffalse\u3092\u6307\u5B9A\n * @param {boolean} asyncFn Promise\u3092\u8FD4\u3059\u95A2\u6570\u304B\u3092\u6307\u5B9A\n */\n addFunc(key, josi, fn, returnNone = true, asyncFn = false) {\n const funcObj = { josi, fn, type: 'func', return_none: returnNone, asyncFn, pure: true };\n this.funclist.set(key, funcObj);\n this.pluginFunclist[key] = cloneAsJSON(funcObj);\n this.__varslist[0].set(key, fn);\n }\n /** (\u975E\u63A8\u5968) \u4E92\u63DB\u6027\u306E\u305F\u3081 ... \u95A2\u6570\u3092\u8FFD\u52A0\u3059\u308B\n * @deprecated \u4EE3\u308F\u308A\u306BaddFunc\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\n */\n setFunc(key, josi, fn, returnNone = true, asyncFn = false) {\n this.addFunc(key, josi, fn, returnNone, asyncFn);\n }\n /**\n * \u30D7\u30E9\u30B0\u30A4\u30F3\u95A2\u6570\u3092\u53C2\u7167\u3059\u308B\n * @param key \u30D7\u30E9\u30B0\u30A4\u30F3\u95A2\u6570\u306E\u95A2\u6570\u540D\n * @returns \u30D7\u30E9\u30B0\u30A4\u30F3\u30FB\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n */\n getFunc(key) {\n return this.funclist.get(key);\n }\n /** \u540C\u671F\u7684\u306B\u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0code\u3092\u5B9F\u884C\u3059\u308B\n * @deprecated \u4EE3\u308F\u308A\u306BrunAsync\u30E1\u30BD\u30C3\u30C9\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002(core #52)\n */\n _runEx(code, filename, opts, preCode = '', nakoGlobal = undefined) {\n // \u30B3\u30F3\u30D1\u30A4\u30EB\n opts.preCode = preCode;\n if (nakoGlobal) {\n opts.nakoGlobal = nakoGlobal;\n }\n return this.runSync(code, filename, opts);\n }\n /** (\u975E\u63A8\u5968) \u540C\u671F\u7684\u306B\u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0code\u3092\u5B9F\u884C\u3059\u308B\n * @param code\n * @param fname\n * @param opts\n * @param [preCode]\n * @deprecated \u4EE3\u308F\u308A\u306BrunAsync\u30E1\u30BD\u30C3\u30C9\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002(core #52)\n */\n runEx(code, fname, opts, preCode = '') {\n return this._runEx(code, fname, opts, preCode);\n }\n /**\n * (\u975E\u63A8\u5968) \u306A\u3067\u3057\u3053\u306E\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u5B9F\u884C\uFF08\u4ED6\u306B\u5B9F\u884C\u3057\u3066\u3044\u308B\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u3082\u30EA\u30BB\u30C3\u30C8\u3059\u308B)\n * @param code\n * @param fname\n * @param [preCode]\n */\n async runReset(code, fname = 'main.nako3', preCode = '') {\n const opts = newCompilerOptions({ resetAll: true, resetEnv: true, preCode });\n return this.runAsync(code, fname, opts);\n }\n /**\n * \u65B0\u898F\u306E\u306A\u3067\u3057\u3053\u5909\u6570\u7BA1\u7406\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u751F\u6210\n * @returns \u5909\u6570\u7BA1\u7406\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\n */\n newVaiables(initVars) {\n return new Map(initVars);\n }\n}\n", "// @ts-nocheck\nexport default {\n // @\u8272\u5B9A\u6570\n '\u6C34\u8272': { type: 'const', value: 'aqua' }, // @\u307F\u305A\u3044\u308D\n '\u7D2B\u8272': { type: 'const', value: 'fuchsia' }, // @\u3080\u3089\u3055\u304D\u3044\u308D\n '\u7DD1\u8272': { type: 'const', value: 'lime' }, // @\u307F\u3069\u308A\u3044\u308D\n '\u9752\u8272': { type: 'const', value: 'blue' }, // @\u3042\u304A\u3044\u308D\n '\u8D64\u8272': { type: 'const', value: 'red' }, // @\u3042\u304B\u3044\u308D\n '\u9EC4\u8272': { type: 'const', value: 'yellow' }, // @\u304D\u3044\u308D\n '\u9ED2\u8272': { type: 'const', value: 'black' }, // @\u304F\u308D\u3044\u308D\n '\u767D\u8272': { type: 'const', value: 'white' }, // @\u3057\u308D\u3044\u308D\n '\u8336\u8272': { type: 'const', value: 'maroon' }, // @\u3061\u3083\u3044\u308D\n '\u7070\u8272': { type: 'const', value: 'gray' }, // @\u306F\u3044\u3044\u308D\n '\u91D1\u8272': { type: 'const', value: 'gold' }, // @\u304D\u3093\u3044\u308D\n '\u9EC4\u91D1\u8272': { type: 'const', value: 'gold' }, // @\u3053\u304C\u306D\u3044\u308D\n '\u9280\u8272': { type: 'const', value: 'silver' }, // @\u304E\u3093\u3044\u308D\n '\u767D\u91D1\u8272': { type: 'const', value: 'silver' }, // @\u3057\u308D\u304C\u306D\u3044\u308D\n '\u30AA\u30EA\u30FC\u30D6\u8272': { type: 'const', value: 'olive' }, // @\u304A\u308A\u30FC\u3076\u3044\u308D\n '\u30D9\u30FC\u30B8\u30E5\u8272': { type: 'const', value: 'beige' }, // @\u3079\u30FC\u3058\u3085\u3044\u308D\n '\u30A2\u30EA\u30B9\u30D6\u30EB\u30FC\u8272': { type: 'const', value: 'aliceblue' }, // @\u3042\u308A\u3059\u3076\u308B\u30FC\u3044\u308D\n 'RGB': {\n type: 'func',\n josi: [['\u3068'], ['\u3068'], ['\u3067', '\u306E']],\n pure: true,\n fn: function (r, g, b) {\n const z2 = (v) => {\n const v2 = '00' + v.toString(16);\n return v2.substr(v2.length - 2, 2);\n };\n return '#' + z2(r) + z2(g) + z2(b);\n },\n return_none: false\n },\n '\u8272\u6DF7': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (a) {\n const z2 = (v) => {\n const v2 = '00' + v.toString(16);\n return v2.substr(v2.length - 2, 2);\n };\n if (!a) {\n throw new Error('\u300E\u8272\u6DF7\u305C\u308B\u300F\u306E\u5F15\u6570\u306B\u306F\u914D\u5217\u3092\u6307\u5B9A\u3057\u307E\u3059');\n }\n if (a.length < 3) {\n throw new Error('\u300E\u8272\u6DF7\u305C\u308B\u300F\u306E\u5F15\u6570\u306B\u306F[RR,GG,BB]\u5F62\u5F0F\u306E\u914D\u5217\u3092\u6307\u5B9A\u3057\u307E\u3059');\n }\n return '#' + z2(a[0]) + z2(a[1]) + z2(a[2]);\n },\n return_none: false\n }\n};\n", "export default {\n // @HTTP\u3068AJAX\n 'HTTP\u53D6\u5F97': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089', '\u3092']],\n pure: true,\n asyncFn: true,\n fn: async function (url, sys) {\n return sys.__exec('AJAX\u30C6\u30AD\u30B9\u30C8\u53D6\u5F97', [url, sys]);\n }\n },\n 'AJAX\u53D7\u4FE1': {\n type: 'func',\n josi: [['\u304B\u3089', '\u3092']],\n pure: true,\n asyncFn: true,\n fn: async function (url, sys) {\n return sys.__exec('AJAX\u30C6\u30AD\u30B9\u30C8\u53D6\u5F97', [url, sys]);\n }\n },\n 'AJAX\u53D7\u4FE1\u6642': {\n type: 'func',\n josi: [['\u3067'], ['\u304B\u3089', '\u3092']],\n pure: true,\n fn: function (callback, url, sys) {\n sys.__exec('AJAX\u9001\u4FE1\u6642', [callback, url, sys]);\n },\n return_none: true\n },\n 'AJAX\u9001\u4FE1': {\n type: 'func',\n josi: [['\u307E\u3067', '\u3078', '\u306B']],\n pure: true,\n asyncFn: true,\n fn: async function (url, sys) {\n return sys.__exec('AJAX\u30C6\u30AD\u30B9\u30C8\u53D6\u5F97', [url, sys]);\n }\n },\n 'AJAX\u9001\u4FE1\u6642': {\n type: 'func',\n josi: [['\u306E'], ['\u307E\u3067', '\u3078', '\u306B']],\n pure: true,\n fn: function (callback, url, sys) {\n let options = sys.__getSysVar('AJAX\u30AA\u30D7\u30B7\u30E7\u30F3');\n if (options === '') {\n options = { method: 'GET' };\n }\n fetch(url, options).then(res => {\n // \u3082\u3057301\u3067\u3042\u308C\u3070\u81EA\u52D5\u3067\u30EA\u30C0\u30A4\u30EC\u30AF\u30C8\u3059\u308B\u305F\u3081,200\u3060\u3051\u3092\u30C1\u30A7\u30C3\u30AF\u3059\u308C\u3070\u826F\u3044\n if (res.status !== 200) {\n return sys.__getSysVar('AJAX:ONERROR')(res.status);\n }\n return res.text();\n }).then(text => {\n sys.__setSysVar('\u5BFE\u8C61', text);\n callback(text, sys);\n }).catch(err => {\n sys.__getSysVar('AJAX:ONERROR')(err);\n });\n },\n return_none: true\n },\n 'AJAX\u30AA\u30D7\u30B7\u30E7\u30F3': { type: 'const', value: '' }, // @AJAX\u304A\u3077\u3057\u3087\u3093\n 'AJAX\u30AA\u30D7\u30B7\u30E7\u30F3\u8A2D\u5B9A': {\n type: 'func',\n josi: [['\u306B', '\u3078', '\u3068']],\n pure: true,\n fn: function (option, sys) {\n sys.__setSysVar('AJAX\u30AA\u30D7\u30B7\u30E7\u30F3', option);\n },\n return_none: true\n },\n 'AJAX\u30AA\u30D7\u30B7\u30E7\u30F3POST\u8A2D\u5B9A': {\n type: 'func',\n josi: [['\u3092', '\u3067']],\n pure: true,\n fn: function (params, sys) {\n const bodyData = sys.__exec('POST\u30C7\u30FC\u30BF\u751F\u6210', [params, sys]);\n const options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n body: bodyData\n };\n sys.__setSysVar('AJAX\u30AA\u30D7\u30B7\u30E7\u30F3', options);\n },\n return_none: true\n },\n 'AJAX\u5931\u6557\u6642': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (callback, sys) {\n sys.__setSysVar('AJAX:ONERROR', callback);\n }\n },\n 'AJAX\u30C6\u30AD\u30B9\u30C8\u53D6\u5F97': {\n type: 'func',\n josi: [['\u304B\u3089', '\u3092']],\n pure: true,\n asyncFn: true,\n fn: async function (url, sys) {\n let options = sys.__getSysVar('AJAX\u30AA\u30D7\u30B7\u30E7\u30F3');\n if (options === '') {\n options = { method: 'GET' };\n }\n const res = await fetch(url, options);\n const txt = await res.text();\n return txt;\n },\n return_none: false\n },\n 'AJAX_JSON\u53D6\u5F97': {\n type: 'func',\n josi: [['\u304B\u3089']],\n pure: true,\n asyncFn: true,\n fn: async function (url, sys) {\n let options = sys.__getSysVar('AJAX\u30AA\u30D7\u30B7\u30E7\u30F3');\n if (options === '') {\n options = { method: 'GET' };\n }\n const res = await fetch(url, options);\n const text = await res.text();\n const status = res.status;\n const contentLength = res.headers.get('Content-Length');\n if ((!text || text.trim() === '') &&\n ((status === 204 || status === 205) || contentLength === '0')) {\n return null;\n }\n return JSON.parse(text);\n },\n return_none: false\n },\n 'AJAX\u30D0\u30A4\u30CA\u30EA\u53D6\u5F97': {\n type: 'func',\n josi: [['\u304B\u3089']],\n pure: true,\n asyncFn: true,\n fn: async function (url, sys) {\n let options = sys.__getSysVar('AJAX\u30AA\u30D7\u30B7\u30E7\u30F3');\n if (options === '') {\n options = { method: 'GET' };\n }\n const res = await fetch(url, options);\n const bin = await res.blob();\n return bin;\n },\n return_none: false\n },\n // @GET\u3068POST\n 'GET\u9001\u4FE1\u6642': {\n type: 'func',\n josi: [['\u306E'], ['\u307E\u3067', '\u3078', '\u306B']],\n pure: true,\n fn: function (callback, url, sys) {\n sys.__exec('AJAX\u9001\u4FE1\u6642', [callback, url, sys]);\n },\n return_none: true\n },\n 'POST\u9001\u4FE1\u6642': {\n type: 'func',\n josi: [['\u306E'], ['\u307E\u3067', '\u3078', '\u306B'], ['\u3092']],\n pure: true,\n fn: function (callback, url, params, sys) {\n const bodyData = sys.__exec('POST\u30C7\u30FC\u30BF\u751F\u6210', [params, sys]);\n const options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n body: bodyData\n };\n fetch(url, options).then(res => {\n return res.text();\n }).then(text => {\n sys.__setSysVar('\u5BFE\u8C61', text);\n callback(text);\n }).catch(err => {\n sys.__getSysVar('AJAX:ONERROR')(err);\n });\n }\n },\n 'POST\u30D5\u30A9\u30FC\u30E0\u9001\u4FE1\u6642': {\n type: 'func',\n josi: [['\u306E'], ['\u307E\u3067', '\u3078', '\u306B'], ['\u3092']],\n pure: true,\n fn: function (callback, url, params, sys) {\n const fd = new FormData();\n for (const key in params) {\n fd.set(key, params[key]);\n }\n const options = {\n method: 'POST',\n body: fd\n };\n fetch(url, options).then(res => {\n return res.text();\n }).then(text => {\n sys.__setSysVar('\u5BFE\u8C61', text);\n callback(text);\n }).catch(err => {\n sys.__getSysVar('AJAX:ONERROR')(err);\n });\n }\n },\n 'POST\u30C7\u30FC\u30BF\u751F\u6210': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (params, sys) {\n const flist = [];\n for (const key in params) {\n const v = params[key];\n const kv = encodeURIComponent(key) + '=' + encodeURIComponent(v);\n flist.push(kv);\n }\n return flist.join('&');\n }\n },\n 'POST\u9001\u4FE1': {\n type: 'func',\n josi: [['\u307E\u3067', '\u3078', '\u306B'], ['\u3092']],\n pure: true,\n asyncFn: true,\n fn: function (url, params, sys) {\n return new Promise((resolve, reject) => {\n const bodyData = sys.__exec('POST\u30C7\u30FC\u30BF\u751F\u6210', [params, sys]);\n const options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n body: bodyData\n };\n fetch(url, options).then(res => {\n return res.text();\n }).then(text => {\n resolve(text);\n }).catch(err => {\n reject(new Error(err.message));\n });\n });\n }\n },\n 'POST\u30D5\u30A9\u30FC\u30E0\u9001\u4FE1': {\n type: 'func',\n josi: [['\u307E\u3067', '\u3078', '\u306B'], ['\u3092']],\n pure: true,\n asyncFn: true,\n fn: function (url, params, sys) {\n return new Promise((resolve, reject) => {\n const fd = new FormData();\n for (const key in params) {\n fd.set(key, params[key]);\n }\n const options = {\n method: 'POST',\n body: fd\n };\n fetch(url, options).then(res => {\n return res.text();\n }).then(text => {\n resolve(text);\n }).catch(err => {\n reject(new Error(err.message));\n });\n });\n }\n },\n // @HTTP\u3068AJAX(\u4FDD\u8A3C)\n 'AJAX\u4FDD\u969C\u9001\u4FE1': {\n type: 'func',\n josi: [['\u307E\u3067', '\u3078', '\u306B']],\n pure: true,\n fn: function (url, sys) {\n let options = sys.__getSysVar('AJAX\u30AA\u30D7\u30B7\u30E7\u30F3');\n if (options === '') {\n options = { method: 'GET' };\n }\n return fetch(url, options);\n },\n return_none: false\n },\n 'HTTP\u4FDD\u969C\u53D6\u5F97': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089', '\u3092']],\n pure: true,\n fn: function (url, sys) {\n return sys.__exec('AJAX\u4FDD\u969C\u9001\u4FE1', [url, sys]);\n },\n return_none: false\n },\n 'POST\u4FDD\u969C\u9001\u4FE1': {\n type: 'func',\n josi: [['\u307E\u3067', '\u3078', '\u306B'], ['\u3092']],\n pure: true,\n fn: function (url, params, sys) {\n const bodyData = sys.__exec('POST\u30C7\u30FC\u30BF\u751F\u6210', [params, sys]);\n const options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n body: bodyData\n };\n return fetch(url, options);\n },\n return_none: false\n },\n 'POST\u30D5\u30A9\u30FC\u30E0\u4FDD\u969C\u9001\u4FE1': {\n type: 'func',\n josi: [['\u307E\u3067', '\u3078', '\u306B'], ['\u3092']],\n pure: true,\n fn: function (url, params, sys) {\n const fd = new FormData();\n for (const key in params) {\n fd.set(key, params[key]);\n }\n const options = {\n method: 'POST',\n body: fd\n };\n return fetch(url, options);\n },\n return_none: false\n },\n 'AJAX\u5185\u5BB9\u53D6\u5F97': {\n type: 'func',\n josi: [['\u304B\u3089'], ['\u3067']],\n pure: true,\n fn: function (res, type, sys) {\n type = type.toString().toUpperCase();\n if (type === 'TEXT' || type === '\u30C6\u30AD\u30B9\u30C8') {\n return res.text();\n }\n else if (type === 'JSON') {\n return res.json();\n }\n else if (type === 'BLOB') {\n return res.blob();\n }\n else if (type === 'ARRAY' || type === '\u914D\u5217') {\n return res.arrayBuffer();\n }\n else if (type === 'BODY' || type === '\u672C\u4F53') {\n return res.body;\n }\n return res.body();\n },\n return_none: false\n },\n // @Blob\n 'BLOB\u4F5C\u6210': {\n type: 'func',\n josi: [['\u3092', '\u304B\u3089'], ['\u3067']],\n pure: true,\n fn: function (data, options) {\n if (!(data instanceof Array)) {\n data = [data];\n }\n return new Blob(data, options);\n }\n },\n // @HTTP\u3068AJAX(\u975E\u63A8\u5968)\n 'AJAX\u9010\u6B21\u9001\u4FE1': {\n type: 'func',\n josi: [['\u307E\u3067', '\u3078', '\u306B']],\n pure: true,\n fn: function (url, sys) {\n if (!sys.resolve) {\n throw new Error('\u300EAJAX\u9010\u6B21\u9001\u4FE1\u300F\u306F\u300E\u9010\u6B21\u5B9F\u884C\u300F\u69CB\u6587\u5185\u3067\u5229\u7528\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n sys.resolveCount++;\n const resolve = sys.resolve;\n const reject = sys.reject;\n let options = sys.__getSysVar('AJAX\u30AA\u30D7\u30B7\u30E7\u30F3');\n if (options === '') {\n options = { method: 'GET' };\n }\n fetch(url, options).then(res => {\n return res.text();\n }).then(text => {\n sys.__setSysVar('\u5BFE\u8C61', text);\n resolve();\n }).catch(err => {\n reject(err.message);\n });\n },\n return_none: true\n },\n 'HTTP\u9010\u6B21\u53D6\u5F97': {\n type: 'func',\n josi: [['\u306E', '\u304B\u3089', '\u3092']],\n pure: true,\n fn: function (url, sys) {\n if (!sys.resolve) {\n throw new Error('\u300EHTTP\u9010\u6B21\u53D6\u5F97\u300F\u306F\u300E\u9010\u6B21\u5B9F\u884C\u300F\u69CB\u6587\u5185\u3067\u5229\u7528\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n sys.__exec('AJAX\u9010\u6B21\u9001\u4FE1', [url, sys]);\n },\n return_none: true\n },\n 'POST\u9010\u6B21\u9001\u4FE1': {\n type: 'func',\n josi: [['\u307E\u3067', '\u3078', '\u306B'], ['\u3092']],\n pure: true,\n fn: function (url, params, sys) {\n if (!sys.resolve) {\n throw new Error('\u300EPOST\u9001\u4FE1\u300F\u306F\u300E\u9010\u6B21\u5B9F\u884C\u300F\u69CB\u6587\u5185\u3067\u5229\u7528\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n sys.resolveCount++;\n const resolve = sys.resolve;\n const reject = sys.reject;\n const bodyData = sys.__exec('POST\u30C7\u30FC\u30BF\u751F\u6210', [params, sys]);\n const options = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n body: bodyData\n };\n fetch(url, options).then(res => {\n return res.text();\n }).then(text => {\n sys.__setSysVar('\u5BFE\u8C61', text);\n resolve(text);\n }).catch(err => {\n reject(err.message);\n });\n },\n return_none: true\n },\n 'POST\u30D5\u30A9\u30FC\u30E0\u9010\u6B21\u9001\u4FE1': {\n type: 'func',\n josi: [['\u307E\u3067', '\u3078', '\u306B'], ['\u3092']],\n pure: true,\n fn: function (url, params, sys) {\n if (!sys.resolve) {\n throw new Error('\u300EPOST\u30D5\u30A9\u30FC\u30E0\u9010\u6B21\u9001\u4FE1\u300F\u306F\u300E\u9010\u6B21\u5B9F\u884C\u300F\u69CB\u6587\u5185\u3067\u5229\u7528\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002');\n }\n sys.resolveCount++;\n const resolve = sys.resolve;\n const reject = sys.reject;\n const fd = new FormData();\n for (const key in params) {\n fd.set(key, params[key]);\n }\n const options = {\n method: 'POST',\n body: fd\n };\n fetch(url, options).then(res => {\n return res.text();\n }).then(text => {\n sys.__setSysVar('\u5BFE\u8C61', text);\n resolve(text);\n }).catch(err => {\n reject(err.message);\n });\n },\n return_none: true\n }\n};\n", "// @ts-nocheck\nexport default {\n // @HTML\u64CD\u4F5C\n 'HTML\u5909\u63DB': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (text) {\n return String(text)\n .replace(/&/g, '&amp;')\n .replace(/>/g, '&gt;')\n .replace(/</g, '&lt;');\n }\n },\n // @\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\n '\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u8A2D\u5B9A': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n asyncFn: true,\n fn: async function (text) {\n // Clipboard API\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u308B\u304B\n if (navigator.clipboard) {\n await navigator.clipboard.writeText(text);\n return;\n }\n // Clipboard API\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u306A\u3044\u5834\u5408\n const tmp = document.createElement('div');\n const pre = document.createElement('pre');\n pre.style.webkitUserSelect = 'auto';\n pre.style.userSelect = 'auto';\n tmp.appendChild(pre).textContent = text;\n // \u753B\u9762\u5916\u3078\u8868\u793A\u3059\u308B\n tmp.style.position = 'fixed';\n tmp.right = '200%';\n document.body.appendChild(tmp);\n document.getSelection().selectAllChildren(tmp);\n document.execCommand('copy');\n document.body.removeChild(tmp);\n },\n return_none: true\n },\n '\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u53D6\u5F97\u6642': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (f, sys) {\n // Clipboard API\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u308B\u304B\n if (navigator.clipboard) {\n if (typeof (f) === 'string') {\n f = sys.__findFunc(f, '\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u53D6\u5F97\u6642');\n }\n const pm = navigator.clipboard.readText();\n pm.then(text => {\n sys.__setSysVar('\u5BFE\u8C61', text);\n f(sys);\n });\n }\n else {\n throw new Error('Clipbard API\u304C\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002');\n }\n }\n },\n '\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u53D6\u5F97': {\n type: 'func',\n josi: [],\n pure: true,\n asyncFn: true,\n fn: async function (sys) {\n // Clipboard API\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u3066\u3044\u308B\u304B\n if (navigator.clipboard) {\n const result = await navigator.clipboard.readText();\n return result;\n }\n else {\n throw new Error('Clipbard API\u304C\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002');\n }\n }\n }\n};\n", "// @ts-nocheck\nexport default {\n // @WebSocket\n 'WS\u63A5\u7D9A\u5B8C\u4E86\u6642': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (callback, sys) {\n sys.__setSysVar('WS:ONOPEN', callback);\n },\n return_none: true\n },\n 'WS\u53D7\u4FE1\u6642': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (callback, sys) {\n sys.__setSysVar('WS:ONMESSAGE', callback);\n },\n return_none: true\n },\n 'WS\u30A8\u30E9\u30FC\u767A\u751F\u6642': {\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (callback, sys) {\n sys.__setSysVar('WS:ONERROR', callback);\n },\n return_none: true\n },\n 'WS\u63A5\u7D9A': {\n type: 'func',\n josi: [['\u306B', '\u3078', '\u306E']],\n pure: true,\n fn: function (s, sys) {\n const ws = new WebSocket(s);\n ws.onopen = () => {\n const cbOpen = sys.__getSysVar('WS:ONOPEN');\n if (cbOpen) {\n cbOpen(sys);\n }\n };\n ws.onerror = (err) => {\n const cbError = sys.__getSysVar('WS:ONERROR');\n if (cbError) {\n cbError(err, sys);\n }\n console.log('WS\u30A8\u30E9\u30FC', err);\n };\n ws.onmessage = (e) => {\n sys.__setSysVar('\u5BFE\u8C61', e.data);\n const cbMsg = sys.__getSysVar('WS:ONMESSAGE');\n if (cbMsg) {\n cbMsg(sys);\n }\n };\n sys.__setSysVar('WS:SOCKET', ws);\n return ws;\n }\n },\n 'WS\u9001\u4FE1': {\n type: 'func',\n josi: [['\u3092', '\u3068']],\n pure: true,\n fn: function (s, sys) {\n const ws = sys.__getSysVar('WS:SOCKET');\n ws.send(s);\n }\n },\n 'WS\u5207\u65AD': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n const ws = sys.__getSysVar('WS:SOCKET');\n ws.close();\n }\n }\n};\n", "// @ts-nocheck\n// plugin_browser_in_worker.js\nimport PartBrowserColor from './plugin_browser_color.mjs';\nimport PartBrowserAjax from './plugin_browser_ajax.mjs';\nimport PartBrowserHtml from './plugin_browser_html.mjs';\nimport PartBrowserWebsocket from './plugin_browser_websocket.mjs';\nconst BrowserParts = [\n PartBrowserColor,\n PartBrowserAjax,\n PartBrowserHtml,\n PartBrowserWebsocket\n];\nconst PluginBrowserInWorker = {\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n /* eslint no-global-assign: 0 */\n if (typeof self === 'undefined') {\n self = {};\n }\n if (typeof navigator === 'undefined') {\n navigator = {};\n }\n // \u5B9A\u6570\u3092\u521D\u671F\u5316\n sys.__setSysVar('AJAX:ONERROR', (err) => { console.log(err); });\n // \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u521D\u671F\u5316\n sys.__v0.SELF = self;\n sys.__v0.NAVIGATOR = navigator;\n }\n }\n};\nBrowserParts.forEach((a) => {\n const b = {};\n Object.assign(b, a);\n if (typeof b['\u521D\u671F\u5316'] !== 'undefined') {\n delete b['\u521D\u671F\u5316'];\n }\n Object.assign(PluginBrowserInWorker, b);\n});\nexport default PluginBrowserInWorker;\n", "// @ts-nocheck\nconst PluginWorker = {\n '\u521D\u671F\u5316': {\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n sys.__v0.SELF = self || {}\n sys.__v0['\u4F9D\u983C\u4E3B'] = self || {}\n }\n },\n\n '\u5BFE\u8C61\u30A4\u30D9\u30F3\u30C8': { type: 'const', value: '' }, // @\u305F\u3044\u3057\u3087\u3046\u3044\u3079\u3093\u3068\n '\u53D7\u4FE1\u30C7\u30FC\u30BF': { type: 'const', value: '' }, // @\u305F\u3044\u3057\u3087\u3046\u3044\u3079\u3093\u3068\n 'SELF': { type: 'const', value: '' }, // @SELF\n '\u4F9D\u983C\u4E3B': { type: 'const', value: '' }, // @SELF\n\n 'NAKO\u30EF\u30FC\u30AB\u30FC\u30C7\u30FC\u30BF\u53D7\u4FE1\u6642': { // @\u7121\u540D\u95A2\u6570F\u3067\u306A\u3067\u3057\u3053v3\u30A8\u30F3\u30B8\u30F3\u306B\u5BFE\u3057\u3066\u30EF\u30FC\u30AB\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8\u306B\u3088\u308A\u30C7\u30FC\u30BF\u3092\u53D7\u4FE1\u3057\u305F\u6642\u306B\u5B9F\u884C\u3059\u308B\u30A4\u30D9\u30F3\u30C8\u3092\u8A2D\u5B9A\u3002\u300E\u53D7\u4FE1\u30C7\u30FC\u30BF\u300F\u306B\u53D7\u4FE1\u3057\u305F\u30C7\u30FC\u30BFM\u3002\u300E\u5BFE\u8C61\u30A4\u30D9\u30F3\u30C8\u300F\u306B\u30A4\u30D9\u30F3\u30C8\u5F15\u6570\u3002 // @NAKO\u308F\u30FC\u304B\u30FC\u3067\u30FC\u305F\u3058\u3085\u3057\u3093\u3057\u305F\u3068\u304D\n type: 'func',\n josi: [['\u3067']],\n pure: false,\n fn: function (func, sys) {\n func = sys.__findVar(func, null) // \u6587\u5B57\u5217\u6307\u5B9A\u306A\u3089\u95A2\u6570\u306B\u5909\u63DB\n sys.__setSysVar('PluginWorker:ondata', (data, e) => {\n sys.__v0['\u53D7\u4FE1\u30C7\u30FC\u30BF'] = data\n sys.__v0['\u5BFE\u8C61\u30A4\u30D9\u30F3\u30C8'] = e\n return func(e, sys)\n })\n },\n return_none: true\n },\n '\u30EF\u30FC\u30AB\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8\u53D7\u4FE1\u6642': { // @\u7121\u540D\u95A2\u6570F\u3067self\u306B\u5BFE\u3057\u3066\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u53D7\u4FE1\u3057\u305F\u6642\u306B\u5B9F\u884C\u3059\u308B\u30A4\u30D9\u30F3\u30C8\u3092\u8A2D\u5B9A\u3002\u300E\u53D7\u4FE1\u30C7\u30FC\u30BF\u300F\u306B\u53D7\u4FE1\u3057\u305F\u30C7\u30FC\u30BF\u3002\u300E\u5BFE\u8C61\u30A4\u30D9\u30F3\u30C8\u300F\u306B\u30A4\u30D9\u30F3\u30C8\u5F15\u6570\u3002 // @\u308F\u30FC\u304B\u30FC\u3081\u3063\u305B\u30FC\u3058\u3058\u3085\u3057\u3093\u3057\u305F\u3068\u304D\n type: 'func',\n josi: [['\u3067']],\n pure: false,\n fn: function (func, sys) {\n func = sys.__findVar(func, null) // \u6587\u5B57\u5217\u6307\u5B9A\u306A\u3089\u95A2\u6570\u306B\u5909\u63DB\n self.onmessage = (e) => {\n sys.__v0['\u53D7\u4FE1\u30C7\u30FC\u30BF'] = e.data\n sys.__v0['\u5BFE\u8C61\u30A4\u30D9\u30F3\u30C8'] = e\n return func(e, sys)\n }\n },\n return_none: true\n },\n 'NAKO\u30EF\u30FC\u30AB\u30FC\u30C7\u30FC\u30BF\u9001\u4FE1': { // @\u8D77\u52D5\u3082\u3068\u306B\u56FA\u6709\u306E\u5F62\u5F0F\u3067\u30C7\u30FC\u30BF\u3092\u9001\u4FE1\u3059\u308B\u3002 // @NAKO\u308F\u30FC\u304B\u30FC\u3067\u30FC\u305F\u3078\u3093\u3057\u3093\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (data, sys) {\n const msg = {\n type: 'data',\n data: data\n }\n postMessage(msg)\n },\n return_none: true\n },\n '\u30EF\u30FC\u30AB\u30FC\u30E1\u30C3\u30BB\u30FC\u30B8\u9001\u4FE1': { // @\u8D77\u52D5\u3082\u3068\u306B\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u9001\u4FE1\u3059\u308B\u3002 // @\u308F\u30FC\u304B\u30FC\u3081\u3063\u305B\u30FC\u3058\u3078\u3093\u3057\u3093\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (msg, sys) {\n postMessage(msg)\n },\n return_none: true\n },\n '\u8868\u793A': { // @\u30E1\u30A4\u30F3\u30B9\u30EC\u30C3\u30C9\u306B\u56FA\u6709\u306E\u5F62\u5F0F\u3067\u8868\u793A\u30C7\u30FC\u30BF\u3092\u9001\u4FE1\u3059\u308B\u3002 // @\u3072\u3087\u3046\u3058\n type: 'func',\n josi: [['\u3092']],\n pure: true,\n fn: function (data, sys) {\n const msg = {\n type: 'output',\n data: data\n }\n postMessage(msg)\n },\n return_none: true\n },\n '\u7D42\u4E86': { // @\u30EF\u30FC\u30AB\u30FC\u3092\u7D42\u4E86\u3059\u308B\u3002 // @\u3057\u3085\u3046\u308A\u3087\u3046\n type: 'func',\n josi: [],\n pure: true,\n fn: function (sys) {\n close()\n },\n return_none: true\n }\n}\n\n// module.exports = PluginWorker\nexport default PluginWorker\n\n\n", "// nadesiko for web browser worker\n// wwnako3.js\nimport { NakoCompiler } from '../core/src/nako3.mjs'\nimport PluginBrowserInWorker from './plugin_browser_in_worker.mjs'\nimport PluginWorker from './plugin_worker.mjs'\n\nclass WebWorkerNakoCompiler extends NakoCompiler {\n constructor () {\n super()\n this.__setSysVar('\u30CA\u30C7\u30B7\u30B3\u7A2E\u985E', 'wwnako3')\n this.__setSysVar('PluginWorker:ondata', (data, event) => {\n throw new Error('\u300ENAKO\u30EF\u30FC\u30AB\u30FC\u30C7\u30FC\u30BF\u53D7\u4FE1\u6642\u300F\u304C\u547C\u3070\u308C\u3066\u3044\u307E\u305B\u3093\u3002')\n })\n }\n}\n\n// \u30D6\u30E9\u30A6\u30B6\u30EF\u30FC\u30AB\u30FC\u306A\u3089 navigator.nako3 \u306B\u306A\u3067\u3057\u3053\u3092\u767B\u9332\n// eslint-disable-next-line no-undef\nif (typeof (navigator) === 'object' && self && self instanceof WorkerGlobalScope) {\n /** @type {WebWorkerNakoCompiler} */\n const nako3Compiler = navigator.nako3 = new WebWorkerNakoCompiler()\n /** @type {WebWorkerNakoCompiler | import('./nako_global')} */\n let nako3Global = nako3Compiler\n \n nako3Compiler.addPluginObject('PluginBrowserInWorker', PluginBrowserInWorker)\n nako3Compiler.addPluginObject('PluginWorker', PluginWorker)\n\n nako3Compiler.getLogger().addListener('error', function (obj) {\n self.postMessage({\n type: 'error',\n data: obj\n })\n }, false)\n\n self.onmessage = (event) => {\n const data = event.data || { type: '', data: '' }\n const type = data.type || ''\n const value = data.data || ''\n switch (type) {\n case 'reset':\n nako3Compiler.reset()\n break\n case 'close':\n self.close()\n break\n case 'run':\n nako3Global = nako3Global.runEx(value, '_webworker.nako3', { resetEnv: false, resetLog: false })\n break\n case 'trans':\n value.forEach(o => {\n if (o.type === 'func') {\n nako3Compiler.nakoFuncList[o.name] = o.content.meta\n nako3Compiler.funclist[o.name] = o.content.func\n nako3Compiler.__varslist[1].set(o.name, () => {})\n } else if (o.type === 'val') {\n nako3Compiler.__varslist[2].set(o.name, o.content)\n } else if (o.type === 'env') {\n if (o.name === 'modlist') {\n for (const modInfo of o.content) {\n if (nako3Compiler.lexer.modList.indexOf(modInfo.name) < 0) {\n nako3Compiler.lexer.modList.push(modInfo.name)\n }\n if (modInfo.export != null && !nako3Compiler.moduleExport.hasOwnProperty(modInfo.name)) {\n nako3Compiler.moduleExport[modInfo.name] = modInfo.export\n }\n }\n } else if (o.name === 'constPools') {\n nako3Compiler.constPools = o.content\n } else if (o.name === 'constPoolsTemplate') {\n nako3Compiler.constPoolsTemplate = o.content\n } else if (o.name === 'chk') {\n nako3Compiler.chk = o.content\n }\n }\n })\n break\n case 'data':\n if (nako3Global.__getSysVar('PluginWorker:ondata')) {\n nako3Global.__getSysVar('PluginWorker:ondata').apply(nako3Global, [value, event])\n }\n break\n }\n }\n}\n\n"],
5
5
  "mappings": "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",
6
6
  "names": ["opPriority", "RenbunJosi", "operatorList", "key", "NewEmptyToken", "type", "value", "indent", "line", "file", "NakoParserBase", "logger", "funclist", "moduleexport", "josiList", "i", "t", "name", "gnameSelf", "mod", "gname", "exportDefault", "funcObj", "item", "ttype", "a", "idx", "type", "types", "y", "tmpIndex", "rollback", "token", "r", "def", "NewEmptyToken", "node", "opts", "debugMode", "depth", "typeName", "debug", "subNode", "node2", "operator", "table", "left", "right", "NakoError", "tag", "msg", "file", "line", "positionJa", "NakoIndentError", "InternalLexerError", "preprocessedCodeStartOffset", "preprocessedCodeEndOffset", "NakoLexerError", "startOffset", "endOffset", "NakoSyntaxError", "_NakoSyntaxError", "first", "last", "NakoRuntimeError", "_NakoRuntimeError", "error", "lineNo", "matches", "NakoImportError", "reserved", "nako_reserved_words_default", "isIndentChars", "ch", "code", "josiList", "tararebaJosiList", "removeJosiList", "tararebaMap", "josi", "removeJosiMap", "josiListMono", "jo", "a", "b", "pat", "josiRE", "josiListExport", "kanakanji", "hira", "allHiragana", "wordHasIjoIka", "wordSpecial", "errorRead", "ch", "unitRE", "cssUnitRE", "rules", "cbRangeComment", "parseNumber", "src", "cbExtWord", "cbString", "cbWordParser", "trimOkurigana", "s", "res", "numEOL", "i", "isTrimOkurigana", "josi", "j", "josiRE", "m", "ii", "removeJosiMap", "beginTag", "closeTag", "NakoLexer", "_NakoLexer", "logger", "nako_reserved_words_default", "josiListExport", "listMap", "exportObj", "tokens", "isFirst", "filename", "eof", "funclist", "moduleexport", "isFuncPointer", "readArgs", "args", "keys", "t", "varnames", "funcPointers", "result", "already", "arg", "josi", "prevToken", "nextToken", "modName", "t2", "kai", "rtype", "isMumei", "defToken", "funcName", "funcNameToken", "isExport", "attr", "dispName", "metaValue", "code", "list", "arr", "end", "comment", "i", "namespaceStack", "getLastType", "modSelf", "InternalLexerError", "space", "gname1", "gfo1", "tt", "mod", "gname", "gfo", "exportDefault", "fo", "tokenType", "ltype", "opPriority", "startOffset", "tararebaMap", "src", "indent", "c", "n", "isIndentChars", "line", "srcLength", "columnCurrent", "lineCurrent", "column", "isDefTest", "ia", "ok", "rule", "rules", "m", "ruleName", "rp", "e", "NakoLexerError", "offset", "srcOffset", "value", "um", "unitRE", "cssUnit", "cssUnitRE", "j", "josiRE", "removeJosiMap", "sep", "v", "a", "NakoParser", "NakoParserBase", "tokens", "filename", "NakoLexer", "result", "b", "c", "NakoSyntaxError", "blocks", "line", "map", "n", "token", "words", "t", "w", "desc", "descFunc", "chA", "f", "no", "josiA", "arg", "ch", "eol", "report", "word", "NewEmptyToken", "c1", "nextToken", "cond", "RenbunJosi", "c2", "ver", "mode", "a", "type", "defToken", "def", "isExport", "funcAttribute", "defArgs", "funcName", "block", "multiline", "asyncFn", "backupLocalvars", "fnName", "nextWordO", "nextWord", "err", "func", "tmpI", "naraba", "smap", "mosi", "expr", "trueBlock", "falseBlock", "tanbun", "optionNode", "val", "options", "name", "k", "tikuji", "firstValue", "args", "op", "opPriority", "v", "kara", "made", "meta", "value1", "list", "priority", "stack", "polish", "sTop", "tpop", "josi", "node", "ans", "y", "isClose", "si", "callee", "close", "num", "bUntil", "errorForArguments", "flagDown", "flagUp", "loopDirection", "kurikaesu", "incdec", "vInc", "vTo", "vFrom", "vWord", "wordStr", "target", "joukenbunki", "condToken", "defaultBlock", "condBlock", "kokomade", "isAsyncFn", "backupAsyncFn", "dainyu", "value", "indexArray", "sadameru", "attrNode", "attr", "action", "minusOne", "cur", "r", "operatorList", "s", "msgDebug", "msg", "d0", "d1", "first", "last", "callToken", "funcObj", "nullCount", "valueCount", "i", "popArg", "varname", "funcNode", "fname", "space", "isexport", "expectedError", "nameToken", "valueToken", "propList", "flag", "la", "lb", "wordToken", "vtype", "wordVar", "astValue", "constName", "names", "namesAst", "index", "minusNum", "ary", "astIndexes", "astProp", "astVarName", "astIndex", "astProp1", "astProp2", "astIndex1", "astIndex2", "tmpReadingCalc", "t1", "fCalc", "t2", "josiList", "v2", "closeParent", "tok", "m", "astLeft", "astRight", "o", "oneWordFuncToken", "splitType", "tt", "funcNameToken", "funcToken", "funcPtr", "ast", "prop1", "prop2", "prop3", "prop", "aa", "isConst", "gname", "typeName", "defValue", "wordAst", "firstToken", "key", "v1", "kansi", "errBlock", "callNode", "nodes", "ReplaceHistory", "from", "to", "index", "ConvertResult", "text", "sourcePosition", "Replace", "code", "i", "item", "NakoPrepare", "_NakoPrepare", "ch", "c", "c2", "src", "flagStr", "flagStr2", "endOfStr", "res", "left", "str", "ch2", "c1", "topOfFunction", "endOfFunction", "topOfFunctionAsync", "NakoGenOptions", "isTest", "importFiles", "codeStandalone", "convEnv", "fname", "NakoGen", "_NakoGen", "com", "name", "varslist", "vlist", "i", "scope", "names", "node", "forceUpdate", "incLine", "lineNo", "lineNoStr", "lineDataJSON", "debugCode", "jsvalue", "a", "name3", "name2", "moduleName", "opt", "code", "nakoFuncCode", "value", "key", "f", "trim", "cleanGeneratedCode", "isAsync", "testCode", "po", "objName", "path", "josi", "fn", "ast", "NakoSyntaxError", "funcList", "registFunc", "t", "meta", "registFuncs", "initialNames", "result", "isExpression", "n", "currentFunc", "currentIndex", "context", "nameJson", "position", "res", "lno", "dispName", "pv", "block", "commentSrc", "mode", "isStrict", "astValue", "funcName", "poolIndex", "msg", "id", "args", "file", "line", "fileNo", "msgNo", "args2", "arg", "argStr", "argNo", "cmd", "cmdj", "isExtractJS", "performanceMonitorInjectAtStart", "performanceMonitorInjectAtEnd", "variableDeclarations", "indent", "pushStack", "popStack", "funcContext", "varsDeclared", "word", "errMsg", "callCheckFunc", "oldUsedAsyncFn", "tof", "lineInfo", "nameFuncValue", "resultArray", "list", "idx", "val", "keyStr", "valStr", "e", "op", "valueNode", "indexNodes", "codeInit", "codeArray", "arrayDefCode", "tmpVar", "initArrayCode", "tmpflag", "astFrom", "astTo", "astInc", "astBlock", "idLoop", "varI", "loopVarSetter", "varName", "varFrom", "varTo", "varTemp", "sorePrefex", "kara", "made", "temp", "flagDown", "flagUp", "inc", "exprAst", "blockAst", "loopKeyVar", "loopValueVar", "loopDataVar", "taisyouTemp", "taisyouKeyTemp", "soreTemp", "taisyoPrefex", "valueVar", "keySetter", "soreRecover", "soreBackup", "targetData", "varCount", "varKaisuTemp", "codeCount", "prev", "cond", "varId", "expr", "defaultStr", "body", "caseIndex", "condStr", "blockStr", "trueAst", "falseAst", "trueBlock", "falseBlock", "_funcName", "_func", "opts", "nodeArgs", "argCode", "r", "func", "argsInfo", "argsOpts", "funcDef", "funcBegin", "funcEnd", "localVars", "text", "noCheckFuncs", "argsCode", "argsA", "funcCall", "sorePostfix", "funcBody", "callee", "right", "left", "OP_TBL", "incValue", "varGetter", "varSetter", "varInitter", "nodeName", "baseName", "propList", "buildPropGetter", "targetExpr", "propKey", "buildPropSetter", "valueExpr", "propKeys", "prop", "currentExpr", "parentExpr", "lastPropKey", "astFunc", "propTopAst", "propTop", "nameJs", "indexNode", "indexJs", "codeCall", "codeProp", "codeCheckAccessor", "arrs", "keys", "arrStr", "vtype", "errBlock", "pluginCode", "initkey", "initkeyDone", "STANDALONE_CODE", "generateJS", "gen", "js", "jsInit", "funcID", "asyncMain", "syncMain", "codeImportFiles", "importNames", "ff", "initCode", "runtimeEnvCode", "replaceTemplateCode", "template", "values", "pat", "removeDuplicateChars", "spc", "lines", "inString", "inRegex", "inTemplate", "inLineComment", "inBlockComment", "stringDelimiter", "prevChar", "lastSemiPos", "lastNewlinePos", "countBackslashes", "pos", "count", "p", "ch", "nextCh", "str", "debugTokens", "tokens", "result", "i", "t", "ftype", "fvalue", "s", "makeIndent", "lastTokenInfo", "NewEmptyToken", "newToken", "type", "value", "templateToken", "IS_DEBUG", "isSkipWord", "t", "removeJsonEol", "tokens", "jsonObjLevel", "jsonArrayLevel", "jsonStartIndent", "flagNeedResetIndent", "convertInlineIndent", "lines", "splitTokens", "blockIndents", "checkICount", "line", "IsEmptyLine", "leftToken", "GetLeftTokens", "lineICount", "tFirst", "newToken", "tLast", "getLastTokenWithoutEOL", "i", "result", "joinTokenLines", "debugTokens", "r", "len", "res", "NewEmptyToken", "delimiter", "kakko", "j", "ty", "INDENT_MODE_KEYWORDS", "convertIndentSyntax", "useIndentSynax", "NakoIndentError", "checkJsonSyntax", "lastI", "curI", "blockIndentTopLast", "tt", "DNCL_KEYWORDS", "DNCL_SIMPLES", "convertDNCL", "tokens", "useDNCLmode", "lines", "splitTokens", "i", "line", "j", "t", "NewEmptyToken", "fi", "findTokens", "replaceAtohantei", "fi2", "nai", "ni", "sou", "nakumosi", "nakumosiTudukiStr", "nakumosiToken", "fu", "replaceAllElementV", "c", "a", "joinTokenLines", "eq", "begin", "end", "val", "times", "mul", "wo", "ga", "findTypeValue", "findA", "s", "flag", "f", "idx", "IS_DEBUG", "DNCL_ARRAY_INIT_COUNT", "DNCL2_KEYWORDS", "DNCL_SIMPLES", "convertDNCL2", "tokens", "useDNCL2mode", "lines", "splitTokens", "i", "line", "nai", "findTokens", "ni", "t", "sou", "nakumosi", "nakumosiTudukiStr", "nakumosiToken", "NewEmptyToken", "fu", "tokenEq", "varToken", "valToken", "newToken", "j", "c", "a", "joinTokenLines", "debugTokens", "typeValues", "fromIndex", "check", "pattern", "tv", "idx", "pat", "findTypeValue", "findA", "s", "flag", "f", "SourceMappingOfTokenization", "sourceCodeLength", "preprocessed", "i", "el", "preprocessedCodePosition", "SourceMappingOfIndentSyntax", "codeAfterProcessingIndentationSyntax", "linesInsertedByIndentationSyntax", "linesDeletedByIndentationSyntax", "offset", "line", "startOffset", "endOffset", "tokenLine", "insertedLine", "deletedLine", "OffsetToLineColumn", "code", "oneBasedLineNumber", "subtractSourceMapByPreCodeLength", "sourceMap", "preCode", "lines", "color", "colorNames", "escapeHTML", "t", "convertColorTextFormat", "text", "noColor", "browserConsoleStyles", "consoleColor", "consoleFontWeight", "browserConsoleText", "_", "m1str", "m1", "htmlColor", "htmlFontWeight", "html", "NakoColors", "LogLevel", "_LogLevel", "levelStr", "level", "stringifyPosition", "p", "NakoLogger", "levelStr", "callback", "level", "LogLevel", "l", "message", "position", "NakoColors", "stringifyPosition", "NakoError", "e", "pos", "error", "posStr", "NakoRuntimeError", "nodeConsole", "html", "browserConsole", "i", "makeData", "formats", "style", "data", "NakoGlobal", "compiler", "gen", "guid", "s", "name", "value", "code", "fname", "opts", "preCode", "tests", "text", "NakoColors", "pass", "numFailures", "t", "err", "errorMessage", "clearName", "pname", "po", "e", "coreVersion", "nako_core_version_default", "plugin_system_default", "name", "value", "defaultValue", "v", "nameStr", "def", "localVar", "i", "scopeValue", "modList", "modName", "gname", "parentFunc", "f", "func", "params", "f0", "s", "keta", "zeroS", "t", "fmt", "dateStr", "timeStr", "a", "constId", "cp", "msgNo", "msgArgs", "fileNo", "lineNo", "msg", "arg", "fileStr", "src", "_eval", "e", "e2", "getProp", "setProp", "mode", "obj", "accs", "sys", "b", "isBigInt", "sum", "bigsum", "aa", "jsonA", "jsonB", "p", "c", "x", "args", "m", "code", "options", "tmpLog", "outLog", "tf", "t1", "n", "r", "g", "z2", "v2", "strArray", "searchArray", "res", "cnt", "index", "mae", "usiro", "subS", "j", "result", "str", "chr", "zen1", "han1", "zen2", "han2", "c2", "n2", "re", "sa", "pattern", "flags", "caps2d", "row", "key", "val", "caps", "z", "checkerRE", "ufunc", "tmp", "idx", "old", "start", "last", "y", "nn", "cloneValue", "item", "full", "shape", "first", "rest", "no", "ns", "ms", "col", "cols", "rows", "keys", "k", "nr", "line", "body", "resolve", "reject", "timerId", "err", "NakoRuntimeError", "d", "tm", "era", "gengo", "d2", "t2", "unit", "op", "sec", "rd", "opc", "addY", "addM", "addD", "fname", "fa", "fstr", "param", "curLine", "breakpoints", "forceLine", "vars", "text", "url", "kv", "u8a", "utf8str", "decodedUtf8str", "dec", "decodedArray", "sep", "parts", "ext", "pathList", "filename", "pathStr", "rawExt", "extWithDot", "newFilename", "path", "dir", "plugin_math_default", "v", "y", "x", "XY", "sys", "a", "b", "min", "max", "base", "options", "is_numeric", "str", "parse", "txt", "delimiter", "options", "patToDelim", "reToDelim", "convType", "v", "result", "res", "cells", "c", "m", "i", "s", "c1", "c2", "stringify", "ary", "eol", "valueConv", "genValueConverter", "r", "j", "genValueConverter", "delimiter", "s", "fQuot", "PluginCSV", "str", "options", "parse", "a", "stringify", "obj", "key", "value", "plugin_csv_default", "plugin_promise_default", "sys", "promise", "callback", "resolve", "reject", "result", "cbFunc", "reason", "err", "args", "getLineColFromPtr", "string", "ptr", "lines", "makeCodeBlock", "line", "column", "codeblock", "numberLen", "i", "l", "TomlError", "message", "options", "isEscaped", "str", "ptr", "i", "indexOfNewline", "start", "end", "idx", "skipComment", "c", "TomlError", "skipVoid", "banNewLines", "banComments", "skipUntil", "sep", "getStringEnd", "seek", "first", "target", "DATE_TIME_RE", "TomlDate", "_TomlDate", "#hasDate", "#hasTime", "#offset", "date", "hasDate", "hasTime", "offset", "match", "iso", "jsDate", "INT_REGEX", "FLOAT_REGEX", "LEADING_ZERO", "ESCAPE_REGEX", "ESC_MAP", "parseString", "str", "ptr", "endPtr", "isLiteral", "isMultiline", "tmp", "isEscape", "parsed", "sliceStart", "c", "TomlError", "code", "skipVoid", "parseValue", "value", "toml", "integersAsBigInt", "isInt", "numeric", "date", "TomlDate", "sliceAndTrimEndOf", "str", "startPtr", "endPtr", "value", "commentIdx", "skipComment", "extractValue", "ptr", "end", "depth", "integersAsBigInt", "TomlError", "c", "parseArray", "parseInlineTable", "skipVoid", "getStringEnd", "parsed", "parseString", "skipUntil", "slice", "parseValue", "KEY_PART_RE", "parseKey", "str", "ptr", "end", "dot", "parsed", "endPtr", "TomlError", "c", "eos", "getStringEnd", "strEnd", "newLine", "indexOfNewline", "parseString", "part", "skipVoid", "parseInlineTable", "depth", "integersAsBigInt", "res", "seen", "skipComment", "k", "t", "hasOwn", "key", "keyEndPtr", "i", "value", "valueEndPtr", "extractValue", "parseArray", "e", "peekTable", "key", "table", "meta", "type", "t", "m", "k", "hasOwn", "state", "i", "l", "parse", "toml", "maxDepth", "integersAsBigInt", "res", "tbl", "ptr", "skipVoid", "isTableArray", "parseKey", "TomlError", "p", "v", "extractValue", "BARE_KEY", "extendedTypeOf", "obj", "type", "isArrayOfTables", "i", "formatString", "s", "stringifyValue", "val", "depth", "numberAsFloat", "stringifyInlineTable", "stringifyArray", "keys", "res", "k", "array", "stringifyArrayTable", "key", "stringifyTable", "tableKey", "prefix", "preamble", "tables", "tblKey", "stringify", "maxDepth", "numbersAsFloat", "str", "dist_default", "parse", "stringify", "TomlDate", "TomlError", "PluginTOML", "sys", "s", "dist_default", "plugin_toml_default", "plugin_test_default", "a", "b", "sys", "cloneAsJSON", "x", "PLUGIN_MIN_VERSION_INT", "newCompilerOptions", "initObj", "NakoCompiler", "_NakoCompiler", "options", "nako_core_version_default", "NakoLogger", "NakoPrepare", "NakoParser", "NakoLexer", "name", "plugin_system_default", "plugin_math_default", "plugin_promise_default", "plugin_test_default", "plugin_csv_default", "plugin_toml_default", "tokens", "requireStatements", "i", "filename", "m", "basename", "ext", "version", "NakoImportError", "code", "preCode", "tools", "dependencies", "compiler", "loadJS", "item", "tasks", "obj", "res", "pluginFuncs", "loadNako3", "content", "registerFile", "modName", "funclist", "moduleexport", "loadRec", "tagsResolvePath", "v", "result", "err", "line", "modList", "preprocessed", "tokenizationSourceMapping", "SourceMappingOfTokenization", "indentationSyntaxSourceMapping", "SourceMappingOfIndentSyntax", "offsetToLineColumn", "OffsetToLineColumn", "InternalLexerError", "dest", "map", "subtractSourceMapByPreCodeLength", "NakoLexerError", "convertDNCL2", "convertDNCL", "convertIndentSyntax", "convertInlineIndent", "token", "column", "out", "isFirst", "original", "startOffset", "commentTokens", "t", "includeGuard", "deletedTokens", "r", "filePath", "key", "children", "syntaxHighlighting", "requireStatementTokens", "lexerOutput", "ast", "NakoSyntaxError", "a", "func", "isTest", "opt", "o", "e", "genOptions", "NakoGenOptions", "outCode", "mode", "generateJS", "genObj", "fname", "isReset", "opts", "sys", "nakoGlobal", "compiledCode", "gen", "g", "NakoGlobal", "eventName", "callback", "testOnly", "po", "persistent", "fpath", "__v0", "__pluginInfo", "intVersion", "pluginName", "metaValue", "versions", "str", "keyStr", "errMsg", "def", "initKey", "objName", "_objName", "josi", "fn", "returnNone", "asyncFn", "funcObj", "initVars", "plugin_browser_color_default", "r", "g", "b", "z2", "v", "v2", "a", "plugin_browser_ajax_default", "url", "sys", "callback", "options", "res", "text", "err", "option", "params", "bodyData", "status", "contentLength", "fd", "key", "flist", "v", "kv", "resolve", "reject", "type", "data", "plugin_browser_html_default", "text", "tmp", "pre", "f", "sys", "plugin_browser_websocket_default", "callback", "sys", "s", "ws", "cbOpen", "err", "cbError", "e", "cbMsg", "BrowserParts", "plugin_browser_color_default", "plugin_browser_ajax_default", "plugin_browser_html_default", "plugin_browser_websocket_default", "PluginBrowserInWorker", "sys", "err", "a", "b", "plugin_browser_in_worker_default", "PluginWorker", "sys", "func", "data", "e", "msg", "plugin_worker_default", "WebWorkerNakoCompiler", "NakoCompiler", "data", "event", "nako3Compiler", "nako3Global", "plugin_browser_in_worker_default", "plugin_worker_default", "obj", "type", "value", "modInfo"]
7
7
  }