@ball-lang/compiler 1.6.1 → 1.6.3
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 +34 -6
- package/dist/compiler.js.map +1 -1
- package/dist/preamble.d.ts.map +1 -1
- package/dist/preamble.js +32 -4
- package/dist/preamble.js.map +1 -1
- package/package.json +1 -1
- package/src/compiler.ts +35 -6
- package/src/preamble.ts +32 -4
package/dist/compiler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAMV,MAAM,EACN,OAAO,EAIR,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,cAAc;IAC7B,2EAA2E;IAC3E,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAQD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAElC,+CAA+C;IAC/C,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,KAAK,CAAK;IAElB,4EAA4E;IAC5E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;IAE/C,sEAAsE;IACtE,OAAO,CAAC,YAAY,CAA0B;IAE9C,mEAAmE;IACnE,OAAO,CAAC,kBAAkB,CAA0B;IAEpD,mEAAmE;IACnE,OAAO,CAAC,mBAAmB,CAA0B;IAErD,0EAA0E;IAC1E,OAAO,CAAC,uBAAuB,CAA0B;IAEzD;0EACsE;IACtE,OAAO,CAAC,uBAAuB,CAA0B;IAEzD;;;;OAIG;IACH,OAAO,CAAC,uBAAuB,CAA0B;IAEzD,8EAA8E;IAC9E,OAAO,CAAC,gBAAgB,CAAqB;IAE7C,8EAA8E;IAC9E,OAAO,CAAC,sBAAsB,CAA0B;IAExD,yEAAyE;IACzE,OAAO,CAAC,gBAAgB,CAA0B;IAElD,4DAA4D;IAC5D,OAAO,CAAC,aAAa,CAA0C;IAE/D;;;OAGG;IACH,OAAO,CAAC,iBAAiB,CAA0B;IAEnD;;;;;OAKG;IACH,OAAO,CAAC,WAAW,CAA6B;IAEhD;;;;;;;;;;OAUG;IACH,OAAO,CAAC,gBAAgB,CAAgB;gBAE5B,OAAO,EAAE,OAAO;IAI5B,4BAA4B;IAC5B,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,MAAM;IA0qE7C,OAAO,CAAC,gBAAgB;IAgDxB;;;;OAIG;IACH,OAAO,CAAC,QAAQ;IAUhB,wEAAwE;IACxE,OAAO,CAAC,iBAAiB;IAoBzB;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,SAAS;IA8NjB,OAAO,CAAC,SAAS;IAqGjB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IA0BtB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IA4FtB,OAAO,CAAC,WAAW;IA0BnB,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,OAAO;IAIf,OAAO,KAAK,GAAG,GAEd;IAED,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,yBAAyB;IAoBjC,OAAO,CAAC,SAAS;IA6BjB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAStB;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAiB9B,OAAO,CAAC,aAAa;
|
|
1
|
+
{"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"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"}
|
package/dist/compiler.js
CHANGED
|
@@ -2647,7 +2647,16 @@ function __isUnknownFnError(e: any): boolean {
|
|
|
2647
2647
|
const name = this.resolveVarName(rawName);
|
|
2648
2648
|
// Track this declaration in the current scope.
|
|
2649
2649
|
this.scopeDeclaredVars.add(name);
|
|
2650
|
-
|
|
2650
|
+
// The encoder marks "no initializer" with a reference to the sentinel
|
|
2651
|
+
// name __no_init__ (rather than omitting `value`) — e.g. `int? maybe;`.
|
|
2652
|
+
// Left uncaught, this compiles to `let maybe = __no_init__;`, which
|
|
2653
|
+
// resolves to the runtime preamble's OWN __no_init__ Symbol (used
|
|
2654
|
+
// internally by the compiled self-hosted engine) instead of leaving
|
|
2655
|
+
// `maybe` genuinely undefined, so a later `??=` never fires (#225).
|
|
2656
|
+
// Mirrors the same check already applied to for-loop init bindings
|
|
2657
|
+
// in renderForInit.
|
|
2658
|
+
const isNoInit = stmt.let.value?.reference?.name === "__no_init__";
|
|
2659
|
+
if (stmt.let.value !== undefined && !isNoInit) {
|
|
2651
2660
|
this.writeln(`${kw} ${name} = ${this.expr(stmt.let.value)};`);
|
|
2652
2661
|
}
|
|
2653
2662
|
else {
|
|
@@ -4192,7 +4201,16 @@ function __isUnknownFnError(e: any): boolean {
|
|
|
4192
4201
|
elems.push(fd.value);
|
|
4193
4202
|
}
|
|
4194
4203
|
}
|
|
4195
|
-
else if (
|
|
4204
|
+
else if (
|
|
4205
|
+
// A `<T>{}` empty-typed-set-literal (e.g. `<int>{}`) carries its
|
|
4206
|
+
// type argument as a field literally named "type_args" (the
|
|
4207
|
+
// encoder's current single-word convention, NOT the older
|
|
4208
|
+
// MessageCreation-level "__type_args__" cosmetic marker checked
|
|
4209
|
+
// elsewhere in this file). Excluding only "__type_args__" left
|
|
4210
|
+
// it falling through to this generic branch and being pushed in
|
|
4211
|
+
// as a bogus set ELEMENT (`<int>{}` -> `new Set(['int'])`
|
|
4212
|
+
// instead of an empty Set, #219).
|
|
4213
|
+
fd.name !== "__type_args__" && fd.name !== "__const__" && fd.name !== "type_args") {
|
|
4196
4214
|
elems.push(fd.value);
|
|
4197
4215
|
}
|
|
4198
4216
|
}
|
|
@@ -4670,7 +4688,11 @@ function __isUnknownFnError(e: any): boolean {
|
|
|
4670
4688
|
}
|
|
4671
4689
|
// Type ops
|
|
4672
4690
|
case "type_literal": {
|
|
4673
|
-
|
|
4691
|
+
// The encoder's canonical field is "type" (matches the Dart compiler's
|
|
4692
|
+
// _stringFieldValue(f, 'type')) — a type literal's stored value is
|
|
4693
|
+
// Type.toString() (e.g. 'int', 'List<dynamic>'), so this just needs to
|
|
4694
|
+
// evaluate to that string; == and interpolation follow for free.
|
|
4695
|
+
const v = f.get("type") ?? f.get("value") ?? f.get("name");
|
|
4674
4696
|
return v ? this.expr(v) : "null";
|
|
4675
4697
|
}
|
|
4676
4698
|
default: {
|
|
@@ -4740,7 +4762,7 @@ function __isUnknownFnError(e: any): boolean {
|
|
|
4740
4762
|
case "to_string_as_fixed": {
|
|
4741
4763
|
const v = this.expr(fg("value", "arg0"));
|
|
4742
4764
|
const d = this.expr(fg("digits", "arg1", "right"));
|
|
4743
|
-
return `(
|
|
4765
|
+
return `__ball_to_fixed(${v}, ${d})`;
|
|
4744
4766
|
}
|
|
4745
4767
|
// num.{round,floor,ceil,truncate}ToDouble() → double (issue #100).
|
|
4746
4768
|
// Wrap in BallDouble so a whole result renders `4.0`, not `4`.
|
|
@@ -6044,8 +6066,14 @@ function dartInitializerToTs(dartInit, tsType, rawDartType) {
|
|
|
6044
6066
|
return defaultInitializer(tsType, rawDartType);
|
|
6045
6067
|
}
|
|
6046
6068
|
const s = dartInit.trim();
|
|
6047
|
-
// Already a JS-compatible literal: string, number, bool, null,
|
|
6048
|
-
|
|
6069
|
+
// Already a JS-compatible literal: string, number, bool, null, list.
|
|
6070
|
+
// A non-empty Dart list literal (e.g. `[10, 20, 30]`) is valid JS array
|
|
6071
|
+
// syntax as-is — this used to only match the EMPTY `[]` case, so a field
|
|
6072
|
+
// like `var widgets = [10, 20, 30];` fell through to defaultInitializer
|
|
6073
|
+
// (which has no type info to fall back on when the field's declared type
|
|
6074
|
+
// was inferred rather than explicit) and silently dropped to no
|
|
6075
|
+
// initializer at all, i.e. undefined/null (#220).
|
|
6076
|
+
if (/^(?:null|true|false|'.*'|".*"|-?\d+(?:\.\d+)?|\[[\s\S]*\])$/.test(s)) {
|
|
6049
6077
|
return s;
|
|
6050
6078
|
}
|
|
6051
6079
|
// Dart `{}` can mean either an empty Map or an empty Set depending
|