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,79 @@
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
+
17
+ import {
18
+ walk
19
+ } from '../utility'
20
+
21
+
22
+
23
+ import { FuncBaseVal } from './FuncBaseVal'
24
+ import { CopyFuncVal } from './CopyFuncVal'
25
+
26
+
27
+
28
+ class MoveFuncVal extends FuncBaseVal {
29
+ isMoveFunc = true
30
+
31
+ constructor(
32
+ spec: ValSpec,
33
+ ctx?: AontuContext
34
+ ) {
35
+ super(spec, ctx)
36
+ }
37
+
38
+
39
+ make(_ctx: AontuContext, spec: ValSpec): Val {
40
+ return new MoveFuncVal(spec)
41
+ }
42
+
43
+ funcname() {
44
+ return 'move'
45
+ }
46
+
47
+
48
+ resolve(ctx: AontuContext, args: Val[]) {
49
+ let out = args[0] ?? makeNilErr(ctx, 'arg', this)
50
+
51
+ const orig = out
52
+ const origcanon = orig.canon
53
+
54
+ if (!orig.isNil) {
55
+ const src = orig.clone(ctx)
56
+
57
+ walk(orig, (_key: string | number | undefined, val: Val) => {
58
+ val.mark.hide = true
59
+ return val
60
+ })
61
+
62
+ out = new CopyFuncVal({ peg: [src] }, ctx)
63
+ }
64
+
65
+ Object.defineProperty(out, 'canon', {
66
+ get: () => 'move(' + origcanon + ')',
67
+ configurable: true
68
+ })
69
+
70
+ // console.log('MOVE-resolve', out)
71
+
72
+ return out
73
+ }
74
+ }
75
+
76
+
77
+ export {
78
+ MoveFuncVal,
79
+ }
@@ -1,8 +1,7 @@
1
- /* Copyright (c) 2021-2023 Richard Rodger, MIT License */
1
+ /* Copyright (c) 2021-2025 Richard Rodger, MIT License */
2
2
 
3
3
 
4
4
  import type {
5
- Val,
6
5
  ValSpec,
7
6
  } from '../type'
8
7
 
@@ -11,18 +10,16 @@ import {
11
10
  } from '../type'
12
11
 
13
12
  import {
14
- descErr
15
- } from '../err'
13
+ AontuContext,
14
+ } from '../ctx'
16
15
 
17
- import {
18
- Context,
19
- } from '../unify'
20
16
 
17
+ import { Val } from './Val'
21
18
 
22
- import { ValBase } from '../val/ValBase'
19
+ import { AontuError, descErr } from '../err'
23
20
 
24
21
 
25
- class Nil extends ValBase {
22
+ class NilVal extends Val {
26
23
  isNil = true
27
24
 
28
25
  nil = true
@@ -30,21 +27,23 @@ class Nil extends ValBase {
30
27
  primary?: Val
31
28
  secondary?: Val
32
29
  msg: string = ''
30
+ attempt?: string
33
31
 
34
32
  // TODO: include Val generating nil, thus capture type
35
33
 
36
34
  // A Nil is an error - should not happen - unify failed
37
35
  // refactor ,make(spec,ctx)
38
- static make = (ctx?: Context, why?: any, av?: Val, bv?: Val) => {
39
- let nil = new Nil({ why }, ctx)
36
+ static make = (ctx?: AontuContext, why?: any, av?: Val, bv?: Val, attempt?: string) => {
37
+ let nil = new NilVal({ why }, ctx)
40
38
 
39
+ nil.attempt = attempt
41
40
  // TODO: this should be done lazily, for multiple terms
42
41
 
43
42
  // Terms later in same file are considered the primary error location.
44
43
  if (null != av) {
45
- nil.row = av.row
46
- nil.col = av.col
47
- nil.url = av.url
44
+ nil.site.row = av.site.row
45
+ nil.site.col = av.site.col
46
+ nil.site.url = av.site.url
48
47
 
49
48
  nil.primary = av
50
49
 
@@ -52,15 +51,15 @@ class Nil extends ValBase {
52
51
  nil.secondary = bv
53
52
 
54
53
  let bv_loc_wins =
55
- (nil.url === bv.url) && (
56
- (nil.row < bv.row) ||
57
- (nil.row === bv.row && nil.col < bv.col)
54
+ (nil.site.url === bv.site.url) && (
55
+ (nil.site.row < bv.site.row) ||
56
+ (nil.site.row === bv.site.row && nil.site.col < bv.site.col)
58
57
  )
59
58
 
60
59
  if (bv_loc_wins) {
61
- nil.row = bv.row
62
- nil.col = bv.col
63
- nil.url = bv.url
60
+ nil.site.row = bv.site.row
61
+ nil.site.col = bv.site.col
62
+ nil.site.url = bv.site.url
64
63
  nil.primary = bv
65
64
  nil.secondary = av
66
65
  }
@@ -68,7 +67,7 @@ class Nil extends ValBase {
68
67
  }
69
68
 
70
69
  if (ctx) {
71
- ctx.err.push(nil)
70
+ ctx.adderr(nil)
72
71
  }
73
72
 
74
73
  return nil
@@ -79,30 +78,33 @@ class Nil extends ValBase {
79
78
  spec?: {
80
79
  why?: string
81
80
  msg?: string
82
- err?: Nil | Nil[] | Error | Error[]
81
+ err?: NilVal | NilVal[] | Error | Error[]
83
82
  } | string,
84
- ctx?: Context
83
+ ctx?: AontuContext
85
84
  ) {
86
85
  super(spec && 'string' !== typeof spec ? spec : {}, ctx)
87
86
 
88
87
  if (spec && 'object' === typeof spec) {
89
88
  this.why = spec?.why
90
89
  this.msg = 'string' === typeof spec?.msg ? spec.msg : this.msg
91
- this.err = spec ? (Array.isArray(spec.err) ? [...spec.err] : [spec.err]) : []
90
+ this.err = spec ?
91
+ Array.isArray(spec.err) ? [...spec.err] :
92
+ null != spec.err ? [spec.err] :
93
+ [] : []
92
94
  }
93
95
 
94
96
  // Nil is always DONE, by definition.
95
- this.done = DONE
97
+ this.dc = DONE
96
98
  }
97
99
 
98
100
 
99
- unify(_peer: Val, _ctx: Context) {
101
+ unify(_peer: Val, _ctx: AontuContext) {
100
102
  return this
101
103
  }
102
104
 
103
105
 
104
- clone(spec?: ValSpec, ctx?: Context): Val {
105
- let out = (super.clone(spec, ctx) as Nil)
106
+ clone(ctx: AontuContext, spec?: ValSpec): Val {
107
+ let out = (super.clone(ctx, spec) as NilVal)
106
108
  out.why = this.why
107
109
 
108
110
  // Should these clone?
@@ -116,29 +118,39 @@ class Nil extends ValBase {
116
118
  }
117
119
 
118
120
 
121
+ // TODO: custom canon? useful for unknown function errors
119
122
  get canon() {
120
123
  return 'nil'
121
124
  }
122
125
 
123
- gen(ctx?: Context) {
126
+
127
+ gen(ctx: AontuContext) {
124
128
  // Unresolved nil cannot be generated, so always an error.
125
129
 
126
- descErr(this, ctx)
130
+ this.why = this.why ?? 'nil_gen'
131
+ ctx.adderr(this)
127
132
 
128
- if (Array.isArray(ctx?.err)) {
129
- ctx.err.push(this)
130
- }
131
- else {
132
- const err: any = new Error(this.msg)
133
- err.aontu = true
133
+ if (!ctx.collect) {
134
+ const err = new AontuError(this.msg, [this])
134
135
  throw err
135
136
  }
136
137
 
137
138
  return undefined
138
139
  }
140
+
141
+
142
+ superior(): Val {
143
+ return this
144
+ }
145
+
146
+
147
+ inspection() {
148
+ return this.why
149
+ }
150
+
139
151
  }
140
152
 
141
153
 
142
154
  export {
143
- Nil,
155
+ NilVal,
144
156
  }
@@ -0,0 +1,38 @@
1
+ /* Copyright (c) 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 { ScalarVal } from './ScalarVal'
14
+ import { Null } from './ScalarKindVal'
15
+
16
+
17
+ class NullVal extends ScalarVal {
18
+ isNull = true
19
+
20
+ constructor(
21
+ spec: ValSpec,
22
+ ctx?: AontuContext
23
+ ) {
24
+ super({ peg: spec.peg, kind: Null }, ctx)
25
+ this.peg = null
26
+ }
27
+
28
+
29
+ unify(peer: Val, ctx: AontuContext): Val {
30
+ return super.unify(peer, ctx)
31
+ }
32
+ }
33
+
34
+
35
+ export {
36
+ NullVal,
37
+ }
38
+
@@ -0,0 +1,75 @@
1
+ /* Copyright (c) 2021-2025 Richard Rodger, MIT License */
2
+
3
+ import type {
4
+ Val,
5
+ ValSpec,
6
+ } from '../type'
7
+
8
+ import {
9
+ AontuContext,
10
+ } from '../ctx'
11
+
12
+ import { makeNilErr, AontuError } from '../err'
13
+
14
+ import { ScalarVal } from './ScalarVal'
15
+
16
+ import {
17
+ explainOpen,
18
+ explainClose,
19
+ } from '../utility'
20
+
21
+
22
+
23
+ class NumberVal extends ScalarVal {
24
+ isNumber = true
25
+
26
+ constructor(
27
+ spec: ValSpec,
28
+ ctx?: AontuContext
29
+ ) {
30
+ if (isNaN(spec.peg)) {
31
+ // TODO: use Nil?
32
+ throw new AontuError('not-number: ' + spec.peg)
33
+ }
34
+
35
+ super({ ...spec, kind: Number }, ctx)
36
+ }
37
+
38
+
39
+ unify(peer: any, ctx: AontuContext): Val {
40
+ const te = ctx.explain && explainOpen(ctx, ctx.explain, 'Number', this, peer)
41
+
42
+ let out: Val = this
43
+
44
+ if (null != peer) {
45
+ if (peer.isScalarKind) {
46
+ out = peer.unify(this, ctx)
47
+ }
48
+ else if (
49
+ peer.isScalar &&
50
+ peer.peg === this.peg
51
+ ) {
52
+ out = peer.isInteger ? peer : this
53
+ }
54
+ else if (peer.isTop) {
55
+ out = this
56
+ }
57
+ else {
58
+ out = makeNilErr(ctx, 'scalar_' +
59
+ ((peer as any).kind === this.kind ? 'value' : 'kind'), this, peer)
60
+ }
61
+ }
62
+ else {
63
+ out = super.unify(peer, ctx)
64
+ }
65
+
66
+ explainClose(te, out)
67
+
68
+ return out
69
+ }
70
+ }
71
+
72
+
73
+ export {
74
+ NumberVal,
75
+ }
@@ -0,0 +1,231 @@
1
+ /* Copyright (c) 2024 Richard Rodger, MIT License */
2
+
3
+
4
+ import type {
5
+ Val,
6
+ ValSpec,
7
+ } from '../type'
8
+
9
+ import {
10
+ DONE,
11
+ } from '../type'
12
+
13
+ import {
14
+ descErr,
15
+ makeNilErr,
16
+ AontuError
17
+ } from '../err'
18
+
19
+ import { AontuContext } from '../ctx'
20
+ import { unite } from '../unify'
21
+
22
+ import {
23
+ explainOpen,
24
+ ec,
25
+ explainClose,
26
+ } from '../utility'
27
+
28
+ import {
29
+ top
30
+ } from './top'
31
+
32
+ import { ConjunctVal } from './ConjunctVal'
33
+ import { FeatureVal } from './FeatureVal'
34
+
35
+
36
+
37
+
38
+ class OpBaseVal extends FeatureVal {
39
+ isPlusOp = true
40
+
41
+ constructor(
42
+ spec: ValSpec,
43
+ ctx?: AontuContext
44
+ ) {
45
+ super(spec, ctx)
46
+ this.peg = []
47
+
48
+ for (let pI = 0; pI < spec.peg.length; pI++) {
49
+ this.append(spec.peg[pI])
50
+ }
51
+ }
52
+
53
+
54
+ append(part: any) {
55
+ this.peg.push(part)
56
+ }
57
+
58
+
59
+ make(ctx: AontuContext, _spec: ValSpec): Val {
60
+ return makeNilErr(ctx, 'op:' + this.opname(), this, undefined, 'make')
61
+ }
62
+
63
+ opname() {
64
+ return 'op'
65
+ }
66
+
67
+
68
+ unify(peer: Val, ctx: AontuContext): Val {
69
+ const te = ctx.explain && explainOpen(ctx, ctx.explain, 'Op:' + this.opname(), this, peer)
70
+ let out: Val = this
71
+
72
+ if (this.id == peer.id) {
73
+ return this
74
+ }
75
+
76
+
77
+ let pegdone = true
78
+ let newpeg: Val[] = []
79
+
80
+ for (let arg of this.peg) {
81
+ if (!arg.done) {
82
+ arg = arg.unify(top(), ctx, ec(te, 'ARG'))
83
+ }
84
+ pegdone &&= arg.done
85
+ newpeg.push(arg)
86
+ }
87
+
88
+ // console.log('OPVAL', this.id, this.opname(), pegdone, newpeg.map(p => p.canon))
89
+
90
+ if (pegdone) {
91
+ let result: Val | undefined = null == ctx ? this : this.operate(ctx, newpeg)
92
+
93
+ result = result || this
94
+
95
+ if (null == result && this.canon === peer.canon) {
96
+ out = this
97
+ }
98
+
99
+ // TODO: should be result.isOp
100
+ else if (result instanceof OpBaseVal) {
101
+ if (peer.isTop) {
102
+ out = this
103
+ }
104
+ // TODO: should peer.isNil
105
+ else if (peer.isNil) {
106
+ out = makeNilErr(ctx, 'op[' + this.peg + ']', this, peer)
107
+ }
108
+
109
+ else if (this.canon === peer.canon) {
110
+ out = this
111
+ }
112
+
113
+ else {
114
+ this.dc = DONE === this.dc ? DONE : this.dc + 1
115
+ out = new ConjunctVal({ peg: [this, peer] }, ctx)
116
+ }
117
+ }
118
+ else {
119
+ out = result.done && peer.isTop ? result :
120
+ unite(ctx.clone({ explain: ec(te, 'RES') }), result, peer, 'op')
121
+ }
122
+
123
+ out.dc = DONE === out.dc ? DONE : this.dc + 1
124
+ }
125
+ else if (peer.isTop) {
126
+ this.notdone()
127
+ out = this.make(ctx, { peg: newpeg })
128
+
129
+ // TODO: make should handle this using ctx?
130
+ out.site.row = this.site.row
131
+ out.site.col = this.site.col
132
+ out.site.url = this.site.url
133
+ out.path = this.path
134
+
135
+ // why += 'top'
136
+ }
137
+ else if (peer.isNil) {
138
+ this.notdone()
139
+ out = peer
140
+ //why += 'nil'
141
+ }
142
+ else {
143
+ this.notdone()
144
+ out = new ConjunctVal({ peg: [this, peer] }, ctx)
145
+
146
+ // TODO: make should handle this using ctx?
147
+ out.site.row = this.site.row
148
+ out.site.col = this.site.col
149
+ out.site.url = this.site.url
150
+ out.path = this.path
151
+ }
152
+
153
+ explainClose(te, out)
154
+
155
+ return out
156
+ }
157
+
158
+
159
+ same(peer: Val): boolean {
160
+ return null == peer ? false : this.peg === peer.peg
161
+ }
162
+
163
+
164
+ clone(ctx: AontuContext, _spec?: ValSpec): Val {
165
+ let out = (super.clone(ctx, {
166
+ peg: this.peg,
167
+ }) as OpBaseVal)
168
+ return out
169
+ }
170
+
171
+
172
+ operate(ctx: AontuContext, _args: Val[]): Val | undefined {
173
+ return makeNilErr(ctx, 'op:' + this.opname(), this, undefined, 'operate')
174
+ }
175
+
176
+
177
+ get canon() {
178
+ return 'op'
179
+ }
180
+
181
+
182
+ primatize(v: any): undefined | null | string | number | boolean {
183
+ const t = typeof v
184
+ if (null == v || 'string' === t || 'number' === t || 'boolean' === t) {
185
+ return v
186
+ }
187
+ else if (v?.isVal) {
188
+ return this.primatize(v.peg)
189
+ }
190
+ else if (v?.toString) {
191
+ return '' + v
192
+ }
193
+ else {
194
+ return undefined
195
+ }
196
+ }
197
+
198
+
199
+ gen(ctx?: AontuContext) {
200
+ // Unresolved op cannot be generated, so always an error.
201
+ let nil = makeNilErr(
202
+ ctx,
203
+ 'op',
204
+ this,
205
+ undefined
206
+ )
207
+
208
+ // TODO: refactor to use Site
209
+ nil.path = this.path
210
+ nil.site.url = this.site.url
211
+ nil.site.row = this.site.row
212
+ nil.site.col = this.site.col
213
+
214
+ descErr(nil, ctx)
215
+
216
+ if (ctx) {
217
+ // ctx.err.push(nil)
218
+ ctx.adderr(nil)
219
+ }
220
+ else {
221
+ throw new AontuError(nil.msg)
222
+ }
223
+
224
+ return undefined
225
+ }
226
+ }
227
+
228
+
229
+ export {
230
+ OpBaseVal,
231
+ }
@@ -0,0 +1,60 @@
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
+
16
+ import { FuncBaseVal } from './FuncBaseVal'
17
+ import { NilVal } from '../val/NilVal'
18
+ import { BagVal } from '../val/BagVal'
19
+
20
+
21
+ class OpenFuncVal extends FuncBaseVal {
22
+ isOpenFunc = true
23
+
24
+ constructor(
25
+ spec: ValSpec,
26
+ ctx?: AontuContext
27
+ ) {
28
+ super(spec, ctx)
29
+ }
30
+
31
+
32
+ make(_ctx: AontuContext, spec: ValSpec): Val {
33
+ return new OpenFuncVal(spec)
34
+ }
35
+
36
+ funcname() {
37
+ return 'open'
38
+ }
39
+
40
+
41
+ resolve(ctx: AontuContext | undefined, args: Val[]) {
42
+ const argval: any = args[0]
43
+
44
+ if (null == argval) {
45
+ return makeNilErr(ctx, 'no_first_arg', this, undefined, 'close')
46
+ }
47
+
48
+ if (argval.isMap || argval.isList) {
49
+ (argval as BagVal).closed = false
50
+ }
51
+
52
+ return argval
53
+ }
54
+
55
+ }
56
+
57
+
58
+ export {
59
+ OpenFuncVal,
60
+ }