Skip to content

Commit ce5523d

Browse files
authored
Merge pull request #748 from viperproject/meilers_old_trigger_inference_proper
Cleaner implementation of fix for issue #740
2 parents 09956be + 25be372 commit ce5523d

2 files changed

Lines changed: 22 additions & 0 deletions

File tree

src/main/scala/viper/silver/ast/utility/GenericTriggerGenerator.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,10 +195,19 @@ abstract class GenericTriggerGenerator[Node <: AnyRef,
195195
else
196196
results.flatten
197197

198+
case e if modifyPossibleTriggers.isDefinedAt(e) => modifyPossibleTriggers.apply(e)(results)
199+
198200
case _ => results.flatten
199201
})
200202
}
201203

204+
/*
205+
* Hook for clients to add more cases to getFunctionAppsContaining to modify the found possible triggers.
206+
* Used e.g. to wrap trigger expressions inferred from inside old-expression into old()
207+
*/
208+
def modifyPossibleTriggers: PartialFunction[Node, Seq[Seq[(PossibleTrigger, Seq[Var], Seq[Var])]] =>
209+
Seq[(PossibleTrigger, Seq[Var], Seq[Var])]] = PartialFunction.empty
210+
202211
/* Precondition: if vars is non-empty then every (f,vs) pair in functs
203212
* satisfies the property that vars and vs are not disjoint.
204213
*

src/main/scala/viper/silver/ast/utility/Triggers.scala

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,19 @@ object Triggers {
5757
case LabelledOld(pt: PossibleTrigger, _) => pt.getArgs
5858
case _ => sys.error(s"Unexpected expression $e")
5959
}
60+
61+
override def modifyPossibleTriggers = {
62+
case ast.Old(_) => results =>
63+
results.flatten.map(t => {
64+
val exp = t._1
65+
(ast.Old(exp)(exp.pos, exp.info, exp.errT), t._2, t._3)
66+
})
67+
case ast.LabelledOld(_, l) => results =>
68+
results.flatten.map(t => {
69+
val exp = t._1
70+
(ast.LabelledOld(exp, l)(exp.pos, exp.info, exp.errT), t._2, t._3)
71+
})
72+
}
6073
}
6174

6275
/**

0 commit comments

Comments
 (0)