@@ -334,7 +334,7 @@ object producer extends ProductionRules {
334334 })))
335335
336336
337- case QuantifiedPermissionAssertion (forall, cond, accPred) =>
337+ case qpa @ QuantifiedPermissionAssertion (forall, cond, accPred) =>
338338 val resource = accPred.res(s.program)
339339 val resAcc = accPred.loc
340340 val eArgs = resAcc.args(s.program)
@@ -353,12 +353,15 @@ object producer extends ProductionRules {
353353 val optTrigger =
354354 if (forall.triggers.isEmpty) None
355355 else Some (forall.triggers)
356- evalQuantified(s, Forall , forall.variables, Seq (cond), ePerm +: eArgs, optTrigger, qid, pve, v) {
356+ val s0 = s.copy(functionRecorder = s.functionRecorder.enterQuantifiedExp(qpa))
357+ evalQuantified(s0, Forall , forall.variables, Seq (cond), ePerm +: eArgs, optTrigger, qid, pve, v) {
357358 case (s1, qvars, qvarExps, Seq (tCond), eCondNew, Some ((Seq (tPerm, tArgs@_* ), permArgs, tTriggers, (auxGlobals, auxNonGlobals), auxExps)), v1) =>
358359 val s1a = s1.copy(constrainableARPs = s.constrainableARPs)
359360 v1.heapSupporter.produceQuantified(s1a, sf, forall, resource, qvars, qvarExps, tFormalArgs, eFormalArgs, qid, optTrigger, tTriggers, auxGlobals, auxNonGlobals,
360361 auxExps.map(_._1), auxExps.map(_._2), tCond, eCondNew.map(_.head), tArgs, permArgs.map(_.tail), tPerm, permArgs.map(_.head), pve, NegativePermission (ePerm),
361- QPAssertionNotInjective (resAcc), v1)(Q )
362+ QPAssertionNotInjective (resAcc), v1)((s2, v2) => {
363+ Q (s2.copy(functionRecorder = s2.functionRecorder.leaveQuantifiedExp(qpa)), v2)
364+ })
362365 case (s1, _, _, _, _, None , v1) => Q (s1.copy(constrainableARPs = s.constrainableARPs), v1)
363366 }
364367
0 commit comments