@scriptc/compiler 0.0.17 → 0.0.18

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 (51) hide show
  1. package/ambient/scriptc-node-fallback.d.ts +4 -4
  2. package/dist/backend/cc.d.ts +5 -0
  3. package/dist/backend/cc.js +2 -0
  4. package/dist/backend/cc.js.map +1 -1
  5. package/dist/backend/emission/emit-async.js +35 -2
  6. package/dist/backend/emission/emit-async.js.map +1 -1
  7. package/dist/backend/emission/emit-exprs.js +40 -4
  8. package/dist/backend/emission/emit-exprs.js.map +1 -1
  9. package/dist/backend/emission/emitter.js +69 -11
  10. package/dist/backend/emission/emitter.js.map +1 -1
  11. package/dist/backend/emission/may-throw.d.ts +3 -3
  12. package/dist/backend/emission/may-throw.js +15 -4
  13. package/dist/backend/emission/may-throw.js.map +1 -1
  14. package/dist/backend/llvm/emitter.js +199 -21
  15. package/dist/backend/llvm/emitter.js.map +1 -1
  16. package/dist/frontend/lowering/lower-builtins.js +4 -7
  17. package/dist/frontend/lowering/lower-builtins.js.map +1 -1
  18. package/dist/frontend/lowering/lower-calls.js +17 -9
  19. package/dist/frontend/lowering/lower-calls.js.map +1 -1
  20. package/dist/frontend/lowering/lower-containers.d.ts +22 -17
  21. package/dist/frontend/lowering/lower-containers.js +628 -51
  22. package/dist/frontend/lowering/lower-containers.js.map +1 -1
  23. package/dist/frontend/lowering/lower-exprs.js +19 -1
  24. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  25. package/dist/frontend/lowering/lower-island.js +55 -7
  26. package/dist/frontend/lowering/lower-island.js.map +1 -1
  27. package/dist/frontend/lowering/lower-modules.js +144 -10
  28. package/dist/frontend/lowering/lower-modules.js.map +1 -1
  29. package/dist/frontend/lowering/lower-stmts.d.ts +8 -0
  30. package/dist/frontend/lowering/lower-stmts.js +408 -21
  31. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  32. package/dist/frontend/lowering/lowerer.d.ts +38 -0
  33. package/dist/frontend/lowering/lowerer.js +149 -2
  34. package/dist/frontend/lowering/lowerer.js.map +1 -1
  35. package/dist/frontend/lowering/surfaces.js +4 -0
  36. package/dist/frontend/lowering/surfaces.js.map +1 -1
  37. package/dist/index.js +5 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/ir/nodes.d.ts +46 -12
  40. package/dist/ir/nodes.js +41 -0
  41. package/dist/ir/nodes.js.map +1 -1
  42. package/dist/ir/serialize.d.ts +1 -1
  43. package/dist/ir/serialize.js +1 -1
  44. package/dist/ir/validate.js +98 -39
  45. package/dist/ir/validate.js.map +1 -1
  46. package/dist/library/int-infer.js +191 -25
  47. package/dist/library/int-infer.js.map +1 -1
  48. package/dist/library/int-infer.test.js +206 -1
  49. package/dist/library/int-infer.test.js.map +1 -1
  50. package/package.json +2 -2
  51. package/surface-manifest.json +25 -1
@@ -4453,19 +4453,27 @@ export function lowerPrimitiveProtoCall(L, call, recv, name, memberSym) {
4453
4453
  if (name === "toFixed" && recvKind === "f64" && call.arguments.length === 1) {
4454
4454
  const operand = L.lowerExpr(recv);
4455
4455
  let digits = L.lowerExpr(call.arguments[0]);
4456
- // The optional parameter also admits undefined. A standalone,
4457
- // side-effect-free undefined value is exactly the default 0; an
4458
- // optional number preserves its evaluation and selects 0 at runtime
4459
- // through the same narrowed nullish IR used by `digits ?? 0`.
4456
+ // The optional parameter also admits undefined. Exact unit values
4457
+ // become the default 0 after preserving any evaluation effects; an
4458
+ // optional number selects 0 at runtime through the same narrowed
4459
+ // nullish IR used by `digits ?? 0`.
4460
4460
  const zero = { kind: "numLit", value: 0, type: F64, loc: digits.loc };
4461
- if ((digits.type.kind === "undefinedT" || digits.type.kind === "void") &&
4462
- droppableStatic(digits)) {
4463
- digits = zero;
4461
+ const defaultUnitDigits = (value) => droppableStatic(value)
4462
+ ? zero
4463
+ : {
4464
+ kind: "seqExpr",
4465
+ stmts: [{ kind: "exprStmt", expr: value, loc: value.loc }],
4466
+ result: zero,
4467
+ type: F64,
4468
+ loc: value.loc,
4469
+ };
4470
+ if (digits.type.kind === "undefinedT" || digits.type.kind === "void") {
4471
+ digits = defaultUnitDigits(digits);
4464
4472
  }
4465
4473
  else if (digits.type.kind === "union") {
4466
4474
  const def = L.unions.get(digits.type.unionId);
4467
- if (def?.arms.every(isUnitType) && droppableStatic(digits)) {
4468
- digits = zero;
4475
+ if (def?.arms.every(isUnitType)) {
4476
+ digits = defaultUnitDigits(digits);
4469
4477
  }
4470
4478
  else if (def?.arms.length === 2 &&
4471
4479
  def.arms.some((arm) => arm.kind === "f64") &&