@suss/resolution 0.26.0 → 0.28.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/index.cjs CHANGED
@@ -21,6 +21,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
23
  ANSWER_RELATIONS: () => ANSWER_RELATIONS,
24
+ ASKING_RELATIONS: () => ASKING_RELATIONS,
24
25
  FACT_CONTRACT_CASES: () => FACT_CONTRACT_CASES,
25
26
  NAMESPACE_IMPORT: () => NAMESPACE_IMPORT,
26
27
  NAMESPACE_IMPORT_NAME: () => NAMESPACE_IMPORT_NAME,
@@ -29,6 +30,9 @@ __export(index_exports, {
29
30
  RESULT_STEP: () => RESULT_STEP,
30
31
  VALUE_STEP: () => VALUE_STEP,
31
32
  agreedMountPrefix: () => agreedMountPrefix,
33
+ askResolution: () => askResolution,
34
+ calleeOutcomeOf: () => calleeOutcomeOf,
35
+ calleeOutcomes: () => calleeOutcomes,
32
36
  checkFactContract: () => checkFactContract,
33
37
  explainResolutionProof: () => explainResolutionProof,
34
38
  explainResolvedKey: () => explainResolvedKey,
@@ -36,12 +40,275 @@ __export(index_exports, {
36
40
  mountPathsOf: () => mountPathsOf,
37
41
  nodeOfKey: () => nodeOfKey,
38
42
  placeholderValues: () => placeholderValues,
43
+ queryFacts: () => queryFacts,
39
44
  renderExplanation: () => renderExplanation,
45
+ resolutionProgram: () => resolutionProgram,
40
46
  singleAnswers: () => singleAnswers,
47
+ startsAtName: () => startsAtName,
48
+ valueLeftByWrites: () => valueLeftByWrites,
49
+ writesRunInOrder: () => writesRunInOrder,
50
+ writtenSourcesOf: () => writtenSourcesOf,
41
51
  writtenValueOf: () => writtenValueOf
42
52
  });
43
53
  module.exports = __toCommonJS(index_exports);
44
54
 
55
+ // src/program.ts
56
+ var import_datalog = require("@suss/datalog");
57
+ var ASKING_RELATIONS = [
58
+ "wanted",
59
+ "wantedOrigin",
60
+ "wantedCallOrigin",
61
+ "wantedExportsOf",
62
+ "wantedSubject",
63
+ "wantedAnchor",
64
+ "wantedAncestry"
65
+ ];
66
+ var NO_LANGUAGE_RULES = [];
67
+ var programs = /* @__PURE__ */ new WeakMap();
68
+ function resolutionProgram(languageRules = NO_LANGUAGE_RULES) {
69
+ const built = programs.get(languageRules);
70
+ if (built !== void 0) {
71
+ return built;
72
+ }
73
+ const rules = [
74
+ ...RESOLUTION_RULES,
75
+ ...languageRules,
76
+ ...RESOLUTION_QUESTIONS
77
+ ];
78
+ const program = process.env.SUSS_RESOLUTION_ON_DEMAND === "0" ? { rules, demandDriven: [], demands: [] } : (0, import_datalog.deriveOnDemand)(rules, ANSWER_RELATIONS);
79
+ programs.set(languageRules, program);
80
+ return program;
81
+ }
82
+ function queryFacts(program) {
83
+ if (program.demandDriven.length === 0) {
84
+ return [];
85
+ }
86
+ return [...program.demandDriven, ...ASKING_RELATIONS];
87
+ }
88
+ var askedByDb = /* @__PURE__ */ new WeakMap();
89
+ function askedOf(db, asking) {
90
+ let byRelation = askedByDb.get(db);
91
+ if (byRelation === void 0) {
92
+ byRelation = /* @__PURE__ */ new Map();
93
+ askedByDb.set(db, byRelation);
94
+ }
95
+ let asked = byRelation.get(asking);
96
+ if (asked === void 0) {
97
+ asked = /* @__PURE__ */ new Set();
98
+ byRelation.set(asking, asked);
99
+ }
100
+ return asked;
101
+ }
102
+ function askResolution(db, keys, asking = "wanted", program = resolutionProgram()) {
103
+ const asked = askedOf(db, asking);
104
+ const fresh = [...keys].filter((key) => !asked.has(key));
105
+ if (fresh.length === 0) {
106
+ return;
107
+ }
108
+ for (const key of fresh) {
109
+ asked.add(key);
110
+ db.add(asking, [key]);
111
+ }
112
+ (0, import_datalog.evaluate)(db, program.rules);
113
+ const forget = queryFacts(program);
114
+ if (forget.length > 0) {
115
+ (0, import_datalog.clearRelations)(db, program.rules, forget);
116
+ }
117
+ }
118
+
119
+ // src/callee.ts
120
+ var UNDECLARED = { kind: "undeclared" };
121
+ var UNSETTLED = { kind: "unsettled" };
122
+ var OUTSIDE_RUN = { kind: "outsideRun" };
123
+ function calleeOutcomes(db, keys, program = resolutionProgram()) {
124
+ askAboutSources(db, keys, program);
125
+ const reading = new Reading(db);
126
+ const outcomes = /* @__PURE__ */ new Map();
127
+ for (const key of keys) {
128
+ outcomes.set(key, reading.outcomeOf(key));
129
+ }
130
+ return outcomes;
131
+ }
132
+ function calleeOutcomeOf(db, key, program = resolutionProgram()) {
133
+ return calleeOutcomes(db, [key], program).get(key) ?? UNDECLARED;
134
+ }
135
+ function askAboutSources(db, keys, program) {
136
+ let wave = [...new Set(keys)];
137
+ const asked = new Set(wave);
138
+ while (wave.length > 0) {
139
+ askResolution(db, wave, "wanted", program);
140
+ const next = [];
141
+ for (const key of wave) {
142
+ if (!decidedByCallers(db, key) && answersFor(db, key).length > 0) {
143
+ continue;
144
+ }
145
+ for (const source of sourcesOf(db, key)) {
146
+ if (!asked.has(source)) {
147
+ asked.add(source);
148
+ next.push(source);
149
+ }
150
+ }
151
+ }
152
+ wave = next;
153
+ }
154
+ }
155
+ function sourcesOf(db, key) {
156
+ const base = db.lookup("readsProperty", 0, key)[0];
157
+ if (base !== void 0) {
158
+ return [String(base[1])];
159
+ }
160
+ const call = db.lookup("call", 0, key)[0];
161
+ if (call !== void 0) {
162
+ return [String(call[1])];
163
+ }
164
+ return writtenSourcesOf(db, key);
165
+ }
166
+ var WRITE_RELATIONS = ["binds", "endsHolding", "mayHold"];
167
+ function writtenSourcesOf(db, key) {
168
+ const found = [];
169
+ for (const relation of WRITE_RELATIONS) {
170
+ for (const row of db.lookup(relation, 0, key)) {
171
+ found.push(String(row[1]));
172
+ }
173
+ }
174
+ return found;
175
+ }
176
+ function answersFor(db, key) {
177
+ const found = /* @__PURE__ */ new Map();
178
+ for (const row of db.lookup("wantedComesTo", 0, key)) {
179
+ const answer = String(row[1]);
180
+ if (db.has("func", [answer])) {
181
+ found.set(answer, { kind: "function", key: answer });
182
+ continue;
183
+ }
184
+ if (db.has("objectValue", [answer])) {
185
+ found.set(answer, { kind: "object", key: answer });
186
+ }
187
+ }
188
+ return [...found.values()];
189
+ }
190
+ function outcomeKey(outcome) {
191
+ if (outcome.kind === "function" || outcome.kind === "object") {
192
+ return `${outcome.kind}:${outcome.key}`;
193
+ }
194
+ return outcome.kind;
195
+ }
196
+ var THROUGH_BASE = {
197
+ function: UNDECLARED,
198
+ object: UNDECLARED
199
+ };
200
+ var THROUGH_CALL = {
201
+ function: UNSETTLED,
202
+ object: UNSETTLED
203
+ };
204
+ var Reading = class {
205
+ constructor(db) {
206
+ this.db = db;
207
+ }
208
+ db;
209
+ memo = /* @__PURE__ */ new Map();
210
+ walking = /* @__PURE__ */ new Set();
211
+ outcomeOf(key) {
212
+ return this.walk(key).outcome;
213
+ }
214
+ walk(key) {
215
+ const known = this.memo.get(key);
216
+ if (known !== void 0) {
217
+ return { outcome: known, looped: false };
218
+ }
219
+ if (this.walking.has(key)) {
220
+ return { outcome: UNDECLARED, looped: true };
221
+ }
222
+ this.walking.add(key);
223
+ const found = this.decide(key);
224
+ this.walking.delete(key);
225
+ if (!found.looped) {
226
+ this.memo.set(key, found.outcome);
227
+ }
228
+ return found;
229
+ }
230
+ decide(key) {
231
+ if (decidedByCallers(this.db, key)) {
232
+ return this.fromWrites(key);
233
+ }
234
+ const answers = answersFor(this.db, key);
235
+ if (answers.length > 1) {
236
+ return {
237
+ outcome: { kind: "severalSources", sources: answers.map(outcomeKey) },
238
+ looped: false
239
+ };
240
+ }
241
+ const only = answers[0];
242
+ if (only !== void 0) {
243
+ return { outcome: only, looped: false };
244
+ }
245
+ return this.refusal(key);
246
+ }
247
+ refusal(key) {
248
+ const base = this.db.lookup("readsProperty", 0, key)[0];
249
+ if (base !== void 0) {
250
+ return this.through(THROUGH_BASE, String(base[1]));
251
+ }
252
+ const call = this.db.lookup("call", 0, key)[0];
253
+ if (call !== void 0) {
254
+ return this.through(THROUGH_CALL, String(call[1]));
255
+ }
256
+ return this.fromWrites(key);
257
+ }
258
+ through(table, source) {
259
+ const found = this.walk(source);
260
+ return {
261
+ outcome: table[found.outcome.kind] ?? found.outcome,
262
+ looped: found.looped
263
+ };
264
+ }
265
+ /**
266
+ * What the writes to a name, and the arguments a call put in a
267
+ * parameter, agree the value is. A source that says nothing is left
268
+ * out, so a name narrowed through a second name keeps the outcome it
269
+ * started with rather than counting as a second source.
270
+ */
271
+ fromWrites(key) {
272
+ const found = /* @__PURE__ */ new Map();
273
+ let looped = false;
274
+ for (const source of writtenSourcesOf(this.db, key)) {
275
+ const from = this.walk(source);
276
+ looped = looped || from.looped;
277
+ if (from.outcome.kind !== "undeclared") {
278
+ found.set(outcomeKey(from.outcome), from.outcome);
279
+ }
280
+ }
281
+ if (isParameter(this.db, key)) {
282
+ found.set("callerSupplied", { kind: "callerSupplied", key });
283
+ }
284
+ if (found.size > 1) {
285
+ return {
286
+ outcome: { kind: "severalSources", sources: [...found.keys()] },
287
+ looped
288
+ };
289
+ }
290
+ const only = [...found.values()][0];
291
+ return { outcome: only ?? whereItCameFrom(this.db, key), looped };
292
+ }
293
+ };
294
+ function isParameter(db, key) {
295
+ return db.lookup("paramNamed", 2, key).length > 0 || db.lookup("paramOf", 2, key).length > 0;
296
+ }
297
+ function decidedByCallers(db, key) {
298
+ return isParameter(db, key) && db.lookup("binds", 0, key).length === 0;
299
+ }
300
+ function whereItCameFrom(db, key) {
301
+ for (const row of db.lookup("imports", 0, key)) {
302
+ if (db.lookup("exportsAs", 0, String(row[1])).length === 0) {
303
+ return OUTSIDE_RUN;
304
+ }
305
+ }
306
+ if (db.has("writtenValue", [key])) {
307
+ return OUTSIDE_RUN;
308
+ }
309
+ return db.has("writesUnstated", [key]) ? UNSETTLED : UNDECLARED;
310
+ }
311
+
45
312
  // src/contract.ts
46
313
  var distinct = (values) => new Set(values).size;
47
314
  var RELATIONS_THAT_CAN_CROSS = ["imports", "binds", "reExports"];
@@ -236,12 +503,12 @@ function checkFactContract(sources, emit, options = {}) {
236
503
  }
237
504
 
238
505
  // src/explain.ts
239
- var import_datalog = require("@suss/datalog");
506
+ var import_datalog2 = require("@suss/datalog");
240
507
  function exportTrail(proof, describe) {
241
508
  if (proof.kind !== "derived") {
242
509
  return [];
243
510
  }
244
- const name = (0, import_datalog.ruleLabel)(proof.rule);
511
+ const name = (0, import_datalog2.ruleLabel)(proof.rule);
245
512
  if (name === "re-export") {
246
513
  const [m, n, m2, n2] = proof.premises[0].tuple;
247
514
  return [
@@ -352,7 +619,7 @@ function inlineChain(proof, state) {
352
619
  return explained.steps.map((step) => step.reason);
353
620
  }
354
621
  function stepFrom(proof, state) {
355
- const name = (0, import_datalog.ruleLabel)(proof.rule);
622
+ const name = (0, import_datalog2.ruleLabel)(proof.rule);
356
623
  const phrase = state.phrases[name];
357
624
  const from = proof.tuple[0];
358
625
  const to = proof.tuple[1];
@@ -521,6 +788,47 @@ function pathsOf(edges, memo, childId, visiting) {
521
788
  return result;
522
789
  }
523
790
 
791
+ // src/nameReads.ts
792
+ function writesRunInOrder(scope, name, writes, rules) {
793
+ const last = writes[writes.length - 1];
794
+ if (scope === null || last === void 0) {
795
+ return false;
796
+ }
797
+ if (!writes.every((write) => write.direct)) {
798
+ return false;
799
+ }
800
+ return !isReadBefore(scope, name, last.at.startIndex, rules);
801
+ }
802
+ function isReadBefore(scope, name, position, rules) {
803
+ let found = false;
804
+ const visit = (node) => {
805
+ if (found || node.startIndex >= position) {
806
+ return;
807
+ }
808
+ if (rules.laterBodies.has(node.type)) {
809
+ return;
810
+ }
811
+ if (rules.nameTypes.has(node.type) && node.text === name) {
812
+ found = rules.isRead(node);
813
+ return;
814
+ }
815
+ for (const child of rules.childrenOf(node)) {
816
+ visit(child);
817
+ }
818
+ };
819
+ for (const child of rules.childrenOf(scope)) {
820
+ visit(child);
821
+ }
822
+ return found;
823
+ }
824
+ function startsAtName(node, name, rules) {
825
+ if (rules.nameTypes.has(node.type)) {
826
+ return node.text === name;
827
+ }
828
+ const inner = rules.readFirst(node);
829
+ return inner !== null && startsAtName(inner, name, rules);
830
+ }
831
+
524
832
  // src/nodeKey.ts
525
833
  var SPAN_KEY = /^(.*):(\d+)-(\d+)$/;
526
834
  function nodeOfKey(rootsByFile, key) {
@@ -548,10 +856,10 @@ function nodeOfKey(rootsByFile, key) {
548
856
  }
549
857
 
550
858
  // src/session.ts
551
- var import_datalog2 = require("@suss/datalog");
859
+ var import_datalog3 = require("@suss/datalog");
552
860
  function explainResolvedKey(options) {
553
861
  const { db, rules, key, locate, displayPath } = options;
554
- const proofDb = new import_datalog2.Database();
862
+ const proofDb = new import_datalog3.Database();
555
863
  let baseFacts = 0;
556
864
  for (const relation of db.relationNames()) {
557
865
  for (const tuple of db.facts(relation)) {
@@ -560,7 +868,7 @@ function explainResolvedKey(options) {
560
868
  }
561
869
  }
562
870
  const started = performance.now();
563
- (0, import_datalog2.evaluate)(proofDb, rules, import_datalog2.witnesses);
871
+ (0, import_datalog3.evaluate)(proofDb, rules, import_datalog3.witnesses);
564
872
  const evaluateMs = performance.now() - started;
565
873
  const derivedFacts = proofDb.relationNames().reduce((count, relation) => count + proofDb.size(relation), 0) - baseFacts;
566
874
  const targets = new Set(
@@ -570,7 +878,7 @@ function explainResolvedKey(options) {
570
878
  return null;
571
879
  }
572
880
  const target = [...targets][0];
573
- const proof = (0, import_datalog2.proofOf)(
881
+ const proof = (0, import_datalog3.proofOf)(
574
882
  proofDb,
575
883
  "resolves",
576
884
  [key, target],
@@ -634,6 +942,35 @@ function withoutPlaceholders(answers, placeholders) {
634
942
  return kept;
635
943
  }
636
944
 
945
+ // src/writes.ts
946
+ function valueLeftByWrites(writes, ordered) {
947
+ const deciding = writes.filter((write) => !write.narrowsName);
948
+ const left = deciding.length === 0 ? writes : deciding;
949
+ if (left.some((write) => write.value === null)) {
950
+ return null;
951
+ }
952
+ if (ordered) {
953
+ return left[left.length - 1]?.value ?? null;
954
+ }
955
+ return sharedConstruction(left);
956
+ }
957
+ function sharedConstruction(writes) {
958
+ let settled = null;
959
+ for (const write of writes) {
960
+ if (write.placeholder) {
961
+ continue;
962
+ }
963
+ if (write.construction === null) {
964
+ return null;
965
+ }
966
+ if (settled !== null && write.construction !== settled.construction) {
967
+ return null;
968
+ }
969
+ settled = write;
970
+ }
971
+ return settled?.value ?? null;
972
+ }
973
+
637
974
  // src/writtenValue.ts
638
975
  function writtenValueOf(db, key, ask) {
639
976
  const placeholders = placeholderValues(db);
@@ -655,336 +992,336 @@ function writtenValueOf(db, key, ask) {
655
992
  }
656
993
 
657
994
  // src/index.ts
658
- var import_datalog3 = require("@suss/datalog");
659
- var VALUE_STEP = (0, import_datalog3.constant)("value");
995
+ var import_datalog4 = require("@suss/datalog");
996
+ var VALUE_STEP = (0, import_datalog4.constant)("value");
660
997
  var NAMESPACE_IMPORT_NAME = "*";
661
- var NAMESPACE_IMPORT = (0, import_datalog3.constant)(NAMESPACE_IMPORT_NAME);
662
- var RESULT_STEP = (0, import_datalog3.constant)("result");
998
+ var NAMESPACE_IMPORT = (0, import_datalog4.constant)(NAMESPACE_IMPORT_NAME);
999
+ var RESULT_STEP = (0, import_datalog4.constant)("result");
663
1000
  var RESOLUTION_RULES = [
664
1001
  // Aliasing: const x = y, or an identifier referencing a declaration.
665
1002
  // A language with a hop of its own, like JavaScript's `.bind`, states
666
1003
  // it as a step too, or every question but `comesTo` misses it.
667
- (0, import_datalog3.rule)(
1004
+ (0, import_datalog4.rule)(
668
1005
  "stepsTo",
669
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y"), VALUE_STEP],
670
- [(0, import_datalog3.lit)("binds", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y"))],
1006
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y"), VALUE_STEP],
1007
+ [(0, import_datalog4.lit)("binds", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y"))],
671
1008
  "alias"
672
1009
  ),
673
1010
  // A name written more than once has the value the last write left
674
1011
  // there. The adapter works out which write that is and stays quiet
675
1012
  // when control flow decides, so such a name steps nowhere at all.
676
- (0, import_datalog3.rule)(
1013
+ (0, import_datalog4.rule)(
677
1014
  "stepsTo",
678
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y"), VALUE_STEP],
679
- [(0, import_datalog3.lit)("endsHolding", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y"))],
1015
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y"), VALUE_STEP],
1016
+ [(0, import_datalog4.lit)("endsHolding", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y"))],
680
1017
  "last write"
681
1018
  ),
682
1019
  // A fallback says the value is one of its branches, so each branch is
683
1020
  // a step. A branch that resolves to nothing makes no claim, and two
684
1021
  // branches resolving to different things fail the single-answer policy.
685
- (0, import_datalog3.rule)(
1022
+ (0, import_datalog4.rule)(
686
1023
  "stepsTo",
687
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("b"), VALUE_STEP],
688
- [(0, import_datalog3.lit)("fallbackBranch", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("b"))],
1024
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("b"), VALUE_STEP],
1025
+ [(0, import_datalog4.lit)("fallbackBranch", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("b"))],
689
1026
  "fallback"
690
1027
  ),
691
1028
  // An import steps to what the module exports under that name.
692
- (0, import_datalog3.rule)(
1029
+ (0, import_datalog4.rule)(
693
1030
  "stepsTo",
694
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("value"), VALUE_STEP],
1031
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("value"), VALUE_STEP],
695
1032
  [
696
- (0, import_datalog3.lit)("imports", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n")),
697
- (0, import_datalog3.lit)("moduleExport", (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("value"))
1033
+ (0, import_datalog4.lit)("imports", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n")),
1034
+ (0, import_datalog4.lit)("moduleExport", (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("value"))
698
1035
  ],
699
1036
  "import"
700
1037
  ),
701
1038
  // A parameter steps to what a call passes it. A function called from
702
1039
  // several places leaves its parameter with more than one value, and a
703
1040
  // caller that needs those apart asks `paramAt`.
704
- (0, import_datalog3.rule)(
1041
+ (0, import_datalog4.rule)(
705
1042
  "stepsTo",
706
- [(0, import_datalog3.variable)("p"), (0, import_datalog3.variable)("a"), VALUE_STEP],
707
- [(0, import_datalog3.lit)("passesArgument", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("p"), (0, import_datalog3.variable)("a"))],
1043
+ [(0, import_datalog4.variable)("p"), (0, import_datalog4.variable)("a"), VALUE_STEP],
1044
+ [(0, import_datalog4.lit)("passesArgument", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("p"), (0, import_datalog4.variable)("a"))],
708
1045
  "argument"
709
1046
  ),
710
1047
  // Reading a property steps to what the object contains under that
711
1048
  // name, whichever way the object arrived: `routes.list` off a name,
712
1049
  // or `make(body).handle` off a call.
713
- (0, import_datalog3.rule)(
1050
+ (0, import_datalog4.rule)(
714
1051
  "stepsTo",
715
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("held"), VALUE_STEP],
1052
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("held"), VALUE_STEP],
716
1053
  [
717
- (0, import_datalog3.lit)("readsProperty", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("o"), (0, import_datalog3.variable)("n")),
718
- (0, import_datalog3.lit)("objectOf", (0, import_datalog3.variable)("o"), (0, import_datalog3.variable)("obj")),
719
- (0, import_datalog3.lit)("contains", (0, import_datalog3.variable)("obj"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("held"))
1054
+ (0, import_datalog4.lit)("readsProperty", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("o"), (0, import_datalog4.variable)("n")),
1055
+ (0, import_datalog4.lit)("objectOf", (0, import_datalog4.variable)("o"), (0, import_datalog4.variable)("obj")),
1056
+ (0, import_datalog4.lit)("contains", (0, import_datalog4.variable)("obj"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("held"))
720
1057
  ],
721
1058
  "property read"
722
1059
  ),
723
1060
  // Calling a class makes one of it, so the call steps to the class and
724
1061
  // a method read off the result is the one the class declares. The
725
1062
  // caveat below is about a factory function, and a class is not one.
726
- (0, import_datalog3.rule)(
1063
+ (0, import_datalog4.rule)(
727
1064
  "stepsTo",
728
- [(0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("cls"), VALUE_STEP],
1065
+ [(0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("cls"), VALUE_STEP],
729
1066
  [
730
- (0, import_datalog3.lit)("call", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("c")),
731
- (0, import_datalog3.lit)("comesTo", (0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("cls")),
732
- (0, import_datalog3.lit)("objectValue", (0, import_datalog3.variable)("cls"))
1067
+ (0, import_datalog4.lit)("call", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("c")),
1068
+ (0, import_datalog4.lit)("comesTo", (0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("cls")),
1069
+ (0, import_datalog4.lit)("objectValue", (0, import_datalog4.variable)("cls"))
733
1070
  ],
734
1071
  "class instance"
735
1072
  ),
736
1073
  // Wrapper transparency, derived: calling a factory that returns a
737
1074
  // function which calls its parameter k steps to argument k.
738
- (0, import_datalog3.rule)(
1075
+ (0, import_datalog4.rule)(
739
1076
  "stepsTo",
740
- [(0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("a"), VALUE_STEP],
1077
+ [(0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("a"), VALUE_STEP],
741
1078
  [
742
- (0, import_datalog3.lit)("call", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("c")),
743
- (0, import_datalog3.lit)("comesTo", (0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("f")),
744
- (0, import_datalog3.lit)("unwraps", (0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("k")),
745
- (0, import_datalog3.lit)("callArg", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("k"), (0, import_datalog3.variable)("a"))
1079
+ (0, import_datalog4.lit)("call", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("c")),
1080
+ (0, import_datalog4.lit)("comesTo", (0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("f")),
1081
+ (0, import_datalog4.lit)("unwraps", (0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("k")),
1082
+ (0, import_datalog4.lit)("callArg", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("k"), (0, import_datalog4.variable)("a"))
746
1083
  ],
747
1084
  "factory unwrap"
748
1085
  ),
749
1086
  // Wrapper transparency, declared: a pack says this callee wraps
750
1087
  // argument k. The callee has to come from the library the pack said,
751
1088
  // so a local object spelled the same way is not mistaken for it.
752
- (0, import_datalog3.rule)(
1089
+ (0, import_datalog4.rule)(
753
1090
  "stepsTo",
754
- [(0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("a"), VALUE_STEP],
1091
+ [(0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("a"), VALUE_STEP],
755
1092
  [
756
- (0, import_datalog3.lit)("calleeName", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("n")),
757
- (0, import_datalog3.lit)("unwrapsByName", (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("k")),
758
- (0, import_datalog3.lit)("wrapperModule", (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("m")),
759
- (0, import_datalog3.lit)("calleeOrigin", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("m")),
760
- (0, import_datalog3.lit)("callArg", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("k"), (0, import_datalog3.variable)("a"))
1093
+ (0, import_datalog4.lit)("calleeName", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("n")),
1094
+ (0, import_datalog4.lit)("unwrapsByName", (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("k")),
1095
+ (0, import_datalog4.lit)("wrapperModule", (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("m")),
1096
+ (0, import_datalog4.lit)("calleeOrigin", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("m")),
1097
+ (0, import_datalog4.lit)("callArg", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("k"), (0, import_datalog4.variable)("a"))
761
1098
  ],
762
1099
  "declared wrapper"
763
1100
  ),
764
1101
  // The one step that runs a function forwards: a call steps to what
765
1102
  // the function it invokes returns.
766
- (0, import_datalog3.rule)(
1103
+ (0, import_datalog4.rule)(
767
1104
  "stepsTo",
768
- [(0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("ret"), RESULT_STEP],
769
- [(0, import_datalog3.lit)("invokes", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("f")), (0, import_datalog3.lit)("returnsValue", (0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("ret"))],
1105
+ [(0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("ret"), RESULT_STEP],
1106
+ [(0, import_datalog4.lit)("invokes", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("f")), (0, import_datalog4.lit)("returnsValue", (0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("ret"))],
770
1107
  "call result"
771
1108
  ),
772
1109
  // Where a walk gets to, and whether it ran a call on the way. The walk
773
1110
  // so far comes first, so demand stays on the value asked about; the
774
1111
  // README says what the other order cost.
775
- (0, import_datalog3.rule)(
1112
+ (0, import_datalog4.rule)(
776
1113
  "reaches",
777
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"), (0, import_datalog3.variable)("kind")],
778
- [(0, import_datalog3.lit)("stepsTo", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"), (0, import_datalog3.variable)("kind"))]
1114
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"), (0, import_datalog4.variable)("kind")],
1115
+ [(0, import_datalog4.lit)("stepsTo", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"), (0, import_datalog4.variable)("kind"))]
779
1116
  ),
780
- (0, import_datalog3.rule)(
1117
+ (0, import_datalog4.rule)(
781
1118
  "reaches",
782
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"), (0, import_datalog3.variable)("kind")],
1119
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"), (0, import_datalog4.variable)("kind")],
783
1120
  [
784
- (0, import_datalog3.lit)("reaches", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y"), VALUE_STEP),
785
- (0, import_datalog3.lit)("stepsTo", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("z"), (0, import_datalog3.variable)("kind"))
1121
+ (0, import_datalog4.lit)("reaches", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y"), VALUE_STEP),
1122
+ (0, import_datalog4.lit)("stepsTo", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("z"), (0, import_datalog4.variable)("kind"))
786
1123
  ]
787
1124
  ),
788
1125
  // Two rules rather than one leaving the next step's kind free. A free
789
1126
  // kind is a second question about the same relation, and a
790
1127
  // demand-driven run then derives both to answer either.
791
- (0, import_datalog3.rule)(
1128
+ (0, import_datalog4.rule)(
792
1129
  "reaches",
793
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"), RESULT_STEP],
1130
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"), RESULT_STEP],
794
1131
  [
795
- (0, import_datalog3.lit)("reaches", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y"), RESULT_STEP),
796
- (0, import_datalog3.lit)("stepsTo", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("z"), VALUE_STEP)
1132
+ (0, import_datalog4.lit)("reaches", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y"), RESULT_STEP),
1133
+ (0, import_datalog4.lit)("stepsTo", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("z"), VALUE_STEP)
797
1134
  ]
798
1135
  ),
799
- (0, import_datalog3.rule)(
1136
+ (0, import_datalog4.rule)(
800
1137
  "reaches",
801
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"), RESULT_STEP],
1138
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"), RESULT_STEP],
802
1139
  [
803
- (0, import_datalog3.lit)("reaches", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y"), RESULT_STEP),
804
- (0, import_datalog3.lit)("stepsTo", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("z"), RESULT_STEP)
1140
+ (0, import_datalog4.lit)("reaches", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y"), RESULT_STEP),
1141
+ (0, import_datalog4.lit)("stepsTo", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("z"), RESULT_STEP)
805
1142
  ]
806
1143
  ),
807
1144
  // What a value comes down to: the walk that never ran a call, stopped
808
1145
  // at a function or an object. Something already written out comes to
809
1146
  // itself, and every other walk ends at one of those.
810
- (0, import_datalog3.rule)("comesTo", [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("x")], [(0, import_datalog3.lit)("func", (0, import_datalog3.variable)("x"))]),
811
- (0, import_datalog3.rule)("comesTo", [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("x")], [(0, import_datalog3.lit)("objectValue", (0, import_datalog3.variable)("x"))]),
812
- (0, import_datalog3.rule)(
1147
+ (0, import_datalog4.rule)("comesTo", [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("x")], [(0, import_datalog4.lit)("func", (0, import_datalog4.variable)("x"))]),
1148
+ (0, import_datalog4.rule)("comesTo", [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("x")], [(0, import_datalog4.lit)("objectValue", (0, import_datalog4.variable)("x"))]),
1149
+ (0, import_datalog4.rule)(
813
1150
  "comesTo",
814
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
815
- [(0, import_datalog3.lit)("reaches", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"), VALUE_STEP), (0, import_datalog3.lit)("func", (0, import_datalog3.variable)("z"))]
1151
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1152
+ [(0, import_datalog4.lit)("reaches", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"), VALUE_STEP), (0, import_datalog4.lit)("func", (0, import_datalog4.variable)("z"))]
816
1153
  ),
817
- (0, import_datalog3.rule)(
1154
+ (0, import_datalog4.rule)(
818
1155
  "comesTo",
819
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
820
- [(0, import_datalog3.lit)("reaches", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"), VALUE_STEP), (0, import_datalog3.lit)("objectValue", (0, import_datalog3.variable)("z"))]
1156
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1157
+ [(0, import_datalog4.lit)("reaches", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"), VALUE_STEP), (0, import_datalog4.lit)("objectValue", (0, import_datalog4.variable)("z"))]
821
1158
  ),
822
1159
  // The same stopping condition, for the walk that ran a call. A call
823
1160
  // gets no `comesTo` answer on purpose: coming back with what a
824
1161
  // factory returned would fight the unwrapping answer.
825
- (0, import_datalog3.rule)(
1162
+ (0, import_datalog4.rule)(
826
1163
  "givesBack",
827
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
828
- [(0, import_datalog3.lit)("reaches", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"), RESULT_STEP), (0, import_datalog3.lit)("func", (0, import_datalog3.variable)("z"))]
1164
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1165
+ [(0, import_datalog4.lit)("reaches", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"), RESULT_STEP), (0, import_datalog4.lit)("func", (0, import_datalog4.variable)("z"))]
829
1166
  ),
830
- (0, import_datalog3.rule)(
1167
+ (0, import_datalog4.rule)(
831
1168
  "givesBack",
832
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
833
- [(0, import_datalog3.lit)("reaches", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"), RESULT_STEP), (0, import_datalog3.lit)("objectValue", (0, import_datalog3.variable)("z"))]
1169
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1170
+ [(0, import_datalog4.lit)("reaches", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"), RESULT_STEP), (0, import_datalog4.lit)("objectValue", (0, import_datalog4.variable)("z"))]
834
1171
  ),
835
1172
  // Following a value to the expression it is written as, whatever kind
836
1173
  // that is. A GraphQL document is neither a function nor an object, so
837
1174
  // `comesTo` never reaches one.
838
- (0, import_datalog3.rule)("isWrittenAs", [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("x")], [(0, import_datalog3.lit)("writtenValue", (0, import_datalog3.variable)("x"))]),
839
- (0, import_datalog3.rule)("isWrittenAs", [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("x")], [(0, import_datalog3.lit)("objectValue", (0, import_datalog3.variable)("x"))]),
840
- (0, import_datalog3.rule)(
1175
+ (0, import_datalog4.rule)("isWrittenAs", [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("x")], [(0, import_datalog4.lit)("writtenValue", (0, import_datalog4.variable)("x"))]),
1176
+ (0, import_datalog4.rule)("isWrittenAs", [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("x")], [(0, import_datalog4.lit)("objectValue", (0, import_datalog4.variable)("x"))]),
1177
+ (0, import_datalog4.rule)(
841
1178
  "isWrittenAs",
842
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
843
- [(0, import_datalog3.lit)("reaches", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"), VALUE_STEP), (0, import_datalog3.lit)("writtenValue", (0, import_datalog3.variable)("z"))]
1179
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1180
+ [(0, import_datalog4.lit)("reaches", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"), VALUE_STEP), (0, import_datalog4.lit)("writtenValue", (0, import_datalog4.variable)("z"))]
844
1181
  ),
845
- (0, import_datalog3.rule)(
1182
+ (0, import_datalog4.rule)(
846
1183
  "isWrittenAs",
847
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
848
- [(0, import_datalog3.lit)("reaches", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"), VALUE_STEP), (0, import_datalog3.lit)("objectValue", (0, import_datalog3.variable)("z"))]
1184
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1185
+ [(0, import_datalog4.lit)("reaches", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"), VALUE_STEP), (0, import_datalog4.lit)("objectValue", (0, import_datalog4.variable)("z"))]
849
1186
  ),
850
1187
  // A call is written as whatever its callee's return value is written
851
1188
  // as. Unlike `comesTo`, this has nothing to protect: which expression
852
1189
  // a value was written as does not compete with unwrapping it.
853
- (0, import_datalog3.rule)(
1190
+ (0, import_datalog4.rule)(
854
1191
  "isWrittenAs",
855
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
1192
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
856
1193
  [
857
- (0, import_datalog3.lit)("invokes", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("f")),
858
- (0, import_datalog3.lit)("returnsValue", (0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("ret")),
859
- (0, import_datalog3.lit)("isWrittenAs", (0, import_datalog3.variable)("ret"), (0, import_datalog3.variable)("z"))
1194
+ (0, import_datalog4.lit)("invokes", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("f")),
1195
+ (0, import_datalog4.lit)("returnsValue", (0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("ret")),
1196
+ (0, import_datalog4.lit)("isWrittenAs", (0, import_datalog4.variable)("ret"), (0, import_datalog4.variable)("z"))
860
1197
  ]
861
1198
  ),
862
1199
  // What one call site put in a parameter, told apart from what the
863
1200
  // other callers passed.
864
- (0, import_datalog3.rule)(
1201
+ (0, import_datalog4.rule)(
865
1202
  "paramAt",
866
- [(0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("p"), (0, import_datalog3.variable)("z")],
1203
+ [(0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("p"), (0, import_datalog4.variable)("z")],
867
1204
  [
868
- (0, import_datalog3.lit)("passesArgument", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("p"), (0, import_datalog3.variable)("a")),
869
- (0, import_datalog3.lit)("comesTo", (0, import_datalog3.variable)("a"), (0, import_datalog3.variable)("z"))
1205
+ (0, import_datalog4.lit)("passesArgument", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("p"), (0, import_datalog4.variable)("a")),
1206
+ (0, import_datalog4.lit)("comesTo", (0, import_datalog4.variable)("a"), (0, import_datalog4.variable)("z"))
870
1207
  ]
871
1208
  ),
872
1209
  // An argument arriving at the parameter it is passed to, by position
873
1210
  // or by the name the caller wrote, keeping the call it went through
874
1211
  // so `paramAt` can tell two call sites apart.
875
- (0, import_datalog3.rule)(
1212
+ (0, import_datalog4.rule)(
876
1213
  "passesArgument",
877
- [(0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("p"), (0, import_datalog3.variable)("a")],
1214
+ [(0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("p"), (0, import_datalog4.variable)("a")],
878
1215
  [
879
- (0, import_datalog3.lit)("paramOf", (0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("k"), (0, import_datalog3.variable)("p")),
880
- (0, import_datalog3.lit)("callsFunction", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("f")),
881
- (0, import_datalog3.lit)("callArg", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("k"), (0, import_datalog3.variable)("a"))
1216
+ (0, import_datalog4.lit)("paramOf", (0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("k"), (0, import_datalog4.variable)("p")),
1217
+ (0, import_datalog4.lit)("callsFunction", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("f")),
1218
+ (0, import_datalog4.lit)("callArg", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("k"), (0, import_datalog4.variable)("a"))
882
1219
  ]
883
1220
  ),
884
- (0, import_datalog3.rule)(
1221
+ (0, import_datalog4.rule)(
885
1222
  "passesArgument",
886
- [(0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("p"), (0, import_datalog3.variable)("a")],
1223
+ [(0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("p"), (0, import_datalog4.variable)("a")],
887
1224
  [
888
- (0, import_datalog3.lit)("paramNamed", (0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("p")),
889
- (0, import_datalog3.lit)("callsFunction", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("f")),
890
- (0, import_datalog3.lit)("callKeywordArg", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("a"))
1225
+ (0, import_datalog4.lit)("paramNamed", (0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("p")),
1226
+ (0, import_datalog4.lit)("callsFunction", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("f")),
1227
+ (0, import_datalog4.lit)("callKeywordArg", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("a"))
891
1228
  ]
892
1229
  ),
893
1230
  // Which module's export a re-exported name forwards to, however
894
1231
  // many barrels deep the forwarding runs.
895
- (0, import_datalog3.rule)(
1232
+ (0, import_datalog4.rule)(
896
1233
  "moduleForwards",
897
- [(0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("m2"), (0, import_datalog3.variable)("n2")],
898
- [(0, import_datalog3.lit)("reExports", (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("m2"), (0, import_datalog3.variable)("n2"))]
1234
+ [(0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("m2"), (0, import_datalog4.variable)("n2")],
1235
+ [(0, import_datalog4.lit)("reExports", (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("m2"), (0, import_datalog4.variable)("n2"))]
899
1236
  ),
900
- (0, import_datalog3.rule)(
1237
+ (0, import_datalog4.rule)(
901
1238
  "moduleForwards",
902
- [(0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("m3"), (0, import_datalog3.variable)("n3")],
1239
+ [(0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("m3"), (0, import_datalog4.variable)("n3")],
903
1240
  [
904
- (0, import_datalog3.lit)("reExports", (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("m2"), (0, import_datalog3.variable)("n2")),
905
- (0, import_datalog3.lit)("moduleForwards", (0, import_datalog3.variable)("m2"), (0, import_datalog3.variable)("n2"), (0, import_datalog3.variable)("m3"), (0, import_datalog3.variable)("n3"))
1241
+ (0, import_datalog4.lit)("reExports", (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("m2"), (0, import_datalog4.variable)("n2")),
1242
+ (0, import_datalog4.lit)("moduleForwards", (0, import_datalog4.variable)("m2"), (0, import_datalog4.variable)("n2"), (0, import_datalog4.variable)("m3"), (0, import_datalog4.variable)("n3"))
906
1243
  ]
907
1244
  ),
908
1245
  // What a module exports: directly, or through re-export chains.
909
- (0, import_datalog3.rule)(
1246
+ (0, import_datalog4.rule)(
910
1247
  "moduleExport",
911
- [(0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("value")],
912
- [(0, import_datalog3.lit)("exportsAs", (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("value"))],
1248
+ [(0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("value")],
1249
+ [(0, import_datalog4.lit)("exportsAs", (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("value"))],
913
1250
  "export"
914
1251
  ),
915
- (0, import_datalog3.rule)(
1252
+ (0, import_datalog4.rule)(
916
1253
  "moduleExport",
917
- [(0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("value")],
1254
+ [(0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("value")],
918
1255
  [
919
- (0, import_datalog3.lit)("reExports", (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("m2"), (0, import_datalog3.variable)("n2")),
920
- (0, import_datalog3.lit)("moduleExport", (0, import_datalog3.variable)("m2"), (0, import_datalog3.variable)("n2"), (0, import_datalog3.variable)("value"))
1256
+ (0, import_datalog4.lit)("reExports", (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("m2"), (0, import_datalog4.variable)("n2")),
1257
+ (0, import_datalog4.lit)("moduleExport", (0, import_datalog4.variable)("m2"), (0, import_datalog4.variable)("n2"), (0, import_datalog4.variable)("value"))
921
1258
  ],
922
1259
  "re-export"
923
1260
  ),
924
- (0, import_datalog3.rule)(
1261
+ (0, import_datalog4.rule)(
925
1262
  "moduleExport",
926
- [(0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("value")],
1263
+ [(0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("value")],
927
1264
  [
928
- (0, import_datalog3.lit)("reExportsAll", (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("m2")),
929
- (0, import_datalog3.lit)("moduleExport", (0, import_datalog3.variable)("m2"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("value"))
1265
+ (0, import_datalog4.lit)("reExportsAll", (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("m2")),
1266
+ (0, import_datalog4.lit)("moduleExport", (0, import_datalog4.variable)("m2"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("value"))
930
1267
  ],
931
1268
  "re-export all"
932
1269
  ),
933
1270
  // The function a call runs, written from the call's side because a
934
1271
  // caller asking what a call gives back has the call in hand.
935
- (0, import_datalog3.rule)(
1272
+ (0, import_datalog4.rule)(
936
1273
  "invokes",
937
- [(0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("f")],
938
- [(0, import_datalog3.lit)("call", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("c")), (0, import_datalog3.lit)("comesTo", (0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("f"))]
1274
+ [(0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("f")],
1275
+ [(0, import_datalog4.lit)("call", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("c")), (0, import_datalog4.lit)("comesTo", (0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("f"))]
939
1276
  ),
940
1277
  // The callee is itself a call: `daoBuilder()()`.
941
- (0, import_datalog3.rule)(
1278
+ (0, import_datalog4.rule)(
942
1279
  "invokes",
943
- [(0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("f")],
944
- [(0, import_datalog3.lit)("call", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("c")), (0, import_datalog3.lit)("givesBack", (0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("f"))]
1280
+ [(0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("f")],
1281
+ [(0, import_datalog4.lit)("call", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("c")), (0, import_datalog4.lit)("givesBack", (0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("f"))]
945
1282
  ),
946
1283
  // The object an expression refers to: a name through `comesTo`, a
947
1284
  // factory call through what it gives back. Naming the step is what
948
1285
  // makes `routes.list` and `make(body).handle` one rule.
949
- (0, import_datalog3.rule)(
1286
+ (0, import_datalog4.rule)(
950
1287
  "objectOf",
951
- [(0, import_datalog3.variable)("o"), (0, import_datalog3.variable)("obj")],
952
- [(0, import_datalog3.lit)("comesTo", (0, import_datalog3.variable)("o"), (0, import_datalog3.variable)("obj")), (0, import_datalog3.lit)("objectValue", (0, import_datalog3.variable)("obj"))]
1288
+ [(0, import_datalog4.variable)("o"), (0, import_datalog4.variable)("obj")],
1289
+ [(0, import_datalog4.lit)("comesTo", (0, import_datalog4.variable)("o"), (0, import_datalog4.variable)("obj")), (0, import_datalog4.lit)("objectValue", (0, import_datalog4.variable)("obj"))]
953
1290
  ),
954
- (0, import_datalog3.rule)(
1291
+ (0, import_datalog4.rule)(
955
1292
  "objectOf",
956
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("obj")],
957
- [(0, import_datalog3.lit)("givesBack", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("obj")), (0, import_datalog3.lit)("objectValue", (0, import_datalog3.variable)("obj"))]
1293
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("obj")],
1294
+ [(0, import_datalog4.lit)("givesBack", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("obj")), (0, import_datalog4.lit)("objectValue", (0, import_datalog4.variable)("obj"))]
958
1295
  ),
959
1296
  // Which calls a function, found by the name the call is written as
960
1297
  // rather than by resolving every callee in the project. A caller knows
961
1298
  // the function and wants its call sites, so both of these start from
962
1299
  // the function. Starting from `call` instead asks what every call in
963
1300
  // the project imports, which was 72% of everything derived.
964
- (0, import_datalog3.rule)(
1301
+ (0, import_datalog4.rule)(
965
1302
  "callsFunction",
966
- [(0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("f")],
967
- [(0, import_datalog3.lit)("binds", (0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("f")), (0, import_datalog3.lit)("call", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("c"))]
1303
+ [(0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("f")],
1304
+ [(0, import_datalog4.lit)("binds", (0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("f")), (0, import_datalog4.lit)("call", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("c"))]
968
1305
  ),
969
- (0, import_datalog3.rule)(
1306
+ (0, import_datalog4.rule)(
970
1307
  "callsFunction",
971
- [(0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("f")],
1308
+ [(0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("f")],
972
1309
  [
973
- (0, import_datalog3.lit)("moduleExport", (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("f")),
974
- (0, import_datalog3.lit)("imports", (0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n")),
975
- (0, import_datalog3.lit)("call", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("c"))
1310
+ (0, import_datalog4.lit)("moduleExport", (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("f")),
1311
+ (0, import_datalog4.lit)("imports", (0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n")),
1312
+ (0, import_datalog4.lit)("call", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("c"))
976
1313
  ]
977
1314
  ),
978
1315
  // The same, for a language whose adapter writes the import down as a
979
1316
  // declaration and the call's callee as the name referring to it.
980
- (0, import_datalog3.rule)(
1317
+ (0, import_datalog4.rule)(
981
1318
  "callsFunction",
982
- [(0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("f")],
1319
+ [(0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("f")],
983
1320
  [
984
- (0, import_datalog3.lit)("moduleExport", (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("f")),
985
- (0, import_datalog3.lit)("imports", (0, import_datalog3.variable)("d"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n")),
986
- (0, import_datalog3.lit)("binds", (0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("d")),
987
- (0, import_datalog3.lit)("call", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("c"))
1321
+ (0, import_datalog4.lit)("moduleExport", (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("f")),
1322
+ (0, import_datalog4.lit)("imports", (0, import_datalog4.variable)("d"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n")),
1323
+ (0, import_datalog4.lit)("binds", (0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("d")),
1324
+ (0, import_datalog4.lit)("call", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("c"))
988
1325
  ]
989
1326
  ),
990
1327
  // What an object contains, its base class included, so a method the base
@@ -992,47 +1329,47 @@ var RESOLUTION_RULES = [
992
1329
  // declare gives two, and the caller decides. This is its own relation
993
1330
  // rather than more `holdsProperty`, which stays something an adapter
994
1331
  // states and the rules only read.
995
- (0, import_datalog3.rule)(
1332
+ (0, import_datalog4.rule)(
996
1333
  "contains",
997
- [(0, import_datalog3.variable)("o"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("held")],
998
- [(0, import_datalog3.lit)("holdsProperty", (0, import_datalog3.variable)("o"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("held"))]
1334
+ [(0, import_datalog4.variable)("o"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("held")],
1335
+ [(0, import_datalog4.lit)("holdsProperty", (0, import_datalog4.variable)("o"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("held"))]
999
1336
  ),
1000
- (0, import_datalog3.rule)(
1337
+ (0, import_datalog4.rule)(
1001
1338
  "contains",
1002
- [(0, import_datalog3.variable)("cls"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("held")],
1339
+ [(0, import_datalog4.variable)("cls"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("held")],
1003
1340
  [
1004
- (0, import_datalog3.lit)("extends", (0, import_datalog3.variable)("cls"), (0, import_datalog3.variable)("base")),
1005
- (0, import_datalog3.lit)("comesTo", (0, import_datalog3.variable)("base"), (0, import_datalog3.variable)("baseCls")),
1006
- (0, import_datalog3.lit)("contains", (0, import_datalog3.variable)("baseCls"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("held"))
1341
+ (0, import_datalog4.lit)("extends", (0, import_datalog4.variable)("cls"), (0, import_datalog4.variable)("base")),
1342
+ (0, import_datalog4.lit)("comesTo", (0, import_datalog4.variable)("base"), (0, import_datalog4.variable)("baseCls")),
1343
+ (0, import_datalog4.lit)("contains", (0, import_datalog4.variable)("baseCls"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("held"))
1007
1344
  ]
1008
1345
  ),
1009
1346
  // Which function a factory returns, and which of its parameters that
1010
1347
  // function calls: together they are what makes it a wrapper.
1011
- (0, import_datalog3.rule)(
1348
+ (0, import_datalog4.rule)(
1012
1349
  "returnsFunc",
1013
- [(0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("g")],
1350
+ [(0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("g")],
1014
1351
  [
1015
- (0, import_datalog3.lit)("returnsValue", (0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("value")),
1016
- (0, import_datalog3.lit)("comesTo", (0, import_datalog3.variable)("value"), (0, import_datalog3.variable)("g")),
1017
- (0, import_datalog3.lit)("func", (0, import_datalog3.variable)("g"))
1352
+ (0, import_datalog4.lit)("returnsValue", (0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("value")),
1353
+ (0, import_datalog4.lit)("comesTo", (0, import_datalog4.variable)("value"), (0, import_datalog4.variable)("g")),
1354
+ (0, import_datalog4.lit)("func", (0, import_datalog4.variable)("g"))
1018
1355
  ]
1019
1356
  ),
1020
1357
  // A call made by a nested closure counts as made by the function
1021
1358
  // that declares it; the closure runs as part of that function.
1022
- (0, import_datalog3.rule)("bodyCallsDeep", [(0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("c")], [(0, import_datalog3.lit)("bodyCalls", (0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("c"))]),
1023
- (0, import_datalog3.rule)(
1359
+ (0, import_datalog4.rule)("bodyCallsDeep", [(0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("c")], [(0, import_datalog4.lit)("bodyCalls", (0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("c"))]),
1360
+ (0, import_datalog4.rule)(
1024
1361
  "bodyCallsDeep",
1025
- [(0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("c")],
1026
- [(0, import_datalog3.lit)("containsFn", (0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("g")), (0, import_datalog3.lit)("bodyCallsDeep", (0, import_datalog3.variable)("g"), (0, import_datalog3.variable)("c"))]
1362
+ [(0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("c")],
1363
+ [(0, import_datalog4.lit)("containsFn", (0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("g")), (0, import_datalog4.lit)("bodyCallsDeep", (0, import_datalog4.variable)("g"), (0, import_datalog4.variable)("c"))]
1027
1364
  ),
1028
- (0, import_datalog3.rule)(
1365
+ (0, import_datalog4.rule)(
1029
1366
  "unwraps",
1030
- [(0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("k")],
1367
+ [(0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("k")],
1031
1368
  [
1032
- (0, import_datalog3.lit)("returnsFunc", (0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("g")),
1033
- (0, import_datalog3.lit)("bodyCallsDeep", (0, import_datalog3.variable)("g"), (0, import_datalog3.variable)("c")),
1034
- (0, import_datalog3.lit)("binds", (0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("p")),
1035
- (0, import_datalog3.lit)("paramOf", (0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("k"), (0, import_datalog3.variable)("p"))
1369
+ (0, import_datalog4.lit)("returnsFunc", (0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("g")),
1370
+ (0, import_datalog4.lit)("bodyCallsDeep", (0, import_datalog4.variable)("g"), (0, import_datalog4.variable)("c")),
1371
+ (0, import_datalog4.lit)("binds", (0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("p")),
1372
+ (0, import_datalog4.lit)("paramOf", (0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("k"), (0, import_datalog4.variable)("p"))
1036
1373
  ]
1037
1374
  ),
1038
1375
  // Argument flow: which parameter a value traces back to. Directly
@@ -1040,297 +1377,297 @@ var RESOLUTION_RULES = [
1040
1377
  // another unwrapping factory. This is what lets
1041
1378
  // `createProtected(h) { return service.withAuth(h); }` unwrap:
1042
1379
  // the returned call passes h through withAuth, which unwraps.
1043
- (0, import_datalog3.rule)(
1380
+ (0, import_datalog4.rule)(
1044
1381
  "flowsToParam",
1045
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("p")],
1382
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("p")],
1046
1383
  [
1047
- (0, import_datalog3.lit)("binds", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("p")),
1048
- (0, import_datalog3.lit)("paramOf", (0, import_datalog3.variable)("anyF"), (0, import_datalog3.variable)("anyK"), (0, import_datalog3.variable)("p"))
1384
+ (0, import_datalog4.lit)("binds", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("p")),
1385
+ (0, import_datalog4.lit)("paramOf", (0, import_datalog4.variable)("anyF"), (0, import_datalog4.variable)("anyK"), (0, import_datalog4.variable)("p"))
1049
1386
  ]
1050
1387
  ),
1051
- (0, import_datalog3.rule)(
1388
+ (0, import_datalog4.rule)(
1052
1389
  "flowsToParam",
1053
- [(0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("p")],
1390
+ [(0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("p")],
1054
1391
  [
1055
- (0, import_datalog3.lit)("call", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("c")),
1056
- (0, import_datalog3.lit)("comesTo", (0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("f")),
1057
- (0, import_datalog3.lit)("unwraps", (0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("k")),
1058
- (0, import_datalog3.lit)("callArg", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("k"), (0, import_datalog3.variable)("a")),
1059
- (0, import_datalog3.lit)("flowsToParam", (0, import_datalog3.variable)("a"), (0, import_datalog3.variable)("p"))
1392
+ (0, import_datalog4.lit)("call", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("c")),
1393
+ (0, import_datalog4.lit)("comesTo", (0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("f")),
1394
+ (0, import_datalog4.lit)("unwraps", (0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("k")),
1395
+ (0, import_datalog4.lit)("callArg", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("k"), (0, import_datalog4.variable)("a")),
1396
+ (0, import_datalog4.lit)("flowsToParam", (0, import_datalog4.variable)("a"), (0, import_datalog4.variable)("p"))
1060
1397
  ]
1061
1398
  ),
1062
- (0, import_datalog3.rule)(
1399
+ (0, import_datalog4.rule)(
1063
1400
  "unwraps",
1064
- [(0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("k")],
1401
+ [(0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("k")],
1065
1402
  [
1066
- (0, import_datalog3.lit)("returnsValue", (0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("value")),
1067
- (0, import_datalog3.lit)("flowsToParam", (0, import_datalog3.variable)("value"), (0, import_datalog3.variable)("p")),
1068
- (0, import_datalog3.lit)("paramOf", (0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("k"), (0, import_datalog3.variable)("p"))
1403
+ (0, import_datalog4.lit)("returnsValue", (0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("value")),
1404
+ (0, import_datalog4.lit)("flowsToParam", (0, import_datalog4.variable)("value"), (0, import_datalog4.variable)("p")),
1405
+ (0, import_datalog4.lit)("paramOf", (0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("k"), (0, import_datalog4.variable)("p"))
1069
1406
  ]
1070
1407
  ),
1071
1408
  // Where a name comes from, when what it refers to lives outside the
1072
1409
  // source being read. A walk ends at something written out in source,
1073
1410
  // so it never reaches a library's own function.
1074
- (0, import_datalog3.rule)(
1411
+ (0, import_datalog4.rule)(
1075
1412
  "comesFrom",
1076
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n")],
1077
- [(0, import_datalog3.lit)("imports", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"))]
1413
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n")],
1414
+ [(0, import_datalog4.lit)("imports", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"))]
1078
1415
  ),
1079
- (0, import_datalog3.rule)(
1416
+ (0, import_datalog4.rule)(
1080
1417
  "comesFrom",
1081
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n")],
1418
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n")],
1082
1419
  [
1083
- (0, import_datalog3.lit)("reaches", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y"), VALUE_STEP),
1084
- (0, import_datalog3.lit)("imports", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"))
1420
+ (0, import_datalog4.lit)("reaches", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y"), VALUE_STEP),
1421
+ (0, import_datalog4.lit)("imports", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"))
1085
1422
  ]
1086
1423
  ),
1087
1424
  // Calling f ends up calling the name n that module m exports, one
1088
1425
  // hop through f's own body or deeper through a wrapper of a wrapper.
1089
1426
  // Several results is normal: a composed decorator applies them all.
1090
- (0, import_datalog3.rule)(
1427
+ (0, import_datalog4.rule)(
1091
1428
  "callsInto",
1092
- [(0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n")],
1429
+ [(0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n")],
1093
1430
  [
1094
- (0, import_datalog3.lit)("bodyCallsDeep", (0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("c")),
1095
- (0, import_datalog3.lit)("comesFrom", (0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"))
1431
+ (0, import_datalog4.lit)("bodyCallsDeep", (0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("c")),
1432
+ (0, import_datalog4.lit)("comesFrom", (0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"))
1096
1433
  ]
1097
1434
  ),
1098
- (0, import_datalog3.rule)(
1435
+ (0, import_datalog4.rule)(
1099
1436
  "callsInto",
1100
- [(0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n")],
1437
+ [(0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n")],
1101
1438
  [
1102
- (0, import_datalog3.lit)("bodyCallsDeep", (0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("c")),
1103
- (0, import_datalog3.lit)("comesTo", (0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("g")),
1104
- (0, import_datalog3.lit)("callsInto", (0, import_datalog3.variable)("g"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"))
1439
+ (0, import_datalog4.lit)("bodyCallsDeep", (0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("c")),
1440
+ (0, import_datalog4.lit)("comesTo", (0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("g")),
1441
+ (0, import_datalog4.lit)("callsInto", (0, import_datalog4.variable)("g"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"))
1105
1442
  ]
1106
1443
  ),
1107
1444
  // The question callers ask: what a value comes to, narrowed to the
1108
1445
  // functions. Objects appear in the middle of chains and never in an
1109
1446
  // answer.
1110
- (0, import_datalog3.rule)(
1447
+ (0, import_datalog4.rule)(
1111
1448
  "resolves",
1112
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
1113
- [(0, import_datalog3.lit)("comesTo", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")), (0, import_datalog3.lit)("func", (0, import_datalog3.variable)("z"))]
1449
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1450
+ [(0, import_datalog4.lit)("comesTo", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")), (0, import_datalog4.lit)("func", (0, import_datalog4.variable)("z"))]
1114
1451
  )
1115
1452
  ];
1116
1453
  var RESOLUTION_QUESTIONS = [
1117
- (0, import_datalog3.rule)(
1454
+ (0, import_datalog4.rule)(
1118
1455
  "wantedResolves",
1119
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
1120
- [(0, import_datalog3.lit)("wanted", (0, import_datalog3.variable)("x")), (0, import_datalog3.lit)("resolves", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"))]
1456
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1457
+ [(0, import_datalog4.lit)("wanted", (0, import_datalog4.variable)("x")), (0, import_datalog4.lit)("resolves", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"))]
1121
1458
  ),
1122
- (0, import_datalog3.rule)(
1459
+ (0, import_datalog4.rule)(
1123
1460
  "wantedComesTo",
1124
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
1125
- [(0, import_datalog3.lit)("wanted", (0, import_datalog3.variable)("x")), (0, import_datalog3.lit)("comesTo", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"))]
1461
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1462
+ [(0, import_datalog4.lit)("wanted", (0, import_datalog4.variable)("x")), (0, import_datalog4.lit)("comesTo", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"))]
1126
1463
  ),
1127
- (0, import_datalog3.rule)(
1464
+ (0, import_datalog4.rule)(
1128
1465
  "wantedComesTo",
1129
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
1130
- [(0, import_datalog3.lit)("wantedOrigin", (0, import_datalog3.variable)("x")), (0, import_datalog3.lit)("comesTo", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"))]
1466
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1467
+ [(0, import_datalog4.lit)("wantedOrigin", (0, import_datalog4.variable)("x")), (0, import_datalog4.lit)("comesTo", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"))]
1131
1468
  ),
1132
- (0, import_datalog3.rule)(
1469
+ (0, import_datalog4.rule)(
1133
1470
  "wantedIsWrittenAs",
1134
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
1135
- [(0, import_datalog3.lit)("wanted", (0, import_datalog3.variable)("x")), (0, import_datalog3.lit)("isWrittenAs", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"))]
1471
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1472
+ [(0, import_datalog4.lit)("wanted", (0, import_datalog4.variable)("x")), (0, import_datalog4.lit)("isWrittenAs", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"))]
1136
1473
  ),
1137
1474
  // A call is given no `comesTo`, so this is the only way to ask what
1138
1475
  // object one arrives at, and without it a demand-driven run derives
1139
1476
  // `objectOf` nowhere.
1140
- (0, import_datalog3.rule)(
1477
+ (0, import_datalog4.rule)(
1141
1478
  "wantedObjectOf",
1142
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
1143
- [(0, import_datalog3.lit)("wanted", (0, import_datalog3.variable)("x")), (0, import_datalog3.lit)("objectOf", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"))]
1479
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1480
+ [(0, import_datalog4.lit)("wanted", (0, import_datalog4.variable)("x")), (0, import_datalog4.lit)("objectOf", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"))]
1144
1481
  ),
1145
1482
  // The same for the function a call returns: `app.use(requireCaller(config))`
1146
1483
  // registers what the factory gives back, and `resolves` on the call
1147
1484
  // says nothing unless the factory unwraps an argument.
1148
- (0, import_datalog3.rule)(
1485
+ (0, import_datalog4.rule)(
1149
1486
  "wantedGivesBack",
1150
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
1151
- [(0, import_datalog3.lit)("wanted", (0, import_datalog3.variable)("x")), (0, import_datalog3.lit)("givesBack", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"))]
1487
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1488
+ [(0, import_datalog4.lit)("wanted", (0, import_datalog4.variable)("x")), (0, import_datalog4.lit)("givesBack", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"))]
1152
1489
  ),
1153
1490
  // Keyed by the parameter, since that is what a caller has in hand
1154
1491
  // when it wants the call sites told apart.
1155
- (0, import_datalog3.rule)(
1492
+ (0, import_datalog4.rule)(
1156
1493
  "wantedParamAt",
1157
- [(0, import_datalog3.variable)("p"), (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("z")],
1158
- [(0, import_datalog3.lit)("wanted", (0, import_datalog3.variable)("p")), (0, import_datalog3.lit)("paramAt", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("p"), (0, import_datalog3.variable)("z"))]
1494
+ [(0, import_datalog4.variable)("p"), (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("z")],
1495
+ [(0, import_datalog4.lit)("wanted", (0, import_datalog4.variable)("p")), (0, import_datalog4.lit)("paramAt", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("p"), (0, import_datalog4.variable)("z"))]
1159
1496
  ),
1160
- (0, import_datalog3.rule)(
1497
+ (0, import_datalog4.rule)(
1161
1498
  "wantedComesFrom",
1162
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n")],
1163
- [(0, import_datalog3.lit)("wantedOrigin", (0, import_datalog3.variable)("x")), (0, import_datalog3.lit)("comesFrom", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"))]
1499
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n")],
1500
+ [(0, import_datalog4.lit)("wantedOrigin", (0, import_datalog4.variable)("x")), (0, import_datalog4.lit)("comesFrom", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"))]
1164
1501
  ),
1165
1502
  // Call-origin questions, for attribution, in their own demand
1166
1503
  // class. Attribution stops at the import declaration, so nothing
1167
1504
  // here demands reaches or callsInto. The chains are closures with
1168
1505
  // no depth bound: an alias run of any length resolves.
1169
- (0, import_datalog3.rule)("callOriginChain", [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("x")], [(0, import_datalog3.lit)("wantedCallOrigin", (0, import_datalog3.variable)("x"))]),
1506
+ (0, import_datalog4.rule)("callOriginChain", [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("x")], [(0, import_datalog4.lit)("wantedCallOrigin", (0, import_datalog4.variable)("x"))]),
1170
1507
  // The chain with at least one hop taken, which is what tells a
1171
1508
  // destructured binding apart from asking about a node directly. The
1172
1509
  // whole chain is the seed plus those hops.
1173
- (0, import_datalog3.rule)(
1510
+ (0, import_datalog4.rule)(
1174
1511
  "callOriginChain",
1175
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
1176
- [(0, import_datalog3.lit)("callOriginChainStepped", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"))]
1512
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1513
+ [(0, import_datalog4.lit)("callOriginChainStepped", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"))]
1177
1514
  ),
1178
- (0, import_datalog3.rule)(
1515
+ (0, import_datalog4.rule)(
1179
1516
  "callOriginChainStepped",
1180
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
1181
- [(0, import_datalog3.lit)("callOriginChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y")), (0, import_datalog3.lit)("binds", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("z"))]
1517
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1518
+ [(0, import_datalog4.lit)("callOriginChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y")), (0, import_datalog4.lit)("binds", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("z"))]
1182
1519
  ),
1183
- (0, import_datalog3.rule)(
1520
+ (0, import_datalog4.rule)(
1184
1521
  "callOriginChainStepped",
1185
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
1522
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1186
1523
  [
1187
- (0, import_datalog3.lit)("callOriginChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y")),
1188
- (0, import_datalog3.lit)("endsHolding", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("z"))
1524
+ (0, import_datalog4.lit)("callOriginChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y")),
1525
+ (0, import_datalog4.lit)("endsHolding", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("z"))
1189
1526
  ]
1190
1527
  ),
1191
- (0, import_datalog3.rule)(
1528
+ (0, import_datalog4.rule)(
1192
1529
  "callOriginChainStepped",
1193
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
1530
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1194
1531
  [
1195
- (0, import_datalog3.lit)("callOriginChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y")),
1196
- (0, import_datalog3.lit)("fallbackBranch", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("z"))
1532
+ (0, import_datalog4.lit)("callOriginChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y")),
1533
+ (0, import_datalog4.lit)("fallbackBranch", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("z"))
1197
1534
  ]
1198
1535
  ),
1199
- (0, import_datalog3.rule)(
1536
+ (0, import_datalog4.rule)(
1200
1537
  "wantedCallOriginPair",
1201
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n")],
1538
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n")],
1202
1539
  [
1203
- (0, import_datalog3.lit)("callOriginChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y")),
1204
- (0, import_datalog3.lit)("imports", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"))
1540
+ (0, import_datalog4.lit)("callOriginChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y")),
1541
+ (0, import_datalog4.lit)("imports", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"))
1205
1542
  ]
1206
1543
  ),
1207
1544
  // An import of a project barrel is an import of what the barrel
1208
1545
  // forwards, so the pair surfaces the module behind the chain.
1209
- (0, import_datalog3.rule)(
1546
+ (0, import_datalog4.rule)(
1210
1547
  "wantedCallOriginPair",
1211
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("m2"), (0, import_datalog3.variable)("n2")],
1548
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("m2"), (0, import_datalog4.variable)("n2")],
1212
1549
  [
1213
- (0, import_datalog3.lit)("callOriginChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y")),
1214
- (0, import_datalog3.lit)("imports", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n")),
1215
- (0, import_datalog3.lit)("moduleForwards", (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("m2"), (0, import_datalog3.variable)("n2"))
1550
+ (0, import_datalog4.lit)("callOriginChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y")),
1551
+ (0, import_datalog4.lit)("imports", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n")),
1552
+ (0, import_datalog4.lit)("moduleForwards", (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("m2"), (0, import_datalog4.variable)("n2"))
1216
1553
  ]
1217
1554
  ),
1218
1555
  // A namespace member: the module's export of the member's own name.
1219
1556
  // The imports literal leads, since it is the smallest relation.
1220
- (0, import_datalog3.rule)(
1557
+ (0, import_datalog4.rule)(
1221
1558
  "wantedCallOriginPair",
1222
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("p")],
1559
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("p")],
1223
1560
  [
1224
- (0, import_datalog3.lit)("imports", (0, import_datalog3.variable)("o"), (0, import_datalog3.variable)("m"), NAMESPACE_IMPORT),
1225
- (0, import_datalog3.lit)("readsProperty", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("o"), (0, import_datalog3.variable)("p")),
1226
- (0, import_datalog3.lit)("callOriginChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y"))
1561
+ (0, import_datalog4.lit)("imports", (0, import_datalog4.variable)("o"), (0, import_datalog4.variable)("m"), NAMESPACE_IMPORT),
1562
+ (0, import_datalog4.lit)("readsProperty", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("o"), (0, import_datalog4.variable)("p")),
1563
+ (0, import_datalog4.lit)("callOriginChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y"))
1227
1564
  ]
1228
1565
  ),
1229
- (0, import_datalog3.rule)(
1566
+ (0, import_datalog4.rule)(
1230
1567
  "wantedCallOriginPair",
1231
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("p")],
1568
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("p")],
1232
1569
  [
1233
- (0, import_datalog3.lit)("imports", (0, import_datalog3.variable)("d"), (0, import_datalog3.variable)("m"), NAMESPACE_IMPORT),
1234
- (0, import_datalog3.lit)("binds", (0, import_datalog3.variable)("o"), (0, import_datalog3.variable)("d")),
1235
- (0, import_datalog3.lit)("readsProperty", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("o"), (0, import_datalog3.variable)("p")),
1236
- (0, import_datalog3.lit)("callOriginChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y"))
1570
+ (0, import_datalog4.lit)("imports", (0, import_datalog4.variable)("d"), (0, import_datalog4.variable)("m"), NAMESPACE_IMPORT),
1571
+ (0, import_datalog4.lit)("binds", (0, import_datalog4.variable)("o"), (0, import_datalog4.variable)("d")),
1572
+ (0, import_datalog4.lit)("readsProperty", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("o"), (0, import_datalog4.variable)("p")),
1573
+ (0, import_datalog4.lit)("callOriginChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y"))
1237
1574
  ]
1238
1575
  ),
1239
1576
  // What a call made: through the call to its callee, whose own alias
1240
1577
  // chain leads to the import.
1241
- (0, import_datalog3.rule)(
1578
+ (0, import_datalog4.rule)(
1242
1579
  "callMadeChain",
1243
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("f")],
1244
- [(0, import_datalog3.lit)("callOriginChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("c")), (0, import_datalog3.lit)("call", (0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("f"))]
1580
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("f")],
1581
+ [(0, import_datalog4.lit)("callOriginChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("c")), (0, import_datalog4.lit)("call", (0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("f"))]
1245
1582
  ),
1246
- (0, import_datalog3.rule)(
1583
+ (0, import_datalog4.rule)(
1247
1584
  "callMadeChain",
1248
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
1249
- [(0, import_datalog3.lit)("callMadeChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y")), (0, import_datalog3.lit)("binds", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("z"))]
1585
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1586
+ [(0, import_datalog4.lit)("callMadeChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y")), (0, import_datalog4.lit)("binds", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("z"))]
1250
1587
  ),
1251
- (0, import_datalog3.rule)(
1588
+ (0, import_datalog4.rule)(
1252
1589
  "callMadeChain",
1253
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
1254
- [(0, import_datalog3.lit)("callMadeChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y")), (0, import_datalog3.lit)("endsHolding", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("z"))]
1590
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1591
+ [(0, import_datalog4.lit)("callMadeChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y")), (0, import_datalog4.lit)("endsHolding", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("z"))]
1255
1592
  ),
1256
- (0, import_datalog3.rule)(
1593
+ (0, import_datalog4.rule)(
1257
1594
  "wantedCallOriginPair",
1258
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n")],
1595
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n")],
1259
1596
  [
1260
- (0, import_datalog3.lit)("callMadeChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y")),
1261
- (0, import_datalog3.lit)("imports", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"))
1597
+ (0, import_datalog4.lit)("callMadeChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y")),
1598
+ (0, import_datalog4.lit)("imports", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"))
1262
1599
  ]
1263
1600
  ),
1264
1601
  // A member destructured off what a call made keeps the member name
1265
1602
  // as one more path segment.
1266
- (0, import_datalog3.rule)(
1603
+ (0, import_datalog4.rule)(
1267
1604
  "callMemberChain",
1268
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("f"), (0, import_datalog3.variable)("p")],
1605
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("f"), (0, import_datalog4.variable)("p")],
1269
1606
  [
1270
- (0, import_datalog3.lit)("callOriginChainStepped", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("e")),
1271
- (0, import_datalog3.lit)("readsProperty", (0, import_datalog3.variable)("e"), (0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("p")),
1272
- (0, import_datalog3.lit)("call", (0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("f"))
1607
+ (0, import_datalog4.lit)("callOriginChainStepped", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("e")),
1608
+ (0, import_datalog4.lit)("readsProperty", (0, import_datalog4.variable)("e"), (0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("p")),
1609
+ (0, import_datalog4.lit)("call", (0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("f"))
1273
1610
  ]
1274
1611
  ),
1275
- (0, import_datalog3.rule)(
1612
+ (0, import_datalog4.rule)(
1276
1613
  "callMemberChain",
1277
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"), (0, import_datalog3.variable)("p")],
1614
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"), (0, import_datalog4.variable)("p")],
1278
1615
  [
1279
- (0, import_datalog3.lit)("callMemberChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("p")),
1280
- (0, import_datalog3.lit)("binds", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("z"))
1616
+ (0, import_datalog4.lit)("callMemberChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("p")),
1617
+ (0, import_datalog4.lit)("binds", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("z"))
1281
1618
  ]
1282
1619
  ),
1283
- (0, import_datalog3.rule)(
1620
+ (0, import_datalog4.rule)(
1284
1621
  "callMemberChain",
1285
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z"), (0, import_datalog3.variable)("p")],
1622
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z"), (0, import_datalog4.variable)("p")],
1286
1623
  [
1287
- (0, import_datalog3.lit)("callMemberChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("p")),
1288
- (0, import_datalog3.lit)("endsHolding", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("z"))
1624
+ (0, import_datalog4.lit)("callMemberChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("p")),
1625
+ (0, import_datalog4.lit)("endsHolding", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("z"))
1289
1626
  ]
1290
1627
  ),
1291
- (0, import_datalog3.rule)(
1628
+ (0, import_datalog4.rule)(
1292
1629
  "wantedCallOriginMember",
1293
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("p")],
1630
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("p")],
1294
1631
  [
1295
- (0, import_datalog3.lit)("callMemberChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("p")),
1296
- (0, import_datalog3.lit)("imports", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"))
1632
+ (0, import_datalog4.lit)("callMemberChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("p")),
1633
+ (0, import_datalog4.lit)("imports", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"))
1297
1634
  ]
1298
1635
  ),
1299
- (0, import_datalog3.rule)(
1636
+ (0, import_datalog4.rule)(
1300
1637
  "wantedCallsInto",
1301
- [(0, import_datalog3.variable)("g"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n")],
1638
+ [(0, import_datalog4.variable)("g"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n")],
1302
1639
  [
1303
- (0, import_datalog3.lit)("wantedOrigin", (0, import_datalog3.variable)("x")),
1304
- (0, import_datalog3.lit)("comesTo", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("g")),
1305
- (0, import_datalog3.lit)("callsInto", (0, import_datalog3.variable)("g"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"))
1640
+ (0, import_datalog4.lit)("wantedOrigin", (0, import_datalog4.variable)("x")),
1641
+ (0, import_datalog4.lit)("comesTo", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("g")),
1642
+ (0, import_datalog4.lit)("callsInto", (0, import_datalog4.variable)("g"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"))
1306
1643
  ]
1307
1644
  ),
1308
1645
  // Subject identity, its own demand class; the README's subject
1309
1646
  // section says why the origin pair rides on the written-value walk.
1310
- (0, import_datalog3.rule)(
1647
+ (0, import_datalog4.rule)(
1311
1648
  "wantedSubjectWritten",
1312
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("r")],
1313
- [(0, import_datalog3.lit)("wantedSubject", (0, import_datalog3.variable)("x")), (0, import_datalog3.lit)("isWrittenAs", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("r"))]
1649
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("r")],
1650
+ [(0, import_datalog4.lit)("wantedSubject", (0, import_datalog4.variable)("x")), (0, import_datalog4.lit)("isWrittenAs", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("r"))]
1314
1651
  ),
1315
- (0, import_datalog3.rule)(
1652
+ (0, import_datalog4.rule)(
1316
1653
  "wantedSubjectConstruction",
1317
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n")],
1654
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n")],
1318
1655
  [
1319
- (0, import_datalog3.lit)("wantedSubject", (0, import_datalog3.variable)("x")),
1320
- (0, import_datalog3.lit)("isWrittenAs", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("r")),
1321
- (0, import_datalog3.lit)("call", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("c")),
1322
- (0, import_datalog3.lit)("comesFrom", (0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"))
1656
+ (0, import_datalog4.lit)("wantedSubject", (0, import_datalog4.variable)("x")),
1657
+ (0, import_datalog4.lit)("isWrittenAs", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("r")),
1658
+ (0, import_datalog4.lit)("call", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("c")),
1659
+ (0, import_datalog4.lit)("comesFrom", (0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"))
1323
1660
  ]
1324
1661
  ),
1325
1662
  // The export table of one module, keyed by the module asked about.
1326
1663
  // The moduleExport rules flatten re-export chains of any length, and
1327
1664
  // the demand cone stays on export facts alone.
1328
- (0, import_datalog3.rule)(
1665
+ (0, import_datalog4.rule)(
1329
1666
  "wantedModuleExport",
1330
- [(0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("value")],
1667
+ [(0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("value")],
1331
1668
  [
1332
- (0, import_datalog3.lit)("wantedExportsOf", (0, import_datalog3.variable)("m")),
1333
- (0, import_datalog3.lit)("moduleExport", (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("value"))
1669
+ (0, import_datalog4.lit)("wantedExportsOf", (0, import_datalog4.variable)("m")),
1670
+ (0, import_datalog4.lit)("moduleExport", (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("value"))
1334
1671
  ]
1335
1672
  ),
1336
1673
  // The calls behind a receiver, for a pack that wants the anchor a
@@ -1339,63 +1676,63 @@ var RESOLUTION_QUESTIONS = [
1339
1676
  // A class's ancestry, one hop per extends through the binding that
1340
1677
  // says which class the written base is; the names on the way out
1341
1678
  // are what a storage pack matches its library's bases against.
1342
- (0, import_datalog3.rule)("ancestryChain", [(0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("c")], [(0, import_datalog3.lit)("wantedAncestry", (0, import_datalog3.variable)("c"))]),
1343
- (0, import_datalog3.rule)(
1679
+ (0, import_datalog4.rule)("ancestryChain", [(0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("c")], [(0, import_datalog4.lit)("wantedAncestry", (0, import_datalog4.variable)("c"))]),
1680
+ (0, import_datalog4.rule)(
1344
1681
  "ancestryChain",
1345
- [(0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("b2")],
1682
+ [(0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("b2")],
1346
1683
  [
1347
- (0, import_datalog3.lit)("ancestryChain", (0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("b")),
1348
- (0, import_datalog3.lit)("extends", (0, import_datalog3.variable)("b"), (0, import_datalog3.variable)("x")),
1349
- (0, import_datalog3.lit)("binds", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("b2"))
1684
+ (0, import_datalog4.lit)("ancestryChain", (0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("b")),
1685
+ (0, import_datalog4.lit)("extends", (0, import_datalog4.variable)("b"), (0, import_datalog4.variable)("x")),
1686
+ (0, import_datalog4.lit)("binds", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("b2"))
1350
1687
  ]
1351
1688
  ),
1352
- (0, import_datalog3.rule)(
1689
+ (0, import_datalog4.rule)(
1353
1690
  "wantedBaseName",
1354
- [(0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("n")],
1355
- [(0, import_datalog3.lit)("ancestryChain", (0, import_datalog3.variable)("c"), (0, import_datalog3.variable)("b")), (0, import_datalog3.lit)("extendsNamed", (0, import_datalog3.variable)("b"), (0, import_datalog3.variable)("n"))]
1691
+ [(0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("n")],
1692
+ [(0, import_datalog4.lit)("ancestryChain", (0, import_datalog4.variable)("c"), (0, import_datalog4.variable)("b")), (0, import_datalog4.lit)("extendsNamed", (0, import_datalog4.variable)("b"), (0, import_datalog4.variable)("n"))]
1356
1693
  ),
1357
- (0, import_datalog3.rule)("anchorChain", [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("x")], [(0, import_datalog3.lit)("wantedAnchor", (0, import_datalog3.variable)("x"))]),
1358
- (0, import_datalog3.rule)(
1694
+ (0, import_datalog4.rule)("anchorChain", [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("x")], [(0, import_datalog4.lit)("wantedAnchor", (0, import_datalog4.variable)("x"))]),
1695
+ (0, import_datalog4.rule)(
1359
1696
  "anchorChain",
1360
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
1361
- [(0, import_datalog3.lit)("anchorChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y")), (0, import_datalog3.lit)("binds", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("z"))]
1697
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1698
+ [(0, import_datalog4.lit)("anchorChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y")), (0, import_datalog4.lit)("binds", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("z"))]
1362
1699
  ),
1363
- (0, import_datalog3.rule)(
1700
+ (0, import_datalog4.rule)(
1364
1701
  "anchorChain",
1365
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
1366
- [(0, import_datalog3.lit)("anchorChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y")), (0, import_datalog3.lit)("endsHolding", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("z"))]
1702
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1703
+ [(0, import_datalog4.lit)("anchorChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y")), (0, import_datalog4.lit)("endsHolding", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("z"))]
1367
1704
  ),
1368
- (0, import_datalog3.rule)(
1705
+ (0, import_datalog4.rule)(
1369
1706
  "anchorChain",
1370
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
1371
- [(0, import_datalog3.lit)("anchorChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y")), (0, import_datalog3.lit)("fallbackBranch", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("z"))]
1707
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1708
+ [(0, import_datalog4.lit)("anchorChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y")), (0, import_datalog4.lit)("fallbackBranch", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("z"))]
1372
1709
  ),
1373
- (0, import_datalog3.rule)(
1710
+ (0, import_datalog4.rule)(
1374
1711
  "anchorChain",
1375
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("z")],
1712
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("z")],
1376
1713
  [
1377
- (0, import_datalog3.lit)("anchorChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y")),
1378
- (0, import_datalog3.lit)("imports", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n")),
1379
- (0, import_datalog3.lit)("moduleExport", (0, import_datalog3.variable)("m"), (0, import_datalog3.variable)("n"), (0, import_datalog3.variable)("z"))
1714
+ (0, import_datalog4.lit)("anchorChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y")),
1715
+ (0, import_datalog4.lit)("imports", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n")),
1716
+ (0, import_datalog4.lit)("moduleExport", (0, import_datalog4.variable)("m"), (0, import_datalog4.variable)("n"), (0, import_datalog4.variable)("z"))
1380
1717
  ]
1381
1718
  ),
1382
- (0, import_datalog3.rule)(
1719
+ (0, import_datalog4.rule)(
1383
1720
  "anchorChain",
1384
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("c")],
1385
- [(0, import_datalog3.lit)("anchorChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("r")), (0, import_datalog3.lit)("call", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("c"))]
1721
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("c")],
1722
+ [(0, import_datalog4.lit)("anchorChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("r")), (0, import_datalog4.lit)("call", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("c"))]
1386
1723
  ),
1387
- (0, import_datalog3.rule)(
1724
+ (0, import_datalog4.rule)(
1388
1725
  "anchorChain",
1389
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("o")],
1726
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("o")],
1390
1727
  [
1391
- (0, import_datalog3.lit)("anchorChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("y")),
1392
- (0, import_datalog3.lit)("readsProperty", (0, import_datalog3.variable)("y"), (0, import_datalog3.variable)("o"), (0, import_datalog3.variable)("n"))
1728
+ (0, import_datalog4.lit)("anchorChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("y")),
1729
+ (0, import_datalog4.lit)("readsProperty", (0, import_datalog4.variable)("y"), (0, import_datalog4.variable)("o"), (0, import_datalog4.variable)("n"))
1393
1730
  ]
1394
1731
  ),
1395
- (0, import_datalog3.rule)(
1732
+ (0, import_datalog4.rule)(
1396
1733
  "wantedAnchorCall",
1397
- [(0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("r")],
1398
- [(0, import_datalog3.lit)("anchorChain", (0, import_datalog3.variable)("x"), (0, import_datalog3.variable)("r")), (0, import_datalog3.lit)("call", (0, import_datalog3.variable)("r"), (0, import_datalog3.variable)("c"))]
1734
+ [(0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("r")],
1735
+ [(0, import_datalog4.lit)("anchorChain", (0, import_datalog4.variable)("x"), (0, import_datalog4.variable)("r")), (0, import_datalog4.lit)("call", (0, import_datalog4.variable)("r"), (0, import_datalog4.variable)("c"))]
1399
1736
  )
1400
1737
  ];
1401
1738
  var ANSWER_RELATIONS = [
@@ -1404,6 +1741,7 @@ var ANSWER_RELATIONS = [
1404
1741
  // Annotate the CommonJS export names for ESM import in node:
1405
1742
  0 && (module.exports = {
1406
1743
  ANSWER_RELATIONS,
1744
+ ASKING_RELATIONS,
1407
1745
  FACT_CONTRACT_CASES,
1408
1746
  NAMESPACE_IMPORT,
1409
1747
  NAMESPACE_IMPORT_NAME,
@@ -1412,6 +1750,9 @@ var ANSWER_RELATIONS = [
1412
1750
  RESULT_STEP,
1413
1751
  VALUE_STEP,
1414
1752
  agreedMountPrefix,
1753
+ askResolution,
1754
+ calleeOutcomeOf,
1755
+ calleeOutcomes,
1415
1756
  checkFactContract,
1416
1757
  explainResolutionProof,
1417
1758
  explainResolvedKey,
@@ -1419,7 +1760,13 @@ var ANSWER_RELATIONS = [
1419
1760
  mountPathsOf,
1420
1761
  nodeOfKey,
1421
1762
  placeholderValues,
1763
+ queryFacts,
1422
1764
  renderExplanation,
1765
+ resolutionProgram,
1423
1766
  singleAnswers,
1767
+ startsAtName,
1768
+ valueLeftByWrites,
1769
+ writesRunInOrder,
1770
+ writtenSourcesOf,
1424
1771
  writtenValueOf
1425
1772
  });