Skip to content

Commit 965e7a4

Browse files
committed
refactor: rename known_subset relation to known_placeholder_subset
According to our finalized rules hackmd
1 parent a473178 commit 965e7a4

File tree

7 files changed

+53
-51
lines changed

7 files changed

+53
-51
lines changed

polonius-engine/src/facts.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ pub struct AllFacts<T: FactTypes> {
8282
/// - and one for the `'a: 'c` implied bound from the `x` parameter,
8383
/// (note that the transitive relation `'b: 'c` is not necessarily included
8484
/// explicitly, but rather inferred by polonius).
85-
pub known_subset: Vec<(T::Origin, T::Origin)>,
85+
pub known_placeholder_subset: Vec<(T::Origin, T::Origin)>,
8686

8787
/// `placeholder(origin, loan)` describes a placeholder `origin`, with its associated
8888
/// placeholder `loan`.
@@ -108,7 +108,7 @@ impl<T: FactTypes> Default for AllFacts<T> {
108108
path_assigned_at_base: Vec::default(),
109109
path_moved_at_base: Vec::default(),
110110
path_accessed_at_base: Vec::default(),
111-
known_subset: Vec::default(),
111+
known_placeholder_subset: Vec::default(),
112112
placeholder: Vec::default(),
113113
}
114114
}

polonius-engine/src/output/datafrog_opt.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ pub(super) fn compute<T: FactTypes>(
2828
let origin_live_on_entry_rel = &ctx.origin_live_on_entry;
2929
let cfg_edge_rel = &ctx.cfg_edge;
3030
let loan_killed_at = &ctx.loan_killed_at;
31-
let known_subset = &ctx.known_subset;
31+
let known_placeholder_subset = &ctx.known_placeholder_subset;
3232
let placeholder_origin = &ctx.placeholder_origin;
3333

3434
// Create a new iteration context, ...
@@ -425,12 +425,13 @@ pub(super) fn compute<T: FactTypes>(
425425
// subset_error(Origin1, Origin2, Point) :-
426426
// subset_placeholder(Origin1, Origin2, Point),
427427
// placeholder_origin(Origin2),
428-
// !known_subset(Origin1, Origin2).
428+
// !known_placeholder_subset(Origin1, Origin2).
429429
subset_errors.from_leapjoin(
430430
&subset_placeholder,
431431
(
432432
placeholder_origin.extend_with(|&(_origin1, origin2, _point)| origin2),
433-
known_subset.filter_anti(|&(origin1, origin2, _point)| (origin1, origin2)),
433+
known_placeholder_subset
434+
.filter_anti(|&(origin1, origin2, _point)| (origin1, origin2)),
434435
// remove symmetries:
435436
datafrog::ValueFilter::from(|&(origin1, origin2, _point), _| {
436437
origin1 != origin2

polonius-engine/src/output/mod.rs

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -131,13 +131,13 @@ struct Context<'ctx, T: FactTypes> {
131131
placeholder_origin: Relation<(T::Origin, ())>,
132132
placeholder_loan: Relation<(T::Loan, T::Origin)>,
133133

134-
// The `known_subset` relation in the facts does not necessarily contain all the transitive
135-
// subsets. The transitive closure is always needed, so this version here is fully closed
136-
// over.
137-
known_subset: Relation<(T::Origin, T::Origin)>,
134+
// The `known_placeholder_subset` relation in the facts does not necessarily contain all the
135+
// transitive subsets. The transitive closure is always needed, so this version here is fully
136+
// closed over.
137+
known_placeholder_subset: Relation<(T::Origin, T::Origin)>,
138138

139-
// while this static input is unused by `LocationInsensitive`, it's depended on by initialization
140-
// and liveness, so already computed by the time we get to borrowcking.
139+
// while this static input is unused by `LocationInsensitive`, it's depended on by
140+
// initialization and liveness, so already computed by the time we get to borrowcking.
141141
cfg_edge: Relation<(T::Point, T::Point)>,
142142

143143
// Partial results possibly used by other variants as input
@@ -236,17 +236,18 @@ impl<T: FactTypes> Output<T> {
236236

237237
let loan_killed_at = all_facts.loan_killed_at.clone().into();
238238

239-
// `known_subset` is a list of all the `'a: 'b` subset relations the user gave:
239+
// `known_placeholder_subset` is a list of all the `'a: 'b` subset relations the user gave:
240240
// it's not required to be transitive. `known_contains` is its transitive closure: a list
241241
// of all the known placeholder loans that each of these placeholder origins contains.
242-
// Given the `known_subset`s `'a: 'b` and `'b: 'c`: in the `known_contains` relation, `'a`
243-
// will also contain `'c`'s placeholder loan.
244-
let known_subset = all_facts.known_subset.clone().into();
242+
// Given the `known_placeholder_subset`s `'a: 'b` and `'b: 'c`: in the `known_contains`
243+
// relation, `'a` will also contain `'c`'s placeholder loan.
244+
let known_placeholder_subset = all_facts.known_placeholder_subset.clone().into();
245245
let known_contains =
246-
Output::<T>::compute_known_contains(&known_subset, &all_facts.placeholder);
246+
Output::<T>::compute_known_contains(&known_placeholder_subset, &all_facts.placeholder);
247247

248-
// Fully close over the `known_subset` relation.
249-
let known_subset = Output::<T>::compute_known_subset(&known_subset);
248+
// Fully close over the `known_placeholder_subset` relation.
249+
let known_placeholder_subset =
250+
Output::<T>::compute_known_placeholder_subset(&known_placeholder_subset);
250251

251252
let placeholder_origin: Relation<_> = Relation::from_iter(
252253
all_facts
@@ -271,7 +272,7 @@ impl<T: FactTypes> Output<T> {
271272
loan_issued_at: &all_facts.loan_issued_at,
272273
loan_killed_at,
273274
known_contains,
274-
known_subset,
275+
known_placeholder_subset,
275276
placeholder_origin,
276277
placeholder_loan,
277278
potential_errors: None,
@@ -392,10 +393,10 @@ impl<T: FactTypes> Output<T> {
392393
result
393394
}
394395

395-
/// Computes the transitive closure of the `known_subset` relation, so that we have
396+
/// Computes the transitive closure of the `known_placeholder_subset` relation, so that we have
396397
/// the full list of placeholder loans contained by the placeholder origins.
397398
fn compute_known_contains(
398-
known_subset: &Relation<(T::Origin, T::Origin)>,
399+
known_placeholder_subset: &Relation<(T::Origin, T::Origin)>,
399400
placeholder: &[(T::Origin, T::Loan)],
400401
) -> Relation<(T::Origin, T::Loan)> {
401402
let mut iteration = datafrog::Iteration::new();
@@ -408,43 +409,42 @@ impl<T: FactTypes> Output<T> {
408409
while iteration.changed() {
409410
// known_contains(Origin2, Loan1) :-
410411
// known_contains(Origin1, Loan1),
411-
// known_subset(Origin1, Origin2).
412+
// known_placeholder_subset(Origin1, Origin2).
412413
known_contains.from_join(
413414
&known_contains,
414-
known_subset,
415+
known_placeholder_subset,
415416
|&_origin1, &loan1, &origin2| (origin2, loan1),
416417
);
417418
}
418419

419420
known_contains.complete()
420421
}
421422

422-
/// Computes the transitive closure of the `known_subset` relation.
423-
fn compute_known_subset(
424-
known_subset: &Relation<(T::Origin, T::Origin)>,
423+
/// Computes the transitive closure of the `known_placeholder_subset` relation.
424+
fn compute_known_placeholder_subset(
425+
known_placeholder_subset_base: &Relation<(T::Origin, T::Origin)>,
425426
) -> Relation<(T::Origin, T::Origin)> {
426427
use datafrog::{Iteration, RelationLeaper};
427428
let mut iteration = Iteration::new();
428429

429-
let known_subset_base = known_subset;
430-
let known_subset = iteration.variable("known_subset");
430+
let known_placeholder_subset = iteration.variable("known_placeholder_subset");
431431

432-
// known_subset(Origin1, Origin2) :-
433-
// known_subset_base(Origin1, Origin2).
434-
known_subset.extend(known_subset_base.iter());
432+
// known_placeholder_subset(Origin1, Origin2) :-
433+
// known_placeholder_subset_base(Origin1, Origin2).
434+
known_placeholder_subset.extend(known_placeholder_subset_base.iter());
435435

436436
while iteration.changed() {
437-
// known_subset(Origin1, Origin3) :-
438-
// known_subset(Origin1, Origin2),
439-
// known_subset_base(Origin2, Origin3).
440-
known_subset.from_leapjoin(
441-
&known_subset,
442-
known_subset_base.extend_with(|&(_origin1, origin2)| origin2),
437+
// known_placeholder_subset(Origin1, Origin3) :-
438+
// known_placeholder_subset(Origin1, Origin2),
439+
// known_placeholder_subset_base(Origin2, Origin3).
440+
known_placeholder_subset.from_leapjoin(
441+
&known_placeholder_subset,
442+
known_placeholder_subset_base.extend_with(|&(_origin1, origin2)| origin2),
443443
|&(origin1, _origin2), &origin3| (origin1, origin3),
444444
);
445445
}
446446

447-
known_subset.complete()
447+
known_placeholder_subset.complete()
448448
}
449449

450450
fn new(dump_enabled: bool) -> Self {

polonius-engine/src/output/naive.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ pub(super) fn compute<T: FactTypes>(
3030
let origin_live_on_entry_rel = &ctx.origin_live_on_entry;
3131
let cfg_edge = &ctx.cfg_edge;
3232
let loan_killed_at = &ctx.loan_killed_at;
33-
let known_subset = &ctx.known_subset;
33+
let known_placeholder_subset = &ctx.known_placeholder_subset;
3434
let placeholder_origin = &ctx.placeholder_origin;
3535

3636
// Create a new iteration context, ...
@@ -230,13 +230,14 @@ pub(super) fn compute<T: FactTypes>(
230230
// subset(Origin1, Origin2, Point),
231231
// placeholder_origin(Origin1),
232232
// placeholder_origin(Origin2),
233-
// !known_subset(Origin1, Origin2).
233+
// !known_placeholder_subset(Origin1, Origin2).
234234
subset_errors.from_leapjoin(
235235
&subset,
236236
(
237237
placeholder_origin.extend_with(|&(origin1, _origin2, _point)| origin1),
238238
placeholder_origin.extend_with(|&(_origin1, origin2, _point)| origin2),
239-
known_subset.filter_anti(|&(origin1, origin2, _point)| (origin1, origin2)),
239+
known_placeholder_subset
240+
.filter_anti(|&(origin1, origin2, _point)| (origin1, origin2)),
240241
// remove symmetries:
241242
datafrog::ValueFilter::from(|&(origin1, origin2, _point), _| {
242243
origin1 != origin2

src/program.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ struct Facts {
1919
loan_killed_at: BTreeSet<(Loan, Point)>,
2020
subset_base: BTreeSet<(Origin, Origin, Point)>,
2121
loan_invalidated_at: BTreeSet<(Point, Loan)>,
22-
known_subset: BTreeSet<(Origin, Origin)>,
22+
known_placeholder_subset: BTreeSet<(Origin, Origin)>,
2323
placeholder: BTreeSet<(Origin, Loan)>,
2424
var_defined_at: BTreeSet<(Variable, Point)>,
2525
var_used_at: BTreeSet<(Variable, Point)>,
@@ -52,7 +52,7 @@ impl From<Facts> for AllFacts {
5252
path_assigned_at_base: facts.path_assigned_at_base.into_iter().collect(),
5353
path_moved_at_base: facts.path_moved_at_base.into_iter().collect(),
5454
path_accessed_at_base: facts.path_accessed_at_base.into_iter().collect(),
55-
known_subset: facts.known_subset.into_iter().collect(),
55+
known_placeholder_subset: facts.known_placeholder_subset.into_iter().collect(),
5656
placeholder: facts.placeholder.into_iter().collect(),
5757
}
5858
}
@@ -113,8 +113,8 @@ pub(crate) fn parse_from_program(
113113
}),
114114
);
115115

116-
// facts: known_subset(Origin, Origin)
117-
facts.known_subset.extend(
116+
// facts: known_placeholder_subset(Origin, Origin)
117+
facts.known_placeholder_subset.extend(
118118
input
119119
.known_subsets
120120
.iter()

src/tab_delim.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ pub(crate) fn load_tab_delimited_facts(
4949
path_assigned_at_base,
5050
path_moved_at_base,
5151
path_accessed_at_base,
52-
known_subset,
52+
known_placeholder_subset,
5353
placeholder,
5454
}
5555
}

src/test.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -588,7 +588,7 @@ fn illegal_subset_error() {
588588
assert_eq!(checker.facts.placeholder.len(), 2);
589589

590590
// no known subsets are defined in the program...
591-
assert_eq!(checker.facts.known_subset.len(), 0);
591+
assert_eq!(checker.facts.known_placeholder_subset.len(), 0);
592592

593593
// ...so there should be an error here about the missing `'b: 'a` subset
594594
assert_eq!(checker.subset_errors_count(), 1);
@@ -621,7 +621,7 @@ fn known_placeholder_origin_subset() {
621621

622622
assert_eq!(checker.facts.universal_region.len(), 2);
623623
assert_eq!(checker.facts.placeholder.len(), 2);
624-
assert_eq!(checker.facts.known_subset.len(), 1);
624+
assert_eq!(checker.facts.known_placeholder_subset.len(), 1);
625625

626626
assert_eq!(checker.subset_errors_count(), 0);
627627
assert_eq!(
@@ -651,8 +651,8 @@ fn transitive_known_subset() {
651651
assert_eq!(checker.facts.universal_region.len(), 3);
652652
assert_eq!(checker.facts.placeholder.len(), 3);
653653

654-
// the 2 `known_subset`s here mean 3 `known_contains`, transitively
655-
assert_eq!(checker.facts.known_subset.len(), 2);
654+
// the 2 `known_placeholder_subset`s here mean 3 `known_contains`, transitively
655+
assert_eq!(checker.facts.known_placeholder_subset.len(), 2);
656656
assert_eq!(checker.output.known_contains.len(), 3);
657657

658658
assert_eq!(checker.subset_errors_count(), 0);
@@ -690,7 +690,7 @@ fn transitive_illegal_subset_error() {
690690

691691
assert_eq!(checker.facts.universal_region.len(), 3);
692692
assert_eq!(checker.facts.placeholder.len(), 3);
693-
assert_eq!(checker.facts.known_subset.len(), 1);
693+
assert_eq!(checker.facts.known_placeholder_subset.len(), 1);
694694

695695
// There should be 2 errors here about the missing `'b: 'c` and `'a: 'c` subsets.
696696
assert_eq!(checker.subset_errors_count(), 2);

0 commit comments

Comments
 (0)