@aster-cloud/aster-lang-ts 1.0.26 → 1.0.27

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 (44) hide show
  1. package/dist/src/browser.d.ts +1 -1
  2. package/dist/src/browser.d.ts.map +1 -1
  3. package/dist/src/browser.js +1 -1
  4. package/dist/src/browser.js.map +1 -1
  5. package/dist/src/core/index.d.ts +1 -1
  6. package/dist/src/core/index.d.ts.map +1 -1
  7. package/dist/src/core/index.js +1 -1
  8. package/dist/src/core/index.js.map +1 -1
  9. package/dist/src/core/interpreter.d.ts +13 -0
  10. package/dist/src/core/interpreter.d.ts.map +1 -1
  11. package/dist/src/core/interpreter.js +277 -18
  12. package/dist/src/core/interpreter.js.map +1 -1
  13. package/dist/src/frontend/canonicalizer.d.ts.map +1 -1
  14. package/dist/src/frontend/canonicalizer.js +6 -1
  15. package/dist/src/frontend/canonicalizer.js.map +1 -1
  16. package/dist/src/lower_to_core.js +30 -1
  17. package/dist/src/lower_to_core.js.map +1 -1
  18. package/dist/test/unit/builtin-arity.test.d.ts +2 -0
  19. package/dist/test/unit/builtin-arity.test.d.ts.map +1 -0
  20. package/dist/test/unit/builtin-arity.test.js +90 -0
  21. package/dist/test/unit/builtin-arity.test.js.map +1 -0
  22. package/dist/test/unit/canonicalizer/canonicalizer.test.js +23 -0
  23. package/dist/test/unit/canonicalizer/canonicalizer.test.js.map +1 -1
  24. package/dist/test/unit/ctor-call-form-lowering.test.d.ts +2 -0
  25. package/dist/test/unit/ctor-call-form-lowering.test.d.ts.map +1 -0
  26. package/dist/test/unit/ctor-call-form-lowering.test.js +78 -0
  27. package/dist/test/unit/ctor-call-form-lowering.test.js.map +1 -0
  28. package/dist/test/unit/guest-map-serialization.test.d.ts +2 -0
  29. package/dist/test/unit/guest-map-serialization.test.d.ts.map +1 -0
  30. package/dist/test/unit/guest-map-serialization.test.js +60 -0
  31. package/dist/test/unit/guest-map-serialization.test.js.map +1 -0
  32. package/dist/test/unit/map-type-guard.test.d.ts +2 -0
  33. package/dist/test/unit/map-type-guard.test.d.ts.map +1 -0
  34. package/dist/test/unit/map-type-guard.test.js +147 -0
  35. package/dist/test/unit/map-type-guard.test.js.map +1 -0
  36. package/dist/test/unit/maybe-isnone-semantics.test.d.ts +2 -0
  37. package/dist/test/unit/maybe-isnone-semantics.test.d.ts.map +1 -0
  38. package/dist/test/unit/maybe-isnone-semantics.test.js +74 -0
  39. package/dist/test/unit/maybe-isnone-semantics.test.js.map +1 -0
  40. package/dist/test/unit/maybe-map-type-guard.test.d.ts +2 -0
  41. package/dist/test/unit/maybe-map-type-guard.test.d.ts.map +1 -0
  42. package/dist/test/unit/maybe-map-type-guard.test.js +88 -0
  43. package/dist/test/unit/maybe-map-type-guard.test.js.map +1 -0
  44. package/package.json +1 -1
@@ -35,7 +35,7 @@ export type { KeywordTranslationIndex, MarkerKeywordIndex, TranslationIndexResul
35
35
  export { Core, Effect } from './core/core_ir.js';
36
36
  export { TokenKind, KW } from './frontend/tokens.js';
37
37
  export { Node } from './ast/ast.js';
38
- export { evaluate } from './core/interpreter.js';
38
+ export { evaluate, serializeGuestValue } from './core/interpreter.js';
39
39
  export type { EvalResult } from './core/interpreter.js';
40
40
  export { generateFieldValue, generateInputValues, getFieldValueHint, } from './parser/input-generator.js';
41
41
  export type { TypeKind, FieldInfo, ParameterInfo, } from './parser/input-generator.js';
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"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"}
@@ -38,7 +38,7 @@ export { Core, Effect } from './core/core_ir.js';
38
38
  export { TokenKind, KW } from './frontend/tokens.js';
39
39
  export { Node } from './ast/ast.js';
40
40
  // Core IR interpreter (evaluate policies in the browser)
41
- export { evaluate } from './core/interpreter.js';
41
+ export { evaluate, serializeGuestValue } from './core/interpreter.js';
42
42
  // Input value generation (for policy execution)
43
43
  export { generateFieldValue, generateInputValues, getFieldValueHint, } from './parser/input-generator.js';
44
44
  // Lexicons for multi-language support.
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/browser.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,6 @@ export type { CoreVisitor, VisitorContext } from './visitor.js';
15
15
  export { formatModule } from './pretty_core.js';
16
16
  export { serializeCoreIR, deserializeCoreIR, isValidCoreIRJson, } from './core_ir_json.js';
17
17
  export type { CoreIREnvelope } from './core_ir_json.js';
18
- export { evaluate } from './interpreter.js';
18
+ export { evaluate, serializeGuestValue } from './interpreter.js';
19
19
  export type { EvalResult } from './interpreter.js';
20
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACjE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
@@ -13,5 +13,5 @@ export { Core, Effect } from './core_ir.js';
13
13
  export { DefaultCoreVisitor, createVisitorContext, } from './visitor.js';
14
14
  export { formatModule } from './pretty_core.js';
15
15
  export { serializeCoreIR, deserializeCoreIR, isValidCoreIRJson, } from './core_ir_json.js';
16
- export { evaluate } from './interpreter.js';
16
+ export { evaluate, serializeGuestValue } from './interpreter.js';
17
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -36,4 +36,17 @@ export interface EvalResult {
36
36
  export declare function evaluate(core: CoreTypes.Module, functionName: string, context: Record<string, unknown>, options?: {
37
37
  maxSteps?: number;
38
38
  }): EvalResult;
39
+ /**
40
+ * 按**插入序**把 guest 运行时值序列化为 JSON 文本(audit #126)。
41
+ *
42
+ * `JSON.stringify` 无法为整数样式键保留插入序(对象自有属性规范强制数字键升序),
43
+ * 但 JSON 语法本身允许任意键序——手写发射即可与 JVM 引擎(Jackson 序列化
44
+ * `LinkedHashMap`,插入序)逐字节一致。dual-engine runner 的 value 字段用它,
45
+ * 保证 map 输出一旦进入 eval golden,两引擎字节可比。
46
+ *
47
+ * 递归覆盖:GuestMap(插入序对象语法)、数组、struct 普通对象(自有可枚举键,
48
+ * 跳过 undefined 值,与 JSON.stringify 语义一致);其余(string/number/boolean/null、
49
+ * 带 toJSON 的值如 Decimal)委托 JSON.stringify。顶层 undefined 序列化为 "null"。
50
+ */
51
+ export declare function serializeGuestValue(v: unknown, depth?: number): string;
39
52
  //# sourceMappingURL=interpreter.d.ts.map
@@ -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;AA6ErD,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;AA6ErD,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;AAuED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,MAAM,CA4BjE"}
@@ -157,31 +157,131 @@ class Closure {
157
157
  * runner / 浏览器输出)仍产出有序的普通对象。
158
158
  */
159
159
  class GuestMap extends Map {
160
+ /**
161
+ * 兼容形态:给 `JSON.stringify` 一个普通对象。注意(audit #126):JS 规范强制
162
+ * 普通对象把**整数样式键**升序排在最前,所以含数字样式键时这里**无法**保留插入序
163
+ * (`put "2"; put "1"` → `{"1":…,"2":…}`)。凡是需要与 JVM `LinkedHashMap`
164
+ * 逐字节一致的序列化(dual-engine runner 等),请改用 {@link serializeGuestValue},
165
+ * 它手写 JSON 对象语法、按插入序输出。
166
+ */
160
167
  toJSON() {
161
168
  const o = {};
162
169
  for (const [k, v] of this)
163
170
  o[k] = v;
164
171
  return o;
165
172
  }
173
+ /**
174
+ * 宿主便利视图(audit #126):GuestMap 是真正的 `Map`,`Object.keys(m)` 为 `[]`、
175
+ * 展开 `{...m}` 为空——宿主代码若按普通对象读取会静默拿到空对象。此方法返回
176
+ * **null 原型**的普通对象快照(无原型链可泄漏/污染)。键序遵循 JS 自有属性规范
177
+ * (整数样式键升序在前),如需插入序请直接迭代 Map 或用 {@link serializeGuestValue}。
178
+ */
179
+ toObject() {
180
+ const o = Object.create(null);
181
+ for (const [k, v] of this)
182
+ o[k] = v;
183
+ return o;
184
+ }
185
+ }
186
+ /** serializeGuestValue 的循环/深度保护上限(防御性;正常 guest 值不会到)。 */
187
+ const SERIALIZE_MAX_DEPTH = 64;
188
+ /**
189
+ * 按**插入序**把 guest 运行时值序列化为 JSON 文本(audit #126)。
190
+ *
191
+ * `JSON.stringify` 无法为整数样式键保留插入序(对象自有属性规范强制数字键升序),
192
+ * 但 JSON 语法本身允许任意键序——手写发射即可与 JVM 引擎(Jackson 序列化
193
+ * `LinkedHashMap`,插入序)逐字节一致。dual-engine runner 的 value 字段用它,
194
+ * 保证 map 输出一旦进入 eval golden,两引擎字节可比。
195
+ *
196
+ * 递归覆盖:GuestMap(插入序对象语法)、数组、struct 普通对象(自有可枚举键,
197
+ * 跳过 undefined 值,与 JSON.stringify 语义一致);其余(string/number/boolean/null、
198
+ * 带 toJSON 的值如 Decimal)委托 JSON.stringify。顶层 undefined 序列化为 "null"。
199
+ */
200
+ export function serializeGuestValue(v, depth = 0) {
201
+ if (depth > SERIALIZE_MAX_DEPTH) {
202
+ throw new InterpreterError('serializeGuestValue: value nesting exceeds max depth (cycle?)');
203
+ }
204
+ if (v instanceof GuestMap) {
205
+ const parts = [];
206
+ for (const [k, val] of v) {
207
+ parts.push(`${JSON.stringify(k)}:${serializeGuestValue(val, depth + 1)}`);
208
+ }
209
+ return `{${parts.join(',')}}`;
210
+ }
211
+ if (Array.isArray(v)) {
212
+ return `[${v.map((x) => serializeGuestValue(x, depth + 1)).join(',')}]`;
213
+ }
214
+ if (v !== null && typeof v === 'object'
215
+ && typeof v.toJSON !== 'function'
216
+ && !(v instanceof Map)) {
217
+ // struct(普通对象):字段序 = 自有键序;字段值可能嵌套 GuestMap,须递归。
218
+ const o = v;
219
+ const parts = [];
220
+ for (const k of Object.keys(o)) {
221
+ if (o[k] === undefined)
222
+ continue; // 与 JSON.stringify 一致:丢弃 undefined 字段
223
+ parts.push(`${JSON.stringify(k)}:${serializeGuestValue(o[k], depth + 1)}`);
224
+ }
225
+ return `{${parts.join(',')}}`;
226
+ }
227
+ const s = JSON.stringify(v);
228
+ return s === undefined ? 'null' : s;
166
229
  }
167
230
  /**
168
231
  * 把任意运行时值规约为 GuestMap(只读视图,不复制已是 GuestMap 的输入)。
169
232
  * 防御性地兼容历史普通对象 / 原生 Map 形态;对 null / 非对象返回空 map。
170
233
  * 仅遍历自有可枚举键(不触碰原型链)。
171
234
  */
172
- function asGuestMap(v) {
235
+ function asGuestMap(op, v) {
173
236
  if (v instanceof GuestMap)
174
237
  return v;
238
+ // ★首参必须是 Map(aster-lang-ts#132):此前对**任意**值静默兜底成空 Map,
239
+ // 于是 `Map.size(42)`→0、`Map.get(42,"k")`→None、`Map.keys(42)`→[],
240
+ // 全都是**看起来完全合理**的值;而 truffle 侧对这些标量/列表首参一律抛
241
+ // `操作 Map.X 期望类型 Map`(两引擎实跑同一份 IR 逐个比对确认)。
242
+ //
243
+ // ★Maybe/Result 变体不是 Map(#134,两引擎同步收紧):
244
+ // `Some`/`Ok`/`Err` 的运行期表示是带 `__type` 的对象,`None` 在 JVM 上是
245
+ // `LinkedHashMap{_type:"None"}`——都会被"是不是对象"这类判断收下,
246
+ // 把 `_type`/`value` 当成键来数。实测二维矩阵(6 个 Map.* × 6 种输入):
247
+ // Map.size(Some(1)) → 2、Map.size(None) → 1(JVM)、Map.keys(Ok(1)) → 2 …
248
+ // 全是**静默错答案**:不报错,给出一个看起来完全合理的数字。
249
+ // 其中 None 那 6 格此前还与 JVM 分叉(本引擎拒、JVM 放行),现已同步拒绝。
250
+ //
251
+ // 危害高于 #128:`Map.get` 是策略规则读字段的主路径,
252
+ // `Maybe.withDefault(Map.get(applicant,"creditScore"), 0)` 在本引擎静默走兜底值
253
+ // 照常出决策、在 JVM 上拒绝执行——同一条规则跨引擎决策翻转。
254
+ //
255
+ // 放行范围与 truffle 的 asMap 对齐:接受 guest map 与宿主传入的
256
+ // 普通对象 / JS Map(宿主 context 里的 map 就是这两种形态);
257
+ // 数组不算 Map(truffle 侧 java.util.List 既非 AsterMapValue 也非 Map,同样抛错)。
258
+ if (v === null || v === undefined || typeof v !== 'object' || Array.isArray(v)) {
259
+ throw new InterpreterError(`${op}: expected Map, got ${Array.isArray(v) ? 'List' : typeof v}`);
260
+ }
261
+ // Maybe/Result 变体(含跨引擎 payload 里的 JVM 形 `_type`)一律拒绝。
262
+ //
263
+ // ★必须同时查**属性**与 **Map 条目**两处:`Some(1)` 这类值是带 `__type` 属性的
264
+ // 普通对象,而宿主可能传进一个 `new Map([['_type','Some'],...])`——后者的 `_type`
265
+ // 存在条目里、不是属性,只用 `v.__type` 读会**读不到**而放行(实测 `Map.size` 返回 2)。
266
+ // truffle 侧用的是 `m.get("_type")`(映射查找),天然覆盖这种形态;
267
+ // 本引擎若只查属性就会与之分叉。
268
+ // 已知取舍(两引擎一致,非分叉):判定只看标签**值**是否恰为 Some/None/Ok/Err。
269
+ // 故业务 map 若恰好有个键叫 `_type`/`__type` 且值正是这四个词之一,会被误拒;
270
+ // 值为其它内容(如 "premium")则正常放行。truffle 的 isVariantShaped 规则相同,
271
+ // 二者一致故不构成分叉。真要区分需要引入不可伪造的类型标记,属独立议题。
272
+ const tagOf = (key) => v instanceof Map ? v.get(key) : v[key];
273
+ const variant = tagOf('__type') ?? tagOf('_type');
274
+ if (variant === 'Some' || variant === 'None' || variant === 'Ok' || variant === 'Err') {
275
+ throw new InterpreterError(`${op}: expected Map, got ${String(variant)}`);
276
+ }
175
277
  const m = new GuestMap();
176
- if (v && typeof v === 'object') {
177
- if (v instanceof Map) {
178
- for (const [k, val] of v)
179
- m.set(String(k), val);
180
- }
181
- else {
182
- for (const k of Object.keys(v)) {
183
- m.set(k, v[k]);
184
- }
278
+ if (v instanceof Map) {
279
+ for (const [k, val] of v)
280
+ m.set(String(k), val);
281
+ }
282
+ else {
283
+ for (const k of Object.keys(v)) {
284
+ m.set(k, v[k]);
185
285
  }
186
286
  }
187
287
  return m;
@@ -267,6 +367,101 @@ const MAX_CALL_DEPTH = 50;
267
367
  const MAX_RANGE_SIZE = 1_000_000;
268
368
  /** evalStdlibCall 的哨兵返回值:表示"不是已知 stdlib 调用"。用 Symbol 避免与任何合法返回值冲突。 */
269
369
  const NOT_STDLIB = Symbol('not-stdlib');
370
+ /**
371
+ * stdlib builtin 的参数个数表:`名称 → [最少, 最多]`。
372
+ *
373
+ * <p>★为什么必须有(aster-lang-ts#123):此前 TS 侧**完全不校验参数个数**,
374
+ * 漏参会让 JS 的 `undefined` 一路渗进业务结果,给出**静默错答案**而非报错——
375
+ * `Text.toUpper()` 返回字符串 `"UNDEFINED"`(`String(undefined).toUpperCase()`)、
376
+ * `Text.length()` 返回 `9`(`"undefined".length`)、`Text.concat("a")` 返回
377
+ * `"aundefined"`。compile 与 evaluate 全部 success。
378
+ * 而 truffle 侧有 92 处 `checkArity` 一律抛错——同一段规则两引擎结果不同,
379
+ * 直接违反「两引擎逐字节一致 + 可回放」这条第一约束。
380
+ *
381
+ * <p>本表由 `Builtins.java` 的 `checkArity(name, args, …)` 调用**机械提取**,
382
+ * 保证与 JVM 侧同源;`Text.substring`/`List.slice` 这类可选尾参在 truffle 里就是
383
+ * `checkArity(name, args, min, max)`,故用区间表示。
384
+ *
385
+ * <p>不含 `Some`/`Ok`/`Err` 等构造器——它们在 `evalExpr` 里作为独立表达式类型处理,
386
+ * 根本不经过 `evalStdlibCall`。
387
+ *
388
+ * <p>★也**不含本引擎未实现**的 builtin(`IO.*`、`PII.unwrap`、`Text.redact` 等
389
+ * 仅 JVM 侧有的)。校验位于分派最顶部、先于任何 case 匹配,若把它们列进来,
390
+ * 参数个数不符时会抢先报 arity 错,把「本引擎没有这个函数」说成「你参数写错了」——
391
+ * 用户按提示改对参数个数后仍是 `Undefined function`。故本表只覆盖
392
+ * `evalStdlibCall` 真正实现的名字,让不存在的函数如实报「不存在」。
393
+ */
394
+ const BUILTIN_ARITY = {
395
+ 'Date.addDays': [2, 2],
396
+ 'Date.day': [1, 1],
397
+ 'Date.daysBetween': [2, 2],
398
+ 'Date.fromISO': [1, 1],
399
+ 'Date.month': [1, 1],
400
+ 'Date.year': [1, 1],
401
+ 'Decimal.divide': [4, 4],
402
+ 'Decimal.round': [3, 3],
403
+ 'List.append': [2, 2],
404
+ 'List.combinations': [2, 2],
405
+ 'List.concat': [2, 2],
406
+ 'List.contains': [2, 2],
407
+ 'List.count': [2, 2],
408
+ 'List.distinct': [1, 1],
409
+ 'List.empty': [0, 0],
410
+ 'List.filter': [2, 2],
411
+ 'List.get': [2, 2],
412
+ 'List.groupBy': [2, 2],
413
+ 'List.isEmpty': [1, 1],
414
+ 'List.length': [1, 1],
415
+ 'List.map': [2, 2],
416
+ 'List.max': [1, 1],
417
+ 'List.maxBy': [2, 2],
418
+ 'List.min': [1, 1],
419
+ 'List.minBy': [2, 2],
420
+ 'List.range': [2, 2],
421
+ 'List.reduce': [3, 3],
422
+ 'List.slice': [2, 3],
423
+ 'List.sort': [1, 1],
424
+ 'List.sortBy': [2, 2],
425
+ 'List.sum': [1, 1],
426
+ 'Map.contains': [2, 2],
427
+ 'Map.empty': [0, 0],
428
+ 'Map.get': [2, 2],
429
+ 'Map.keys': [1, 1],
430
+ 'Map.put': [3, 3],
431
+ 'Map.remove': [2, 2],
432
+ 'Map.size': [1, 1],
433
+ 'Map.values': [1, 1],
434
+ 'Maybe.isNone': [1, 1],
435
+ 'Maybe.isSome': [1, 1],
436
+ 'Maybe.map': [2, 2],
437
+ 'Maybe.unwrap': [1, 1],
438
+ 'Maybe.unwrapOr': [2, 2],
439
+ 'Maybe.withDefault': [2, 2],
440
+ 'Option.isNone': [1, 1],
441
+ 'Option.isSome': [1, 1],
442
+ 'Option.map': [2, 2],
443
+ 'Option.unwrap': [1, 1],
444
+ 'Option.unwrapOr': [2, 2],
445
+ 'Result.isErr': [1, 1],
446
+ 'Result.isOk': [1, 1],
447
+ 'Result.mapErr': [2, 2],
448
+ 'Result.mapOk': [2, 2],
449
+ 'Result.tapError': [2, 2],
450
+ 'Result.unwrap': [1, 1],
451
+ 'Result.unwrapErr': [1, 1],
452
+ 'Text.concat': [2, 2],
453
+ 'Text.contains': [2, 2],
454
+ 'Text.equals': [2, 2],
455
+ 'Text.indexOf': [2, 2],
456
+ 'Text.length': [1, 1],
457
+ 'Text.replace': [3, 3],
458
+ 'Text.split': [2, 2],
459
+ 'Text.startsWith': [2, 2],
460
+ 'Text.substring': [2, 3],
461
+ 'Text.toLower': [1, 1],
462
+ 'Text.toUpper': [1, 1],
463
+ 'Text.trim': [1, 1],
464
+ };
270
465
  // ── Date.* 合规原语支撑:纯整数 proleptic Gregorian 历法(与 truffle 逐位一致)。 ──
271
466
  // 铁律:内部日期 = epoch-day Int(自 1970-01-01 的天数)。**不用 JS Date**(避时区/DST/
272
467
  // year 0..99 陷阱)。年份范围 0001-9999。禁 today()(确定性——"今天"必须作输入字段)。
@@ -728,6 +923,30 @@ class Interpreter {
728
923
  * 目前覆盖语料库用到的 Text.* 子集;未来 List/Map/Result 可同法扩展。
729
924
  */
730
925
  evalStdlibCall(name, argExprs, env) {
926
+ // 参数个数校验(aster-lang-ts#123)。
927
+ //
928
+ // ★**与 truffle 存在已知时序差,不要写成"同时机"**:truffle 的
929
+ // `CallNode.doCall` 先 `Exec.exec` 求值全部实参,再调 BuiltinDef,
930
+ // `checkArity` 位于 def 体内首行(Builtins.java:1164)——即 JVM 是
931
+ // **先求值实参、后校验 arity**;这里则相反。
932
+ //
933
+ // 后果:对「arity 错 + 实参本身会抛错」的规则,两引擎报不同的错。例如
934
+ // `Text.concat("a","b",List.sum(1))`:本引擎报 arity 错,JVM 报 List.sum 的类型错。
935
+ // 二者都拒绝该程序,但错误信息不同。
936
+ //
937
+ // 之所以仍放在前面:本 issue 要消灭的是**静默错答案**(漏参返回 "UNDEFINED"
938
+ // 这类"看起来合理的值"),提前校验能确保任何 arity 错都响亮失败、且不跑实参副作用。
939
+ // 时序对齐是另一个议题(要么 JVM 提前、要么 TS 延后),已单开 issue 跟进——
940
+ // 不在此处偷偷改变任一引擎的求值顺序。
941
+ const arity = BUILTIN_ARITY[name];
942
+ if (arity !== undefined) {
943
+ const [min, max] = arity;
944
+ const got = argExprs.length;
945
+ if (got < min || got > max) {
946
+ const want = min === max ? `${min}` : `${min}-${max}`;
947
+ throw new InterpreterError(`${name}: expected ${want} args, got ${got} args`);
948
+ }
949
+ }
731
950
  const text = (v) => String(v);
732
951
  const a = () => argExprs.map((e) => this.evalExpr(e, env));
733
952
  // 解析"可调用"参数:若是引用模块函数的裸 Name(非局部变量),返回函数名字符串
@@ -872,29 +1091,29 @@ class Interpreter {
872
1091
  // 是两件事,不能塌陷。
873
1092
  case 'Map.get': {
874
1093
  const [m, k] = a();
875
- const g = asGuestMap(m);
1094
+ const g = asGuestMap('Map.get', m);
876
1095
  const key = mapKey(k);
877
1096
  return g.has(key) ? { __type: 'Some', value: g.get(key) } : null;
878
1097
  }
879
1098
  case 'Map.contains': {
880
1099
  const [m, k] = a();
881
- return asGuestMap(m).has(mapKey(k));
1100
+ return asGuestMap('Map.contains', m).has(mapKey(k));
882
1101
  }
883
1102
  case 'Map.size': {
884
1103
  const [m] = a();
885
- return asGuestMap(m).size;
1104
+ return asGuestMap('Map.size', m).size;
886
1105
  }
887
1106
  // 补齐与 truffle Builtins 对等的 Map.* (put/remove/keys/values)——TS 之前缺这 4 个,
888
1107
  // List.groupBy(...) 的 Map.values 链需要。put/remove 不可变(返回新 GuestMap)。
889
1108
  case 'Map.put': {
890
1109
  const [m, k, v] = a();
891
- const g = new GuestMap(asGuestMap(m));
1110
+ const g = new GuestMap(asGuestMap('Map.put', m));
892
1111
  g.set(mapKey(k), v);
893
1112
  return g;
894
1113
  }
895
1114
  case 'Map.remove': {
896
1115
  const [m, k] = a();
897
- const g = new GuestMap(asGuestMap(m));
1116
+ const g = new GuestMap(asGuestMap('Map.remove', m));
898
1117
  g.delete(mapKey(k));
899
1118
  return g;
900
1119
  }
@@ -933,11 +1152,11 @@ class Interpreter {
933
1152
  }
934
1153
  case 'Map.keys': {
935
1154
  const [m] = a();
936
- return [...asGuestMap(m).keys()];
1155
+ return [...asGuestMap('Map.keys', m).keys()];
937
1156
  }
938
1157
  case 'Map.values': {
939
1158
  const [m] = a();
940
- return [...asGuestMap(m).values()];
1159
+ return [...asGuestMap('Map.values', m).values()];
941
1160
  }
942
1161
  // Maybe/Option/Result(非 lambda 部分)。Some/Ok/Err/None 形如 { __type, value }。
943
1162
  case 'Maybe.withDefault':
@@ -952,10 +1171,22 @@ class Interpreter {
952
1171
  const [x] = a();
953
1172
  return x?.__type === 'Some';
954
1173
  }
1174
+ // isNone 语义是「**是** None」,不是「不是 Some」(aster-lang-ts#131)。
1175
+ //
1176
+ // 旧写法 `?.__type !== 'Some'` 会把任意非 Maybe 输入也判成 None:
1177
+ // Maybe.isNone(42) → true,而 JVM 侧(`"None".equals(m.get("_type"))`)→ false
1178
+ // 36 格矩阵(6 个谓词 × 6 种输入)实测:仅 isNone/Option.isNone 的
1179
+ // Ok/Err/Int/Text 四格分叉(共 8 格),isSome/isOk/isErr 全对齐。
1180
+ // JVM 那侧是对的——isNone 不该对 `Ok(1)`、`42` 返回 true。
1181
+ //
1182
+ // ★两种 None 表示都要认:`None` 字面量求值为裸 `null`(evalExpr 的 case 'None'),
1183
+ // 而 Maybe.map 等返回 `{__type:'None'}`。只认后者会让 `Maybe.isNone(None)` 变 false。
955
1184
  case 'Maybe.isNone':
956
1185
  case 'Option.isNone': {
957
1186
  const [x] = a();
958
- return x?.__type !== 'Some';
1187
+ if (x === null || x === undefined)
1188
+ return true;
1189
+ return x?.__type === 'None';
959
1190
  }
960
1191
  case 'Result.isOk': {
961
1192
  const [r] = a();
@@ -1188,6 +1419,22 @@ class Interpreter {
1188
1419
  }
1189
1420
  // === 高阶 Maybe / Result 操作 ===
1190
1421
  // Maybe.map(opt, fn):Some(v)→Some(fn(v)),None 原样返回。
1422
+ //
1423
+ // ★首参必须是 Maybe(aster-lang-ts#128):此前对任意非 Maybe 输入都静默返回
1424
+ // None,于是 `Maybe.withDefault(Maybe.map(42, f), 0)` 得到 0——一个**看起来
1425
+ // 完全合理**的决策值,而同一段规则在 JVM 上直接抛错(Builtins.java 的
1426
+ // `operationExpectedType("Maybe.map", "Maybe (Some or None)", …)`)。
1427
+ // 既是双引擎分叉,也是静默错答案,与 #123 的 arity 缺口同一模式。
1428
+ //
1429
+ // 注意 TS 侧 None 有**两种**运行期表示,都要认:`None` 字面量求值为 `null`
1430
+ // (evalExpr 的 case 'None'),而 Maybe.map 自身返回 `{__type:'None'}`。
1431
+ // 只认后者会误伤 `Maybe.map(None, f)`。
1432
+ //
1433
+ // ★不在放行之列(有意为之):`undefined`、以及 JVM 形的 `{_type:'None'}`
1434
+ // (单下划线——truffle 用 `_type`,TS 全仓用 `__type`)。后者若从跨引擎
1435
+ // payload 混进来,修复前会被当成"非 Some"而静默返回 None——连
1436
+ // `{_type:'Some',value:21}` 都会得 0 而非 42,本就是错答案。
1437
+ // 现在改为响亮报错,方向正确、不是回退。
1191
1438
  case 'Maybe.map':
1192
1439
  case 'Option.map': {
1193
1440
  const o = this.evalExpr(argExprs[0], env);
@@ -1195,6 +1442,18 @@ class Interpreter {
1195
1442
  const fn = callableArg(1);
1196
1443
  return { __type: 'Some', value: this.applyCallable(fn, [o.value]) };
1197
1444
  }
1445
+ if (o !== null && o?.__type !== 'None') {
1446
+ // 消息**主体**与 truffle 的 operationExpectedType 对齐
1447
+ // (`Maybe.map: expected Maybe (Some or None), got X`),但**类型名词汇表
1448
+ // 两侧不同**,不止大小写:本引擎用 JS `typeof`(7 值域),truffle 用
1449
+ // `typeName()` 返回 aster 语言类型名。实测对照:
1450
+ // 42 → number/Number "abc" → string/Text True → boolean/Bool
1451
+ // List → object/ArrayList Map → object/Map Ok(1) → object/Ok
1452
+ // 即 `object` 一口气吞掉 List/Map/Ok/Err,诊断价值低于 JVM 侧。
1453
+ // 这是本仓既有的全局差异而非本次引入(`List.sum(42)` 同样 number/Number),
1454
+ // 故沿用本文件既有写法保持局部一致;统一 typename 词汇表是独立议题。
1455
+ throw new InterpreterError(`${name}: expected Maybe (Some or None), got ${typeof o}`);
1456
+ }
1198
1457
  return { __type: 'None' };
1199
1458
  }
1200
1459
  // Result.mapOk(res, fn):Ok(v)→Ok(fn(v)),Err 原样返回。