aontu 0.11.0 → 0.13.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.
Files changed (73) hide show
  1. package/aontu.ts +13 -6
  2. package/dist/aontu.d.ts +3 -0
  3. package/dist/aontu.js +10 -4
  4. package/dist/aontu.js.map +1 -1
  5. package/dist/aontu.min.js +1 -1
  6. package/dist/lib/err.js +1 -1
  7. package/dist/lib/err.js.map +1 -1
  8. package/dist/lib/lang.d.ts +1 -2
  9. package/dist/lib/lang.js +130 -38
  10. package/dist/lib/lang.js.map +1 -1
  11. package/dist/lib/op/disjunct.js +2 -2
  12. package/dist/lib/op/disjunct.js.map +1 -1
  13. package/dist/lib/op/op.js +1 -1
  14. package/dist/lib/op/op.js.map +1 -1
  15. package/dist/lib/op/unite.js +36 -6
  16. package/dist/lib/op/unite.js.map +1 -1
  17. package/dist/lib/type.d.ts +10 -8
  18. package/dist/lib/type.js +2 -27
  19. package/dist/lib/type.js.map +1 -1
  20. package/dist/lib/unify.d.ts +7 -4
  21. package/dist/lib/unify.js +17 -29
  22. package/dist/lib/unify.js.map +1 -1
  23. package/dist/lib/val/ConjunctVal.d.ts +7 -4
  24. package/dist/lib/val/ConjunctVal.js +62 -31
  25. package/dist/lib/val/ConjunctVal.js.map +1 -1
  26. package/dist/lib/val/DisjunctVal.d.ts +5 -2
  27. package/dist/lib/val/DisjunctVal.js +15 -7
  28. package/dist/lib/val/DisjunctVal.js.map +1 -1
  29. package/dist/lib/val/ListVal.d.ts +5 -2
  30. package/dist/lib/val/ListVal.js +39 -19
  31. package/dist/lib/val/ListVal.js.map +1 -1
  32. package/dist/lib/val/MapVal.d.ts +5 -2
  33. package/dist/lib/val/MapVal.js +59 -30
  34. package/dist/lib/val/MapVal.js.map +1 -1
  35. package/dist/lib/val/Nil.d.ts +3 -2
  36. package/dist/lib/val/Nil.js +19 -5
  37. package/dist/lib/val/Nil.js.map +1 -1
  38. package/dist/lib/val/PrefVal.d.ts +6 -2
  39. package/dist/lib/val/PrefVal.js +18 -8
  40. package/dist/lib/val/PrefVal.js.map +1 -1
  41. package/dist/lib/val/RefVal.d.ts +11 -5
  42. package/dist/lib/val/RefVal.js +187 -39
  43. package/dist/lib/val/RefVal.js.map +1 -1
  44. package/dist/lib/val/ValBase.d.ts +10 -9
  45. package/dist/lib/val/ValBase.js +25 -6
  46. package/dist/lib/val/ValBase.js.map +1 -1
  47. package/dist/lib/val/VarVal.d.ts +14 -0
  48. package/dist/lib/val/VarVal.js +68 -0
  49. package/dist/lib/val/VarVal.js.map +1 -0
  50. package/dist/lib/val.d.ts +42 -8
  51. package/dist/lib/val.js +64 -18
  52. package/dist/lib/val.js.map +1 -1
  53. package/lib/err.ts +1 -1
  54. package/lib/lang.ts +168 -43
  55. package/lib/op/disjunct.ts +10 -3
  56. package/lib/op/op.ts +1 -1
  57. package/lib/op/unite.ts +44 -4
  58. package/lib/type.ts +12 -40
  59. package/lib/unify.ts +70 -29
  60. package/lib/val/ConjunctVal.ts +83 -46
  61. package/lib/val/DisjunctVal.ts +35 -12
  62. package/lib/val/ListVal.ts +57 -22
  63. package/lib/val/MapVal.ts +82 -51
  64. package/lib/val/Nil.ts +29 -9
  65. package/lib/val/PrefVal.ts +38 -14
  66. package/lib/val/RefVal.ts +254 -55
  67. package/lib/val/ValBase.ts +33 -28
  68. package/lib/val/VarVal.ts +139 -0
  69. package/lib/val.ts +116 -25
  70. package/package.json +8 -8
  71. package/dist/lib/common.d.ts +0 -8
  72. package/dist/lib/common.js +0 -3
  73. package/dist/lib/common.js.map +0 -1
@@ -1,78 +1,104 @@
1
1
  "use strict";
2
- /* Copyright (c) 2021 Richard Rodger, MIT License */
2
+ /* Copyright (c) 2021-2023 Richard Rodger, MIT License */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.MapVal = void 0;
5
5
  const type_1 = require("../type");
6
6
  const op_1 = require("../op/op");
7
+ const val_1 = require("../val");
8
+ const ConjunctVal_1 = require("../val/ConjunctVal");
9
+ const Nil_1 = require("../val/Nil");
7
10
  const ValBase_1 = require("../val/ValBase");
8
- const Nil_1 = require("./Nil");
9
- const ConjunctVal_1 = require("./ConjunctVal");
10
11
  class MapVal extends ValBase_1.ValBase {
11
- constructor(peg, ctx) {
12
- super(peg, ctx);
12
+ constructor(spec, ctx) {
13
+ super(spec, ctx);
13
14
  this.spread = {
14
15
  cj: undefined,
15
16
  };
17
+ if (null == this.peg) {
18
+ throw new Error('MapVal spec.peg undefined');
19
+ }
16
20
  let spread = this.peg[MapVal.SPREAD];
17
21
  delete this.peg[MapVal.SPREAD];
22
+ // console.log('MC', this.id, peg, spread)
18
23
  if (spread) {
19
24
  if ('&' === spread.o) {
20
- // TODO: handle existing spread!
21
- this.spread.cj =
22
- new ConjunctVal_1.ConjunctVal(Array.isArray(spread.v) ? spread.v : [spread.v], ctx);
25
+ let tmv = Array.isArray(spread.v) ? spread.v : [spread.v];
26
+ this.spread.cj = new ConjunctVal_1.ConjunctVal({ peg: tmv }, ctx);
23
27
  }
24
28
  }
25
29
  }
26
30
  // NOTE: order of keys is not preserved!
27
31
  // not possible in any case - consider {a,b} unify {b,a}
28
32
  unify(peer, ctx) {
29
- // if (null == ctx) {
30
- // console.trace()
31
- // }
33
+ // let mark = Math.random()
32
34
  let done = true;
33
- let out = type_1.TOP === peer ? this : new MapVal({}, ctx);
35
+ let out = val_1.TOP === peer ? this : new MapVal({ peg: {} }, ctx);
34
36
  out.spread.cj = this.spread.cj;
35
37
  if (peer instanceof MapVal) {
36
- out.spread.cj = null == out.spread.cj ? peer.spread.cj : (null == peer.spread.cj ? out.spread.cj : (out.spread.cj = new ConjunctVal_1.ConjunctVal([out.spread.cj, peer.spread.cj], ctx)));
38
+ out.spread.cj = null == out.spread.cj ? peer.spread.cj : (null == peer.spread.cj ? out.spread.cj : (out.spread.cj =
39
+ new ConjunctVal_1.ConjunctVal({ peg: [out.spread.cj, peer.spread.cj] }, ctx)));
37
40
  }
38
41
  out.done = this.done + 1;
39
- if (this.spread.cj) {
40
- out.spread.cj =
41
- type_1.DONE !== this.spread.cj.done ? (0, op_1.unite)(ctx, this.spread.cj) :
42
- this.spread.cj;
43
- done = (done && type_1.DONE === out.spread.cj.done);
44
- }
45
- let spread_cj = out.spread.cj || type_1.TOP;
46
- // Always unify children first
42
+ let spread_cj = out.spread.cj || val_1.TOP;
43
+ // Always unify own children first
47
44
  for (let key in this.peg) {
48
- // console.log('MAP ukA', key, this.peg[key].canon)
49
- out.peg[key] =
50
- (0, op_1.unite)(ctx.descend(key), this.peg[key], spread_cj);
51
- // console.log('MAP ukB', key, out.peg[key].canon)
45
+ let keyctx = ctx.descend(key);
46
+ let key_spread_cj = spread_cj.clone(null, keyctx);
47
+ // console.log('M0', this.id, mark, Object.keys(this.peg).join('~'),
48
+ // 'p=', this.path.join('.'),
49
+ // 'k=', key, peer.top || peer.constructor.name,
50
+ // 'pp=', this.peg[key].path.join('.'),
51
+ // this.peg[key].canon,
52
+ // 'sp=', key_spread_cj.path.join('.'),
53
+ // key_spread_cj.canon)
54
+ // if (1000000000 === this.id) {
55
+ // console.dir(key_spread_cj, { depth: null })
56
+ // }
57
+ out.peg[key] = (0, op_1.unite)(keyctx, this.peg[key], key_spread_cj, 'map-own');
52
58
  done = (done && type_1.DONE === out.peg[key].done);
53
59
  }
54
60
  if (peer instanceof MapVal) {
55
- let upeer = (0, op_1.unite)(ctx, peer);
61
+ let upeer = (0, op_1.unite)(ctx, peer, undefined, 'map-peer-map');
56
62
  for (let peerkey in upeer.peg) {
63
+ // console.log('M1', this.id, mark, Object.keys(this.peg).join('~'),
64
+ // 'pk=', peerkey)
57
65
  let peerchild = upeer.peg[peerkey];
58
66
  let child = out.peg[peerkey];
59
67
  let oval = out.peg[peerkey] =
60
68
  undefined === child ? peerchild :
61
69
  child instanceof Nil_1.Nil ? child :
62
70
  peerchild instanceof Nil_1.Nil ? peerchild :
63
- (0, op_1.unite)(ctx.descend(peerkey), child, peerchild);
71
+ (0, op_1.unite)(ctx.descend(peerkey), child, peerchild, 'map-peer');
64
72
  if (this.spread.cj) {
65
- out.peg[peerkey] = (0, op_1.unite)(ctx, out.peg[peerkey], spread_cj);
73
+ let key_ctx = ctx.descend(peerkey);
74
+ let key_spread_cj = spread_cj.clone(null, key_ctx);
75
+ out.peg[peerkey] =
76
+ new ConjunctVal_1.ConjunctVal({ peg: [out.peg[peerkey], key_spread_cj] }, key_ctx);
77
+ done = false;
78
+ }
79
+ else {
80
+ done = (done && type_1.DONE === oval.done);
66
81
  }
67
- done = (done && type_1.DONE === oval.done);
68
82
  }
69
83
  }
70
- else if (type_1.TOP !== peer) {
84
+ else if (val_1.TOP !== peer) {
71
85
  return Nil_1.Nil.make(ctx, 'map', this, peer);
72
86
  }
73
87
  out.done = done ? type_1.DONE : out.done;
74
88
  return out;
75
89
  }
90
+ clone(spec, ctx) {
91
+ let out = super.clone(spec, ctx);
92
+ out.peg = {};
93
+ for (let entry of Object.entries(this.peg)) {
94
+ out.peg[entry[0]] =
95
+ entry[1] instanceof ValBase_1.ValBase ? entry[1].clone(null, ctx) : entry[1];
96
+ }
97
+ if (this.spread.cj) {
98
+ out.spread.cj = this.spread.cj.clone(null, ctx);
99
+ }
100
+ return out;
101
+ }
76
102
  get canon() {
77
103
  let keys = Object.keys(this.peg);
78
104
  return '{' +
@@ -87,6 +113,9 @@ class MapVal extends ValBase_1.ValBase {
87
113
  for (let p in this.peg) {
88
114
  out[p] = this.peg[p].gen(ctx);
89
115
  }
116
+ // if (0 === Object.keys(out).length) {
117
+ // console.log('MapVal-gen 0', this.path, this.done)
118
+ // }
90
119
  return out;
91
120
  }
92
121
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MapVal.js","sourceRoot":"","sources":["../../../lib/val/MapVal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MapVal.js","sourceRoot":"","sources":["../../../lib/val/MapVal.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Val } from '../type';
1
+ import type { Val, ValSpec } from '../type';
2
2
  import { Context } from '../unify';
3
3
  import { ValBase } from '../val/ValBase';
4
4
  declare class Nil extends ValBase {
@@ -8,8 +8,9 @@ declare class Nil extends ValBase {
8
8
  secondary?: Val;
9
9
  msg: string;
10
10
  static make: (ctx?: Context, why?: any, av?: Val, bv?: Val) => Nil;
11
- constructor(why?: any, ctx?: Context);
11
+ constructor(spec?: any, ctx?: Context);
12
12
  unify(_peer: Val, _ctx: Context): this;
13
+ clone(spec?: ValSpec, ctx?: Context): Val;
13
14
  get canon(): string;
14
15
  gen(_ctx?: Context): undefined;
15
16
  }
@@ -1,33 +1,47 @@
1
1
  "use strict";
2
- /* Copyright (c) 2021-2022 Richard Rodger, MIT License */
2
+ /* Copyright (c) 2021-2023 Richard Rodger, MIT License */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.Nil = void 0;
5
5
  const type_1 = require("../type");
6
6
  const ValBase_1 = require("../val/ValBase");
7
7
  class Nil extends ValBase_1.ValBase {
8
- constructor(why, ctx) {
9
- super(null, ctx);
8
+ constructor(spec, ctx) {
9
+ super(spec, ctx);
10
10
  this.nil = true;
11
11
  this.msg = '';
12
- this.why = why;
12
+ this.why = spec === null || spec === void 0 ? void 0 : spec.why;
13
13
  // Nil is always DONE, by definition.
14
14
  this.done = type_1.DONE;
15
15
  }
16
16
  unify(_peer, _ctx) {
17
17
  return this;
18
18
  }
19
+ clone(spec, ctx) {
20
+ let out = super.clone(spec, ctx);
21
+ out.why = this.why;
22
+ // Should these clone?
23
+ // out.primary = this.primary?.clone()
24
+ // out.secondary = this.secondary?.clone()
25
+ out.primary = this.primary;
26
+ out.secondary = this.secondary;
27
+ out.msg = this.msg;
28
+ return out;
29
+ }
19
30
  get canon() {
20
31
  return 'nil';
21
32
  }
22
33
  gen(_ctx) {
34
+ // TODO: proper gen error
35
+ throw new Error('Nil-gen: ' + this.why);
23
36
  return undefined;
24
37
  }
25
38
  }
26
39
  exports.Nil = Nil;
27
40
  // TODO: include Val generating nil, thus capture type
28
41
  // A Nil is an error - should not happen - unify failed
42
+ // refactor ,make(spec,ctx)
29
43
  Nil.make = (ctx, why, av, bv) => {
30
- let nil = new Nil(why, ctx);
44
+ let nil = new Nil({ why }, ctx);
31
45
  // TODO: this should be done lazily, for multiple terms
32
46
  // Terms later in same file are considered the primary error location.
33
47
  if (null != av) {
@@ -1 +1 @@
1
- {"version":3,"file":"Nil.js","sourceRoot":"","sources":["../../../lib/val/Nil.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;AAOzD,kCAEgB;AAOhB,4CAEuB;AAMvB,MAAM,GAAI,SAAQ,iBAAO;IAiDvB,YAAY,GAAS,EAAE,GAAa;QAClC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAjDlB,QAAG,GAAG,IAAI,CAAA;QAIV,QAAG,GAAW,EAAE,CAAA;QA8Cd,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QAEd,qCAAqC;QACrC,IAAI,CAAC,IAAI,GAAG,WAAI,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,KAAU,EAAE,IAAa;QAC7B,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,KAAK;QACP,OAAO,KAAK,CAAA;IACd,CAAC;IAED,GAAG,CAAC,IAAc;QAChB,OAAO,SAAS,CAAA;IAClB,CAAC;;AAID,kBAAG;AAhEH,sDAAsD;AAEtD,uDAAuD;AAChD,QAAI,GAAG,CAAC,GAAa,EAAE,GAAS,EAAE,EAAQ,EAAE,EAAQ,EAAE,EAAE;IAC7D,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAE3B,uDAAuD;IAEvD,sEAAsE;IACtE,IAAI,IAAI,IAAI,EAAE,EAAE;QACd,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;QAChB,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;QAChB,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;QAEhB,GAAG,CAAC,OAAO,GAAG,EAAE,CAAA;QAEhB,IAAI,IAAI,IAAI,EAAE,EAAE;YACd,GAAG,CAAC,SAAS,GAAG,EAAE,CAAA;YAElB,IAAI,WAAW,GACb,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CACtB,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;gBAClB,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CACzC,CAAA;YAEH,IAAI,WAAW,EAAE;gBACf,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;gBAChB,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;gBAChB,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;gBAChB,GAAG,CAAC,OAAO,GAAG,EAAE,CAAA;gBAChB,GAAG,CAAC,SAAS,GAAG,EAAE,CAAA;aACnB;SACF;KACF;IAED,IAAI,GAAG,EAAE;QACP,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;KAClB;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,AArCU,CAqCV"}
1
+ {"version":3,"file":"Nil.js","sourceRoot":"","sources":["../../../lib/val/Nil.ts"],"names":[],"mappings":";AAAA,yDAAyD;;;AAQzD,kCAEgB;AAOhB,4CAAwC;AAKxC,MAAM,GAAI,SAAQ,iBAAO;IAmDvB,YAAY,IAAU,EAAE,GAAa;QACnC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;QAnDlB,QAAG,GAAG,IAAI,CAAA;QAIV,QAAG,GAAW,EAAE,CAAA;QAgDd,IAAI,CAAC,GAAG,GAAG,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,GAAG,CAAA;QAEpB,qCAAqC;QACrC,IAAI,CAAC,IAAI,GAAG,WAAI,CAAA;IAClB,CAAC;IAGD,KAAK,CAAC,KAAU,EAAE,IAAa;QAC7B,OAAO,IAAI,CAAA;IACb,CAAC;IAGD,KAAK,CAAC,IAAc,EAAE,GAAa;QACjC,IAAI,GAAG,GAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAS,CAAA;QACzC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;QAElB,sBAAsB;QACtB,sCAAsC;QACtC,0CAA0C;QAC1C,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC1B,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAE9B,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;QAClB,OAAO,GAAG,CAAA;IACZ,CAAC;IAGD,IAAI,KAAK;QACP,OAAO,KAAK,CAAA;IACd,CAAC;IAED,GAAG,CAAC,IAAc;QAChB,yBAAyB;QACzB,MAAM,IAAI,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;QACvC,OAAO,SAAS,CAAA;IAClB,CAAC;;AAKD,kBAAG;AAtFH,sDAAsD;AAEtD,uDAAuD;AACvD,2BAA2B;AACpB,QAAI,GAAG,CAAC,GAAa,EAAE,GAAS,EAAE,EAAQ,EAAE,EAAQ,EAAE,EAAE;IAC7D,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;IAE/B,uDAAuD;IAEvD,sEAAsE;IACtE,IAAI,IAAI,IAAI,EAAE,EAAE;QACd,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;QAChB,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;QAChB,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;QAEhB,GAAG,CAAC,OAAO,GAAG,EAAE,CAAA;QAEhB,IAAI,IAAI,IAAI,EAAE,EAAE;YACd,GAAG,CAAC,SAAS,GAAG,EAAE,CAAA;YAElB,IAAI,WAAW,GACb,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CACtB,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;gBAClB,CAAC,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CACzC,CAAA;YAEH,IAAI,WAAW,EAAE;gBACf,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;gBAChB,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;gBAChB,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;gBAChB,GAAG,CAAC,OAAO,GAAG,EAAE,CAAA;gBAChB,GAAG,CAAC,SAAS,GAAG,EAAE,CAAA;aACnB;SACF;KACF;IAED,IAAI,GAAG,EAAE;QACP,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;KAClB;IAED,OAAO,GAAG,CAAA;AACZ,CAAC,AArCU,CAqCV"}
@@ -1,11 +1,15 @@
1
- import type { Val } from '../type';
1
+ import type { Val, ValSpec } from '../type';
2
2
  import { Context } from '../unify';
3
3
  import { ValBase } from '../val/ValBase';
4
4
  declare class PrefVal extends ValBase {
5
5
  pref: Val;
6
- constructor(peg: any, pref?: any, ctx?: Context);
6
+ constructor(spec: {
7
+ peg: any;
8
+ pref?: any;
9
+ }, ctx?: Context);
7
10
  unify(peer: Val, ctx: Context): Val;
8
11
  same(peer: Val): boolean;
12
+ clone(spec?: ValSpec, ctx?: Context): Val;
9
13
  get canon(): any;
10
14
  gen(ctx?: Context): any;
11
15
  }
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- /* Copyright (c) 2021-2022 Richard Rodger, MIT License */
2
+ /* Copyright (c) 2021-2023 Richard Rodger, MIT License */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.PrefVal = void 0;
5
5
  const type_1 = require("../type");
@@ -7,9 +7,9 @@ const op_1 = require("../op/op");
7
7
  const Nil_1 = require("../val/Nil");
8
8
  const ValBase_1 = require("../val/ValBase");
9
9
  class PrefVal extends ValBase_1.ValBase {
10
- constructor(peg, pref, ctx) {
11
- super(peg, ctx);
12
- this.pref = pref || peg;
10
+ constructor(spec, ctx) {
11
+ super(spec, ctx);
12
+ this.pref = spec.pref || spec.peg;
13
13
  }
14
14
  // PrefVal unify always returns a PrefVal
15
15
  // PrefVals can only be removed by becoming Nil in a Disjunct
@@ -17,12 +17,17 @@ class PrefVal extends ValBase_1.ValBase {
17
17
  let done = true;
18
18
  let out;
19
19
  if (peer instanceof PrefVal) {
20
- out = new PrefVal((0, op_1.unite)(ctx, this.peg, peer.peg, 'Pref000'), (0, op_1.unite)(ctx, this.pref, peer.pref, 'Pref010'), ctx);
20
+ out = new PrefVal({
21
+ peg: (0, op_1.unite)(ctx, this.peg, peer.peg, 'Pref000'),
22
+ pref: (0, op_1.unite)(ctx, this.pref, peer.pref, 'Pref010'),
23
+ }, ctx);
21
24
  }
22
25
  else {
23
- out = new PrefVal(
24
- // TODO: find a better way to drop Nil non-errors
25
- (0, op_1.unite)(ctx === null || ctx === void 0 ? void 0 : ctx.clone({ err: [] }), this.peg, peer, 'Pref020'), (0, op_1.unite)(ctx === null || ctx === void 0 ? void 0 : ctx.clone({ err: [] }), this.pref, peer, 'Pref030'), ctx);
26
+ out = new PrefVal({
27
+ // TODO: find a better way to drop Nil non-errors
28
+ peg: (0, op_1.unite)(ctx === null || ctx === void 0 ? void 0 : ctx.clone({ err: [] }), this.peg, peer, 'Pref020'),
29
+ pref: (0, op_1.unite)(ctx === null || ctx === void 0 ? void 0 : ctx.clone({ err: [] }), this.pref, peer, 'Pref030'),
30
+ }, ctx);
26
31
  }
27
32
  done = done && type_1.DONE === out.peg.done &&
28
33
  (null != out.pref ? type_1.DONE === out.pref.done : true);
@@ -46,6 +51,11 @@ class PrefVal extends ValBase_1.ValBase {
46
51
  (this.pref instanceof ValBase_1.ValBase && this.pref.same(peer.pref)));
47
52
  return pegsame && prefsame;
48
53
  }
54
+ clone(spec, ctx) {
55
+ let out = super.clone(spec, ctx);
56
+ out.pref = this.pref.clone(null, ctx);
57
+ return out;
58
+ }
49
59
  get canon() {
50
60
  return this.pref instanceof Nil_1.Nil ? this.peg.canon : '*' + this.pref.canon;
51
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PrefVal.js","sourceRoot":"","sources":["../../../lib/val/PrefVal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PrefVal.js","sourceRoot":"","sources":["../../../lib/val/PrefVal.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,21 @@
1
- import type { Val } from '../type';
1
+ import type { Val, ValSpec } from '../type';
2
2
  import { Context } from '../unify';
3
+ import { StringVal } from '../val';
3
4
  import { ValBase } from '../val/ValBase';
4
5
  declare class RefVal extends ValBase {
5
- parts: string[];
6
6
  absolute: boolean;
7
- sep: string;
8
- constructor(peg: any[] | string, abs?: boolean);
7
+ prefix: boolean;
8
+ constructor(spec: {
9
+ peg: any[];
10
+ absolute?: boolean;
11
+ prefix?: boolean;
12
+ }, ctx?: Context);
9
13
  append(part: any): void;
10
14
  unify(peer: Val, ctx: Context): Val;
15
+ find(ctx: Context): Val | StringVal | undefined;
11
16
  same(peer: Val): boolean;
12
- get canon(): any;
17
+ clone(spec?: ValSpec, ctx?: Context): Val;
18
+ get canon(): string;
13
19
  gen(ctx?: Context): undefined;
14
20
  }
15
21
  export { RefVal, };
@@ -1,83 +1,231 @@
1
1
  "use strict";
2
- /* Copyright (c) 2021 Richard Rodger, MIT License */
2
+ /* Copyright (c) 2021-2023 Richard Rodger, MIT License */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.RefVal = void 0;
5
5
  const type_1 = require("../type");
6
6
  const op_1 = require("../op/op");
7
+ const val_1 = require("../val");
8
+ const ConjunctVal_1 = require("../val/ConjunctVal");
9
+ const MapVal_1 = require("../val/MapVal");
7
10
  const Nil_1 = require("../val/Nil");
11
+ const VarVal_1 = require("../val/VarVal");
8
12
  const ValBase_1 = require("../val/ValBase");
9
- const ConjunctVal_1 = require("../val/ConjunctVal");
10
- const val_1 = require("../val");
11
13
  class RefVal extends ValBase_1.ValBase {
12
- constructor(peg, abs) {
13
- super('');
14
- this.sep = '.';
15
- this.absolute = true === abs;
16
- this.parts = [];
17
- if ('string' === typeof peg) {
18
- peg = peg.split('.');
19
- }
20
- for (let part of peg) {
21
- this.append(part);
14
+ constructor(spec, ctx) {
15
+ super(spec, ctx);
16
+ this.absolute = false;
17
+ this.prefix = false;
18
+ this.peg = [];
19
+ this.absolute = true === this.absolute ? true : // absolute sticks
20
+ true === spec.absolute ? true : false;
21
+ this.prefix = true === spec.prefix;
22
+ for (let pI = 0; pI < spec.peg.length; pI++) {
23
+ this.append(spec.peg[pI]);
22
24
  }
23
25
  }
24
26
  append(part) {
25
- //console.log('APPEND 0', part)
27
+ // console.log('APPEND', part, this)
28
+ let partval;
26
29
  if ('string' === typeof part) {
27
- this.parts.push(part);
30
+ partval = part;
31
+ this.peg.push(partval);
28
32
  }
29
33
  else if (part instanceof val_1.StringVal) {
30
- this.parts.push(part.peg);
34
+ partval = part.peg;
35
+ this.peg.push(partval);
36
+ }
37
+ else if (part instanceof VarVal_1.VarVal) {
38
+ partval = part;
39
+ this.peg.push(partval);
31
40
  }
32
41
  else if (part instanceof RefVal) {
33
- this.parts.push(...part.parts);
34
42
  if (part.absolute) {
35
43
  this.absolute = true;
36
44
  }
45
+ if (this.prefix) {
46
+ if (part.prefix) {
47
+ this.peg.push('.');
48
+ }
49
+ }
50
+ else {
51
+ if (part.prefix) {
52
+ if (0 === this.peg.length) {
53
+ this.prefix = true;
54
+ }
55
+ else if (0 < this.peg.length) {
56
+ this.peg.push('.');
57
+ }
58
+ }
59
+ }
60
+ this.peg.push(...part.peg);
37
61
  }
38
- this.peg = (this.absolute ? this.sep : '') + this.parts.join(this.sep);
39
62
  }
40
63
  unify(peer, ctx) {
41
- let resolved = null == ctx ? this : ctx.find(this);
42
- // Don't try to resolve paths forever.
43
- // TODO: large amount of reruns needed? why?
44
- resolved = null == resolved && 999 < this.done ?
45
- Nil_1.Nil.make(ctx, 'no-path', this, peer) : (resolved || this);
46
- let out;
47
- if (resolved instanceof RefVal) {
48
- if (type_1.TOP === peer) {
64
+ let out = this;
65
+ // let why = 'id'
66
+ if (this.id !== peer.id) {
67
+ // TODO: not resolved when all Vals in path are done is an error
68
+ // as path cannot be found
69
+ // let resolved: Val | undefined = null == ctx ? this : ctx.find(this)
70
+ let resolved = null == ctx ? this : this.find(ctx);
71
+ // console.log('UR', this.peg, resolved)
72
+ resolved = resolved || this;
73
+ if (null == resolved && this.canon === peer.canon) {
49
74
  out = this;
50
75
  }
51
- else if (peer instanceof Nil_1.Nil) {
52
- out = Nil_1.Nil.make(ctx, 'ref[' + this.peg + ']', this, peer);
76
+ else if (resolved instanceof RefVal) {
77
+ if (val_1.TOP === peer) {
78
+ out = this;
79
+ // why = 'pt'
80
+ }
81
+ else if (peer instanceof Nil_1.Nil) {
82
+ out = Nil_1.Nil.make(ctx, 'ref[' + this.peg + ']', this, peer);
83
+ // why = 'pn'
84
+ }
85
+ // same path
86
+ // else if (this.peg === peer.peg) {
87
+ else if (this.canon === peer.canon) {
88
+ out = this;
89
+ // why = 'pp'
90
+ }
91
+ else {
92
+ // Ensure RefVal done is incremented
93
+ this.done = type_1.DONE === this.done ? type_1.DONE : this.done + 1;
94
+ out = new ConjunctVal_1.ConjunctVal({ peg: [this, peer] }, ctx);
95
+ // why = 'cj'
96
+ }
53
97
  }
54
- // same path
55
- else if (this.peg === peer.peg) {
56
- out = this;
98
+ else {
99
+ out = (0, op_1.unite)(ctx, resolved, peer, 'ref');
100
+ // why = 'u'
101
+ }
102
+ out.done = type_1.DONE === out.done ? type_1.DONE : this.done + 1;
103
+ }
104
+ // console.log('RV', why, this.id, this.canon, '&', peer.canon, '->', out.canon)
105
+ return out;
106
+ }
107
+ find(ctx) {
108
+ // TODO: relative paths
109
+ // if (this.root instanceof MapVal && ref.absolute) {
110
+ // NOTE: path *to* the ref, not the ref itself!
111
+ let fullpath = this.path;
112
+ let parts = [];
113
+ let modes = [];
114
+ // console.log('PARTS', this.peg)
115
+ for (let pI = 0; pI < this.peg.length; pI++) {
116
+ let part = this.peg[pI];
117
+ if (part instanceof VarVal_1.VarVal) {
118
+ let strval = part.peg;
119
+ let name = strval ? '' + strval.peg : '';
120
+ if ('KEY' === name) {
121
+ if (pI === this.peg.length - 1) {
122
+ modes.push(name);
123
+ }
124
+ else {
125
+ // TODO: return a Nil explaining error
126
+ return;
127
+ }
128
+ }
129
+ if ('SELF' === name) {
130
+ if (pI === 0) {
131
+ modes.push(name);
132
+ }
133
+ else {
134
+ // TODO: return a Nil explaining error
135
+ return;
136
+ }
137
+ }
138
+ else if ('PARENT' === name) {
139
+ if (pI === 0) {
140
+ modes.push(name);
141
+ }
142
+ else {
143
+ // TODO: return a Nil explaining error
144
+ return;
145
+ }
146
+ }
147
+ else if (0 === modes.length) {
148
+ part = part.unify(val_1.TOP, ctx);
149
+ if (part instanceof Nil_1.Nil) {
150
+ // TODO: var not found, so can't find path
151
+ return;
152
+ }
153
+ else {
154
+ part = '' + part.peg;
155
+ }
156
+ }
57
157
  }
58
158
  else {
59
- // Ensure RefVal done is incremented
60
- this.done = type_1.DONE === this.done ? type_1.DONE : this.done + 1;
61
- out = new ConjunctVal_1.ConjunctVal([this, peer], ctx);
159
+ parts.push(part);
62
160
  }
63
161
  }
162
+ // console.log('modes', modes)
163
+ if (this.absolute) {
164
+ fullpath = parts;
165
+ }
64
166
  else {
65
- out = (0, op_1.unite)(ctx, resolved, peer);
167
+ fullpath = fullpath.slice(0, (modes.includes('SELF') ? 0 :
168
+ modes.includes('PARENT') ? -1 :
169
+ -1 // siblings
170
+ )).concat(parts);
171
+ }
172
+ let sep = '.';
173
+ fullpath = fullpath
174
+ .reduce(((a, p) => (p === sep ? a.length = a.length - 1 : a.push(p), a)), []);
175
+ let node = ctx.root;
176
+ let pI = 0;
177
+ for (; pI < fullpath.length; pI++) {
178
+ let part = fullpath[pI];
179
+ if (node instanceof MapVal_1.MapVal) {
180
+ node = node.peg[part];
181
+ }
182
+ else {
183
+ break;
184
+ }
185
+ }
186
+ if (pI === fullpath.length) {
187
+ // if (this.attr && 'KEY' === this.attr.kind) {
188
+ if (modes.includes('KEY')) {
189
+ // let key = fullpath[fullpath.length - ('' === this.attr.part ? 1 : 2)]
190
+ let key = fullpath[fullpath.length - 1];
191
+ let sv = new val_1.StringVal({ peg: null == key ? '' : key }, ctx);
192
+ // TODO: other props?
193
+ sv.done = type_1.DONE;
194
+ sv.path = this.path;
195
+ return sv;
196
+ }
197
+ else {
198
+ return node;
199
+ }
66
200
  }
67
- out.done = type_1.DONE === out.done ? type_1.DONE : this.done + 1;
68
- return out;
69
201
  }
70
202
  same(peer) {
71
203
  return null == peer ? false : this.peg === peer.peg;
72
204
  }
205
+ clone(spec, ctx) {
206
+ let out = super.clone({
207
+ peg: this.peg,
208
+ absolute: this.absolute,
209
+ ...(spec || {})
210
+ }, ctx);
211
+ // out.absolute = this.absolute
212
+ // out.peg = this.peg
213
+ return out;
214
+ }
73
215
  get canon() {
74
- return this.peg;
216
+ let str = (this.absolute ? '$' : '') +
217
+ (0 < this.peg.length ? '.' : '') +
218
+ // this.peg.join(this.sep)
219
+ this.peg.map((p) => '.' === p ? '' :
220
+ (p.isVal ? p.canon : '' + p))
221
+ .join('.');
222
+ return str;
75
223
  }
76
224
  gen(ctx) {
77
- // throw new Error('REF ' + this.peg)
78
225
  if (ctx) {
79
226
  ctx.err.push(Nil_1.Nil.make(ctx, 'ref', this.peg, undefined));
80
227
  }
228
+ throw new Error('REF-gen ' + this.peg);
81
229
  return undefined;
82
230
  }
83
231
  }