aontu 0.21.1 → 0.23.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/aontu.ts +1 -12
- package/dist/aontu.js +3 -13
- package/dist/aontu.js.map +1 -1
- package/dist/aontu.min.js +64 -1
- package/dist/aontu.min.js.tmp-browserify-24272745041996834914 +0 -0
- package/dist/lib/err.js +3 -3
- package/dist/lib/err.js.map +1 -1
- package/dist/lib/lang.js +25 -10
- package/dist/lib/lang.js.map +1 -1
- package/dist/lib/type.d.ts +1 -0
- package/dist/lib/type.js.map +1 -1
- package/dist/lib/unify.js +1 -0
- package/dist/lib/unify.js.map +1 -1
- package/dist/lib/utility.js +1 -2
- package/dist/lib/utility.js.map +1 -1
- package/dist/lib/val/ConjunctVal.js +2 -2
- package/dist/lib/val/ConjunctVal.js.map +1 -1
- package/dist/lib/val/MapVal.js +18 -9
- package/dist/lib/val/MapVal.js.map +1 -1
- package/dist/lib/val/OpVal.d.ts +17 -0
- package/dist/lib/val/OpVal.js +89 -0
- package/dist/lib/val/OpVal.js.map +1 -0
- package/dist/lib/val/PlusVal.d.ts +12 -0
- package/dist/lib/val/PlusVal.js +32 -0
- package/dist/lib/val/PlusVal.js.map +1 -0
- package/dist/lib/val/RefVal.js +23 -15
- package/dist/lib/val/RefVal.js.map +1 -1
- package/dist/lib/val/ValBase.d.ts +1 -0
- package/dist/lib/val/ValBase.js +13 -6
- package/dist/lib/val/ValBase.js.map +1 -1
- package/lib/err.ts +3 -1
- package/lib/lang.ts +33 -7
- package/lib/type.ts +1 -0
- package/lib/unify.ts +2 -0
- package/lib/val/MapVal.ts +26 -12
- package/lib/val/OpVal.ts +159 -0
- package/lib/val/OpVal.ts~ +158 -0
- package/lib/val/PlusVal.ts +76 -0
- package/lib/val/PlusVal.ts~ +158 -0
- package/lib/val/RefVal.ts +33 -17
- package/lib/val/ValBase.ts +16 -5
- package/package.json +11 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RefVal.js","sourceRoot":"","sources":["../../../lib/val/RefVal.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;AAoBzD,kCAEgB;AAEhB,gCAEe;AAMf,iCAEiB;AAEjB,gCAGe;AAGf,oDAAgD;AAChD,
|
|
1
|
+
{"version":3,"file":"RefVal.js","sourceRoot":"","sources":["../../../lib/val/RefVal.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/val/ValBase.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/* Copyright (c) 2021-
|
|
2
|
+
/* Copyright (c) 2021-2024 Richard Rodger, MIT License */
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.ValBase = void 0;
|
|
5
5
|
const lang_1 = require("../lang");
|
|
6
|
+
let ID = 0;
|
|
6
7
|
class ValBase {
|
|
7
|
-
// deps?: any
|
|
8
8
|
constructor(spec, ctx) {
|
|
9
9
|
this.isVal = true;
|
|
10
10
|
this.done = 0;
|
|
@@ -19,15 +19,22 @@ class ValBase {
|
|
|
19
19
|
this.err = [];
|
|
20
20
|
this.peg = spec === null || spec === void 0 ? void 0 : spec.peg;
|
|
21
21
|
this.path = (ctx === null || ctx === void 0 ? void 0 : ctx.path) || [];
|
|
22
|
-
this.id = (9e9 + Math.floor(Math.random() * (1e9)))
|
|
22
|
+
// this.id = (9e9 + Math.floor(Math.random() * (1e9)))
|
|
23
|
+
this.id = ++ID; // (9e9 + Math.floor(Math.random() * (1e5)))
|
|
24
|
+
this.uh = [];
|
|
23
25
|
}
|
|
24
26
|
same(peer) {
|
|
25
27
|
return null == peer ? false : this.id === peer.id;
|
|
26
28
|
}
|
|
27
29
|
clone(spec, ctx) {
|
|
28
|
-
let cloneCtx
|
|
29
|
-
|
|
30
|
-
|
|
30
|
+
let cloneCtx;
|
|
31
|
+
if (ctx) {
|
|
32
|
+
let cut = this.path.indexOf('&');
|
|
33
|
+
cut = -1 < cut ? cut + 1 : ctx.path.length;
|
|
34
|
+
cloneCtx = ctx.clone({
|
|
35
|
+
path: ctx.path.concat(this.path.slice(cut))
|
|
36
|
+
});
|
|
37
|
+
}
|
|
31
38
|
let out = new this
|
|
32
39
|
.constructor(spec || { peg: this.peg }, cloneCtx);
|
|
33
40
|
if (null == cloneCtx) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ValBase.js","sourceRoot":"","sources":["../../../lib/val/ValBase.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;AAezD,kCAEgB;
|
|
1
|
+
{"version":3,"file":"ValBase.js","sourceRoot":"","sources":["../../../lib/val/ValBase.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;AAezD,kCAEgB;AAGhB,IAAI,EAAE,GAAG,CAAC,CAAA;AAGV,MAAM,OAAO;IAsBX,YAAY,IAAa,EAAE,GAAa;QArBxC,UAAK,GAAG,IAAI,CAAA;QAGZ,SAAI,GAAW,CAAC,CAAA;QAChB,SAAI,GAAa,EAAE,CAAA;QACnB,QAAG,GAAW,CAAC,CAAC,CAAA;QAChB,QAAG,GAAW,CAAC,CAAC,CAAA;QAChB,QAAG,GAAW,EAAE,CAAA;QAEhB,QAAG,GAAY,KAAK,CAAA;QAEpB,uBAAuB;QACvB,QAAG,GAAQ,SAAS,CAAA;QAEpB,8CAA8C;QAC9C,QAAG,GAAU,EAAE,CAAA;QAOb,IAAI,CAAC,GAAG,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,CAAA;QACpB,IAAI,CAAC,IAAI,GAAG,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,IAAI,KAAI,EAAE,CAAA;QAC3B,sDAAsD;QACtD,IAAI,CAAC,EAAE,GAAG,EAAE,EAAE,CAAA,CAAC,4CAA4C;QAC3D,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACd,CAAC;IAGD,IAAI,CAAC,IAAS;QACZ,OAAO,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAA;IACnD,CAAC;IAGD,KAAK,CAAC,IAAc,EAAE,GAAa;QACjC,IAAI,QAAQ,CAAA;QAEZ,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAChC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAA;YAC1C,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC;gBACnB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;aAC5C,CAAC,CAAA;QACJ,CAAC;QAED,IAAI,GAAG,GAAG,IAAK,IAAY;aACxB,WAAW,CAAC,IAAI,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAA;QAEnD,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;YACrB,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC/B,CAAC;QAED,OAAO,GAAG,CAAA;IACZ,CAAC;IAGD,IAAI,IAAI;QACN,OAAO,IAAI,WAAI,CAAC,IAAI,CAAC,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,KAAU,EAAE,IAAc,IAAS,OAAO,IAAI,CAAA,CAAC,CAAC;IACtD,IAAI,KAAK,KAAa,OAAO,EAAE,CAAA,CAAC,CAAC;IACjC,GAAG,CAAC,IAAc,IAAS,OAAO,IAAI,CAAA,CAAC,CAAC;CAEzC;AAGC,0BAAO"}
|
package/lib/err.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* Copyright (c) 2021-
|
|
1
|
+
/* Copyright (c) 2021-2024 Richard Rodger, MIT License */
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
import { Nil } from './val/Nil'
|
|
@@ -7,6 +7,8 @@ import { Nil } from './val/Nil'
|
|
|
7
7
|
// TODO: move to utility?
|
|
8
8
|
function descErr<NILS extends Nil | Nil[]>(err: NILS | any): any {
|
|
9
9
|
if (err?.isNil) {
|
|
10
|
+
// console.trace()
|
|
11
|
+
|
|
10
12
|
if (null == err.msg || '' === err.msg) {
|
|
11
13
|
let v1: any = err.primary
|
|
12
14
|
let v2: any = err.secondary
|
package/lib/lang.ts
CHANGED
|
@@ -53,7 +53,8 @@ import { Nil } from './val/Nil'
|
|
|
53
53
|
import { PrefVal } from './val/PrefVal'
|
|
54
54
|
import { RefVal } from './val/RefVal'
|
|
55
55
|
import { VarVal } from './val/VarVal'
|
|
56
|
-
import {
|
|
56
|
+
import { PlusVal } from './val/PlusVal'
|
|
57
|
+
|
|
57
58
|
|
|
58
59
|
|
|
59
60
|
import {
|
|
@@ -190,13 +191,17 @@ let AontuJsonic: Plugin = function aontu(jsonic: Jsonic) {
|
|
|
190
191
|
}
|
|
191
192
|
return addpath(new VarVal({ peg: terms[0] }), r.k.path)
|
|
192
193
|
},
|
|
194
|
+
|
|
195
|
+
'plus-infix': (r: Rule, _op: Op, terms: any) => {
|
|
196
|
+
return addpath(new PlusVal({ peg: [terms[0], terms[1]] }), r.k.path)
|
|
197
|
+
},
|
|
198
|
+
|
|
193
199
|
}
|
|
194
200
|
|
|
195
201
|
|
|
196
202
|
jsonic
|
|
197
203
|
.use(Expr, {
|
|
198
204
|
op: {
|
|
199
|
-
// PPP
|
|
200
205
|
// disjunct > conjunct: c & b | a -> c & (b | a)
|
|
201
206
|
'conjunct': {
|
|
202
207
|
infix: true, src: '&', left: 14_000_000, right: 15_000_000
|
|
@@ -205,6 +210,13 @@ let AontuJsonic: Plugin = function aontu(jsonic: Jsonic) {
|
|
|
205
210
|
infix: true, src: '|', left: 16_000_000, right: 17_000_000
|
|
206
211
|
},
|
|
207
212
|
|
|
213
|
+
'plus-infix': {
|
|
214
|
+
src: '+',
|
|
215
|
+
infix: true,
|
|
216
|
+
left: 20_000_000,
|
|
217
|
+
right: 21_000_000,
|
|
218
|
+
},
|
|
219
|
+
|
|
208
220
|
'dollar-prefix': {
|
|
209
221
|
src: '$',
|
|
210
222
|
prefix: true,
|
|
@@ -217,6 +229,7 @@ let AontuJsonic: Plugin = function aontu(jsonic: Jsonic) {
|
|
|
217
229
|
left: 25_000_000,
|
|
218
230
|
right: 24_000_000,
|
|
219
231
|
},
|
|
232
|
+
|
|
220
233
|
'dot-prefix': {
|
|
221
234
|
src: '.',
|
|
222
235
|
prefix: true,
|
|
@@ -236,7 +249,6 @@ let AontuJsonic: Plugin = function aontu(jsonic: Jsonic) {
|
|
|
236
249
|
})
|
|
237
250
|
|
|
238
251
|
|
|
239
|
-
// PPP
|
|
240
252
|
let CJ = jsonic.token['#E&']
|
|
241
253
|
let CL = jsonic.token.CL
|
|
242
254
|
|
|
@@ -244,7 +256,6 @@ let AontuJsonic: Plugin = function aontu(jsonic: Jsonic) {
|
|
|
244
256
|
jsonic.rule('val', (rs: RuleSpec) => {
|
|
245
257
|
|
|
246
258
|
rs
|
|
247
|
-
// PPP
|
|
248
259
|
.open([{ s: [CJ, CL], p: 'map', b: 2, n: { pk: 1 }, g: 'spread' }])
|
|
249
260
|
|
|
250
261
|
.bc((r: Rule, ctx: Context) => {
|
|
@@ -280,13 +291,14 @@ let AontuJsonic: Plugin = function aontu(jsonic: Jsonic) {
|
|
|
280
291
|
return undefined
|
|
281
292
|
})
|
|
282
293
|
|
|
294
|
+
.close([{ s: [CJ, CL], b: 2, g: 'spread,json,more' }])
|
|
295
|
+
|
|
283
296
|
return rs
|
|
284
297
|
})
|
|
285
298
|
|
|
286
299
|
|
|
287
300
|
jsonic.rule('map', (rs: RuleSpec) => {
|
|
288
301
|
rs
|
|
289
|
-
// PPP
|
|
290
302
|
.open([{ s: [CJ, CL], p: 'pair', b: 2, g: 'spread' }])
|
|
291
303
|
|
|
292
304
|
.bc((r: Rule) => {
|
|
@@ -311,6 +323,8 @@ let AontuJsonic: Plugin = function aontu(jsonic: Jsonic) {
|
|
|
311
323
|
return undefined
|
|
312
324
|
})
|
|
313
325
|
|
|
326
|
+
.close([{ s: [CJ, CL], b: 2, g: 'spread,json,more' }])
|
|
327
|
+
|
|
314
328
|
return rs
|
|
315
329
|
})
|
|
316
330
|
|
|
@@ -328,7 +342,6 @@ let AontuJsonic: Plugin = function aontu(jsonic: Jsonic) {
|
|
|
328
342
|
|
|
329
343
|
jsonic.rule('pair', (rs: RuleSpec) => {
|
|
330
344
|
rs
|
|
331
|
-
// PPP
|
|
332
345
|
.open([{
|
|
333
346
|
s: [CJ, CL], p: 'val',
|
|
334
347
|
u: { spread: true },
|
|
@@ -356,6 +369,12 @@ let AontuJsonic: Plugin = function aontu(jsonic: Jsonic) {
|
|
|
356
369
|
return undefined
|
|
357
370
|
})
|
|
358
371
|
|
|
372
|
+
.close([
|
|
373
|
+
{ s: [CJ, CL], c: (r) => r.lte('dmap', 1), r: 'pair', b: 2, g: 'spread,json,pair' },
|
|
374
|
+
{ s: [CJ, CL], b: 2, g: 'spread,json,more' }
|
|
375
|
+
])
|
|
376
|
+
|
|
377
|
+
|
|
359
378
|
return rs
|
|
360
379
|
})
|
|
361
380
|
|
|
@@ -377,6 +396,8 @@ let AontuJsonic: Plugin = function aontu(jsonic: Jsonic) {
|
|
|
377
396
|
return undefined
|
|
378
397
|
})
|
|
379
398
|
|
|
399
|
+
.close([{ s: [CJ, CL], r: 'elem', b: 2, g: 'spread,json,more' }])
|
|
400
|
+
|
|
380
401
|
return rs
|
|
381
402
|
})
|
|
382
403
|
|
|
@@ -452,8 +473,10 @@ class Lang {
|
|
|
452
473
|
src: '',
|
|
453
474
|
print: -1,
|
|
454
475
|
debug: false,
|
|
476
|
+
trace: false,
|
|
455
477
|
}
|
|
456
478
|
|
|
479
|
+
|
|
457
480
|
constructor(options?: Partial<Options>) {
|
|
458
481
|
this.options = Object.assign({}, this.options, options) as Options
|
|
459
482
|
|
|
@@ -462,7 +485,9 @@ class Lang {
|
|
|
462
485
|
this.jsonic = Jsonic.make()
|
|
463
486
|
|
|
464
487
|
if (this.options.debug) {
|
|
465
|
-
this.jsonic.use(Debug, {
|
|
488
|
+
this.jsonic.use(Debug, {
|
|
489
|
+
trace: this.options.trace
|
|
490
|
+
})
|
|
466
491
|
}
|
|
467
492
|
|
|
468
493
|
this.jsonic
|
|
@@ -473,6 +498,7 @@ class Lang {
|
|
|
473
498
|
})
|
|
474
499
|
}
|
|
475
500
|
|
|
501
|
+
|
|
476
502
|
parse(src: string, opts?: any): Val {
|
|
477
503
|
// JSONIC-UPDATE - check meta
|
|
478
504
|
let jm: any = {
|
package/lib/type.ts
CHANGED
package/lib/unify.ts
CHANGED
package/lib/val/MapVal.ts
CHANGED
|
@@ -55,14 +55,13 @@ class MapVal extends ValBase {
|
|
|
55
55
|
throw new Error('MapVal spec.peg undefined')
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
|
|
59
58
|
let spread = (this.peg as any)[MapVal.SPREAD]
|
|
60
59
|
delete (this.peg as any)[MapVal.SPREAD]
|
|
61
60
|
|
|
62
|
-
// console.log('MC', this.id, peg, spread)
|
|
63
|
-
|
|
64
61
|
if (spread) {
|
|
65
62
|
if ('&' === spread.o) {
|
|
63
|
+
// console.log('MapVal.ctor', this.id, this.path.join('.'),
|
|
64
|
+
// 'SPREAD', spread.v[0] && spread.v[0].id)
|
|
66
65
|
// TODO: handle existing spread!
|
|
67
66
|
this.spread.cj =
|
|
68
67
|
Array.isArray(spread.v) ?
|
|
@@ -70,8 +69,6 @@ class MapVal extends ValBase {
|
|
|
70
69
|
new ConjunctVal({ peg: spread.v }, ctx) :
|
|
71
70
|
spread.v[0] :
|
|
72
71
|
spread.v
|
|
73
|
-
// let tmv = Array.isArray(spread.v) ? spread.v : [spread.v]
|
|
74
|
-
// this.spread.cj = new ConjunctVal({ peg: tmv }, ctx)
|
|
75
72
|
}
|
|
76
73
|
}
|
|
77
74
|
}
|
|
@@ -82,6 +79,13 @@ class MapVal extends ValBase {
|
|
|
82
79
|
unify(peer: Val, ctx: Context): Val {
|
|
83
80
|
// let mark = Math.random()
|
|
84
81
|
|
|
82
|
+
// console.log(
|
|
83
|
+
// 'MapVal.unify',
|
|
84
|
+
// this.id, '=' + this.uh, this.path.join('.'),
|
|
85
|
+
// (this.spread.cj ?
|
|
86
|
+
// 'spread:' + this.spread.cj.id + ':' + this.spread.cj.path.join('.') : ''),
|
|
87
|
+
// peer.constructor.name, peer.id, peer.path.join('.'))
|
|
88
|
+
|
|
85
89
|
let done: boolean = true
|
|
86
90
|
let out: MapVal = TOP === peer ? this : new MapVal({ peg: {} }, ctx)
|
|
87
91
|
|
|
@@ -128,9 +132,6 @@ class MapVal extends ValBase {
|
|
|
128
132
|
let upeer: MapVal = (unite(ctx, peer, undefined, 'map-peer-map') as MapVal)
|
|
129
133
|
|
|
130
134
|
for (let peerkey in upeer.peg) {
|
|
131
|
-
// console.log('M1', this.id, mark, Object.keys(this.peg).join('~'),
|
|
132
|
-
// 'pk=', peerkey)
|
|
133
|
-
|
|
134
135
|
let peerchild = upeer.peg[peerkey]
|
|
135
136
|
let child = out.peg[peerkey]
|
|
136
137
|
|
|
@@ -142,22 +143,35 @@ class MapVal extends ValBase {
|
|
|
142
143
|
|
|
143
144
|
if (this.spread.cj) {
|
|
144
145
|
let key_ctx = ctx.descend(peerkey)
|
|
146
|
+
// console.log('KEY_CTX', peerkey, key_ctx)
|
|
147
|
+
|
|
145
148
|
let key_spread_cj = spread_cj.clone(null, key_ctx)
|
|
146
149
|
|
|
150
|
+
// console.log('MapVal.unify.spread', this.id, '=' + this.uh, this.path.join('.'),
|
|
151
|
+
// key_spread_cj.id, key_spread_cj.path.join('.'))
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
// console.log('ORIG')
|
|
155
|
+
// console.dir(out.peg[peerkey], { depth: null })
|
|
156
|
+
// console.log('SPREAD')
|
|
157
|
+
// console.dir(this.spread.cj, { depth: null })
|
|
158
|
+
|
|
147
159
|
oval = out.peg[peerkey] =
|
|
148
|
-
// new ConjunctVal({ peg: [out.peg[peerkey], key_spread_cj] }, key_ctx)
|
|
149
|
-
// done = false
|
|
150
160
|
unite(key_ctx, out.peg[peerkey], key_spread_cj)
|
|
161
|
+
|
|
162
|
+
// console.log('OVAL')
|
|
163
|
+
// console.dir(oval, { depth: null })
|
|
151
164
|
}
|
|
152
|
-
|
|
165
|
+
|
|
153
166
|
done = (done && DONE === oval.done)
|
|
154
|
-
// }
|
|
155
167
|
}
|
|
156
168
|
}
|
|
157
169
|
else if (TOP !== peer) {
|
|
158
170
|
return Nil.make(ctx, 'map', this, peer)
|
|
159
171
|
}
|
|
160
172
|
|
|
173
|
+
out.uh.push(peer.id)
|
|
174
|
+
|
|
161
175
|
out.done = done ? DONE : out.done
|
|
162
176
|
return out
|
|
163
177
|
}
|
package/lib/val/OpVal.ts
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
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
|
+
} from '../err'
|
|
16
|
+
|
|
17
|
+
import {
|
|
18
|
+
Context,
|
|
19
|
+
} from '../unify'
|
|
20
|
+
|
|
21
|
+
import {
|
|
22
|
+
unite
|
|
23
|
+
} from '../op/op'
|
|
24
|
+
|
|
25
|
+
import {
|
|
26
|
+
TOP,
|
|
27
|
+
StringVal,
|
|
28
|
+
} from '../val'
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
import { ConjunctVal } from '../val/ConjunctVal'
|
|
32
|
+
import { MapVal } from '../val/MapVal'
|
|
33
|
+
import { Nil } from '../val/Nil'
|
|
34
|
+
import { VarVal } from '../val/VarVal'
|
|
35
|
+
import { ValBase } from '../val/ValBase'
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class OpVal extends ValBase {
|
|
42
|
+
isOpVal = true
|
|
43
|
+
|
|
44
|
+
constructor(
|
|
45
|
+
spec: {
|
|
46
|
+
peg: any[],
|
|
47
|
+
},
|
|
48
|
+
ctx?: Context
|
|
49
|
+
) {
|
|
50
|
+
super(spec, ctx)
|
|
51
|
+
this.peg = []
|
|
52
|
+
|
|
53
|
+
for (let pI = 0; pI < spec.peg.length; pI++) {
|
|
54
|
+
this.append(spec.peg[pI])
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
append(part: any) {
|
|
60
|
+
this.peg.push(part)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
unify(peer: Val, ctx: Context): Val {
|
|
65
|
+
let out: Val = this
|
|
66
|
+
|
|
67
|
+
if (this.id !== peer.id) {
|
|
68
|
+
let result: Val | undefined = null == ctx ? this : this.operate(ctx)
|
|
69
|
+
|
|
70
|
+
result = result || this
|
|
71
|
+
|
|
72
|
+
if (null == result && this.canon === peer.canon) {
|
|
73
|
+
out = this
|
|
74
|
+
}
|
|
75
|
+
else if (result instanceof OpVal) {
|
|
76
|
+
if (TOP === peer) {
|
|
77
|
+
out = this
|
|
78
|
+
}
|
|
79
|
+
else if (peer instanceof Nil) {
|
|
80
|
+
out = Nil.make(ctx, 'op[' + this.peg + ']', this, peer)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
else if (this.canon === peer.canon) {
|
|
84
|
+
out = this
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
else {
|
|
88
|
+
this.done = DONE === this.done ? DONE : this.done + 1
|
|
89
|
+
out = new ConjunctVal({ peg: [this, peer] }, ctx)
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
out = unite(ctx, result, peer, 'op')
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
out.done = DONE === out.done ? DONE : this.done + 1
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return out
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
same(peer: Val): boolean {
|
|
104
|
+
return null == peer ? false : this.peg === peer.peg
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
clone(_spec?: ValSpec, ctx?: Context): Val {
|
|
109
|
+
let out = (super.clone({
|
|
110
|
+
peg: this.peg,
|
|
111
|
+
}, ctx) as OpVal)
|
|
112
|
+
return out
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
operate(ctx: Context): Val | undefined {
|
|
117
|
+
this.peg = this.peg.map((v: any) => v.isRefVal ? v.unify(TOP, ctx) : v)
|
|
118
|
+
return undefined
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
get canon() {
|
|
124
|
+
return ''
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
gen(ctx?: Context) {
|
|
129
|
+
// Unresolved op cannot be generated, so always an error.
|
|
130
|
+
let nil = Nil.make(
|
|
131
|
+
ctx,
|
|
132
|
+
'op',
|
|
133
|
+
this,
|
|
134
|
+
undefined
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
// TODO: refactor to use Site
|
|
138
|
+
nil.path = this.path
|
|
139
|
+
nil.url = this.url
|
|
140
|
+
nil.row = this.row
|
|
141
|
+
nil.col = this.col
|
|
142
|
+
|
|
143
|
+
descErr(nil)
|
|
144
|
+
|
|
145
|
+
if (ctx) {
|
|
146
|
+
ctx.err.push(nil)
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
throw new Error(nil.msg)
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return undefined
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
export {
|
|
158
|
+
OpVal,
|
|
159
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
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
|
+
} from '../err'
|
|
16
|
+
|
|
17
|
+
import {
|
|
18
|
+
Context,
|
|
19
|
+
} from '../unify'
|
|
20
|
+
|
|
21
|
+
import {
|
|
22
|
+
unite
|
|
23
|
+
} from '../op/op'
|
|
24
|
+
|
|
25
|
+
import {
|
|
26
|
+
TOP,
|
|
27
|
+
StringVal,
|
|
28
|
+
} from '../val'
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
import { ConjunctVal } from '../val/ConjunctVal'
|
|
32
|
+
import { MapVal } from '../val/MapVal'
|
|
33
|
+
import { Nil } from '../val/Nil'
|
|
34
|
+
import { VarVal } from '../val/VarVal'
|
|
35
|
+
import { ValBase } from '../val/ValBase'
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class OpVal extends ValBase {
|
|
42
|
+
isOpVal = true
|
|
43
|
+
|
|
44
|
+
constructor(
|
|
45
|
+
spec: {
|
|
46
|
+
peg: any[],
|
|
47
|
+
},
|
|
48
|
+
ctx?: Context
|
|
49
|
+
) {
|
|
50
|
+
super(spec, ctx)
|
|
51
|
+
this.peg = []
|
|
52
|
+
|
|
53
|
+
for (let pI = 0; pI < spec.peg.length; pI++) {
|
|
54
|
+
this.append(spec.peg[pI])
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
append(part: any) {
|
|
60
|
+
this.peg.push(part)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
unify(peer: Val, ctx: Context): Val {
|
|
65
|
+
let out: Val = this
|
|
66
|
+
|
|
67
|
+
if (this.id !== peer.id) {
|
|
68
|
+
let result: Val | undefined = null == ctx ? this : this.operate(ctx)
|
|
69
|
+
|
|
70
|
+
result = result || this
|
|
71
|
+
|
|
72
|
+
if (null == result && this.canon === peer.canon) {
|
|
73
|
+
out = this
|
|
74
|
+
}
|
|
75
|
+
else if (result instanceof OpVal) {
|
|
76
|
+
if (TOP === peer) {
|
|
77
|
+
out = this
|
|
78
|
+
}
|
|
79
|
+
else if (peer instanceof Nil) {
|
|
80
|
+
out = Nil.make(ctx, 'op[' + this.peg + ']', this, peer)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
else if (this.canon === peer.canon) {
|
|
84
|
+
out = this
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
else {
|
|
88
|
+
this.done = DONE === this.done ? DONE : this.done + 1
|
|
89
|
+
out = new ConjunctVal({ peg: [this, peer] }, ctx)
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
out = unite(ctx, result, peer, 'op')
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
out.done = DONE === out.done ? DONE : this.done + 1
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return out
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
same(peer: Val): boolean {
|
|
104
|
+
return null == peer ? false : this.peg === peer.peg
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
clone(spec?: ValSpec, ctx?: Context): Val {
|
|
109
|
+
let out = (super.clone({
|
|
110
|
+
peg: this.peg,
|
|
111
|
+
}, ctx) as OpVal)
|
|
112
|
+
return out
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
operate(_ctx: Context) {
|
|
117
|
+
return undefined
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
get canon() {
|
|
123
|
+
return ''
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
gen(ctx?: Context) {
|
|
128
|
+
// Unresolved ref cannot be generated, so always an error.
|
|
129
|
+
let nil = Nil.make(
|
|
130
|
+
ctx,
|
|
131
|
+
'ref',
|
|
132
|
+
this, // (formatPath(this.peg, this.absolute) as any),
|
|
133
|
+
undefined
|
|
134
|
+
)
|
|
135
|
+
|
|
136
|
+
// TODO: refactor to use Site
|
|
137
|
+
nil.path = this.path
|
|
138
|
+
nil.url = this.url
|
|
139
|
+
nil.row = this.row
|
|
140
|
+
nil.col = this.col
|
|
141
|
+
|
|
142
|
+
descErr(nil)
|
|
143
|
+
|
|
144
|
+
if (ctx) {
|
|
145
|
+
ctx.err.push(nil)
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
throw new Error(nil.msg)
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return undefined
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
export {
|
|
157
|
+
OpVal,
|
|
158
|
+
}
|