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
@@ -1,160 +0,0 @@
1
- /* Copyright (c) 2021-2023 Richard Rodger, MIT License */
2
-
3
-
4
-
5
- import type {
6
- Val,
7
- ValSpec,
8
- } from '../type'
9
-
10
- import {
11
- DONE,
12
- } from '../type'
13
-
14
- import {
15
- Context,
16
- } from '../unify'
17
-
18
-
19
- import {
20
- Site
21
- } from '../lang'
22
-
23
-
24
- import {
25
- unite
26
- } from '../op/op'
27
-
28
-
29
-
30
-
31
- // import { TOP } from '../val'
32
- // import { ConjunctVal } from '../val/ConjunctVal'
33
- // import { ListVal } from '../val/ListVal'
34
- // import { MapVal } from '../val/MapVal'
35
- import { Nil } from '../val/Nil'
36
- import { PrefVal } from '../val/PrefVal'
37
- // import { RefVal } from '../val/RefVal'
38
- import { ValBase } from '../val/ValBase'
39
-
40
-
41
-
42
-
43
- // TODO: move main logic to op/disjunct
44
- class DisjunctVal extends ValBase {
45
- isDisjunctVal = true
46
- isBinaryOp = true
47
-
48
- // TODO: sites from normalization of orginal Disjuncts, as well as child pegs
49
- constructor(
50
- spec: {
51
- peg: Val[]
52
- },
53
- ctx?: Context,
54
- _sites?: Site[]
55
- ) {
56
- super(spec, ctx)
57
- }
58
-
59
- // NOTE: mutation!
60
- append(peer: Val): DisjunctVal {
61
- this.peg.push(peer)
62
- return this
63
- }
64
-
65
- unify(peer: Val, ctx: Context): Val {
66
- let done = true
67
-
68
- let oval: Val[] = []
69
-
70
- // Conjunction (&) distributes over disjunction (|)
71
- for (let vI = 0; vI < this.peg.length; vI++) {
72
- //oval[vI] = this.peg[vI].unify(peer, ctx)
73
- oval[vI] = unite(ctx, this.peg[vI], peer)
74
- done = done && DONE === oval[vI].done
75
- }
76
-
77
- // Remove duplicates, and normalize
78
- if (1 < oval.length) {
79
- for (let vI = 0; vI < oval.length; vI++) {
80
- if (oval[vI] instanceof DisjunctVal) {
81
- oval.splice(vI, 1, ...oval[vI].peg)
82
- }
83
- }
84
-
85
- // TODO: not an error Nil!
86
- let remove = new Nil()
87
- for (let vI = 0; vI < oval.length; vI++) {
88
- for (let kI = vI + 1; kI < oval.length; kI++) {
89
- if (oval[kI].same(oval[vI])) {
90
- oval[kI] = remove
91
- }
92
- }
93
- }
94
-
95
- oval = oval.filter(v => !(v instanceof Nil))
96
- }
97
-
98
- let out: Val
99
-
100
- if (1 == oval.length) {
101
- out = oval[0]
102
- }
103
- else if (0 == oval.length) {
104
- return Nil.make(ctx, '|:empty', this)
105
- }
106
- else {
107
- out = new DisjunctVal({ peg: oval }, ctx)
108
- }
109
-
110
- out.done = done ? DONE : this.done + 1
111
-
112
- return out
113
- }
114
-
115
-
116
- clone(spec?: ValSpec, ctx?: Context): Val {
117
- let out = (super.clone(spec, ctx) as DisjunctVal)
118
- out.peg = this.peg.map((entry: Val) => entry.clone(null, ctx))
119
- return out
120
- }
121
-
122
-
123
- get canon() {
124
- return this.peg.map((v: Val) => {
125
- return (v as any).isBinaryOp && Array.isArray(v.peg) && 1 < v.peg.length ?
126
- '(' + v.canon + ')' : v.canon
127
- }).join('|')
128
- }
129
-
130
-
131
- gen(ctx?: Context) {
132
-
133
- // TODO: this is not right - unresolved Disjuncts eval to undef
134
- if (0 < this.peg.length) {
135
-
136
- let vals = this.peg.filter((v: Val) => v instanceof PrefVal)
137
-
138
- vals = 0 === vals.length ? this.peg : vals
139
-
140
- let val = vals[0]
141
-
142
- for (let vI = 1; vI < this.peg.length; vI++) {
143
- let valnext = val.unify(this.peg[vI], ctx)
144
- val = valnext
145
- }
146
-
147
- return val.gen(ctx)
148
- }
149
-
150
- return undefined
151
- }
152
- }
153
-
154
-
155
-
156
-
157
-
158
- export {
159
- DisjunctVal,
160
- }
@@ -1,196 +0,0 @@
1
- /* Copyright (c) 2021-2022 Richard Rodger, MIT License */
2
-
3
-
4
- import type {
5
- Val,
6
- ValList,
7
- ValSpec,
8
- } from '../type'
9
-
10
- import {
11
- DONE,
12
- } from '../type'
13
-
14
- import {
15
- Context,
16
- } from '../unify'
17
-
18
-
19
- import {
20
- Site
21
- } from '../lang'
22
-
23
-
24
- import {
25
- unite
26
- } from '../op/op'
27
-
28
-
29
-
30
-
31
- import { TOP } from '../val'
32
- import { ConjunctVal } from '../val/ConjunctVal'
33
- // import { DisjunctVal } from '../val/DisjunctVal'
34
- // import { MapVal } from '../val/MapVal'
35
- import { Nil } from '../val/Nil'
36
- // import { PrefVal } from '../val/PrefVal'
37
- // import { RefVal } from '../val/RefVal'
38
- import { ValBase } from '../val/ValBase'
39
-
40
-
41
-
42
-
43
-
44
- class ListVal extends ValBase {
45
- isListVal = true
46
-
47
- static SPREAD = Symbol('spread')
48
-
49
- spread = {
50
- cj: (undefined as Val | undefined),
51
- }
52
-
53
- constructor(
54
- spec: {
55
- peg: ValList
56
- },
57
- ctx?: Context
58
- ) {
59
- super(spec, ctx)
60
-
61
- if (null == this.peg) {
62
- throw new Error('ListVal spec.peg undefined')
63
- }
64
-
65
- let spread = (this.peg as any)[ListVal.SPREAD]
66
- delete (this.peg as any)[ListVal.SPREAD]
67
-
68
- if (spread) {
69
- if ('&' === spread.o) {
70
-
71
- // TODO: handle existing spread!
72
- this.spread.cj =
73
- Array.isArray(spread.v) ?
74
- 1 < spread.v.length ?
75
- new ConjunctVal({ peg: spread.v }, ctx) :
76
- spread.v :
77
- spread.v
78
-
79
- // let tmv = Array.isArray(spread.v) ? spread.v : [spread.v]
80
- // this.spread.cj = new ConjunctVal({ peg: tmv }, ctx)
81
- }
82
- }
83
- }
84
-
85
-
86
- // NOTE: order of keys is not preserved!
87
- // not possible in any case - consider {a,b} unify {b,a}
88
- unify(peer: Val, ctx: Context): Val {
89
- let done: boolean = true
90
- let out: ListVal = TOP === peer ? this : new ListVal({ peg: [] }, ctx)
91
-
92
- out.spread.cj = this.spread.cj
93
-
94
- if (peer instanceof ListVal) {
95
- out.spread.cj = null == out.spread.cj ? peer.spread.cj : (
96
- null == peer.spread.cj ? out.spread.cj : (
97
- out.spread.cj =
98
- // new ConjunctVal({ peg: [out.spread.cj, peer.spread.cj] }, ctx)
99
- unite(ctx, out.spread.cj, peer.spread.cj)
100
- )
101
- )
102
- }
103
-
104
-
105
- out.done = this.done + 1
106
-
107
- // if (this.spread.cj) {
108
- // out.spread.cj =
109
- // DONE !== this.spread.cj.done ? unite(ctx, this.spread.cj) :
110
- // this.spread.cj
111
- // }
112
-
113
- let spread_cj = out.spread.cj || TOP
114
-
115
- // Always unify children first
116
- for (let key in this.peg) {
117
- let keyctx = ctx.descend(key)
118
- let key_spread_cj = spread_cj.clone(null, keyctx)
119
-
120
- out.peg[key] = unite(keyctx, this.peg[key], key_spread_cj, 'list-own')
121
- done = (done && DONE === out.peg[key].done)
122
- }
123
-
124
-
125
- if (peer instanceof ListVal) {
126
- let upeer: ListVal = (unite(ctx, peer, undefined, 'list-peer-list') as ListVal)
127
-
128
- // NOTE: peerkey is the index
129
- for (let peerkey in upeer.peg) {
130
- let peerchild = upeer.peg[peerkey]
131
- let child = out.peg[peerkey]
132
-
133
- let oval = out.peg[peerkey] =
134
- undefined === child ? peerchild :
135
- child instanceof Nil ? child :
136
- peerchild instanceof Nil ? peerchild :
137
- unite(ctx.descend(peerkey), child, peerchild, 'list-peer')
138
-
139
- if (this.spread.cj) {
140
- let key_ctx = ctx.descend(peerkey)
141
- let key_spread_cj = spread_cj.clone(null, key_ctx)
142
-
143
- // out.peg[peerkey] = unite(ctx, out.peg[peerkey], spread_cj)
144
- oval = out.peg[peerkey] =
145
- // new ConjunctVal({ peg: [out.peg[peerkey], key_spread_cj] }, key_ctx)
146
- // done = false
147
- unite(key_ctx, out.peg[peerkey], key_spread_cj)
148
- }
149
-
150
- done = (done && DONE === oval.done)
151
-
152
- }
153
- }
154
- else if (TOP !== peer) {
155
- return Nil.make(ctx, 'map', this, peer)
156
- }
157
-
158
- out.done = done ? DONE : out.done
159
- return out
160
- }
161
-
162
-
163
- clone(spec?: ValSpec, ctx?: Context): Val {
164
- let out = (super.clone(spec, ctx) as ListVal)
165
- out.peg = this.peg.map((entry: Val) => entry.clone(null, ctx))
166
- if (this.spread.cj) {
167
- out.spread.cj = this.spread.cj.clone(null, ctx)
168
- }
169
- return out
170
- }
171
-
172
-
173
- get canon() {
174
- let keys = Object.keys(this.peg)
175
- return '[' +
176
- (this.spread.cj ? '&:' + this.spread.cj.canon +
177
- (0 < keys.length ? ',' : '') : '') +
178
- keys
179
- // NOTE: handle array non-index key vals
180
- .map(k => [this.peg[k].canon]).join(',') +
181
- ']'
182
- }
183
-
184
- gen(ctx?: Context) {
185
- let out: any = this.peg.map((v: Val) => v.gen(ctx))
186
-
187
- return out
188
- }
189
- }
190
-
191
-
192
-
193
-
194
- export {
195
- ListVal,
196
- }
package/lib/val/MapVal.ts DELETED
@@ -1,181 +0,0 @@
1
- /* Copyright (c) 2021-2023 Richard Rodger, MIT License */
2
-
3
-
4
-
5
- import type {
6
- Val,
7
- ValMap,
8
- ValSpec,
9
- } from '../type'
10
-
11
- import {
12
- DONE,
13
- } from '../type'
14
-
15
- import {
16
- Context,
17
- } from '../unify'
18
-
19
-
20
-
21
- import {
22
- unite
23
- } from '../op/op'
24
-
25
-
26
-
27
- import { TOP } from '../val'
28
- import { ConjunctVal } from '../val/ConjunctVal'
29
- // import { DisjunctVal } from '../val/DisjunctVal'
30
- // import { ListVal } from '../val/ListVal'
31
- import { Nil } from '../val/Nil'
32
- // import { PrefVal } from '../val/PrefVal'
33
- // import { RefVal } from '../val/RefVal'
34
- import { ValBase } from '../val/ValBase'
35
-
36
-
37
- class MapVal extends ValBase {
38
- isMapVal = true
39
-
40
- static SPREAD = Symbol('spread')
41
-
42
- spread = {
43
- cj: (undefined as Val | undefined),
44
- }
45
-
46
- constructor(
47
- spec: {
48
- peg: ValMap
49
- },
50
- ctx?: Context
51
- ) {
52
- super(spec, ctx)
53
-
54
- if (null == this.peg) {
55
- throw new Error('MapVal spec.peg undefined')
56
- }
57
-
58
- let spread = (this.peg as any)[MapVal.SPREAD]
59
- delete (this.peg as any)[MapVal.SPREAD]
60
-
61
- if (spread) {
62
- if ('&' === spread.o) {
63
- // TODO: handle existing spread!
64
- this.spread.cj =
65
- Array.isArray(spread.v) ?
66
- 1 < spread.v.length ?
67
- new ConjunctVal({ peg: spread.v }, ctx) :
68
- spread.v[0] :
69
- spread.v
70
- }
71
- }
72
- }
73
-
74
-
75
- // NOTE: order of keys is not preserved!
76
- // not possible in any case - consider {a,b} unify {b,a}
77
- unify(peer: Val, ctx: Context): Val {
78
- // let mark = Math.random()
79
-
80
- let done: boolean = true
81
- let out: MapVal = TOP === peer ? this : new MapVal({ peg: {} }, ctx)
82
-
83
- out.spread.cj = this.spread.cj
84
-
85
- if (peer instanceof MapVal) {
86
- out.spread.cj = null == out.spread.cj ? peer.spread.cj : (
87
- null == peer.spread.cj ? out.spread.cj : (
88
- out.spread.cj =
89
- // new ConjunctVal({ peg: [out.spread.cj, peer.spread.cj] }, ctx)
90
- unite(ctx, out.spread.cj, peer.spread.cj)
91
- )
92
- )
93
- }
94
-
95
-
96
- out.done = this.done + 1
97
-
98
- let spread_cj = out.spread.cj || TOP
99
-
100
- // Always unify own children first
101
- for (let key in this.peg) {
102
- let keyctx = ctx.descend(key)
103
- let key_spread_cj = spread_cj.clone(null, keyctx)
104
-
105
- out.peg[key] = unite(keyctx, this.peg[key], key_spread_cj, 'map-own')
106
- done = (done && DONE === out.peg[key].done)
107
- }
108
-
109
-
110
- if (peer instanceof MapVal) {
111
- let upeer: MapVal = (unite(ctx, peer, undefined, 'map-peer-map') as MapVal)
112
-
113
- for (let peerkey in upeer.peg) {
114
- let peerchild = upeer.peg[peerkey]
115
- let child = out.peg[peerkey]
116
-
117
- let oval = out.peg[peerkey] =
118
- undefined === child ? peerchild :
119
- child instanceof Nil ? child :
120
- peerchild instanceof Nil ? peerchild :
121
- unite(ctx.descend(peerkey), child, peerchild, 'map-peer')
122
-
123
- if (this.spread.cj) {
124
- let key_ctx = ctx.descend(peerkey)
125
- let key_spread_cj = spread_cj.clone(null, key_ctx)
126
- oval = out.peg[peerkey] =
127
- unite(key_ctx, out.peg[peerkey], key_spread_cj)
128
- }
129
-
130
- done = (done && DONE === oval.done)
131
- }
132
- }
133
- else if (TOP !== peer) {
134
- return Nil.make(ctx, 'map', this, peer)
135
- }
136
-
137
- out.uh.push(peer.id)
138
-
139
- out.done = done ? DONE : out.done
140
- return out
141
- }
142
-
143
-
144
- clone(spec?: ValSpec, ctx?: Context): Val {
145
- let out = (super.clone(spec, ctx) as MapVal)
146
- out.peg = {}
147
- for (let entry of Object.entries(this.peg)) {
148
- out.peg[entry[0]] =
149
- entry[1] instanceof ValBase ? entry[1].clone(null, ctx) : entry[1]
150
- }
151
- if (this.spread.cj) {
152
- out.spread.cj = this.spread.cj.clone(null, ctx)
153
- }
154
- return out
155
- }
156
-
157
-
158
- get canon() {
159
- let keys = Object.keys(this.peg)
160
- return '{' +
161
- (this.spread.cj ? '&:' + this.spread.cj.canon +
162
- (0 < keys.length ? ',' : '') : '') +
163
- keys
164
- .map(k => [JSON.stringify(k) + ':' + this.peg[k].canon]).join(',') +
165
- '}'
166
- }
167
-
168
-
169
- gen(ctx?: Context) {
170
- let out: any = {}
171
- for (let p in this.peg) {
172
- out[p] = this.peg[p].gen(ctx)
173
- }
174
- return out
175
- }
176
- }
177
-
178
-
179
- export {
180
- MapVal
181
- }
@@ -1,72 +0,0 @@
1
- /* Copyright (c) 2025 Richard Rodger, MIT License */
2
-
3
-
4
-
5
- import type {
6
- Val,
7
- ValSpec,
8
- } from '../type'
9
-
10
- import {
11
- Context,
12
- } from '../unify'
13
-
14
-
15
-
16
- import { Nil } from '../val/Nil'
17
- import { ValBase } from '../val/ValBase'
18
-
19
-
20
- class NullVal extends ValBase {
21
- isNullVal = true
22
-
23
- constructor(
24
- spec: {
25
- peg: null
26
- },
27
- ctx?: Context
28
- ) {
29
- super(spec, ctx)
30
- this.peg = null
31
- }
32
-
33
-
34
- unify(peer: Val, ctx: Context): Val {
35
- let out: Val
36
-
37
- if ((peer as any).isTop || (peer as NullVal).isNullVal) {
38
- out = this
39
- }
40
- else {
41
- out = Nil.make(ctx, 'null', this, peer)
42
- }
43
-
44
- return out
45
- }
46
-
47
-
48
- same(peer: Val): boolean {
49
- return null == peer ? false : peer instanceof NullVal && this.peg === peer.peg
50
- }
51
-
52
-
53
- clone(spec?: ValSpec, ctx?: Context): Val {
54
- let out = (super.clone(spec, ctx) as NullVal)
55
- return out
56
- }
57
-
58
-
59
- get canon() {
60
- return '' + this.peg
61
- }
62
-
63
-
64
- gen(_ctx?: Context) {
65
- return null
66
- }
67
- }
68
-
69
-
70
- export {
71
- NullVal,
72
- }