aontu 0.29.0 → 0.30.2

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 (270) hide show
  1. package/dist/aontu.d.ts +17 -13
  2. package/dist/aontu.js +145 -60
  3. package/dist/aontu.js.map +1 -1
  4. package/dist/ctx.d.ts +51 -0
  5. package/dist/ctx.js +105 -0
  6. package/dist/ctx.js.map +1 -0
  7. package/dist/err.d.ts +12 -0
  8. package/dist/err.js +123 -0
  9. package/dist/err.js.map +1 -0
  10. package/dist/hints.d.ts +8 -0
  11. package/dist/hints.js +84 -0
  12. package/dist/hints.js.map +1 -0
  13. package/dist/lang.d.ts +11 -0
  14. package/dist/lang.js +569 -0
  15. package/dist/lang.js.map +1 -0
  16. package/dist/site.d.ts +12 -0
  17. package/dist/site.js +27 -0
  18. package/dist/site.js.map +1 -0
  19. package/dist/tsconfig.tsbuildinfo +1 -0
  20. package/dist/type.d.ts +32 -0
  21. package/dist/type.js +16 -0
  22. package/dist/type.js.map +1 -0
  23. package/dist/unify.d.ts +14 -0
  24. package/dist/unify.js +156 -0
  25. package/dist/unify.js.map +1 -0
  26. package/dist/utility.d.ts +14 -0
  27. package/dist/utility.js +122 -0
  28. package/dist/utility.js.map +1 -0
  29. package/dist/val/BagVal.d.ts +10 -0
  30. package/dist/val/BagVal.js +15 -0
  31. package/dist/val/BagVal.js.map +1 -0
  32. package/dist/val/BooleanVal.d.ts +9 -0
  33. package/dist/val/BooleanVal.js +16 -0
  34. package/dist/val/BooleanVal.js.map +1 -0
  35. package/dist/val/CloseFuncVal.d.ts +11 -0
  36. package/dist/val/CloseFuncVal.js +32 -0
  37. package/dist/val/CloseFuncVal.js.map +1 -0
  38. package/dist/val/ConjunctVal.d.ts +14 -0
  39. package/dist/val/ConjunctVal.js +187 -0
  40. package/dist/val/ConjunctVal.js.map +1 -0
  41. package/dist/val/CopyFuncVal.d.ts +13 -0
  42. package/dist/val/CopyFuncVal.js +35 -0
  43. package/dist/val/CopyFuncVal.js.map +1 -0
  44. package/dist/val/DisjunctVal.d.ts +19 -0
  45. package/dist/val/DisjunctVal.js +194 -0
  46. package/dist/val/DisjunctVal.js.map +1 -0
  47. package/dist/val/FeatureVal.d.ts +10 -0
  48. package/dist/val/FeatureVal.js +29 -0
  49. package/dist/val/FeatureVal.js.map +1 -0
  50. package/dist/val/FuncBaseVal.d.ts +15 -0
  51. package/dist/val/FuncBaseVal.js +127 -0
  52. package/dist/val/FuncBaseVal.js.map +1 -0
  53. package/dist/val/HideFuncVal.d.ts +12 -0
  54. package/dist/val/HideFuncVal.js +48 -0
  55. package/dist/val/HideFuncVal.js.map +1 -0
  56. package/dist/val/IntegerVal.d.ts +9 -0
  57. package/dist/val/IntegerVal.js +46 -0
  58. package/dist/val/IntegerVal.js.map +1 -0
  59. package/dist/val/JunctionVal.d.ts +12 -0
  60. package/dist/val/JunctionVal.js +31 -0
  61. package/dist/val/JunctionVal.js.map +1 -0
  62. package/dist/val/KeyFuncVal.d.ts +12 -0
  63. package/dist/val/KeyFuncVal.js +34 -0
  64. package/dist/val/KeyFuncVal.js.map +1 -0
  65. package/dist/val/ListVal.d.ts +17 -0
  66. package/dist/val/ListVal.js +186 -0
  67. package/dist/val/ListVal.js.map +1 -0
  68. package/dist/val/LowerFuncVal.d.ts +12 -0
  69. package/dist/val/LowerFuncVal.js +40 -0
  70. package/dist/val/LowerFuncVal.js.map +1 -0
  71. package/dist/val/MapVal.d.ts +16 -0
  72. package/dist/val/MapVal.js +211 -0
  73. package/dist/val/MapVal.js.map +1 -0
  74. package/dist/val/MoveFuncVal.d.ts +11 -0
  75. package/dist/val/MoveFuncVal.js +41 -0
  76. package/dist/val/MoveFuncVal.js.map +1 -0
  77. package/dist/val/NilVal.d.ts +25 -0
  78. package/dist/{lib/val/Nil.js → val/NilVal.js} +38 -30
  79. package/dist/val/NilVal.js.map +1 -0
  80. package/dist/val/NullVal.d.ts +9 -0
  81. package/dist/val/NullVal.js +18 -0
  82. package/dist/val/NullVal.js.map +1 -0
  83. package/dist/val/NumberVal.d.ts +9 -0
  84. package/dist/val/NumberVal.js +44 -0
  85. package/dist/val/NumberVal.js.map +1 -0
  86. package/dist/val/OpBaseVal.d.ts +18 -0
  87. package/dist/val/OpBaseVal.js +152 -0
  88. package/dist/val/OpBaseVal.js.map +1 -0
  89. package/dist/val/OpenFuncVal.d.ts +11 -0
  90. package/dist/val/OpenFuncVal.js +30 -0
  91. package/dist/val/OpenFuncVal.js.map +1 -0
  92. package/dist/val/PathFuncVal.d.ts +13 -0
  93. package/dist/val/PathFuncVal.js +42 -0
  94. package/dist/val/PathFuncVal.js.map +1 -0
  95. package/dist/val/PlusOpVal.d.ts +16 -0
  96. package/dist/val/PlusOpVal.js +59 -0
  97. package/dist/val/PlusOpVal.js.map +1 -0
  98. package/dist/val/PrefFuncVal.d.ts +11 -0
  99. package/dist/val/PrefFuncVal.js +39 -0
  100. package/dist/val/PrefFuncVal.js.map +1 -0
  101. package/dist/val/PrefVal.d.ts +15 -0
  102. package/dist/val/PrefVal.js +104 -0
  103. package/dist/val/PrefVal.js.map +1 -0
  104. package/dist/val/RefVal.d.ts +22 -0
  105. package/dist/val/RefVal.js +276 -0
  106. package/dist/val/RefVal.js.map +1 -0
  107. package/dist/val/ScalarKindVal.d.ts +16 -0
  108. package/dist/val/ScalarKindVal.js +76 -0
  109. package/dist/val/ScalarKindVal.js.map +1 -0
  110. package/dist/val/ScalarVal.d.ts +16 -0
  111. package/dist/val/ScalarVal.js +61 -0
  112. package/dist/val/ScalarVal.js.map +1 -0
  113. package/dist/val/StringVal.d.ts +10 -0
  114. package/dist/val/StringVal.js +19 -0
  115. package/dist/val/StringVal.js.map +1 -0
  116. package/dist/val/SuperFuncVal.d.ts +11 -0
  117. package/dist/val/SuperFuncVal.js +22 -0
  118. package/dist/val/SuperFuncVal.js.map +1 -0
  119. package/dist/val/TopVal.d.ts +16 -0
  120. package/dist/val/TopVal.js +38 -0
  121. package/dist/val/TopVal.js.map +1 -0
  122. package/dist/val/TypeFuncVal.d.ts +12 -0
  123. package/dist/val/TypeFuncVal.js +35 -0
  124. package/dist/val/TypeFuncVal.js.map +1 -0
  125. package/dist/val/UpperFuncVal.d.ts +12 -0
  126. package/dist/val/UpperFuncVal.js +40 -0
  127. package/dist/val/UpperFuncVal.js.map +1 -0
  128. package/dist/val/Val.d.ts +89 -0
  129. package/dist/val/Val.js +186 -0
  130. package/dist/val/Val.js.map +1 -0
  131. package/dist/val/VarVal.d.ts +13 -0
  132. package/dist/val/VarVal.js +109 -0
  133. package/dist/val/VarVal.js.map +1 -0
  134. package/dist/val/top.d.ts +2 -0
  135. package/dist/val/top.js +10 -0
  136. package/dist/val/top.js.map +1 -0
  137. package/dist/val/valutil.d.ts +2 -0
  138. package/dist/val/valutil.js +30 -0
  139. package/dist/val/valutil.js.map +1 -0
  140. package/package.json +20 -38
  141. package/src/aontu.ts +218 -0
  142. package/src/ctx.ts +201 -0
  143. package/src/err.ts +172 -0
  144. package/src/hints.ts +119 -0
  145. package/src/lang.ts +782 -0
  146. package/src/site.ts +34 -0
  147. package/src/tsconfig.json +16 -0
  148. package/src/type.ts +72 -0
  149. package/src/unify.ts +225 -0
  150. package/src/utility.ts +179 -0
  151. package/src/val/BagVal.ts +33 -0
  152. package/src/val/BooleanVal.ts +32 -0
  153. package/src/val/CloseFuncVal.ts +61 -0
  154. package/src/val/ConjunctVal.ts +285 -0
  155. package/src/val/CopyFuncVal.ts +69 -0
  156. package/src/val/DisjunctVal.ts +288 -0
  157. package/src/val/FeatureVal.ts +56 -0
  158. package/src/val/FuncBaseVal.ts +198 -0
  159. package/src/val/HideFuncVal.ts +85 -0
  160. package/src/val/IntegerVal.ts +75 -0
  161. package/src/val/JunctionVal.ts +54 -0
  162. package/src/val/KeyFuncVal.ts +67 -0
  163. package/src/val/ListVal.ts +286 -0
  164. package/src/val/LowerFuncVal.ts +73 -0
  165. package/src/val/MapVal.ts +316 -0
  166. package/src/val/MoveFuncVal.ts +79 -0
  167. package/{lib/val/Nil.ts → src/val/NilVal.ts} +49 -37
  168. package/src/val/NullVal.ts +38 -0
  169. package/src/val/NumberVal.ts +75 -0
  170. package/src/val/OpBaseVal.ts +231 -0
  171. package/src/val/OpenFuncVal.ts +60 -0
  172. package/src/val/PathFuncVal.ts +75 -0
  173. package/src/val/PlusOpVal.ts +92 -0
  174. package/src/val/PrefFuncVal.ts +73 -0
  175. package/src/val/PrefVal.ts +159 -0
  176. package/src/val/RefVal.ts +384 -0
  177. package/src/val/ScalarKindVal.ts +125 -0
  178. package/src/val/ScalarVal.ts +105 -0
  179. package/src/val/StringVal.ts +37 -0
  180. package/src/val/SuperFuncVal.ts +46 -0
  181. package/src/val/TopVal.ts +69 -0
  182. package/src/val/TypeFuncVal.ts +69 -0
  183. package/src/val/UpperFuncVal.ts +72 -0
  184. package/src/val/Val.ts +294 -0
  185. package/src/val/VarVal.ts +171 -0
  186. package/src/val/top.ts +12 -0
  187. package/src/val/valutil.ts +31 -0
  188. package/aontu.ts +0 -92
  189. package/dist/lib/err.d.ts +0 -4
  190. package/dist/lib/err.js +0 -61
  191. package/dist/lib/err.js.map +0 -1
  192. package/dist/lib/lang.d.ts +0 -15
  193. package/dist/lib/lang.js +0 -409
  194. package/dist/lib/lang.js.map +0 -1
  195. package/dist/lib/op/disjunct.d.ts +0 -3
  196. package/dist/lib/op/disjunct.js +0 -28
  197. package/dist/lib/op/disjunct.js.map +0 -1
  198. package/dist/lib/op/op.d.ts +0 -6
  199. package/dist/lib/op/op.js +0 -9
  200. package/dist/lib/op/op.js.map +0 -1
  201. package/dist/lib/op/unite.d.ts +0 -3
  202. package/dist/lib/op/unite.js +0 -100
  203. package/dist/lib/op/unite.js.map +0 -1
  204. package/dist/lib/type.d.ts +0 -49
  205. package/dist/lib/type.js +0 -7
  206. package/dist/lib/type.js.map +0 -1
  207. package/dist/lib/unify.d.ts +0 -38
  208. package/dist/lib/unify.js +0 -67
  209. package/dist/lib/unify.js.map +0 -1
  210. package/dist/lib/utility.d.ts +0 -3
  211. package/dist/lib/utility.js +0 -16
  212. package/dist/lib/utility.js.map +0 -1
  213. package/dist/lib/val/ConjunctVal.d.ts +0 -17
  214. package/dist/lib/val/ConjunctVal.js +0 -171
  215. package/dist/lib/val/ConjunctVal.js.map +0 -1
  216. package/dist/lib/val/DisjunctVal.d.ts +0 -17
  217. package/dist/lib/val/DisjunctVal.js +0 -95
  218. package/dist/lib/val/DisjunctVal.js.map +0 -1
  219. package/dist/lib/val/ListVal.d.ts +0 -18
  220. package/dist/lib/val/ListVal.js +0 -120
  221. package/dist/lib/val/ListVal.js.map +0 -1
  222. package/dist/lib/val/MapVal.d.ts +0 -18
  223. package/dist/lib/val/MapVal.js +0 -117
  224. package/dist/lib/val/MapVal.js.map +0 -1
  225. package/dist/lib/val/Nil.d.ts +0 -22
  226. package/dist/lib/val/Nil.js.map +0 -1
  227. package/dist/lib/val/NullVal.d.ts +0 -15
  228. package/dist/lib/val/NullVal.js +0 -38
  229. package/dist/lib/val/NullVal.js.map +0 -1
  230. package/dist/lib/val/OpVal.d.ts +0 -17
  231. package/dist/lib/val/OpVal.js +0 -89
  232. package/dist/lib/val/OpVal.js.map +0 -1
  233. package/dist/lib/val/PlusVal.d.ts +0 -12
  234. package/dist/lib/val/PlusVal.js +0 -32
  235. package/dist/lib/val/PlusVal.js.map +0 -1
  236. package/dist/lib/val/PrefVal.d.ts +0 -17
  237. package/dist/lib/val/PrefVal.js +0 -87
  238. package/dist/lib/val/PrefVal.js.map +0 -1
  239. package/dist/lib/val/RefVal.d.ts +0 -22
  240. package/dist/lib/val/RefVal.js +0 -247
  241. package/dist/lib/val/RefVal.js.map +0 -1
  242. package/dist/lib/val/ValBase.d.ts +0 -26
  243. package/dist/lib/val/ValBase.js +0 -77
  244. package/dist/lib/val/ValBase.js.map +0 -1
  245. package/dist/lib/val/VarVal.d.ts +0 -15
  246. package/dist/lib/val/VarVal.js +0 -84
  247. package/dist/lib/val/VarVal.js.map +0 -1
  248. package/dist/lib/val.d.ts +0 -81
  249. package/dist/lib/val.js +0 -191
  250. package/dist/lib/val.js.map +0 -1
  251. package/lib/err.ts +0 -83
  252. package/lib/lang.ts +0 -585
  253. package/lib/op/disjunct.ts +0 -51
  254. package/lib/op/op.ts +0 -18
  255. package/lib/op/unite.ts +0 -143
  256. package/lib/type.ts +0 -95
  257. package/lib/unify.ts +0 -128
  258. package/lib/utility.ts +0 -24
  259. package/lib/val/ConjunctVal.ts +0 -265
  260. package/lib/val/DisjunctVal.ts +0 -160
  261. package/lib/val/ListVal.ts +0 -196
  262. package/lib/val/MapVal.ts +0 -181
  263. package/lib/val/NullVal.ts +0 -72
  264. package/lib/val/OpVal.ts +0 -159
  265. package/lib/val/PlusVal.ts +0 -76
  266. package/lib/val/PrefVal.ts +0 -154
  267. package/lib/val/RefVal.ts +0 -362
  268. package/lib/val/ValBase.ts +0 -109
  269. package/lib/val/VarVal.ts +0 -157
  270. package/lib/val.ts +0 -327
@@ -0,0 +1,75 @@
1
+ /* Copyright (c) 2021-2025 Richard Rodger, MIT License */
2
+
3
+
4
+ import type {
5
+ Val,
6
+ ValSpec,
7
+ } from '../type'
8
+
9
+ import {
10
+ AontuContext,
11
+ } from '../ctx'
12
+
13
+ import { makeNilErr } from '../err'
14
+
15
+ import { NilVal } from '../val/NilVal'
16
+ import { RefVal } from '../val/RefVal'
17
+ import { FuncBaseVal } from './FuncBaseVal'
18
+
19
+
20
+ class PathFuncVal extends FuncBaseVal {
21
+ isPathFunc = true
22
+
23
+ prepared = 0
24
+
25
+ constructor(
26
+ spec: ValSpec,
27
+ ctx?: AontuContext
28
+ ) {
29
+ super(spec, ctx)
30
+ }
31
+
32
+
33
+ make(_ctx: AontuContext, spec: ValSpec): Val {
34
+ const pathfunc = new PathFuncVal(spec)
35
+ pathfunc.prepared = this.prepared
36
+ return pathfunc
37
+ }
38
+
39
+ funcname() {
40
+ return 'path'
41
+ }
42
+
43
+
44
+ prepare(ctx: AontuContext, args: Val[]) {
45
+ let arg = args[0]
46
+
47
+ if (0 === this.prepared) {
48
+ if (arg.isScalar) {
49
+ arg = this.place(new RefVal({ peg: [arg], absolute: false }))
50
+ }
51
+ else if (!arg.isRef) {
52
+ arg = makeNilErr(ctx, 'invalid-arg', this)
53
+ }
54
+ }
55
+
56
+ args[0] = arg
57
+
58
+ this.prepared++
59
+
60
+ return args
61
+ }
62
+
63
+
64
+ resolve(ctx: AontuContext, args: Val[]) {
65
+ let out = args[0] ?? makeNilErr(ctx, 'arg', this)
66
+
67
+ return out
68
+ }
69
+
70
+ }
71
+
72
+
73
+ export {
74
+ PathFuncVal,
75
+ }
@@ -0,0 +1,92 @@
1
+ /* Copyright (c) 2024-2025 Richard Rodger, MIT License */
2
+
3
+
4
+ import type {
5
+ Val,
6
+ ValSpec,
7
+ } from '../type'
8
+
9
+
10
+ import {
11
+ AontuContext,
12
+ } from '../ctx'
13
+
14
+
15
+
16
+ import { IntegerVal } from '../val/IntegerVal'
17
+ import { NumberVal } from '../val/NumberVal'
18
+ import { StringVal } from '../val/StringVal'
19
+ import { BooleanVal } from '../val/BooleanVal'
20
+ import { OpBaseVal } from './OpBaseVal'
21
+
22
+
23
+ class PlusOpVal extends OpBaseVal {
24
+ isPlusOp = true
25
+
26
+ constructor(
27
+ spec: ValSpec,
28
+ ctx?: AontuContext
29
+ ) {
30
+ super(spec, ctx)
31
+ }
32
+
33
+
34
+ make(_ctx: AontuContext, spec: ValSpec): Val {
35
+ return new PlusOpVal(spec)
36
+ }
37
+
38
+ opname() {
39
+ return 'plus'
40
+ }
41
+
42
+
43
+ operate(_ctx: AontuContext, args: Val[]) {
44
+ let a: any = this.primatize(args[0]?.peg)
45
+ let b: any = this.primatize(args[1]?.peg)
46
+
47
+ let peg = undefined
48
+ if (undefined === a && undefined !== b) {
49
+ peg = b
50
+ }
51
+ else if (undefined === b && undefined !== a) {
52
+ peg = a
53
+ }
54
+ else {
55
+ const at = typeof a
56
+ const bt = typeof b
57
+ if ('boolean' === at && 'boolean' === bt) {
58
+ peg = a || b
59
+ }
60
+ else {
61
+ peg = a + b
62
+ }
63
+ }
64
+
65
+ let pegtype = typeof peg
66
+
67
+ let out = undefined
68
+
69
+ if ('string' === pegtype) {
70
+ out = new StringVal({ peg })
71
+ }
72
+ else if ('boolean' === pegtype) {
73
+ out = new BooleanVal({ peg })
74
+ }
75
+ else if ('number' === pegtype) {
76
+ out = Number.isInteger(peg) ? new IntegerVal({ peg }) : new NumberVal({ peg })
77
+ }
78
+
79
+ return out
80
+ }
81
+
82
+
83
+ get canon() {
84
+ return this.peg[0]?.canon + '+' + this.peg[1]?.canon
85
+ }
86
+
87
+ }
88
+
89
+
90
+ export {
91
+ PlusOpVal,
92
+ }
@@ -0,0 +1,73 @@
1
+ /* Copyright (c) 2021-2025 Richard Rodger, MIT License */
2
+
3
+
4
+ import type {
5
+ Val,
6
+ ValSpec,
7
+ } from '../type'
8
+
9
+ import {
10
+ AontuContext,
11
+ } from '../ctx'
12
+
13
+ import { makeNilErr } from '../err'
14
+
15
+ import {
16
+ walk
17
+ } from '../utility'
18
+
19
+ import { NilVal } from '../val/NilVal'
20
+ import { PrefVal } from '../val/PrefVal'
21
+ import { FuncBaseVal } from './FuncBaseVal'
22
+
23
+
24
+ class PrefFuncVal extends FuncBaseVal {
25
+ isPrefFunc = true
26
+
27
+ constructor(
28
+ spec: ValSpec,
29
+ ctx?: AontuContext
30
+ ) {
31
+ super(spec, ctx)
32
+ }
33
+
34
+
35
+ make(_ctx: AontuContext, spec: ValSpec): Val {
36
+ return new PrefFuncVal(spec)
37
+ }
38
+
39
+ funcname() {
40
+ return 'pref'
41
+ }
42
+
43
+
44
+ resolve(ctx: AontuContext, args: Val[]) {
45
+ let out = args[0] ?? makeNilErr(ctx, 'arg', this)
46
+
47
+ if (!out.isNil) {
48
+ out = out.clone(ctx)
49
+
50
+ // Wrap every child val in a PrefVal
51
+ out = walk(out, (_key: string | number | undefined, val: Val) => {
52
+ let oval = val
53
+ // console.log('PREFVAL', _key, oval.canon, oval.constructor.name)
54
+ if (
55
+ val.isScalar
56
+ || val.isPref
57
+ ) {
58
+ oval = new PrefVal({ peg: val }, ctx)
59
+ }
60
+
61
+ return oval
62
+ })
63
+ }
64
+
65
+ return out
66
+ }
67
+
68
+ }
69
+
70
+
71
+ export {
72
+ PrefFuncVal,
73
+ }
@@ -0,0 +1,159 @@
1
+ /* Copyright (c) 2021-2025 Richard Rodger, MIT License */
2
+
3
+ import type {
4
+ Val,
5
+ ValSpec,
6
+ } from '../type'
7
+
8
+ import {
9
+ DONE,
10
+ } from '../type'
11
+
12
+ import { AontuContext } from '../ctx'
13
+ import { unite } from '../unify'
14
+ import { AontuError } from '../err'
15
+
16
+ import {
17
+ explainOpen,
18
+ ec,
19
+ explainClose,
20
+ } from '../utility'
21
+
22
+
23
+ import { top } from './top'
24
+
25
+ import { FeatureVal } from './FeatureVal'
26
+
27
+
28
+ class PrefVal extends FeatureVal {
29
+ isPref = true
30
+
31
+ superpeg: Val
32
+ rank: number = 0
33
+
34
+ constructor(
35
+ spec: ValSpec,
36
+ ctx?: AontuContext
37
+ ) {
38
+ super(spec, ctx)
39
+ // this.pref = spec.pref || spec.peg
40
+
41
+ // this.superpeg = makeSuper(spec.peg)
42
+
43
+ if (spec.peg instanceof PrefVal) {
44
+ this.rank = 1 + spec.peg.rank
45
+ }
46
+
47
+ this.superpeg = this.peg.superior()
48
+ // console.log('PVC', this.peg.canon, this.superpeg.canon)
49
+ }
50
+
51
+
52
+ // PrefVal unify always returns a PrefVal
53
+ // PrefVals can only be removed by becoming Nil in a Disjunct
54
+ unify(peer: Val, ctx: AontuContext): Val {
55
+ peer = peer ?? top()
56
+
57
+ const te = ctx.explain && explainOpen(ctx, ctx.explain, 'Pref', this, peer)
58
+ let done = true
59
+ let out: Val = this
60
+ let why = ''
61
+
62
+
63
+ if (!this.peg.done) {
64
+ const resolved = unite(ctx.clone({ explain: ec(te, 'RES') }), this.peg, top(), 'pref/resolve')
65
+ // console.log('PREF-RESOLVED', this.peg.canon, '->', resolved)
66
+ this.peg = resolved
67
+ }
68
+
69
+
70
+ if (peer instanceof PrefVal) {
71
+ why += 'pref-'
72
+ if (this.rank < peer.rank) {
73
+ out = this
74
+ why += 'rank-win'
75
+ }
76
+ else if (peer.rank < this.rank) {
77
+ out = peer
78
+ why += 'rank-lose'
79
+ }
80
+ else {
81
+ let peg = unite(ctx.clone({ explain: ec(te, 'PEER') }), this.peg, peer.peg, 'pref-peer/' + this.id)
82
+ out = new PrefVal({ peg }, ctx)
83
+ why += 'rank-same'
84
+ }
85
+ }
86
+ else if (!peer.isTop) {
87
+ why += 'super-'
88
+
89
+ // if (this.superpeg instanceof Nil) {
90
+ // out = peer
91
+ // why += 'nil'
92
+ // }
93
+ // else {
94
+ // why += 'unify'
95
+
96
+ out = unite(ctx.clone({ explain: ec(te, 'SUPER') }), this.superpeg, peer, 'pref-super/' + this.id)
97
+ if (out.same(this.superpeg)) {
98
+ out = this.peg
99
+ why += 'same'
100
+ }
101
+
102
+ // }
103
+ }
104
+ else {
105
+ why += 'none'
106
+ }
107
+
108
+ out.dc = done ? DONE : this.dc + 1
109
+
110
+ // console.log('PREFVAL-OUT', why, this.canon, peer.canon, '->', out.canon, out.done)
111
+
112
+ explainClose(te, out)
113
+
114
+ return out
115
+ }
116
+
117
+
118
+ same(peer: Val): boolean {
119
+ if (null == peer) {
120
+ return false
121
+ }
122
+
123
+ let pegsame = (this.peg === peer.peg) ||
124
+ (this.peg.isVal && this.peg.same(peer.peg))
125
+
126
+ return pegsame
127
+ }
128
+
129
+
130
+ clone(ctx: AontuContext, spec?: ValSpec): Val {
131
+ let out = (super.clone(ctx, spec) as PrefVal)
132
+ // out.pref = this.pref.clone(null, ctx)
133
+ return out
134
+ }
135
+
136
+
137
+ get canon() {
138
+ // return this.pref instanceof Nil ? this.peg.canon : '*' + this.pref.canon
139
+ return '*' + this.peg.canon
140
+ }
141
+
142
+
143
+ gen(ctx?: AontuContext) {
144
+ let val = this.peg
145
+
146
+ if (val.isNil) {
147
+ if (null == ctx) {
148
+ throw new AontuError(val.msg)
149
+ }
150
+ }
151
+
152
+ return val.gen(ctx)
153
+ }
154
+ }
155
+
156
+
157
+ export {
158
+ PrefVal,
159
+ }