Skip to content

Commit

Permalink
Finish cherry-picking Asserting/Assuming changes from Bob's branch
Browse files Browse the repository at this point in the history
  • Loading branch information
superaxander committed Nov 22, 2024
1 parent 51b0239 commit 7d8907e
Show file tree
Hide file tree
Showing 8 changed files with 64 additions and 122 deletions.
11 changes: 0 additions & 11 deletions src/col/vct/col/ast/unsorted/AssertingImpl.scala

This file was deleted.

3 changes: 3 additions & 0 deletions src/col/vct/col/origin/Blame.scala
Original file line number Diff line number Diff line change
Expand Up @@ -1545,6 +1545,9 @@ object NonNullPointerNull
object UnsafeDontCare {
case class Satisfiability(reason: String)
extends UnsafeDontCare[NontrivialUnsatisfiable]
case class Contract(reason: String) extends UnsafeDontCare[ContractedFailure]
case class Invocation(reason: String)
extends UnsafeDontCare[InvocationFailure]
}

trait UnsafeDontCare[T <: VerificationFailure]
Expand Down
2 changes: 1 addition & 1 deletion src/hre/hre/io/ChecksumReadableFile.scala
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ case class ChecksumReadableFile(
checksumKind: String,
) extends InMemoryCachedReadable {
override def underlyingPath: Option[Path] = Some(file)
override def fileName: String = file.toString
override def fileName: String = file.getFileName.toString
override def isRereadable: Boolean = true
private var checksumCache: Option[String] = None

Expand Down
2 changes: 1 addition & 1 deletion src/hre/hre/io/RWFile.scala
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import java.nio.file.{Files, Path}
case class RWFile(file: Path, doWatch: Boolean = true)
extends InMemoryCachedReadable with Writeable {
override def underlyingPath: Option[Path] = Some(file)
override def fileName: String = file.toString
override def fileName: String = file.getFileName.toString
override def isRereadable: Boolean = true

override protected def getWriter: Writer = {
Expand Down
4 changes: 2 additions & 2 deletions src/main/vct/main/stages/Transformation.scala
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ import vct.rewrite.{
EncodeByValueClassUsage,
EncodeRange,
EncodeResourceValues,
EncodeAssertingAssuming,
EncodeAssuming,
ExplicitResourceValues,
GenerateSingleOwnerPermissions,
HeapVariableToRef,
Expand Down Expand Up @@ -414,7 +414,7 @@ case class SilverTransformation(
RefuteToInvertedAssert,
ExplicitResourceValues,
EncodeResourceValues,
EncodeAssertingAssuming,
EncodeAssuming,

// Encode parallel blocks
EncodeSendRecv,
Expand Down
2 changes: 1 addition & 1 deletion src/main/vct/options/types/PathOrStd.scala
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ sealed trait PathOrStd extends InMemoryCachedReadable with Writeable {

override def fileName: String =
this match {
case PathOrStd.Path(path) => path.toString
case PathOrStd.Path(path) => path.getFileName.toString
case PathOrStd.StdInOrOut => "<stdio>"
}

Expand Down
106 changes: 0 additions & 106 deletions src/rewrite/vct/rewrite/EncodeAssertingAssuming.scala

This file was deleted.

56 changes: 56 additions & 0 deletions src/rewrite/vct/rewrite/EncodeAssuming.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package vct.rewrite

import com.typesafe.scalalogging.LazyLogging
import vct.col.ast.{
Assuming,
Expr,
Function,
Let,
TBool,
UnitAccountedPredicate,
Variable,
}
import vct.col.origin.{DiagnosticOrigin, UnsafeDontCare}
import vct.col.rewrite.{Generation, Rewriter, RewriterBuilder}

import vct.col.util.AstBuildHelpers._

case object EncodeAssuming extends RewriterBuilder {
override def key: String = "encodeAssumeExpr"
override def desc: String = "Encodes assume exprs using plain pure functions"
}

case class EncodeAssuming[Pre <: Generation]()
extends Rewriter[Pre] with LazyLogging {

lazy val assumingFunction: Function[Post] = {
implicit val o = DiagnosticOrigin
val assnVar = new Variable[Post](TBool())(o.where(name = "assn"))
globalDeclarations.declare(
function(
blame = UnsafeDontCare.Contract("assumption primitive"),
contractBlame = UnsafeDontCare.Satisfiability("assumption primitive"),
returnType = TBool(),
args = Seq(assnVar),
ensures = UnitAccountedPredicate(assnVar.get),
)(o.where(name = "assume_"))
)
}

override def dispatch(expr: Expr[Pre]): Expr[Post] =
expr match {
case Assuming(assn, inner) =>
implicit val o = expr.o
Let(
new Variable(TBool())(o.where(name = "_")),
functionInvocation(
ref = assumingFunction.ref,
args = Seq(dispatch(assn)),
blame = UnsafeDontCare.Invocation("assumption"),
),
dispatch(inner),
)

case _ => expr.rewriteDefault()
}
}

0 comments on commit 7d8907e

Please sign in to comment.