Skip to content

Commit 2e306af

Browse files
authored
Merge pull request #750 from viperproject/meilers_fix_749
Fixing unknown function error by recording snapshot masks
2 parents b7bc9ba + 0bfabda commit 2e306af

1 file changed

Lines changed: 16 additions & 6 deletions

File tree

src/main/scala/rules/Evaluator.scala

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1416,13 +1416,15 @@ object evaluator extends EvaluationRules {
14161416
triggerAxioms = triggerAxioms ++ axioms
14171417
smDefs = smDefs ++ smDef
14181418
case pa: ast.PredicateAccess if s.heapDependentTriggers.contains(pa.loc(s.program)) =>
1419-
val (axioms, trigs, _) = generatePredicateTrigger(pa, s, pve, v)
1419+
val (axioms, trigs, _, smDef) = generatePredicateTrigger(pa, s, pve, v)
14201420
triggers = triggers ++ trigs
14211421
triggerAxioms = triggerAxioms ++ axioms
1422+
smDefs = smDefs ++ smDef
14221423
case wand: ast.MagicWand if s.heapDependentTriggers.contains(MagicWandIdentifier(wand, s.program)) =>
1423-
val (axioms, trigs, _) = generateWandTrigger(wand, s, pve, v)
1424+
val (axioms, trigs, _, smDef) = generateWandTrigger(wand, s, pve, v)
14241425
triggers = triggers ++ trigs
14251426
triggerAxioms = triggerAxioms ++ axioms
1427+
smDefs = smDefs ++ smDef
14261428
case e => evalTrigger(s, Seq(e), pve, v)((_, t, _) => {
14271429
triggers = triggers ++ t
14281430
Success()
@@ -1502,7 +1504,11 @@ object evaluator extends EvaluationRules {
15021504
}
15031505

15041506
/* TODO: Try to unify with generateFieldTrigger above, or at least with generateWandTrigger below */
1505-
private def generatePredicateTrigger(pa: ast.PredicateAccess, s: State, pve: PartialVerificationError, v: Verifier): (Seq[Term], Seq[Term], PredicateTrigger) = {
1507+
private def generatePredicateTrigger(pa: ast.PredicateAccess,
1508+
s: State,
1509+
pve: PartialVerificationError,
1510+
v: Verifier)
1511+
: (Seq[Term], Seq[Term], PredicateTrigger, Seq[SnapshotMapDefinition]) = {
15061512
var axioms = Seq.empty[Term]
15071513
var triggers = Seq.empty[Term]
15081514
var mostRecentTrig: PredicateTrigger = null
@@ -1524,11 +1530,15 @@ object evaluator extends EvaluationRules {
15241530
Success()
15251531
})
15261532

1527-
(axioms, triggers, mostRecentTrig)
1533+
(axioms, triggers, mostRecentTrig, Seq(smDef1))
15281534
}
15291535

15301536
/* TODO: See comments for generatePredicateTrigger above */
1531-
private def generateWandTrigger(wand: ast.MagicWand, s: State, pve: PartialVerificationError, v: Verifier): (Seq[Term], Seq[Term], PredicateTrigger) = {
1537+
private def generateWandTrigger(wand: ast.MagicWand,
1538+
s: State,
1539+
pve: PartialVerificationError,
1540+
v: Verifier)
1541+
: (Seq[Term], Seq[Term], PredicateTrigger, Seq[SnapshotMapDefinition]) = {
15321542
var axioms = Seq.empty[Term]
15331543
var triggers = Seq.empty[Term]
15341544
var mostRecentTrig: PredicateTrigger = null
@@ -1552,7 +1562,7 @@ object evaluator extends EvaluationRules {
15521562
Success()
15531563
})
15541564

1555-
(axioms, triggers, mostRecentTrig)
1565+
(axioms, triggers, mostRecentTrig, Seq(smDef1))
15561566
}
15571567

15581568
/* Evaluate a sequence of expressions in Order

0 commit comments

Comments
 (0)