aontu 0.40.0 → 0.42.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.
- package/dist/aontu.js +7 -0
- package/dist/aontu.js.map +1 -1
- package/dist/ctx.d.ts +14 -2
- package/dist/ctx.js +56 -9
- package/dist/ctx.js.map +1 -1
- package/dist/err.js +36 -15
- package/dist/err.js.map +1 -1
- package/dist/lang.d.ts +5 -1
- package/dist/lang.js +100 -24
- package/dist/lang.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/type.d.ts +5 -0
- package/dist/type.js.map +1 -1
- package/dist/unify.js +372 -55
- package/dist/unify.js.map +1 -1
- package/dist/utility.js +6 -2
- package/dist/utility.js.map +1 -1
- package/dist/val/BagVal.d.ts +0 -3
- package/dist/val/BagVal.js +6 -6
- package/dist/val/BagVal.js.map +1 -1
- package/dist/val/ConjunctVal.d.ts +1 -1
- package/dist/val/ConjunctVal.js +138 -15
- package/dist/val/ConjunctVal.js.map +1 -1
- package/dist/val/CopyFuncVal.js +3 -2
- package/dist/val/CopyFuncVal.js.map +1 -1
- package/dist/val/DisjunctVal.js +40 -10
- package/dist/val/DisjunctVal.js.map +1 -1
- package/dist/val/ExpectVal.js +17 -4
- package/dist/val/ExpectVal.js.map +1 -1
- package/dist/val/FuncBaseVal.js +2 -2
- package/dist/val/FuncBaseVal.js.map +1 -1
- package/dist/val/IntegerVal.js +1 -1
- package/dist/val/IntegerVal.js.map +1 -1
- package/dist/val/JunctionVal.d.ts +1 -0
- package/dist/val/JunctionVal.js +6 -1
- package/dist/val/JunctionVal.js.map +1 -1
- package/dist/val/KeyFuncVal.js +0 -2
- package/dist/val/KeyFuncVal.js.map +1 -1
- package/dist/val/ListVal.d.ts +1 -0
- package/dist/val/ListVal.js +36 -65
- package/dist/val/ListVal.js.map +1 -1
- package/dist/val/MapVal.d.ts +3 -2
- package/dist/val/MapVal.js +71 -91
- package/dist/val/MapVal.js.map +1 -1
- package/dist/val/MoveFuncVal.d.ts +2 -1
- package/dist/val/MoveFuncVal.js +78 -13
- package/dist/val/MoveFuncVal.js.map +1 -1
- package/dist/val/NilVal.d.ts +2 -1
- package/dist/val/NilVal.js +15 -1
- package/dist/val/NilVal.js.map +1 -1
- package/dist/val/OpBaseVal.js +1 -1
- package/dist/val/OpBaseVal.js.map +1 -1
- package/dist/val/PathFuncVal.js +25 -4
- package/dist/val/PathFuncVal.js.map +1 -1
- package/dist/val/{RefVal.d.ts → PathVal.d.ts} +4 -3
- package/dist/val/{RefVal.js → PathVal.js} +75 -77
- package/dist/val/PathVal.js.map +1 -0
- package/dist/val/PlusOpVal.d.ts +1 -1
- package/dist/val/PrefVal.js +20 -7
- package/dist/val/PrefVal.js.map +1 -1
- package/dist/val/SpreadVal.d.ts +20 -0
- package/dist/val/SpreadVal.js +194 -0
- package/dist/val/SpreadVal.js.map +1 -0
- package/dist/val/Val.d.ts +4 -1
- package/dist/val/Val.js +88 -44
- package/dist/val/Val.js.map +1 -1
- package/dist/val/VarVal.js +3 -3
- package/dist/val/VarVal.js.map +1 -1
- package/package.json +6 -7
- package/src/aontu.ts +9 -1
- package/src/ctx.ts +95 -11
- package/src/err.ts +37 -17
- package/src/lang.ts +113 -23
- package/src/tsconfig.json +2 -1
- package/src/type.ts +5 -0
- package/src/unify.ts +390 -64
- package/src/utility.ts +5 -2
- package/src/val/BagVal.ts +6 -7
- package/src/val/ConjunctVal.ts +133 -15
- package/src/val/CopyFuncVal.ts +3 -2
- package/src/val/DisjunctVal.ts +43 -11
- package/src/val/ExpectVal.ts +19 -5
- package/src/val/FuncBaseVal.ts +2 -2
- package/src/val/IntegerVal.ts +1 -1
- package/src/val/JunctionVal.ts +5 -1
- package/src/val/KeyFuncVal.ts +0 -3
- package/src/val/ListVal.ts +40 -86
- package/src/val/MapVal.ts +78 -119
- package/src/val/MoveFuncVal.ts +79 -14
- package/src/val/NilVal.ts +17 -1
- package/src/val/OpBaseVal.ts +1 -1
- package/src/val/PathFuncVal.ts +29 -4
- package/src/val/PathVal.ts +435 -0
- package/src/val/PrefVal.ts +21 -8
- package/src/val/{RefVal.ts → RefVal.ts.old} +31 -20
- package/src/val/SpreadVal.ts +275 -0
- package/src/val/Val.ts +141 -50
- package/src/val/VarVal.ts +3 -3
- package/dist/val/RefVal.js.map +0 -1
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
/* Copyright (c) 2025 Richard Rodger, MIT License */
|
|
2
|
+
|
|
3
|
+
// SpreadVal represents a spread constraint (&:{...}).
|
|
4
|
+
// It owns all spread application logic — MapVal and ListVal know
|
|
5
|
+
// nothing about spreads. A parsed `{a:1, &:{x:2}}` becomes
|
|
6
|
+
// `ConjunctVal([MapVal({a:1}), SpreadVal({x:2})])`.
|
|
7
|
+
//
|
|
8
|
+
// SpreadVal.unify applies the constraint to a peer MapVal/ListVal
|
|
9
|
+
// by unifying each of the peer's children with a per-key clone of
|
|
10
|
+
// the spread constraint.
|
|
11
|
+
|
|
12
|
+
import type {
|
|
13
|
+
Val,
|
|
14
|
+
ValSpec,
|
|
15
|
+
} from '../type'
|
|
16
|
+
|
|
17
|
+
import {
|
|
18
|
+
DONE,
|
|
19
|
+
} from '../type'
|
|
20
|
+
|
|
21
|
+
import { AontuContext } from '../ctx'
|
|
22
|
+
import { unite } from '../unify'
|
|
23
|
+
|
|
24
|
+
import {
|
|
25
|
+
propagateMarks,
|
|
26
|
+
walk,
|
|
27
|
+
explainOpen,
|
|
28
|
+
ec,
|
|
29
|
+
explainClose,
|
|
30
|
+
} from '../utility'
|
|
31
|
+
|
|
32
|
+
import { makeNilErr } from '../err'
|
|
33
|
+
|
|
34
|
+
import {
|
|
35
|
+
top
|
|
36
|
+
} from './top'
|
|
37
|
+
|
|
38
|
+
import { FeatureVal } from './FeatureVal'
|
|
39
|
+
import { ConjunctVal } from './ConjunctVal'
|
|
40
|
+
import { NilVal } from './NilVal'
|
|
41
|
+
import { MapVal } from './MapVal'
|
|
42
|
+
import { ListVal } from './ListVal'
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class SpreadVal extends FeatureVal {
|
|
46
|
+
isSpread = true
|
|
47
|
+
isGenable = true
|
|
48
|
+
cjo = 110000 // Sorts after MapVal/ListVal in ConjunctVal norm
|
|
49
|
+
|
|
50
|
+
constructor(spec: ValSpec, ctx?: AontuContext) {
|
|
51
|
+
super(spec, ctx)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
unify(peer: Val, ctx: AontuContext): Val {
|
|
56
|
+
peer = peer ?? top()
|
|
57
|
+
|
|
58
|
+
const te = ctx.explain && explainOpen(ctx, ctx.explain, 'Spread', this, peer)
|
|
59
|
+
|
|
60
|
+
let out: Val
|
|
61
|
+
|
|
62
|
+
if (peer.isTop) {
|
|
63
|
+
// Self-unify: spread is a constraint, not a value that converges.
|
|
64
|
+
// Mark done to prevent fixpoint cycling.
|
|
65
|
+
out = this
|
|
66
|
+
out.dc = DONE
|
|
67
|
+
}
|
|
68
|
+
else if ((peer as any).isSpread) {
|
|
69
|
+
// SpreadVal + SpreadVal: unify the two constraints
|
|
70
|
+
const merged = unite(
|
|
71
|
+
te ? ctx.clone({ explain: ec(te, 'SPR') }) : ctx,
|
|
72
|
+
this.peg, peer.peg, 'spread-merge')
|
|
73
|
+
out = new SpreadVal({ peg: merged }, ctx)
|
|
74
|
+
out.dc = merged.done ? DONE : this.dc + 1
|
|
75
|
+
}
|
|
76
|
+
else if (peer.isMap) {
|
|
77
|
+
// SpreadVal + MapVal: apply spread to each map key
|
|
78
|
+
out = this.applyToMap(peer as any, ctx, te)
|
|
79
|
+
}
|
|
80
|
+
else if (peer.isList) {
|
|
81
|
+
// SpreadVal + ListVal: apply spread to each list element
|
|
82
|
+
out = this.applyToList(peer as any, ctx, te)
|
|
83
|
+
}
|
|
84
|
+
else if (peer.isConjunct) {
|
|
85
|
+
// SpreadVal + ConjunctVal: unify with the conjunct.
|
|
86
|
+
// The conjunct fold will place us last (high cjo).
|
|
87
|
+
out = peer.unify(this, te ? ctx.clone({ explain: ec(te, 'SCJ') }) : ctx)
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
// SpreadVal + other: defer by wrapping in ConjunctVal
|
|
91
|
+
out = new ConjunctVal({ peg: [peer, this] }, ctx)
|
|
92
|
+
out.dc = this.dc + 1
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Track unresolved spread count.
|
|
96
|
+
// cc=0: increment for spreads that don't vanish.
|
|
97
|
+
// cc>0: decrement when a spread vanishes.
|
|
98
|
+
if (0 === ctx.cc) {
|
|
99
|
+
if (out.isSpread && !out.done) {
|
|
100
|
+
ctx.sc++
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else if (ctx.sc > 0) {
|
|
104
|
+
if (!(out.isSpread && !out.done)) {
|
|
105
|
+
ctx.sc--
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
ctx.explain && explainClose(te, out)
|
|
110
|
+
return out
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
// Apply this spread constraint to each key in a MapVal.
|
|
115
|
+
// Uses unite() per key with the correct descended context.
|
|
116
|
+
applyToMap(map: MapVal, ctx: AontuContext, te: any): Val {
|
|
117
|
+
const spread = this.peg
|
|
118
|
+
|
|
119
|
+
const mapKeys = Object.keys(map.peg)
|
|
120
|
+
|
|
121
|
+
// If map has no keys, preserve the spread for future merges.
|
|
122
|
+
// Mark as DONE to prevent fixpoint cycling.
|
|
123
|
+
if (mapKeys.length === 0) {
|
|
124
|
+
const out = new ConjunctVal({ peg: [map, this] }, ctx)
|
|
125
|
+
out.dc = DONE
|
|
126
|
+
return out
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const out = new MapVal({ peg: {} }, ctx)
|
|
130
|
+
out.closed = map.closed
|
|
131
|
+
out.optionalKeys = 0 < map.optionalKeys.length
|
|
132
|
+
? [...map.optionalKeys] : map.optionalKeys
|
|
133
|
+
out.site = map.site
|
|
134
|
+
|
|
135
|
+
let done = true
|
|
136
|
+
|
|
137
|
+
for (const key of mapKeys) {
|
|
138
|
+
const child = map.peg[key]
|
|
139
|
+
const keyctx = ctx.descend(key)
|
|
140
|
+
// Clone the spread for this key's context, then resolve any
|
|
141
|
+
// path-dependent functions (key(), path(), etc.) by unifying
|
|
142
|
+
// with TOP. This ensures the spread values are concrete before
|
|
143
|
+
// being merged as peer keys into the child map.
|
|
144
|
+
let key_spread = spread.spreadClone(keyctx)
|
|
145
|
+
if (!key_spread.done) {
|
|
146
|
+
key_spread = unite(keyctx, key_spread, top(), 'spread-resolve')
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Clear type marks on the spread constraint root and its
|
|
150
|
+
// direct children — type() constrains but should not mark
|
|
151
|
+
// children as type-invisible.
|
|
152
|
+
key_spread.mark.type = false
|
|
153
|
+
key_spread.mark.hide = false
|
|
154
|
+
if (key_spread.isMap) {
|
|
155
|
+
for (const k in key_spread.peg) {
|
|
156
|
+
if (key_spread.peg[k]?.isVal) {
|
|
157
|
+
key_spread.peg[k].mark.type = false
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
propagateMarks(map, child)
|
|
163
|
+
|
|
164
|
+
out.peg[key] =
|
|
165
|
+
undefined === child ? key_spread :
|
|
166
|
+
child.isNil ? child :
|
|
167
|
+
key_spread.isNil ? key_spread :
|
|
168
|
+
key_spread.isTop && child.done ? child :
|
|
169
|
+
child.isTop && key_spread.done ? key_spread :
|
|
170
|
+
unite(te ? keyctx.clone({ explain: ec(te, 'SK:' + key) }) : keyctx,
|
|
171
|
+
child, key_spread, 'spread-apply')
|
|
172
|
+
|
|
173
|
+
done = done && (DONE === out.peg[key].dc)
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
out.dc = done ? DONE : map.dc + 1
|
|
177
|
+
|
|
178
|
+
propagateMarks(map, out)
|
|
179
|
+
// NOTE: do not propagate type/hide marks from the spread constraint
|
|
180
|
+
// to the output — a type spread constrains children but doesn't
|
|
181
|
+
// make them type-invisible.
|
|
182
|
+
|
|
183
|
+
return out
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
// Apply this spread constraint to each element in a ListVal.
|
|
188
|
+
applyToList(list: ListVal, ctx: AontuContext, te: any): Val {
|
|
189
|
+
const spread = this.peg
|
|
190
|
+
|
|
191
|
+
const listKeys = Object.keys(list.peg)
|
|
192
|
+
|
|
193
|
+
if (listKeys.length === 0) {
|
|
194
|
+
const out = new ConjunctVal({ peg: [list, this] }, ctx)
|
|
195
|
+
out.dc = DONE
|
|
196
|
+
return out
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
const out = new ListVal({ peg: [] }, ctx)
|
|
200
|
+
out.closed = list.closed
|
|
201
|
+
out.optionalKeys = 0 < list.optionalKeys.length
|
|
202
|
+
? [...list.optionalKeys] : list.optionalKeys
|
|
203
|
+
out.site = list.site
|
|
204
|
+
|
|
205
|
+
let done = true
|
|
206
|
+
|
|
207
|
+
for (const key of listKeys) {
|
|
208
|
+
const child = list.peg[key]
|
|
209
|
+
const keyctx = ctx.descend(key)
|
|
210
|
+
const key_spread = spread.spreadClone(keyctx)
|
|
211
|
+
|
|
212
|
+
propagateMarks(list, child)
|
|
213
|
+
|
|
214
|
+
out.peg[key as any] =
|
|
215
|
+
undefined === child ? key_spread :
|
|
216
|
+
child.isNil ? child :
|
|
217
|
+
key_spread.isNil ? key_spread :
|
|
218
|
+
key_spread.isTop && child.done ? child :
|
|
219
|
+
child.isTop && key_spread.done ? key_spread :
|
|
220
|
+
unite(te ? keyctx.clone({ explain: ec(te, 'SL:' + key) }) : keyctx,
|
|
221
|
+
child, key_spread, 'spread-apply-list')
|
|
222
|
+
|
|
223
|
+
done = done && (DONE === out.peg[key as any]?.dc)
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
out.dc = done ? DONE : list.dc + 1
|
|
227
|
+
|
|
228
|
+
propagateMarks(list, out)
|
|
229
|
+
|
|
230
|
+
return out
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
clone(ctx: AontuContext, spec?: ValSpec): Val {
|
|
235
|
+
const out = new SpreadVal({
|
|
236
|
+
peg: this.peg.clone(ctx, spec),
|
|
237
|
+
...(spec || {}),
|
|
238
|
+
}, ctx)
|
|
239
|
+
out.dc = this.done ? DONE : out.dc
|
|
240
|
+
out.site = this.site
|
|
241
|
+
return out
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
spreadClone(ctx: AontuContext): Val {
|
|
246
|
+
if (!this.isPathDependent) return this
|
|
247
|
+
return this.clone(ctx)
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
get canon(): string {
|
|
252
|
+
// Use {&:...} for map spreads, [&:...] for list spreads, {&:X} for scalars
|
|
253
|
+
const pc = this.peg.canon
|
|
254
|
+
if (this.peg.isMap) return '{&:' + pc.slice(1, -1) + '}' // {&:k:v,...}
|
|
255
|
+
if (this.peg.isList) return '[&:' + pc.slice(1, -1) + ']' // [&:v,...]
|
|
256
|
+
return '{&:' + pc + '}'
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
gen(_ctx: AontuContext) {
|
|
261
|
+
// Unresolved spread (never applied to a map/list) generates
|
|
262
|
+
// as undefined — the spread is a constraint, not a value.
|
|
263
|
+
return undefined
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
inspection() {
|
|
268
|
+
return 'spread'
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
export {
|
|
274
|
+
SpreadVal,
|
|
275
|
+
}
|
package/src/val/Val.ts
CHANGED
|
@@ -58,47 +58,51 @@ let ID = 1000
|
|
|
58
58
|
|
|
59
59
|
|
|
60
60
|
abstract class Val {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
61
|
+
// Type-discriminator flags: defaults live on Val.prototype (see
|
|
62
|
+
// bottom of this file). Each subclass overrides only its own
|
|
63
|
+
// discriminator(s), so a plain Val instance writes zero flags.
|
|
64
|
+
declare isVal: boolean
|
|
65
|
+
|
|
66
|
+
declare isTop: boolean
|
|
67
|
+
declare isNil: boolean
|
|
68
|
+
declare isMap: boolean
|
|
69
|
+
declare isList: boolean
|
|
70
|
+
declare isScalar: boolean
|
|
71
|
+
declare isScalarKind: boolean
|
|
72
|
+
declare isPath: boolean
|
|
73
|
+
declare isPref: boolean
|
|
74
|
+
declare isVar: boolean
|
|
75
|
+
declare isBag: boolean
|
|
76
|
+
declare isSpread: boolean
|
|
77
|
+
declare isNumber: boolean
|
|
78
|
+
declare isInteger: boolean
|
|
79
|
+
declare isString: boolean
|
|
80
|
+
declare isBoolean: boolean
|
|
81
|
+
declare isConjunct: boolean
|
|
82
|
+
declare isDisjunct: boolean
|
|
83
|
+
declare isJunction: boolean
|
|
80
84
|
|
|
81
85
|
// Conjunct sort order. Lower values sort first in norm().
|
|
82
|
-
cjo
|
|
83
|
-
|
|
84
|
-
isOp
|
|
85
|
-
isPlusOp
|
|
86
|
-
|
|
87
|
-
isFunc
|
|
88
|
-
isCloseFunc
|
|
89
|
-
isCopyFunc
|
|
90
|
-
isHideFunc
|
|
91
|
-
isMoveFunc
|
|
92
|
-
isKeyFunc
|
|
93
|
-
isLowerFunc
|
|
94
|
-
isOpenFunc
|
|
95
|
-
isPathFunc
|
|
96
|
-
isPrefFunc
|
|
97
|
-
isSuperFunc
|
|
98
|
-
isTypeFunc
|
|
99
|
-
isUpperFunc
|
|
100
|
-
|
|
101
|
-
isGenable
|
|
86
|
+
declare cjo: number
|
|
87
|
+
|
|
88
|
+
declare isOp: boolean
|
|
89
|
+
declare isPlusOp: boolean
|
|
90
|
+
|
|
91
|
+
declare isFunc: boolean
|
|
92
|
+
declare isCloseFunc: boolean
|
|
93
|
+
declare isCopyFunc: boolean
|
|
94
|
+
declare isHideFunc: boolean
|
|
95
|
+
declare isMoveFunc: boolean
|
|
96
|
+
declare isKeyFunc: boolean
|
|
97
|
+
declare isLowerFunc: boolean
|
|
98
|
+
declare isOpenFunc: boolean
|
|
99
|
+
declare isPathFunc: boolean
|
|
100
|
+
declare isPrefFunc: boolean
|
|
101
|
+
declare isSuperFunc: boolean
|
|
102
|
+
declare isTypeFunc: boolean
|
|
103
|
+
declare isUpperFunc: boolean
|
|
104
|
+
|
|
105
|
+
declare isGenable: boolean
|
|
102
106
|
|
|
103
107
|
id: number
|
|
104
108
|
dc: number = 0
|
|
@@ -147,11 +151,16 @@ abstract class Val {
|
|
|
147
151
|
|
|
148
152
|
if (Array.isArray(this.peg)) {
|
|
149
153
|
let spread = (this.peg as any)[SPREAD]
|
|
150
|
-
|
|
151
|
-
|
|
154
|
+
if (this.peg.includes(undefined)) {
|
|
155
|
+
this.peg = this.peg.filter(n => undefined !== n)
|
|
156
|
+
}
|
|
157
|
+
;(this.peg as any)[SPREAD] = spread
|
|
152
158
|
}
|
|
153
159
|
|
|
154
|
-
|
|
160
|
+
// spec.path takes precedence over ctx.path: lets callers (notably
|
|
161
|
+
// Val.clone) specify the target path without paying for a full
|
|
162
|
+
// ctx.clone just to carry it.
|
|
163
|
+
this.path = spec?.path ?? ctx?.path ?? []
|
|
155
164
|
|
|
156
165
|
// TODO: make this work
|
|
157
166
|
// this.id = spec?.id ?? (ctx ? ++ctx.vc : ++ID)
|
|
@@ -180,27 +189,26 @@ abstract class Val {
|
|
|
180
189
|
|
|
181
190
|
|
|
182
191
|
clone(ctx: AontuContext, spec?: ValSpec): Val {
|
|
183
|
-
let cloneCtx
|
|
184
|
-
|
|
185
192
|
let path = spec?.path
|
|
186
193
|
if (null == path) {
|
|
187
194
|
let cut = this.path.indexOf('&')
|
|
188
195
|
cut = -1 < cut ? cut + 1 : ctx.path.length
|
|
189
196
|
path = ctx.path.concat(this.path.slice(cut))
|
|
190
197
|
}
|
|
191
|
-
// console.log('CLONE', path, this.canon)
|
|
192
|
-
// console.trace()
|
|
193
|
-
|
|
194
|
-
cloneCtx = ctx.clone({ path })
|
|
195
198
|
|
|
199
|
+
// Carry the target path via the spec instead of cloning ctx just
|
|
200
|
+
// to hold it: the Val constructor now reads spec.path first. This
|
|
201
|
+
// saves ~120k ctx.clone calls (two Object.create each) on a
|
|
202
|
+
// foo-sdk-sized model.
|
|
196
203
|
let fullspec = {
|
|
197
204
|
peg: this.peg,
|
|
198
205
|
mark: { type: this.mark.type, hide: this.mark.hide },
|
|
199
|
-
...(spec ?? {})
|
|
206
|
+
...(spec ?? {}),
|
|
207
|
+
path,
|
|
200
208
|
}
|
|
201
209
|
|
|
202
210
|
let out = new (this as any)
|
|
203
|
-
.constructor(fullspec,
|
|
211
|
+
.constructor(fullspec, ctx)
|
|
204
212
|
|
|
205
213
|
out.dc = this.done ? DONE : out.dc
|
|
206
214
|
|
|
@@ -224,6 +232,38 @@ abstract class Val {
|
|
|
224
232
|
}
|
|
225
233
|
|
|
226
234
|
|
|
235
|
+
// True if this Val's unification result depends on its own `path`
|
|
236
|
+
// — i.e. the tree contains a RefVal, KeyFuncVal, PathFuncVal,
|
|
237
|
+
// MoveFuncVal, or SuperFuncVal. Used by MapVal/ListVal.spreadClone
|
|
238
|
+
// to share the spread constraint across keys when it's safe.
|
|
239
|
+
// Lazy + cached: the answer is a function of the Val's immutable
|
|
240
|
+
// structure, so we compute once per Val.
|
|
241
|
+
_isPathDependent?: boolean
|
|
242
|
+
get isPathDependent(): boolean {
|
|
243
|
+
if (this._isPathDependent !== undefined) return this._isPathDependent
|
|
244
|
+
let dep =
|
|
245
|
+
this.isPath || this.isKeyFunc || this.isPathFunc ||
|
|
246
|
+
this.isMoveFunc || this.isSuperFunc
|
|
247
|
+
if (!dep) {
|
|
248
|
+
const peg = this.peg
|
|
249
|
+
if (Array.isArray(peg)) {
|
|
250
|
+
for (let i = 0; i < peg.length; i++) {
|
|
251
|
+
const c = peg[i]
|
|
252
|
+
if (c && c.isVal && c.isPathDependent) { dep = true; break }
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
else if (peg != null && typeof peg === 'object') {
|
|
256
|
+
for (const k in peg) {
|
|
257
|
+
const c = (peg as any)[k]
|
|
258
|
+
if (c && c.isVal && c.isPathDependent) { dep = true; break }
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
this._isPathDependent = dep
|
|
263
|
+
return dep
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
|
|
227
267
|
place(v: Val) {
|
|
228
268
|
v.site.row = this.site.row
|
|
229
269
|
v.site.col = this.site.col
|
|
@@ -311,6 +351,57 @@ abstract class Val {
|
|
|
311
351
|
}
|
|
312
352
|
|
|
313
353
|
|
|
354
|
+
// Prototype-level defaults for Val's type-discriminator flags.
|
|
355
|
+
// Keeping these on the prototype (instead of per-instance class-field
|
|
356
|
+
// initializers) removes ~35 property writes from every Val construction
|
|
357
|
+
// and eliminates the corresponding hidden-class transitions. Subclasses
|
|
358
|
+
// override only the flags that differ, via their own class-field
|
|
359
|
+
// initializers (e.g. `MapVal.isMap = true`).
|
|
360
|
+
Object.assign(Val.prototype, {
|
|
361
|
+
isVal: true,
|
|
362
|
+
|
|
363
|
+
isTop: false,
|
|
364
|
+
isNil: false,
|
|
365
|
+
isMap: false,
|
|
366
|
+
isList: false,
|
|
367
|
+
isScalar: false,
|
|
368
|
+
isScalarKind: false,
|
|
369
|
+
isPath: false,
|
|
370
|
+
isPref: false,
|
|
371
|
+
isVar: false,
|
|
372
|
+
isBag: false,
|
|
373
|
+
isSpread: false,
|
|
374
|
+
isNumber: false,
|
|
375
|
+
isInteger: false,
|
|
376
|
+
isString: false,
|
|
377
|
+
isBoolean: false,
|
|
378
|
+
isConjunct: false,
|
|
379
|
+
isDisjunct: false,
|
|
380
|
+
isJunction: false,
|
|
381
|
+
|
|
382
|
+
cjo: 99999,
|
|
383
|
+
|
|
384
|
+
isOp: false,
|
|
385
|
+
isPlusOp: false,
|
|
386
|
+
|
|
387
|
+
isFunc: false,
|
|
388
|
+
isCloseFunc: false,
|
|
389
|
+
isCopyFunc: false,
|
|
390
|
+
isHideFunc: false,
|
|
391
|
+
isMoveFunc: false,
|
|
392
|
+
isKeyFunc: false,
|
|
393
|
+
isLowerFunc: false,
|
|
394
|
+
isOpenFunc: false,
|
|
395
|
+
isPathFunc: false,
|
|
396
|
+
isPrefFunc: false,
|
|
397
|
+
isSuperFunc: false,
|
|
398
|
+
isTypeFunc: false,
|
|
399
|
+
isUpperFunc: false,
|
|
400
|
+
|
|
401
|
+
isGenable: false,
|
|
402
|
+
})
|
|
403
|
+
|
|
404
|
+
|
|
314
405
|
function inspectpeg(peg: any, d: number) {
|
|
315
406
|
const indent = ' '.repeat(d)
|
|
316
407
|
return pretty(Array.isArray(peg) ?
|
package/src/val/VarVal.ts
CHANGED
|
@@ -62,12 +62,12 @@ class VarVal extends FeatureVal {
|
|
|
62
62
|
if (this.peg.isVal) {
|
|
63
63
|
// $.a.b.c - convert path to absolute
|
|
64
64
|
// if (this.peg instanceof RefVal) {
|
|
65
|
-
if (this.peg.
|
|
65
|
+
if (this.peg.isPath) {
|
|
66
66
|
this.peg.absolute = true
|
|
67
67
|
nameVal = this.peg
|
|
68
68
|
}
|
|
69
69
|
else {
|
|
70
|
-
nameVal = this.peg.unify(peer, ctx.clone({ explain: ec(te, 'PEG') }))
|
|
70
|
+
nameVal = this.peg.unify(peer, te ? ctx.clone({ explain: ec(te, 'PEG') }) : ctx)
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
73
|
else {
|
|
@@ -76,7 +76,7 @@ class VarVal extends FeatureVal {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
// if (!(nameVal instanceof RefVal) && DONE === nameVal.dc) {
|
|
79
|
-
if (!(nameVal.
|
|
79
|
+
if (!(nameVal.isPath) && DONE === nameVal.dc) {
|
|
80
80
|
if (nameVal instanceof StringVal) {
|
|
81
81
|
let found = ctx.vars[nameVal.peg]
|
|
82
82
|
if (undefined === found) {
|
package/dist/val/RefVal.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RefVal.js","sourceRoot":"","sources":["../../src/val/RefVal.ts"],"names":[],"mappings":"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"}
|