@ball-lang/compiler 1.7.3 → 1.7.5
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/dist/compiler.d.ts.map +1 -1
- package/dist/compiler.js +62 -4
- package/dist/compiler.js.map +1 -1
- package/dist/preamble.d.ts.map +1 -1
- package/dist/preamble.js +46 -8
- package/dist/preamble.js.map +1 -1
- package/package.json +1 -1
- package/src/compiler.ts +62 -4
- package/src/preamble.ts +46 -8
package/dist/compiler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"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"}
|
package/dist/compiler.js
CHANGED
|
@@ -4038,7 +4038,28 @@ function __isUnknownFnError(e: any): boolean {
|
|
|
4038
4038
|
case "math_infinity": return "Infinity";
|
|
4039
4039
|
case "math_nan": return "NaN";
|
|
4040
4040
|
case "print": return `console.log(__ball_to_string(${this.expr(f.get("message"))}))`;
|
|
4041
|
-
case "index":
|
|
4041
|
+
case "index": {
|
|
4042
|
+
const target = f.get("target");
|
|
4043
|
+
const idx = f.get("index");
|
|
4044
|
+
// Bracket-invoking a string-literal-named operator method (e.g.
|
|
4045
|
+
// `a['+'](b)` — the only way to call one, since TS has no `operator`
|
|
4046
|
+
// keyword) indexes with the RAW lexeme, but the compiled class
|
|
4047
|
+
// exposes the operator under its canonical __op_*__ name (#248) —
|
|
4048
|
+
// translate the lexeme so the access finds the real method instead
|
|
4049
|
+
// of a nonexistent literal '+' property (#252). "-" is ambiguous
|
|
4050
|
+
// (unary __op_neg__ vs binary __op_sub__ — a class can only define
|
|
4051
|
+
// ONE '-'-named method, so exactly one of the two properties ever
|
|
4052
|
+
// actually exists; ?? picks whichever it is without needing type
|
|
4053
|
+
// info to disambiguate at the call site).
|
|
4054
|
+
const lexeme = idx.literal?.stringValue;
|
|
4055
|
+
if (lexeme !== undefined && Object.prototype.hasOwnProperty.call(operatorIndexNames, lexeme)) {
|
|
4056
|
+
const targetStr = this.expr(target);
|
|
4057
|
+
if (lexeme === "-")
|
|
4058
|
+
return `(${targetStr}.__op_sub__ ?? ${targetStr}.__op_neg__)`;
|
|
4059
|
+
return `${targetStr}.${operatorIndexNames[lexeme]}`;
|
|
4060
|
+
}
|
|
4061
|
+
return `__ball_index(${this.expr(target)}, ${this.expr(idx)})`;
|
|
4062
|
+
}
|
|
4042
4063
|
case "null_coalesce": return `(${this.expr(f.get("left"))} ?? ${this.expr(f.get("right"))})`;
|
|
4043
4064
|
case "null_check": return this.expr(f.get("value"));
|
|
4044
4065
|
case "is": {
|
|
@@ -4567,15 +4588,23 @@ function __isUnknownFnError(e: any): boolean {
|
|
|
4567
4588
|
}
|
|
4568
4589
|
case "map_keys": {
|
|
4569
4590
|
const map = f.get("map") ?? f.get("value");
|
|
4570
|
-
|
|
4591
|
+
// Fail loud on a non-Map receiver instead of silently returning [] —
|
|
4592
|
+
// that silent degradation is the class of bug that hid issue #55
|
|
4593
|
+
// (mirrors the .keys DART-GETTER guard already installed in
|
|
4594
|
+
// preamble.ts's defDartGetter block, and the engine/C++-compiler
|
|
4595
|
+
// guards for the same base function, #218).
|
|
4596
|
+
return map ? `__ball_map_keys(${this.expr(map)})` : "[]";
|
|
4571
4597
|
}
|
|
4572
4598
|
case "map_values": {
|
|
4573
4599
|
const map = f.get("map") ?? f.get("value");
|
|
4574
|
-
return map ? `
|
|
4600
|
+
return map ? `__ball_map_values(${this.expr(map)})` : "[]";
|
|
4575
4601
|
}
|
|
4576
4602
|
case "map_entries": {
|
|
4577
4603
|
const map = f.get("map") ?? f.get("value");
|
|
4578
|
-
|
|
4604
|
+
// Same silent-degradation class as map_keys/map_values (#218): a
|
|
4605
|
+
// bare Object.entries(...) on a non-Map silently returns garbage
|
|
4606
|
+
// instead of failing loud.
|
|
4607
|
+
return map ? `__ball_map_entries(${this.expr(map)})` : "[]";
|
|
4579
4608
|
}
|
|
4580
4609
|
case "map_length": {
|
|
4581
4610
|
const map = f.get("map") ?? f.get("value");
|
|
@@ -6165,6 +6194,35 @@ function unwrapLambda(e) {
|
|
|
6165
6194
|
return e.lambda.body;
|
|
6166
6195
|
return e;
|
|
6167
6196
|
}
|
|
6197
|
+
/** Maps an operator lexeme to the canonical __op_*__ name a compiled class
|
|
6198
|
+
* exposes it under (mirrors ts/encoder's OPERATOR_CANONICAL_NAMES exactly
|
|
6199
|
+
* — double-trailing-underscore; NOT sanitize()'s single-underscore
|
|
6200
|
+
* operatorMap below, which is a separate, legacy short-name convention).
|
|
6201
|
+
* Used by std."index" to translate `a['+']` (the only way to bracket-
|
|
6202
|
+
* invoke a string-literal-named operator method) to the real property. */
|
|
6203
|
+
const operatorIndexNames = {
|
|
6204
|
+
"[]=": "__op_set_index__",
|
|
6205
|
+
"[]": "__op_get_index__",
|
|
6206
|
+
"==": "__op_eq__",
|
|
6207
|
+
"<": "__op_lt__",
|
|
6208
|
+
"<=": "__op_le__",
|
|
6209
|
+
">": "__op_gt__",
|
|
6210
|
+
">=": "__op_ge__",
|
|
6211
|
+
"<<": "__op_shl__",
|
|
6212
|
+
">>": "__op_shr__",
|
|
6213
|
+
">>>": "__op_ushr__",
|
|
6214
|
+
"+": "__op_add__",
|
|
6215
|
+
"*": "__op_mul__",
|
|
6216
|
+
"/": "__op_div__",
|
|
6217
|
+
"~/": "__op_idiv__",
|
|
6218
|
+
"%": "__op_mod__",
|
|
6219
|
+
"&": "__op_band__",
|
|
6220
|
+
"|": "__op_bor__",
|
|
6221
|
+
"^": "__op_bxor__",
|
|
6222
|
+
"~": "__op_bnot__",
|
|
6223
|
+
// "-" handled specially at the call site (unary vs binary ambiguity).
|
|
6224
|
+
"-": "__op_sub__",
|
|
6225
|
+
};
|
|
6168
6226
|
function sanitize(name) {
|
|
6169
6227
|
let out = name;
|
|
6170
6228
|
const colon = out.indexOf(":");
|