summaryrefslogtreecommitdiff
path: root/Chalice
diff options
context:
space:
mode:
authorGravatar stefanheule <unknown>2012-02-25 03:32:36 -0800
committerGravatar stefanheule <unknown>2012-02-25 03:32:36 -0800
commite3b22875d8660f1b0e2923732015a0cb421fc3f4 (patch)
treeb9c3319e98f715aa5d3a88d64b3bacef23c6fc48 /Chalice
parent5cf1533472372de18c87d082e97131b8e51b8624 (diff)
Chalice: Recurse only one level for "unfold" when updating the secondary mask.
Diffstat (limited to 'Chalice')
-rw-r--r--Chalice/src/main/scala/Translator.scala9
1 files changed, 8 insertions, 1 deletions
diff --git a/Chalice/src/main/scala/Translator.scala b/Chalice/src/main/scala/Translator.scala
index 97428b67..bedc435b 100644
--- a/Chalice/src/main/scala/Translator.scala
+++ b/Chalice/src/main/scala/Translator.scala
@@ -2102,6 +2102,9 @@ class ExpressionTranslator(val globals: Globals, preGlobals: Globals, val fpi: F
val depth = etran.fpi.getRecursionBound(predicate)
UpdateSecMask(predicate, receiver, version, perm, currentK, depth, Map())
}
+ def UpdateSecMaskDuringUnfold(predicate: Predicate, receiver: Expr, version: Expr, perm: Permission, currentK: Expr): List[Stmt] = {
+ UpdateSecMask(predicate, receiver, version, perm, currentK, 1, Map())
+ }
def UpdateSecMask(predicate: Predicate, receiver: Expr, version: Expr, perm: Permission, currentK: Expr, depth: Int, previousReceivers: Map[String,List[Expr]]): List[Stmt] = {
assert (depth >= 0)
if (depth <= 0) return Nil
@@ -2263,7 +2266,11 @@ class ExpressionTranslator(val globals: Globals, preGlobals: Globals, val fpi: F
(if (isUpdatingSecMask)
UpdateSecMask(e.predicate, trE, Heap.select(trE, memberName), perm, currentK, recurseOnPredicatesDepth, previousReceivers)
else
- UpdateSecMask(e.predicate, trE, Heap.select(trE, memberName), perm, currentK)
+ (if (duringUnfold)
+ UpdateSecMaskDuringUnfold(e.predicate, trE, Heap.select(trE, memberName), perm, currentK)
+ else
+ UpdateSecMask(e.predicate, trE, Heap.select(trE, memberName), perm, currentK)
+ )
)
else Nil) :::
// update version number (if necessary)