nadesiko3 3.6.21 → 3.6.22

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.
@@ -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/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": ["/* eslint-disable quote-props */\nexport 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", "/* eslint-disable @typescript-eslint/no-explicit-any */\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 }\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 */\nexport const josiList = [\n '\u306B\u3064\u3044\u3066', '\u304F\u3089\u3044', '\u306A\u306E\u304B', '\u307E\u3067\u3092', '\u307E\u3067\u306E', '\u306B\u3088\u308B',\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', '\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'\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 ]*(' + josiListMono.join('|') + ')';\nexport const josiRE = new RegExp(pat);\nexport const josiListExport = josiList;\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\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};\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|px|dot|pt|em|b|mb|kb|gb)/;\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-control-regex\n { name: 'space', pattern: /^(\\x20|\\x09|\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: '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 }\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 parseNumber(n) {\n return Number(n.replace(/_/g, ''));\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\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 } 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') || (t.type === 'word' && t.josi === '\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${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 = 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 = '-' + 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 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 if (rule.name === 'string_ex') {\n // \u5C55\u958B\u3042\u308A\u6587\u5B57\u5217 \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 let offset = 0;\n for (let i = 0; i < list.length; i++) {\n const josi = (i === list.length - 1) ? rp.josi : '';\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 + josi.length\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 break;\n }\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 }\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 (rule.name) {\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 (rule.name === 'dec_lineno') {\n line--;\n continue;\n }\n result.push({\n type: rule.name,\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 (rule.name === '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", "/* eslint-disable @typescript-eslint/no-explicit-any */\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: blocks, josi: '', ...map, end: this.peekSourceMap(), genMode: this.genMode };\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 += 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.yPrint();\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: 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 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\u95A2\u6570\u5B9A\u7FA9\u306E\u672B\u5C3E\u306B\u5FC5\u8981\u3067\u3059\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' + 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' + err.message, def);\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' + 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 * @returns {AstCallFunc | null}\n */\n yPrint() {\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.yGetArg();\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('\u8868\u793A');\n if (!meta) {\n throw new Error('\u95A2\u6570\u300E\u8868\u793A\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: '\u8868\u793A',\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) {\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 const v = this.yGetArg();\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 throw NakoSyntaxError.fromNode(`C\u98A8\u95A2\u6570\u300E${y[0].value}\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 /** @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: '\u56DE',\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 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 const w = 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 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 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: '\u53CD\u5FA9',\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 this.funcLevel++;\n this.saveStack();\n const block = this.yBlock();\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 this.loadStack();\n this.funcLevel--;\n return {\n type: 'func_obj',\n name: '',\n args,\n blocks: [block],\n meta: def.meta,\n josi: '',\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 !== '\u914D\u5217\u53C2\u7167')) {\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 // \u914D\u5217\u3078\u306E\u4EE3\u5165\n if (word.type === '\u914D\u5217\u53C2\u7167') {\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 !== '\u914D\u5217\u53C2\u7167')) {\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 let value = this.popStack(['\u3060\u3051', '']);\n if (!value) {\n value = { type: 'number', value: 1, josi: '\u3060\u3051', ...map, end: this.peekSourceMap() };\n }\n const word = this.popStack(['\u3092']);\n if (!word || (word.type !== 'word' && word.type !== '\u914D\u5217\u53C2\u7167')) {\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 // \u6E1B\u3089\u3059\u306A\u3089-1\u304B\u3051\u308B\n if (action.value === '\u6E1B') {\n const minus_one = { type: 'number', value: -1, line: action.line };\n value = { type: 'op', operator: '*', blocks: [value, minus_one], 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 ? true : false,\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 = '' + args[0].value;\n if (fname === '\u30E1\u30A4\u30F3') {\n fname = '' + 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) {\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 = '\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 threw = 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 threw = 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 (threw) {\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 // 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' + 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' + 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', this.yCalc])) {\n const word = this.createVar(this.y[1], true, this.isExportDefault);\n const astValue = this.y[3] || 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', 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\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.y[6] || 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', this.yCalc])) {\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${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.y[3] || 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', this.yCalc])) {\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\u5909\u6570\u306E\u4EE3\u5165\u6587${i + 1}\u756A\u76EE\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 }\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.y[3] || 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', this.yCalc])) {\n let names = [this.y[0], this.y[2]];\n names = this.createVarList(names, false, this.isExportDefault);\n const astValue = this.y[4] || 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', this.yCalc])) {\n let names = [this.y[0], this.y[2], this.y[4]];\n names = this.createVarList(names, false, this.isExportDefault);\n const astValue = this.y[6] || 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', this.yCalc])) {\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.y[8] || 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', this.yCalc])) {\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.y[10] || 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 minus_num = {\n ...node,\n 'type': 'number',\n 'value': this.arrayIndexFrom\n };\n return {\n ...node,\n type: 'op',\n operator: '-',\n blocks: [node, minus_num]\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 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 === '') {\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 /** @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 return 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 const splitType = operatorList.concat(['eol', ')', ']', '\u306A\u3089\u3070', '\u56DE', '\u9593', '\u53CD\u5FA9', '\u6761\u4EF6\u5206\u5C90']);\n if (this.check2(['func', splitType])) {\n const oneWordFuncToken = this.get();\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 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 ? true : false,\n ...map,\n end: this.peekSourceMap()\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 ? true : false;\n }\n return {\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 }\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 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 }\n if (this.check('[')) {\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 ast.index = this.checkArrayReverse(index);\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 ast.index = this.checkArrayReverse(index);\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 /** @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(['[', '@'])) {\n const ast = {\n type: '\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 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 + '__' + 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 // 'key' : value\n else if (this.accept(['string', ':', this.yCalc])) {\n a.push(this.y[0]);\n a.push(this.y[2]);\n }\n // key\n else if (this.accept(['word'])) {\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 // str or num\n else if (this.checkTypes(['string', 'number'])) {\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 /** @returns {Ast | null} */\n yJSONObject() {\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 /** @returns {AstBlocks | null} */\n yJSONArray() {\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}\nclass 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\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 [0x2716, '*'], // \u00D7\u306E\u7D75\u6587\u5B57 (#1183)\n [0x2795, '+'], // +\u306E\u7D75\u6587\u5B57 (#1183)\n [0x2796, '-'], // -\u306E\u7D75\u6587\u5B57 (#1183)\n [0x2797, '\u00F7'] // \u00F7\u306E\u7D75\u6587\u5B57 (#1183)\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().substr(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 res.push(new ConvertResult(str + endOfStr, src.getSourcePosition(left)));\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", "/* eslint-disable @typescript-eslint/no-explicit-any */\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 // \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 __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', ${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 // \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 += `${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 // eslint-disable-next-line @typescript-eslint/no-empty-function\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 // eslint-disable-next-line @typescript-eslint/no-empty-function\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 '' + 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 '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 'if':\n code += this.convIf(node);\n break;\n case 'for':\n code += this.convFor(node);\n break;\n case '\u53CD\u5FA9': // foreach\n code += this.convForeach(node);\n break;\n case '\u56DE': // repeat_times\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 '\u914D\u5217\u53C2\u7167':\n code += this.convRefArray(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 // __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})`\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}*/`;\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 commentSrc = commentSrc.replace(/\\n/g, '\u00B6');\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 = '' + file;\n const fileNo = this.getConstPoolsTemplateId(file);\n // msg\n const msgNo = this.getConstPoolsTemplateId(msg);\n // args\n const args2 = [];\n for (const i in args) {\n const arg = '' + args[i];\n const argNo = this.getConstPoolsTemplateId(arg);\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 // 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 #1663)\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 // eslint-disable-next-line @typescript-eslint/no-empty-function\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 // \u30D6\u30ED\u30C3\u30AF\u3067asyncFn\u3092\u4F7F\u3063\u305F\u304B\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 // \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.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 const name = this._convGen(node.name, true);\n const list = node.index;\n let code = name;\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 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 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 ` 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 '} else { // down\\n' +\n ` if (${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 '};\\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 };\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 }\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 = `/*\u623B\u5024\u306E\u306A\u3044\u95A2\u6570\u547C\u51FA1*/${funcBegin}${funcCall};\\n`;\n }\n else {\n code = `/*\u623B\u5024\u306E\u306A\u3044\u95A2\u6570\u547C\u51FA2*/${funcBegin}try {\\n${indent(funcCall, 1)};\\n} finally {\\n${indent(funcEnd, 1)}}\\n`;\n }\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 code = `/* funcCallThis2 */(${funcDef}(){\\n${indent(`${funcBegin}try {\\n${indent(`return ${sorePrefex}${funcCall}${sorePostfix};`, 1)}\\n} finally {\\n${indent(funcEnd, 1)}}`, 1)}}).call(this)`;\n }\n }\n // ...\u3057\u3066\n if (node.josi === '\u3057\u3066' || (node.josi === '' && !isExpression)) {\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 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 === '\u914D\u5217\u53C2\u7167') {\n varGetter = this.convRefArray(nodeName);\n varSetter = `${varGetter} = ${valueVar}`;\n varInitter = `${varGetter} = 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} = ${varGetter} + ${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 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 = '' + 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 this.usedFuncSet.add(`!${name}:\u521D\u671F\u5316`);\n pluginCode += `__v0.get('!${name}:\u521D\u671F\u5316')(__self);\\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 = []\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 = '' + (new Date()).getTime() + '_' + Math.floor(0xFFFFFFFF * Math.random());\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 com.getLogger().trace('--- generate ---\\n' + js);\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 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 // \u7121\u610F\u5473\u306A\u6539\u884C\u3084\u30BB\u30DF\u30B3\u30ED\u30F3\u3092\u524A\u9664\n code = code.replace(/;{2,}/g, ';');\n code = code.replace(/\\n{2,}/g, '\\n');\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 code = result.join('\\n');\n return code;\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", "/* eslint-disable @typescript-eslint/no-explicit-any */\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 { NewEmptyToken } from './nako_types.mjs';\nimport { NakoIndentError } from '../src/nako_errors.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/** \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 //\n const lines = splitTokens(tokens, 'eol');\n const blockIndents = [];\n let checkICount = -1;\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 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 // JSON\u306E\u9014\u4E2D\u3067\u3042\u308C\u3070\u30D6\u30ED\u30C3\u30AF\u306E\u5909\u66F4\u306F\u884C\u308F\u306A\u3044\n if (jsonObjLevel > 0 || jsonArrayLevel > 0) {\n checkJsonSyntax(line);\n continue;\n }\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 // JSON\u306E\u9014\u4E2D\u3067\u3042\u308C\u3070\u30D6\u30ED\u30C3\u30AF\u306E\u5909\u66F4\u306F\u884C\u308F\u306A\u3044\n checkJsonSyntax(line);\n if (jsonObjLevel > 0 || jsonArrayLevel > 0) {\n continue;\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}\nfunction getLastTokenWithoutEOL(line) {\n const len = line.length;\n if (len === 0) {\n return NewEmptyToken('?');\n }\n let res = line[len - 1];\n if (res.type === 'eol') {\n if (len >= 2) {\n res = line[len - 2];\n }\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 // console.log('@@@push', curI)\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 t = line[line.length - 1];\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 // console.log('###', debugTokens(result))\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[t.type + ':' + 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", "/* eslint-disable @typescript-eslint/no-explicit-any */\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[t.type + ':' + 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 // eslint-disable-next-line multiline-ternary\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}\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}`;\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 text += `${NakoColors.color.red}\u2613${NakoColors.color.reset} ${t.name}: ${err.message}\\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 po[clearName].fn(this);\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.6.20',\n major: 3,\n minor: 6,\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.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' + 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 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 = 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 return eval(src);\n }\n catch (e) {\n console.warn('[eval]', e);\n return null;\n }\n };\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: 1 }, // @\u306F\u3044\n '\u3044\u3044\u3048': { type: 'const', value: 0 }, // @\u3044\u3044\u3048\n '\u771F': { type: 'const', value: 1 }, // @\u3057\u3093\n '\u507D': { type: 'const', value: 0 }, // @\u304E\n '\u6C38\u9060': { type: 'const', value: 1 }, // @\u3048\u3044\u3048\u3093\n '\u30AA\u30F3': { type: 'const', value: 1 }, // @\u304A\u3093\n '\u30AA\u30D5': { type: 'const', value: 0 }, // @\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 // @\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 = sys.__printPool + s;\n sys.__printPool = '';\n //\n sys.__setSysVar('\u8868\u793A\u30ED\u30B0', 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 return a + b;\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 // @\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 // eslint-disable-next-line no-eval\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 // eslint-disable-next-line no-eval\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 fn: function (code, sys) {\n sys.__setSysVar('\u8868\u793A\u30ED\u30B0', '');\n sys.__self.runEx(code, sys.__modName, { resetEnv: false, resetLog: true });\n const outLog = sys.__getSysVar('\u8868\u793A\u30ED\u30B0') + '';\n if (outLog) {\n sys.logger.trace(outLog);\n }\n return outLog;\n }\n },\n '\u30CA\u30C7\u30B7\u30B3\u7D9A': {\n type: 'func',\n josi: [['\u3092', '\u3067']],\n fn: function (code, sys) {\n sys.__self.runEx(code, sys.__modName, { resetEnv: false, resetAll: false });\n const out = sys.__getSysVar('\u8868\u793A\u30ED\u30B0') + '';\n if (out) {\n sys.logger.trace(out);\n }\n return out;\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('' + 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) ? 1 : 0;\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 (a, b) {\n return (a << b);\n }\n },\n 'SHIFT_R': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (a, b) {\n return (a >> b);\n }\n },\n 'SHIFT_UR': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (a, b) {\n return (a >>> b);\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 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 return String(s).indexOf(a) + 1;\n }\n },\n 'CHR': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n if (!String.fromCodePoint) {\n return String.fromCharCode(v);\n }\n return String.fromCodePoint(v);\n }\n },\n 'ASC': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n if (!String.prototype.codePointAt) {\n return String(v).charCodeAt(0);\n }\n return String(v).codePointAt(0);\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 ss = String(s);\n const mae = ss.substring(0, i - 1);\n const usi = ss.substring(i - 1);\n return mae + a + usi;\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 let str = String(s);\n str = str.substring(a);\n const res = str.indexOf(b);\n if (res === -1) {\n return 0;\n }\n return res + 1 + a;\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 '\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) {\n cnt = cnt || 1;\n return (String(s).substring(a - 1, a + cnt - 1));\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 cnt = cnt || 1;\n return (String(s).substring(a - 1, a + cnt - 1));\n }\n },\n 'LEFT': {\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 }\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 }\n },\n 'RIGHT': {\n type: 'func',\n josi: [['\u306E', '\u3067'], ['\u3060\u3051']],\n pure: true,\n fn: function (s, cnt) {\n s = '' + s;\n return (s.substring(s.length - cnt, s.length));\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 s = '' + s;\n return (s.substring(s.length - cnt, s.length));\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 s = '' + s;\n const mae = s.substring(0, a - 1);\n const usi = s.substring((a - 1 + b));\n return mae + usi;\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 s = String(s).replace(/^\\s+/, '').replace(/\\s+$/, '');\n return s;\n }\n },\n '\u7A7A\u767D\u9664\u53BB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n s = String(s).replace(/^\\s+/, '').replace(/\\s+$/, '');\n return 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-\\x7F]/g, function (v) {\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(/[\\uFF00-\\uFF5F]/g, function (v) {\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\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 // @\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 '\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))/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 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\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 = 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 = 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 = 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']],\n pure: true,\n fn: function (a, b) {\n const result = [];\n for (let i = 0; i < b; i++) {\n result.push(a);\n }\n return result;\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 n = '00' + n;\n return n.substring(n.length - 2, n.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 ('' + t.getFullYear()).substring(2);\n case 'MM': return sys.__zero2(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 = 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 + 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 + t2.getMonth()) -\n (t1.getFullYear() * 12 + 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(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(d.getFullYear() + addY);\n d.setMonth(d.getMonth() + addM);\n d.setDate(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 '\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\u30D5\u30E9\u30B0\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: true,\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: true,\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};\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]) * 180 / Math.PI;\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 // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\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)) + 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)) + 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};\nexport function resetEnv() {\n options.delimiter = ',';\n options.eol = '\\r\\n';\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 if (typeof (v) === 'string') {\n if (v.search(/^[0-9.]+$/) >= 0) {\n v = parseFloat(v); // convert number\n }\n }\n return v;\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}\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 '\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};\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) {\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 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 * 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]${a} [\u671F\u5F85]${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 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 }\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 = tokens[i + 1].value + '';\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:')) {\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:')) {\n const name = filename.split(':')[1];\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.addPluginFile(item.value, item.filePath, pluginFuncs, false);\n dependencies[item.filePath].funclist = pluginFuncs;\n dependencies[item.filePath].moduleExport = {};\n dependencies[item.filePath].addPluginFile = () => { this.addPluginFile(item.value, item.filePath, pluginFuncs, false); };\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 // eslint-disable-next-line @typescript-eslint/no-empty-function\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${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('' + 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 this.clearPlugins();\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${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${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 outCode = this.generateCode(ast, new NakoGenOptions(options.testOnly));\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 */\n generateCode(ast, opt) {\n // Select Code Generator #637\n const mode = ast.genMode || '';\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 // 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 // eslint-disable-next-line no-new-func\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 * \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 /** \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 });\n return this._runEx(code, fname, opts, preCode);\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 txt = await res.json();\n return txt;\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(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(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
- "mappings": "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",
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", "rules", "cbRangeComment", "parseNumber", "src", "cbString", "cbWordParser", "trimOkurigana", "s", "res", "josi", "numEOL", "i", "isTrimOkurigana", "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", "rp", "e", "NakoLexerError", "offset", "srcOffset", "value", "um", "unitRE", "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", "err", "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", "num", "bUntil", "errorForArguments", "flagDown", "loopDirection", "kurikaesu", "incdec", "vInc", "vTo", "vFrom", "vWord", "wordStr", "target", "joukenbunki", "condToken", "defaultBlock", "condBlock", "kokomade", "dainyu", "value", "indexArray", "sadameru", "attrNode", "attr", "action", "minus_one", "cur", "r", "operatorList", "s", "msgDebug", "msg", "d0", "d1", "first", "last", "callToken", "funcObj", "nullCount", "valueCount", "i", "popArg", "varname", "funcNode", "fname", "space", "isexport", "threw", "nameToken", "valueToken", "la", "lb", "wordToken", "vtype", "wordVar", "astValue", "names", "namesAst", "minus_num", "ary", "astIndexes", "tmpReadingCalc", "t1", "fCalc", "t2", "v2", "closeParent", "tok", "m", "astLeft", "astRight", "o", "splitType", "oneWordFuncToken", "tt", "funcNameToken", "funcToken", "funcPtr", "ast", "index", "isConst", "gname", "typeName", "defValue", "wordAst", "firstToken", "key", "v1", "kansi", "errBlock", "isAsyncFn", "callNode", "func", "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", "position", "res", "lno", "dispName", "pv", "block", "commentSrc", "mode", "isStrict", "astValue", "funcName", "poolIndex", "msg", "id", "args", "file", "line", "fileNo", "msgNo", "args2", "arg", "argNo", "cmd", "cmdj", "isExtractJS", "performanceMonitorInjectAtStart", "performanceMonitorInjectAtEnd", "variableDeclarations", "indent", "pushStack", "popStack", "varsDeclared", "word", "errMsg", "callCheckFunc", "oldUsedAsyncFn", "tof", "lineInfo", "nameFuncValue", "resultArray", "list", "idx", "val", "keyStr", "valStr", "e", "valueNode", "indexNodes", "codeInit", "codeArray", "arrayDefCode", "tmpVar", "initArrayCode", "tmpflag", "astFrom", "astTo", "astInc", "astBlock", "idLoop", "varI", "loopVarSetter", "varName", "varFrom", "varTo", "varTemp", "sorePrefex", "kara", "made", "temp", "flagDown", "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", "v", "text", "noCheckFuncs", "argsCode", "argsA", "argStr", "funcCall", "sorePostfix", "funcBody", "right", "left", "OP_TBL", "op", "incValue", "varGetter", "varSetter", "varInitter", "nodeName", "astFunc", "vtype", "errBlock", "pluginCode", "initkey", "STANDALONE_CODE", "generateJS", "gen", "js", "jsInit", "funcID", "asyncMain", "syncMain", "codeImportFiles", "importNames", "ff", "initCode", "replaceTemplateCode", "template", "values", "pat", "spc", "lines", "str", "debugTokens", "tokens", "result", "i", "t", "ftype", "fvalue", "s", "makeIndent", "lastTokenInfo", "NewEmptyToken", "newToken", "type", "value", "templateToken", "IS_DEBUG", "isSkipWord", "t", "convertInlineIndent", "tokens", "lines", "splitTokens", "blockIndents", "checkICount", "jsonObjLevel", "jsonArrayLevel", "checkJsonSyntax", "line", "i", "IsEmptyLine", "leftToken", "GetLeftTokens", "lineICount", "tFirst", "newToken", "tLast", "getLastTokenWithoutEOL", "result", "joinTokenLines", "debugTokens", "r", "len", "NewEmptyToken", "res", "delimiter", "kakko", "j", "ty", "INDENT_MODE_KEYWORDS", "convertIndentSyntax", "useIndentSynax", "NakoIndentError", "lastI", "curI", "blockIndentTopLast", "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", "callback", "l", "message", "position", "NakoColors", "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", "clearName", "pname", "po", "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", "sys", "b", "aa", "jsonA", "jsonB", "p", "c", "args", "obj", "m", "code", "outLog", "out", "tf", "t1", "n", "r", "g", "z2", "v2", "ss", "mae", "usi", "str", "res", "cnt", "usiro", "subS", "j", "result", "chr", "zen1", "han1", "zen2", "han2", "c2", "n2", "re", "sa", "z", "checkerRE", "ufunc", "tmp", "idx", "old", "start", "last", "x", "y", "nn", "no", "ns", "ms", "row", "col", "cols", "rows", "keys", "k", "nr", "sum", "line", "key", "body", "resolve", "reject", "timerId", "err", "NakoRuntimeError", "d", "tm", "era", "gengo", "d2", "t2", "unit", "op", "sec", "rd", "opc", "addY", "addM", "addD", "curLine", "breakpoints", "forceLine", "vars", "fname", "text", "url", "kv", "u8a", "utf8str", "decodedUtf8str", "dec", "decodedArray", "plugin_math_default", "v", "y", "x", "XY", "sys", "a", "b", "min", "max", "base", "options", "parse", "txt", "delimiter", "options", "patToDelim", "reToDelim", "convType", "v", "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", "plugin_csv_default", "plugin_promise_default", "sys", "promise", "callback", "resolve", "reject", "result", "cbFunc", "reason", "err", "args", "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", "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", "e", "outCode", "NakoGenOptions", "mode", "generateJS", "genObj", "fname", "isReset", "opts", "sys", "nakoGlobal", "o", "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", "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"]
4
+ "sourcesContent": ["/* eslint-disable quote-props */\nexport 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", "/* eslint-disable @typescript-eslint/no-explicit-any */\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 }\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 */\nexport const josiList = [\n '\u306B\u3064\u3044\u3066', '\u304F\u3089\u3044', '\u306A\u306E\u304B', '\u307E\u3067\u3092', '\u307E\u3067\u306E', '\u306B\u3088\u308B',\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', '\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'\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 ]*(' + josiListMono.join('|') + ')';\nexport const josiRE = new RegExp(pat);\nexport const josiListExport = josiList;\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\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};\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|px|dot|pt|em|b|mb|kb|gb)/;\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-control-regex\n { name: 'space', pattern: /^(\\x20|\\x09|\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: '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 }\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 parseNumber(n) {\n return Number(n.replace(/_/g, ''));\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\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 } 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') || (t.type === 'word' && t.josi === '\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${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 = 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 = '-' + 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 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 if (rule.name === 'string_ex') {\n // \u5C55\u958B\u3042\u308A\u6587\u5B57\u5217 \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 let offset = 0;\n for (let i = 0; i < list.length; i++) {\n const josi = (i === list.length - 1) ? rp.josi : '';\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 + josi.length\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 break;\n }\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 }\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 (rule.name) {\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 (rule.name === 'dec_lineno') {\n line--;\n continue;\n }\n result.push({\n type: rule.name,\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 (rule.name === '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", "/* eslint-disable @typescript-eslint/no-explicit-any */\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: blocks, josi: '', ...map, end: this.peekSourceMap(), genMode: this.genMode };\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 += 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.yPrint();\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: 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 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\u95A2\u6570\u5B9A\u7FA9\u306E\u672B\u5C3E\u306B\u5FC5\u8981\u3067\u3059\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' + 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' + err.message, def);\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' + 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 * @returns {AstCallFunc | null}\n */\n yPrint() {\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.yGetArg();\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('\u8868\u793A');\n if (!meta) {\n throw new Error('\u95A2\u6570\u300E\u8868\u793A\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: '\u8868\u793A',\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) {\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 const v = this.yGetArg();\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 throw NakoSyntaxError.fromNode(`C\u98A8\u95A2\u6570\u300E${y[0].value}\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 /** @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: '\u56DE',\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 = 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: '\u53CD\u5FA9',\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 this.funcLevel++;\n this.saveStack();\n const block = this.yBlock();\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 this.loadStack();\n this.funcLevel--;\n return {\n type: 'func_obj',\n name: '',\n args,\n blocks: [block],\n meta: def.meta,\n josi: '',\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 !== '\u914D\u5217\u53C2\u7167')) {\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 // \u914D\u5217\u3078\u306E\u4EE3\u5165\n if (word.type === '\u914D\u5217\u53C2\u7167') {\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 !== '\u914D\u5217\u53C2\u7167')) {\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 let value = this.popStack(['\u3060\u3051', '']);\n if (!value) {\n value = { type: 'number', value: 1, josi: '\u3060\u3051', ...map, end: this.peekSourceMap() };\n }\n const word = this.popStack(['\u3092']);\n if (!word || (word.type !== 'word' && word.type !== '\u914D\u5217\u53C2\u7167')) {\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 // \u6E1B\u3089\u3059\u306A\u3089-1\u304B\u3051\u308B\n if (action.value === '\u6E1B') {\n const minus_one = { type: 'number', value: -1, line: action.line };\n value = { type: 'op', operator: '*', blocks: [value, minus_one], 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 ? true : false,\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 = '' + args[0].value;\n if (fname === '\u30E1\u30A4\u30F3') {\n fname = '' + 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) {\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 = '\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 threw = 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 threw = 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 (threw) {\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 // 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' + 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' + 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', this.yCalc])) {\n const word = this.createVar(this.y[1], true, this.isExportDefault);\n const astValue = this.y[3] || 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', 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\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.y[6] || 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', this.yCalc])) {\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${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.y[3] || 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', this.yCalc])) {\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\u5909\u6570\u306E\u4EE3\u5165\u6587${i + 1}\u756A\u76EE\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 }\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.y[3] || 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', this.yCalc])) {\n let names = [this.y[0], this.y[2]];\n names = this.createVarList(names, false, this.isExportDefault);\n const astValue = this.y[4] || 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', this.yCalc])) {\n let names = [this.y[0], this.y[2], this.y[4]];\n names = this.createVarList(names, false, this.isExportDefault);\n const astValue = this.y[6] || 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', this.yCalc])) {\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.y[8] || 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', this.yCalc])) {\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.y[10] || 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 minus_num = {\n ...node,\n 'type': 'number',\n 'value': this.arrayIndexFrom\n };\n return {\n ...node,\n type: 'op',\n operator: '-',\n blocks: [node, minus_num]\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 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 === '') {\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 /** @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 return 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 const splitType = operatorList.concat(['eol', ')', ']', '\u306A\u3089\u3070', '\u56DE', '\u9593', '\u53CD\u5FA9', '\u6761\u4EF6\u5206\u5C90']);\n if (this.check2(['func', splitType])) {\n const oneWordFuncToken = this.get();\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 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 ? true : false,\n ...map,\n end: this.peekSourceMap()\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 ? true : false;\n }\n return {\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 }\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 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 }\n if (this.check('[')) {\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 ast.index = this.checkArrayReverse(index);\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 ast.index = this.checkArrayReverse(index);\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 /** @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(['[', '@'])) {\n const ast = {\n type: '\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 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 + '__' + 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 // 'key' : value\n else if (this.accept(['string', ':', this.yCalc])) {\n a.push(this.y[0]);\n a.push(this.y[2]);\n }\n // key\n else if (this.accept(['word'])) {\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 // str or num\n else if (this.checkTypes(['string', 'number'])) {\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 /** @returns {Ast | null} */\n yJSONObject() {\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 /** @returns {AstBlocks | null} */\n yJSONArray() {\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}\nclass 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\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 [0x2716, '*'], // \u00D7\u306E\u7D75\u6587\u5B57 (#1183)\n [0x2795, '+'], // +\u306E\u7D75\u6587\u5B57 (#1183)\n [0x2796, '-'], // -\u306E\u7D75\u6587\u5B57 (#1183)\n [0x2797, '\u00F7'] // \u00F7\u306E\u7D75\u6587\u5B57 (#1183)\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().substr(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 res.push(new ConvertResult(str + endOfStr, src.getSourcePosition(left)));\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", "/* eslint-disable @typescript-eslint/no-explicit-any */\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 // \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 __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', ${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 // \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 += `${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 // eslint-disable-next-line @typescript-eslint/no-empty-function\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 // eslint-disable-next-line @typescript-eslint/no-empty-function\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 '' + 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 '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 'if':\n code += this.convIf(node);\n break;\n case 'for':\n code += this.convFor(node);\n break;\n case '\u53CD\u5FA9': // foreach\n code += this.convForeach(node);\n break;\n case '\u56DE': // repeat_times\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 '\u914D\u5217\u53C2\u7167':\n code += this.convRefArray(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 // __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})`\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}*/`;\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 commentSrc = commentSrc.replace(/\\n/g, '\u00B6');\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 = '' + file;\n const fileNo = this.getConstPoolsTemplateId(file);\n // msg\n const msgNo = this.getConstPoolsTemplateId(msg);\n // args\n const args2 = [];\n for (const i in args) {\n const arg = '' + args[i];\n const argNo = this.getConstPoolsTemplateId(arg);\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 // 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 #1663)\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 // eslint-disable-next-line @typescript-eslint/no-empty-function\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 // \u30D6\u30ED\u30C3\u30AF\u3067asyncFn\u3092\u4F7F\u3063\u305F\u304B\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 // \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.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 const name = this._convGen(node.name, true);\n const list = node.index;\n let code = name;\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 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 (${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 { // down\\n' +\n ` if (${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 '};\\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 };\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 }\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 = `/*\u623B\u5024\u306E\u306A\u3044\u95A2\u6570\u547C\u51FA1*/${funcBegin}${funcCall};\\n`;\n }\n else {\n code = `/*\u623B\u5024\u306E\u306A\u3044\u95A2\u6570\u547C\u51FA2*/${funcBegin}try {\\n${indent(funcCall, 1)};\\n} finally {\\n${indent(funcEnd, 1)}}\\n`;\n }\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 code = `/* funcCallThis2 */(${funcDef}(){\\n${indent(`${funcBegin}try {\\n${indent(`return ${sorePrefex}${funcCall}${sorePostfix};`, 1)}\\n} finally {\\n${indent(funcEnd, 1)}}`, 1)}}).call(this)`;\n }\n }\n // ...\u3057\u3066\n if (node.josi === '\u3057\u3066' || (node.josi === '' && !isExpression)) {\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 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 === '\u914D\u5217\u53C2\u7167') {\n varGetter = this.convRefArray(nodeName);\n varSetter = `${varGetter} = ${valueVar}`;\n varInitter = `${varGetter} = 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} = ${varGetter} + ${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 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 = '' + 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 this.usedFuncSet.add(`!${name}:\u521D\u671F\u5316`);\n pluginCode += `__v0.get('!${name}:\u521D\u671F\u5316')(__self);\\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 = []\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 = '' + (new Date()).getTime() + '_' + Math.floor(0xFFFFFFFF * Math.random());\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 com.getLogger().trace('--- generate ---\\n' + js);\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 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 // \u7121\u610F\u5473\u306A\u6539\u884C\u3084\u30BB\u30DF\u30B3\u30ED\u30F3\u3092\u524A\u9664\n code = code.replace(/;{2,}/g, ';');\n code = code.replace(/\\n{2,}/g, '\\n');\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 code = result.join('\\n');\n return code;\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", "/* eslint-disable @typescript-eslint/no-explicit-any */\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 { NewEmptyToken } from './nako_types.mjs';\nimport { NakoIndentError } from '../src/nako_errors.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/** \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 //\n const lines = splitTokens(tokens, 'eol');\n const blockIndents = [];\n let checkICount = -1;\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 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 // JSON\u306E\u9014\u4E2D\u3067\u3042\u308C\u3070\u30D6\u30ED\u30C3\u30AF\u306E\u5909\u66F4\u306F\u884C\u308F\u306A\u3044\n if (jsonObjLevel > 0 || jsonArrayLevel > 0) {\n checkJsonSyntax(line);\n continue;\n }\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 // JSON\u306E\u9014\u4E2D\u3067\u3042\u308C\u3070\u30D6\u30ED\u30C3\u30AF\u306E\u5909\u66F4\u306F\u884C\u308F\u306A\u3044\n checkJsonSyntax(line);\n if (jsonObjLevel > 0 || jsonArrayLevel > 0) {\n continue;\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}\nfunction getLastTokenWithoutEOL(line) {\n const len = line.length;\n if (len === 0) {\n return NewEmptyToken('?');\n }\n let res = line[len - 1];\n if (res.type === 'eol') {\n if (len >= 2) {\n res = line[len - 2];\n }\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 // console.log('@@@push', curI)\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 t = line[line.length - 1];\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 // console.log('###', debugTokens(result))\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[t.type + ':' + 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", "/* eslint-disable @typescript-eslint/no-explicit-any */\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[t.type + ':' + 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 // eslint-disable-next-line multiline-ternary\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}\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}`;\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 text += `${NakoColors.color.red}\u2613${NakoColors.color.reset} ${t.name}: ${err.message}\\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 po[clearName].fn(this);\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.6.22',\n major: 3,\n minor: 6,\n patch: 22\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.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' + 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 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 = 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 return eval(src);\n }\n catch (e) {\n console.warn('[eval]', e);\n return null;\n }\n };\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: 1 }, // @\u306F\u3044\n '\u3044\u3044\u3048': { type: 'const', value: 0 }, // @\u3044\u3044\u3048\n '\u771F': { type: 'const', value: 1 }, // @\u3057\u3093\n '\u507D': { type: 'const', value: 0 }, // @\u304E\n '\u6C38\u9060': { type: 'const', value: 1 }, // @\u3048\u3044\u3048\u3093\n '\u30AA\u30F3': { type: 'const', value: 1 }, // @\u304A\u3093\n '\u30AA\u30D5': { type: 'const', value: 0 }, // @\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 // @\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 = sys.__printPool + s;\n sys.__printPool = '';\n //\n sys.__setSysVar('\u8868\u793A\u30ED\u30B0', 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 return a + b;\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 // @\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 // eslint-disable-next-line no-eval\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 // eslint-disable-next-line no-eval\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 fn: function (code, sys) {\n sys.__setSysVar('\u8868\u793A\u30ED\u30B0', '');\n sys.__self.runEx(code, sys.__modName, { resetEnv: false, resetLog: true });\n const outLog = sys.__getSysVar('\u8868\u793A\u30ED\u30B0') + '';\n if (outLog) {\n sys.logger.trace(outLog);\n }\n return outLog;\n }\n },\n '\u30CA\u30C7\u30B7\u30B3\u7D9A': {\n type: 'func',\n josi: [['\u3092', '\u3067']],\n fn: function (code, sys) {\n sys.__self.runEx(code, sys.__modName, { resetEnv: false, resetAll: false });\n const out = sys.__getSysVar('\u8868\u793A\u30ED\u30B0') + '';\n if (out) {\n sys.logger.trace(out);\n }\n return out;\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('' + 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) ? 1 : 0;\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 (a, b) {\n return (a << b);\n }\n },\n 'SHIFT_R': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (a, b) {\n return (a >> b);\n }\n },\n 'SHIFT_UR': {\n type: 'func',\n josi: [['\u3092'], ['\u3067']],\n pure: true,\n fn: function (a, b) {\n return (a >>> b);\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 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 return String(s).indexOf(a) + 1;\n }\n },\n 'CHR': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n if (!String.fromCodePoint) {\n return String.fromCharCode(v);\n }\n return String.fromCodePoint(v);\n }\n },\n 'ASC': {\n type: 'func',\n josi: [['\u306E']],\n pure: true,\n fn: function (v) {\n if (!String.prototype.codePointAt) {\n return String(v).charCodeAt(0);\n }\n return String(v).codePointAt(0);\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 ss = String(s);\n const mae = ss.substring(0, i - 1);\n const usi = ss.substring(i - 1);\n return mae + a + usi;\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 let str = String(s);\n str = str.substring(a);\n const res = str.indexOf(b);\n if (res === -1) {\n return 0;\n }\n return res + 1 + a;\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 '\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) {\n cnt = cnt || 1;\n return (String(s).substring(a - 1, a + cnt - 1));\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 cnt = cnt || 1;\n return (String(s).substring(a - 1, a + cnt - 1));\n }\n },\n 'LEFT': {\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 }\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 }\n },\n 'RIGHT': {\n type: 'func',\n josi: [['\u306E', '\u3067'], ['\u3060\u3051']],\n pure: true,\n fn: function (s, cnt) {\n s = '' + s;\n return (s.substring(s.length - cnt, s.length));\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 s = '' + s;\n return (s.substring(s.length - cnt, s.length));\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 s = '' + s;\n const mae = s.substring(0, a - 1);\n const usi = s.substring((a - 1 + b));\n return mae + usi;\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 s = String(s).replace(/^\\s+/, '').replace(/\\s+$/, '');\n return s;\n }\n },\n '\u7A7A\u767D\u9664\u53BB': {\n type: 'func',\n josi: [['\u306E', '\u3092']],\n pure: true,\n fn: function (s) {\n s = String(s).replace(/^\\s+/, '').replace(/\\s+$/, '');\n return 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-\\x7F]/g, function (v) {\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(/[\\uFF00-\\uFF5F]/g, function (v) {\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\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 // @\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 '\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))/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 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\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 = 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 = 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 = 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']],\n pure: true,\n fn: function (a, b) {\n const result = [];\n for (let i = 0; i < b; i++) {\n result.push(a);\n }\n return result;\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 n = '00' + n;\n return n.substring(n.length - 2, n.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 ('' + t.getFullYear()).substring(2);\n case 'MM': return sys.__zero2(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 = 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 + 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 + t2.getMonth()) -\n (t1.getFullYear() * 12 + 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(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(d.getFullYear() + addY);\n d.setMonth(d.getMonth() + addM);\n d.setDate(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 '\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\u30D5\u30E9\u30B0\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: true,\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: true,\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};\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]) * 180 / Math.PI;\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 // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\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)) + 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)) + 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};\nexport function resetEnv() {\n options.delimiter = ',';\n options.eol = '\\r\\n';\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 if (typeof (v) === 'string') {\n if (v.search(/^[0-9.]+$/) >= 0) {\n v = parseFloat(v); // convert number\n }\n }\n return v;\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}\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 '\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};\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) {\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 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 * 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]${a} [\u671F\u5F85]${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 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 }\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 = tokens[i + 1].value + '';\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:')) {\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:')) {\n const name = filename.split(':')[1];\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.addPluginFile(item.value, item.filePath, pluginFuncs, false);\n dependencies[item.filePath].funclist = pluginFuncs;\n dependencies[item.filePath].moduleExport = {};\n dependencies[item.filePath].addPluginFile = () => { this.addPluginFile(item.value, item.filePath, pluginFuncs, false); };\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 // eslint-disable-next-line @typescript-eslint/no-empty-function\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${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('' + 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 this.clearPlugins();\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${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${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 outCode = this.generateCode(ast, new NakoGenOptions(options.testOnly));\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 */\n generateCode(ast, opt) {\n // Select Code Generator #637\n const mode = ast.genMode || '';\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 // 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 // eslint-disable-next-line no-new-func\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 * \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 /** \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 });\n return this._runEx(code, fname, opts, preCode);\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 txt = await res.json();\n return txt;\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(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(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
+ "mappings": "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",
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", "rules", "cbRangeComment", "parseNumber", "src", "cbString", "cbWordParser", "trimOkurigana", "s", "res", "josi", "numEOL", "i", "isTrimOkurigana", "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", "rp", "e", "NakoLexerError", "offset", "srcOffset", "value", "um", "unitRE", "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", "err", "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", "num", "bUntil", "errorForArguments", "flagDown", "flagUp", "loopDirection", "kurikaesu", "incdec", "vInc", "vTo", "vFrom", "vWord", "wordStr", "target", "joukenbunki", "condToken", "defaultBlock", "condBlock", "kokomade", "dainyu", "value", "indexArray", "sadameru", "attrNode", "attr", "action", "minus_one", "cur", "r", "operatorList", "s", "msgDebug", "msg", "d0", "d1", "first", "last", "callToken", "funcObj", "nullCount", "valueCount", "i", "popArg", "varname", "funcNode", "fname", "space", "isexport", "threw", "nameToken", "valueToken", "la", "lb", "wordToken", "vtype", "wordVar", "astValue", "names", "namesAst", "minus_num", "ary", "astIndexes", "tmpReadingCalc", "t1", "fCalc", "t2", "v2", "closeParent", "tok", "m", "astLeft", "astRight", "o", "splitType", "oneWordFuncToken", "tt", "funcNameToken", "funcToken", "funcPtr", "ast", "index", "isConst", "gname", "typeName", "defValue", "wordAst", "firstToken", "key", "v1", "kansi", "errBlock", "isAsyncFn", "callNode", "func", "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", "position", "res", "lno", "dispName", "pv", "block", "commentSrc", "mode", "isStrict", "astValue", "funcName", "poolIndex", "msg", "id", "args", "file", "line", "fileNo", "msgNo", "args2", "arg", "argNo", "cmd", "cmdj", "isExtractJS", "performanceMonitorInjectAtStart", "performanceMonitorInjectAtEnd", "variableDeclarations", "indent", "pushStack", "popStack", "varsDeclared", "word", "errMsg", "callCheckFunc", "oldUsedAsyncFn", "tof", "lineInfo", "nameFuncValue", "resultArray", "list", "idx", "val", "keyStr", "valStr", "e", "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", "v", "text", "noCheckFuncs", "argsCode", "argsA", "argStr", "funcCall", "sorePostfix", "funcBody", "right", "left", "OP_TBL", "op", "incValue", "varGetter", "varSetter", "varInitter", "nodeName", "astFunc", "vtype", "errBlock", "pluginCode", "initkey", "STANDALONE_CODE", "generateJS", "gen", "js", "jsInit", "funcID", "asyncMain", "syncMain", "codeImportFiles", "importNames", "ff", "initCode", "replaceTemplateCode", "template", "values", "pat", "spc", "lines", "str", "debugTokens", "tokens", "result", "i", "t", "ftype", "fvalue", "s", "makeIndent", "lastTokenInfo", "NewEmptyToken", "newToken", "type", "value", "templateToken", "IS_DEBUG", "isSkipWord", "t", "convertInlineIndent", "tokens", "lines", "splitTokens", "blockIndents", "checkICount", "jsonObjLevel", "jsonArrayLevel", "checkJsonSyntax", "line", "i", "IsEmptyLine", "leftToken", "GetLeftTokens", "lineICount", "tFirst", "newToken", "tLast", "getLastTokenWithoutEOL", "result", "joinTokenLines", "debugTokens", "r", "len", "NewEmptyToken", "res", "delimiter", "kakko", "j", "ty", "INDENT_MODE_KEYWORDS", "convertIndentSyntax", "useIndentSynax", "NakoIndentError", "lastI", "curI", "blockIndentTopLast", "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", "callback", "l", "message", "position", "NakoColors", "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", "clearName", "pname", "po", "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", "sys", "b", "aa", "jsonA", "jsonB", "p", "c", "args", "obj", "m", "code", "outLog", "out", "tf", "t1", "n", "r", "g", "z2", "v2", "ss", "mae", "usi", "str", "res", "cnt", "usiro", "subS", "j", "result", "chr", "zen1", "han1", "zen2", "han2", "c2", "n2", "re", "sa", "z", "checkerRE", "ufunc", "tmp", "idx", "old", "start", "last", "x", "y", "nn", "no", "ns", "ms", "row", "col", "cols", "rows", "keys", "k", "nr", "sum", "line", "key", "body", "resolve", "reject", "timerId", "err", "NakoRuntimeError", "d", "tm", "era", "gengo", "d2", "t2", "unit", "op", "sec", "rd", "opc", "addY", "addM", "addD", "curLine", "breakpoints", "forceLine", "vars", "fname", "text", "url", "kv", "u8a", "utf8str", "decodedUtf8str", "dec", "decodedArray", "plugin_math_default", "v", "y", "x", "XY", "sys", "a", "b", "min", "max", "base", "options", "parse", "txt", "delimiter", "options", "patToDelim", "reToDelim", "convType", "v", "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", "plugin_csv_default", "plugin_promise_default", "sys", "promise", "callback", "resolve", "reject", "result", "cbFunc", "reason", "err", "args", "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", "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", "e", "outCode", "NakoGenOptions", "mode", "generateJS", "genObj", "fname", "isReset", "opts", "sys", "nakoGlobal", "o", "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", "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
  }