aontu 0.50.1 → 0.52.0

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 (197) hide show
  1. package/bin/aontu-lsp.js +6 -0
  2. package/bin/aontu.js +7 -0
  3. package/dist/aontu.d.ts +4 -2
  4. package/dist/aontu.js +21 -8
  5. package/dist/aontu.js.map +1 -1
  6. package/dist/cli.d.ts +0 -1
  7. package/dist/cli.js +43 -53
  8. package/dist/cli.js.map +1 -1
  9. package/dist/ctx.js +1 -1
  10. package/dist/ctx.js.map +1 -1
  11. package/dist/err.js +3 -2
  12. package/dist/err.js.map +1 -1
  13. package/dist/exactjson.d.ts +37 -0
  14. package/dist/exactjson.js +228 -0
  15. package/dist/exactjson.js.map +1 -0
  16. package/dist/hints.d.ts +3 -1
  17. package/dist/hints.js +187 -5
  18. package/dist/hints.js.map +1 -1
  19. package/dist/keyorder.d.ts +9 -0
  20. package/dist/keyorder.js +65 -0
  21. package/dist/keyorder.js.map +1 -0
  22. package/dist/lang.js +263 -30
  23. package/dist/lang.js.map +1 -1
  24. package/dist/lsp-server.d.ts +2 -2
  25. package/dist/lsp-server.js +10 -10
  26. package/dist/lsp-server.js.map +1 -1
  27. package/dist/lsp.js +39 -21
  28. package/dist/lsp.js.map +1 -1
  29. package/dist/site.js +1 -1
  30. package/dist/site.js.map +1 -1
  31. package/dist/tsconfig.tsbuildinfo +1 -1
  32. package/dist/unify.js +48 -1
  33. package/dist/unify.js.map +1 -1
  34. package/dist/utility.js +3 -8
  35. package/dist/utility.js.map +1 -1
  36. package/dist/val/BagVal.js +9 -6
  37. package/dist/val/BagVal.js.map +1 -1
  38. package/dist/val/BigDecimalVal.d.ts +13 -0
  39. package/dist/val/BigDecimalVal.js +80 -0
  40. package/dist/val/BigDecimalVal.js.map +1 -0
  41. package/dist/val/BigIntegerVal.d.ts +11 -0
  42. package/dist/val/BigIntegerVal.js +75 -0
  43. package/dist/val/BigIntegerVal.js.map +1 -0
  44. package/dist/val/BooleanVal.js +1 -1
  45. package/dist/val/BooleanVal.js.map +1 -1
  46. package/dist/val/CloseFuncVal.js +1 -1
  47. package/dist/val/CloseFuncVal.js.map +1 -1
  48. package/dist/val/ConjunctVal.js +1 -1
  49. package/dist/val/ConjunctVal.js.map +1 -1
  50. package/dist/val/ConstraintVal.d.ts +56 -0
  51. package/dist/val/ConstraintVal.js +407 -0
  52. package/dist/val/ConstraintVal.js.map +1 -0
  53. package/dist/val/CopyFuncVal.js +1 -1
  54. package/dist/val/CopyFuncVal.js.map +1 -1
  55. package/dist/val/Decimal.d.ts +32 -0
  56. package/dist/val/Decimal.js +318 -0
  57. package/dist/val/Decimal.js.map +1 -0
  58. package/dist/val/DisjunctVal.js +1 -29
  59. package/dist/val/DisjunctVal.js.map +1 -1
  60. package/dist/val/ExpectVal.js +1 -1
  61. package/dist/val/ExpectVal.js.map +1 -1
  62. package/dist/val/FeatureVal.js +1 -1
  63. package/dist/val/FeatureVal.js.map +1 -1
  64. package/dist/val/FuncBaseVal.js +1 -1
  65. package/dist/val/FuncBaseVal.js.map +1 -1
  66. package/dist/val/HideFuncVal.js +1 -1
  67. package/dist/val/HideFuncVal.js.map +1 -1
  68. package/dist/val/IntegerVal.d.ts +2 -0
  69. package/dist/val/IntegerVal.js +77 -5
  70. package/dist/val/IntegerVal.js.map +1 -1
  71. package/dist/val/JunctionVal.js +1 -1
  72. package/dist/val/JunctionVal.js.map +1 -1
  73. package/dist/val/KeyFuncVal.d.ts +1 -1
  74. package/dist/val/KeyFuncVal.js +34 -4
  75. package/dist/val/KeyFuncVal.js.map +1 -1
  76. package/dist/val/ListVal.js +7 -7
  77. package/dist/val/ListVal.js.map +1 -1
  78. package/dist/val/LowerFuncVal.js +21 -4
  79. package/dist/val/LowerFuncVal.js.map +1 -1
  80. package/dist/val/MapVal.js +17 -13
  81. package/dist/val/MapVal.js.map +1 -1
  82. package/dist/val/MoveFuncVal.js +26 -9
  83. package/dist/val/MoveFuncVal.js.map +1 -1
  84. package/dist/val/NilVal.d.ts +1 -0
  85. package/dist/val/NilVal.js +10 -3
  86. package/dist/val/NilVal.js.map +1 -1
  87. package/dist/val/NullVal.js +1 -1
  88. package/dist/val/NullVal.js.map +1 -1
  89. package/dist/val/NumberVal.d.ts +1 -0
  90. package/dist/val/NumberVal.js +25 -4
  91. package/dist/val/NumberVal.js.map +1 -1
  92. package/dist/val/OpBaseVal.js +10 -8
  93. package/dist/val/OpBaseVal.js.map +1 -1
  94. package/dist/val/OpenFuncVal.js +1 -1
  95. package/dist/val/OpenFuncVal.js.map +1 -1
  96. package/dist/val/PathFuncVal.js +10 -2
  97. package/dist/val/PathFuncVal.js.map +1 -1
  98. package/dist/val/PlusOpVal.d.ts +3 -1
  99. package/dist/val/PlusOpVal.js +140 -29
  100. package/dist/val/PlusOpVal.js.map +1 -1
  101. package/dist/val/PrefFuncVal.js +1 -1
  102. package/dist/val/PrefFuncVal.js.map +1 -1
  103. package/dist/val/PrefVal.d.ts +2 -0
  104. package/dist/val/PrefVal.js +44 -7
  105. package/dist/val/PrefVal.js.map +1 -1
  106. package/dist/val/RefVal.d.ts +2 -0
  107. package/dist/val/RefVal.js +135 -11
  108. package/dist/val/RefVal.js.map +1 -1
  109. package/dist/val/ScalarKindVal.d.ts +12 -2
  110. package/dist/val/ScalarKindVal.js +108 -13
  111. package/dist/val/ScalarKindVal.js.map +1 -1
  112. package/dist/val/ScalarVal.d.ts +1 -0
  113. package/dist/val/ScalarVal.js +18 -3
  114. package/dist/val/ScalarVal.js.map +1 -1
  115. package/dist/val/StringVal.js +1 -1
  116. package/dist/val/StringVal.js.map +1 -1
  117. package/dist/val/SuperFuncVal.d.ts +1 -1
  118. package/dist/val/SuperFuncVal.js +15 -2
  119. package/dist/val/SuperFuncVal.js.map +1 -1
  120. package/dist/val/TopVal.js +1 -1
  121. package/dist/val/TopVal.js.map +1 -1
  122. package/dist/val/TypeFuncVal.js +1 -1
  123. package/dist/val/TypeFuncVal.js.map +1 -1
  124. package/dist/val/UpperFuncVal.js +21 -4
  125. package/dist/val/UpperFuncVal.js.map +1 -1
  126. package/dist/val/Val.d.ts +1 -1
  127. package/dist/val/Val.js +11 -21
  128. package/dist/val/Val.js.map +1 -1
  129. package/dist/val/VarVal.js +8 -2
  130. package/dist/val/VarVal.js.map +1 -1
  131. package/dist/val/numcmp.d.ts +14 -0
  132. package/dist/val/numcmp.js +134 -0
  133. package/dist/val/numcmp.js.map +1 -0
  134. package/dist/val/numkind.d.ts +6 -0
  135. package/dist/val/numkind.js +224 -0
  136. package/dist/val/numkind.js.map +1 -0
  137. package/dist/val/valutil.d.ts +1 -0
  138. package/dist/val/valutil.js +35 -0
  139. package/dist/val/valutil.js.map +1 -1
  140. package/package.json +7 -5
  141. package/src/aontu.ts +26 -9
  142. package/src/cli.ts +48 -21
  143. package/src/ctx.ts +1 -1
  144. package/src/err.ts +3 -2
  145. package/src/exactjson.ts +254 -0
  146. package/src/hints.ts +213 -4
  147. package/src/keyorder.ts +73 -0
  148. package/src/lang.ts +303 -31
  149. package/src/lsp-server.ts +17 -15
  150. package/src/lsp.ts +37 -14
  151. package/src/site.ts +1 -1
  152. package/src/type.ts +1 -1
  153. package/src/unify.ts +52 -1
  154. package/src/utility.ts +3 -9
  155. package/src/val/BagVal.ts +9 -6
  156. package/src/val/BigDecimalVal.ts +117 -0
  157. package/src/val/BigIntegerVal.ts +110 -0
  158. package/src/val/BooleanVal.ts +1 -1
  159. package/src/val/CloseFuncVal.ts +1 -1
  160. package/src/val/ConjunctVal.ts +1 -1
  161. package/src/val/ConstraintVal.ts +561 -0
  162. package/src/val/CopyFuncVal.ts +1 -1
  163. package/src/val/Decimal.ts +385 -0
  164. package/src/val/DisjunctVal.ts +1 -37
  165. package/src/val/ExpectVal.ts +1 -1
  166. package/src/val/FeatureVal.ts +1 -1
  167. package/src/val/FuncBaseVal.ts +1 -1
  168. package/src/val/HideFuncVal.ts +1 -1
  169. package/src/val/IntegerVal.ts +81 -5
  170. package/src/val/JunctionVal.ts +1 -1
  171. package/src/val/KeyFuncVal.ts +36 -4
  172. package/src/val/ListVal.ts +3 -5
  173. package/src/val/LowerFuncVal.ts +22 -5
  174. package/src/val/MapVal.ts +13 -9
  175. package/src/val/MoveFuncVal.ts +27 -10
  176. package/src/val/NilVal.ts +13 -3
  177. package/src/val/NullVal.ts +1 -1
  178. package/src/val/NumberVal.ts +27 -4
  179. package/src/val/OpBaseVal.ts +10 -10
  180. package/src/val/OpenFuncVal.ts +1 -1
  181. package/src/val/PathFuncVal.ts +10 -2
  182. package/src/val/PlusOpVal.ts +168 -32
  183. package/src/val/PrefFuncVal.ts +1 -1
  184. package/src/val/PrefVal.ts +70 -8
  185. package/src/val/RefVal.ts +143 -11
  186. package/src/val/ScalarKindVal.ts +123 -12
  187. package/src/val/ScalarVal.ts +20 -3
  188. package/src/val/StringVal.ts +1 -1
  189. package/src/val/SuperFuncVal.ts +15 -2
  190. package/src/val/TopVal.ts +1 -1
  191. package/src/val/TypeFuncVal.ts +1 -1
  192. package/src/val/UpperFuncVal.ts +22 -5
  193. package/src/val/Val.ts +13 -8
  194. package/src/val/VarVal.ts +8 -2
  195. package/src/val/numcmp.ts +189 -0
  196. package/src/val/numkind.ts +256 -0
  197. package/src/val/valutil.ts +36 -0
@@ -13,6 +13,6 @@ class NullVal extends ScalarVal_1.ScalarVal {
13
13
  unify(peer, ctx) {
14
14
  return super.unify(peer, ctx);
15
15
  }
16
- }
16
+ } /* node:coverage ignore next 7 */
17
17
  exports.NullVal = NullVal;
18
18
  //# sourceMappingURL=NullVal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NullVal.js","sourceRoot":"","sources":["../../src/val/NullVal.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;AAYpD,2CAAuC;AACvC,mDAAsC;AAGtC,MAAM,OAAQ,SAAQ,qBAAS;IAG7B,YACE,IAAa,EACb,GAAkB;QAElB,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,oBAAI,EAAE,EAAE,GAAG,CAAC,CAAA;QAN3C,WAAM,GAAG,IAAI,CAAA;QAOX,IAAI,CAAC,GAAG,GAAG,IAAI,CAAA;IACjB,CAAC;IAGD,KAAK,CAAC,IAAS,EAAE,GAAiB;QAChC,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC/B,CAAC;CACF;QAIC,OAAO"}
1
+ {"version":3,"file":"NullVal.js","sourceRoot":"","sources":["../../src/val/NullVal.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;AAYpD,2CAAuC;AACvC,mDAAsC;AAGtC,MAAM,OAAQ,SAAQ,qBAAS;IAG7B,YACE,IAAa,EACb,GAAkB;QAElB,KAAK,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,oBAAI,EAAE,EAAE,GAAG,CAAC,CAAA;QAN3C,WAAM,GAAG,IAAI,CAAA;QAOX,IAAI,CAAC,GAAG,GAAG,IAAI,CAAA;IACjB,CAAC;IAGD,KAAK,CAAC,IAAS,EAAE,GAAiB;QAChC,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC/B,CAAC;CACF,CAAC,iCAAiC;QAIjC,OAAO"}
@@ -5,5 +5,6 @@ declare class NumberVal extends ScalarVal {
5
5
  isNumber: boolean;
6
6
  constructor(spec: ValSpec, ctx?: AontuContext);
7
7
  unify(peer: any, ctx: AontuContext): Val;
8
+ get canon(): any;
8
9
  }
9
10
  export { NumberVal, };
@@ -4,7 +4,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.NumberVal = void 0;
5
5
  const err_1 = require("../err");
6
6
  const ScalarVal_1 = require("./ScalarVal");
7
+ const ScalarKindVal_1 = require("./ScalarKindVal");
7
8
  const utility_1 = require("../utility");
9
+ // The IEEE-754 binary64 leaf of the number tower. Its KIND is Float (the
10
+ // keyword `float`), not the `number` supertype: `number` names the family
11
+ // of numeric leaves and never tags a concrete value. The class name is
12
+ // historical -- `number` used to name this leaf.
8
13
  class NumberVal extends ScalarVal_1.ScalarVal {
9
14
  constructor(spec, ctx) {
10
15
  // Number.isFinite (not the coercing global isNaN, which lets null/''
@@ -13,20 +18,20 @@ class NumberVal extends ScalarVal_1.ScalarVal {
13
18
  // TODO: use Nil?
14
19
  throw new err_1.AontuError('not-number: ' + spec.peg);
15
20
  }
16
- super({ ...spec, kind: Number }, ctx);
21
+ super({ ...spec, kind: ScalarKindVal_1.Float }, ctx);
17
22
  this.isNumber = true;
18
23
  }
19
24
  unify(peer, ctx) {
20
25
  const te = ctx.explain && (0, utility_1.explainOpen)(ctx, ctx.explain, 'Number', this, peer);
21
26
  let out = this;
22
27
  if (null != peer) {
23
- if (peer.isScalarKind) {
28
+ if (peer.isScalarKind || peer.isConstraint) {
24
29
  out = peer.unify(this, ctx);
25
30
  }
26
31
  else if (peer.isScalar &&
27
32
  peer.kind === this.kind &&
28
33
  peer.peg === this.peg) {
29
- // Same kind (both Number) and equal value: integer/float no
34
+ // Same kind (both Float) and equal value: integer/float no
30
35
  // longer cross-unify, so peer is necessarily a NumberVal here.
31
36
  out = this;
32
37
  }
@@ -44,6 +49,22 @@ class NumberVal extends ScalarVal_1.ScalarVal {
44
49
  (0, utility_1.explainClose)(te, out);
45
50
  return out;
46
51
  }
47
- }
52
+ // Canon must round-trip kind: reparsing the canon of a float-kind
53
+ // value has to yield a float-kind value again. A rendering with no
54
+ // '.' and no exponent (1 -> "1") would reparse as an integer, so it
55
+ // gains a ".0" suffix. Renderings that already carry a fraction, an
56
+ // exponent, or are NaN/Infinity are left alone.
57
+ //
58
+ // This is the CANON path only. String coercion inside `+` keeps plain
59
+ // JS parity ("a"+1.0 is "a1"), so it must not pick up the suffix.
60
+ get canon() {
61
+ const s = super.canon;
62
+ return (s.includes('.') ||
63
+ s.includes('e') ||
64
+ s.includes('E') ||
65
+ s.includes('N') ||
66
+ s.includes('I')) ? s : s + '.0';
67
+ }
68
+ } /* node:coverage ignore next 6 */
48
69
  exports.NumberVal = NumberVal;
49
70
  //# sourceMappingURL=NumberVal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NumberVal.js","sourceRoot":"","sources":["../../src/val/NumberVal.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;AAWzD,gCAA+C;AAE/C,2CAAuC;AAEvC,wCAGmB;AAInB,MAAM,SAAU,SAAQ,qBAAS;IAG/B,YACE,IAAa,EACb,GAAkB;QAElB,qEAAqE;QACrE,iEAAiE;QACjE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,iBAAiB;YACjB,MAAM,IAAI,gBAAU,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;QACjD,CAAC;QAED,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAA;QAbvC,aAAQ,GAAG,IAAI,CAAA;IAcf,CAAC;IAGD,KAAK,CAAC,IAAS,EAAE,GAAiB;QAChC,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,IAAI,IAAA,qBAAW,EAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;QAE7E,IAAI,GAAG,GAAQ,IAAI,CAAA;QAEnB,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;YAC7B,CAAC;iBACI,IACH,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;gBACvB,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,EACrB,CAAC;gBACD,4DAA4D;gBAC5D,+DAA+D;gBAC/D,GAAG,GAAG,IAAI,CAAA;YACZ,CAAC;iBACI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACpB,GAAG,GAAG,IAAI,CAAA;YACZ,CAAC;iBACI,CAAC;gBACJ,GAAG,GAAG,IAAA,gBAAU,EAAC,GAAG,EAAE,SAAS;oBAC7B,CAAE,IAAY,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;YACtE,CAAC;QACH,CAAC;aACI,CAAC;YACJ,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAC9B,CAAC;QAED,IAAA,sBAAY,EAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QAErB,OAAO,GAAG,CAAA;IACZ,CAAC;CACF;QAIC,SAAS"}
1
+ {"version":3,"file":"NumberVal.js","sourceRoot":"","sources":["../../src/val/NumberVal.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;AAWzD,gCAA+C;AAE/C,2CAAuC;AACvC,mDAAuC;AAEvC,wCAGmB;AAInB,yEAAyE;AACzE,0EAA0E;AAC1E,uEAAuE;AACvE,iDAAiD;AACjD,MAAM,SAAU,SAAQ,qBAAS;IAG/B,YACE,IAAa,EACb,GAAkB;QAElB,qEAAqE;QACrE,iEAAiE;QACjE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/B,iBAAiB;YACjB,MAAM,IAAI,gBAAU,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;QACjD,CAAC;QAED,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,qBAAK,EAAE,EAAE,GAAG,CAAC,CAAA;QAbtC,aAAQ,GAAG,IAAI,CAAA;IAcf,CAAC;IAGD,KAAK,CAAC,IAAS,EAAE,GAAiB;QAChC,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,IAAI,IAAA,qBAAW,EAAC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;QAE7E,IAAI,GAAG,GAAQ,IAAI,CAAA;QAEnB,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,YAAY,IAAK,IAAY,CAAC,YAAY,EAAE,CAAC;gBACpD,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;YAC7B,CAAC;iBACI,IACH,IAAI,CAAC,QAAQ;gBACb,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;gBACvB,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,EACrB,CAAC;gBACD,2DAA2D;gBAC3D,+DAA+D;gBAC/D,GAAG,GAAG,IAAI,CAAA;YACZ,CAAC;iBACI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACpB,GAAG,GAAG,IAAI,CAAA;YACZ,CAAC;iBACI,CAAC;gBACJ,GAAG,GAAG,IAAA,gBAAU,EAAC,GAAG,EAAE,SAAS;oBAC7B,CAAE,IAAY,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;YACtE,CAAC;QACH,CAAC;aACI,CAAC;YACJ,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAC9B,CAAC;QAED,IAAA,sBAAY,EAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QAErB,OAAO,GAAG,CAAA;IACZ,CAAC;IAGD,kEAAkE;IAClE,mEAAmE;IACnE,oEAAoE;IACpE,oEAAoE;IACpE,gDAAgD;IAChD,EAAE;IACF,sEAAsE;IACtE,kEAAkE;IAClE,IAAI,KAAK;QACP,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAA;QACrB,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YACrB,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YACf,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YACf,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;YACf,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IACnC,CAAC;CACF,CAAC,iCAAiC;QAIjC,SAAS"}
@@ -29,7 +29,11 @@ class OpBaseVal extends FeatureVal_1.FeatureVal {
29
29
  }
30
30
  unify(peer, ctx) {
31
31
  const te = ctx.explain && (0, utility_1.explainOpen)(ctx, ctx.explain, 'Op:' + this.opname(), this, peer);
32
- let out = this;
32
+ // Declared without an initial value: every arm below assigns it, and
33
+ // seeding it with `this` made the two arms that stand the op read as
34
+ // redundant self-assignments. The arms themselves stay as they are —
35
+ // they mirror the dispatch switch in go/op.go arm for arm (ADR-001).
36
+ let out;
33
37
  if (this.id == peer.id) {
34
38
  return this;
35
39
  }
@@ -44,13 +48,11 @@ class OpBaseVal extends FeatureVal_1.FeatureVal {
44
48
  }
45
49
  // console.log('OPVAL', this.id, this.opname(), pegdone, newpeg.map(p => p.canon))
46
50
  if (pegdone) {
47
- let result = null == ctx ? this : this.operate(ctx, newpeg);
48
- result = result || this;
49
- if (null == result && this.canon === peer.canon) {
50
- out = this;
51
- }
51
+ // `|| this` makes result truthy, so an op that cannot compute yet
52
+ // takes the OpBaseVal arm below rather than a separate null arm.
53
+ let result = this.operate(ctx, newpeg) || this;
52
54
  // TODO: should be result.isOp
53
- else if (result instanceof OpBaseVal) {
55
+ if (result instanceof OpBaseVal) {
54
56
  if (peer.isTop) {
55
57
  out = this;
56
58
  }
@@ -147,6 +149,6 @@ class OpBaseVal extends FeatureVal_1.FeatureVal {
147
149
  }
148
150
  return undefined;
149
151
  }
150
- }
152
+ } /* node:coverage ignore next 6 */
151
153
  exports.OpBaseVal = OpBaseVal;
152
154
  //# sourceMappingURL=OpBaseVal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OpBaseVal.js","sourceRoot":"","sources":["../../src/val/OpBaseVal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OpBaseVal.js","sourceRoot":"","sources":["../../src/val/OpBaseVal.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,6 @@ class OpenFuncVal extends FuncBaseVal_1.FuncBaseVal {
25
25
  }
26
26
  return argval;
27
27
  }
28
- }
28
+ } /* node:coverage ignore next 6 */
29
29
  exports.OpenFuncVal = OpenFuncVal;
30
30
  //# sourceMappingURL=OpenFuncVal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OpenFuncVal.js","sourceRoot":"","sources":["../../src/val/OpenFuncVal.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;AAYzD,gCAAmC;AAGnC,+CAA2C;AAK3C,MAAM,WAAY,SAAQ,yBAAW;IAGnC,YACE,IAAa,EACb,GAAkB;QAElB,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QANlB,eAAU,GAAG,IAAI,CAAA;IAOjB,CAAC;IAGD,IAAI,CAAC,IAAkB,EAAE,IAAa;QACpC,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAED,QAAQ;QACN,OAAO,MAAM,CAAA;IACf,CAAC;IAGD,OAAO,CAAC,GAA6B,EAAE,IAAW;QAChD,MAAM,MAAM,GAAQ,IAAI,CAAC,CAAC,CAAC,CAAA;QAE3B,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YACnB,OAAO,IAAA,gBAAU,EAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;QAClE,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACjC,MAAiB,CAAC,MAAM,GAAG,KAAK,CAAA;QACnC,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CAEF;QAIC,WAAW"}
1
+ {"version":3,"file":"OpenFuncVal.js","sourceRoot":"","sources":["../../src/val/OpenFuncVal.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;AAYzD,gCAAmC;AAGnC,+CAA2C;AAK3C,MAAM,WAAY,SAAQ,yBAAW;IAGnC,YACE,IAAa,EACb,GAAkB;QAElB,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QANlB,eAAU,GAAG,IAAI,CAAA;IAOjB,CAAC;IAGD,IAAI,CAAC,IAAkB,EAAE,IAAa;QACpC,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAED,QAAQ;QACN,OAAO,MAAM,CAAA;IACf,CAAC;IAGD,OAAO,CAAC,GAA6B,EAAE,IAAW;QAChD,MAAM,MAAM,GAAQ,IAAI,CAAC,CAAC,CAAC,CAAA;QAE3B,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YACnB,OAAO,IAAA,gBAAU,EAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;QAClE,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACjC,MAAiB,CAAC,MAAM,GAAG,KAAK,CAAA;QACnC,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CAEF,CAAC,iCAAiC;QAIjC,WAAW"}
@@ -22,7 +22,15 @@ class PathFuncVal extends FuncBaseVal_1.FuncBaseVal {
22
22
  prepare(ctx, args) {
23
23
  let arg = args[0];
24
24
  if (0 === this.prepared) {
25
- if (arg.isScalar) {
25
+ // A missing argument (`path()`) must produce an invalid-arg error
26
+ // value, as the Go port does -- reading .isScalar off nothing threw
27
+ // a TypeError that the unifier could only report as an opaque
28
+ // internal error. Same discipline breach, and same fix, as the one
29
+ // UpperFuncVal records; path() was missed in that sweep.
30
+ if (null == arg) {
31
+ arg = (0, err_1.makeNilErr)(ctx, 'invalid-arg', this);
32
+ }
33
+ else if (arg.isScalar) {
26
34
  arg = this.place(new RefVal_1.RefVal({ peg: [arg], absolute: false }));
27
35
  }
28
36
  else if (!arg.isRef) {
@@ -37,6 +45,6 @@ class PathFuncVal extends FuncBaseVal_1.FuncBaseVal {
37
45
  let out = args[0] ?? (0, err_1.makeNilErr)(ctx, 'arg', this);
38
46
  return out;
39
47
  }
40
- }
48
+ } /* node:coverage ignore next 6 */
41
49
  exports.PathFuncVal = PathFuncVal;
42
50
  //# sourceMappingURL=PathFuncVal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PathFuncVal.js","sourceRoot":"","sources":["../../src/val/PathFuncVal.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;AAYzD,gCAAmC;AAGnC,0CAAsC;AACtC,+CAA2C;AAG3C,MAAM,WAAY,SAAQ,yBAAW;IAKnC,YACE,IAAa,EACb,GAAkB;QAElB,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QARlB,eAAU,GAAG,IAAI,CAAA;QAEjB,aAAQ,GAAG,CAAC,CAAA;IAOZ,CAAC;IAGD,IAAI,CAAC,IAAkB,EAAE,IAAa;QACpC,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;QACtC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QACjC,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,QAAQ;QACN,OAAO,MAAM,CAAA;IACf,CAAC;IAGD,OAAO,CAAC,GAAiB,EAAE,IAAW;QACpC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAEjB,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACjB,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,eAAM,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;YAC/D,CAAC;iBACI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;gBACpB,GAAG,GAAG,IAAA,gBAAU,EAAC,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC;QAED,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAA;QAEb,IAAI,CAAC,QAAQ,EAAE,CAAA;QAEf,OAAO,IAAI,CAAA;IACb,CAAC;IAGD,OAAO,CAAC,GAAiB,EAAE,IAAW;QACpC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAA,gBAAU,EAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;QAEjD,OAAO,GAAG,CAAA;IACZ,CAAC;CAEF;QAIC,WAAW"}
1
+ {"version":3,"file":"PathFuncVal.js","sourceRoot":"","sources":["../../src/val/PathFuncVal.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;AAYzD,gCAAmC;AAGnC,0CAAsC;AACtC,+CAA2C;AAG3C,MAAM,WAAY,SAAQ,yBAAW;IAKnC,YACE,IAAa,EACb,GAAkB;QAElB,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QARlB,eAAU,GAAG,IAAI,CAAA;QAEjB,aAAQ,GAAG,CAAC,CAAA;IAOZ,CAAC;IAGD,IAAI,CAAC,IAAkB,EAAE,IAAa;QACpC,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;QACtC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QACjC,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,QAAQ;QACN,OAAO,MAAM,CAAA;IACf,CAAC;IAGD,OAAO,CAAC,GAAiB,EAAE,IAAW;QACpC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;QAEjB,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,kEAAkE;YAClE,oEAAoE;YACpE,8DAA8D;YAC9D,mEAAmE;YACnE,yDAAyD;YACzD,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;gBAChB,GAAG,GAAG,IAAA,gBAAU,EAAC,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,CAAA;YAC5C,CAAC;iBACI,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;gBACtB,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,eAAM,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;YAC/D,CAAC;iBACI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;gBACpB,GAAG,GAAG,IAAA,gBAAU,EAAC,GAAG,EAAE,aAAa,EAAE,IAAI,CAAC,CAAA;YAC5C,CAAC;QACH,CAAC;QAED,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAA;QAEb,IAAI,CAAC,QAAQ,EAAE,CAAA;QAEf,OAAO,IAAI,CAAA;IACb,CAAC;IAGD,OAAO,CAAC,GAAiB,EAAE,IAAW;QACpC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAA,gBAAU,EAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;QAEjD,OAAO,GAAG,CAAA;IACZ,CAAC;CAEF,CAAC,iCAAiC;QAIjC,WAAW"}
@@ -4,13 +4,15 @@ import { IntegerVal } from '../val/IntegerVal';
4
4
  import { NumberVal } from '../val/NumberVal';
5
5
  import { StringVal } from '../val/StringVal';
6
6
  import { BooleanVal } from '../val/BooleanVal';
7
+ import { BigIntegerVal } from '../val/BigIntegerVal';
8
+ import { BigDecimalVal } from '../val/BigDecimalVal';
7
9
  import { OpBaseVal } from './OpBaseVal';
8
10
  declare class PlusOpVal extends OpBaseVal {
9
11
  isPlusOp: boolean;
10
12
  constructor(spec: ValSpec, ctx?: AontuContext);
11
13
  make(_ctx: AontuContext, spec: ValSpec): Val;
12
14
  opname(): string;
13
- operate(_ctx: AontuContext, args: Val[]): BooleanVal | IntegerVal | NumberVal | StringVal | undefined;
15
+ operate(ctx: AontuContext, args: Val[]): BigDecimalVal | BigIntegerVal | BooleanVal | IntegerVal | import("./NilVal").NilVal | NumberVal | StringVal | undefined;
14
16
  get canon(): string;
15
17
  }
16
18
  export { PlusOpVal, };
@@ -2,11 +2,39 @@
2
2
  /* Copyright (c) 2024-2025 Richard Rodger, MIT License */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.PlusOpVal = void 0;
5
+ const err_1 = require("../err");
5
6
  const IntegerVal_1 = require("../val/IntegerVal");
6
7
  const NumberVal_1 = require("../val/NumberVal");
7
8
  const StringVal_1 = require("../val/StringVal");
8
9
  const BooleanVal_1 = require("../val/BooleanVal");
10
+ const BigIntegerVal_1 = require("../val/BigIntegerVal");
11
+ const BigDecimalVal_1 = require("../val/BigDecimalVal");
12
+ const Decimal_1 = require("../val/Decimal");
13
+ const numkind_1 = require("../val/numkind");
14
+ const numkind_2 = require("../val/numkind");
9
15
  const OpBaseVal_1 = require("./OpBaseVal");
16
+ // D6 -- THE EXACT LADDER: integer < biginteger < bigdecimal. A mixed
17
+ // operation between exact leaves promotes to the WIDEST operand and is
18
+ // computed exactly, so `1 + 0d2` is a biginteger and `1 + 0d0.5` a
19
+ // bigdecimal.
20
+ //
21
+ // `float` is deliberately absent: it is OFF the ladder, keeping only its
22
+ // classic contagion against `integer`. Its absence from this table is
23
+ // what makes the float-with-big pairs fall through to the hard error
24
+ // below rather than promoting.
25
+ //
26
+ // Results NEVER demote: `0d5 + -0d2` stays a biginteger even though 3
27
+ // would fit an int64. Demotion would make the result kind depend on the
28
+ // values rather than on the operand kinds, and a document could then
29
+ // change leaf under a value edit.
30
+ const EXACT_RANK = {
31
+ integer: 1,
32
+ biginteger: 2,
33
+ bigdecimal: 3,
34
+ };
35
+ function isBig(k) {
36
+ return 'biginteger' === k || 'bigdecimal' === k;
37
+ }
10
38
  class PlusOpVal extends OpBaseVal_1.OpBaseVal {
11
39
  constructor(spec, ctx) {
12
40
  super(spec, ctx);
@@ -18,57 +46,140 @@ class PlusOpVal extends OpBaseVal_1.OpBaseVal {
18
46
  opname() {
19
47
  return 'plus';
20
48
  }
21
- operate(_ctx, args) {
49
+ operate(ctx, args) {
22
50
  // Only concrete scalar operands are valid: anything else (kinds,
23
51
  // maps, lists, null, top, funcs) must not coerce — the JS `+` would
24
52
  // leak internals like "[object Object]" into output. A non-scalar
25
53
  // operand leaves the op unresolved, which generate() reports.
26
- const prim = (v) => {
27
- // A pref operand contributes its preferred value (`pref(1)+2`).
54
+ const operand = (v) => {
55
+ // A pref operand contributes its preferred value (`pref(1)+2`),
56
+ // and therefore that value's kind too.
28
57
  while (v?.isPref) {
29
58
  v = v.peg;
30
59
  }
31
- const p = v?.isVal && v.isScalar ? v.peg : undefined;
32
- const t = typeof p;
33
- return 'string' === t || 'number' === t || 'boolean' === t ? p : undefined;
60
+ return v;
61
+ };
62
+ // The operand's LEAF, not the JavaScript type of its peg: integer
63
+ // and float share `number`, while the exact leaves are told apart
64
+ // from each other and from everything else by their own flags. The
65
+ // whole ladder below dispatches on this and never on `typeof`.
66
+ const opkind = (v) => {
67
+ if (!(v?.isVal && v.isScalar)) {
68
+ return undefined;
69
+ }
70
+ if (v.isBigInteger) {
71
+ return 'biginteger';
72
+ }
73
+ if (v.isBigDecimal) {
74
+ return 'bigdecimal';
75
+ }
76
+ if (v.isInteger) {
77
+ return 'integer';
78
+ }
79
+ const t = typeof v.peg;
80
+ return 'number' === t ? 'float' :
81
+ 'string' === t ? 'string' :
82
+ 'boolean' === t ? 'boolean' :
83
+ undefined;
34
84
  };
35
- let a = prim(args[0]);
36
- let b = prim(args[1]);
37
- if (undefined === a || undefined === b) {
85
+ const av = operand(args[0]);
86
+ const bv = operand(args[1]);
87
+ const ak = opkind(av);
88
+ const bk = opkind(bv);
89
+ if (undefined === ak || undefined === bk) {
38
90
  return undefined;
39
91
  }
40
- const at = typeof a;
41
- const bt = typeof b;
42
- let peg = undefined;
43
- if ('boolean' === at && 'boolean' === bt) {
44
- peg = a || b;
92
+ if ('boolean' === ak && 'boolean' === bk) {
93
+ return new BooleanVal_1.BooleanVal({ peg: av.peg || bv.peg });
45
94
  }
46
- else if ('string' === at || 'string' === bt) {
47
- peg = String(a) + String(b);
95
+ // STRING CONCATENATION RENDERS DIGITS, NOT KIND DECORATION. The `0d`
96
+ // marker is canon's way of naming the leaf and never belongs in a
97
+ // string, exactly as R4's `.0` float suffix does not ("q" + 0d0.1 is
98
+ // "q0.1", and "q" + 1.0 is "q1"). Decimal.toString() is that
99
+ // marker-free rendering, which is why canon() wraps it rather than
100
+ // the other way round.
101
+ if ('string' === ak || 'string' === bk) {
102
+ return new StringVal_1.StringVal({ peg: digits(av, ak) + digits(bv, bk) });
48
103
  }
49
- else if ('boolean' === at || 'boolean' === bt) {
50
- // boolean mixed with a number does not coerce (no JS 0/1).
104
+ // A boolean mixed with a number does not coerce (no JS 0/1).
105
+ if ('boolean' === ak || 'boolean' === bk) {
51
106
  return undefined;
52
107
  }
53
- else {
54
- peg = a + b;
108
+ // FLOAT IS OFF THE EXACT LADDER, and mixing it with either big leaf
109
+ // is a hard error in BOTH operand orders: a big type never silently
110
+ // becomes a binary float. Promotion the other way is no better —
111
+ // binary64 cannot hold every exact value, so either direction throws
112
+ // away exactness the document explicitly asked for by writing `0d`.
113
+ // The error names both leaves in operand order.
114
+ if (('float' === ak && isBig(bk)) || (isBig(ak) && 'float' === bk)) {
115
+ return (0, err_1.makeNilErr)(ctx, 'exact_float_mix', this, undefined, 'add', { left: ak, right: bk });
55
116
  }
56
- let pegtype = typeof peg;
57
- let out = undefined;
58
- if ('string' === pegtype) {
59
- out = new StringVal_1.StringVal({ peg });
117
+ // Float with float or integer: unchanged R5 contagion, binary64
118
+ // addition, float result (`1 + 2.0` is `3.0`).
119
+ if ('float' === ak || 'float' === bk) {
120
+ return new NumberVal_1.NumberVal({ peg: av.peg + bv.peg });
60
121
  }
61
- else if ('boolean' === pegtype) {
62
- out = new BooleanVal_1.BooleanVal({ peg });
122
+ // Both operands are on the exact ladder: promote to the widest.
123
+ const rank = EXACT_RANK[bk] < EXACT_RANK[ak] ? EXACT_RANK[ak] : EXACT_RANK[bk];
124
+ if (EXACT_RANK.bigdecimal === rank) {
125
+ // Exact scaled-decimal addition. The budget applies to results as
126
+ // well as literals (D6): an exact sum too wide to hold is refused,
127
+ // never rounded to fit.
128
+ const sum = decimal(av, ak).add(decimal(bv, bk));
129
+ return (0, Decimal_1.decimalOverBudget)(sum) ?
130
+ (0, err_1.makeNilErr)(ctx, 'decimal_budget', this, undefined, 'add') :
131
+ new BigDecimalVal_1.BigDecimalVal({ peg: sum });
63
132
  }
64
- else if ('number' === pegtype) {
65
- out = Number.isInteger(peg) ? new IntegerVal_1.IntegerVal({ peg }) : new NumberVal_1.NumberVal({ peg });
133
+ // integer and biginteger both add as exact integers.
134
+ const sum = integer(av, ak) + integer(bv, bk);
135
+ if (EXACT_RANK.biginteger === rank) {
136
+ // Unbounded and exact: nothing to check, and no demotion to
137
+ // `integer` however small the result.
138
+ return new BigIntegerVal_1.BigIntegerVal({ peg: sum });
66
139
  }
67
- return out;
140
+ // INTEGER + INTEGER IS COMPUTED EXACTLY, then offered to the integer
141
+ // leaf under the same storage contract R1 applies to a literal.
142
+ // Adding through float64 (as this did) silently rounded sums of
143
+ // exact operands — 4503599627370496 + 4503599627370497 came back as
144
+ // …992 — which is precisely the corruption the tower refuses. The
145
+ // sum that will not fit is an error pointing at `0d`, not a rounded
146
+ // answer.
147
+ return (0, numkind_2.isIntegerStorable)(sum) ?
148
+ new IntegerVal_1.IntegerVal({ peg: Number(sum) }) :
149
+ (0, err_1.makeNilErr)(ctx, 'inexact_integer_sum', this, undefined, 'add', { sum: sum.toString() });
68
150
  }
69
151
  get canon() {
70
152
  return this.peg[0]?.canon + '+' + this.peg[1]?.canon;
71
153
  }
72
154
  }
73
155
  exports.PlusOpVal = PlusOpVal;
156
+ // The digits of an operand for string concatenation: no `0d` marker, no
157
+ // R4 `.0` suffix — the plain rendering of the number, in every leaf.
158
+ //
159
+ // INTEGER KIND GOES THROUGH integerDigits. This was the THIRD site to
160
+ // render an integer-kind peg with JavaScript's shortest round-tripping
161
+ // form, so `"" + 1152921504606846976` produced "1152921504606847000" — a
162
+ // different integer — where Go produced the exact digits. See #21 and
163
+ // integerDigits, which exists so the set of such sites is greppable.
164
+ //
165
+ // The other leaves are already exact or already correct: a bigint
166
+ // stringifies to its exact digits, a Decimal renders its own, and a FLOAT
167
+ // must keep String() because its shortest form is the right answer and is
168
+ // what Go prints too (`"a" + 1.0` is "a1").
169
+ function digits(v, k) {
170
+ return 'bigdecimal' === k ? v.peg.toString() :
171
+ 'integer' === k ? (0, numkind_1.integerDigits)(v.peg) :
172
+ String(v.peg);
173
+ }
174
+ // An exact-ladder operand as an exact integer. Only reached for the two
175
+ // integral leaves; an `integer` peg is integral by construction, so
176
+ // BigInt() is exact.
177
+ function integer(v, k) {
178
+ return 'biginteger' === k ? v.peg : BigInt(v.peg);
179
+ }
180
+ // An exact-ladder operand as a Decimal, for the promotion to bigdecimal.
181
+ // Scale 0 normalises to the one decimal place the leaf keeps.
182
+ function decimal(v, k) {
183
+ return 'bigdecimal' === k ? v.peg : new Decimal_1.Decimal(integer(v, k), 0);
184
+ } /* node:coverage ignore next 6 */
74
185
  //# sourceMappingURL=PlusOpVal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlusOpVal.js","sourceRoot":"","sources":["../../src/val/PlusOpVal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlusOpVal.js","sourceRoot":"","sources":["../../src/val/PlusOpVal.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,6 @@ class PrefFuncVal extends FuncBaseVal_1.FuncBaseVal {
34
34
  }
35
35
  return out;
36
36
  }
37
- }
37
+ } /* node:coverage ignore next 6 */
38
38
  exports.PrefFuncVal = PrefFuncVal;
39
39
  //# sourceMappingURL=PrefFuncVal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PrefFuncVal.js","sourceRoot":"","sources":["../../src/val/PrefFuncVal.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;AAYzD,gCAAmC;AAEnC,wCAEmB;AAGnB,4CAAwC;AACxC,+CAA2C;AAG3C,MAAM,WAAY,SAAQ,yBAAW;IAGnC,YACE,IAAa,EACb,GAAkB;QAElB,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QANlB,eAAU,GAAG,IAAI,CAAA;IAOjB,CAAC;IAGD,IAAI,CAAC,IAAkB,EAAE,IAAa;QACpC,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAED,QAAQ;QACN,OAAO,MAAM,CAAA;IACf,CAAC;IAGD,OAAO,CAAC,GAAiB,EAAE,IAAW;QACpC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAA,gBAAU,EAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;QAEjD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACf,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAEpB,oCAAoC;YACpC,GAAG,GAAG,IAAA,cAAI,EAAC,GAAG,EAAE,CAAC,IAAiC,EAAE,GAAQ,EAAE,EAAE;gBAC9D,IAAI,IAAI,GAAG,GAAG,CAAA;gBACd,kEAAkE;gBAClE,IACE,GAAG,CAAC,QAAQ;uBACT,GAAG,CAAC,MAAM,EACb,CAAC;oBACD,IAAI,GAAG,IAAI,iBAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;gBACvC,CAAC;gBAED,OAAO,IAAI,CAAA;YACb,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,GAAG,CAAA;IACZ,CAAC;CAEF;QAIC,WAAW"}
1
+ {"version":3,"file":"PrefFuncVal.js","sourceRoot":"","sources":["../../src/val/PrefFuncVal.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;AAYzD,gCAAmC;AAEnC,wCAEmB;AAGnB,4CAAwC;AACxC,+CAA2C;AAG3C,MAAM,WAAY,SAAQ,yBAAW;IAGnC,YACE,IAAa,EACb,GAAkB;QAElB,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QANlB,eAAU,GAAG,IAAI,CAAA;IAOjB,CAAC;IAGD,IAAI,CAAC,IAAkB,EAAE,IAAa;QACpC,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAED,QAAQ;QACN,OAAO,MAAM,CAAA;IACf,CAAC;IAGD,OAAO,CAAC,GAAiB,EAAE,IAAW;QACpC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAA,gBAAU,EAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;QAEjD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACf,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAEpB,oCAAoC;YACpC,GAAG,GAAG,IAAA,cAAI,EAAC,GAAG,EAAE,CAAC,IAAiC,EAAE,GAAQ,EAAE,EAAE;gBAC9D,IAAI,IAAI,GAAG,GAAG,CAAA;gBACd,kEAAkE;gBAClE,IACE,GAAG,CAAC,QAAQ;uBACT,GAAG,CAAC,MAAM,EACb,CAAC;oBACD,IAAI,GAAG,IAAI,iBAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;gBACvC,CAAC;gBAED,OAAO,IAAI,CAAA;YACb,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,OAAO,GAAG,CAAA;IACZ,CAAC;CAEF,CAAC,iCAAiC;QAIjC,WAAW"}
@@ -6,8 +6,10 @@ declare class PrefVal extends FeatureVal {
6
6
  isGenable: boolean;
7
7
  cjo: number;
8
8
  superpeg: Val;
9
+ familypeg: Val;
9
10
  rank: number;
10
11
  constructor(spec: ValSpec, ctx?: AontuContext);
12
+ private resuper;
11
13
  unify(peer: Val, ctx: AontuContext): Val;
12
14
  same(peer: Val): boolean;
13
15
  clone(ctx: AontuContext, spec?: ValSpec): Val;
@@ -8,6 +8,7 @@ const err_1 = require("../err");
8
8
  const utility_1 = require("../utility");
9
9
  const top_1 = require("./top");
10
10
  const FeatureVal_1 = require("./FeatureVal");
11
+ const ScalarKindVal_1 = require("./ScalarKindVal");
11
12
  class PrefVal extends FeatureVal_1.FeatureVal {
12
13
  constructor(spec, ctx) {
13
14
  super(spec, ctx);
@@ -20,22 +21,53 @@ class PrefVal extends FeatureVal_1.FeatureVal {
20
21
  if (spec.peg instanceof PrefVal) {
21
22
  this.rank = 1 + spec.peg.rank;
22
23
  }
23
- this.superpeg = this.peg.superior();
24
+ this.resuper();
24
25
  // console.log('PVC', this.peg.canon, this.superpeg.canon)
25
26
  }
27
+ // Recompute the type yardstick and the override gate from the current
28
+ // peg. Called again whenever the peg resolves (e.g. a ref).
29
+ resuper() {
30
+ const peg = this.peg;
31
+ // A preference whose peg is ITSELF a kind (`*integer`) constrains
32
+ // nothing: there is no type-of-a-type in this lattice, so any peer
33
+ // wins. (Pinned by test/spec/var.tsv:var-pref-kind-narrow. Before
34
+ // the tower this fell out of a ScalarKindVal's superior being top;
35
+ // now that a leaf kind lifts to `number`, it has to be said.)
36
+ if (true === peg.isScalarKind) {
37
+ this.superpeg = (0, top_1.top)();
38
+ this.familypeg = this.superpeg;
39
+ return;
40
+ }
41
+ const sup = peg.superior();
42
+ this.superpeg = sup;
43
+ // No optional chain: superior() is contractually non-null (every
44
+ // Val returns one, a NilVal returning itself), so guarding against
45
+ // nullish here would claim a possibility the type does not have.
46
+ if (true === sup.isScalarKind) {
47
+ const family = (0, ScalarKindVal_1.kindFamily)(sup.peg);
48
+ // The gate stands in for the preferred value in any conflict it
49
+ // reports, so it must carry the same site and path as the type it
50
+ // widens -- otherwise NilVal.make picks a different primary and
51
+ // the error moves to the wrong path.
52
+ this.familypeg = family === sup.peg ?
53
+ sup : sup.place(new ScalarKindVal_1.ScalarKindVal({ peg: family, path: sup.path }));
54
+ }
55
+ else {
56
+ this.familypeg = sup;
57
+ }
58
+ }
26
59
  // PrefVal unify always returns a PrefVal
27
60
  // PrefVals can only be removed by becoming Nil in a Disjunct
28
61
  unify(peer, ctx) {
29
62
  peer = peer ?? (0, top_1.top)();
30
63
  const te = ctx.explain && (0, utility_1.explainOpen)(ctx, ctx.explain, 'Pref', this, peer);
31
- let done = true;
32
64
  let out = this;
33
65
  let why = '';
34
66
  if (!this.peg.done) {
35
67
  const resolved = (0, unify_1.unite)(te ? ctx.clone({ explain: (0, utility_1.ec)(te, 'RES') }) : ctx, this.peg, (0, top_1.top)(), 'pref/resolve');
36
68
  // console.log('PREF-RESOLVED', this.peg.canon, '->', resolved)
37
69
  this.peg = resolved;
38
- this.superpeg = this.peg.superior();
70
+ this.resuper();
39
71
  }
40
72
  if (peer instanceof PrefVal) {
41
73
  why += 'pref-';
@@ -69,8 +101,11 @@ class PrefVal extends FeatureVal_1.FeatureVal {
69
101
  }
70
102
  else if (!peer.isTop) {
71
103
  why += 'super-';
72
- out = (0, unify_1.unite)(te ? ctx.clone({ explain: (0, utility_1.ec)(te, 'SUPER') }) : ctx, this.superpeg, peer, 'pref-super/' + this.id);
73
- if (out.same(this.superpeg)) {
104
+ out = (0, unify_1.unite)(te ? ctx.clone({ explain: (0, utility_1.ec)(te, 'SUPER') }) : ctx, this.familypeg, peer, 'pref-super/' + this.id);
105
+ // The peer added nothing beyond a type the preferred value already
106
+ // satisfies (`*1 & integer`, `*1 & number`), so the preference
107
+ // stands. Anything else is a concrete override and wins.
108
+ if (out.same(this.superpeg) || out.same(this.familypeg)) {
74
109
  out = this.peg;
75
110
  why += 'same';
76
111
  }
@@ -79,7 +114,9 @@ class PrefVal extends FeatureVal_1.FeatureVal {
79
114
  else {
80
115
  why += 'none';
81
116
  }
82
- out.dc = done ? type_1.DONE : this.dc + 1;
117
+ // Every pref result is DONE, including a stuck conjunct from the
118
+ // superior-unify (mirrored by PrefVal.Unify in go/pref.go).
119
+ out.dc = type_1.DONE;
83
120
  // console.log('PREFVAL-OUT', why, this.canon, peer.canon, '->', out.canon, out.done)
84
121
  ctx.explain && (0, utility_1.explainClose)(te, out);
85
122
  return out;
@@ -110,6 +147,6 @@ class PrefVal extends FeatureVal_1.FeatureVal {
110
147
  }
111
148
  return val.gen(ctx);
112
149
  }
113
- }
150
+ } /* node:coverage ignore next 6 */
114
151
  exports.PrefVal = PrefVal;
115
152
  //# sourceMappingURL=PrefVal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PrefVal.js","sourceRoot":"","sources":["../../src/val/PrefVal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PrefVal.js","sourceRoot":"","sources":["../../src/val/PrefVal.ts"],"names":[],"mappings":"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"}