Skip to content

Commit

Permalink
Add back error reporting
Browse files Browse the repository at this point in the history
  • Loading branch information
bobismijnnaam committed Sep 19, 2024
1 parent 0a006a8 commit 34f4648
Showing 1 changed file with 14 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ import vct.col.util.SuccessionMap
import vct.result.VerificationError.UserError
import vct.rewrite.veymont.{InferEndpointContexts, VeymontContext}
import vct.rewrite.veymont.verification.EncodePermissionStratification.{
ForwardAssertFailedToDeref,
ForwardExhaleFailedToChorRun,
ForwardInvocationFailureToDeref,
ForwardUnfoldFailedToDeref,
NoEndpointContext,
}

Expand All @@ -37,9 +37,9 @@ object EncodePermissionStratification extends RewriterBuilderArg[Boolean] {
deref.blame.blame(InsufficientPermission(deref))
}

case class ForwardUnfoldFailedToDeref(deref: Deref[_])
extends Blame[UnfoldFailure] {
override def blame(error: UnfoldFailure): Unit =
case class ForwardAssertFailedToDeref(deref: Deref[_])
extends Blame[AssertFailed] {
override def blame(error: AssertFailed): Unit =
deref.blame.blame(InsufficientPermission(deref))
}

Expand Down Expand Up @@ -151,11 +151,9 @@ case class EncodePermissionStratification[Pre <: Generation](
}

val readFunctions = mut.LinkedHashMap[WrapperPredicateKey, Function[Post]]()
def readFunction(
endpoint: Endpoint[Pre],
obj: Expr[Pre],
field: InstanceField[Pre],
)(implicit o: Origin): Ref[Post, Function[Post]] = {
def readFunction(obj: Expr[Pre], field: InstanceField[Pre])(
implicit o: Origin
): Ref[Post, Function[Post]] = {
val k = (obj.t, field)
val pred = wrapperPredicate(obj.t, field)
readFunctions.getOrElseUpdate(
Expand Down Expand Up @@ -375,7 +373,7 @@ case class EncodePermissionStratification[Pre <: Generation](
case InEndpoint(_, endpoint, deref @ Deref(obj, Ref(field))) =>
implicit val o = expr.o
functionInvocation(
ref = readFunction(endpoint, obj, field)(expr.o),
ref = readFunction(obj, field)(expr.o),
args = Seq(specializing.top, dispatch(obj)),
blame = ForwardInvocationFailureToDeref(deref),
)
Expand Down Expand Up @@ -504,15 +502,13 @@ case class EncodePermissionStratification[Pre <: Generation](
Seq(intermediate),
Block(Seq(
assignLocal(intermediate.get, dispatch(assign.value)),
// Unfold(apply)(ForwardUnfoldFailedToDeref(deref)),
Assert(Perm(PredicateLocation(apply), WritePerm()))(PanicBlame(
"TODO: Forward blame"
)),
Assert(Perm(PredicateLocation(apply), WritePerm()))(
ForwardAssertFailedToDeref(deref)
),
assign.rewrite(
target =
Deref[Post](dispatch(obj), succ(field))(PanicBlame(
"Unfold succeeded, so assignment is safe"
)),
// Use rewriteDefault to prevent triggering rewriting into a read function. We just want the
// raw field access here.
target = deref.rewriteDefault(),
value = intermediate.get,
),
)),
Expand Down

0 comments on commit 34f4648

Please sign in to comment.