meaoiu 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/LANGUAGE_GUIDE.md +511 -0
  2. package/LICENSE +21 -0
  3. package/README.md +336 -0
  4. package/dist/api/execution.d.ts +9 -0
  5. package/dist/api/execution.d.ts.map +1 -0
  6. package/dist/api/execution.js +17 -0
  7. package/dist/api/execution.js.map +1 -0
  8. package/dist/api/serviceState.d.ts +24 -0
  9. package/dist/api/serviceState.d.ts.map +1 -0
  10. package/dist/api/serviceState.js +53 -0
  11. package/dist/api/serviceState.js.map +1 -0
  12. package/dist/api/services/completions.d.ts +15 -0
  13. package/dist/api/services/completions.d.ts.map +1 -0
  14. package/dist/api/services/completions.js +48 -0
  15. package/dist/api/services/completions.js.map +1 -0
  16. package/dist/api/services/diagnostics.d.ts +9 -0
  17. package/dist/api/services/diagnostics.d.ts.map +1 -0
  18. package/dist/api/services/diagnostics.js +5 -0
  19. package/dist/api/services/diagnostics.js.map +1 -0
  20. package/dist/api/services/formatting.d.ts +2 -0
  21. package/dist/api/services/formatting.d.ts.map +1 -0
  22. package/dist/api/services/formatting.js +223 -0
  23. package/dist/api/services/formatting.js.map +1 -0
  24. package/dist/api/services/highlight.d.ts +14 -0
  25. package/dist/api/services/highlight.d.ts.map +1 -0
  26. package/dist/api/services/highlight.js +58 -0
  27. package/dist/api/services/highlight.js.map +1 -0
  28. package/dist/api/services/inlayHints.d.ts +22 -0
  29. package/dist/api/services/inlayHints.d.ts.map +1 -0
  30. package/dist/api/services/inlayHints.js +100 -0
  31. package/dist/api/services/inlayHints.js.map +1 -0
  32. package/dist/api/services/search.d.ts +17 -0
  33. package/dist/api/services/search.d.ts.map +1 -0
  34. package/dist/api/services/search.js +35 -0
  35. package/dist/api/services/search.js.map +1 -0
  36. package/dist/api/utils/astUtils.d.ts +11 -0
  37. package/dist/api/utils/astUtils.d.ts.map +1 -0
  38. package/dist/api/utils/astUtils.js +106 -0
  39. package/dist/api/utils/astUtils.js.map +1 -0
  40. package/dist/api/utils/lspUtils.d.ts +16 -0
  41. package/dist/api/utils/lspUtils.d.ts.map +1 -0
  42. package/dist/api/utils/lspUtils.js +5 -0
  43. package/dist/api/utils/lspUtils.js.map +1 -0
  44. package/dist/api/utils/symbolAnalyzer.d.ts +37 -0
  45. package/dist/api/utils/symbolAnalyzer.d.ts.map +1 -0
  46. package/dist/api/utils/symbolAnalyzer.js +440 -0
  47. package/dist/api/utils/symbolAnalyzer.js.map +1 -0
  48. package/dist/api/utils/symbolTable.d.ts +28 -0
  49. package/dist/api/utils/symbolTable.d.ts.map +1 -0
  50. package/dist/api/utils/symbolTable.js +3 -0
  51. package/dist/api/utils/symbolTable.js.map +1 -0
  52. package/dist/cli/main.d.ts +3 -0
  53. package/dist/cli/main.d.ts.map +1 -0
  54. package/dist/cli/main.js +92 -0
  55. package/dist/cli/main.js.map +1 -0
  56. package/dist/cli/tools/completer.d.ts +2 -0
  57. package/dist/cli/tools/completer.d.ts.map +1 -0
  58. package/dist/cli/tools/completer.js +24 -0
  59. package/dist/cli/tools/completer.js.map +1 -0
  60. package/dist/cli/tools/diagnoser.d.ts +2 -0
  61. package/dist/cli/tools/diagnoser.d.ts.map +1 -0
  62. package/dist/cli/tools/diagnoser.js +29 -0
  63. package/dist/cli/tools/diagnoser.js.map +1 -0
  64. package/dist/cli/tools/formatter.d.ts +2 -0
  65. package/dist/cli/tools/formatter.d.ts.map +1 -0
  66. package/dist/cli/tools/formatter.js +27 -0
  67. package/dist/cli/tools/formatter.js.map +1 -0
  68. package/dist/cli/tools/searcher.d.ts +4 -0
  69. package/dist/cli/tools/searcher.d.ts.map +1 -0
  70. package/dist/cli/tools/searcher.js +30 -0
  71. package/dist/cli/tools/searcher.js.map +1 -0
  72. package/dist/cli/tools/starter.d.ts +3 -0
  73. package/dist/cli/tools/starter.d.ts.map +1 -0
  74. package/dist/cli/tools/starter.js +23 -0
  75. package/dist/cli/tools/starter.js.map +1 -0
  76. package/dist/cli/tools/toolUtils.d.ts +8 -0
  77. package/dist/cli/tools/toolUtils.d.ts.map +1 -0
  78. package/dist/cli/tools/toolUtils.js +52 -0
  79. package/dist/cli/tools/toolUtils.js.map +1 -0
  80. package/dist/core/ast.d.ts +140 -0
  81. package/dist/core/ast.d.ts.map +1 -0
  82. package/dist/core/ast.js +3 -0
  83. package/dist/core/ast.js.map +1 -0
  84. package/dist/core/builtIns.d.ts +15 -0
  85. package/dist/core/builtIns.d.ts.map +1 -0
  86. package/dist/core/builtIns.js +175 -0
  87. package/dist/core/builtIns.js.map +1 -0
  88. package/dist/core/error.d.ts +41 -0
  89. package/dist/core/error.d.ts.map +1 -0
  90. package/dist/core/error.js +63 -0
  91. package/dist/core/error.js.map +1 -0
  92. package/dist/core/parser.d.ts +89 -0
  93. package/dist/core/parser.d.ts.map +1 -0
  94. package/dist/core/parser.js +578 -0
  95. package/dist/core/parser.js.map +1 -0
  96. package/dist/core/preprocessor.d.ts +2 -0
  97. package/dist/core/preprocessor.d.ts.map +1 -0
  98. package/dist/core/preprocessor.js +187 -0
  99. package/dist/core/preprocessor.js.map +1 -0
  100. package/dist/core/run/environment.d.ts +43 -0
  101. package/dist/core/run/environment.d.ts.map +1 -0
  102. package/dist/core/run/environment.js +192 -0
  103. package/dist/core/run/environment.js.map +1 -0
  104. package/dist/core/run/interpreter.d.ts +13 -0
  105. package/dist/core/run/interpreter.d.ts.map +1 -0
  106. package/dist/core/run/interpreter.js +415 -0
  107. package/dist/core/run/interpreter.js.map +1 -0
  108. package/dist/core/run/io.d.ts +18 -0
  109. package/dist/core/run/io.d.ts.map +1 -0
  110. package/dist/core/run/io.js +34 -0
  111. package/dist/core/run/io.js.map +1 -0
  112. package/dist/core/run/logger.d.ts +12 -0
  113. package/dist/core/run/logger.d.ts.map +1 -0
  114. package/dist/core/run/logger.js +17 -0
  115. package/dist/core/run/logger.js.map +1 -0
  116. package/dist/core/run/value.d.ts +41 -0
  117. package/dist/core/run/value.d.ts.map +1 -0
  118. package/dist/core/run/value.js +37 -0
  119. package/dist/core/run/value.js.map +1 -0
  120. package/dist/core/tokenizer.d.ts +82 -0
  121. package/dist/core/tokenizer.d.ts.map +1 -0
  122. package/dist/core/tokenizer.js +277 -0
  123. package/dist/core/tokenizer.js.map +1 -0
  124. package/dist/core/typedef.d.ts +32 -0
  125. package/dist/core/typedef.d.ts.map +1 -0
  126. package/dist/core/typedef.js +67 -0
  127. package/dist/core/typedef.js.map +1 -0
  128. package/dist/index.d.ts +12 -0
  129. package/dist/index.d.ts.map +1 -0
  130. package/dist/index.js +13 -0
  131. package/dist/index.js.map +1 -0
  132. package/package.json +60 -0
@@ -0,0 +1,187 @@
1
+ // src/core/preprocessor.ts
2
+ const fullWidthMap = {
3
+ // 数字
4
+ '0': '0',
5
+ '1': '1',
6
+ '2': '2',
7
+ '3': '3',
8
+ '4': '4',
9
+ '5': '5',
10
+ '6': '6',
11
+ '7': '7',
12
+ '8': '8',
13
+ '9': '9',
14
+ // 大写字母
15
+ A: 'A',
16
+ B: 'B',
17
+ C: 'C',
18
+ D: 'D',
19
+ E: 'E',
20
+ F: 'F',
21
+ G: 'G',
22
+ H: 'H',
23
+ I: 'I',
24
+ J: 'J',
25
+ K: 'K',
26
+ L: 'L',
27
+ M: 'M',
28
+ N: 'N',
29
+ O: 'O',
30
+ P: 'P',
31
+ Q: 'Q',
32
+ R: 'R',
33
+ S: 'S',
34
+ T: 'T',
35
+ U: 'U',
36
+ V: 'V',
37
+ W: 'W',
38
+ X: 'X',
39
+ Y: 'Y',
40
+ Z: 'Z',
41
+ // 小写字母
42
+ a: 'a',
43
+ b: 'b',
44
+ c: 'c',
45
+ d: 'd',
46
+ e: 'e',
47
+ f: 'f',
48
+ g: 'g',
49
+ h: 'h',
50
+ i: 'i',
51
+ j: 'j',
52
+ k: 'k',
53
+ l: 'l',
54
+ m: 'm',
55
+ n: 'n',
56
+ o: 'o',
57
+ p: 'p',
58
+ q: 'q',
59
+ r: 'r',
60
+ s: 's',
61
+ t: 't',
62
+ u: 'u',
63
+ v: 'v',
64
+ w: 'w',
65
+ x: 'x',
66
+ y: 'y',
67
+ z: 'z',
68
+ // 标点符号
69
+ '!': '!',
70
+ '"': '"',
71
+ '#': '#',
72
+ '$': '$',
73
+ '%': '%',
74
+ '&': '&',
75
+ ''': "'",
76
+ '(': '(',
77
+ ')': ')',
78
+ '*': '*',
79
+ '+': '+',
80
+ ',': ',',
81
+ '-': '-',
82
+ '.': '.',
83
+ '/': '/',
84
+ ':': ':',
85
+ ';': ';',
86
+ '<': '<',
87
+ '=': '=',
88
+ '>': '>',
89
+ '?': '?',
90
+ '@': '@',
91
+ '[': '[',
92
+ '\': '\\',
93
+ ']': ']',
94
+ '^': '^',
95
+ '_': '_',
96
+ '`': '`',
97
+ '{': '{',
98
+ '|': '|',
99
+ '}': '}',
100
+ '~': '~',
101
+ ' ': ' ',
102
+ // 常见中文排版符号
103
+ '【': '[',
104
+ '】': ']',
105
+ '「': "'",
106
+ '」': "'",
107
+ '『': '"',
108
+ '』': '"',
109
+ '《': '<',
110
+ '》': '>',
111
+ '〈': '<',
112
+ '〉': '>',
113
+ '。': '.',
114
+ '、': ',',
115
+ '‘': "'",
116
+ '’': "'",
117
+ '“': '"',
118
+ '”': '"',
119
+ };
120
+ export function preprocess(sourceCode) {
121
+ let result = '';
122
+ let state = 0 /* State.DEFAULT */;
123
+ let commentNesting = 0;
124
+ for (let i = 0; i < sourceCode.length; i++) {
125
+ const char = sourceCode[i];
126
+ const convertedChar = fullWidthMap[char] ?? char;
127
+ switch (state) {
128
+ case 0 /* State.DEFAULT */: {
129
+ // 根据转换后的字符来判断状态切换
130
+ if (convertedChar === "'") {
131
+ state = 1 /* State.IN_SINGLE_QUOTE */;
132
+ }
133
+ else if (convertedChar === '"') {
134
+ state = 2 /* State.IN_DOUBLE_QUOTE */;
135
+ }
136
+ else if (convertedChar === '(') {
137
+ state = 3 /* State.IN_COMMENT */;
138
+ commentNesting = 1;
139
+ }
140
+ // 在 DEFAULT 状态下,总是添加转换后的字符
141
+ result += convertedChar;
142
+ break;
143
+ }
144
+ case 1 /* State.IN_SINGLE_QUOTE */: {
145
+ if (convertedChar === "'") {
146
+ state = 0 /* State.DEFAULT */;
147
+ result += convertedChar; // 统一输出半宽
148
+ }
149
+ else {
150
+ result += char; // 内部字符原样输出
151
+ }
152
+ break;
153
+ }
154
+ case 2 /* State.IN_DOUBLE_QUOTE */: {
155
+ if (convertedChar === '"') {
156
+ state = 0 /* State.DEFAULT */;
157
+ result += convertedChar; // 统一输出半宽
158
+ }
159
+ else {
160
+ result += char; // 内部字符原样输出
161
+ }
162
+ break;
163
+ }
164
+ case 3 /* State.IN_COMMENT */: {
165
+ if (convertedChar === '(') {
166
+ commentNesting++;
167
+ }
168
+ else if (convertedChar === ')') {
169
+ commentNesting--;
170
+ }
171
+ if (commentNesting === 0) {
172
+ state = 0 /* State.DEFAULT */;
173
+ result += convertedChar; // 统一输出半宽
174
+ }
175
+ else {
176
+ result += char; // 内部字符原样输出
177
+ }
178
+ break;
179
+ }
180
+ default:
181
+ const _s = state;
182
+ console.error('只是告诉你发生了奇怪的事情:', _s);
183
+ }
184
+ }
185
+ return result;
186
+ }
187
+ //# sourceMappingURL=preprocessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preprocessor.js","sourceRoot":"","sources":["../../src/core/preprocessor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type * as AST from '../ast.js';
2
+ import { type MeaoiuValue } from '../typedef.js';
3
+ import { type Evaluated, type ReferenceLink } from './value.js';
4
+ export declare const autoKey: (index: number) => string;
5
+ export declare class Environment {
6
+ readonly id: number;
7
+ private readonly parent;
8
+ private readonly variables;
9
+ private readonly functions;
10
+ readonly orderedVariableNames: string[];
11
+ constructor(parent?: Environment);
12
+ static markReferenceMoved(ref: ReferenceLink): void;
13
+ static resolveValue(value: Evaluated): MeaoiuValue;
14
+ hasVariable(name: string): boolean;
15
+ /**
16
+ * 声明新变量(不包含赋值)。
17
+ */
18
+ declare(name: string): ReferenceLink;
19
+ /**
20
+ * 为已存在的变量赋值。
21
+ */
22
+ assign(name: string, value: Evaluated, operator: AST.AssignmentOperator): ReferenceLink;
23
+ lookup(name: string, originalName?: string, checkMoved?: boolean): ReferenceLink;
24
+ private findVariableScope;
25
+ declareFunction(name: string, func: AST.FunctionDeclaration): void;
26
+ findFunction(name: string): AST.FunctionDeclaration | undefined;
27
+ declareReference(name: string, targetScope: Environment, targetName: string): void;
28
+ createShallowCopy(): Environment;
29
+ /**
30
+ * 创建一个「合并视图」。
31
+ * 将创建一个新纸箱,该纸箱按顺序包含来自 A (this) 和 B (other) 的所有引用。
32
+ * 自动生成的键(}?{)会被重命名以保证顺序。
33
+ * 用户定义的键如果冲突,A 优先。
34
+ */
35
+ createMergedView(other: Environment): Environment;
36
+ /**
37
+ * 检查当前环境是否严格位于 ancestor 的「内部」。
38
+ */
39
+ isInsideOf(ancestor: Environment | undefined): boolean;
40
+ toString(): string;
41
+ get length(): number;
42
+ }
43
+ //# sourceMappingURL=environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../src/core/run/environment.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,GAAG,MAAM,WAAW,CAAC;AAGtC,OAAO,EAAyB,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAGN,KAAK,SAAS,EACd,KAAK,aAAa,EAGlB,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,OAAO,GAAI,OAAO,MAAM,WAAiB,CAAC;AAIvD,qBAAa,WAAW;IACvB,SAAgB,EAAE,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;IACjE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmD;IAC7E,SAAgB,oBAAoB,EAAE,MAAM,EAAE,CAAM;gBAExC,MAAM,CAAC,EAAE,WAAW;WAMlB,kBAAkB,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;WAI5C,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW;IAMlD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIzC;;OAEG;IACI,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;IAQ3C;;OAEG;IACI,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,CAAC,kBAAkB,GAAG,aAAa;IAwCvF,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,GAAE,MAAa,EAAmB,UAAU,UAAO,GAAG,aAAa;IA4B3G,OAAO,CAAC,iBAAiB;IAIlB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,mBAAmB,GAAG,IAAI;IAIlE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,mBAAmB,GAAG,SAAS;IAI/D,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IASlF,iBAAiB,IAAI,WAAW;IASvC;;;;;OAKG;IACI,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW;IAsCxD;;OAEG;IACI,UAAU,CAAC,QAAQ,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO;IAQtD,QAAQ,IAAI,MAAM;IAMzB,IAAW,MAAM,IAAI,MAAM,CAE1B;CACD"}
@@ -0,0 +1,192 @@
1
+ // src/core/run/environment.ts
2
+ import logger from '../run/logger.js';
3
+ import { typeNames } from '../typedef.js';
4
+ import { isReferenceLink, isSignal, } from './value.js';
5
+ // 防碰撞自动变量名
6
+ export const autoKey = (index) => `}${index}{`; // 使用不合语法的反花括号
7
+ const isAutoKey = (key) => key[0] === '}' && key[key.length - 1] === '{';
8
+ let envCounter = 0;
9
+ export class Environment {
10
+ id;
11
+ parent;
12
+ variables = new Map();
13
+ functions = new Map();
14
+ orderedVariableNames = [];
15
+ constructor(parent) {
16
+ this.parent = parent;
17
+ this.id = envCounter++;
18
+ logger.debug(`[ENV] 新建环境 #${this.id} (上级: ${this.parent?.id ?? '无'})`);
19
+ }
20
+ static markReferenceMoved(ref) {
21
+ ref.scope.variables.get(ref.name).moved = true;
22
+ }
23
+ static resolveValue(value) {
24
+ if (isSignal(value))
25
+ throw new Error(`不能在这里发送神秘信号喵!`);
26
+ while (isReferenceLink(value))
27
+ value = value.scope.variables.get(value.name).value;
28
+ return value;
29
+ }
30
+ hasVariable(name) {
31
+ return this.variables.has(name);
32
+ }
33
+ /**
34
+ * 声明新变量(不包含赋值)。
35
+ */
36
+ declare(name) {
37
+ if (this.variables.has(name))
38
+ throw new Error(`变量「${name}」已经被“蹭”过一次了喵!`);
39
+ logger.debug(`[ENV #${this.id}] 声明: 变量「${name}」`);
40
+ this.variables.set(name, { value: null, moved: false });
41
+ this.orderedVariableNames.push(name);
42
+ return this.lookup(name);
43
+ }
44
+ /**
45
+ * 为已存在的变量赋值。
46
+ */
47
+ assign(name, value, operator) {
48
+ // 查找并追踪目标的最终存放位置
49
+ const initialTargetScope = this.findVariableScope(name);
50
+ if (!initialTargetScope)
51
+ throw new Error(`还不认识「${name}」喵!要先“蹭”一下喵!`);
52
+ let finalTargetScope = initialTargetScope;
53
+ let finalTargetName = name;
54
+ // 顺着引用链一直往下找,找到真正的「碗」
55
+ for (let targetVar; (targetVar = finalTargetScope.variables.get(finalTargetName)) && isReferenceLink(targetVar.value); { scope: finalTargetScope, name: finalTargetName } = targetVar.value)
56
+ ;
57
+ // 在最终位置赋值
58
+ let finalValue;
59
+ if (operator === 0 /* AssignmentOperator.REFERENCE */) {
60
+ finalValue =
61
+ isReferenceLink(value) &&
62
+ (finalTargetScope !== value.scope || finalTargetName !== value.name) /* 防御循环引用 */
63
+ ? value
64
+ : Environment.resolveValue(value);
65
+ }
66
+ else {
67
+ finalValue = Environment.resolveValue(value);
68
+ if (operator === 2 /* AssignmentOperator.MOVE */) {
69
+ if (isReferenceLink(value))
70
+ Environment.markReferenceMoved(value); // 引用被移动,标记为「已移动」
71
+ }
72
+ else if (operator === 1 /* AssignmentOperator.COPY */ && finalValue instanceof Environment) {
73
+ finalValue = finalValue.createShallowCopy(); // 复制一个纸箱,实际上是创建一个「视图」
74
+ }
75
+ }
76
+ finalTargetScope.variables.set(finalTargetName, { value: finalValue, moved: false });
77
+ logger.debug(`[ENV #${this.id}] 赋值: 环境 #${finalTargetScope.id} 中的「${finalTargetName}」被赋予 (方式: ${operator}) 值:`, finalValue);
78
+ return finalTargetScope.lookup(finalTargetName);
79
+ }
80
+ lookup(name, originalName = name /* 未定源时为第一环查询 */, checkMoved = true) {
81
+ // 查找符号
82
+ const scope = this.findVariableScope(name);
83
+ if (!scope) {
84
+ const errorMessage = this.findFunction(name)
85
+ ? `是不是想把${typeNames[4 /* MeaoiuType.FUNCTION */]}「${name}」当成玩具喵?`
86
+ : `没找到叫做「${name}」的玩具,是不是被你藏起来了喵?`;
87
+ throw new Error(`咦?${errorMessage}`);
88
+ }
89
+ const { value, moved } = scope.variables.get(name);
90
+ // 检查「已移动」状态
91
+ if (moved && checkMoved) {
92
+ const errorMessage = isAutoKey(originalName)
93
+ ? `纸箱里的「${this.orderedVariableNames.indexOf(originalName) + 1}」号玩具不见了,一定是被谁拿走了喵!`
94
+ : originalName === name
95
+ ? `藏在「${originalName}」里的东西被拿走了,现在是只空碗喵!`
96
+ : `碰不到「${originalName}」,因为它的本体「${name}」被拿走了喵!`; // 起终点不一致,报告起终点
97
+ throw new Error(`喵呜!${errorMessage}`);
98
+ }
99
+ logger.debug(`[ENV #${this.id}] 查找: 在环境 #${scope.id} 中找到「${name}」`);
100
+ // 递归查找(继续传递 originalName)
101
+ if (isReferenceLink(value))
102
+ return value.scope.lookup(value.name, originalName, checkMoved);
103
+ return { isReference: true, scope, name };
104
+ }
105
+ findVariableScope(name) {
106
+ return this.variables.has(name) ? this : this.parent?.findVariableScope(name);
107
+ }
108
+ declareFunction(name, func) {
109
+ this.functions.set(name, func);
110
+ }
111
+ findFunction(name) {
112
+ return this.functions.get(name) ?? this.parent?.findFunction(name);
113
+ }
114
+ declareReference(name, targetScope, targetName) {
115
+ if (this.variables.has(name))
116
+ throw new Error(`已经“蹭”过一次「${name}」了喵!`);
117
+ this.variables.set(name, {
118
+ value: { isReference: true, scope: targetScope, name: targetName },
119
+ moved: false,
120
+ });
121
+ this.orderedVariableNames.push(name); // 确保引用也被添加到有序列表中
122
+ }
123
+ createShallowCopy() {
124
+ const newEnv = new Environment(this.parent);
125
+ for (const varName of this.orderedVariableNames) {
126
+ const originalVarRef = this.lookup(varName, undefined, false);
127
+ newEnv.declareReference(varName, originalVarRef.scope, originalVarRef.name);
128
+ }
129
+ return newEnv;
130
+ }
131
+ /**
132
+ * 创建一个「合并视图」。
133
+ * 将创建一个新纸箱,该纸箱按顺序包含来自 A (this) 和 B (other) 的所有引用。
134
+ * 自动生成的键(}?{)会被重命名以保证顺序。
135
+ * 用户定义的键如果冲突,A 优先。
136
+ */
137
+ createMergedView(other) {
138
+ const newEnv = new Environment(this.parent);
139
+ const addedKeys = new Set();
140
+ let autoIndexCounter = 0; // 为新视图创建全新的自动索引
141
+ // 1. 添加来自 A (this) 的所有引用
142
+ for (const varName of this.orderedVariableNames) {
143
+ const originalVarRef = this.lookup(varName, undefined, false);
144
+ if (isAutoKey(varName)) {
145
+ // 重命名自动键
146
+ const newAutoKey = autoKey(autoIndexCounter++);
147
+ newEnv.declareReference(newAutoKey, originalVarRef.scope, originalVarRef.name);
148
+ }
149
+ else {
150
+ // 添加用户定义的键
151
+ newEnv.declareReference(varName, originalVarRef.scope, originalVarRef.name);
152
+ addedKeys.add(varName);
153
+ }
154
+ }
155
+ // 2. 添加来自 B (other) 的引用
156
+ for (const varName of other.orderedVariableNames) {
157
+ const originalVarRef = other.lookup(varName, undefined, false);
158
+ if (isAutoKey(varName)) {
159
+ // 总是添加并重命名自动键
160
+ const newAutoKey = autoKey(autoIndexCounter++);
161
+ newEnv.declareReference(newAutoKey, originalVarRef.scope, originalVarRef.name);
162
+ }
163
+ else if (!addedKeys.has(varName)) {
164
+ // 用户定义的键,检查冲突
165
+ newEnv.declareReference(varName, originalVarRef.scope, originalVarRef.name);
166
+ addedKeys.add(varName);
167
+ }
168
+ }
169
+ return newEnv;
170
+ }
171
+ /**
172
+ * 检查当前环境是否严格位于 ancestor 的「内部」。
173
+ */
174
+ isInsideOf(ancestor) {
175
+ if (!ancestor)
176
+ return false;
177
+ for (let current = this; current; current = current.parent) {
178
+ if (current === ancestor)
179
+ return true;
180
+ }
181
+ return false;
182
+ }
183
+ toString() {
184
+ return `[= ${this.orderedVariableNames
185
+ .map((name, index) => (isAutoKey(name) ? `(${index + 1})` : `{${name}}`))
186
+ .join(', ')} =]`;
187
+ }
188
+ get length() {
189
+ return this.orderedVariableNames.length;
190
+ }
191
+ }
192
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/core/run/environment.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type * as AST from '../ast.js';
2
+ import { type MeaoiuBuiltIns } from '../builtIns.js';
3
+ import { Environment } from './environment.js';
4
+ import { type Evaluated } from './value.js';
5
+ type BoundaryEnv = Partial<Record<(AST.ReturnStatement | AST.AmbushStatement)['kind'], Environment>>;
6
+ declare const enum NewEnvMode {
7
+ NORMAL = 0,
8
+ FUNC = 1,
9
+ LOOP = 2
10
+ }
11
+ export declare function evaluate(node: AST.Node, env: Environment, builtIns: MeaoiuBuiltIns, boundaryEnv: BoundaryEnv, newEnvMode?: NewEnvMode): Promise<Evaluated>;
12
+ export {};
13
+ //# sourceMappingURL=interpreter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interpreter.d.ts","sourceRoot":"","sources":["../../../src/core/run/interpreter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,GAAG,MAAM,WAAW,CAAC;AAEtC,OAAO,EAA8C,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAWjG,OAAO,EAAW,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAExD,OAAO,EAIN,KAAK,SAAS,EAMd,MAAM,YAAY,CAAC;AAEpB,KAAK,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC;AACrG,mBAAW,UAAU;IACpB,MAAM,IAAA;IACN,IAAI,IAAA;IACJ,IAAI,IAAA;CACJ;AAmBD,wBAAsB,QAAQ,CAC7B,IAAI,EAAE,GAAG,CAAC,IAAI,EACd,GAAG,EAAE,WAAW,EAChB,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,WAAW,EACxB,UAAU,GAAE,UAA8B,GACxC,OAAO,CAAC,SAAS,CAAC,CAwXpB"}