@aster-cloud/aster-lang-ts 1.2.2 → 1.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +93 -0
- package/dist/src/config/semantic.d.ts +8 -0
- package/dist/src/config/semantic.d.ts.map +1 -1
- package/dist/src/config/semantic.js +13 -0
- package/dist/src/config/semantic.js.map +1 -1
- package/dist/src/core/interpreter.d.ts.map +1 -1
- package/dist/src/core/interpreter.js +84 -16
- package/dist/src/core/interpreter.js.map +1 -1
- package/dist/src/core/resolve-typed-references.d.ts.map +1 -1
- package/dist/src/core/resolve-typed-references.js +18 -1
- package/dist/src/core/resolve-typed-references.js.map +1 -1
- package/dist/src/frontend/resolution-choice.d.ts +2 -0
- package/dist/src/frontend/resolution-choice.d.ts.map +1 -1
- package/dist/src/frontend/resolution-choice.js +33 -2
- package/dist/src/frontend/resolution-choice.js.map +1 -1
- package/dist/src/frontend/resolve-declarations.js +2 -2
- package/dist/src/frontend/resolve-declarations.js.map +1 -1
- package/dist/src/lsp/completion.d.ts +7 -2
- package/dist/src/lsp/completion.d.ts.map +1 -1
- package/dist/src/lsp/completion.js +11 -4
- package/dist/src/lsp/completion.js.map +1 -1
- package/dist/src/lsp/member-completion.d.ts +38 -3
- package/dist/src/lsp/member-completion.d.ts.map +1 -1
- package/dist/src/lsp/member-completion.js +124 -24
- package/dist/src/lsp/member-completion.js.map +1 -1
- package/dist/src/lsp/server.js +4 -1
- package/dist/src/lsp/server.js.map +1 -1
- package/dist/src/typecheck/browser.d.ts.map +1 -1
- package/dist/src/typecheck/browser.js +3 -3
- package/dist/src/typecheck/browser.js.map +1 -1
- package/dist/src/typecheck/context.d.ts +1 -1
- package/dist/src/typecheck/context.d.ts.map +1 -1
- package/dist/src/typecheck/context.js +35 -5
- package/dist/src/typecheck/context.js.map +1 -1
- package/dist/src/typecheck/expression.d.ts.map +1 -1
- package/dist/src/typecheck/expression.js +78 -19
- package/dist/src/typecheck/expression.js.map +1 -1
- package/dist/src/typecheck/module.d.ts.map +1 -1
- package/dist/src/typecheck/module.js +3 -3
- package/dist/src/typecheck/module.js.map +1 -1
- package/dist/src/typecheck/pattern.js +2 -2
- package/dist/src/typecheck/pattern.js.map +1 -1
- package/dist/src/typecheck/pure.d.ts +15 -0
- package/dist/src/typecheck/pure.d.ts.map +1 -1
- package/dist/src/typecheck/pure.js +83 -0
- package/dist/src/typecheck/pure.js.map +1 -1
- package/dist/src/typecheck/statement.d.ts.map +1 -1
- package/dist/src/typecheck/statement.js +4 -2
- package/dist/src/typecheck/statement.js.map +1 -1
- package/dist/src/typecheck/symbol_table.d.ts +10 -1
- package/dist/src/typecheck/symbol_table.d.ts.map +1 -1
- package/dist/src/typecheck/symbol_table.js +15 -0
- package/dist/src/typecheck/symbol_table.js.map +1 -1
- package/dist/src/typecheck/utils.d.ts +1 -1
- package/dist/src/typecheck/utils.d.ts.map +1 -1
- package/dist/src/typecheck/utils.js +1 -1
- package/dist/src/typecheck/utils.js.map +1 -1
- package/dist/test/integration/lsp/lsp-member-completion.test.js +43 -4
- package/dist/test/integration/lsp/lsp-member-completion.test.js.map +1 -1
- package/dist/test/integration/lsp/package-exports.test.d.ts +2 -0
- package/dist/test/integration/lsp/package-exports.test.d.ts.map +1 -0
- package/dist/test/integration/lsp/package-exports.test.js +30 -0
- package/dist/test/integration/lsp/package-exports.test.js.map +1 -0
- package/dist/test/unit/canonicalizer/possessive-anchor.test.js +25 -28
- package/dist/test/unit/canonicalizer/possessive-anchor.test.js.map +1 -1
- package/dist/test/unit/core/caseless-pattern-name.test.d.ts +2 -0
- package/dist/test/unit/core/caseless-pattern-name.test.d.ts.map +1 -0
- package/dist/test/unit/core/caseless-pattern-name.test.js +114 -0
- package/dist/test/unit/core/caseless-pattern-name.test.js.map +1 -0
- package/dist/test/unit/formatter-corpus-roundtrip.test.js +44 -3
- package/dist/test/unit/formatter-corpus-roundtrip.test.js.map +1 -1
- package/dist/test/unit/frontend/resolution-choice.test.d.ts +2 -0
- package/dist/test/unit/frontend/resolution-choice.test.d.ts.map +1 -0
- package/dist/test/unit/frontend/resolution-choice.test.js +90 -0
- package/dist/test/unit/frontend/resolution-choice.test.js.map +1 -0
- package/dist/test/unit/interpreter/scope-writeback.test.d.ts +2 -0
- package/dist/test/unit/interpreter/scope-writeback.test.d.ts.map +1 -0
- package/dist/test/unit/interpreter/scope-writeback.test.js +154 -0
- package/dist/test/unit/interpreter/scope-writeback.test.js.map +1 -0
- package/dist/test/unit/lsp/member-completion.test.d.ts +2 -0
- package/dist/test/unit/lsp/member-completion.test.d.ts.map +1 -0
- package/dist/test/unit/lsp/member-completion.test.js +203 -0
- package/dist/test/unit/lsp/member-completion.test.js.map +1 -0
- package/dist/test/unit/rule-call-checks.test.d.ts +2 -0
- package/dist/test/unit/rule-call-checks.test.d.ts.map +1 -0
- package/dist/test/unit/rule-call-checks.test.js +269 -0
- package/dist/test/unit/rule-call-checks.test.js.map +1 -0
- package/dist/test/unit/rule-function-values.test.d.ts +2 -0
- package/dist/test/unit/rule-function-values.test.d.ts.map +1 -0
- package/dist/test/unit/rule-function-values.test.js +89 -0
- package/dist/test/unit/rule-function-values.test.js.map +1 -0
- package/dist/test/unit/typecheck/assign-mutability.test.d.ts +2 -0
- package/dist/test/unit/typecheck/assign-mutability.test.d.ts.map +1 -0
- package/dist/test/unit/typecheck/assign-mutability.test.js +144 -0
- package/dist/test/unit/typecheck/assign-mutability.test.js.map +1 -0
- package/package.json +5 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,98 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.2.4
|
|
4
|
+
|
|
5
|
+
### 破坏性变更(类型检查)
|
|
6
|
+
|
|
7
|
+
- 调用本模块规则或函数值局部名时比较实参类型(#266):**新增 E001 拒绝**,如 `inc("a")`(`inc` 的形参
|
|
8
|
+
`x as Int`)报 `expected Int, got Text`;`Let g be inc. Return g("a").`、把 `(Text) -> Text` 的规则传给
|
|
9
|
+
`(Int) -> Int` 形参同样报错,与 aster-lang-core `BaseTypeChecker.checkCall` 同码。原则是能正常运行的调用不新增
|
|
10
|
+
E001,拿不准时放行:
|
|
11
|
+
- 只比较**写了类型**的形参。未写类型的形参(规则与 lambda)按名字推断出的类型不作为调用约束;实参若是
|
|
12
|
+
未写类型的形参(`given amount` 后 `inc(amount)`),或经 Let 直接取自它的局部名(`Let y be amount. inc(y)`),
|
|
13
|
+
同样不比较。
|
|
14
|
+
- 实参或形参含 Unknown / 类型变量时放行:泛型规则、`produce:` 推断不出的返回类型。
|
|
15
|
+
- **数值拓宽放行**:Int → Long / Float / Decimal,Long → Float / Decimal,Float ↔ Double;包括字面量
|
|
16
|
+
(`f(5)` 传给 Float / Long 形参)与容器元素(`List of Int` → `List of Float`、`Option of Int` → `Option of Float`)。
|
|
17
|
+
收窄(Float → Int)仍报错。
|
|
18
|
+
- Maybe 与 Option 视为同一种类:T → T?、None → T?、T? ↔ `Option of T`、`Some(n)` → `Option of Int` 放行;
|
|
19
|
+
T? → T 仍报错。PII 包装比较前剥掉,函数类型不比较效应。
|
|
20
|
+
- aster-lang-test 全部 454 份语料无新增诊断。aster-lang-core#231(#229)起两引擎按同一套规则检查。
|
|
21
|
+
- 调用类型已知且不是函数的局部名报 E001(`expected a function, got 'score' of type Int`,#268)。局部名遮蔽同名
|
|
22
|
+
规则(与 Java 名称解析一致),此前 `Rule main given score as Int … Return score(1, 2).` 在有同名规则 `score`
|
|
23
|
+
时零诊断。未写类型的形参(`given f` 后 `f(n)`)不报。同理,从 If 分支作用域外泄的同名变量(分支内
|
|
24
|
+
`Let score be 1.`、分支外 `score(n)`)现在也遮蔽同名规则,报 E001。单段具名 builtin(`add` / `sub` / `mul` /
|
|
25
|
+
`div` / `intdiv` / `mod` / `eq` / `ne` / `lt` / `lte` / `gt` / `gte` / `and` / `or` / `not` / `await`,与 truffle
|
|
26
|
+
Builtins、aster-lang-core CallTargetBuiltins 一致)不按「调用非函数局部名」报:`given add as Int … Return add(1, 2).`
|
|
27
|
+
在没有同名规则时调用的是 builtin,能正常运行。与 builtin 同名的局部函数值按其函数类型检查(如 `Let add be function
|
|
28
|
+
with a as Int …` 后 `add(1, 2)` 报 E032)。builtin 的别名写法(`divide`、`over`、`equals` 等)尚未纳入名单,
|
|
29
|
+
见 aster-lang-core#234。
|
|
30
|
+
- 经未写类型的形参 / 局部值发起的调用不做类型检查;局部名与规则同名且其值不是函数时,现在在运行期报错
|
|
31
|
+
(与 truffle 一致),不再回退到同名规则(例如 `given score` 后 `score(1)`:类型检查不报,运行期报
|
|
32
|
+
`'score' is not a function`)。
|
|
33
|
+
|
|
34
|
+
### 类型检查放宽
|
|
35
|
+
|
|
36
|
+
- 字段构造(E012)与 `Set`(E002)复用规则调用实参的兼容规则(数值拓宽含容器元素、T? ← T / None、Maybe/Option
|
|
37
|
+
互通、Unknown / 类型变量占位放行)。此前字段 `Long` ← Int、`Text?` ← Text / None、`List of Float` ← `List of Int`、
|
|
38
|
+
`produce:` 推断不出返回类型的值放进 Float 字段(`expects Float, got Unknown`)报 E012,`Set` Float 变量为 Int 报
|
|
39
|
+
E002;运行都正常,Java 侧也接受。收窄仍报错。
|
|
40
|
+
|
|
41
|
+
### 修复
|
|
42
|
+
|
|
43
|
+
- 解释器:调用位置按「局部函数值 → 单段具名 builtin → 局部名遮蔽规则」分派。局部值是函数(闭包、函数类型形参)
|
|
44
|
+
时调用局部值,即使与 builtin 同名(`given gt as (Int, Int) -> Bool … gt(1, 2)` 调用传入的函数);否则在没有同名
|
|
45
|
+
规则时调用 builtin(`add(1, 2)`、`gt(2, 1)` …),同名的非函数局部变量不影响。此前 TS 解释器不认这些 builtin 名
|
|
46
|
+
(报 `Undefined function 'add'`)。truffle 按同一语义修复见 aster-lang-truffle#158,三个引擎一致。
|
|
47
|
+
- 解释器:调用目标与类型检查一致,局部名遮蔽同名规则。局部值不是函数时报 `'score' is not a function`,
|
|
48
|
+
不再改调同名规则并静默丢弃多余实参(#268,与 truffle 的 `Unknown call target` 一致失败)。
|
|
49
|
+
- LSP 成员补全:块头行(首词为 If / Otherwise / Match,如中文 `如果 司机.`)先尝试「当前行换成 `返回 接收者.`」
|
|
50
|
+
这份修补。此前按顺序先试的两份修补对块头总是不完整,1000 行以上的文档在高负载下 150ms 预算往往只够解析
|
|
51
|
+
一两份,前 1–2 次请求回落到关键字列表、第 3 次才出字段;现在首次请求即出字段(实测 1207 / 4207 行、
|
|
52
|
+
load ~118:第 1 次请求 null → 字段,修补解析 2 份 / 1 份 → 1 份)。其它行的修补顺序不变(#267)。
|
|
53
|
+
|
|
54
|
+
### 行为变化(Core IR)
|
|
55
|
+
|
|
56
|
+
- 裸模式名(无括号)的 IR 形态按成员 / 绑定统一(ADR 0051 裁决 R55,aster-lang-core#227):成员还是绑定仍按 R12
|
|
57
|
+
判定;首字母**不是 ASCII 大写**、判为枚举成员的名字由 `PatName` 改为无参数 `PatCtor`,判为绑定的仍是 `PatName`。
|
|
58
|
+
受影响的写法:中文 / 天城文成员(`当 待处理,`、`जब उच्च,`)、de 以变音字母开头的成员(`bei Übel,`)、本仓接受的
|
|
59
|
+
小写 ASCII 成员(`Define Color as one of red, Green` 中的 `When red,`)。此前这些成员分支在解释器与 truffle 上都是
|
|
60
|
+
兜底绑定,吞掉其后所有分支(`描述(已删除)` 返回 1,应为 9)。首字母为 ASCII 大写的名字 IR 不变。
|
|
61
|
+
`RESOLVER_VERSION` 不递增(R55)。
|
|
62
|
+
- 解释器:无绑定的 `PatCtor` 同时匹配枚举成员(与 truffle `PatCtorNode` 一致)。
|
|
63
|
+
|
|
64
|
+
## 1.2.3
|
|
65
|
+
|
|
66
|
+
### 修复
|
|
67
|
+
|
|
68
|
+
- 规则引用可作为函数值传递:`twice(inc, n)`、`Let g be inc`、函数类型参数调用此前在 typecheck 报
|
|
69
|
+
E101、解释器报 `Undefined variable`(`List.map(xs, inc)` 也带一条 E101)。现在值位置的规则名类型为其签名的
|
|
70
|
+
`FuncType`,求值得到可调用值;局部名优先于同名规则,经函数类型局部名调用时结果类型取其返回类型,参数个数按
|
|
71
|
+
该局部值的函数类型校验(`Let g be inc. Return g(n, n).` 报 E032,与 Java 一致拒绝)。与 Java 引擎(TypeChecker 在模块作用域登记函数签名、truffle Loader 以 LambdaValue 入 env)一致(#256)。
|
|
72
|
+
- LSP 成员补全:光标位于已有成员名中间(`d.ag|e`)时,选中 `age` 不再残留后半截得到 `agee`。客户端声明
|
|
73
|
+
`completionItem.insertReplaceSupport` 时字段项给 InsertReplaceEdit(insert 为点号后到光标、replace 延伸到名字
|
|
74
|
+
末尾),否则 TextEdit 直接覆盖整个名字(#259)。cloud 编辑器需在 initialize 中声明 `insertReplaceSupport: true`
|
|
75
|
+
才会拿到 InsertReplaceEdit。
|
|
76
|
+
- 名称解析的源码声明查找改为按声明表建索引:此前每次查找都线性扫描并逐项折叠整张表,解析耗时随声明数平方增长
|
|
77
|
+
(2000 条规则约 1.4s,现约 0.17s)。LSP 成员补全的修补文本推断结果按文本缓存(继续输入成员前缀时复用),
|
|
78
|
+
1000 行以上的文档中,未命中缓存的修补累计耗时超过 150ms 后放弃其余修补,避免大文档补全阻塞服务端;文档大小不设上限,4000 行文档
|
|
79
|
+
当前行未写完时首次成员补全约 0.68s → 0.1s,结果相同(#258)。
|
|
80
|
+
- 解释器:`Set` 按词法作用域写回(ADR 0052,aster-lang-truffle#151)。此前 Scope 与 case 体整表拷贝环境,
|
|
81
|
+
在 case 体 / Scope 里给外层 Let 赋值,离开块后丢失;现在写到最近定义该名字的那层,与 truffle 一致。
|
|
82
|
+
|
|
83
|
+
### 新增
|
|
84
|
+
|
|
85
|
+
- 包入口 `./lsp/completion`:导出 `memberCompletions`、`parseDocumentText` 等补全 API,下游不必按相对路径引用
|
|
86
|
+
dist 内部模块(#260)。
|
|
87
|
+
|
|
88
|
+
### 破坏性变更(类型检查)
|
|
89
|
+
|
|
90
|
+
- 只有 Let 绑定可被 `Set` 赋值。**新增 E001 拒绝**:`Set` 规则形参、lambda 形参、match 模式绑定,以及在
|
|
91
|
+
lambda 体内 `Set` 捕获的外层变量(报 `expected a Let binding, got parameter 'n'` /
|
|
92
|
+
`pattern binding 'x'` / `captured variable 'acc'`,与 aster-lang-core 同码同行)。此前这些写法都能通过类型检查。
|
|
93
|
+
- `Set` 函数名或类型名报 E101(与 aster-lang-core 一致)。
|
|
94
|
+
- `Set` 的诊断(E001 / E002 / E101)现在带行列;此前降级后的 `Set` 节点没有位置。
|
|
95
|
+
|
|
3
96
|
## 1.2.2
|
|
4
97
|
|
|
5
98
|
### 修复
|
|
@@ -266,6 +266,14 @@ export declare const BUILTIN_AWAIT = "await";
|
|
|
266
266
|
* 名称解析(R2)据此把它们排除在待解析名字之外。
|
|
267
267
|
*/
|
|
268
268
|
export declare const BUILTIN_OPS: ReadonlySet<string>;
|
|
269
|
+
/**
|
|
270
|
+
* 单段具名 builtin(与 aster-lang-core CallTargetBuiltins.NAMES、aster-lang-truffle Builtins 注册的单段名一致,
|
|
271
|
+
* 交叉核对见 rule-call-checks 测试)。调用位置的分派:局部值是函数时调用局部值;否则在没有同名规则时调用 builtin,
|
|
272
|
+
* 同名的非函数局部变量不影响。类型检查不把这些名字算作「调用非函数局部名」(aster-lang-core#231、truffle#158)。
|
|
273
|
+
* 规范名之外的别名(divide、over、equals …)未列入,见 aster-lang-core#234。
|
|
274
|
+
* 值为 TS 解释器 evalBuiltinOp 使用的运算符写法;null 表示 TS 解释器不在调用位置路由(await 另有处理)。
|
|
275
|
+
*/
|
|
276
|
+
export declare const NAMED_BUILTIN_OPS: Readonly<Record<string, string | null>>;
|
|
269
277
|
/**
|
|
270
278
|
* 验证是否为内置异步函数。
|
|
271
279
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../../src/config/semantic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH;;;;;;;GAOG;AACH,oBAAY,MAAM;IAChB,EAAE,OAAO;IACT,GAAG,QAAQ;IACX,IAAI,SAAS;CACd;AAED;;;;;GAKG;AACH,QAAA,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAItC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,MAAM,OAAO,UAAU,CAE/E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EAQxC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAEzC,CAAC;AAMF;;;;GAIG;AACH,oBAAY,cAAc;IACxB,IAAI,SAAS;IACb,6CAA6C;IAC7C,OAAO,YAAY;IACnB,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,iCAAiC;IACjC,MAAM,WAAW;IACjB,yCAAyC;IACzC,OAAO,YAAY;IACnB,QAAQ,YAAY;IACpB,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,SAAS,cAAc;CACxB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAYjE,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAO3E;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,EAAE,CAEnD;AAED;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,IAAI,GAAG,KAAK,CAAC;AAEjD,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAajF,CAAC;AAEF,sDAAsD;AACtD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAEjE;AAED,0CAA0C;AAC1C,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAEhE;AAMD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0FL,CAAC;AAEX;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAMlE;AAMD;;;;GAIG;AACH,eAAO,MAAM,aAAa,UAAU,CAAC;AAErC;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,MAAM,CAO1C,CAAC;AAEH;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD"}
|
|
1
|
+
{"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../../src/config/semantic.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH;;;;;;;GAOG;AACH,oBAAY,MAAM;IAChB,EAAE,OAAO;IACT,GAAG,QAAQ;IACX,IAAI,SAAS;CACd;AAED;;;;;GAKG;AACH,QAAA,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAItC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,MAAM,OAAO,UAAU,CAE/E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC;AAED;;;;;GAKG;AACH,eAAO,MAAM,WAAW,EAAE,SAAS,MAAM,EAQxC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAEzC,CAAC;AAMF;;;;GAIG;AACH,oBAAY,cAAc;IACxB,IAAI,SAAS;IACb,6CAA6C;IAC7C,OAAO,YAAY;IACnB,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,iCAAiC;IACjC,MAAM,WAAW;IACjB,yCAAyC;IACzC,OAAO,YAAY;IACnB,QAAQ,YAAY;IACpB,GAAG,QAAQ;IACX,OAAO,YAAY;IACnB,SAAS,cAAc;CACxB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAYjE,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAO3E;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,EAAE,CAEnD;AAED;;;;;;GAMG;AACH,MAAM,MAAM,qBAAqB,GAAG,IAAI,GAAG,KAAK,CAAC;AAEjD,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAajF,CAAC;AAEF,sDAAsD;AACtD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAEjE;AAED,0CAA0C;AAC1C,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAEhE;AAMD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0FL,CAAC;AAEX;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAMlE;AAMD;;;;GAIG;AACH,eAAO,MAAM,aAAa,UAAU,CAAC;AAErC;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,MAAM,CAO1C,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAKrE,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD"}
|
|
@@ -346,6 +346,19 @@ export const BUILTIN_OPS = new Set([
|
|
|
346
346
|
'>', '<', '>=', '<=', '==', '!=',
|
|
347
347
|
'and', 'or', 'not',
|
|
348
348
|
]);
|
|
349
|
+
/**
|
|
350
|
+
* 单段具名 builtin(与 aster-lang-core CallTargetBuiltins.NAMES、aster-lang-truffle Builtins 注册的单段名一致,
|
|
351
|
+
* 交叉核对见 rule-call-checks 测试)。调用位置的分派:局部值是函数时调用局部值;否则在没有同名规则时调用 builtin,
|
|
352
|
+
* 同名的非函数局部变量不影响。类型检查不把这些名字算作「调用非函数局部名」(aster-lang-core#231、truffle#158)。
|
|
353
|
+
* 规范名之外的别名(divide、over、equals …)未列入,见 aster-lang-core#234。
|
|
354
|
+
* 值为 TS 解释器 evalBuiltinOp 使用的运算符写法;null 表示 TS 解释器不在调用位置路由(await 另有处理)。
|
|
355
|
+
*/
|
|
356
|
+
export const NAMED_BUILTIN_OPS = {
|
|
357
|
+
add: '+', sub: '-', mul: '*', div: '/', intdiv: '//', mod: '%',
|
|
358
|
+
eq: '==', ne: '!=', lt: '<', lte: '<=', gt: '>', gte: '>=',
|
|
359
|
+
and: 'and', or: 'or', not: 'not',
|
|
360
|
+
await: null,
|
|
361
|
+
};
|
|
349
362
|
/**
|
|
350
363
|
* 验证是否为内置异步函数。
|
|
351
364
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../../src/config/semantic.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"semantic.js","sourceRoot":"","sources":["../../../src/config/semantic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interpreter.d.ts","sourceRoot":"","sources":["../../../src/core/interpreter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AAuLrD,WAAW;AACX,MAAM,WAAW,UAAU;IACzB,aAAa;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,SAAS,CAAC,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,UAAU,CAwBZ;
|
|
1
|
+
{"version":3,"file":"interpreter.d.ts","sourceRoot":"","sources":["../../../src/core/interpreter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AAuLrD,WAAW;AACX,MAAM,WAAW,UAAU;IACzB,aAAa;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CACtB,IAAI,EAAE,SAAS,CAAC,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,UAAU,CAwBZ;AAwHD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,MAAM,CAkCjE"}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* - 字段访问(dot notation via Name)
|
|
15
15
|
*/
|
|
16
16
|
import Decimal from 'decimal.js';
|
|
17
|
-
import { BUILTIN_OPS } from '../config/semantic.js';
|
|
17
|
+
import { BUILTIN_OPS, NAMED_BUILTIN_OPS } from '../config/semantic.js';
|
|
18
18
|
// Decimal 精确十进制配置(ADR 0025):锁死 precision/rounding,**不依赖默认**,避免环境差异
|
|
19
19
|
// 与双引擎不一致。precision 设高(80)让 plus/minus/times 不被有效数字上下文截断(v1 输入
|
|
20
20
|
// 上限 38 位/scale 18,结果上限 76 < 80);ROUND_HALF_EVEN 默认(除法/舍入走显式 builtin
|
|
@@ -260,6 +260,52 @@ class Closure {
|
|
|
260
260
|
this.capturedEnv = capturedEnv;
|
|
261
261
|
}
|
|
262
262
|
}
|
|
263
|
+
/**
|
|
264
|
+
* 词法作用域链(ADR 0052,aster-cloud/aster-lang-truffle#151)。
|
|
265
|
+
*
|
|
266
|
+
* - `set`:在**当前层**登记绑定(Let、形参、模式绑定),可遮蔽外层同名绑定;
|
|
267
|
+
* - `assign`:`Set` 语句的写入,沿作用域链找到最近定义该名字的那一层写入,
|
|
268
|
+
* 找不到时在当前层登记(与 aster-lang-truffle `Env.set` 的写冒泡一致);
|
|
269
|
+
* - `child`:Scope 与 case 体进入新的一层,离开后该层的 Let 与模式绑定随之消失,
|
|
270
|
+
* 而对外层绑定的 `Set` 已写在外层,离开后仍可见。
|
|
271
|
+
*/
|
|
272
|
+
class Env {
|
|
273
|
+
parent;
|
|
274
|
+
vars = new Map();
|
|
275
|
+
constructor(parent = null, initial) {
|
|
276
|
+
this.parent = parent;
|
|
277
|
+
if (initial)
|
|
278
|
+
for (const [k, v] of initial)
|
|
279
|
+
this.vars.set(k, v);
|
|
280
|
+
}
|
|
281
|
+
child() {
|
|
282
|
+
return new Env(this);
|
|
283
|
+
}
|
|
284
|
+
has(name) {
|
|
285
|
+
return this.owner(name) !== null;
|
|
286
|
+
}
|
|
287
|
+
get(name) {
|
|
288
|
+
return this.owner(name)?.vars.get(name);
|
|
289
|
+
}
|
|
290
|
+
set(name, value) {
|
|
291
|
+
this.vars.set(name, value);
|
|
292
|
+
}
|
|
293
|
+
assign(name, value) {
|
|
294
|
+
(this.owner(name) ?? this).vars.set(name, value);
|
|
295
|
+
}
|
|
296
|
+
/** 闭包捕获用:把整条链压平成一张表(内层遮蔽外层),即定义时刻的值快照。 */
|
|
297
|
+
snapshot() {
|
|
298
|
+
const out = this.parent ? this.parent.snapshot() : new Map();
|
|
299
|
+
for (const [k, v] of this.vars)
|
|
300
|
+
out.set(k, v);
|
|
301
|
+
return out;
|
|
302
|
+
}
|
|
303
|
+
owner(name) {
|
|
304
|
+
if (this.vars.has(name))
|
|
305
|
+
return this;
|
|
306
|
+
return this.parent ? this.parent.owner(name) : null;
|
|
307
|
+
}
|
|
308
|
+
}
|
|
263
309
|
/**
|
|
264
310
|
* Guest Map 运行时值。以真正的 `Map` 作后端,杜绝原型污染 / 原型链泄漏
|
|
265
311
|
* (`Map.get(m,"constructor")` 不再泄漏 `Object`;`Map.put(m,"__proto__",x)`
|
|
@@ -780,7 +826,7 @@ class Interpreter {
|
|
|
780
826
|
throw new InterpreterError(`Function '${name}' not found in module. Available: ${available || 'none'}`);
|
|
781
827
|
}
|
|
782
828
|
// 构建初始环境:将 context 中的值按参数名映射
|
|
783
|
-
const env = new
|
|
829
|
+
const env = new Env();
|
|
784
830
|
for (const param of func.params) {
|
|
785
831
|
if (param.name in context) {
|
|
786
832
|
env.set(param.name, context[param.name]);
|
|
@@ -830,7 +876,7 @@ class Interpreter {
|
|
|
830
876
|
}
|
|
831
877
|
case 'Set': {
|
|
832
878
|
const value = this.evalExpr(stmt.expr, env);
|
|
833
|
-
env.
|
|
879
|
+
env.assign(stmt.name, value);
|
|
834
880
|
break;
|
|
835
881
|
}
|
|
836
882
|
case 'Return': {
|
|
@@ -853,8 +899,8 @@ class Interpreter {
|
|
|
853
899
|
break;
|
|
854
900
|
}
|
|
855
901
|
case 'Scope': {
|
|
856
|
-
// Scope
|
|
857
|
-
const childEnv =
|
|
902
|
+
// Scope 进入新的一层作用域:块内 Let 离开后消失,对外层绑定的 Set 写回外层
|
|
903
|
+
const childEnv = env.child();
|
|
858
904
|
this.execBlock(stmt, childEnv);
|
|
859
905
|
break;
|
|
860
906
|
}
|
|
@@ -868,7 +914,7 @@ class Interpreter {
|
|
|
868
914
|
}
|
|
869
915
|
execMatch(value, cases, env) {
|
|
870
916
|
for (const c of cases) {
|
|
871
|
-
const childEnv =
|
|
917
|
+
const childEnv = env.child();
|
|
872
918
|
if (this.matchPattern(value, c.pattern, childEnv)) {
|
|
873
919
|
if (c.body.kind === 'Return') {
|
|
874
920
|
const result = this.evalExpr(c.body.expr, childEnv);
|
|
@@ -915,10 +961,17 @@ class Interpreter {
|
|
|
915
961
|
// 与 aster-lang-truffle MatchNode.PatCtorNode 对齐:按位置(非按名)把
|
|
916
962
|
// 构造体的非 __type 字段值依序绑定到模式的 bind 名——因为 Ok(value)/
|
|
917
963
|
// Err(err) 的载荷统一存于 `value` 字段,绑定名却各异,按名绑定会落空。
|
|
964
|
+
// 无绑定的构造器模式也匹配枚举成员(同 truffle PatCtorNode):R2 对无大小写文字的成员名
|
|
965
|
+
// 产出此形态(ADR 0051 裁决 R55),如中文「当 待处理,」。
|
|
966
|
+
const bindsNothing = pattern.names.length === 0 && !pattern.args?.length;
|
|
967
|
+
if (bindsNothing && typeof value === 'string')
|
|
968
|
+
return value === pattern.typeName;
|
|
918
969
|
if (value === null || value === undefined || typeof value !== 'object') {
|
|
919
970
|
return false;
|
|
920
971
|
}
|
|
921
972
|
const obj = value;
|
|
973
|
+
if (bindsNothing && obj.value === pattern.typeName)
|
|
974
|
+
return true;
|
|
922
975
|
if (obj.__type !== pattern.typeName) {
|
|
923
976
|
return false;
|
|
924
977
|
}
|
|
@@ -989,7 +1042,7 @@ class Interpreter {
|
|
|
989
1042
|
return { __type: 'Some', value: this.evalExpr(expr.expr, env) };
|
|
990
1043
|
case 'Lambda':
|
|
991
1044
|
// 词法捕获当前环境的快照,避免后续 Set 改写影响已创建的闭包。
|
|
992
|
-
return new Closure(expr.params, expr.body,
|
|
1045
|
+
return new Closure(expr.params, expr.body, env.snapshot());
|
|
993
1046
|
case 'Await':
|
|
994
1047
|
throw new InterpreterError('Await expressions are not supported in the interpreter');
|
|
995
1048
|
case 'IfExpr':
|
|
@@ -1047,6 +1100,13 @@ class Interpreter {
|
|
|
1047
1100
|
if (enumName !== undefined) {
|
|
1048
1101
|
return this.enumValue(enumName, name);
|
|
1049
1102
|
}
|
|
1103
|
+
// 模块规则作为函数值(`twice(inc, n)`、`Let g be inc`):得到无捕获的闭包。
|
|
1104
|
+
// 与 truffle Loader 一致——每个函数以 LambdaValue 放进 env,Name 回退到 env 即为可调用值;
|
|
1105
|
+
// 局部名与枚举成员优先(已在上面命中)。
|
|
1106
|
+
const func = this.funcs.get(name);
|
|
1107
|
+
if (func) {
|
|
1108
|
+
return new Closure(func.params, func.body, new Map());
|
|
1109
|
+
}
|
|
1050
1110
|
throw new InterpreterError(`Undefined variable '${name}'`);
|
|
1051
1111
|
}
|
|
1052
1112
|
enumValue(enumName, variant) {
|
|
@@ -1088,20 +1148,28 @@ class Interpreter {
|
|
|
1088
1148
|
// (Let f be function with …)。先求值参数,再分派。
|
|
1089
1149
|
if (call.target.kind === 'Name') {
|
|
1090
1150
|
const funcName = call.target.name;
|
|
1091
|
-
|
|
1092
|
-
//
|
|
1151
|
+
// 调用目标的分派顺序(与 truffle Loader、类型检查一致):
|
|
1152
|
+
// 1. 局部值是函数(闭包 / 函数值)→ 调用局部值,即使与 builtin 同名(`given gt as (Int, Int) -> Bool`);
|
|
1153
|
+
// 2. 单段具名 builtin(add / sub / gt …)且没有同名规则 → 调用 builtin,同名的非函数局部变量不影响;
|
|
1154
|
+
// 3. 其余局部名遮蔽同名规则:局部值不是函数时报错,不改调同名规则(#268)。
|
|
1155
|
+
const bound = env.has(funcName) ? env.get(funcName) : undefined;
|
|
1156
|
+
if (bound instanceof Closure) {
|
|
1157
|
+
return this.applyClosure(bound, call.args.map(arg => this.evalExpr(arg, env)));
|
|
1158
|
+
}
|
|
1159
|
+
const namedOp = Object.hasOwn(NAMED_BUILTIN_OPS, funcName) ? NAMED_BUILTIN_OPS[funcName] : null;
|
|
1160
|
+
if (namedOp && !this.funcs.has(funcName)) {
|
|
1161
|
+
return this.evalBuiltinOp(namedOp, call.args, env);
|
|
1162
|
+
}
|
|
1093
1163
|
if (env.has(funcName)) {
|
|
1094
|
-
|
|
1095
|
-
if (bound instanceof Closure) {
|
|
1096
|
-
return this.applyClosure(bound, argValues);
|
|
1097
|
-
}
|
|
1164
|
+
throw new InterpreterError(`'${funcName}' is not a function`);
|
|
1098
1165
|
}
|
|
1166
|
+
const argValues = call.args.map(arg => this.evalExpr(arg, env));
|
|
1099
1167
|
const func = this.funcs.get(funcName);
|
|
1100
1168
|
if (!func) {
|
|
1101
1169
|
throw new InterpreterError(`Undefined function '${funcName}'`);
|
|
1102
1170
|
}
|
|
1103
1171
|
// 构建函数环境
|
|
1104
|
-
const funcEnv = new
|
|
1172
|
+
const funcEnv = new Env();
|
|
1105
1173
|
for (let i = 0; i < func.params.length; i++) {
|
|
1106
1174
|
const param = func.params[i];
|
|
1107
1175
|
funcEnv.set(param.name, i < argValues.length ? argValues[i] : null);
|
|
@@ -1126,7 +1194,7 @@ class Interpreter {
|
|
|
1126
1194
|
if (!func) {
|
|
1127
1195
|
throw new InterpreterError(`Undefined function '${callable}' used as callback`);
|
|
1128
1196
|
}
|
|
1129
|
-
const funcEnv = new
|
|
1197
|
+
const funcEnv = new Env();
|
|
1130
1198
|
for (let i = 0; i < func.params.length; i++) {
|
|
1131
1199
|
funcEnv.set(func.params[i].name, i < args.length ? args[i] : null);
|
|
1132
1200
|
}
|
|
@@ -1136,7 +1204,7 @@ class Interpreter {
|
|
|
1136
1204
|
}
|
|
1137
1205
|
/** 以捕获环境为基底,绑定实参后执行闭包体。 */
|
|
1138
1206
|
applyClosure(closure, args) {
|
|
1139
|
-
const callEnv = new
|
|
1207
|
+
const callEnv = new Env(null, closure.capturedEnv);
|
|
1140
1208
|
for (let i = 0; i < closure.params.length; i++) {
|
|
1141
1209
|
callEnv.set(closure.params[i].name, i < args.length ? args[i] : null);
|
|
1142
1210
|
}
|