crucible 0.7.2 → 0.8.0.0
raw patch · 22 files changed
+1976/−443 lines, 22 filesdep +hedgehogdep +tasty-hedgehogdep ~basenew-uploaderPVP ok
version bump matches the API change (PVP)
Dependencies added: hedgehog, tasty-hedgehog
Dependency ranges changed: base
API changes (from Hackage documentation)
- Lang.Crucible.Analysis.DFS: type DFSNodeFunc ext blocks a = forall ret ctx. Block ext blocks ret ctx -> a -> a
- Lang.Crucible.CFG.Generator: earlyMergeLoops :: (TraverseExt ext, Monad m, Show (CFG ext s init ret)) => NonceGenerator m s -> CFG ext s init ret -> m (CFG ext s init ret)
- Lang.Crucible.CFG.Generator: type FunctionDef ext t init ret m = forall s. Assignment (Atom s) init -> (t s, Generator ext s t ret m (Expr ext s ret))
- Lang.Crucible.Simulator: type EvalStmtFunc p sym ext = forall rtp blocks r ctx tp'. StmtExtension ext (RegEntry sym) tp' -> CrucibleState p sym ext rtp blocks r ctx -> IO (RegValue sym tp', CrucibleState p sym ext rtp blocks r ctx)
- Lang.Crucible.Simulator: type IsSymInterfaceProof sym a = (IsSymInterface sym => a) -> a
- Lang.Crucible.Simulator.Evaluation: type EvalAppFunc sym app = forall f. (forall tp. f tp -> IO (RegValue sym tp)) -> (forall tp. app f tp -> IO (RegValue sym tp))
- Lang.Crucible.Simulator.ExecutionTree: type EvalStmtFunc p sym ext = forall rtp blocks r ctx tp'. StmtExtension ext (RegEntry sym) tp' -> CrucibleState p sym ext rtp blocks r ctx -> IO (RegValue sym tp', CrucibleState p sym ext rtp blocks r ctx)
- Lang.Crucible.Simulator.ExecutionTree: type IsSymInterfaceProof sym a = (IsSymInterface sym => a) -> a
+ Lang.Crucible.Analysis.DFS: type DFSNodeFunc ext (blocks :: Ctx Ctx CrucibleType) a = forall (ret :: CrucibleType) (ctx :: Ctx CrucibleType). () => Block ext blocks ret ctx -> a -> a
+ Lang.Crucible.Backend: getBackendState :: IsSymBackend sym bak => bak -> IO (AssumptionState sym)
+ Lang.Crucible.Backend: ppAssumptionState :: IsExpr (SymExpr sym) => proxy sym -> AssumptionState sym -> Doc ann
+ Lang.Crucible.Backend: ppAssumptions :: forall (e :: BaseType -> Type) ann. IsExpr e => CrucibleAssumptions e -> Doc ann
+ Lang.Crucible.Backend: ppAssumptions' :: (forall (tp :: BaseType). () => e tp -> Doc ann) -> CrucibleAssumptions e -> Doc ann
+ Lang.Crucible.Backend.Goals: instance (Prettyprinter.Internal.Pretty asmp, Prettyprinter.Internal.Pretty goal) => Prettyprinter.Internal.Pretty (Lang.Crucible.Backend.Goals.Goals asmp goal)
+ Lang.Crucible.Backend.Goals: ppGoals :: (asmp -> Doc ann) -> (goal -> Doc ann) -> Goals asmp goal -> Doc ann
+ Lang.Crucible.Backend.ProofGoals: gcAddTopLevelAssume :: Monoid asmp => asmp -> GoalCollector asmp goal -> GoalCollector asmp goal
+ Lang.Crucible.Backend.ProofGoals: instance (Prettyprinter.Internal.Pretty asmp, Prettyprinter.Internal.Pretty goal) => Prettyprinter.Internal.Pretty (Lang.Crucible.Backend.ProofGoals.GoalCollector asmp goal)
+ Lang.Crucible.Backend.ProofGoals: ppGoalCollector :: forall asmp goal ann. (asmp -> Doc ann) -> (goal -> Doc ann) -> GoalCollector asmp goal -> Doc ann
+ Lang.Crucible.CFG.Generator: type FunctionDef ext (t :: Type -> Type) (init :: Ctx CrucibleType) (ret :: CrucibleType) (m :: Type -> Type) = forall s. () => Assignment Atom s init -> (t s, Generator ext s t ret m Expr ext s ret)
+ Lang.Crucible.Concretize: asConcRegEntry :: forall sym (tp :: CrucibleType). IsExpr (SymExpr sym) => RegEntry sym tp -> Maybe (ConcRegValue sym tp)
+ Lang.Crucible.Concretize: asConcRegMap :: forall sym (tp :: Ctx CrucibleType). IsExpr (SymExpr sym) => RegMap sym tp -> Maybe (Assignment (ConcRV' sym) tp)
+ Lang.Crucible.Concretize: asConcRegValue :: forall sym proxy (tp :: CrucibleType). IsExpr (SymExpr sym) => proxy sym -> TypeRepr tp -> RegValue sym tp -> Maybe (ConcRegValue sym tp)
+ Lang.Crucible.Concretize: groundRegEntry :: forall sym t (tp :: CrucibleType). (SymExpr sym ~ Expr t, IsExprBuilder sym) => ConcCtx sym t -> RegEntry sym tp -> IO (ConcRegValue sym tp)
+ Lang.Crucible.Concretize: groundRegMap :: forall sym t (tps :: Ctx CrucibleType). (SymExpr sym ~ Expr t, IsExprBuilder sym) => ConcCtx sym t -> RegMap sym tps -> IO (Assignment (ConcRV' sym) tps)
+ Lang.Crucible.Concretize: groundRegValue :: forall sym t (tp :: CrucibleType). (SymExpr sym ~ Expr t, IsExprBuilder sym) => ConcCtx sym t -> TypeRepr tp -> RegValue sym tp -> IO (ConcRegValue sym tp)
+ Lang.Crucible.Concretize: uniquelyConcRegEntry :: forall (tp :: CrucibleType) sym bak solver scope (st :: Type -> Type) (fm :: FloatMode). (IsSymBackend sym bak, sym ~ ExprBuilder scope st (Flags fm), SymExpr sym ~ Expr scope, bak ~ OnlineBackend solver scope st (Flags fm), OnlineSolver solver) => bak -> FloatModeRepr fm -> MapF SymbolRepr (IntrinsicConcFn scope) -> MapF SymbolRepr IntrinsicConcToSymFn -> RegEntry sym tp -> IO (Either UniqueConcretizationFailure (ConcRegValue sym tp))
+ Lang.Crucible.Concretize: uniquelyConcRegMap :: forall (tps :: Ctx CrucibleType) sym bak solver scope (st :: Type -> Type) (fm :: FloatMode). (IsSymBackend sym bak, sym ~ ExprBuilder scope st (Flags fm), SymExpr sym ~ Expr scope, bak ~ OnlineBackend solver scope st (Flags fm), OnlineSolver solver) => bak -> FloatModeRepr fm -> MapF SymbolRepr (IntrinsicConcFn scope) -> MapF SymbolRepr IntrinsicConcToSymFn -> RegMap sym tps -> IO (Either UniqueConcretizationFailure (Assignment (ConcRV' sym) tps))
+ Lang.Crucible.Concretize: uniquelyConcRegValue :: forall (tp :: CrucibleType) sym bak solver scope (st :: Type -> Type) (fm :: FloatMode). (IsSymBackend sym bak, sym ~ ExprBuilder scope st (Flags fm), SymExpr sym ~ Expr scope, bak ~ OnlineBackend solver scope st (Flags fm), OnlineSolver solver) => bak -> FloatModeRepr fm -> MapF SymbolRepr (IntrinsicConcFn scope) -> MapF SymbolRepr IntrinsicConcToSymFn -> TypeRepr tp -> RegValue sym tp -> IO (Either UniqueConcretizationFailure (ConcRegValue sym tp))
+ Lang.Crucible.Simulator: type EvalStmtFunc p sym ext = forall rtp (blocks :: Ctx Ctx CrucibleType) (r :: CrucibleType) (ctx :: Ctx CrucibleType) (tp' :: CrucibleType). () => StmtExtension ext RegEntry sym tp' -> CrucibleState p sym ext rtp blocks r ctx -> IO (RegValue sym tp', CrucibleState p sym ext rtp blocks r ctx)
+ Lang.Crucible.Simulator: type IsSymInterfaceProof sym a = IsSymInterface sym => a -> a
+ Lang.Crucible.Simulator.Evaluation: type EvalAppFunc sym (app :: CrucibleType -> Type -> CrucibleType -> Type) = forall (f :: CrucibleType -> Type). () => forall (tp :: CrucibleType). () => f tp -> IO RegValue sym tp -> forall (tp :: CrucibleType). () => app f tp -> IO RegValue sym tp
+ Lang.Crucible.Simulator.ExecutionTree: execResultGlobals :: Monad f => (SimContext p sym ext -> ProgramLoc -> Pred sym -> SymGlobalState sym -> SymGlobalState sym -> f (SymGlobalState sym)) -> ExecResult p sym ext rtp -> f (SymGlobalState sym)
+ Lang.Crucible.Simulator.ExecutionTree: execStateGlobals :: Monad f => (SimContext p sym ext -> ProgramLoc -> Pred sym -> SymGlobalState sym -> SymGlobalState sym -> f (SymGlobalState sym)) -> ExecState p sym ext rtp -> f (SymGlobalState sym)
+ Lang.Crucible.Simulator.ExecutionTree: setExecResultContext :: SimContext p sym ext -> ExecResult p sym ext r -> ExecResult p sym ext r
+ Lang.Crucible.Simulator.ExecutionTree: setExecStateContext :: SimContext p sym ext -> ExecState p sym ext r -> ExecState p sym ext r
+ Lang.Crucible.Simulator.ExecutionTree: type EvalStmtFunc p sym ext = forall rtp (blocks :: Ctx Ctx CrucibleType) (r :: CrucibleType) (ctx :: Ctx CrucibleType) (tp' :: CrucibleType). () => StmtExtension ext RegEntry sym tp' -> CrucibleState p sym ext rtp blocks r ctx -> IO (RegValue sym tp', CrucibleState p sym ext rtp blocks r ctx)
+ Lang.Crucible.Simulator.ExecutionTree: type IsSymInterfaceProof sym a = IsSymInterface sym => a -> a
+ Lang.Crucible.Simulator.OverrideSim: bindTypedOverride :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType) p sym ext rtp (args' :: Ctx CrucibleType) (ret' :: CrucibleType). FnHandle args ret -> TypedOverride p sym ext args ret -> OverrideSim p sym ext rtp args' ret' ()
+ Lang.Crucible.Simulator.OverrideSim: typedOverride :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType) sym p ext. (KnownRepr (Assignment TypeRepr) args, KnownRepr TypeRepr ret) => (forall rtp (args' :: Ctx CrucibleType) (ret' :: CrucibleType). () => Assignment (RegValue' sym) args -> OverrideSim p sym ext rtp args' ret' (RegValue sym ret)) -> TypedOverride p sym ext args ret
+ Lang.Crucible.Simulator.RecordAndReplay: class HasRecordState p r sym ext rtp | p -> r sym ext rtp
+ Lang.Crucible.Simulator.RecordAndReplay: class HasReplayState p r sym ext rtp | p -> r sym ext rtp
+ Lang.Crucible.Simulator.RecordAndReplay: data RecordState p sym ext rtp
+ Lang.Crucible.Simulator.RecordAndReplay: data RecordedTrace sym
+ Lang.Crucible.Simulator.RecordAndReplay: data ReplayState p sym ext rtp
+ Lang.Crucible.Simulator.RecordAndReplay: emptyRecordedTrace :: sym -> IO (RecordedTrace sym)
+ Lang.Crucible.Simulator.RecordAndReplay: getRecordedTrace :: IsExprBuilder sym => SymGlobalState sym -> RecordState p sym ext rtp -> sym -> (Pred sym -> IO Bool) -> IO (RecordedTrace sym)
+ Lang.Crucible.Simulator.RecordAndReplay: initialTrace :: forall p1 sym1 ext1 rtp1 p2 sym2 ext2 rtp2 f. Functor f => (RecordedTrace sym1 -> f (RecordedTrace sym2)) -> ReplayState p1 sym1 ext1 rtp1 -> f (ReplayState p2 sym2 ext2 rtp2)
+ Lang.Crucible.Simulator.RecordAndReplay: instance GHC.Exception.Type.Exception Lang.Crucible.Simulator.RecordAndReplay.TraceGlobalNotDefined
+ Lang.Crucible.Simulator.RecordAndReplay: instance GHC.Show.Show Lang.Crucible.Simulator.RecordAndReplay.TraceGlobalNotDefined
+ Lang.Crucible.Simulator.RecordAndReplay: instance Lang.Crucible.Simulator.RecordAndReplay.HasRecordState (Lang.Crucible.Simulator.RecordAndReplay.RecordState p sym ext rtp) p sym ext rtp
+ Lang.Crucible.Simulator.RecordAndReplay: instance Lang.Crucible.Simulator.RecordAndReplay.HasReplayState (Lang.Crucible.Simulator.RecordAndReplay.ReplayState p sym ext rtp) p sym ext rtp
+ Lang.Crucible.Simulator.RecordAndReplay: mkRecordState :: HandleAllocator -> IO (RecordState p sym ext rtp)
+ Lang.Crucible.Simulator.RecordAndReplay: mkReplayState :: HandleAllocator -> RecordedTrace sym -> IO (ReplayState p sym ext rtp)
+ Lang.Crucible.Simulator.RecordAndReplay: recordFeature :: (HasRecordState p p sym ext rtp, IsExprBuilder sym) => ExecutionFeature p sym ext rtp
+ Lang.Crucible.Simulator.RecordAndReplay: recordState :: HasRecordState p r sym ext rtp => Lens' p (RecordState r sym ext rtp)
+ Lang.Crucible.Simulator.RecordAndReplay: recordTraceLength :: forall sym p ext rtp f (args :: Maybe (Ctx CrucibleType)). (IsExprBuilder sym, HasRecordState p p sym ext rtp) => SimState p sym ext rtp f args -> IO (Maybe (SymNat sym))
+ Lang.Crucible.Simulator.RecordAndReplay: replayFeature :: (HasReplayState p p sym ext rtp, IsExprBuilder sym) => Bool -> ExecutionFeature p sym ext rtp
+ Lang.Crucible.Simulator.RecordAndReplay: replayState :: HasReplayState p r sym ext rtp => Lens' p (ReplayState r sym ext rtp)
+ Lang.Crucible.Simulator.RecordAndReplay: replayTraceLength :: forall sym p ext rtp f (args :: Maybe (Ctx CrucibleType)). (IsExprBuilder sym, HasReplayState p p sym ext rtp) => SimState p sym ext rtp f args -> IO (Maybe (SymNat sym))
+ Lang.Crucible.Simulator.RecordAndReplay: traceGlobal :: forall p1 sym ext1 rtp1 p2 ext2 rtp2 f. Functor f => (GlobalVar TraceType -> f (GlobalVar TraceType)) -> ReplayState p1 sym ext1 rtp1 -> f (ReplayState p2 sym ext2 rtp2)
+ Lang.Crucible.Simulator.RegValue: eqRegValue :: forall sym (tp :: CrucibleType). IsInterpretedFloatExprBuilder sym => sym -> TypeRepr tp -> RegValue sym tp -> RegValue sym tp -> IO (Pred sym)
- Lang.Crucible.Analysis.DFS: dfs :: DFSNodeFunc ext blocks a -> DFSEdgeFunc blocks a -> a -> CFG ext blocks init ret -> a
+ Lang.Crucible.Analysis.DFS: dfs :: forall ext (blocks :: Ctx (Ctx CrucibleType)) a (init :: Ctx CrucibleType) (ret :: CrucibleType). DFSNodeFunc ext blocks a -> DFSEdgeFunc blocks a -> a -> CFG ext blocks init ret -> a
- Lang.Crucible.Analysis.DFS: dfs_backedge_targets :: CFG ext blocks init ret -> Set (SomeBlockID blocks)
+ Lang.Crucible.Analysis.DFS: dfs_backedge_targets :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext blocks init ret -> Set (SomeBlockID blocks)
- Lang.Crucible.Analysis.DFS: dfs_backedges :: CFG ext blocks init ret -> Seq (SomeBlockID blocks, SomeBlockID blocks)
+ Lang.Crucible.Analysis.DFS: dfs_backedges :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext blocks init ret -> Seq (SomeBlockID blocks, SomeBlockID blocks)
- Lang.Crucible.Analysis.DFS: dfs_list :: CFG ext blocks init ret -> Seq (DFSEdgeType, SomeBlockID blocks, SomeBlockID blocks)
+ Lang.Crucible.Analysis.DFS: dfs_list :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext blocks init ret -> Seq (DFSEdgeType, SomeBlockID blocks, SomeBlockID blocks)
- Lang.Crucible.Analysis.DFS: dfs_postorder :: CFG ext blocks init ret -> Seq (SomeBlockID blocks)
+ Lang.Crucible.Analysis.DFS: dfs_postorder :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext blocks init ret -> Seq (SomeBlockID blocks)
- Lang.Crucible.Analysis.DFS: dfs_preorder :: CFG ext blocks init ret -> Seq (SomeBlockID blocks)
+ Lang.Crucible.Analysis.DFS: dfs_preorder :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext blocks init ret -> Seq (SomeBlockID blocks)
- Lang.Crucible.Analysis.DFS: run_dfs :: forall ext blocks a ret cxt. DFSNodeFunc ext blocks a -> DFSEdgeFunc blocks a -> BlockMap ext blocks ret -> Set (SomeBlockID blocks) -> BlockID blocks cxt -> (a, Set (SomeBlockID blocks)) -> (a, Set (SomeBlockID blocks))
+ Lang.Crucible.Analysis.DFS: run_dfs :: forall ext (blocks :: Ctx (Ctx CrucibleType)) a (ret :: CrucibleType) (cxt :: Ctx CrucibleType). DFSNodeFunc ext blocks a -> DFSEdgeFunc blocks a -> BlockMap ext blocks ret -> Set (SomeBlockID blocks) -> BlockID blocks cxt -> (a, Set (SomeBlockID blocks)) -> (a, Set (SomeBlockID blocks))
- Lang.Crucible.Analysis.DFS: type DFSEdgeFunc blocks a = DFSEdgeType -> SomeBlockID blocks -> SomeBlockID blocks -> a -> a
+ Lang.Crucible.Analysis.DFS: type DFSEdgeFunc (blocks :: Ctx Ctx CrucibleType) a = DFSEdgeType -> SomeBlockID blocks -> SomeBlockID blocks -> a -> a
- Lang.Crucible.Analysis.Fixpoint: Domain :: (forall tp. dom tp) -> (forall tp. dom tp) -> (forall tp. dom tp -> dom tp -> dom tp) -> IterationStrategy dom -> (forall tp. dom tp -> dom tp -> Bool) -> Domain (dom :: CrucibleType -> Type)
+ Lang.Crucible.Analysis.Fixpoint: Domain :: (forall (tp :: CrucibleType). () => dom tp) -> (forall (tp :: CrucibleType). () => dom tp) -> (forall (tp :: CrucibleType). () => dom tp -> dom tp -> dom tp) -> IterationStrategy dom -> (forall (tp :: CrucibleType). () => dom tp -> dom tp -> Bool) -> Domain (dom :: CrucibleType -> Type)
- Lang.Crucible.Analysis.Fixpoint: Interpretation :: (forall blocks ctx tp. ScopedReg -> TypeRepr tp -> Expr ext ctx tp -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom tp)) -> (forall blocks ctx tp. ScopedReg -> StmtExtension ext (Reg ctx) tp -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom tp)) -> (forall blocks ctx args ret. CtxRepr args -> TypeRepr ret -> Reg ctx (FunctionHandleType args ret) -> dom (FunctionHandleType args ret) -> Assignment dom args -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom ret)) -> (forall blocks ctx tp. GlobalVar tp -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom tp)) -> (forall blocks ctx tp. GlobalVar tp -> Reg ctx tp -> PointAbstraction blocks dom ctx -> Maybe (PointAbstraction blocks dom ctx)) -> (forall blocks ctx. Reg ctx BoolType -> dom BoolType -> JumpTarget blocks ctx -> JumpTarget blocks ctx -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), Maybe (PointAbstraction blocks dom ctx))) -> (forall blocks ctx tp. TypeRepr tp -> Reg ctx (MaybeType tp) -> dom (MaybeType tp) -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom tp, Maybe (PointAbstraction blocks dom ctx))) -> Interpretation ext (dom :: CrucibleType -> Type)
+ Lang.Crucible.Analysis.Fixpoint: Interpretation :: (forall (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType) (tp :: CrucibleType). () => ScopedReg -> TypeRepr tp -> Expr ext ctx tp -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom tp)) -> (forall (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType) (tp :: CrucibleType). () => ScopedReg -> StmtExtension ext (Reg ctx) tp -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom tp)) -> (forall (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType) (args :: Ctx CrucibleType) (ret :: CrucibleType). () => CtxRepr args -> TypeRepr ret -> Reg ctx (FunctionHandleType args ret) -> dom (FunctionHandleType args ret) -> Assignment dom args -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom ret)) -> (forall (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType) (tp :: CrucibleType). () => GlobalVar tp -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom tp)) -> (forall (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType) (tp :: CrucibleType). () => GlobalVar tp -> Reg ctx tp -> PointAbstraction blocks dom ctx -> Maybe (PointAbstraction blocks dom ctx)) -> (forall (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType). () => Reg ctx BoolType -> dom BoolType -> JumpTarget blocks ctx -> JumpTarget blocks ctx -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), Maybe (PointAbstraction blocks dom ctx))) -> (forall (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType) (tp :: CrucibleType). () => TypeRepr tp -> Reg ctx (MaybeType tp) -> dom (MaybeType tp) -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom tp, Maybe (PointAbstraction blocks dom ctx))) -> Interpretation ext (dom :: CrucibleType -> Type)
- Lang.Crucible.Analysis.Fixpoint: PointAbstraction :: MapF GlobalVar dom -> Assignment dom ctx -> MapF (RefStmtId blocks) dom -> Assignment (RefSet blocks) ctx -> PointAbstraction blocks dom ctx
+ Lang.Crucible.Analysis.Fixpoint: PointAbstraction :: MapF GlobalVar dom -> Assignment dom ctx -> MapF (RefStmtId blocks) dom -> Assignment (RefSet blocks) ctx -> PointAbstraction (blocks :: Ctx (Ctx CrucibleType)) (dom :: CrucibleType -> Type) (ctx :: Ctx CrucibleType)
- Lang.Crucible.Analysis.Fixpoint: [Bottom] :: Pointed dom tp
+ Lang.Crucible.Analysis.Fixpoint: [Bottom] :: forall (dom :: CrucibleType -> Type) (tp :: CrucibleType). Pointed dom tp
- Lang.Crucible.Analysis.Fixpoint: [Pointed] :: dom tp -> Pointed dom tp
+ Lang.Crucible.Analysis.Fixpoint: [Pointed] :: forall (dom :: CrucibleType -> Type) (tp :: CrucibleType). dom tp -> Pointed dom tp
- Lang.Crucible.Analysis.Fixpoint: [ScopedReg] :: BlockID blocks ctx1 -> Reg ctx2 tp -> ScopedReg
+ Lang.Crucible.Analysis.Fixpoint: [ScopedReg] :: forall (blocks :: Ctx (Ctx CrucibleType)) (ctx1 :: Ctx CrucibleType) (ctx2 :: Ctx CrucibleType) (tp :: CrucibleType). BlockID blocks ctx1 -> Reg ctx2 tp -> ScopedReg
- Lang.Crucible.Analysis.Fixpoint: [Top] :: Pointed a tp
+ Lang.Crucible.Analysis.Fixpoint: [Top] :: forall (dom :: CrucibleType -> Type) (tp :: CrucibleType). Pointed dom tp
- Lang.Crucible.Analysis.Fixpoint: [WTOWidening] :: (Int -> Bool) -> (forall tp. dom tp -> dom tp -> dom tp) -> IterationStrategy dom
+ Lang.Crucible.Analysis.Fixpoint: [WTOWidening] :: forall (dom :: CrucibleType -> Type). (Int -> Bool) -> (forall (tp :: CrucibleType). () => dom tp -> dom tp -> dom tp) -> IterationStrategy dom
- Lang.Crucible.Analysis.Fixpoint: [WTO] :: IterationStrategy dom
+ Lang.Crucible.Analysis.Fixpoint: [WTO] :: forall (dom :: CrucibleType -> Type). IterationStrategy dom
- Lang.Crucible.Analysis.Fixpoint: [Worklist] :: IterationStrategy dom
+ Lang.Crucible.Analysis.Fixpoint: [Worklist] :: forall (dom :: CrucibleType -> Type). IterationStrategy dom
- Lang.Crucible.Analysis.Fixpoint: [_paGlobals] :: PointAbstraction blocks dom ctx -> MapF GlobalVar dom
+ Lang.Crucible.Analysis.Fixpoint: [_paGlobals] :: PointAbstraction (blocks :: Ctx (Ctx CrucibleType)) (dom :: CrucibleType -> Type) (ctx :: Ctx CrucibleType) -> MapF GlobalVar dom
- Lang.Crucible.Analysis.Fixpoint: [_paRefs] :: PointAbstraction blocks dom ctx -> MapF (RefStmtId blocks) dom
+ Lang.Crucible.Analysis.Fixpoint: [_paRefs] :: PointAbstraction (blocks :: Ctx (Ctx CrucibleType)) (dom :: CrucibleType -> Type) (ctx :: Ctx CrucibleType) -> MapF (RefStmtId blocks) dom
- Lang.Crucible.Analysis.Fixpoint: [_paRegisterRefs] :: PointAbstraction blocks dom ctx -> Assignment (RefSet blocks) ctx
+ Lang.Crucible.Analysis.Fixpoint: [_paRegisterRefs] :: PointAbstraction (blocks :: Ctx (Ctx CrucibleType)) (dom :: CrucibleType -> Type) (ctx :: Ctx CrucibleType) -> Assignment (RefSet blocks) ctx
- Lang.Crucible.Analysis.Fixpoint: [_paRegisters] :: PointAbstraction blocks dom ctx -> Assignment dom ctx
+ Lang.Crucible.Analysis.Fixpoint: [_paRegisters] :: PointAbstraction (blocks :: Ctx (Ctx CrucibleType)) (dom :: CrucibleType -> Type) (ctx :: Ctx CrucibleType) -> Assignment dom ctx
- Lang.Crucible.Analysis.Fixpoint: [domBottom] :: Domain (dom :: CrucibleType -> Type) -> forall tp. dom tp
+ Lang.Crucible.Analysis.Fixpoint: [domBottom] :: Domain (dom :: CrucibleType -> Type) -> forall (tp :: CrucibleType). () => dom tp
- Lang.Crucible.Analysis.Fixpoint: [domEq] :: Domain (dom :: CrucibleType -> Type) -> forall tp. dom tp -> dom tp -> Bool
+ Lang.Crucible.Analysis.Fixpoint: [domEq] :: Domain (dom :: CrucibleType -> Type) -> forall (tp :: CrucibleType). () => dom tp -> dom tp -> Bool
- Lang.Crucible.Analysis.Fixpoint: [domJoin] :: Domain (dom :: CrucibleType -> Type) -> forall tp. dom tp -> dom tp -> dom tp
+ Lang.Crucible.Analysis.Fixpoint: [domJoin] :: Domain (dom :: CrucibleType -> Type) -> forall (tp :: CrucibleType). () => dom tp -> dom tp -> dom tp
- Lang.Crucible.Analysis.Fixpoint: [domTop] :: Domain (dom :: CrucibleType -> Type) -> forall tp. dom tp
+ Lang.Crucible.Analysis.Fixpoint: [domTop] :: Domain (dom :: CrucibleType -> Type) -> forall (tp :: CrucibleType). () => dom tp
- Lang.Crucible.Analysis.Fixpoint: [interpBr] :: Interpretation ext (dom :: CrucibleType -> Type) -> forall blocks ctx. Reg ctx BoolType -> dom BoolType -> JumpTarget blocks ctx -> JumpTarget blocks ctx -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), Maybe (PointAbstraction blocks dom ctx))
+ Lang.Crucible.Analysis.Fixpoint: [interpBr] :: Interpretation ext (dom :: CrucibleType -> Type) -> forall (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType). () => Reg ctx BoolType -> dom BoolType -> JumpTarget blocks ctx -> JumpTarget blocks ctx -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), Maybe (PointAbstraction blocks dom ctx))
- Lang.Crucible.Analysis.Fixpoint: [interpCall] :: Interpretation ext (dom :: CrucibleType -> Type) -> forall blocks ctx args ret. CtxRepr args -> TypeRepr ret -> Reg ctx (FunctionHandleType args ret) -> dom (FunctionHandleType args ret) -> Assignment dom args -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom ret)
+ Lang.Crucible.Analysis.Fixpoint: [interpCall] :: Interpretation ext (dom :: CrucibleType -> Type) -> forall (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType) (args :: Ctx CrucibleType) (ret :: CrucibleType). () => CtxRepr args -> TypeRepr ret -> Reg ctx (FunctionHandleType args ret) -> dom (FunctionHandleType args ret) -> Assignment dom args -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom ret)
- Lang.Crucible.Analysis.Fixpoint: [interpExpr] :: Interpretation ext (dom :: CrucibleType -> Type) -> forall blocks ctx tp. ScopedReg -> TypeRepr tp -> Expr ext ctx tp -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom tp)
+ Lang.Crucible.Analysis.Fixpoint: [interpExpr] :: Interpretation ext (dom :: CrucibleType -> Type) -> forall (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType) (tp :: CrucibleType). () => ScopedReg -> TypeRepr tp -> Expr ext ctx tp -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom tp)
- Lang.Crucible.Analysis.Fixpoint: [interpExt] :: Interpretation ext (dom :: CrucibleType -> Type) -> forall blocks ctx tp. ScopedReg -> StmtExtension ext (Reg ctx) tp -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom tp)
+ Lang.Crucible.Analysis.Fixpoint: [interpExt] :: Interpretation ext (dom :: CrucibleType -> Type) -> forall (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType) (tp :: CrucibleType). () => ScopedReg -> StmtExtension ext (Reg ctx) tp -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom tp)
- Lang.Crucible.Analysis.Fixpoint: [interpMaybe] :: Interpretation ext (dom :: CrucibleType -> Type) -> forall blocks ctx tp. TypeRepr tp -> Reg ctx (MaybeType tp) -> dom (MaybeType tp) -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom tp, Maybe (PointAbstraction blocks dom ctx))
+ Lang.Crucible.Analysis.Fixpoint: [interpMaybe] :: Interpretation ext (dom :: CrucibleType -> Type) -> forall (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType) (tp :: CrucibleType). () => TypeRepr tp -> Reg ctx (MaybeType tp) -> dom (MaybeType tp) -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom tp, Maybe (PointAbstraction blocks dom ctx))
- Lang.Crucible.Analysis.Fixpoint: [interpReadGlobal] :: Interpretation ext (dom :: CrucibleType -> Type) -> forall blocks ctx tp. GlobalVar tp -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom tp)
+ Lang.Crucible.Analysis.Fixpoint: [interpReadGlobal] :: Interpretation ext (dom :: CrucibleType -> Type) -> forall (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType) (tp :: CrucibleType). () => GlobalVar tp -> PointAbstraction blocks dom ctx -> (Maybe (PointAbstraction blocks dom ctx), dom tp)
- Lang.Crucible.Analysis.Fixpoint: [interpWriteGlobal] :: Interpretation ext (dom :: CrucibleType -> Type) -> forall blocks ctx tp. GlobalVar tp -> Reg ctx tp -> PointAbstraction blocks dom ctx -> Maybe (PointAbstraction blocks dom ctx)
+ Lang.Crucible.Analysis.Fixpoint: [interpWriteGlobal] :: Interpretation ext (dom :: CrucibleType -> Type) -> forall (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType) (tp :: CrucibleType). () => GlobalVar tp -> Reg ctx tp -> PointAbstraction blocks dom ctx -> Maybe (PointAbstraction blocks dom ctx)
- Lang.Crucible.Analysis.Fixpoint: cfgWeakTopologicalOrdering :: CFG ext blocks init ret -> [WTOComponent (Some (BlockID blocks))]
+ Lang.Crucible.Analysis.Fixpoint: cfgWeakTopologicalOrdering :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext blocks init ret -> [WTOComponent (Some (BlockID blocks))]
- Lang.Crucible.Analysis.Fixpoint: data PointAbstraction blocks dom ctx
+ Lang.Crucible.Analysis.Fixpoint: data PointAbstraction (blocks :: Ctx Ctx CrucibleType) (dom :: CrucibleType -> Type) (ctx :: Ctx CrucibleType)
- Lang.Crucible.Analysis.Fixpoint: data Pointed dom (tp :: CrucibleType)
+ Lang.Crucible.Analysis.Fixpoint: data Pointed (dom :: CrucibleType -> Type) (tp :: CrucibleType)
- Lang.Crucible.Analysis.Fixpoint: data RefSet blocks tp
+ Lang.Crucible.Analysis.Fixpoint: data RefSet (blocks :: Ctx Ctx CrucibleType) (tp :: CrucibleType)
- Lang.Crucible.Analysis.Fixpoint: emptyRefSet :: RefSet blocks tp
+ Lang.Crucible.Analysis.Fixpoint: emptyRefSet :: forall (blocks :: Ctx (Ctx CrucibleType)) (tp :: CrucibleType). RefSet blocks tp
- Lang.Crucible.Analysis.Fixpoint: forwardFixpoint :: forall ext dom blocks ret init. Domain dom -> Interpretation ext dom -> CFG ext blocks init ret -> MapF GlobalVar dom -> Assignment dom init -> (Assignment (PointAbstraction blocks dom) blocks, dom ret)
+ Lang.Crucible.Analysis.Fixpoint: forwardFixpoint :: forall ext dom (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (init :: Ctx CrucibleType). Domain dom -> Interpretation ext dom -> CFG ext blocks init ret -> MapF GlobalVar dom -> Assignment dom init -> (Assignment (PointAbstraction blocks dom) blocks, dom ret)
- Lang.Crucible.Analysis.Fixpoint: forwardFixpoint' :: forall ext dom blocks ret init. Domain dom -> Interpretation ext dom -> CFG ext blocks init ret -> MapF GlobalVar dom -> Assignment dom init -> (Assignment (PointAbstraction blocks dom) blocks, Assignment (Ignore (Some (PointAbstraction blocks dom))) blocks, dom ret)
+ Lang.Crucible.Analysis.Fixpoint: forwardFixpoint' :: forall ext dom (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (init :: Ctx CrucibleType). Domain dom -> Interpretation ext dom -> CFG ext blocks init ret -> MapF GlobalVar dom -> Assignment dom init -> (Assignment (PointAbstraction blocks dom) blocks, Assignment (Ignore (Some (PointAbstraction blocks dom)) :: Ctx CrucibleType -> Type) blocks, dom ret)
- Lang.Crucible.Analysis.Fixpoint: lookupAbstractRegValue :: PointAbstraction blocks dom ctx -> Reg ctx tp -> dom tp
+ Lang.Crucible.Analysis.Fixpoint: lookupAbstractRegValue :: forall (blocks :: Ctx (Ctx CrucibleType)) dom (ctx :: Ctx CrucibleType) (tp :: CrucibleType). PointAbstraction blocks dom ctx -> Reg ctx tp -> dom tp
- Lang.Crucible.Analysis.Fixpoint: lookupAbstractScopedRegValue :: ScopedReg -> Assignment (Ignore (Some (PointAbstraction blocks dom))) blocks -> Maybe (Some dom)
+ Lang.Crucible.Analysis.Fixpoint: lookupAbstractScopedRegValue :: forall (blocks :: Ctx (Ctx CrucibleType)) (dom :: CrucibleType -> Type). ScopedReg -> Assignment (Ignore (Some (PointAbstraction blocks dom)) :: Ctx CrucibleType -> Type) blocks -> Maybe (Some dom)
- Lang.Crucible.Analysis.Fixpoint: lookupAbstractScopedRegValueByIndex :: (Int, Int) -> Assignment (Ignore (Some (PointAbstraction blocks dom))) blocks -> Maybe (Some dom)
+ Lang.Crucible.Analysis.Fixpoint: lookupAbstractScopedRegValueByIndex :: forall (blocks :: Ctx (Ctx CrucibleType)) (dom :: CrucibleType -> Type). (Int, Int) -> Assignment (Ignore (Some (PointAbstraction blocks dom)) :: Ctx CrucibleType -> Type) blocks -> Maybe (Some dom)
- Lang.Crucible.Analysis.Fixpoint: modifyAbstractRegValue :: PointAbstraction blocks dom ctx -> Reg ctx tp -> (dom tp -> dom tp) -> PointAbstraction blocks dom ctx
+ Lang.Crucible.Analysis.Fixpoint: modifyAbstractRegValue :: forall (blocks :: Ctx (Ctx CrucibleType)) dom (ctx :: Ctx CrucibleType) (tp :: CrucibleType). PointAbstraction blocks dom ctx -> Reg ctx tp -> (dom tp -> dom tp) -> PointAbstraction blocks dom ctx
- Lang.Crucible.Analysis.Fixpoint: paGlobals :: Functor f => (MapF GlobalVar dom -> f (MapF GlobalVar dom)) -> PointAbstraction blocks dom ctx -> f (PointAbstraction blocks dom ctx)
+ Lang.Crucible.Analysis.Fixpoint: paGlobals :: forall f (dom :: CrucibleType -> Type) (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType). Functor f => (MapF GlobalVar dom -> f (MapF GlobalVar dom)) -> PointAbstraction blocks dom ctx -> f (PointAbstraction blocks dom ctx)
- Lang.Crucible.Analysis.Fixpoint: paRegisters :: Functor f => (Assignment dom ctx -> f (Assignment dom ctx)) -> PointAbstraction blocks dom ctx -> f (PointAbstraction blocks dom ctx)
+ Lang.Crucible.Analysis.Fixpoint: paRegisters :: forall f (dom :: CrucibleType -> Type) (ctx :: Ctx CrucibleType) (blocks :: Ctx (Ctx CrucibleType)). Functor f => (Assignment dom ctx -> f (Assignment dom ctx)) -> PointAbstraction blocks dom ctx -> f (PointAbstraction blocks dom ctx)
- Lang.Crucible.Analysis.Fixpoint: pointed :: (forall tp. dom tp -> dom tp -> Pointed dom tp) -> (forall tp. dom tp -> dom tp -> Bool) -> IterationStrategy (Pointed dom) -> Domain (Pointed dom)
+ Lang.Crucible.Analysis.Fixpoint: pointed :: (forall (tp :: CrucibleType). () => dom tp -> dom tp -> Pointed dom tp) -> (forall (tp :: CrucibleType). () => dom tp -> dom tp -> Bool) -> IterationStrategy (Pointed dom) -> Domain (Pointed dom)
- Lang.Crucible.Analysis.Fixpoint.Components: cfgStart :: CFG ext blocks init ret -> Some (BlockID blocks)
+ Lang.Crucible.Analysis.Fixpoint.Components: cfgStart :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext blocks init ret -> Some (BlockID blocks)
- Lang.Crucible.Analysis.Fixpoint.Components: cfgSuccessors :: CFG ext blocks init ret -> Some (BlockID blocks) -> [Some (BlockID blocks)]
+ Lang.Crucible.Analysis.Fixpoint.Components: cfgSuccessors :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext blocks init ret -> Some (BlockID blocks) -> [Some (BlockID blocks)]
- Lang.Crucible.Analysis.Fixpoint.Components: cfgWeakTopologicalOrdering :: CFG ext blocks init ret -> [WTOComponent (Some (BlockID blocks))]
+ Lang.Crucible.Analysis.Fixpoint.Components: cfgWeakTopologicalOrdering :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext blocks init ret -> [WTOComponent (Some (BlockID blocks))]
- Lang.Crucible.Analysis.ForwardDataflow: KP :: a tp -> c -> KildallPair (a :: k -> Type) (c :: Type) (tp :: k)
+ Lang.Crucible.Analysis.ForwardDataflow: KP :: a tp -> c -> KildallPair (a :: k -> Type) c (tp :: k)
- Lang.Crucible.Analysis.ForwardDataflow: KildallForward :: (forall tp. a tp -> a tp -> a tp) -> (forall tp. a tp) -> (c -> c -> c) -> c -> (forall tp. a tp -> a tp -> Bool) -> (c -> c -> Bool) -> (forall ctx. Reg ctx BoolType -> a BoolType -> c -> (c, c)) -> (forall ctx tp. TypeRepr tp -> Reg ctx (MaybeType tp) -> a (MaybeType tp) -> c -> (c, a tp, c)) -> !forall ctx tp. TypeRepr tp -> Reg ctx tp -> Assignment a ctx -> a tp -> !forall ctx tp. TypeRepr tp -> Expr ext ctx tp -> Assignment a ctx -> a tp -> (forall ctx args ret. CtxRepr args -> TypeRepr ret -> Reg ctx (FunctionHandleType args ret) -> a (FunctionHandleType args ret) -> Assignment a args -> a ret) -> (forall tp. GlobalVar tp -> a tp) -> (forall ctx. BlockID blocks ctx -> (Assignment a ctx, c) -> (Assignment a ctx, c)) -> KildallForward ext blocks (a :: CrucibleType -> Type) c
+ Lang.Crucible.Analysis.ForwardDataflow: KildallForward :: (forall (tp :: CrucibleType). () => a tp -> a tp -> a tp) -> (forall (tp :: CrucibleType). () => a tp) -> (c -> c -> c) -> c -> (forall (tp :: CrucibleType). () => a tp -> a tp -> Bool) -> (c -> c -> Bool) -> (forall (ctx :: Ctx CrucibleType). () => Reg ctx BoolType -> a BoolType -> c -> (c, c)) -> (forall (ctx :: Ctx CrucibleType) (tp :: CrucibleType). () => TypeRepr tp -> Reg ctx (MaybeType tp) -> a (MaybeType tp) -> c -> (c, a tp, c)) -> !forall (ctx :: Ctx CrucibleType) (tp :: CrucibleType). () => TypeRepr tp -> Reg ctx tp -> Assignment a ctx -> a tp -> !forall (ctx :: Ctx CrucibleType) (tp :: CrucibleType). () => TypeRepr tp -> Expr ext ctx tp -> Assignment a ctx -> a tp -> (forall (ctx :: Ctx CrucibleType) (args :: Ctx CrucibleType) (ret :: CrucibleType). () => CtxRepr args -> TypeRepr ret -> Reg ctx (FunctionHandleType args ret) -> a (FunctionHandleType args ret) -> Assignment a args -> a ret) -> (forall (tp :: CrucibleType). () => GlobalVar tp -> a tp) -> (forall (ctx :: Ctx CrucibleType). () => BlockID blocks ctx -> (Assignment a ctx, c) -> (Assignment a ctx, c)) -> KildallForward ext (blocks :: Ctx (Ctx CrucibleType)) (a :: CrucibleType -> Type) c
- Lang.Crucible.Analysis.ForwardDataflow: [kfwd_bot] :: KildallForward ext blocks (a :: CrucibleType -> Type) c -> forall tp. a tp
+ Lang.Crucible.Analysis.ForwardDataflow: [kfwd_bot] :: KildallForward ext (blocks :: Ctx (Ctx CrucibleType)) (a :: CrucibleType -> Type) c -> forall (tp :: CrucibleType). () => a tp
- Lang.Crucible.Analysis.ForwardDataflow: [kfwd_br] :: KildallForward ext blocks (a :: CrucibleType -> Type) c -> forall ctx. Reg ctx BoolType -> a BoolType -> c -> (c, c)
+ Lang.Crucible.Analysis.ForwardDataflow: [kfwd_br] :: KildallForward ext (blocks :: Ctx (Ctx CrucibleType)) (a :: CrucibleType -> Type) c -> forall (ctx :: Ctx CrucibleType). () => Reg ctx BoolType -> a BoolType -> c -> (c, c)
- Lang.Crucible.Analysis.ForwardDataflow: [kfwd_call] :: KildallForward ext blocks (a :: CrucibleType -> Type) c -> forall ctx args ret. CtxRepr args -> TypeRepr ret -> Reg ctx (FunctionHandleType args ret) -> a (FunctionHandleType args ret) -> Assignment a args -> a ret
+ Lang.Crucible.Analysis.ForwardDataflow: [kfwd_call] :: KildallForward ext (blocks :: Ctx (Ctx CrucibleType)) (a :: CrucibleType -> Type) c -> forall (ctx :: Ctx CrucibleType) (args :: Ctx CrucibleType) (ret :: CrucibleType). () => CtxRepr args -> TypeRepr ret -> Reg ctx (FunctionHandleType args ret) -> a (FunctionHandleType args ret) -> Assignment a args -> a ret
- Lang.Crucible.Analysis.ForwardDataflow: [kfwd_cbot] :: KildallForward ext blocks (a :: CrucibleType -> Type) c -> c
+ Lang.Crucible.Analysis.ForwardDataflow: [kfwd_cbot] :: KildallForward ext (blocks :: Ctx (Ctx CrucibleType)) (a :: CrucibleType -> Type) c -> c
- Lang.Crucible.Analysis.ForwardDataflow: [kfwd_club] :: KildallForward ext blocks (a :: CrucibleType -> Type) c -> c -> c -> c
+ Lang.Crucible.Analysis.ForwardDataflow: [kfwd_club] :: KildallForward ext (blocks :: Ctx (Ctx CrucibleType)) (a :: CrucibleType -> Type) c -> c -> c -> c
- Lang.Crucible.Analysis.ForwardDataflow: [kfwd_csame] :: KildallForward ext blocks (a :: CrucibleType -> Type) c -> c -> c -> Bool
+ Lang.Crucible.Analysis.ForwardDataflow: [kfwd_csame] :: KildallForward ext (blocks :: Ctx (Ctx CrucibleType)) (a :: CrucibleType -> Type) c -> c -> c -> Bool
- Lang.Crucible.Analysis.ForwardDataflow: [kfwd_expr] :: KildallForward ext blocks (a :: CrucibleType -> Type) c -> !forall ctx tp. TypeRepr tp -> Expr ext ctx tp -> Assignment a ctx -> a tp
+ Lang.Crucible.Analysis.ForwardDataflow: [kfwd_expr] :: KildallForward ext (blocks :: Ctx (Ctx CrucibleType)) (a :: CrucibleType -> Type) c -> !forall (ctx :: Ctx CrucibleType) (tp :: CrucibleType). () => TypeRepr tp -> Expr ext ctx tp -> Assignment a ctx -> a tp
- Lang.Crucible.Analysis.ForwardDataflow: [kfwd_lub] :: KildallForward ext blocks (a :: CrucibleType -> Type) c -> forall tp. a tp -> a tp -> a tp
+ Lang.Crucible.Analysis.ForwardDataflow: [kfwd_lub] :: KildallForward ext (blocks :: Ctx (Ctx CrucibleType)) (a :: CrucibleType -> Type) c -> forall (tp :: CrucibleType). () => a tp -> a tp -> a tp
- Lang.Crucible.Analysis.ForwardDataflow: [kfwd_maybe] :: KildallForward ext blocks (a :: CrucibleType -> Type) c -> forall ctx tp. TypeRepr tp -> Reg ctx (MaybeType tp) -> a (MaybeType tp) -> c -> (c, a tp, c)
+ Lang.Crucible.Analysis.ForwardDataflow: [kfwd_maybe] :: KildallForward ext (blocks :: Ctx (Ctx CrucibleType)) (a :: CrucibleType -> Type) c -> forall (ctx :: Ctx CrucibleType) (tp :: CrucibleType). () => TypeRepr tp -> Reg ctx (MaybeType tp) -> a (MaybeType tp) -> c -> (c, a tp, c)
- Lang.Crucible.Analysis.ForwardDataflow: [kfwd_onentry] :: KildallForward ext blocks (a :: CrucibleType -> Type) c -> forall ctx. BlockID blocks ctx -> (Assignment a ctx, c) -> (Assignment a ctx, c)
+ Lang.Crucible.Analysis.ForwardDataflow: [kfwd_onentry] :: KildallForward ext (blocks :: Ctx (Ctx CrucibleType)) (a :: CrucibleType -> Type) c -> forall (ctx :: Ctx CrucibleType). () => BlockID blocks ctx -> (Assignment a ctx, c) -> (Assignment a ctx, c)
- Lang.Crucible.Analysis.ForwardDataflow: [kfwd_rdglobal] :: KildallForward ext blocks (a :: CrucibleType -> Type) c -> forall tp. GlobalVar tp -> a tp
+ Lang.Crucible.Analysis.ForwardDataflow: [kfwd_rdglobal] :: KildallForward ext (blocks :: Ctx (Ctx CrucibleType)) (a :: CrucibleType -> Type) c -> forall (tp :: CrucibleType). () => GlobalVar tp -> a tp
- Lang.Crucible.Analysis.ForwardDataflow: [kfwd_reg] :: KildallForward ext blocks (a :: CrucibleType -> Type) c -> !forall ctx tp. TypeRepr tp -> Reg ctx tp -> Assignment a ctx -> a tp
+ Lang.Crucible.Analysis.ForwardDataflow: [kfwd_reg] :: KildallForward ext (blocks :: Ctx (Ctx CrucibleType)) (a :: CrucibleType -> Type) c -> !forall (ctx :: Ctx CrucibleType) (tp :: CrucibleType). () => TypeRepr tp -> Reg ctx tp -> Assignment a ctx -> a tp
- Lang.Crucible.Analysis.ForwardDataflow: [kfwd_same] :: KildallForward ext blocks (a :: CrucibleType -> Type) c -> forall tp. a tp -> a tp -> Bool
+ Lang.Crucible.Analysis.ForwardDataflow: [kfwd_same] :: KildallForward ext (blocks :: Ctx (Ctx CrucibleType)) (a :: CrucibleType -> Type) c -> forall (tp :: CrucibleType). () => a tp -> a tp -> Bool
- Lang.Crucible.Analysis.ForwardDataflow: data KildallForward ext blocks (a :: CrucibleType -> Type) c
+ Lang.Crucible.Analysis.ForwardDataflow: data KildallForward ext (blocks :: Ctx Ctx CrucibleType) (a :: CrucibleType -> Type) c
- Lang.Crucible.Analysis.ForwardDataflow: data KildallPair (a :: k -> Type) (c :: Type) (tp :: k)
+ Lang.Crucible.Analysis.ForwardDataflow: data KildallPair (a :: k -> Type) c (tp :: k)
- Lang.Crucible.Analysis.ForwardDataflow: kildall_forward :: forall ext a c blocks ret init. KildallForward ext blocks a c -> CFG ext blocks init ret -> (Assignment a init, c) -> (Assignment (KildallPair (Assignment a) c) blocks, a ret, c)
+ Lang.Crucible.Analysis.ForwardDataflow: kildall_forward :: forall ext a c (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (init :: Ctx CrucibleType). KildallForward ext blocks a c -> CFG ext blocks init ret -> (Assignment a init, c) -> (Assignment (KildallPair (Assignment a) c) blocks, a ret, c)
- Lang.Crucible.Analysis.ForwardDataflow: kildall_transfer :: forall ext a c blocks ret ctx. KildallForward ext blocks a c -> TypeRepr ret -> Block ext blocks ret ctx -> (Assignment a ctx, c) -> State (Assignment (KildallPair (Assignment a) c) blocks, a ret, c) (Set (Some (BlockID blocks)))
+ Lang.Crucible.Analysis.ForwardDataflow: kildall_transfer :: forall ext a c (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType). KildallForward ext blocks a c -> TypeRepr ret -> Block ext blocks ret ctx -> (Assignment a ctx, c) -> State (Assignment (KildallPair (Assignment a) c) blocks, a ret, c) (Set (Some (BlockID blocks)))
- Lang.Crucible.Analysis.ForwardDataflow: sym_call_transfer :: CtxRepr args -> TypeRepr ret -> Reg ctx (FunctionHandleType args ret) -> Ignore SymDom (FunctionHandleType args ret) -> Assignment a args -> Ignore SymDom ret
+ Lang.Crucible.Analysis.ForwardDataflow: sym_call_transfer :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType) (ctx :: Ctx CrucibleType) (a :: CrucibleType -> Type). CtxRepr args -> TypeRepr ret -> Reg ctx (FunctionHandleType args ret) -> Ignore SymDom (FunctionHandleType args ret) -> Assignment a args -> Ignore SymDom ret
- Lang.Crucible.Analysis.ForwardDataflow: sym_expr_transfer :: IsSyntaxExtension ext => Expr ext ctx tp -> Assignment (Ignore SymDom) ctx -> SymDom
+ Lang.Crucible.Analysis.ForwardDataflow: sym_expr_transfer :: forall ext (ctx :: Ctx CrucibleType) (tp :: CrucibleType). IsSyntaxExtension ext => Expr ext ctx tp -> Assignment (Ignore SymDom :: CrucibleType -> Type) ctx -> SymDom
- Lang.Crucible.Analysis.ForwardDataflow: sym_reg_transfer :: Reg ctx tp -> Assignment (Ignore SymDom) ctx -> SymDom
+ Lang.Crucible.Analysis.ForwardDataflow: sym_reg_transfer :: forall (ctx :: Ctx CrucibleType) (tp :: CrucibleType). Reg ctx tp -> Assignment (Ignore SymDom :: CrucibleType -> Type) ctx -> SymDom
- Lang.Crucible.Analysis.ForwardDataflow: symbolicAnalysis :: IsSyntaxExtension ext => KildallForward ext blocks (Ignore SymDom) SymDom
+ Lang.Crucible.Analysis.ForwardDataflow: symbolicAnalysis :: forall ext (blocks :: Ctx (Ctx CrucibleType)). IsSyntaxExtension ext => KildallForward ext blocks (Ignore SymDom :: CrucibleType -> Type) SymDom
- Lang.Crucible.Analysis.ForwardDataflow: symbolicResults :: IsSyntaxExtension ext => CFG ext blocks init ret -> String
+ Lang.Crucible.Analysis.ForwardDataflow: symbolicResults :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType). IsSyntaxExtension ext => CFG ext blocks init ret -> String
- Lang.Crucible.Analysis.Postdom: breakpointPostdomInfo :: CFG ext b i r -> [BreakpointName] -> CFGPostdom b
+ Lang.Crucible.Analysis.Postdom: breakpointPostdomInfo :: forall ext (b :: Ctx (Ctx CrucibleType)) (i :: Ctx CrucibleType) (r :: CrucibleType). CFG ext b i r -> [BreakpointName] -> CFGPostdom b
- Lang.Crucible.Analysis.Postdom: postdomInfo :: CFG ext b i r -> CFGPostdom b
+ Lang.Crucible.Analysis.Postdom: postdomInfo :: forall ext (b :: Ctx (Ctx CrucibleType)) (i :: Ctx CrucibleType) (r :: CrucibleType). CFG ext b i r -> CFGPostdom b
- Lang.Crucible.Analysis.Postdom: validatePostdom :: CFG ext blocks init ret -> CFGPostdom blocks -> [String]
+ Lang.Crucible.Analysis.Postdom: validatePostdom :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext blocks init ret -> CFGPostdom blocks -> [String]
- Lang.Crucible.Analysis.Reachable: reachableCFG :: CFG ext blocks init ret -> SomeCFG ext init ret
+ Lang.Crucible.Analysis.Reachable: reachableCFG :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext blocks init ret -> SomeCFG ext init ret
- Lang.Crucible.Backend: [CreateVariableEvent] :: ProgramLoc -> String -> BaseTypeRepr tp -> e tp -> CrucibleEvent e
+ Lang.Crucible.Backend: [CreateVariableEvent] :: forall (tp :: BaseType) (e :: BaseType -> Type). ProgramLoc -> String -> BaseTypeRepr tp -> e tp -> CrucibleEvent e
- Lang.Crucible.Backend: [LocationReachedEvent] :: ProgramLoc -> CrucibleEvent e
+ Lang.Crucible.Backend: [LocationReachedEvent] :: forall (e :: BaseType -> Type). ProgramLoc -> CrucibleEvent e
- Lang.Crucible.Backend: [ManyAssumptions] :: Seq (CrucibleAssumptions e) -> CrucibleAssumptions e
+ Lang.Crucible.Backend: [ManyAssumptions] :: forall (e :: BaseType -> Type). Seq (CrucibleAssumptions e) -> CrucibleAssumptions e
- Lang.Crucible.Backend: [MergeAssumptions] :: e BaseBoolType -> CrucibleAssumptions e -> CrucibleAssumptions e -> CrucibleAssumptions e
+ Lang.Crucible.Backend: [MergeAssumptions] :: forall (e :: BaseType -> Type). e BaseBoolType -> CrucibleAssumptions e -> CrucibleAssumptions e -> CrucibleAssumptions e
- Lang.Crucible.Backend: [SingleAssumption] :: CrucibleAssumption e -> CrucibleAssumptions e
+ Lang.Crucible.Backend: [SingleAssumption] :: forall (e :: BaseType -> Type). CrucibleAssumption e -> CrucibleAssumptions e
- Lang.Crucible.Backend: [SingleEvent] :: CrucibleEvent e -> CrucibleAssumptions e
+ Lang.Crucible.Backend: [SingleEvent] :: forall (e :: BaseType -> Type). CrucibleEvent e -> CrucibleAssumptions e
- Lang.Crucible.Backend: assumptionLoc :: CrucibleAssumption e -> ProgramLoc
+ Lang.Crucible.Backend: assumptionLoc :: forall (e :: BaseType -> Type). CrucibleAssumption e -> ProgramLoc
- Lang.Crucible.Backend: assumptionsTopLevelLocs :: CrucibleAssumptions e -> [ProgramLoc]
+ Lang.Crucible.Backend: assumptionsTopLevelLocs :: forall (e :: BaseType -> Type). CrucibleAssumptions e -> [ProgramLoc]
- Lang.Crucible.Backend: concretizeEvents :: IsExpr e => (forall tp. e tp -> IO (GroundValue tp)) -> CrucibleAssumptions e -> IO [CrucibleEvent GroundValueWrapper]
+ Lang.Crucible.Backend: concretizeEvents :: IsExpr e => (forall (tp :: BaseType). () => e tp -> IO (GroundValue tp)) -> CrucibleAssumptions e -> IO [CrucibleEvent GroundValueWrapper]
- Lang.Crucible.Backend: data () => LabeledPred pred msg
+ Lang.Crucible.Backend: data LabeledPred pred msg
- Lang.Crucible.Backend: eventLoc :: CrucibleEvent e -> ProgramLoc
+ Lang.Crucible.Backend: eventLoc :: forall (e :: BaseType -> Type). CrucibleEvent e -> ProgramLoc
- Lang.Crucible.Backend: forgetAssumption :: CrucibleAssumption e -> CrucibleAssumption (Const ())
+ Lang.Crucible.Backend: forgetAssumption :: forall (e :: BaseType -> Type). CrucibleAssumption e -> CrucibleAssumption (Const () :: BaseType -> Type)
- Lang.Crucible.Backend: impossibleAssumption :: IsExpr e => CrucibleAssumption e -> Maybe AbortExecReason
+ Lang.Crucible.Backend: impossibleAssumption :: forall (e :: BaseType -> Type). IsExpr e => CrucibleAssumption e -> Maybe AbortExecReason
- Lang.Crucible.Backend: ppAssumption :: (forall tp. e tp -> Doc ann) -> CrucibleAssumption e -> Doc ann
+ Lang.Crucible.Backend: ppAssumption :: (forall (tp :: BaseType). () => e tp -> Doc ann) -> CrucibleAssumption e -> Doc ann
- Lang.Crucible.Backend: ppEvent :: IsExpr e => CrucibleEvent e -> Doc ann
+ Lang.Crucible.Backend: ppEvent :: forall (e :: BaseType -> Type) ann. IsExpr e => CrucibleEvent e -> Doc ann
- Lang.Crucible.Backend: runCHC :: (IsSymBackend sym bak, sym ~ ExprBuilder t st fs, MonadIO m) => bak -> [SomeSymFn sym] -> m (MapF (SymFnWrapper sym) (SymFnWrapper sym))
+ Lang.Crucible.Backend: runCHC :: forall sym bak t (st :: Type -> Type) fs m. (IsSymBackend sym bak, sym ~ ExprBuilder t st fs, MonadIO m) => bak -> [SomeSymFn sym] -> m (MapF (SymFnWrapper sym) (SymFnWrapper sym))
- Lang.Crucible.Backend: singleAssumption :: CrucibleAssumption e -> CrucibleAssumptions e
+ Lang.Crucible.Backend: singleAssumption :: forall (e :: BaseType -> Type). CrucibleAssumption e -> CrucibleAssumptions e
- Lang.Crucible.Backend: singleEvent :: CrucibleEvent e -> CrucibleAssumptions e
+ Lang.Crucible.Backend: singleEvent :: forall (e :: BaseType -> Type). CrucibleEvent e -> CrucibleAssumptions e
- Lang.Crucible.Backend: trivialAssumption :: IsExpr e => CrucibleAssumption e -> Bool
+ Lang.Crucible.Backend: trivialAssumption :: forall (e :: BaseType -> Type). IsExpr e => CrucibleAssumption e -> Bool
- Lang.Crucible.Backend: type Assertion sym = LabeledPred (Pred sym) SimError
+ Lang.Crucible.Backend: type Assertion sym = LabeledPred Pred sym SimError
- Lang.Crucible.Backend: type Assumption sym = CrucibleAssumption (SymExpr sym)
+ Lang.Crucible.Backend: type Assumption sym = CrucibleAssumption SymExpr sym
- Lang.Crucible.Backend: type AssumptionState sym = GoalCollector (Assumptions sym) (Assertion sym)
+ Lang.Crucible.Backend: type AssumptionState sym = GoalCollector Assumptions sym Assertion sym
- Lang.Crucible.Backend: type Assumptions sym = CrucibleAssumptions (SymExpr sym)
+ Lang.Crucible.Backend: type Assumptions sym = CrucibleAssumptions SymExpr sym
- Lang.Crucible.Backend: type ProofObligation sym = ProofGoal (Assumptions sym) (Assertion sym)
+ Lang.Crucible.Backend: type ProofObligation sym = ProofGoal Assumptions sym Assertion sym
- Lang.Crucible.Backend: type ProofObligations sym = Maybe (Goals (Assumptions sym) (Assertion sym))
+ Lang.Crucible.Backend: type ProofObligations sym = Maybe Goals Assumptions sym Assertion sym
- Lang.Crucible.Backend.Goals: traverseGoals :: (Applicative f, Monoid asmp') => (forall a. asmp -> f a -> f (asmp', a)) -> (goal -> f (Maybe goal')) -> Goals asmp goal -> f (Maybe (Goals asmp' goal'))
+ Lang.Crucible.Backend.Goals: traverseGoals :: (Applicative f, Monoid asmp') => (forall a. () => asmp -> f a -> f (asmp', a)) -> (goal -> f (Maybe goal')) -> Goals asmp goal -> f (Maybe (Goals asmp' goal'))
- Lang.Crucible.Backend.Goals: traverseGoalsSeq :: (Applicative f, Monoid asmp') => (forall a. asmp -> f a -> f (asmp', a)) -> (goal -> f (Maybe goal')) -> Seq (Goals asmp goal) -> f (Seq (Goals asmp' goal'))
+ Lang.Crucible.Backend.Goals: traverseGoalsSeq :: (Applicative f, Monoid asmp') => (forall a. () => asmp -> f a -> f (asmp', a)) -> (goal -> f (Maybe goal')) -> Seq (Goals asmp goal) -> f (Seq (Goals asmp' goal'))
- Lang.Crucible.Backend.Online: considerSatisfiability :: OnlineSolver solver => OnlineBackend solver scope st fs -> Maybe ProgramLoc -> BoolExpr scope -> IO BranchResult
+ Lang.Crucible.Backend.Online: considerSatisfiability :: forall solver scope (st :: Type -> Type) fs. OnlineSolver solver => OnlineBackend solver scope st fs -> Maybe ProgramLoc -> BoolExpr scope -> IO BranchResult
- Lang.Crucible.Backend.Online: data OnlineBackend solver scope st fs
+ Lang.Crucible.Backend.Online: data OnlineBackend solver scope (st :: Type -> Type) fs
- Lang.Crucible.Backend.Online: newOnlineBackend :: OnlineSolver solver => ExprBuilder scope st fs -> ProblemFeatures -> IO (OnlineBackend solver scope st fs)
+ Lang.Crucible.Backend.Online: newOnlineBackend :: forall solver scope (st :: Type -> Type) fs. OnlineSolver solver => ExprBuilder scope st fs -> ProblemFeatures -> IO (OnlineBackend solver scope st fs)
- Lang.Crucible.Backend.Online: onlineBackendOptions :: OnlineSolver solver => OnlineBackend solver scope st fs -> [ConfigDesc]
+ Lang.Crucible.Backend.Online: onlineBackendOptions :: forall solver scope (st :: Type -> Type) fs. OnlineSolver solver => OnlineBackend solver scope st fs -> [ConfigDesc]
- Lang.Crucible.Backend.Online: resetSolverProcess :: OnlineSolver solver => OnlineBackend solver scope st fs -> IO ()
+ Lang.Crucible.Backend.Online: resetSolverProcess :: forall solver scope (st :: Type -> Type) fs. OnlineSolver solver => OnlineBackend solver scope st fs -> IO ()
- Lang.Crucible.Backend.Online: restoreSolverState :: OnlineSolver solver => OnlineBackend solver scope st fs -> GoalCollector (CrucibleAssumptions (Expr scope)) (LabeledPred (BoolExpr scope) SimError) -> IO ()
+ Lang.Crucible.Backend.Online: restoreSolverState :: forall solver scope (st :: Type -> Type) fs. OnlineSolver solver => OnlineBackend solver scope st fs -> GoalCollector (CrucibleAssumptions (Expr scope)) (LabeledPred (BoolExpr scope) SimError) -> IO ()
- Lang.Crucible.Backend.Online: type BitwuzlaOnlineBackend scope st fs = OnlineBackend (Writer Bitwuzla) scope st fs
+ Lang.Crucible.Backend.Online: type BitwuzlaOnlineBackend scope (st :: Type -> Type) fs = OnlineBackend Writer Bitwuzla scope st fs
- Lang.Crucible.Backend.Online: type BoolectorOnlineBackend scope st fs = OnlineBackend (Writer Boolector) scope st fs
+ Lang.Crucible.Backend.Online: type BoolectorOnlineBackend scope (st :: Type -> Type) fs = OnlineBackend Writer Boolector scope st fs
- Lang.Crucible.Backend.Online: type CVC4OnlineBackend scope st fs = OnlineBackend (Writer CVC4) scope st fs
+ Lang.Crucible.Backend.Online: type CVC4OnlineBackend scope (st :: Type -> Type) fs = OnlineBackend Writer CVC4 scope st fs
- Lang.Crucible.Backend.Online: type CVC5OnlineBackend scope st fs = OnlineBackend (Writer CVC5) scope st fs
+ Lang.Crucible.Backend.Online: type CVC5OnlineBackend scope (st :: Type -> Type) fs = OnlineBackend Writer CVC5 scope st fs
- Lang.Crucible.Backend.Online: type STPOnlineBackend scope st fs = OnlineBackend (Writer STP) scope st fs
+ Lang.Crucible.Backend.Online: type STPOnlineBackend scope (st :: Type -> Type) fs = OnlineBackend Writer STP scope st fs
- Lang.Crucible.Backend.Online: type YicesOnlineBackend scope st fs = OnlineBackend Connection scope st fs
+ Lang.Crucible.Backend.Online: type YicesOnlineBackend scope (st :: Type -> Type) fs = OnlineBackend Connection scope st fs
- Lang.Crucible.Backend.Online: type Z3OnlineBackend scope st fs = OnlineBackend (Writer Z3) scope st fs
+ Lang.Crucible.Backend.Online: type Z3OnlineBackend scope (st :: Type -> Type) fs = OnlineBackend Writer Z3 scope st fs
- Lang.Crucible.Backend.Online: withBitwuzlaOnlineBackend :: (MonadIO m, MonadMask m) => ExprBuilder scope st fs -> UnsatFeatures -> ProblemFeatures -> (BitwuzlaOnlineBackend scope st fs -> m a) -> m a
+ Lang.Crucible.Backend.Online: withBitwuzlaOnlineBackend :: forall m scope (st :: Type -> Type) fs a. (MonadIO m, MonadMask m) => ExprBuilder scope st fs -> UnsatFeatures -> ProblemFeatures -> (BitwuzlaOnlineBackend scope st fs -> m a) -> m a
- Lang.Crucible.Backend.Online: withBoolectorOnlineBackend :: (MonadIO m, MonadMask m) => ExprBuilder scope st fs -> UnsatFeatures -> (BoolectorOnlineBackend scope st fs -> m a) -> m a
+ Lang.Crucible.Backend.Online: withBoolectorOnlineBackend :: forall m scope (st :: Type -> Type) fs a. (MonadIO m, MonadMask m) => ExprBuilder scope st fs -> UnsatFeatures -> (BoolectorOnlineBackend scope st fs -> m a) -> m a
- Lang.Crucible.Backend.Online: withCVC4OnlineBackend :: (MonadIO m, MonadMask m) => ExprBuilder scope st fs -> UnsatFeatures -> ProblemFeatures -> (CVC4OnlineBackend scope st fs -> m a) -> m a
+ Lang.Crucible.Backend.Online: withCVC4OnlineBackend :: forall m scope (st :: Type -> Type) fs a. (MonadIO m, MonadMask m) => ExprBuilder scope st fs -> UnsatFeatures -> ProblemFeatures -> (CVC4OnlineBackend scope st fs -> m a) -> m a
- Lang.Crucible.Backend.Online: withCVC5OnlineBackend :: (MonadIO m, MonadMask m) => ExprBuilder scope st fs -> UnsatFeatures -> ProblemFeatures -> (CVC5OnlineBackend scope st fs -> m a) -> m a
+ Lang.Crucible.Backend.Online: withCVC5OnlineBackend :: forall m scope (st :: Type -> Type) fs a. (MonadIO m, MonadMask m) => ExprBuilder scope st fs -> UnsatFeatures -> ProblemFeatures -> (CVC5OnlineBackend scope st fs -> m a) -> m a
- Lang.Crucible.Backend.Online: withOnlineBackend :: (OnlineSolver solver, MonadIO m, MonadMask m) => ExprBuilder scope st fs -> ProblemFeatures -> (OnlineBackend solver scope st fs -> m a) -> m a
+ Lang.Crucible.Backend.Online: withOnlineBackend :: forall solver m scope (st :: Type -> Type) fs a. (OnlineSolver solver, MonadIO m, MonadMask m) => ExprBuilder scope st fs -> ProblemFeatures -> (OnlineBackend solver scope st fs -> m a) -> m a
- Lang.Crucible.Backend.Online: withSTPOnlineBackend :: (MonadIO m, MonadMask m) => ExprBuilder scope st fs -> (STPOnlineBackend scope st fs -> m a) -> m a
+ Lang.Crucible.Backend.Online: withSTPOnlineBackend :: forall m scope (st :: Type -> Type) fs a. (MonadIO m, MonadMask m) => ExprBuilder scope st fs -> (STPOnlineBackend scope st fs -> m a) -> m a
- Lang.Crucible.Backend.Online: withSolverProcess :: OnlineSolver solver => OnlineBackend solver scope st fs -> IO a -> (SolverProcess scope solver -> IO a) -> IO a
+ Lang.Crucible.Backend.Online: withSolverProcess :: forall solver scope (st :: Type -> Type) fs a. OnlineSolver solver => OnlineBackend solver scope st fs -> IO a -> (SolverProcess scope solver -> IO a) -> IO a
- Lang.Crucible.Backend.Online: withYicesOnlineBackend :: (MonadIO m, MonadMask m) => ExprBuilder scope st fs -> UnsatFeatures -> ProblemFeatures -> (YicesOnlineBackend scope st fs -> m a) -> m a
+ Lang.Crucible.Backend.Online: withYicesOnlineBackend :: forall m scope (st :: Type -> Type) fs a. (MonadIO m, MonadMask m) => ExprBuilder scope st fs -> UnsatFeatures -> ProblemFeatures -> (YicesOnlineBackend scope st fs -> m a) -> m a
- Lang.Crucible.Backend.Online: withZ3OnlineBackend :: (MonadIO m, MonadMask m) => ExprBuilder scope st fs -> UnsatFeatures -> ProblemFeatures -> (Z3OnlineBackend scope st fs -> m a) -> m a
+ Lang.Crucible.Backend.Online: withZ3OnlineBackend :: forall m scope (st :: Type -> Type) fs a. (MonadIO m, MonadMask m) => ExprBuilder scope st fs -> UnsatFeatures -> ProblemFeatures -> (Z3OnlineBackend scope st fs -> m a) -> m a
- Lang.Crucible.Backend.ProofGoals: gcFrames :: forall asmp goal. Monoid asmp => GoalCollector asmp goal -> AssumptionFrames asmp
+ Lang.Crucible.Backend.ProofGoals: gcFrames :: Monoid asmp => GoalCollector asmp goal -> AssumptionFrames asmp
- Lang.Crucible.Backend.ProofGoals: traverseGoalCollector :: (Applicative f, Monoid asmp') => (forall a. asmp -> f a -> f (asmp', a)) -> (goal -> f (Maybe goal')) -> GoalCollector asmp goal -> f (GoalCollector asmp' goal')
+ Lang.Crucible.Backend.ProofGoals: traverseGoalCollector :: (Applicative f, Monoid asmp') => (forall a. () => asmp -> f a -> f (asmp', a)) -> (goal -> f (Maybe goal')) -> GoalCollector asmp goal -> f (GoalCollector asmp' goal')
- Lang.Crucible.Backend.ProofGoals: traverseGoals :: (Applicative f, Monoid asmp') => (forall a. asmp -> f a -> f (asmp', a)) -> (goal -> f (Maybe goal')) -> Goals asmp goal -> f (Maybe (Goals asmp' goal'))
+ Lang.Crucible.Backend.ProofGoals: traverseGoals :: (Applicative f, Monoid asmp') => (forall a. () => asmp -> f a -> f (asmp', a)) -> (goal -> f (Maybe goal')) -> Goals asmp goal -> f (Maybe (Goals asmp' goal'))
- Lang.Crucible.Backend.ProofGoals: traverseGoalsSeq :: (Applicative f, Monoid asmp') => (forall a. asmp -> f a -> f (asmp', a)) -> (goal -> f (Maybe goal')) -> Seq (Goals asmp goal) -> f (Seq (Goals asmp' goal'))
+ Lang.Crucible.Backend.ProofGoals: traverseGoalsSeq :: (Applicative f, Monoid asmp') => (forall a. () => asmp -> f a -> f (asmp', a)) -> (goal -> f (Maybe goal')) -> Seq (Goals asmp goal) -> f (Seq (Goals asmp' goal'))
- Lang.Crucible.Backend.Prove: Combiner :: (m (SubgoalResult r) -> m (SubgoalResult r) -> m (SubgoalResult r)) -> Combiner m r
+ Lang.Crucible.Backend.Prove: Combiner :: (m (SubgoalResult r) -> m (SubgoalResult r) -> m (SubgoalResult r)) -> Combiner (m :: Type -> Type) r
- Lang.Crucible.Backend.Prove: ProofStrategy :: {-# UNPACK #-} !Prover sym m t r -> Combiner m r -> ProofStrategy sym m t r
+ Lang.Crucible.Backend.Prove: ProofStrategy :: {-# UNPACK #-} !Prover sym m t r -> Combiner m r -> ProofStrategy sym (m :: Type -> Type) t r
- Lang.Crucible.Backend.Prove: Prover :: (Assumptions sym -> Assertion sym -> ProofConsumer sym t r -> m (SubgoalResult r)) -> (Assumptions sym -> m (SubgoalResult r) -> m (SubgoalResult r)) -> Prover sym m t r
+ Lang.Crucible.Backend.Prove: Prover :: (Assumptions sym -> Assertion sym -> ProofConsumer sym t r -> m (SubgoalResult r)) -> (Assumptions sym -> m (SubgoalResult r) -> m (SubgoalResult r)) -> Prover sym (m :: Type -> Type) t r
- Lang.Crucible.Backend.Prove: [getCombiner] :: Combiner m r -> m (SubgoalResult r) -> m (SubgoalResult r) -> m (SubgoalResult r)
+ Lang.Crucible.Backend.Prove: [getCombiner] :: Combiner (m :: Type -> Type) r -> m (SubgoalResult r) -> m (SubgoalResult r) -> m (SubgoalResult r)
- Lang.Crucible.Backend.Prove: [proverAssume] :: Prover sym m t r -> Assumptions sym -> m (SubgoalResult r) -> m (SubgoalResult r)
+ Lang.Crucible.Backend.Prove: [proverAssume] :: Prover sym (m :: Type -> Type) t r -> Assumptions sym -> m (SubgoalResult r) -> m (SubgoalResult r)
- Lang.Crucible.Backend.Prove: [proverProve] :: Prover sym m t r -> Assumptions sym -> Assertion sym -> ProofConsumer sym t r -> m (SubgoalResult r)
+ Lang.Crucible.Backend.Prove: [proverProve] :: Prover sym (m :: Type -> Type) t r -> Assumptions sym -> Assertion sym -> ProofConsumer sym t r -> m (SubgoalResult r)
- Lang.Crucible.Backend.Prove: [stratCombine] :: ProofStrategy sym m t r -> Combiner m r
+ Lang.Crucible.Backend.Prove: [stratCombine] :: ProofStrategy sym (m :: Type -> Type) t r -> Combiner m r
- Lang.Crucible.Backend.Prove: [stratProver] :: ProofStrategy sym m t r -> {-# UNPACK #-} !Prover sym m t r
+ Lang.Crucible.Backend.Prove: [stratProver] :: ProofStrategy sym (m :: Type -> Type) t r -> {-# UNPACK #-} !Prover sym m t r
- Lang.Crucible.Backend.Prove: data ProofStrategy sym m t r
+ Lang.Crucible.Backend.Prove: data ProofStrategy sym (m :: Type -> Type) t r
- Lang.Crucible.Backend.Prove: data Prover sym m t r
+ Lang.Crucible.Backend.Prove: data Prover sym (m :: Type -> Type) t r
- Lang.Crucible.Backend.Prove: failFast :: Monad m => Semigroup r => Combiner m r
+ Lang.Crucible.Backend.Prove: failFast :: forall (m :: Type -> Type) r. (Monad m, Semigroup r) => Combiner m r
- Lang.Crucible.Backend.Prove: keepGoing :: Monad m => Semigroup r => Combiner m r
+ Lang.Crucible.Backend.Prove: keepGoing :: forall (m :: Type -> Type) r. (Monad m, Semigroup r) => Combiner m r
- Lang.Crucible.Backend.Prove: newtype Combiner m r
+ Lang.Crucible.Backend.Prove: newtype Combiner (m :: Type -> Type) r
- Lang.Crucible.Backend.Prove: offlineProve :: MonadIO m => sym ~ ExprBuilder t st fs => IsSymExprBuilder sym => sym -> LogData -> SolverAdapter st -> Assumptions sym -> Assertion sym -> ProofConsumer sym t r -> m (SubgoalResult r)
+ Lang.Crucible.Backend.Prove: offlineProve :: forall m sym t (st :: Type -> Type) fs r. (MonadIO m, sym ~ ExprBuilder t st fs, IsSymExprBuilder sym) => sym -> LogData -> SolverAdapter st -> Assumptions sym -> Assertion sym -> ProofConsumer sym t r -> m (SubgoalResult r)
- Lang.Crucible.Backend.Prove: offlineProveWithTimeout :: MonadError TimedOut m => MonadIO m => sym ~ ExprBuilder t st fs => IsSymExprBuilder sym => Timeout -> sym -> LogData -> SolverAdapter st -> Assumptions sym -> Assertion sym -> ProofConsumer sym t r -> m (SubgoalResult r)
+ Lang.Crucible.Backend.Prove: offlineProveWithTimeout :: forall m sym t (st :: Type -> Type) fs r. (MonadError TimedOut m, MonadIO m, sym ~ ExprBuilder t st fs, IsSymExprBuilder sym) => Timeout -> sym -> LogData -> SolverAdapter st -> Assumptions sym -> Assertion sym -> ProofConsumer sym t r -> m (SubgoalResult r)
- Lang.Crucible.Backend.Prove: offlineProver :: MonadError TimedOut m => MonadIO m => sym ~ ExprBuilder t st fs => Timeout -> IsSymExprBuilder sym => sym -> LogData -> SolverAdapter st -> Prover sym m t r
+ Lang.Crucible.Backend.Prove: offlineProver :: forall (m :: Type -> Type) sym t (st :: Type -> Type) fs r. (MonadError TimedOut m, MonadIO m, sym ~ ExprBuilder t st fs) => Timeout -> IsSymExprBuilder sym => sym -> LogData -> SolverAdapter st -> Prover sym m t r
- Lang.Crucible.Backend.Prove: onlineProve :: MonadIO m => SMTReadWriter solver => sym ~ ExprBuilder t st fs => IsSymExprBuilder sym => SolverProcess t solver -> Assumptions sym -> Assertion sym -> ProofConsumer sym t r -> m (SubgoalResult r)
+ Lang.Crucible.Backend.Prove: onlineProve :: forall m solver sym t (st :: Type -> Type) fs r. (MonadIO m, SMTReadWriter solver, sym ~ ExprBuilder t st fs, IsSymExprBuilder sym) => SolverProcess t solver -> Assumptions sym -> Assertion sym -> ProofConsumer sym t r -> m (SubgoalResult r)
- Lang.Crucible.Backend.Prove: onlineProver :: MonadIO m => MonadMask m => SMTReadWriter solver => sym ~ ExprBuilder t st fs => IsSymExprBuilder sym => sym -> SolverProcess t solver -> Prover sym m t r
+ Lang.Crucible.Backend.Prove: onlineProver :: forall (m :: Type -> Type) solver sym t (st :: Type -> Type) fs r. (MonadIO m, MonadMask m, SMTReadWriter solver, sym ~ ExprBuilder t st fs, IsSymExprBuilder sym) => sym -> SolverProcess t solver -> Prover sym m t r
- Lang.Crucible.Backend.Prove: proveCurrentObligations :: MonadIO m => Monoid r => sym ~ ExprBuilder t st fs => IsSymBackend sym bak => bak -> ProofStrategy sym m t r -> ProofConsumer sym t r -> m r
+ Lang.Crucible.Backend.Prove: proveCurrentObligations :: forall m r sym t (st :: Type -> Type) fs bak. (MonadIO m, Monoid r, sym ~ ExprBuilder t st fs, IsSymBackend sym bak) => bak -> ProofStrategy sym m t r -> ProofConsumer sym t r -> m r
- Lang.Crucible.Backend.Prove: proveObligations :: Applicative m => Monoid r => sym ~ ExprBuilder t st fs => ProofStrategy sym m t r -> ProofObligations sym -> ProofConsumer sym t r -> m r
+ Lang.Crucible.Backend.Prove: proveObligations :: forall m r sym t (st :: Type -> Type) fs. (Applicative m, Monoid r, sym ~ ExprBuilder t st fs) => ProofStrategy sym m t r -> ProofObligations sym -> ProofConsumer sym t r -> m r
- Lang.Crucible.Backend.Simple: data () => Flags (fi :: FloatMode)
+ Lang.Crucible.Backend.Simple: data Flags (fi :: FloatMode)
- Lang.Crucible.Backend.Simple: data () => FloatMode
+ Lang.Crucible.Backend.Simple: data FloatMode
- Lang.Crucible.Backend.Simple: data () => FloatModeRepr (a :: FloatMode)
+ Lang.Crucible.Backend.Simple: data FloatModeRepr (a :: FloatMode)
- Lang.Crucible.Backend.Simple: data SimpleBackend t st fs
+ Lang.Crucible.Backend.Simple: data SimpleBackend t (st :: Type -> Type) fs
- Lang.Crucible.Backend.Simple: newSimpleBackend :: ExprBuilder t st fs -> IO (SimpleBackend t st fs)
+ Lang.Crucible.Backend.Simple: newSimpleBackend :: forall t (st :: Type -> Type) fs. ExprBuilder t st fs -> IO (SimpleBackend t st fs)
- Lang.Crucible.CFG.Common: freshGlobalVar :: HandleAllocator -> Text -> TypeRepr tp -> IO (GlobalVar tp)
+ Lang.Crucible.CFG.Common: freshGlobalVar :: forall (tp :: CrucibleType). HandleAllocator -> Text -> TypeRepr tp -> IO (GlobalVar tp)
- Lang.Crucible.CFG.Core: Block :: !BlockID blocks ctx -> !CtxRepr ctx -> !StmtSeq ext blocks ret ctx -> Block ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) ctx
+ Lang.Crucible.CFG.Core: Block :: !BlockID blocks ctx -> !CtxRepr ctx -> !StmtSeq ext blocks ret ctx -> Block ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType)
- Lang.Crucible.CFG.Core: CFG :: FnHandle init ret -> !BlockMap ext blocks ret -> !BlockID blocks init -> !Bimap BreakpointName (Some (BlockID blocks)) -> CFG (ext :: Type) (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType)
+ Lang.Crucible.CFG.Core: CFG :: FnHandle init ret -> !BlockMap ext blocks ret -> !BlockID blocks init -> !Bimap BreakpointName (Some (BlockID blocks)) -> CFG ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType)
- Lang.Crucible.CFG.Core: [AnyCFG] :: CFG ext blocks init ret -> AnyCFG ext
+ Lang.Crucible.CFG.Core: [AnyCFG] :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext blocks init ret -> AnyCFG ext
- Lang.Crucible.CFG.Core: [Assert] :: !Reg ctx BoolType -> !Reg ctx (StringType Unicode) -> Stmt ext ctx ctx
+ Lang.Crucible.CFG.Core: [Assert] :: forall (ctx :: Ctx CrucibleType) ext. !Reg ctx BoolType -> !Reg ctx (StringType Unicode) -> Stmt ext ctx ctx
- Lang.Crucible.CFG.Core: [Assume] :: !Reg ctx BoolType -> !Reg ctx (StringType Unicode) -> Stmt ext ctx ctx
+ Lang.Crucible.CFG.Core: [Assume] :: forall (ctx :: Ctx CrucibleType) ext. !Reg ctx BoolType -> !Reg ctx (StringType Unicode) -> Stmt ext ctx ctx
- Lang.Crucible.CFG.Core: [Br] :: !Reg ctx BoolType -> !JumpTarget blocks ctx -> !JumpTarget blocks ctx -> TermStmt blocks ret ctx
+ Lang.Crucible.CFG.Core: [Br] :: forall (ctx :: Ctx CrucibleType) (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType). !Reg ctx BoolType -> !JumpTarget blocks ctx -> !JumpTarget blocks ctx -> TermStmt blocks ret ctx
- Lang.Crucible.CFG.Core: [CallHandle] :: !TypeRepr ret -> !Reg ctx (FunctionHandleType args ret) -> !CtxRepr args -> !Assignment (Reg ctx) args -> Stmt ext ctx (ctx ::> ret)
+ Lang.Crucible.CFG.Core: [CallHandle] :: forall (ret :: CrucibleType) (ctx :: Ctx CrucibleType) (args :: Ctx CrucibleType) ext. !TypeRepr ret -> !Reg ctx (FunctionHandleType args ret) -> !CtxRepr args -> !Assignment (Reg ctx) args -> Stmt ext ctx (ctx '::> ret)
- Lang.Crucible.CFG.Core: [ConsStmt] :: !ProgramLoc -> !Stmt ext ctx ctx' -> !StmtSeq ext blocks ret ctx' -> StmtSeq ext blocks ret ctx
+ Lang.Crucible.CFG.Core: [ConsStmt] :: forall ext (ctx :: Ctx CrucibleType) (ctx' :: Ctx CrucibleType) (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType). !ProgramLoc -> !Stmt ext ctx ctx' -> !StmtSeq ext blocks ret ctx' -> StmtSeq ext blocks ret ctx
- Lang.Crucible.CFG.Core: [DropRefCell] :: !Reg ctx (ReferenceType tp) -> Stmt ext ctx ctx
+ Lang.Crucible.CFG.Core: [DropRefCell] :: forall (ctx :: Ctx CrucibleType) (tp :: CrucibleType) ext. !Reg ctx (ReferenceType tp) -> Stmt ext ctx ctx
- Lang.Crucible.CFG.Core: [ErrorStmt] :: !Reg ctx (StringType Unicode) -> TermStmt blocks ret ctx
+ Lang.Crucible.CFG.Core: [ErrorStmt] :: forall (ctx :: Ctx CrucibleType) (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType). !Reg ctx (StringType Unicode) -> TermStmt blocks ret ctx
- Lang.Crucible.CFG.Core: [ExtendAssign] :: !StmtExtension ext (Reg ctx) tp -> Stmt ext ctx (ctx ::> tp)
+ Lang.Crucible.CFG.Core: [ExtendAssign] :: forall ext (ctx :: Ctx CrucibleType) (tp :: CrucibleType). !StmtExtension ext (Reg ctx) tp -> Stmt ext ctx (ctx '::> tp)
- Lang.Crucible.CFG.Core: [FreshConstant] :: !BaseTypeRepr bt -> !Maybe SolverSymbol -> Stmt ext ctx (ctx ::> BaseToType bt)
+ Lang.Crucible.CFG.Core: [FreshConstant] :: forall (bt :: BaseType) ext (ctx :: Ctx CrucibleType). !BaseTypeRepr bt -> !Maybe SolverSymbol -> Stmt ext ctx (ctx '::> BaseToType bt)
- Lang.Crucible.CFG.Core: [FreshFloat] :: !FloatInfoRepr fi -> !Maybe SolverSymbol -> Stmt ext ctx (ctx ::> FloatType fi)
+ Lang.Crucible.CFG.Core: [FreshFloat] :: forall (fi :: FloatInfo) ext (ctx :: Ctx CrucibleType). !FloatInfoRepr fi -> !Maybe SolverSymbol -> Stmt ext ctx (ctx '::> FloatType fi)
- Lang.Crucible.CFG.Core: [FreshNat] :: !Maybe SolverSymbol -> Stmt ext ctx (ctx ::> NatType)
+ Lang.Crucible.CFG.Core: [FreshNat] :: forall ext (ctx :: Ctx CrucibleType). !Maybe SolverSymbol -> Stmt ext ctx (ctx '::> NatType)
- Lang.Crucible.CFG.Core: [JumpTarget] :: !BlockID blocks args -> !CtxRepr args -> !Assignment (Reg ctx) args -> JumpTarget blocks ctx
+ Lang.Crucible.CFG.Core: [JumpTarget] :: forall (blocks :: Ctx (Ctx CrucibleType)) (args :: Ctx CrucibleType) (ctx :: Ctx CrucibleType). !BlockID blocks args -> !CtxRepr args -> !Assignment (Reg ctx) args -> JumpTarget blocks ctx
- Lang.Crucible.CFG.Core: [Jump] :: !JumpTarget blocks ctx -> TermStmt blocks ret ctx
+ Lang.Crucible.CFG.Core: [Jump] :: forall (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType) (ret :: CrucibleType). !JumpTarget blocks ctx -> TermStmt blocks ret ctx
- Lang.Crucible.CFG.Core: [MaybeBranch] :: !TypeRepr tp -> !Reg ctx (MaybeType tp) -> !SwitchTarget blocks ctx tp -> !JumpTarget blocks ctx -> TermStmt blocks rtp ctx
+ Lang.Crucible.CFG.Core: [MaybeBranch] :: forall (tp :: CrucibleType) (ctx :: Ctx CrucibleType) (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType). !TypeRepr tp -> !Reg ctx (MaybeType tp) -> !SwitchTarget blocks ctx tp -> !JumpTarget blocks ctx -> TermStmt blocks ret ctx
- Lang.Crucible.CFG.Core: [NewEmptyRefCell] :: !TypeRepr tp -> Stmt ext ctx (ctx ::> ReferenceType tp)
+ Lang.Crucible.CFG.Core: [NewEmptyRefCell] :: forall (tp :: CrucibleType) ext (ctx :: Ctx CrucibleType). !TypeRepr tp -> Stmt ext ctx (ctx '::> ReferenceType tp)
- Lang.Crucible.CFG.Core: [NewRefCell] :: !TypeRepr tp -> !Reg ctx tp -> Stmt ext ctx (ctx ::> ReferenceType tp)
+ Lang.Crucible.CFG.Core: [NewRefCell] :: forall (tp :: CrucibleType) (ctx :: Ctx CrucibleType) ext. !TypeRepr tp -> !Reg ctx tp -> Stmt ext ctx (ctx '::> ReferenceType tp)
- Lang.Crucible.CFG.Core: [Print] :: !Reg ctx (StringType Unicode) -> Stmt ext ctx ctx
+ Lang.Crucible.CFG.Core: [Print] :: forall (ctx :: Ctx CrucibleType) ext. !Reg ctx (StringType Unicode) -> Stmt ext ctx ctx
- Lang.Crucible.CFG.Core: [ReadGlobal] :: !GlobalVar tp -> Stmt ext ctx (ctx ::> tp)
+ Lang.Crucible.CFG.Core: [ReadGlobal] :: forall (tp :: CrucibleType) ext (ctx :: Ctx CrucibleType). !GlobalVar tp -> Stmt ext ctx (ctx '::> tp)
- Lang.Crucible.CFG.Core: [ReadRefCell] :: !Reg ctx (ReferenceType tp) -> Stmt ext ctx (ctx ::> tp)
+ Lang.Crucible.CFG.Core: [ReadRefCell] :: forall (ctx :: Ctx CrucibleType) (tp :: CrucibleType) ext. !Reg ctx (ReferenceType tp) -> Stmt ext ctx (ctx '::> tp)
- Lang.Crucible.CFG.Core: [Return] :: !Reg ctx ret -> TermStmt blocks ret ctx
+ Lang.Crucible.CFG.Core: [Return] :: forall (ctx :: Ctx CrucibleType) (ret :: CrucibleType) (blocks :: Ctx (Ctx CrucibleType)). !Reg ctx ret -> TermStmt blocks ret ctx
- Lang.Crucible.CFG.Core: [SetReg] :: !TypeRepr tp -> !Expr ext ctx tp -> Stmt ext ctx (ctx ::> tp)
+ Lang.Crucible.CFG.Core: [SetReg] :: forall (tp :: CrucibleType) ext (ctx :: Ctx CrucibleType). !TypeRepr tp -> !Expr ext ctx tp -> Stmt ext ctx (ctx '::> tp)
- Lang.Crucible.CFG.Core: [SomeCFG] :: CFG ext blocks init ret -> SomeCFG ext init ret
+ Lang.Crucible.CFG.Core: [SomeCFG] :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext blocks init ret -> SomeCFG ext init ret
- Lang.Crucible.CFG.Core: [SwitchTarget] :: !BlockID blocks (args ::> tp) -> !CtxRepr args -> !Assignment (Reg ctx) args -> SwitchTarget blocks ctx tp
+ Lang.Crucible.CFG.Core: [SwitchTarget] :: forall (blocks :: Ctx (Ctx CrucibleType)) (args :: Ctx CrucibleType) (tp :: CrucibleType) (ctx :: Ctx CrucibleType). !BlockID blocks (args ::> tp) -> !CtxRepr args -> !Assignment (Reg ctx) args -> SwitchTarget blocks ctx tp
- Lang.Crucible.CFG.Core: [TailCall] :: !Reg ctx (FunctionHandleType args ret) -> !CtxRepr args -> !Assignment (Reg ctx) args -> TermStmt blocks ret ctx
+ Lang.Crucible.CFG.Core: [TailCall] :: forall (ctx :: Ctx CrucibleType) (args :: Ctx CrucibleType) (ret :: CrucibleType) (blocks :: Ctx (Ctx CrucibleType)). !Reg ctx (FunctionHandleType args ret) -> !CtxRepr args -> !Assignment (Reg ctx) args -> TermStmt blocks ret ctx
- Lang.Crucible.CFG.Core: [TermStmt] :: !ProgramLoc -> !TermStmt blocks ret ctx -> StmtSeq ext blocks ret ctx
+ Lang.Crucible.CFG.Core: [TermStmt] :: forall (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType) ext. !ProgramLoc -> !TermStmt blocks ret ctx -> StmtSeq ext blocks ret ctx
- Lang.Crucible.CFG.Core: [VariantElim] :: !CtxRepr varctx -> !Reg ctx (VariantType varctx) -> !Assignment (SwitchTarget blocks ctx) varctx -> TermStmt blocks ret ctx
+ Lang.Crucible.CFG.Core: [VariantElim] :: forall (varctx :: Ctx CrucibleType) (ctx :: Ctx CrucibleType) (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType). !CtxRepr varctx -> !Reg ctx (VariantType varctx) -> !Assignment (SwitchTarget blocks ctx) varctx -> TermStmt blocks ret ctx
- Lang.Crucible.CFG.Core: [WriteGlobal] :: !GlobalVar tp -> !Reg ctx tp -> Stmt ext ctx ctx
+ Lang.Crucible.CFG.Core: [WriteGlobal] :: forall (tp :: CrucibleType) (ctx :: Ctx CrucibleType) ext. !GlobalVar tp -> !Reg ctx tp -> Stmt ext ctx ctx
- Lang.Crucible.CFG.Core: [WriteRefCell] :: !Reg ctx (ReferenceType tp) -> !Reg ctx tp -> Stmt ext ctx ctx
+ Lang.Crucible.CFG.Core: [WriteRefCell] :: forall (ctx :: Ctx CrucibleType) (tp :: CrucibleType) ext. !Reg ctx (ReferenceType tp) -> !Reg ctx tp -> Stmt ext ctx ctx
- Lang.Crucible.CFG.Core: [_blockStmts] :: Block ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) ctx -> !StmtSeq ext blocks ret ctx
+ Lang.Crucible.CFG.Core: [_blockStmts] :: Block ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType) -> !StmtSeq ext blocks ret ctx
- Lang.Crucible.CFG.Core: [blockID] :: Block ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) ctx -> !BlockID blocks ctx
+ Lang.Crucible.CFG.Core: [blockID] :: Block ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType) -> !BlockID blocks ctx
- Lang.Crucible.CFG.Core: [blockInputs] :: Block ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) ctx -> !CtxRepr ctx
+ Lang.Crucible.CFG.Core: [blockInputs] :: Block ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType) -> !CtxRepr ctx
- Lang.Crucible.CFG.Core: [cfgBlockMap] :: CFG (ext :: Type) (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType) -> !BlockMap ext blocks ret
+ Lang.Crucible.CFG.Core: [cfgBlockMap] :: CFG ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType) -> !BlockMap ext blocks ret
- Lang.Crucible.CFG.Core: [cfgBreakpoints] :: CFG (ext :: Type) (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType) -> !Bimap BreakpointName (Some (BlockID blocks))
+ Lang.Crucible.CFG.Core: [cfgBreakpoints] :: CFG ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType) -> !Bimap BreakpointName (Some (BlockID blocks))
- Lang.Crucible.CFG.Core: [cfgEntryBlockID] :: CFG (ext :: Type) (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType) -> !BlockID blocks init
+ Lang.Crucible.CFG.Core: [cfgEntryBlockID] :: CFG ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType) -> !BlockID blocks init
- Lang.Crucible.CFG.Core: [cfgHandle] :: CFG (ext :: Type) (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType) -> FnHandle init ret
+ Lang.Crucible.CFG.Core: [cfgHandle] :: CFG ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType) -> FnHandle init ret
- Lang.Crucible.CFG.Core: applyEmbeddingStmt :: forall ext ctx ctx' sctx. TraverseExt ext => CtxEmbedding ctx ctx' -> Stmt ext ctx sctx -> Pair (Stmt ext ctx') (CtxEmbedding sctx)
+ Lang.Crucible.CFG.Core: applyEmbeddingStmt :: forall ext (ctx :: Ctx CrucibleType) (ctx' :: Ctx CrucibleType) (sctx :: Ctx CrucibleType). TraverseExt ext => CtxEmbedding ctx ctx' -> Stmt ext ctx sctx -> Pair (Stmt ext ctx') (CtxEmbedding sctx)
- Lang.Crucible.CFG.Core: blockLoc :: Block ext blocks ret ctx -> ProgramLoc
+ Lang.Crucible.CFG.Core: blockLoc :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType). Block ext blocks ret ctx -> ProgramLoc
- Lang.Crucible.CFG.Core: blockStmts :: Simple Lens (Block ext b r c) (StmtSeq ext b r c)
+ Lang.Crucible.CFG.Core: blockStmts :: forall ext (b :: Ctx (Ctx CrucibleType)) (r :: CrucibleType) (c :: Ctx CrucibleType) f. Functor f => (StmtSeq ext b r c -> f (StmtSeq ext b r c)) -> Block ext b r c -> f (Block ext b r c)
- Lang.Crucible.CFG.Core: cfgArgTypes :: CFG ext blocks init ret -> CtxRepr init
+ Lang.Crucible.CFG.Core: cfgArgTypes :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext blocks init ret -> CtxRepr init
- Lang.Crucible.CFG.Core: cfgReturnType :: CFG ext blocks init ret -> TypeRepr ret
+ Lang.Crucible.CFG.Core: cfgReturnType :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext blocks init ret -> TypeRepr ret
- Lang.Crucible.CFG.Core: class HasSomeCFG f ext init ret | f -> ext, f -> init, f -> ret
+ Lang.Crucible.CFG.Core: class HasSomeCFG (f :: k -> Type) ext (init :: Ctx CrucibleType) (ret :: CrucibleType) | f -> ext, f -> init, f -> ret
- Lang.Crucible.CFG.Core: data Block ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) ctx
+ Lang.Crucible.CFG.Core: data Block ext (blocks :: Ctx Ctx CrucibleType) (ret :: CrucibleType) (ctx :: Ctx CrucibleType)
- Lang.Crucible.CFG.Core: data CFG (ext :: Type) (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType)
+ Lang.Crucible.CFG.Core: data CFG ext (blocks :: Ctx Ctx CrucibleType) (init :: Ctx CrucibleType) (ret :: CrucibleType)
- Lang.Crucible.CFG.Core: data JumpTarget blocks ctx
+ Lang.Crucible.CFG.Core: data JumpTarget (blocks :: Ctx Ctx CrucibleType) (ctx :: Ctx CrucibleType)
- Lang.Crucible.CFG.Core: data StmtSeq ext blocks (ret :: CrucibleType) ctx
+ Lang.Crucible.CFG.Core: data StmtSeq ext (blocks :: Ctx Ctx CrucibleType) (ret :: CrucibleType) (ctx :: Ctx CrucibleType)
- Lang.Crucible.CFG.Core: data SwitchTarget blocks ctx tp
+ Lang.Crucible.CFG.Core: data SwitchTarget (blocks :: Ctx Ctx CrucibleType) (ctx :: Ctx CrucibleType) (tp :: CrucibleType)
- Lang.Crucible.CFG.Core: data TermStmt blocks (ret :: CrucibleType) (ctx :: Ctx CrucibleType)
+ Lang.Crucible.CFG.Core: data TermStmt (blocks :: Ctx Ctx CrucibleType) (ret :: CrucibleType) (ctx :: Ctx CrucibleType)
- Lang.Crucible.CFG.Core: extendBlockID :: KnownDiff l r => BlockID l tp -> BlockID r tp
+ Lang.Crucible.CFG.Core: extendBlockID :: forall (l :: Ctx (Ctx CrucibleType)) (r :: Ctx (Ctx CrucibleType)) (tp :: Ctx CrucibleType). KnownDiff l r => BlockID l tp -> BlockID r tp
- Lang.Crucible.CFG.Core: extendBlockID' :: Diff l r -> BlockID l tp -> BlockID r tp
+ Lang.Crucible.CFG.Core: extendBlockID' :: forall (l :: Ctx (Ctx CrucibleType)) (r :: Ctx (Ctx CrucibleType)) (tp :: Ctx CrucibleType). Diff l r -> BlockID l tp -> BlockID r tp
- Lang.Crucible.CFG.Core: extendBlockMap :: Assignment (Block ext blocks ret) b -> Assignment (Block ext (blocks ::> args) ret) b
+ Lang.Crucible.CFG.Core: extendBlockMap :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (b :: Ctx (Ctx CrucibleType)) (args :: Ctx CrucibleType). Assignment (Block ext blocks ret) b -> Assignment (Block ext (blocks ::> args) ret) b
- Lang.Crucible.CFG.Core: extendJumpTarget :: Diff blocks' blocks -> JumpTarget blocks' ctx -> JumpTarget blocks ctx
+ Lang.Crucible.CFG.Core: extendJumpTarget :: forall (blocks' :: Ctx (Ctx CrucibleType)) (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType). Diff blocks' blocks -> JumpTarget blocks' ctx -> JumpTarget blocks ctx
- Lang.Crucible.CFG.Core: extendReg :: Reg ctx tp -> Reg (ctx ::> r) tp
+ Lang.Crucible.CFG.Core: extendReg :: forall (ctx :: Ctx CrucibleType) (tp :: CrucibleType) (r :: CrucibleType). Reg ctx tp -> Reg (ctx ::> r) tp
- Lang.Crucible.CFG.Core: extendSwitchTarget :: Diff blocks' blocks -> SwitchTarget blocks' ctx tp -> SwitchTarget blocks ctx tp
+ Lang.Crucible.CFG.Core: extendSwitchTarget :: forall (blocks' :: Ctx (Ctx CrucibleType)) (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType) (tp :: CrucibleType). Diff blocks' blocks -> SwitchTarget blocks' ctx tp -> SwitchTarget blocks ctx tp
- Lang.Crucible.CFG.Core: firstStmtLoc :: StmtSeq ext b r ctx -> ProgramLoc
+ Lang.Crucible.CFG.Core: firstStmtLoc :: forall ext (b :: Ctx (Ctx CrucibleType)) (r :: CrucibleType) (ctx :: Ctx CrucibleType). StmtSeq ext b r ctx -> ProgramLoc
- Lang.Crucible.CFG.Core: getBlock :: BlockID blocks args -> BlockMap ext blocks ret -> Block ext blocks ret args
+ Lang.Crucible.CFG.Core: getBlock :: forall (blocks :: Ctx (Ctx CrucibleType)) (args :: Ctx CrucibleType) ext (ret :: CrucibleType). BlockID blocks args -> BlockMap ext blocks ret -> Block ext blocks ret args
- Lang.Crucible.CFG.Core: getCFG :: HasSomeCFG f ext init ret => f b -> SomeCFG ext init ret
+ Lang.Crucible.CFG.Core: getCFG :: forall (b :: k). HasSomeCFG f ext init ret => f b -> SomeCFG ext init ret
- Lang.Crucible.CFG.Core: jumpTargetID :: JumpTarget blocks ctx -> Some (BlockID blocks)
+ Lang.Crucible.CFG.Core: jumpTargetID :: forall (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType). JumpTarget blocks ctx -> Some (BlockID blocks)
- Lang.Crucible.CFG.Core: lastReg :: KnownContext ctx => Reg (ctx ::> tp) tp
+ Lang.Crucible.CFG.Core: lastReg :: forall (ctx :: Ctx CrucibleType) (tp :: CrucibleType). KnownContext ctx => Reg (ctx ::> tp) tp
- Lang.Crucible.CFG.Core: newtype BlockID (blocks :: Ctx (Ctx CrucibleType)) (tp :: Ctx CrucibleType)
+ Lang.Crucible.CFG.Core: newtype BlockID (blocks :: Ctx Ctx CrucibleType) (tp :: Ctx CrucibleType)
- Lang.Crucible.CFG.Core: nextBlocks :: Block ext b r a -> [Some (BlockID b)]
+ Lang.Crucible.CFG.Core: nextBlocks :: forall ext (b :: Ctx (Ctx CrucibleType)) (r :: CrucibleType) (a :: Ctx CrucibleType). Block ext b r a -> [Some (BlockID b)]
- Lang.Crucible.CFG.Core: nextStmtHeight :: Size ctx -> Stmt ext ctx ctx' -> Size ctx'
+ Lang.Crucible.CFG.Core: nextStmtHeight :: forall (ctx :: Ctx CrucibleType) ext (ctx' :: Ctx CrucibleType). Size ctx -> Stmt ext ctx ctx' -> Size ctx'
- Lang.Crucible.CFG.Core: ppCFG :: PrettyExt ext => Bool -> CFG ext blocks init ret -> Doc ann
+ Lang.Crucible.CFG.Core: ppCFG :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType) ann. PrettyExt ext => Bool -> CFG ext blocks init ret -> Doc ann
- Lang.Crucible.CFG.Core: ppCFG' :: PrettyExt ext => Bool -> CFGPostdom blocks -> CFG ext blocks init ret -> Doc ann
+ Lang.Crucible.CFG.Core: ppCFG' :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType) ann. PrettyExt ext => Bool -> CFGPostdom blocks -> CFG ext blocks init ret -> Doc ann
- Lang.Crucible.CFG.Core: ppStmt :: PrettyExt ext => Size ctx -> Stmt ext ctx ctx' -> Doc ann
+ Lang.Crucible.CFG.Core: ppStmt :: forall ext (ctx :: Ctx CrucibleType) (ctx' :: Ctx CrucibleType) ann. PrettyExt ext => Size ctx -> Stmt ext ctx ctx' -> Doc ann
- Lang.Crucible.CFG.Core: stmtSeqTermStmt :: Functor f => (forall ctx. (ProgramLoc, TermStmt b ret ctx) -> f (StmtSeq ext b' ret ctx)) -> StmtSeq ext b ret args -> f (StmtSeq ext b' ret args)
+ Lang.Crucible.CFG.Core: stmtSeqTermStmt :: forall f (b :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) ext (b' :: Ctx (Ctx CrucibleType)) (args :: Ctx CrucibleType). Functor f => (forall (ctx :: Ctx CrucibleType). () => (ProgramLoc, TermStmt b ret ctx) -> f (StmtSeq ext b' ret ctx)) -> StmtSeq ext b ret args -> f (StmtSeq ext b' ret args)
- Lang.Crucible.CFG.Core: switchTargetID :: SwitchTarget blocks ctx tp -> Some (BlockID blocks)
+ Lang.Crucible.CFG.Core: switchTargetID :: forall (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType) (tp :: CrucibleType). SwitchTarget blocks ctx tp -> Some (BlockID blocks)
- Lang.Crucible.CFG.Core: termStmtNextBlocks :: TermStmt b ret ctx -> Maybe [Some (BlockID b)]
+ Lang.Crucible.CFG.Core: termStmtNextBlocks :: forall (b :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType). TermStmt b ret ctx -> Maybe [Some (BlockID b)]
- Lang.Crucible.CFG.Core: type BlockMap ext blocks ret = Assignment (Block ext blocks ret) blocks
+ Lang.Crucible.CFG.Core: type BlockMap ext (blocks :: Ctx Ctx CrucibleType) (ret :: CrucibleType) = Assignment Block ext blocks ret blocks
- Lang.Crucible.CFG.Core: type CFGPostdom blocks = Assignment (Const [Some (BlockID blocks)]) blocks
+ Lang.Crucible.CFG.Core: type CFGPostdom (blocks :: Ctx Ctx CrucibleType) = Assignment Const [Some BlockID blocks] :: Ctx CrucibleType -> Type blocks
- Lang.Crucible.CFG.Core: withBlockTermStmt :: Block ext blocks ret args -> (forall ctx. ProgramLoc -> TermStmt blocks ret ctx -> r) -> r
+ Lang.Crucible.CFG.Core: withBlockTermStmt :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (args :: Ctx CrucibleType) r. Block ext blocks ret args -> (forall (ctx :: Ctx CrucibleType). () => ProgramLoc -> TermStmt blocks ret ctx -> r) -> r
- Lang.Crucible.CFG.EarlyMergeLoops: earlyMergeLoops :: (TraverseExt ext, Monad m, Show (CFG ext s init ret)) => NonceGenerator m s -> CFG ext s init ret -> m (CFG ext s init ret)
+ Lang.Crucible.CFG.EarlyMergeLoops: earlyMergeLoops :: forall ext m s (init :: Ctx CrucibleType) (ret :: CrucibleType). (TraverseExt ext, Monad m, Show (CFG ext s init ret)) => NonceGenerator m s -> CFG ext s init ret -> m (CFG ext s init ret)
- Lang.Crucible.CFG.Expr: BaseTerm :: !BaseTypeRepr tp -> !f (BaseToType tp) -> BaseTerm (f :: CrucibleType -> Type) tp
+ Lang.Crucible.CFG.Expr: BaseTerm :: !BaseTypeRepr tp -> !f (BaseToType tp) -> BaseTerm (f :: CrucibleType -> Type) (tp :: BaseType)
- Lang.Crucible.CFG.Expr: [And] :: !f BoolType -> !f BoolType -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [And] :: forall (f :: CrucibleType -> Type) ext. !f BoolType -> !f BoolType -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [BVAdd] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVAdd] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVAnd] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVAnd] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVAshr] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVAshr] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVCarry] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [BVCarry] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [BVConcat] :: (1 <= u, 1 <= v, 1 <= (u + v)) => !NatRepr u -> !NatRepr v -> !f (BVType u) -> !f (BVType v) -> App ext f (BVType (u + v))
+ Lang.Crucible.CFG.Expr: [BVConcat] :: forall (u :: Natural) (v :: Natural) (f :: CrucibleType -> Type) ext. (1 <= u, 1 <= v, 1 <= (u + v)) => !NatRepr u -> !NatRepr v -> !f (BVType u) -> !f (BVType v) -> App ext f ('BaseToType (BaseBVType (u + v)))
- Lang.Crucible.CFG.Expr: [BVCountLeadingZeros] :: 1 <= w => !NatRepr w -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVCountLeadingZeros] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVCountTrailingZeros] :: 1 <= w => !NatRepr w -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVCountTrailingZeros] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVLit] :: 1 <= w => NatRepr w -> BV w -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVLit] :: forall (w :: Natural) ext (f :: CrucibleType -> Type). 1 <= w => NatRepr w -> BV w -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVLshr] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVLshr] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVMul] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVMul] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVNeg] :: 1 <= w => !NatRepr w -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVNeg] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVNonzero] :: 1 <= w => !NatRepr w -> !f (BVType w) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [BVNonzero] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [BVNot] :: 1 <= w => !NatRepr w -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVNot] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVOr] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVOr] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVPopcount] :: 1 <= w => !NatRepr w -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVPopcount] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVRol] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVRol] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVRor] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVRor] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVSBorrow] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [BVSBorrow] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [BVSCarry] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [BVSCarry] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [BVSMax] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVSMax] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVSMin] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVSMin] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVSdiv] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVSdiv] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVSelect] :: (1 <= w, 1 <= len, (idx + len) <= w) => !NatRepr idx -> !NatRepr len -> !NatRepr w -> !f (BVType w) -> App ext f (BVType len)
+ Lang.Crucible.CFG.Expr: [BVSelect] :: forall (w :: Natural) (len :: Natural) (idx :: Natural) (f :: CrucibleType -> Type) ext. (1 <= w, 1 <= len, (idx + len) <= w) => !NatRepr idx -> !NatRepr len -> !NatRepr w -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType len))
- Lang.Crucible.CFG.Expr: [BVSext] :: (1 <= w, 1 <= r, (w + 1) <= r) => !NatRepr r -> !NatRepr w -> !f (BVType w) -> App ext f (BVType r)
+ Lang.Crucible.CFG.Expr: [BVSext] :: forall (w :: Natural) (r :: Natural) (f :: CrucibleType -> Type) ext. (1 <= w, 1 <= r, (w + 1) <= r) => !NatRepr r -> !NatRepr w -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType r))
- Lang.Crucible.CFG.Expr: [BVShl] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVShl] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVSle] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [BVSle] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [BVSlt] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [BVSlt] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [BVSrem] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVSrem] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVSub] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVSub] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVTrunc] :: (1 <= r, (r + 1) <= w) => !NatRepr r -> !NatRepr w -> !f (BVType w) -> App ext f (BVType r)
+ Lang.Crucible.CFG.Expr: [BVTrunc] :: forall (r :: Natural) (w :: Natural) (f :: CrucibleType -> Type) ext. (1 <= r, (r + 1) <= w) => !NatRepr r -> !NatRepr w -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType r))
- Lang.Crucible.CFG.Expr: [BVUMax] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVUMax] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVUMin] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVUMin] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVUdiv] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVUdiv] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVUle] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [BVUle] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [BVUlt] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [BVUlt] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [BVUndef] :: 1 <= w => NatRepr w -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVUndef] :: forall (w :: Natural) ext (f :: CrucibleType -> Type). 1 <= w => NatRepr w -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVUrem] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVUrem] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVXor] :: 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BVXor] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BVZext] :: (1 <= w, 1 <= r, (w + 1) <= r) => !NatRepr r -> !NatRepr w -> !f (BVType w) -> App ext f (BVType r)
+ Lang.Crucible.CFG.Expr: [BVZext] :: forall (w :: Natural) (r :: Natural) (f :: CrucibleType -> Type) ext. (1 <= w, 1 <= r, (w + 1) <= r) => !NatRepr r -> !NatRepr w -> !f (BVType w) -> App ext f ('BaseToType (BaseBVType r))
- Lang.Crucible.CFG.Expr: [BaseIsEq] :: !BaseTypeRepr tp -> !f (BaseToType tp) -> !f (BaseToType tp) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [BaseIsEq] :: forall (tp1 :: BaseType) (f :: CrucibleType -> Type) ext. !BaseTypeRepr tp1 -> !f (BaseToType tp1) -> !f (BaseToType tp1) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [BaseIte] :: !BaseTypeRepr tp -> !f BoolType -> !f (BaseToType tp) -> !f (BaseToType tp) -> App ext f (BaseToType tp)
+ Lang.Crucible.CFG.Expr: [BaseIte] :: forall (tp1 :: BaseType) (f :: CrucibleType -> Type) ext. !BaseTypeRepr tp1 -> !f BoolType -> !f (BaseToType tp1) -> !f (BaseToType tp1) -> App ext f ('BaseToType tp1)
- Lang.Crucible.CFG.Expr: [BoolLit] :: !Bool -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [BoolLit] :: forall ext (f :: CrucibleType -> Type). !Bool -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [BoolToBV] :: 1 <= w => !NatRepr w -> !f BoolType -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [BoolToBV] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f BoolType -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [BoolXor] :: !f BoolType -> !f BoolType -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [BoolXor] :: forall (f :: CrucibleType -> Type) ext. !f BoolType -> !f BoolType -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [BvToInteger] :: 1 <= w => !NatRepr w -> !f (BVType w) -> App ext f IntegerType
+ Lang.Crucible.CFG.Expr: [BvToInteger] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> App ext f ('BaseToType BaseIntegerType)
- Lang.Crucible.CFG.Expr: [BvToNat] :: 1 <= w => !NatRepr w -> !f (BVType w) -> App ext f NatType
+ Lang.Crucible.CFG.Expr: [BvToNat] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> App ext f 'NatType
- Lang.Crucible.CFG.Expr: [Closure] :: !CtxRepr args -> !TypeRepr ret -> !f (FunctionHandleType (args ::> tp) ret) -> !TypeRepr tp -> !f tp -> App ext f (FunctionHandleType args ret)
+ Lang.Crucible.CFG.Expr: [Closure] :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType) (f :: CrucibleType -> Type) (tp1 :: CrucibleType) ext. !CtxRepr args -> !TypeRepr ret -> !f (FunctionHandleType (args ::> tp1) ret) -> !TypeRepr tp1 -> !f tp1 -> App ext f ('FunctionHandleType args ret)
- Lang.Crucible.CFG.Expr: [Complex] :: !f RealValType -> !f RealValType -> App ext f ComplexRealType
+ Lang.Crucible.CFG.Expr: [Complex] :: forall (f :: CrucibleType -> Type) ext. !f RealValType -> !f RealValType -> App ext f ('BaseToType BaseComplexType)
- Lang.Crucible.CFG.Expr: [DoubleLit] :: !Double -> App ext f (FloatType DoubleFloat)
+ Lang.Crucible.CFG.Expr: [DoubleLit] :: forall ext (f :: CrucibleType -> Type). !Double -> App ext f ('FloatType DoubleFloat)
- Lang.Crucible.CFG.Expr: [EmptyApp] :: App ext f UnitType
+ Lang.Crucible.CFG.Expr: [EmptyApp] :: forall ext (f :: CrucibleType -> Type). App ext f 'UnitType
- Lang.Crucible.CFG.Expr: [EmptyStringMap] :: !TypeRepr tp -> App ext f (StringMapType tp)
+ Lang.Crucible.CFG.Expr: [EmptyStringMap] :: forall (tp1 :: CrucibleType) ext (f :: CrucibleType -> Type). !TypeRepr tp1 -> App ext f ('StringMapType tp1)
- Lang.Crucible.CFG.Expr: [EmptyWordMap] :: 1 <= w => !NatRepr w -> !BaseTypeRepr tp -> App ext f (WordMapType w tp)
+ Lang.Crucible.CFG.Expr: [EmptyWordMap] :: forall (w :: Natural) (tp1 :: BaseType) ext (f :: CrucibleType -> Type). 1 <= w => !NatRepr w -> !BaseTypeRepr tp1 -> App ext f ('WordMapType w tp1)
- Lang.Crucible.CFG.Expr: [ExtensionApp] :: !ExprExtension ext f tp -> App ext f tp
+ Lang.Crucible.CFG.Expr: [ExtensionApp] :: forall ext (f :: CrucibleType -> Type) (tp :: CrucibleType). !ExprExtension ext f tp -> App ext f tp
- Lang.Crucible.CFG.Expr: [FloatAbs] :: !FloatInfoRepr fi -> !f (FloatType fi) -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatAbs] :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !FloatInfoRepr fi -> !f (FloatType fi) -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatAdd] :: !FloatInfoRepr fi -> !RoundingMode -> !f (FloatType fi) -> !f (FloatType fi) -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatAdd] :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !FloatInfoRepr fi -> !RoundingMode -> !f (FloatType fi) -> !f (FloatType fi) -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatCast] :: !FloatInfoRepr fi -> !RoundingMode -> !f (FloatType fi') -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatCast] :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) (fi' :: FloatInfo) ext. !FloatInfoRepr fi -> !RoundingMode -> !f (FloatType fi') -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatDiv] :: !FloatInfoRepr fi -> !RoundingMode -> !f (FloatType fi) -> !f (FloatType fi) -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatDiv] :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !FloatInfoRepr fi -> !RoundingMode -> !f (FloatType fi) -> !f (FloatType fi) -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatEq] :: !f (FloatType fi) -> !f (FloatType fi) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [FloatEq] :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !f (FloatType fi) -> !f (FloatType fi) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [FloatFMA] :: !FloatInfoRepr fi -> !RoundingMode -> !f (FloatType fi) -> !f (FloatType fi) -> !f (FloatType fi) -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatFMA] :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !FloatInfoRepr fi -> !RoundingMode -> !f (FloatType fi) -> !f (FloatType fi) -> !f (FloatType fi) -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatFpApart] :: !f (FloatType fi) -> !f (FloatType fi) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [FloatFpApart] :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !f (FloatType fi) -> !f (FloatType fi) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [FloatFpEq] :: !f (FloatType fi) -> !f (FloatType fi) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [FloatFpEq] :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !f (FloatType fi) -> !f (FloatType fi) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [FloatFromBV] :: 1 <= w => !FloatInfoRepr fi -> !RoundingMode -> !f (BVType w) -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatFromBV] :: forall (w :: Natural) (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. 1 <= w => !FloatInfoRepr fi -> !RoundingMode -> !f (BVType w) -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatFromBinary] :: !FloatInfoRepr fi -> !f (BVType (FloatInfoToBitWidth fi)) -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatFromBinary] :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !FloatInfoRepr fi -> !f (BVType (FloatInfoToBitWidth fi)) -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatFromReal] :: !FloatInfoRepr fi -> !RoundingMode -> !f RealValType -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatFromReal] :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !FloatInfoRepr fi -> !RoundingMode -> !f RealValType -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatFromSBV] :: 1 <= w => !FloatInfoRepr fi -> !RoundingMode -> !f (BVType w) -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatFromSBV] :: forall (w :: Natural) (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. 1 <= w => !FloatInfoRepr fi -> !RoundingMode -> !f (BVType w) -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatGe] :: !f (FloatType fi) -> !f (FloatType fi) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [FloatGe] :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !f (FloatType fi) -> !f (FloatType fi) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [FloatGt] :: !f (FloatType fi) -> !f (FloatType fi) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [FloatGt] :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !f (FloatType fi) -> !f (FloatType fi) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [FloatIsInfinite] :: !f (FloatType fi) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [FloatIsInfinite] :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !f (FloatType fi) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [FloatIsNaN] :: !f (FloatType fi) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [FloatIsNaN] :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !f (FloatType fi) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [FloatIsNegative] :: !f (FloatType fi) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [FloatIsNegative] :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !f (FloatType fi) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [FloatIsNormal] :: !f (FloatType fi) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [FloatIsNormal] :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !f (FloatType fi) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [FloatIsPositive] :: !f (FloatType fi) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [FloatIsPositive] :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !f (FloatType fi) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [FloatIsSubnormal] :: !f (FloatType fi) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [FloatIsSubnormal] :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !f (FloatType fi) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [FloatIsZero] :: !f (FloatType fi) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [FloatIsZero] :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !f (FloatType fi) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [FloatIte] :: !FloatInfoRepr fi -> !f BoolType -> !f (FloatType fi) -> !f (FloatType fi) -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatIte] :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !FloatInfoRepr fi -> !f BoolType -> !f (FloatType fi) -> !f (FloatType fi) -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatLe] :: !f (FloatType fi) -> !f (FloatType fi) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [FloatLe] :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !f (FloatType fi) -> !f (FloatType fi) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [FloatLit] :: !Float -> App ext f (FloatType SingleFloat)
+ Lang.Crucible.CFG.Expr: [FloatLit] :: forall ext (f :: CrucibleType -> Type). !Float -> App ext f ('FloatType SingleFloat)
- Lang.Crucible.CFG.Expr: [FloatLt] :: !f (FloatType fi) -> !f (FloatType fi) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [FloatLt] :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !f (FloatType fi) -> !f (FloatType fi) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [FloatMax] :: !FloatInfoRepr fi -> !f (FloatType fi) -> !f (FloatType fi) -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatMax] :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !FloatInfoRepr fi -> !f (FloatType fi) -> !f (FloatType fi) -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatMin] :: !FloatInfoRepr fi -> !f (FloatType fi) -> !f (FloatType fi) -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatMin] :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !FloatInfoRepr fi -> !f (FloatType fi) -> !f (FloatType fi) -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatMul] :: !FloatInfoRepr fi -> !RoundingMode -> !f (FloatType fi) -> !f (FloatType fi) -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatMul] :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !FloatInfoRepr fi -> !RoundingMode -> !f (FloatType fi) -> !f (FloatType fi) -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatNInf] :: !FloatInfoRepr fi -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatNInf] :: forall (fi :: FloatInfo) ext (f :: CrucibleType -> Type). !FloatInfoRepr fi -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatNZero] :: !FloatInfoRepr fi -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatNZero] :: forall (fi :: FloatInfo) ext (f :: CrucibleType -> Type). !FloatInfoRepr fi -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatNaN] :: !FloatInfoRepr fi -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatNaN] :: forall (fi :: FloatInfo) ext (f :: CrucibleType -> Type). !FloatInfoRepr fi -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatNe] :: !f (FloatType fi) -> !f (FloatType fi) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [FloatNe] :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !f (FloatType fi) -> !f (FloatType fi) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [FloatNeg] :: !FloatInfoRepr fi -> !f (FloatType fi) -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatNeg] :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !FloatInfoRepr fi -> !f (FloatType fi) -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatPInf] :: !FloatInfoRepr fi -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatPInf] :: forall (fi :: FloatInfo) ext (f :: CrucibleType -> Type). !FloatInfoRepr fi -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatPZero] :: !FloatInfoRepr fi -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatPZero] :: forall (fi :: FloatInfo) ext (f :: CrucibleType -> Type). !FloatInfoRepr fi -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatRem] :: !FloatInfoRepr fi -> !f (FloatType fi) -> !f (FloatType fi) -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatRem] :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !FloatInfoRepr fi -> !f (FloatType fi) -> !f (FloatType fi) -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatSqrt] :: !FloatInfoRepr fi -> !RoundingMode -> !f (FloatType fi) -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatSqrt] :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !FloatInfoRepr fi -> !RoundingMode -> !f (FloatType fi) -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatSub] :: !FloatInfoRepr fi -> !RoundingMode -> !f (FloatType fi) -> !f (FloatType fi) -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatSub] :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !FloatInfoRepr fi -> !RoundingMode -> !f (FloatType fi) -> !f (FloatType fi) -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FloatToBV] :: 1 <= w => !NatRepr w -> !RoundingMode -> !f (FloatType fi) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [FloatToBV] :: forall (w :: Natural) (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. 1 <= w => !NatRepr w -> !RoundingMode -> !f (FloatType fi) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [FloatToBinary] :: 1 <= FloatInfoToBitWidth fi => !FloatInfoRepr fi -> !f (FloatType fi) -> App ext f (BVType (FloatInfoToBitWidth fi))
+ Lang.Crucible.CFG.Expr: [FloatToBinary] :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. 1 <= FloatInfoToBitWidth fi => !FloatInfoRepr fi -> !f (FloatType fi) -> App ext f ('BaseToType (BaseBVType (FloatInfoToBitWidth fi)))
- Lang.Crucible.CFG.Expr: [FloatToReal] :: !f (FloatType fi) -> App ext f RealValType
+ Lang.Crucible.CFG.Expr: [FloatToReal] :: forall (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. !f (FloatType fi) -> App ext f ('BaseToType BaseRealType)
- Lang.Crucible.CFG.Expr: [FloatToSBV] :: 1 <= w => !NatRepr w -> !RoundingMode -> !f (FloatType fi) -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [FloatToSBV] :: forall (w :: Natural) (f :: CrucibleType -> Type) (fi :: FloatInfo) ext. 1 <= w => !NatRepr w -> !RoundingMode -> !f (FloatType fi) -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [FloatUndef] :: !FloatInfoRepr fi -> App ext f (FloatType fi)
+ Lang.Crucible.CFG.Expr: [FloatUndef] :: forall (fi :: FloatInfo) ext (f :: CrucibleType -> Type). !FloatInfoRepr fi -> App ext f ('FloatType fi)
- Lang.Crucible.CFG.Expr: [FromJustValue] :: !TypeRepr tp -> !f (MaybeType tp) -> !f (StringType Unicode) -> App ext f tp
+ Lang.Crucible.CFG.Expr: [FromJustValue] :: forall (tp :: CrucibleType) (f :: CrucibleType -> Type) ext. !TypeRepr tp -> !f (MaybeType tp) -> !f (StringType Unicode) -> App ext f tp
- Lang.Crucible.CFG.Expr: [GetStruct] :: !f (StructType ctx) -> !Index ctx tp -> !TypeRepr tp -> App ext f tp
+ Lang.Crucible.CFG.Expr: [GetStruct] :: forall (f :: CrucibleType -> Type) (ctx :: Ctx CrucibleType) (tp :: CrucibleType) ext. !f (StructType ctx) -> !Index ctx tp -> !TypeRepr tp -> App ext f tp
- Lang.Crucible.CFG.Expr: [HandleLit] :: !FnHandle args ret -> App ext f (FunctionHandleType args ret)
+ Lang.Crucible.CFG.Expr: [HandleLit] :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType) ext (f :: CrucibleType -> Type). !FnHandle args ret -> App ext f ('FunctionHandleType args ret)
- Lang.Crucible.CFG.Expr: [ImagPart] :: !f ComplexRealType -> App ext f RealValType
+ Lang.Crucible.CFG.Expr: [ImagPart] :: forall (f :: CrucibleType -> Type) ext. !f ComplexRealType -> App ext f ('BaseToType BaseRealType)
- Lang.Crucible.CFG.Expr: [InjectVariant] :: !CtxRepr ctx -> !Index ctx tp -> !f tp -> App ext f (VariantType ctx)
+ Lang.Crucible.CFG.Expr: [InjectVariant] :: forall (ctx :: Ctx CrucibleType) (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !CtxRepr ctx -> !Index ctx tp1 -> !f tp1 -> App ext f ('VariantType ctx)
- Lang.Crucible.CFG.Expr: [InsertStringMapEntry] :: !TypeRepr tp -> !f (StringMapType tp) -> !f (StringType Unicode) -> !f (MaybeType tp) -> App ext f (StringMapType tp)
+ Lang.Crucible.CFG.Expr: [InsertStringMapEntry] :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !TypeRepr tp1 -> !f (StringMapType tp1) -> !f (StringType Unicode) -> !f (MaybeType tp1) -> App ext f ('StringMapType tp1)
- Lang.Crucible.CFG.Expr: [InsertWordMap] :: 1 <= w => !NatRepr w -> !BaseTypeRepr tp -> !f (BVType w) -> !f (BaseToType tp) -> !f (WordMapType w tp) -> App ext f (WordMapType w tp)
+ Lang.Crucible.CFG.Expr: [InsertWordMap] :: forall (w :: Natural) (tp1 :: BaseType) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !BaseTypeRepr tp1 -> !f (BVType w) -> !f (BaseToType tp1) -> !f (WordMapType w tp1) -> App ext f ('WordMapType w tp1)
- Lang.Crucible.CFG.Expr: [IntAbs] :: !f IntegerType -> App ext f IntegerType
+ Lang.Crucible.CFG.Expr: [IntAbs] :: forall (f :: CrucibleType -> Type) ext. !f IntegerType -> App ext f ('BaseToType BaseIntegerType)
- Lang.Crucible.CFG.Expr: [IntAdd] :: !f IntegerType -> !f IntegerType -> App ext f IntegerType
+ Lang.Crucible.CFG.Expr: [IntAdd] :: forall (f :: CrucibleType -> Type) ext. !f IntegerType -> !f IntegerType -> App ext f ('BaseToType BaseIntegerType)
- Lang.Crucible.CFG.Expr: [IntDiv] :: !f IntegerType -> !f IntegerType -> App ext f IntegerType
+ Lang.Crucible.CFG.Expr: [IntDiv] :: forall (f :: CrucibleType -> Type) ext. !f IntegerType -> !f IntegerType -> App ext f ('BaseToType BaseIntegerType)
- Lang.Crucible.CFG.Expr: [IntLe] :: !f IntegerType -> !f IntegerType -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [IntLe] :: forall (f :: CrucibleType -> Type) ext. !f IntegerType -> !f IntegerType -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [IntLit] :: !Integer -> App ext f IntegerType
+ Lang.Crucible.CFG.Expr: [IntLit] :: forall ext (f :: CrucibleType -> Type). !Integer -> App ext f ('BaseToType BaseIntegerType)
- Lang.Crucible.CFG.Expr: [IntLt] :: !f IntegerType -> !f IntegerType -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [IntLt] :: forall (f :: CrucibleType -> Type) ext. !f IntegerType -> !f IntegerType -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [IntMod] :: !f IntegerType -> !f IntegerType -> App ext f IntegerType
+ Lang.Crucible.CFG.Expr: [IntMod] :: forall (f :: CrucibleType -> Type) ext. !f IntegerType -> !f IntegerType -> App ext f ('BaseToType BaseIntegerType)
- Lang.Crucible.CFG.Expr: [IntMul] :: !f IntegerType -> !f IntegerType -> App ext f IntegerType
+ Lang.Crucible.CFG.Expr: [IntMul] :: forall (f :: CrucibleType -> Type) ext. !f IntegerType -> !f IntegerType -> App ext f ('BaseToType BaseIntegerType)
- Lang.Crucible.CFG.Expr: [IntNeg] :: !f IntegerType -> App ext f IntegerType
+ Lang.Crucible.CFG.Expr: [IntNeg] :: forall (f :: CrucibleType -> Type) ext. !f IntegerType -> App ext f ('BaseToType BaseIntegerType)
- Lang.Crucible.CFG.Expr: [IntSub] :: !f IntegerType -> !f IntegerType -> App ext f IntegerType
+ Lang.Crucible.CFG.Expr: [IntSub] :: forall (f :: CrucibleType -> Type) ext. !f IntegerType -> !f IntegerType -> App ext f ('BaseToType BaseIntegerType)
- Lang.Crucible.CFG.Expr: [IntegerToBV] :: 1 <= w => NatRepr w -> !f IntegerType -> App ext f (BVType w)
+ Lang.Crucible.CFG.Expr: [IntegerToBV] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => NatRepr w -> !f IntegerType -> App ext f ('BaseToType (BaseBVType w))
- Lang.Crucible.CFG.Expr: [IntegerToReal] :: !f IntegerType -> App ext f RealValType
+ Lang.Crucible.CFG.Expr: [IntegerToReal] :: forall (f :: CrucibleType -> Type) ext. !f IntegerType -> App ext f ('BaseToType BaseRealType)
- Lang.Crucible.CFG.Expr: [IsConcrete] :: !BaseTypeRepr b -> f (BaseToType b) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [IsConcrete] :: forall (b :: BaseType) (f :: CrucibleType -> Type) ext. !BaseTypeRepr b -> f (BaseToType b) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [JustValue] :: !TypeRepr tp -> !f tp -> App ext f (MaybeType tp)
+ Lang.Crucible.CFG.Expr: [JustValue] :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !TypeRepr tp1 -> !f tp1 -> App ext f ('MaybeType tp1)
- Lang.Crucible.CFG.Expr: [LookupStringMapEntry] :: !TypeRepr tp -> !f (StringMapType tp) -> !f (StringType Unicode) -> App ext f (MaybeType tp)
+ Lang.Crucible.CFG.Expr: [LookupStringMapEntry] :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !TypeRepr tp1 -> !f (StringMapType tp1) -> !f (StringType Unicode) -> App ext f ('MaybeType tp1)
- Lang.Crucible.CFG.Expr: [LookupWordMapWithDefault] :: 1 <= w => !BaseTypeRepr tp -> !f (BVType w) -> !f (WordMapType w tp) -> !f (BaseToType tp) -> App ext f (BaseToType tp)
+ Lang.Crucible.CFG.Expr: [LookupWordMapWithDefault] :: forall (w :: Natural) (tp1 :: BaseType) (f :: CrucibleType -> Type) ext. 1 <= w => !BaseTypeRepr tp1 -> !f (BVType w) -> !f (WordMapType w tp1) -> !f (BaseToType tp1) -> App ext f ('BaseToType tp1)
- Lang.Crucible.CFG.Expr: [LookupWordMap] :: 1 <= w => !BaseTypeRepr tp -> !f (BVType w) -> !f (WordMapType w tp) -> App ext f (BaseToType tp)
+ Lang.Crucible.CFG.Expr: [LookupWordMap] :: forall (w :: Natural) (tp1 :: BaseType) (f :: CrucibleType -> Type) ext. 1 <= w => !BaseTypeRepr tp1 -> !f (BVType w) -> !f (WordMapType w tp1) -> App ext f ('BaseToType tp1)
- Lang.Crucible.CFG.Expr: [MkStruct] :: !CtxRepr ctx -> !Assignment f ctx -> App ext f (StructType ctx)
+ Lang.Crucible.CFG.Expr: [MkStruct] :: forall (ctx :: Ctx CrucibleType) (f :: CrucibleType -> Type) ext. !CtxRepr ctx -> !Assignment f ctx -> App ext f ('StructType ctx)
- Lang.Crucible.CFG.Expr: [NatAdd] :: !f NatType -> !f NatType -> App ext f NatType
+ Lang.Crucible.CFG.Expr: [NatAdd] :: forall (f :: CrucibleType -> Type) ext. !f NatType -> !f NatType -> App ext f 'NatType
- Lang.Crucible.CFG.Expr: [NatDiv] :: !f NatType -> !f NatType -> App ext f NatType
+ Lang.Crucible.CFG.Expr: [NatDiv] :: forall (f :: CrucibleType -> Type) ext. !f NatType -> !f NatType -> App ext f 'NatType
- Lang.Crucible.CFG.Expr: [NatEq] :: !f NatType -> !f NatType -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [NatEq] :: forall (f :: CrucibleType -> Type) ext. !f NatType -> !f NatType -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [NatIte] :: !f BoolType -> !f NatType -> !f NatType -> App ext f NatType
+ Lang.Crucible.CFG.Expr: [NatIte] :: forall (f :: CrucibleType -> Type) ext. !f BoolType -> !f NatType -> !f NatType -> App ext f 'NatType
- Lang.Crucible.CFG.Expr: [NatLe] :: !f NatType -> !f NatType -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [NatLe] :: forall (f :: CrucibleType -> Type) ext. !f NatType -> !f NatType -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [NatLit] :: !Natural -> App ext f NatType
+ Lang.Crucible.CFG.Expr: [NatLit] :: forall ext (f :: CrucibleType -> Type). !Natural -> App ext f 'NatType
- Lang.Crucible.CFG.Expr: [NatLt] :: !f NatType -> !f NatType -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [NatLt] :: forall (f :: CrucibleType -> Type) ext. !f NatType -> !f NatType -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [NatMod] :: !f NatType -> !f NatType -> App ext f NatType
+ Lang.Crucible.CFG.Expr: [NatMod] :: forall (f :: CrucibleType -> Type) ext. !f NatType -> !f NatType -> App ext f 'NatType
- Lang.Crucible.CFG.Expr: [NatMul] :: !f NatType -> !f NatType -> App ext f NatType
+ Lang.Crucible.CFG.Expr: [NatMul] :: forall (f :: CrucibleType -> Type) ext. !f NatType -> !f NatType -> App ext f 'NatType
- Lang.Crucible.CFG.Expr: [NatSub] :: !f NatType -> !f NatType -> App ext f NatType
+ Lang.Crucible.CFG.Expr: [NatSub] :: forall (f :: CrucibleType -> Type) ext. !f NatType -> !f NatType -> App ext f 'NatType
- Lang.Crucible.CFG.Expr: [NatToInteger] :: !f NatType -> App ext f IntegerType
+ Lang.Crucible.CFG.Expr: [NatToInteger] :: forall (f :: CrucibleType -> Type) ext. !f NatType -> App ext f ('BaseToType BaseIntegerType)
- Lang.Crucible.CFG.Expr: [Not] :: !f BoolType -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [Not] :: forall (f :: CrucibleType -> Type) ext. !f BoolType -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [NothingValue] :: !TypeRepr tp -> App ext f (MaybeType tp)
+ Lang.Crucible.CFG.Expr: [NothingValue] :: forall (tp1 :: CrucibleType) ext (f :: CrucibleType -> Type). !TypeRepr tp1 -> App ext f ('MaybeType tp1)
- Lang.Crucible.CFG.Expr: [Or] :: !f BoolType -> !f BoolType -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [Or] :: forall (f :: CrucibleType -> Type) ext. !f BoolType -> !f BoolType -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [PackAny] :: !TypeRepr tp -> !f tp -> App ext f AnyType
+ Lang.Crucible.CFG.Expr: [PackAny] :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !TypeRepr tp1 -> !f tp1 -> App ext f 'AnyType
- Lang.Crucible.CFG.Expr: [ProjectVariant] :: !CtxRepr ctx -> !Index ctx tp -> !f (VariantType ctx) -> App ext f (MaybeType tp)
+ Lang.Crucible.CFG.Expr: [ProjectVariant] :: forall (ctx :: Ctx CrucibleType) (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !CtxRepr ctx -> !Index ctx tp1 -> !f (VariantType ctx) -> App ext f ('MaybeType tp1)
- Lang.Crucible.CFG.Expr: [RationalLit] :: !Rational -> App ext f RealValType
+ Lang.Crucible.CFG.Expr: [RationalLit] :: forall ext (f :: CrucibleType -> Type). !Rational -> App ext f ('BaseToType BaseRealType)
- Lang.Crucible.CFG.Expr: [RealAdd] :: !f RealValType -> !f RealValType -> App ext f RealValType
+ Lang.Crucible.CFG.Expr: [RealAdd] :: forall (f :: CrucibleType -> Type) ext. !f RealValType -> !f RealValType -> App ext f ('BaseToType BaseRealType)
- Lang.Crucible.CFG.Expr: [RealCeil] :: !f RealValType -> App ext f IntegerType
+ Lang.Crucible.CFG.Expr: [RealCeil] :: forall (f :: CrucibleType -> Type) ext. !f RealValType -> App ext f ('BaseToType BaseIntegerType)
- Lang.Crucible.CFG.Expr: [RealDiv] :: !f RealValType -> !f RealValType -> App ext f RealValType
+ Lang.Crucible.CFG.Expr: [RealDiv] :: forall (f :: CrucibleType -> Type) ext. !f RealValType -> !f RealValType -> App ext f ('BaseToType BaseRealType)
- Lang.Crucible.CFG.Expr: [RealFloor] :: !f RealValType -> App ext f IntegerType
+ Lang.Crucible.CFG.Expr: [RealFloor] :: forall (f :: CrucibleType -> Type) ext. !f RealValType -> App ext f ('BaseToType BaseIntegerType)
- Lang.Crucible.CFG.Expr: [RealIsInteger] :: !f RealValType -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [RealIsInteger] :: forall (f :: CrucibleType -> Type) ext. !f RealValType -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [RealLe] :: !f RealValType -> !f RealValType -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [RealLe] :: forall (f :: CrucibleType -> Type) ext. !f RealValType -> !f RealValType -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [RealLt] :: !f RealValType -> !f RealValType -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [RealLt] :: forall (f :: CrucibleType -> Type) ext. !f RealValType -> !f RealValType -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [RealMod] :: !f RealValType -> !f RealValType -> App ext f RealValType
+ Lang.Crucible.CFG.Expr: [RealMod] :: forall (f :: CrucibleType -> Type) ext. !f RealValType -> !f RealValType -> App ext f ('BaseToType BaseRealType)
- Lang.Crucible.CFG.Expr: [RealMul] :: !f RealValType -> !f RealValType -> App ext f RealValType
+ Lang.Crucible.CFG.Expr: [RealMul] :: forall (f :: CrucibleType -> Type) ext. !f RealValType -> !f RealValType -> App ext f ('BaseToType BaseRealType)
- Lang.Crucible.CFG.Expr: [RealNeg] :: !f RealValType -> App ext f RealValType
+ Lang.Crucible.CFG.Expr: [RealNeg] :: forall (f :: CrucibleType -> Type) ext. !f RealValType -> App ext f ('BaseToType BaseRealType)
- Lang.Crucible.CFG.Expr: [RealPart] :: !f ComplexRealType -> App ext f RealValType
+ Lang.Crucible.CFG.Expr: [RealPart] :: forall (f :: CrucibleType -> Type) ext. !f ComplexRealType -> App ext f ('BaseToType BaseRealType)
- Lang.Crucible.CFG.Expr: [RealRound] :: !f RealValType -> App ext f IntegerType
+ Lang.Crucible.CFG.Expr: [RealRound] :: forall (f :: CrucibleType -> Type) ext. !f RealValType -> App ext f ('BaseToType BaseIntegerType)
- Lang.Crucible.CFG.Expr: [RealSub] :: !f RealValType -> !f RealValType -> App ext f RealValType
+ Lang.Crucible.CFG.Expr: [RealSub] :: forall (f :: CrucibleType -> Type) ext. !f RealValType -> !f RealValType -> App ext f ('BaseToType BaseRealType)
- Lang.Crucible.CFG.Expr: [RealToNat] :: !f RealValType -> App ext f NatType
+ Lang.Crucible.CFG.Expr: [RealToNat] :: forall (f :: CrucibleType -> Type) ext. !f RealValType -> App ext f 'NatType
- Lang.Crucible.CFG.Expr: [ReferenceEq] :: !TypeRepr tp -> !f (ReferenceType tp) -> !f (ReferenceType tp) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [ReferenceEq] :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !TypeRepr tp1 -> !f (ReferenceType tp1) -> !f (ReferenceType tp1) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [RollRecursive] :: IsRecursiveType nm => !SymbolRepr nm -> !CtxRepr ctx -> !f (UnrollType nm ctx) -> App ext f (RecursiveType nm ctx)
+ Lang.Crucible.CFG.Expr: [RollRecursive] :: forall (nm :: Symbol) (ctx :: Ctx CrucibleType) (f :: CrucibleType -> Type) ext. IsRecursiveType nm => !SymbolRepr nm -> !CtxRepr ctx -> !f (UnrollType nm ctx) -> App ext f ('RecursiveType nm ctx)
- Lang.Crucible.CFG.Expr: [SbvToInteger] :: 1 <= w => !NatRepr w -> !f (BVType w) -> App ext f IntegerType
+ Lang.Crucible.CFG.Expr: [SbvToInteger] :: forall (w :: Natural) (f :: CrucibleType -> Type) ext. 1 <= w => !NatRepr w -> !f (BVType w) -> App ext f ('BaseToType BaseIntegerType)
- Lang.Crucible.CFG.Expr: [SequenceAppend] :: !TypeRepr tp -> !f (SequenceType tp) -> !f (SequenceType tp) -> App ext f (SequenceType tp)
+ Lang.Crucible.CFG.Expr: [SequenceAppend] :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !TypeRepr tp1 -> !f (SequenceType tp1) -> !f (SequenceType tp1) -> App ext f ('SequenceType tp1)
- Lang.Crucible.CFG.Expr: [SequenceCons] :: !TypeRepr tp -> !f tp -> !f (SequenceType tp) -> App ext f (SequenceType tp)
+ Lang.Crucible.CFG.Expr: [SequenceCons] :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !TypeRepr tp1 -> !f tp1 -> !f (SequenceType tp1) -> App ext f ('SequenceType tp1)
- Lang.Crucible.CFG.Expr: [SequenceHead] :: !TypeRepr tp -> !f (SequenceType tp) -> App ext f (MaybeType tp)
+ Lang.Crucible.CFG.Expr: [SequenceHead] :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !TypeRepr tp1 -> !f (SequenceType tp1) -> App ext f ('MaybeType tp1)
- Lang.Crucible.CFG.Expr: [SequenceIsNil] :: !TypeRepr tp -> !f (SequenceType tp) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [SequenceIsNil] :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !TypeRepr tp1 -> !f (SequenceType tp1) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [SequenceLength] :: !TypeRepr tp -> !f (SequenceType tp) -> App ext f NatType
+ Lang.Crucible.CFG.Expr: [SequenceLength] :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !TypeRepr tp1 -> !f (SequenceType tp1) -> App ext f 'NatType
- Lang.Crucible.CFG.Expr: [SequenceNil] :: !TypeRepr tp -> App ext f (SequenceType tp)
+ Lang.Crucible.CFG.Expr: [SequenceNil] :: forall (tp1 :: CrucibleType) ext (f :: CrucibleType -> Type). !TypeRepr tp1 -> App ext f ('SequenceType tp1)
- Lang.Crucible.CFG.Expr: [SequenceTail] :: !TypeRepr tp -> !f (SequenceType tp) -> App ext f (MaybeType (SequenceType tp))
+ Lang.Crucible.CFG.Expr: [SequenceTail] :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !TypeRepr tp1 -> !f (SequenceType tp1) -> App ext f ('MaybeType (SequenceType tp1))
- Lang.Crucible.CFG.Expr: [SequenceUncons] :: !TypeRepr tp -> !f (SequenceType tp) -> App ext f (MaybeType (StructType ((EmptyCtx ::> tp) ::> SequenceType tp)))
+ Lang.Crucible.CFG.Expr: [SequenceUncons] :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !TypeRepr tp1 -> !f (SequenceType tp1) -> App ext f ('MaybeType (StructType (((EmptyCtx :: Ctx CrucibleType) ::> tp1) ::> SequenceType tp1)))
- Lang.Crucible.CFG.Expr: [SetStruct] :: !CtxRepr ctx -> !f (StructType ctx) -> !Index ctx tp -> !f tp -> App ext f (StructType ctx)
+ Lang.Crucible.CFG.Expr: [SetStruct] :: forall (ctx :: Ctx CrucibleType) (f :: CrucibleType -> Type) (tp1 :: CrucibleType) ext. !CtxRepr ctx -> !f (StructType ctx) -> !Index ctx tp1 -> !f tp1 -> App ext f ('StructType ctx)
- Lang.Crucible.CFG.Expr: [ShowFloat] :: !FloatInfoRepr fi -> !f (FloatType fi) -> App ext f (StringType Unicode)
+ Lang.Crucible.CFG.Expr: [ShowFloat] :: forall (fi :: FloatInfo) (f :: CrucibleType -> Type) ext. !FloatInfoRepr fi -> !f (FloatType fi) -> App ext f ('BaseToType (BaseStringType Unicode))
- Lang.Crucible.CFG.Expr: [ShowValue] :: !BaseTypeRepr bt -> !f (BaseToType bt) -> App ext f (StringType Unicode)
+ Lang.Crucible.CFG.Expr: [ShowValue] :: forall (bt :: BaseType) (f :: CrucibleType -> Type) ext. !BaseTypeRepr bt -> !f (BaseToType bt) -> App ext f ('BaseToType (BaseStringType Unicode))
- Lang.Crucible.CFG.Expr: [StringConcat] :: !StringInfoRepr si -> !f (StringType si) -> !f (StringType si) -> App ext f (StringType si)
+ Lang.Crucible.CFG.Expr: [StringConcat] :: forall (si :: StringInfo) (f :: CrucibleType -> Type) ext. !StringInfoRepr si -> !f (StringType si) -> !f (StringType si) -> App ext f ('BaseToType (BaseStringType si))
- Lang.Crucible.CFG.Expr: [StringContains] :: !f (StringType si) -> !f (StringType si) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [StringContains] :: forall (f :: CrucibleType -> Type) (si :: StringInfo) ext. !f (StringType si) -> !f (StringType si) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [StringEmpty] :: !StringInfoRepr si -> App ext f (StringType si)
+ Lang.Crucible.CFG.Expr: [StringEmpty] :: forall (si :: StringInfo) ext (f :: CrucibleType -> Type). !StringInfoRepr si -> App ext f ('BaseToType (BaseStringType si))
- Lang.Crucible.CFG.Expr: [StringIndexOf] :: !f (StringType si) -> !f (StringType si) -> !f IntegerType -> App ext f IntegerType
+ Lang.Crucible.CFG.Expr: [StringIndexOf] :: forall (f :: CrucibleType -> Type) (si :: StringInfo) ext. !f (StringType si) -> !f (StringType si) -> !f IntegerType -> App ext f ('BaseToType BaseIntegerType)
- Lang.Crucible.CFG.Expr: [StringIsPrefixOf] :: !f (StringType si) -> !f (StringType si) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [StringIsPrefixOf] :: forall (f :: CrucibleType -> Type) (si :: StringInfo) ext. !f (StringType si) -> !f (StringType si) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [StringIsSuffixOf] :: !f (StringType si) -> !f (StringType si) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [StringIsSuffixOf] :: forall (f :: CrucibleType -> Type) (si :: StringInfo) ext. !f (StringType si) -> !f (StringType si) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [StringLength] :: !f (StringType si) -> App ext f IntegerType
+ Lang.Crucible.CFG.Expr: [StringLength] :: forall (f :: CrucibleType -> Type) (si :: StringInfo) ext. !f (StringType si) -> App ext f ('BaseToType BaseIntegerType)
- Lang.Crucible.CFG.Expr: [StringLit] :: !StringLiteral si -> App ext f (StringType si)
+ Lang.Crucible.CFG.Expr: [StringLit] :: forall (si :: StringInfo) ext (f :: CrucibleType -> Type). !StringLiteral si -> App ext f ('BaseToType (BaseStringType si))
- Lang.Crucible.CFG.Expr: [StringSubstring] :: !StringInfoRepr si -> !f (StringType si) -> !f IntegerType -> !f IntegerType -> App ext f (StringType si)
+ Lang.Crucible.CFG.Expr: [StringSubstring] :: forall (si :: StringInfo) (f :: CrucibleType -> Type) ext. !StringInfoRepr si -> !f (StringType si) -> !f IntegerType -> !f IntegerType -> App ext f ('BaseToType (BaseStringType si))
- Lang.Crucible.CFG.Expr: [SymArrayLookup] :: !BaseTypeRepr b -> !f (SymbolicArrayType (idx ::> tp) b) -> !Assignment (BaseTerm f) (idx ::> tp) -> App ext f (BaseToType b)
+ Lang.Crucible.CFG.Expr: [SymArrayLookup] :: forall (b :: BaseType) (f :: CrucibleType -> Type) (idx :: Ctx BaseType) (tp1 :: BaseType) ext. !BaseTypeRepr b -> !f (SymbolicArrayType (idx ::> tp1) b) -> !Assignment (BaseTerm f) (idx ::> tp1) -> App ext f ('BaseToType b)
- Lang.Crucible.CFG.Expr: [SymArrayUpdate] :: !BaseTypeRepr b -> !f (SymbolicArrayType (idx ::> itp) b) -> !Assignment (BaseTerm f) (idx ::> itp) -> !f (BaseToType b) -> App ext f (SymbolicArrayType (idx ::> itp) b)
+ Lang.Crucible.CFG.Expr: [SymArrayUpdate] :: forall (b :: BaseType) (f :: CrucibleType -> Type) (idx :: Ctx BaseType) (itp :: BaseType) ext. !BaseTypeRepr b -> !f (SymbolicArrayType (idx ::> itp) b) -> !Assignment (BaseTerm f) (idx ::> itp) -> !f (BaseToType b) -> App ext f ('BaseToType (BaseArrayType (idx ::> itp) b))
- Lang.Crucible.CFG.Expr: [UnpackAny] :: !TypeRepr tp -> !f AnyType -> App ext f (MaybeType tp)
+ Lang.Crucible.CFG.Expr: [UnpackAny] :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !TypeRepr tp1 -> !f AnyType -> App ext f ('MaybeType tp1)
- Lang.Crucible.CFG.Expr: [UnrollRecursive] :: IsRecursiveType nm => !SymbolRepr nm -> !CtxRepr ctx -> !f (RecursiveType nm ctx) -> App ext f (UnrollType nm ctx)
+ Lang.Crucible.CFG.Expr: [UnrollRecursive] :: forall (nm :: Symbol) (ctx :: Ctx CrucibleType) (f :: CrucibleType -> Type) ext. IsRecursiveType nm => !SymbolRepr nm -> !CtxRepr ctx -> !f (RecursiveType nm ctx) -> App ext f (UnrollType nm ctx)
- Lang.Crucible.CFG.Expr: [VectorCons] :: !TypeRepr tp -> !f tp -> !f (VectorType tp) -> App ext f (VectorType tp)
+ Lang.Crucible.CFG.Expr: [VectorCons] :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !TypeRepr tp1 -> !f tp1 -> !f (VectorType tp1) -> App ext f ('VectorType tp1)
- Lang.Crucible.CFG.Expr: [VectorGetEntry] :: !TypeRepr tp -> !f (VectorType tp) -> !f NatType -> App ext f tp
+ Lang.Crucible.CFG.Expr: [VectorGetEntry] :: forall (tp :: CrucibleType) (f :: CrucibleType -> Type) ext. !TypeRepr tp -> !f (VectorType tp) -> !f NatType -> App ext f tp
- Lang.Crucible.CFG.Expr: [VectorIsEmpty] :: !f (VectorType tp) -> App ext f BoolType
+ Lang.Crucible.CFG.Expr: [VectorIsEmpty] :: forall (f :: CrucibleType -> Type) (tp1 :: CrucibleType) ext. !f (VectorType tp1) -> App ext f ('BaseToType BaseBoolType)
- Lang.Crucible.CFG.Expr: [VectorLit] :: !TypeRepr tp -> !Vector (f tp) -> App ext f (VectorType tp)
+ Lang.Crucible.CFG.Expr: [VectorLit] :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !TypeRepr tp1 -> !Vector (f tp1) -> App ext f ('VectorType tp1)
- Lang.Crucible.CFG.Expr: [VectorReplicate] :: !TypeRepr tp -> !f NatType -> !f tp -> App ext f (VectorType tp)
+ Lang.Crucible.CFG.Expr: [VectorReplicate] :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !TypeRepr tp1 -> !f NatType -> !f tp1 -> App ext f ('VectorType tp1)
- Lang.Crucible.CFG.Expr: [VectorSetEntry] :: !TypeRepr tp -> !f (VectorType tp) -> !f NatType -> !f tp -> App ext f (VectorType tp)
+ Lang.Crucible.CFG.Expr: [VectorSetEntry] :: forall (tp1 :: CrucibleType) (f :: CrucibleType -> Type) ext. !TypeRepr tp1 -> !f (VectorType tp1) -> !f NatType -> !f tp1 -> App ext f ('VectorType tp1)
- Lang.Crucible.CFG.Expr: [VectorSize] :: !f (VectorType tp) -> App ext f NatType
+ Lang.Crucible.CFG.Expr: [VectorSize] :: forall (f :: CrucibleType -> Type) (tp1 :: CrucibleType) ext. !f (VectorType tp1) -> App ext f 'NatType
- Lang.Crucible.CFG.Expr: [X86_80Lit] :: !X86_80Val -> App ext f (FloatType X86_80Float)
+ Lang.Crucible.CFG.Expr: [X86_80Lit] :: forall ext (f :: CrucibleType -> Type). !X86_80Val -> App ext f ('FloatType X86_80Float)
- Lang.Crucible.CFG.Expr: [baseTermType] :: BaseTerm (f :: CrucibleType -> Type) tp -> !BaseTypeRepr tp
+ Lang.Crucible.CFG.Expr: [baseTermType] :: BaseTerm (f :: CrucibleType -> Type) (tp :: BaseType) -> !BaseTypeRepr tp
- Lang.Crucible.CFG.Expr: [baseTermVal] :: BaseTerm (f :: CrucibleType -> Type) tp -> !f (BaseToType tp)
+ Lang.Crucible.CFG.Expr: [baseTermVal] :: BaseTerm (f :: CrucibleType -> Type) (tp :: BaseType) -> !f (BaseToType tp)
- Lang.Crucible.CFG.Expr: compareVector :: forall f tp. (forall x y. f x -> f y -> OrderingF x y) -> Vector (f tp) -> Vector (f tp) -> OrderingF Int Int
+ Lang.Crucible.CFG.Expr: compareVector :: forall {k} f (tp :: k). (forall (x :: k) (y :: k). () => f x -> f y -> OrderingF x y) -> Vector (f tp) -> Vector (f tp) -> OrderingF Int Int
- Lang.Crucible.CFG.Expr: data App (ext :: Type) (f :: CrucibleType -> Type) (tp :: CrucibleType)
+ Lang.Crucible.CFG.Expr: data App ext (f :: CrucibleType -> Type) (tp :: CrucibleType)
- Lang.Crucible.CFG.Expr: data BaseTerm (f :: CrucibleType -> Type) tp
+ Lang.Crucible.CFG.Expr: data BaseTerm (f :: CrucibleType -> Type) (tp :: BaseType)
- Lang.Crucible.CFG.Expr: data () => RoundingMode
+ Lang.Crucible.CFG.Expr: data RoundingMode
- Lang.Crucible.CFG.Expr: foldApp :: TraversableFC (ExprExtension ext) => (forall x. f x -> r -> r) -> r -> App ext f tp -> r
+ Lang.Crucible.CFG.Expr: foldApp :: forall ext f r (tp :: CrucibleType). TraversableFC (ExprExtension ext) => (forall (x :: CrucibleType). () => f x -> r -> r) -> r -> App ext f tp -> r
- Lang.Crucible.CFG.Expr: mapApp :: TraversableFC (ExprExtension ext) => (forall u. f u -> g u) -> App ext f tp -> App ext g tp
+ Lang.Crucible.CFG.Expr: mapApp :: forall ext f g (tp :: CrucibleType). TraversableFC (ExprExtension ext) => (forall (u :: CrucibleType). () => f u -> g u) -> App ext f tp -> App ext g tp
- Lang.Crucible.CFG.Expr: pattern BVEq :: () => (1 <= w, tp ~ BoolType) => NatRepr w -> f (BVType w) -> f (BVType w) -> App ext f tp
+ Lang.Crucible.CFG.Expr: pattern BVEq :: forall tp f ext (w :: Natural). () => (1 <= w, tp ~ BoolType) => NatRepr w -> f (BVType w) -> f (BVType w) -> App ext f tp
- Lang.Crucible.CFG.Expr: pattern BVIte :: () => (1 <= w, tp ~ BVType w) => f BoolType -> NatRepr w -> f tp -> f tp -> App ext f tp
+ Lang.Crucible.CFG.Expr: pattern BVIte :: forall tp f ext (w :: Natural). () => (1 <= w, tp ~ BVType w) => f BoolType -> NatRepr w -> f tp -> f tp -> App ext f tp
- Lang.Crucible.CFG.Expr: testVector :: (forall x y. f x -> f y -> Maybe (x :~: y)) -> Vector (f tp) -> Vector (f tp) -> Maybe (Int :~: Int)
+ Lang.Crucible.CFG.Expr: testVector :: forall {k} f (tp :: k). (forall (x :: k) (y :: k). () => f x -> f y -> Maybe (x :~: y)) -> Vector (f tp) -> Vector (f tp) -> Maybe (Int :~: Int)
- Lang.Crucible.CFG.Expr: traverseApp :: forall ext m f g tp. (TraversableFC (ExprExtension ext), Applicative m) => (forall u. f u -> m (g u)) -> App ext f tp -> m (App ext g tp)
+ Lang.Crucible.CFG.Expr: traverseApp :: forall ext m f g (tp :: CrucibleType). (TraversableFC (ExprExtension ext), Applicative m) => (forall (u :: CrucibleType). () => f u -> m (g u)) -> App ext f tp -> m (App ext g tp)
- Lang.Crucible.CFG.Extension: appType :: TypeApp app => app f x -> TypeRepr x
+ Lang.Crucible.CFG.Extension: appType :: forall (f :: CrucibleType -> Type) (x :: CrucibleType). TypeApp app => app f x -> TypeRepr x
- Lang.Crucible.CFG.Extension: class (OrdFC (ExprExtension ext), TraversableFC (ExprExtension ext), PrettyApp (ExprExtension ext), TypeApp (ExprExtension ext), TraversableFC (StmtExtension ext), PrettyApp (StmtExtension ext), TypeApp (StmtExtension ext)) => IsSyntaxExtension ext
+ Lang.Crucible.CFG.Extension: class (OrdFC ExprExtension ext, TraversableFC ExprExtension ext, PrettyApp ExprExtension ext, TypeApp ExprExtension ext, TraversableFC StmtExtension ext, PrettyApp StmtExtension ext, TypeApp StmtExtension ext) => IsSyntaxExtension ext
- Lang.Crucible.CFG.Extension: class PrettyApp (app :: (k -> Type) -> k -> Type)
+ Lang.Crucible.CFG.Extension: class PrettyApp (app :: k -> Type -> k -> Type)
- Lang.Crucible.CFG.Extension: class TypeApp (app :: (CrucibleType -> Type) -> CrucibleType -> Type)
+ Lang.Crucible.CFG.Extension: class TypeApp (app :: CrucibleType -> Type -> CrucibleType -> Type)
- Lang.Crucible.CFG.Extension: data EmptyExprExtension :: (CrucibleType -> Type) -> (CrucibleType -> Type)
+ Lang.Crucible.CFG.Extension: data EmptyExprExtension (a :: CrucibleType -> Type) (b :: CrucibleType)
- Lang.Crucible.CFG.Extension: data EmptyStmtExtension :: (CrucibleType -> Type) -> (CrucibleType -> Type)
+ Lang.Crucible.CFG.Extension: data EmptyStmtExtension (a :: CrucibleType -> Type) (b :: CrucibleType)
- Lang.Crucible.CFG.Extension: ppApp :: forall f ann. PrettyApp app => (forall x. f x -> Doc ann) -> forall x. app f x -> Doc ann
+ Lang.Crucible.CFG.Extension: ppApp :: PrettyApp app => (forall (x :: k). () => f x -> Doc ann) -> forall (x :: k). () => app f x -> Doc ann
- Lang.Crucible.CFG.Extension: type PrettyExt ext = (PrettyApp (ExprExtension ext), PrettyApp (StmtExtension ext))
+ Lang.Crucible.CFG.Extension: type PrettyExt ext = (PrettyApp ExprExtension ext, PrettyApp StmtExtension ext)
- Lang.Crucible.CFG.Extension: type TraverseExt ext = (TraversableFC (ExprExtension ext), TraversableFC (StmtExtension ext))
+ Lang.Crucible.CFG.Extension: type TraverseExt ext = (TraversableFC ExprExtension ext, TraversableFC StmtExtension ext)
- Lang.Crucible.CFG.Extension: type family StmtExtension (ext :: Type) :: (CrucibleType -> Type) -> (CrucibleType -> Type)
+ Lang.Crucible.CFG.Extension: type family StmtExtension ext :: CrucibleType -> Type -> CrucibleType -> Type
- Lang.Crucible.CFG.ExtractSubgraph: extractSubgraph :: (KnownCtx TypeRepr init, KnownRepr TypeRepr ret) => CFG ext blocks init ret -> Set (BlockID blocks (EmptyCtx ::> ret)) -> BlockID blocks init -> HandleAllocator -> IO (Maybe (SomeCFG ext init ret))
+ Lang.Crucible.CFG.ExtractSubgraph: extractSubgraph :: forall (init :: Ctx CrucibleType) (ret :: CrucibleType) ext (blocks :: Ctx (Ctx CrucibleType)). (KnownCtx TypeRepr init, KnownRepr TypeRepr ret) => CFG ext blocks init ret -> Set (BlockID blocks ((EmptyCtx :: Ctx CrucibleType) ::> ret)) -> BlockID blocks init -> HandleAllocator -> IO (Maybe (SomeCFG ext init ret))
- Lang.Crucible.CFG.Generator: LambdaLabel :: !Nonce s tp -> Atom s tp -> LambdaLabel (s :: Type) (tp :: CrucibleType)
+ Lang.Crucible.CFG.Generator: LambdaLabel :: !Nonce s tp -> Atom s tp -> LambdaLabel s (tp :: CrucibleType)
- Lang.Crucible.CFG.Generator: SomeCFG :: !CFG ext s init ret -> SomeCFG ext init ret
+ Lang.Crucible.CFG.Generator: SomeCFG :: !CFG ext s init ret -> SomeCFG ext (init :: Ctx CrucibleType) (ret :: CrucibleType)
- Lang.Crucible.CFG.Generator: [Br] :: !Atom s BoolType -> !Label s -> !Label s -> TermStmt s ret
+ Lang.Crucible.CFG.Generator: [Br] :: forall s (ret :: CrucibleType). !Atom s BoolType -> !Label s -> !Label s -> TermStmt s ret
- Lang.Crucible.CFG.Generator: [Call] :: !Atom s (FunctionHandleType args ret) -> !Assignment (Atom s) args -> !TypeRepr ret -> AtomValue ext s ret
+ Lang.Crucible.CFG.Generator: [Call] :: forall s (args :: Ctx CrucibleType) (tp :: CrucibleType) ext. !Atom s (FunctionHandleType args tp) -> !Assignment (Atom s) args -> !TypeRepr tp -> AtomValue ext s tp
- Lang.Crucible.CFG.Generator: [ErrorStmt] :: !Atom s (StringType Unicode) -> TermStmt s ret
+ Lang.Crucible.CFG.Generator: [ErrorStmt] :: forall s (ret :: CrucibleType). !Atom s (StringType Unicode) -> TermStmt s ret
- Lang.Crucible.CFG.Generator: [EvalApp] :: !App ext (Atom s) tp -> AtomValue ext s tp
+ Lang.Crucible.CFG.Generator: [EvalApp] :: forall ext s (tp :: CrucibleType). !App ext (Atom s) tp -> AtomValue ext s tp
- Lang.Crucible.CFG.Generator: [EvalExt] :: !StmtExtension ext (Atom s) tp -> AtomValue ext s tp
+ Lang.Crucible.CFG.Generator: [EvalExt] :: forall ext s (tp :: CrucibleType). !StmtExtension ext (Atom s) tp -> AtomValue ext s tp
- Lang.Crucible.CFG.Generator: [FreshConstant] :: !BaseTypeRepr bt -> !Maybe SolverSymbol -> AtomValue ext s (BaseToType bt)
+ Lang.Crucible.CFG.Generator: [FreshConstant] :: forall (bt :: BaseType) ext s. !BaseTypeRepr bt -> !Maybe SolverSymbol -> AtomValue ext s ('BaseToType bt)
- Lang.Crucible.CFG.Generator: [FreshFloat] :: !FloatInfoRepr fi -> !Maybe SolverSymbol -> AtomValue ext s (FloatType fi)
+ Lang.Crucible.CFG.Generator: [FreshFloat] :: forall (fi :: FloatInfo) ext s. !FloatInfoRepr fi -> !Maybe SolverSymbol -> AtomValue ext s ('FloatType fi)
- Lang.Crucible.CFG.Generator: [FreshNat] :: !Maybe SolverSymbol -> AtomValue ext s NatType
+ Lang.Crucible.CFG.Generator: [FreshNat] :: forall ext s. !Maybe SolverSymbol -> AtomValue ext s 'NatType
- Lang.Crucible.CFG.Generator: [Jump] :: !Label s -> TermStmt s ret
+ Lang.Crucible.CFG.Generator: [Jump] :: forall s (ret :: CrucibleType). !Label s -> TermStmt s ret
- Lang.Crucible.CFG.Generator: [LabelID] :: Label s -> BlockID s
+ Lang.Crucible.CFG.Generator: [LabelID] :: forall s. Label s -> BlockID s
- Lang.Crucible.CFG.Generator: [LambdaID] :: LambdaLabel s tp -> BlockID s
+ Lang.Crucible.CFG.Generator: [LambdaID] :: forall s (tp :: CrucibleType). LambdaLabel s tp -> BlockID s
- Lang.Crucible.CFG.Generator: [MaybeBranch] :: !TypeRepr tp -> !Atom s (MaybeType tp) -> !LambdaLabel s tp -> !Label s -> TermStmt s ret
+ Lang.Crucible.CFG.Generator: [MaybeBranch] :: forall (tp :: CrucibleType) s (ret :: CrucibleType). !TypeRepr tp -> !Atom s (MaybeType tp) -> !LambdaLabel s tp -> !Label s -> TermStmt s ret
- Lang.Crucible.CFG.Generator: [NewEmptyRef] :: !TypeRepr tp -> AtomValue ext s (ReferenceType tp)
+ Lang.Crucible.CFG.Generator: [NewEmptyRef] :: forall (tp1 :: CrucibleType) ext s. !TypeRepr tp1 -> AtomValue ext s ('ReferenceType tp1)
- Lang.Crucible.CFG.Generator: [NewRef] :: !Atom s tp -> AtomValue ext s (ReferenceType tp)
+ Lang.Crucible.CFG.Generator: [NewRef] :: forall s (tp1 :: CrucibleType) ext. !Atom s tp1 -> AtomValue ext s ('ReferenceType tp1)
- Lang.Crucible.CFG.Generator: [Output] :: !LambdaLabel s tp -> !Atom s tp -> TermStmt s ret
+ Lang.Crucible.CFG.Generator: [Output] :: forall s (tp :: CrucibleType) (ret :: CrucibleType). !LambdaLabel s tp -> !Atom s tp -> TermStmt s ret
- Lang.Crucible.CFG.Generator: [ReadGlobal] :: !GlobalVar tp -> AtomValue ext s tp
+ Lang.Crucible.CFG.Generator: [ReadGlobal] :: forall (tp :: CrucibleType) ext s. !GlobalVar tp -> AtomValue ext s tp
- Lang.Crucible.CFG.Generator: [ReadRef] :: !Atom s (ReferenceType tp) -> AtomValue ext s tp
+ Lang.Crucible.CFG.Generator: [ReadRef] :: forall s (tp :: CrucibleType) ext. !Atom s (ReferenceType tp) -> AtomValue ext s tp
- Lang.Crucible.CFG.Generator: [ReadReg] :: !Reg s tp -> AtomValue ext s tp
+ Lang.Crucible.CFG.Generator: [ReadReg] :: forall s (tp :: CrucibleType) ext. !Reg s tp -> AtomValue ext s tp
- Lang.Crucible.CFG.Generator: [Return] :: !Atom s ret -> TermStmt s ret
+ Lang.Crucible.CFG.Generator: [Return] :: forall s (ret :: CrucibleType). !Atom s ret -> TermStmt s ret
- Lang.Crucible.CFG.Generator: [TailCall] :: !Atom s (FunctionHandleType args ret) -> !CtxRepr args -> !Assignment (Atom s) args -> TermStmt s ret
+ Lang.Crucible.CFG.Generator: [TailCall] :: forall s (args :: Ctx CrucibleType) (ret :: CrucibleType). !Atom s (FunctionHandleType args ret) -> !CtxRepr args -> !Assignment (Atom s) args -> TermStmt s ret
- Lang.Crucible.CFG.Generator: [VariantElim] :: !CtxRepr varctx -> !Atom s (VariantType varctx) -> !Assignment (LambdaLabel s) varctx -> TermStmt s ret
+ Lang.Crucible.CFG.Generator: [VariantElim] :: forall (varctx :: Ctx CrucibleType) s (ret :: CrucibleType). !CtxRepr varctx -> !Atom s (VariantType varctx) -> !Assignment (LambdaLabel s) varctx -> TermStmt s ret
- Lang.Crucible.CFG.Generator: [lambdaAtom] :: LambdaLabel (s :: Type) (tp :: CrucibleType) -> Atom s tp
+ Lang.Crucible.CFG.Generator: [lambdaAtom] :: LambdaLabel s (tp :: CrucibleType) -> Atom s tp
- Lang.Crucible.CFG.Generator: [lambdaId] :: LambdaLabel (s :: Type) (tp :: CrucibleType) -> !Nonce s tp
+ Lang.Crucible.CFG.Generator: [lambdaId] :: LambdaLabel s (tp :: CrucibleType) -> !Nonce s tp
- Lang.Crucible.CFG.Generator: addBreakpointStmt :: (Monad m, IsSyntaxExtension ext) => Text -> Assignment (Value s) args -> Generator ext s t r m ()
+ Lang.Crucible.CFG.Generator: addBreakpointStmt :: forall (m :: Type -> Type) ext s (args :: Ctx CrucibleType) (t :: Type -> Type) (r :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Text -> Assignment (Value s) args -> Generator ext s t r m ()
- Lang.Crucible.CFG.Generator: addPrintStmt :: (Monad m, IsSyntaxExtension ext) => Expr ext s (StringType Unicode) -> Generator ext s t ret m ()
+ Lang.Crucible.CFG.Generator: addPrintStmt :: forall (m :: Type -> Type) ext s (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Expr ext s (StringType Unicode) -> Generator ext s t ret m ()
- Lang.Crucible.CFG.Generator: assertExpr :: (Monad m, IsSyntaxExtension ext) => Expr ext s BoolType -> Expr ext s (StringType Unicode) -> Generator ext s t ret m ()
+ Lang.Crucible.CFG.Generator: assertExpr :: forall (m :: Type -> Type) ext s (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Expr ext s BoolType -> Expr ext s (StringType Unicode) -> Generator ext s t ret m ()
- Lang.Crucible.CFG.Generator: assertedJustExpr :: (Monad m, IsSyntaxExtension ext) => Expr ext s (MaybeType tp) -> Expr ext s (StringType Unicode) -> Generator ext s t ret m (Expr ext s tp)
+ Lang.Crucible.CFG.Generator: assertedJustExpr :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Expr ext s (MaybeType tp) -> Expr ext s (StringType Unicode) -> Generator ext s t ret m (Expr ext s tp)
- Lang.Crucible.CFG.Generator: assignReg :: (Monad m, IsSyntaxExtension ext) => Reg s tp -> Expr ext s tp -> Generator ext s t ret m ()
+ Lang.Crucible.CFG.Generator: assignReg :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Reg s tp -> Expr ext s tp -> Generator ext s t ret m ()
- Lang.Crucible.CFG.Generator: assumeExpr :: (Monad m, IsSyntaxExtension ext) => Expr ext s BoolType -> Expr ext s (StringType Unicode) -> Generator ext s t ret m ()
+ Lang.Crucible.CFG.Generator: assumeExpr :: forall (m :: Type -> Type) ext s (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Expr ext s BoolType -> Expr ext s (StringType Unicode) -> Generator ext s t ret m ()
- Lang.Crucible.CFG.Generator: branch :: (Monad m, IsSyntaxExtension ext) => Expr ext s BoolType -> Label s -> Label s -> Generator ext s t ret m a
+ Lang.Crucible.CFG.Generator: branch :: forall (m :: Type -> Type) ext s (t :: Type -> Type) (ret :: CrucibleType) a. (Monad m, IsSyntaxExtension ext) => Expr ext s BoolType -> Label s -> Label s -> Generator ext s t ret m a
- Lang.Crucible.CFG.Generator: branchMaybe :: (Monad m, IsSyntaxExtension ext) => Expr ext s (MaybeType tp) -> LambdaLabel s tp -> Label s -> Generator ext s t ret m a
+ Lang.Crucible.CFG.Generator: branchMaybe :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType) a. (Monad m, IsSyntaxExtension ext) => Expr ext s (MaybeType tp) -> LambdaLabel s tp -> Label s -> Generator ext s t ret m a
- Lang.Crucible.CFG.Generator: branchVariant :: (Monad m, IsSyntaxExtension ext) => Expr ext s (VariantType varctx) -> Assignment (LambdaLabel s) varctx -> Generator ext s t ret m a
+ Lang.Crucible.CFG.Generator: branchVariant :: forall (m :: Type -> Type) ext s (varctx :: Ctx CrucibleType) (t :: Type -> Type) (ret :: CrucibleType) a. (Monad m, IsSyntaxExtension ext) => Expr ext s (VariantType varctx) -> Assignment (LambdaLabel s) varctx -> Generator ext s t ret m a
- Lang.Crucible.CFG.Generator: call :: (Monad m, IsSyntaxExtension ext) => Expr ext s (FunctionHandleType args ret) -> Assignment (Expr ext s) args -> Generator ext s t r m (Expr ext s ret)
+ Lang.Crucible.CFG.Generator: call :: forall (m :: Type -> Type) ext s (args :: Ctx CrucibleType) (ret :: CrucibleType) (t :: Type -> Type) (r :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Expr ext s (FunctionHandleType args ret) -> Assignment (Expr ext s) args -> Generator ext s t r m (Expr ext s ret)
- Lang.Crucible.CFG.Generator: caseMaybe :: (Monad m, IsSyntaxExtension ext) => Expr ext s (MaybeType tp) -> TypeRepr r -> MatchMaybe (Expr ext s tp) (Generator ext s t ret m (Expr ext s r)) -> Generator ext s t ret m (Expr ext s r)
+ Lang.Crucible.CFG.Generator: caseMaybe :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (r :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Expr ext s (MaybeType tp) -> TypeRepr r -> MatchMaybe (Expr ext s tp) (Generator ext s t ret m (Expr ext s r)) -> Generator ext s t ret m (Expr ext s r)
- Lang.Crucible.CFG.Generator: caseMaybe_ :: (Monad m, IsSyntaxExtension ext) => Expr ext s (MaybeType tp) -> MatchMaybe (Expr ext s tp) (Generator ext s t ret m ()) -> Generator ext s t ret m ()
+ Lang.Crucible.CFG.Generator: caseMaybe_ :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Expr ext s (MaybeType tp) -> MatchMaybe (Expr ext s tp) (Generator ext s t ret m ()) -> Generator ext s t ret m ()
- Lang.Crucible.CFG.Generator: cfgArgTypes :: CFG ext s init ret -> CtxRepr init
+ Lang.Crucible.CFG.Generator: cfgArgTypes :: forall ext s (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext s init ret -> CtxRepr init
- Lang.Crucible.CFG.Generator: cfgEntryBlock :: CFG ext s init ret -> Block ext s ret
+ Lang.Crucible.CFG.Generator: cfgEntryBlock :: forall ext s (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext s init ret -> Block ext s ret
- Lang.Crucible.CFG.Generator: cfgInputTypes :: CFG ext s init ret -> CtxRepr init
+ Lang.Crucible.CFG.Generator: cfgInputTypes :: forall ext s (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext s init ret -> CtxRepr init
- Lang.Crucible.CFG.Generator: cfgReturnType :: CFG ext s init ret -> TypeRepr ret
+ Lang.Crucible.CFG.Generator: cfgReturnType :: forall ext s (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext s init ret -> TypeRepr ret
- Lang.Crucible.CFG.Generator: continue :: (Monad m, IsSyntaxExtension ext) => Label s -> (forall a. Generator ext s t ret m a) -> Generator ext s t ret m ()
+ Lang.Crucible.CFG.Generator: continue :: forall (m :: Type -> Type) ext s (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Label s -> (forall a. () => Generator ext s t ret m a) -> Generator ext s t ret m ()
- Lang.Crucible.CFG.Generator: continueLambda :: (Monad m, IsSyntaxExtension ext) => LambdaLabel s tp -> (forall a. Generator ext s t ret m a) -> Generator ext s t ret m (Expr ext s tp)
+ Lang.Crucible.CFG.Generator: continueLambda :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => LambdaLabel s tp -> (forall a. () => Generator ext s t ret m a) -> Generator ext s t ret m (Expr ext s tp)
- Lang.Crucible.CFG.Generator: currentBlockID :: Generator ext s t ret m (BlockID s)
+ Lang.Crucible.CFG.Generator: currentBlockID :: forall ext s (t :: Type -> Type) (ret :: CrucibleType) (m :: Type -> Type). Generator ext s t ret m (BlockID s)
- Lang.Crucible.CFG.Generator: data BlockID (s :: Type)
+ Lang.Crucible.CFG.Generator: data BlockID s
- Lang.Crucible.CFG.Generator: data () => Ctx k
+ Lang.Crucible.CFG.Generator: data Ctx k
- Lang.Crucible.CFG.Generator: data Generator ext s (t :: Type -> Type) (ret :: CrucibleType) m a
+ Lang.Crucible.CFG.Generator: data Generator ext s (t :: Type -> Type) (ret :: CrucibleType) (m :: Type -> Type) a
- Lang.Crucible.CFG.Generator: data LambdaLabel (s :: Type) (tp :: CrucibleType)
+ Lang.Crucible.CFG.Generator: data LambdaLabel s (tp :: CrucibleType)
- Lang.Crucible.CFG.Generator: data () => Position
+ Lang.Crucible.CFG.Generator: data Position
- Lang.Crucible.CFG.Generator: data SomeCFG ext init ret
+ Lang.Crucible.CFG.Generator: data SomeCFG ext (init :: Ctx CrucibleType) (ret :: CrucibleType)
- Lang.Crucible.CFG.Generator: defineBlock :: (Monad m, IsSyntaxExtension ext) => Label s -> (forall a. Generator ext s t ret m a) -> Generator ext s t ret m ()
+ Lang.Crucible.CFG.Generator: defineBlock :: forall (m :: Type -> Type) ext s (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Label s -> (forall a. () => Generator ext s t ret m a) -> Generator ext s t ret m ()
- Lang.Crucible.CFG.Generator: defineBlockLabel :: (Monad m, IsSyntaxExtension ext) => (forall a. Generator ext s t ret m a) -> Generator ext s t ret m (Label s)
+ Lang.Crucible.CFG.Generator: defineBlockLabel :: forall (m :: Type -> Type) ext s (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => (forall a. () => Generator ext s t ret m a) -> Generator ext s t ret m (Label s)
- Lang.Crucible.CFG.Generator: defineFunction :: (Monad m, IsSyntaxExtension ext) => Position -> Some (NonceGenerator m) -> FnHandle init ret -> FunctionDef ext t init ret m -> m (SomeCFG ext init ret, [AnyCFG ext])
+ Lang.Crucible.CFG.Generator: defineFunction :: forall m ext (init :: Ctx CrucibleType) (ret :: CrucibleType) (t :: Type -> Type). (Monad m, IsSyntaxExtension ext) => Position -> Some (NonceGenerator m) -> FnHandle init ret -> FunctionDef ext t init ret m -> m (SomeCFG ext init ret, [AnyCFG ext])
- Lang.Crucible.CFG.Generator: defineFunctionOpt :: (Monad m, IsSyntaxExtension ext) => Position -> Some (NonceGenerator m) -> FnHandle init ret -> FunctionDef ext t init ret m -> (forall s. NonceGenerator m s -> CFG ext s init ret -> m (CFG ext s init ret)) -> m (SomeCFG ext init ret, [AnyCFG ext])
+ Lang.Crucible.CFG.Generator: defineFunctionOpt :: forall m ext (init :: Ctx CrucibleType) (ret :: CrucibleType) (t :: Type -> Type). (Monad m, IsSyntaxExtension ext) => Position -> Some (NonceGenerator m) -> FnHandle init ret -> FunctionDef ext t init ret m -> (forall s. () => NonceGenerator m s -> CFG ext s init ret -> m (CFG ext s init ret)) -> m (SomeCFG ext init ret, [AnyCFG ext])
- Lang.Crucible.CFG.Generator: defineLambdaBlock :: (Monad m, IsSyntaxExtension ext) => LambdaLabel s tp -> (forall a. Expr ext s tp -> Generator ext s t ret m a) -> Generator ext s t ret m ()
+ Lang.Crucible.CFG.Generator: defineLambdaBlock :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => LambdaLabel s tp -> (forall a. () => Expr ext s tp -> Generator ext s t ret m a) -> Generator ext s t ret m ()
- Lang.Crucible.CFG.Generator: dropRef :: (Monad m, IsSyntaxExtension ext) => Expr ext s (ReferenceType tp) -> Generator ext s t ret m ()
+ Lang.Crucible.CFG.Generator: dropRef :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Expr ext s (ReferenceType tp) -> Generator ext s t ret m ()
- Lang.Crucible.CFG.Generator: exprType :: IsExpr e => e tp -> TypeRepr tp
+ Lang.Crucible.CFG.Generator: exprType :: forall (tp :: CrucibleType). IsExpr e => e tp -> TypeRepr tp
- Lang.Crucible.CFG.Generator: extensionStmt :: (Monad m, IsSyntaxExtension ext) => StmtExtension ext (Expr ext s) tp -> Generator ext s t ret m (Expr ext s tp)
+ Lang.Crucible.CFG.Generator: extensionStmt :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => StmtExtension ext (Expr ext s) tp -> Generator ext s t ret m (Expr ext s tp)
- Lang.Crucible.CFG.Generator: foldStmtInputs :: TraverseExt ext => (forall x. Value s x -> b -> b) -> Stmt ext s -> b -> b
+ Lang.Crucible.CFG.Generator: foldStmtInputs :: TraverseExt ext => (forall (x :: CrucibleType). () => Value s x -> b -> b) -> Stmt ext s -> b -> b
- Lang.Crucible.CFG.Generator: forceEvaluation :: (Monad m, IsSyntaxExtension ext) => Expr ext s tp -> Generator ext s t ret m (Expr ext s tp)
+ Lang.Crucible.CFG.Generator: forceEvaluation :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Expr ext s tp -> Generator ext s t ret m (Expr ext s tp)
- Lang.Crucible.CFG.Generator: freshGlobalVar :: HandleAllocator -> Text -> TypeRepr tp -> IO (GlobalVar tp)
+ Lang.Crucible.CFG.Generator: freshGlobalVar :: forall (tp :: CrucibleType). HandleAllocator -> Text -> TypeRepr tp -> IO (GlobalVar tp)
- Lang.Crucible.CFG.Generator: fromJustExpr :: (Monad m, IsSyntaxExtension ext) => Expr ext s (MaybeType tp) -> Expr ext s (StringType Unicode) -> Generator ext s t ret m (Expr ext s tp)
+ Lang.Crucible.CFG.Generator: fromJustExpr :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Expr ext s (MaybeType tp) -> Expr ext s (StringType Unicode) -> Generator ext s t ret m (Expr ext s tp)
- Lang.Crucible.CFG.Generator: getPosition :: Generator ext s t ret m Position
+ Lang.Crucible.CFG.Generator: getPosition :: forall ext s (t :: Type -> Type) (ret :: CrucibleType) (m :: Type -> Type). Generator ext s t ret m Position
- Lang.Crucible.CFG.Generator: ifte :: (Monad m, IsSyntaxExtension ext, KnownRepr TypeRepr tp) => Expr ext s BoolType -> Generator ext s t ret m (Expr ext s tp) -> Generator ext s t ret m (Expr ext s tp) -> Generator ext s t ret m (Expr ext s tp)
+ Lang.Crucible.CFG.Generator: ifte :: forall (m :: Type -> Type) ext (tp :: CrucibleType) s (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext, KnownRepr TypeRepr tp) => Expr ext s BoolType -> Generator ext s t ret m (Expr ext s tp) -> Generator ext s t ret m (Expr ext s tp) -> Generator ext s t ret m (Expr ext s tp)
- Lang.Crucible.CFG.Generator: ifte' :: (Monad m, IsSyntaxExtension ext) => TypeRepr tp -> Expr ext s BoolType -> Generator ext s t ret m (Expr ext s tp) -> Generator ext s t ret m (Expr ext s tp) -> Generator ext s t ret m (Expr ext s tp)
+ Lang.Crucible.CFG.Generator: ifte' :: forall (m :: Type -> Type) ext (tp :: CrucibleType) s (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => TypeRepr tp -> Expr ext s BoolType -> Generator ext s t ret m (Expr ext s tp) -> Generator ext s t ret m (Expr ext s tp) -> Generator ext s t ret m (Expr ext s tp)
- Lang.Crucible.CFG.Generator: ifteM :: (Monad m, IsSyntaxExtension ext, KnownRepr TypeRepr tp) => Generator ext s t ret m (Expr ext s BoolType) -> Generator ext s t ret m (Expr ext s tp) -> Generator ext s t ret m (Expr ext s tp) -> Generator ext s t ret m (Expr ext s tp)
+ Lang.Crucible.CFG.Generator: ifteM :: forall (m :: Type -> Type) ext (tp :: CrucibleType) s (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext, KnownRepr TypeRepr tp) => Generator ext s t ret m (Expr ext s BoolType) -> Generator ext s t ret m (Expr ext s tp) -> Generator ext s t ret m (Expr ext s tp) -> Generator ext s t ret m (Expr ext s tp)
- Lang.Crucible.CFG.Generator: ifte_ :: (Monad m, IsSyntaxExtension ext) => Expr ext s BoolType -> Generator ext s t ret m () -> Generator ext s t ret m () -> Generator ext s t ret m ()
+ Lang.Crucible.CFG.Generator: ifte_ :: forall (m :: Type -> Type) ext s (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Expr ext s BoolType -> Generator ext s t ret m () -> Generator ext s t ret m () -> Generator ext s t ret m ()
- Lang.Crucible.CFG.Generator: jump :: (Monad m, IsSyntaxExtension ext) => Label s -> Generator ext s t ret m a
+ Lang.Crucible.CFG.Generator: jump :: forall (m :: Type -> Type) ext s (t :: Type -> Type) (ret :: CrucibleType) a. (Monad m, IsSyntaxExtension ext) => Label s -> Generator ext s t ret m a
- Lang.Crucible.CFG.Generator: jumpToLambda :: (Monad m, IsSyntaxExtension ext) => LambdaLabel s tp -> Expr ext s tp -> Generator ext s t ret m a
+ Lang.Crucible.CFG.Generator: jumpToLambda :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType) a. (Monad m, IsSyntaxExtension ext) => LambdaLabel s tp -> Expr ext s tp -> Generator ext s t ret m a
- Lang.Crucible.CFG.Generator: mapStmtAtom :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). Atom s x -> m (Atom s x)) -> Stmt ext s -> m (Stmt ext s)
+ Lang.Crucible.CFG.Generator: mapStmtAtom :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). () => Atom s x -> m (Atom s x)) -> Stmt ext s -> m (Stmt ext s)
- Lang.Crucible.CFG.Generator: mkAtom :: (Monad m, IsSyntaxExtension ext) => Expr ext s tp -> Generator ext s t ret m (Atom s tp)
+ Lang.Crucible.CFG.Generator: mkAtom :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Expr ext s tp -> Generator ext s t ret m (Atom s tp)
- Lang.Crucible.CFG.Generator: mkBlock :: forall ext s ret. TraverseExt ext => BlockID s -> ValueSet s -> Seq (Posd (Stmt ext s)) -> Posd (TermStmt s ret) -> Block ext s ret
+ Lang.Crucible.CFG.Generator: mkBlock :: forall ext s (ret :: CrucibleType). TraverseExt ext => BlockID s -> ValueSet s -> Seq (Posd (Stmt ext s)) -> Posd (TermStmt s ret) -> Block ext s ret
- Lang.Crucible.CFG.Generator: mkFresh :: (Monad m, IsSyntaxExtension ext) => BaseTypeRepr tp -> Maybe SolverSymbol -> Generator ext s t ret m (Atom s (BaseToType tp))
+ Lang.Crucible.CFG.Generator: mkFresh :: forall (m :: Type -> Type) ext (tp :: BaseType) s (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => BaseTypeRepr tp -> Maybe SolverSymbol -> Generator ext s t ret m (Atom s (BaseToType tp))
- Lang.Crucible.CFG.Generator: mkFreshFloat :: (Monad m, IsSyntaxExtension ext) => FloatInfoRepr fi -> Maybe SolverSymbol -> Generator ext s t ret m (Atom s (FloatType fi))
+ Lang.Crucible.CFG.Generator: mkFreshFloat :: forall (m :: Type -> Type) ext (fi :: FloatInfo) s (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => FloatInfoRepr fi -> Maybe SolverSymbol -> Generator ext s t ret m (Atom s (FloatType fi))
- Lang.Crucible.CFG.Generator: mkInputAtoms :: forall m s init. Monad m => NonceGenerator m s -> Position -> CtxRepr init -> m (Assignment (Atom s) init)
+ Lang.Crucible.CFG.Generator: mkInputAtoms :: forall m s (init :: Ctx CrucibleType). Monad m => NonceGenerator m s -> Position -> CtxRepr init -> m (Assignment (Atom s) init)
- Lang.Crucible.CFG.Generator: modifyReg :: (Monad m, IsSyntaxExtension ext) => Reg s tp -> (Expr ext s tp -> Expr ext s tp) -> Generator ext s t ret m ()
+ Lang.Crucible.CFG.Generator: modifyReg :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Reg s tp -> (Expr ext s tp -> Expr ext s tp) -> Generator ext s t ret m ()
- Lang.Crucible.CFG.Generator: modifyRegM :: (Monad m, IsSyntaxExtension ext) => Reg s tp -> (Expr ext s tp -> Generator ext s t ret m (Expr ext s tp)) -> Generator ext s t ret m ()
+ Lang.Crucible.CFG.Generator: modifyRegM :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Reg s tp -> (Expr ext s tp -> Generator ext s t ret m (Expr ext s tp)) -> Generator ext s t ret m ()
- Lang.Crucible.CFG.Generator: newEmptyRef :: (Monad m, IsSyntaxExtension ext) => TypeRepr tp -> Generator ext s t ret m (Expr ext s (ReferenceType tp))
+ Lang.Crucible.CFG.Generator: newEmptyRef :: forall (m :: Type -> Type) ext (tp :: CrucibleType) s (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => TypeRepr tp -> Generator ext s t ret m (Expr ext s (ReferenceType tp))
- Lang.Crucible.CFG.Generator: newLabel :: Monad m => Generator ext s t ret m (Label s)
+ Lang.Crucible.CFG.Generator: newLabel :: forall (m :: Type -> Type) ext s (t :: Type -> Type) (ret :: CrucibleType). Monad m => Generator ext s t ret m (Label s)
- Lang.Crucible.CFG.Generator: newLambdaLabel :: Monad m => KnownRepr TypeRepr tp => Generator ext s t ret m (LambdaLabel s tp)
+ Lang.Crucible.CFG.Generator: newLambdaLabel :: forall (m :: Type -> Type) (tp :: CrucibleType) ext s (t :: Type -> Type) (ret :: CrucibleType). (Monad m, KnownRepr TypeRepr tp) => Generator ext s t ret m (LambdaLabel s tp)
- Lang.Crucible.CFG.Generator: newLambdaLabel' :: Monad m => TypeRepr tp -> Generator ext s t ret m (LambdaLabel s tp)
+ Lang.Crucible.CFG.Generator: newLambdaLabel' :: forall (m :: Type -> Type) (tp :: CrucibleType) ext s (t :: Type -> Type) (ret :: CrucibleType). Monad m => TypeRepr tp -> Generator ext s t ret m (LambdaLabel s tp)
- Lang.Crucible.CFG.Generator: newRef :: (Monad m, IsSyntaxExtension ext) => Expr ext s tp -> Generator ext s t ret m (Expr ext s (ReferenceType tp))
+ Lang.Crucible.CFG.Generator: newRef :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Expr ext s tp -> Generator ext s t ret m (Expr ext s (ReferenceType tp))
- Lang.Crucible.CFG.Generator: newReg :: (Monad m, IsSyntaxExtension ext) => Expr ext s tp -> Generator ext s t ret m (Reg s tp)
+ Lang.Crucible.CFG.Generator: newReg :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Expr ext s tp -> Generator ext s t ret m (Reg s tp)
- Lang.Crucible.CFG.Generator: newUnassignedReg :: Monad m => TypeRepr tp -> Generator ext s t ret m (Reg s tp)
+ Lang.Crucible.CFG.Generator: newUnassignedReg :: forall (m :: Type -> Type) (tp :: CrucibleType) ext s (t :: Type -> Type) (ret :: CrucibleType). Monad m => TypeRepr tp -> Generator ext s t ret m (Reg s tp)
- Lang.Crucible.CFG.Generator: readGlobal :: (Monad m, IsSyntaxExtension ext) => GlobalVar tp -> Generator ext s t ret m (Expr ext s tp)
+ Lang.Crucible.CFG.Generator: readGlobal :: forall (m :: Type -> Type) ext (tp :: CrucibleType) s (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => GlobalVar tp -> Generator ext s t ret m (Expr ext s tp)
- Lang.Crucible.CFG.Generator: readRef :: (Monad m, IsSyntaxExtension ext) => Expr ext s (ReferenceType tp) -> Generator ext s t ret m (Expr ext s tp)
+ Lang.Crucible.CFG.Generator: readRef :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Expr ext s (ReferenceType tp) -> Generator ext s t ret m (Expr ext s tp)
- Lang.Crucible.CFG.Generator: readReg :: (Monad m, IsSyntaxExtension ext) => Reg s tp -> Generator ext s t ret m (Expr ext s tp)
+ Lang.Crucible.CFG.Generator: readReg :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Reg s tp -> Generator ext s t ret m (Expr ext s tp)
- Lang.Crucible.CFG.Generator: recordCFG :: AnyCFG ext -> Generator ext s t ret m ()
+ Lang.Crucible.CFG.Generator: recordCFG :: forall ext s (t :: Type -> Type) (ret :: CrucibleType) (m :: Type -> Type). AnyCFG ext -> Generator ext s t ret m ()
- Lang.Crucible.CFG.Generator: reportError :: (Monad m, IsSyntaxExtension ext) => Expr ext s (StringType Unicode) -> Generator ext s t ret m a
+ Lang.Crucible.CFG.Generator: reportError :: forall (m :: Type -> Type) ext s (t :: Type -> Type) (ret :: CrucibleType) a. (Monad m, IsSyntaxExtension ext) => Expr ext s (StringType Unicode) -> Generator ext s t ret m a
- Lang.Crucible.CFG.Generator: returnFromFunction :: (Monad m, IsSyntaxExtension ext) => Expr ext s ret -> Generator ext s t ret m a
+ Lang.Crucible.CFG.Generator: returnFromFunction :: forall (m :: Type -> Type) ext s (ret :: CrucibleType) (t :: Type -> Type) a. (Monad m, IsSyntaxExtension ext) => Expr ext s ret -> Generator ext s t ret m a
- Lang.Crucible.CFG.Generator: setPosition :: Position -> Generator ext s t ret m ()
+ Lang.Crucible.CFG.Generator: setPosition :: forall ext s (t :: Type -> Type) (ret :: CrucibleType) (m :: Type -> Type). Position -> Generator ext s t ret m ()
- Lang.Crucible.CFG.Generator: substAtom :: Applicative m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> Atom s tp -> m (Atom s' tp)
+ Lang.Crucible.CFG.Generator: substAtom :: forall m s s' (tp :: CrucibleType). Applicative m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> Atom s tp -> m (Atom s' tp)
- Lang.Crucible.CFG.Generator: substAtomSource :: Applicative m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> AtomSource s tp -> m (AtomSource s' tp)
+ Lang.Crucible.CFG.Generator: substAtomSource :: forall m s s' (tp :: CrucibleType). Applicative m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> AtomSource s tp -> m (AtomSource s' tp)
- Lang.Crucible.CFG.Generator: substAtomValue :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> AtomValue ext s tp -> m (AtomValue ext s' tp)
+ Lang.Crucible.CFG.Generator: substAtomValue :: forall m ext s s' (tp :: CrucibleType). (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> AtomValue ext s tp -> m (AtomValue ext s' tp)
- Lang.Crucible.CFG.Generator: substBlock :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> Block ext s ret -> m (Block ext s' ret)
+ Lang.Crucible.CFG.Generator: substBlock :: forall m ext s s' (ret :: CrucibleType). (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> Block ext s ret -> m (Block ext s' ret)
- Lang.Crucible.CFG.Generator: substBlockID :: Applicative m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> BlockID s -> m (BlockID s')
+ Lang.Crucible.CFG.Generator: substBlockID :: Applicative m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> BlockID s -> m (BlockID s')
- Lang.Crucible.CFG.Generator: substCFG :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> CFG ext s init ret -> m (CFG ext s' init ret)
+ Lang.Crucible.CFG.Generator: substCFG :: forall m ext s s' (init :: Ctx CrucibleType) (ret :: CrucibleType). (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> CFG ext s init ret -> m (CFG ext s' init ret)
- Lang.Crucible.CFG.Generator: substExpr :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> Expr ext s tp -> m (Expr ext s' tp)
+ Lang.Crucible.CFG.Generator: substExpr :: forall m ext s s' (tp :: CrucibleType). (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> Expr ext s tp -> m (Expr ext s' tp)
- Lang.Crucible.CFG.Generator: substLabel :: Functor m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> Label s -> m (Label s')
+ Lang.Crucible.CFG.Generator: substLabel :: Functor m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> Label s -> m (Label s')
- Lang.Crucible.CFG.Generator: substLambdaLabel :: Applicative m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> LambdaLabel s tp -> m (LambdaLabel s' tp)
+ Lang.Crucible.CFG.Generator: substLambdaLabel :: forall m s s' (tp :: CrucibleType). Applicative m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> LambdaLabel s tp -> m (LambdaLabel s' tp)
- Lang.Crucible.CFG.Generator: substPosdStmt :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> Posd (Stmt ext s) -> m (Posd (Stmt ext s'))
+ Lang.Crucible.CFG.Generator: substPosdStmt :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> Posd (Stmt ext s) -> m (Posd (Stmt ext s'))
- Lang.Crucible.CFG.Generator: substPosdTermStmt :: Applicative m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> Posd (TermStmt s ret) -> m (Posd (TermStmt s' ret))
+ Lang.Crucible.CFG.Generator: substPosdTermStmt :: forall m s s' (ret :: CrucibleType). Applicative m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> Posd (TermStmt s ret) -> m (Posd (TermStmt s' ret))
- Lang.Crucible.CFG.Generator: substReg :: Applicative m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> Reg s tp -> m (Reg s' tp)
+ Lang.Crucible.CFG.Generator: substReg :: forall m s s' (tp :: CrucibleType). Applicative m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> Reg s tp -> m (Reg s' tp)
- Lang.Crucible.CFG.Generator: substStmt :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> Stmt ext s -> m (Stmt ext s')
+ Lang.Crucible.CFG.Generator: substStmt :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> Stmt ext s -> m (Stmt ext s')
- Lang.Crucible.CFG.Generator: substTermStmt :: Applicative m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> TermStmt s ret -> m (TermStmt s' ret)
+ Lang.Crucible.CFG.Generator: substTermStmt :: forall m s s' (ret :: CrucibleType). Applicative m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> TermStmt s ret -> m (TermStmt s' ret)
- Lang.Crucible.CFG.Generator: substValue :: Applicative m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> Value s tp -> m (Value s' tp)
+ Lang.Crucible.CFG.Generator: substValue :: forall m s s' (tp :: CrucibleType). Applicative m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> Value s tp -> m (Value s' tp)
- Lang.Crucible.CFG.Generator: substValueSet :: Applicative m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> ValueSet s -> m (ValueSet s')
+ Lang.Crucible.CFG.Generator: substValueSet :: Applicative m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> ValueSet s -> m (ValueSet s')
- Lang.Crucible.CFG.Generator: tailCall :: (Monad m, IsSyntaxExtension ext) => Expr ext s (FunctionHandleType args ret) -> Assignment (Expr ext s) args -> Generator ext s t ret m a
+ Lang.Crucible.CFG.Generator: tailCall :: forall (m :: Type -> Type) ext s (args :: Ctx CrucibleType) (ret :: CrucibleType) (t :: Type -> Type) a. (Monad m, IsSyntaxExtension ext) => Expr ext s (FunctionHandleType args ret) -> Assignment (Expr ext s) args -> Generator ext s t ret m a
- Lang.Crucible.CFG.Generator: termNextLabels :: TermStmt s ret -> Maybe [BlockID s]
+ Lang.Crucible.CFG.Generator: termNextLabels :: forall s (ret :: CrucibleType). TermStmt s ret -> Maybe [BlockID s]
- Lang.Crucible.CFG.Generator: termStmtInputs :: TermStmt s ret -> ValueSet s
+ Lang.Crucible.CFG.Generator: termStmtInputs :: forall s (ret :: CrucibleType). TermStmt s ret -> ValueSet s
- Lang.Crucible.CFG.Generator: traverseCFG :: (Monad m, TraverseExt ext) => (genv -> penv -> Block ext s ret -> m (genv, penv)) -> genv -> penv -> Block ext s ret -> CFG ext s init ret -> m genv
+ Lang.Crucible.CFG.Generator: traverseCFG :: forall m ext genv penv s (ret :: CrucibleType) (init :: Ctx CrucibleType). (Monad m, TraverseExt ext) => (genv -> penv -> Block ext s ret -> m (genv, penv)) -> genv -> penv -> Block ext s ret -> CFG ext s init ret -> m genv
- Lang.Crucible.CFG.Generator: type ValueSet s = Set (Some (Value s))
+ Lang.Crucible.CFG.Generator: type ValueSet s = Set Some Value s
- Lang.Crucible.CFG.Generator: typeOfAtomValue :: (TypeApp (StmtExtension ext), TypeApp (ExprExtension ext)) => AtomValue ext s tp -> TypeRepr tp
+ Lang.Crucible.CFG.Generator: typeOfAtomValue :: forall ext s (tp :: CrucibleType). (TypeApp (StmtExtension ext), TypeApp (ExprExtension ext)) => AtomValue ext s tp -> TypeRepr tp
- Lang.Crucible.CFG.Generator: typeOfValue :: Value s tp -> TypeRepr tp
+ Lang.Crucible.CFG.Generator: typeOfValue :: forall s (tp :: CrucibleType). Value s tp -> TypeRepr tp
- Lang.Crucible.CFG.Generator: unlessCond :: (Monad m, IsSyntaxExtension ext) => Expr ext s BoolType -> Generator ext s t ret m () -> Generator ext s t ret m ()
+ Lang.Crucible.CFG.Generator: unlessCond :: forall (m :: Type -> Type) ext s (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Expr ext s BoolType -> Generator ext s t ret m () -> Generator ext s t ret m ()
- Lang.Crucible.CFG.Generator: whenCond :: (Monad m, IsSyntaxExtension ext) => Expr ext s BoolType -> Generator ext s t ret m () -> Generator ext s t ret m ()
+ Lang.Crucible.CFG.Generator: whenCond :: forall (m :: Type -> Type) ext s (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Expr ext s BoolType -> Generator ext s t ret m () -> Generator ext s t ret m ()
- Lang.Crucible.CFG.Generator: while :: (Monad m, IsSyntaxExtension ext) => (Position, Generator ext s t ret m (Expr ext s BoolType)) -> (Position, Generator ext s t ret m ()) -> Generator ext s t ret m ()
+ Lang.Crucible.CFG.Generator: while :: forall (m :: Type -> Type) ext s (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => (Position, Generator ext s t ret m (Expr ext s BoolType)) -> (Position, Generator ext s t ret m ()) -> Generator ext s t ret m ()
- Lang.Crucible.CFG.Generator: withPosition :: Monad m => Position -> Generator ext s t ret m a -> Generator ext s t ret m a
+ Lang.Crucible.CFG.Generator: withPosition :: forall (m :: Type -> Type) ext s (t :: Type -> Type) (ret :: CrucibleType) a. Monad m => Position -> Generator ext s t ret m a -> Generator ext s t ret m a
- Lang.Crucible.CFG.Generator: writeGlobal :: (Monad m, IsSyntaxExtension ext) => GlobalVar tp -> Expr ext s tp -> Generator ext s t ret m ()
+ Lang.Crucible.CFG.Generator: writeGlobal :: forall (m :: Type -> Type) ext (tp :: CrucibleType) s (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => GlobalVar tp -> Expr ext s tp -> Generator ext s t ret m ()
- Lang.Crucible.CFG.Generator: writeRef :: (Monad m, IsSyntaxExtension ext) => Expr ext s (ReferenceType tp) -> Expr ext s tp -> Generator ext s t ret m ()
+ Lang.Crucible.CFG.Generator: writeRef :: forall (m :: Type -> Type) ext s (tp :: CrucibleType) (t :: Type -> Type) (ret :: CrucibleType). (Monad m, IsSyntaxExtension ext) => Expr ext s (ReferenceType tp) -> Expr ext s tp -> Generator ext s t ret m ()
- Lang.Crucible.CFG.Reg: LambdaLabel :: !Nonce s tp -> Atom s tp -> LambdaLabel (s :: Type) (tp :: CrucibleType)
+ Lang.Crucible.CFG.Reg: LambdaLabel :: !Nonce s tp -> Atom s tp -> LambdaLabel s (tp :: CrucibleType)
- Lang.Crucible.CFG.Reg: SomeCFG :: !CFG ext s init ret -> SomeCFG ext init ret
+ Lang.Crucible.CFG.Reg: SomeCFG :: !CFG ext s init ret -> SomeCFG ext (init :: Ctx CrucibleType) (ret :: CrucibleType)
- Lang.Crucible.CFG.Reg: [AnyCFG] :: CFG ext blocks init ret -> AnyCFG ext
+ Lang.Crucible.CFG.Reg: [AnyCFG] :: forall ext blocks (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext blocks init ret -> AnyCFG ext
- Lang.Crucible.CFG.Reg: [Br] :: !Atom s BoolType -> !Label s -> !Label s -> TermStmt s ret
+ Lang.Crucible.CFG.Reg: [Br] :: forall s (ret :: CrucibleType). !Atom s BoolType -> !Label s -> !Label s -> TermStmt s ret
- Lang.Crucible.CFG.Reg: [Call] :: !Atom s (FunctionHandleType args ret) -> !Assignment (Atom s) args -> !TypeRepr ret -> AtomValue ext s ret
+ Lang.Crucible.CFG.Reg: [Call] :: forall s (args :: Ctx CrucibleType) (tp :: CrucibleType) ext. !Atom s (FunctionHandleType args tp) -> !Assignment (Atom s) args -> !TypeRepr tp -> AtomValue ext s tp
- Lang.Crucible.CFG.Reg: [ErrorStmt] :: !Atom s (StringType Unicode) -> TermStmt s ret
+ Lang.Crucible.CFG.Reg: [ErrorStmt] :: forall s (ret :: CrucibleType). !Atom s (StringType Unicode) -> TermStmt s ret
- Lang.Crucible.CFG.Reg: [EvalApp] :: !App ext (Atom s) tp -> AtomValue ext s tp
+ Lang.Crucible.CFG.Reg: [EvalApp] :: forall ext s (tp :: CrucibleType). !App ext (Atom s) tp -> AtomValue ext s tp
- Lang.Crucible.CFG.Reg: [EvalExt] :: !StmtExtension ext (Atom s) tp -> AtomValue ext s tp
+ Lang.Crucible.CFG.Reg: [EvalExt] :: forall ext s (tp :: CrucibleType). !StmtExtension ext (Atom s) tp -> AtomValue ext s tp
- Lang.Crucible.CFG.Reg: [FreshConstant] :: !BaseTypeRepr bt -> !Maybe SolverSymbol -> AtomValue ext s (BaseToType bt)
+ Lang.Crucible.CFG.Reg: [FreshConstant] :: forall (bt :: BaseType) ext s. !BaseTypeRepr bt -> !Maybe SolverSymbol -> AtomValue ext s ('BaseToType bt)
- Lang.Crucible.CFG.Reg: [FreshFloat] :: !FloatInfoRepr fi -> !Maybe SolverSymbol -> AtomValue ext s (FloatType fi)
+ Lang.Crucible.CFG.Reg: [FreshFloat] :: forall (fi :: FloatInfo) ext s. !FloatInfoRepr fi -> !Maybe SolverSymbol -> AtomValue ext s ('FloatType fi)
- Lang.Crucible.CFG.Reg: [FreshNat] :: !Maybe SolverSymbol -> AtomValue ext s NatType
+ Lang.Crucible.CFG.Reg: [FreshNat] :: forall ext s. !Maybe SolverSymbol -> AtomValue ext s 'NatType
- Lang.Crucible.CFG.Reg: [Jump] :: !Label s -> TermStmt s ret
+ Lang.Crucible.CFG.Reg: [Jump] :: forall s (ret :: CrucibleType). !Label s -> TermStmt s ret
- Lang.Crucible.CFG.Reg: [LabelID] :: Label s -> BlockID s
+ Lang.Crucible.CFG.Reg: [LabelID] :: forall s. Label s -> BlockID s
- Lang.Crucible.CFG.Reg: [LambdaID] :: LambdaLabel s tp -> BlockID s
+ Lang.Crucible.CFG.Reg: [LambdaID] :: forall s (tp :: CrucibleType). LambdaLabel s tp -> BlockID s
- Lang.Crucible.CFG.Reg: [MaybeBranch] :: !TypeRepr tp -> !Atom s (MaybeType tp) -> !LambdaLabel s tp -> !Label s -> TermStmt s ret
+ Lang.Crucible.CFG.Reg: [MaybeBranch] :: forall (tp :: CrucibleType) s (ret :: CrucibleType). !TypeRepr tp -> !Atom s (MaybeType tp) -> !LambdaLabel s tp -> !Label s -> TermStmt s ret
- Lang.Crucible.CFG.Reg: [NewEmptyRef] :: !TypeRepr tp -> AtomValue ext s (ReferenceType tp)
+ Lang.Crucible.CFG.Reg: [NewEmptyRef] :: forall (tp1 :: CrucibleType) ext s. !TypeRepr tp1 -> AtomValue ext s ('ReferenceType tp1)
- Lang.Crucible.CFG.Reg: [NewRef] :: !Atom s tp -> AtomValue ext s (ReferenceType tp)
+ Lang.Crucible.CFG.Reg: [NewRef] :: forall s (tp1 :: CrucibleType) ext. !Atom s tp1 -> AtomValue ext s ('ReferenceType tp1)
- Lang.Crucible.CFG.Reg: [Output] :: !LambdaLabel s tp -> !Atom s tp -> TermStmt s ret
+ Lang.Crucible.CFG.Reg: [Output] :: forall s (tp :: CrucibleType) (ret :: CrucibleType). !LambdaLabel s tp -> !Atom s tp -> TermStmt s ret
- Lang.Crucible.CFG.Reg: [ReadGlobal] :: !GlobalVar tp -> AtomValue ext s tp
+ Lang.Crucible.CFG.Reg: [ReadGlobal] :: forall (tp :: CrucibleType) ext s. !GlobalVar tp -> AtomValue ext s tp
- Lang.Crucible.CFG.Reg: [ReadRef] :: !Atom s (ReferenceType tp) -> AtomValue ext s tp
+ Lang.Crucible.CFG.Reg: [ReadRef] :: forall s (tp :: CrucibleType) ext. !Atom s (ReferenceType tp) -> AtomValue ext s tp
- Lang.Crucible.CFG.Reg: [ReadReg] :: !Reg s tp -> AtomValue ext s tp
+ Lang.Crucible.CFG.Reg: [ReadReg] :: forall s (tp :: CrucibleType) ext. !Reg s tp -> AtomValue ext s tp
- Lang.Crucible.CFG.Reg: [Return] :: !Atom s ret -> TermStmt s ret
+ Lang.Crucible.CFG.Reg: [Return] :: forall s (ret :: CrucibleType). !Atom s ret -> TermStmt s ret
- Lang.Crucible.CFG.Reg: [TailCall] :: !Atom s (FunctionHandleType args ret) -> !CtxRepr args -> !Assignment (Atom s) args -> TermStmt s ret
+ Lang.Crucible.CFG.Reg: [TailCall] :: forall s (args :: Ctx CrucibleType) (ret :: CrucibleType). !Atom s (FunctionHandleType args ret) -> !CtxRepr args -> !Assignment (Atom s) args -> TermStmt s ret
- Lang.Crucible.CFG.Reg: [VariantElim] :: !CtxRepr varctx -> !Atom s (VariantType varctx) -> !Assignment (LambdaLabel s) varctx -> TermStmt s ret
+ Lang.Crucible.CFG.Reg: [VariantElim] :: forall (varctx :: Ctx CrucibleType) s (ret :: CrucibleType). !CtxRepr varctx -> !Atom s (VariantType varctx) -> !Assignment (LambdaLabel s) varctx -> TermStmt s ret
- Lang.Crucible.CFG.Reg: [lambdaAtom] :: LambdaLabel (s :: Type) (tp :: CrucibleType) -> Atom s tp
+ Lang.Crucible.CFG.Reg: [lambdaAtom] :: LambdaLabel s (tp :: CrucibleType) -> Atom s tp
- Lang.Crucible.CFG.Reg: [lambdaId] :: LambdaLabel (s :: Type) (tp :: CrucibleType) -> !Nonce s tp
+ Lang.Crucible.CFG.Reg: [lambdaId] :: LambdaLabel s (tp :: CrucibleType) -> !Nonce s tp
- Lang.Crucible.CFG.Reg: cfgArgTypes :: CFG ext s init ret -> CtxRepr init
+ Lang.Crucible.CFG.Reg: cfgArgTypes :: forall ext s (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext s init ret -> CtxRepr init
- Lang.Crucible.CFG.Reg: cfgEntryBlock :: CFG ext s init ret -> Block ext s ret
+ Lang.Crucible.CFG.Reg: cfgEntryBlock :: forall ext s (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext s init ret -> Block ext s ret
- Lang.Crucible.CFG.Reg: cfgInputTypes :: CFG ext s init ret -> CtxRepr init
+ Lang.Crucible.CFG.Reg: cfgInputTypes :: forall ext s (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext s init ret -> CtxRepr init
- Lang.Crucible.CFG.Reg: cfgReturnType :: CFG ext s init ret -> TypeRepr ret
+ Lang.Crucible.CFG.Reg: cfgReturnType :: forall ext s (init :: Ctx CrucibleType) (ret :: CrucibleType). CFG ext s init ret -> TypeRepr ret
- Lang.Crucible.CFG.Reg: data BlockID (s :: Type)
+ Lang.Crucible.CFG.Reg: data BlockID s
- Lang.Crucible.CFG.Reg: data LambdaLabel (s :: Type) (tp :: CrucibleType)
+ Lang.Crucible.CFG.Reg: data LambdaLabel s (tp :: CrucibleType)
- Lang.Crucible.CFG.Reg: data SomeCFG ext init ret
+ Lang.Crucible.CFG.Reg: data SomeCFG ext (init :: Ctx CrucibleType) (ret :: CrucibleType)
- Lang.Crucible.CFG.Reg: exprType :: IsExpr e => e tp -> TypeRepr tp
+ Lang.Crucible.CFG.Reg: exprType :: forall (tp :: CrucibleType). IsExpr e => e tp -> TypeRepr tp
- Lang.Crucible.CFG.Reg: foldStmtInputs :: TraverseExt ext => (forall x. Value s x -> b -> b) -> Stmt ext s -> b -> b
+ Lang.Crucible.CFG.Reg: foldStmtInputs :: TraverseExt ext => (forall (x :: CrucibleType). () => Value s x -> b -> b) -> Stmt ext s -> b -> b
- Lang.Crucible.CFG.Reg: mapStmtAtom :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). Atom s x -> m (Atom s x)) -> Stmt ext s -> m (Stmt ext s)
+ Lang.Crucible.CFG.Reg: mapStmtAtom :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). () => Atom s x -> m (Atom s x)) -> Stmt ext s -> m (Stmt ext s)
- Lang.Crucible.CFG.Reg: mkBlock :: forall ext s ret. TraverseExt ext => BlockID s -> ValueSet s -> Seq (Posd (Stmt ext s)) -> Posd (TermStmt s ret) -> Block ext s ret
+ Lang.Crucible.CFG.Reg: mkBlock :: forall ext s (ret :: CrucibleType). TraverseExt ext => BlockID s -> ValueSet s -> Seq (Posd (Stmt ext s)) -> Posd (TermStmt s ret) -> Block ext s ret
- Lang.Crucible.CFG.Reg: mkInputAtoms :: forall m s init. Monad m => NonceGenerator m s -> Position -> CtxRepr init -> m (Assignment (Atom s) init)
+ Lang.Crucible.CFG.Reg: mkInputAtoms :: forall m s (init :: Ctx CrucibleType). Monad m => NonceGenerator m s -> Position -> CtxRepr init -> m (Assignment (Atom s) init)
- Lang.Crucible.CFG.Reg: substAtom :: Applicative m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> Atom s tp -> m (Atom s' tp)
+ Lang.Crucible.CFG.Reg: substAtom :: forall m s s' (tp :: CrucibleType). Applicative m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> Atom s tp -> m (Atom s' tp)
- Lang.Crucible.CFG.Reg: substAtomSource :: Applicative m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> AtomSource s tp -> m (AtomSource s' tp)
+ Lang.Crucible.CFG.Reg: substAtomSource :: forall m s s' (tp :: CrucibleType). Applicative m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> AtomSource s tp -> m (AtomSource s' tp)
- Lang.Crucible.CFG.Reg: substAtomValue :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> AtomValue ext s tp -> m (AtomValue ext s' tp)
+ Lang.Crucible.CFG.Reg: substAtomValue :: forall m ext s s' (tp :: CrucibleType). (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> AtomValue ext s tp -> m (AtomValue ext s' tp)
- Lang.Crucible.CFG.Reg: substBlock :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> Block ext s ret -> m (Block ext s' ret)
+ Lang.Crucible.CFG.Reg: substBlock :: forall m ext s s' (ret :: CrucibleType). (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> Block ext s ret -> m (Block ext s' ret)
- Lang.Crucible.CFG.Reg: substBlockID :: Applicative m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> BlockID s -> m (BlockID s')
+ Lang.Crucible.CFG.Reg: substBlockID :: Applicative m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> BlockID s -> m (BlockID s')
- Lang.Crucible.CFG.Reg: substCFG :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> CFG ext s init ret -> m (CFG ext s' init ret)
+ Lang.Crucible.CFG.Reg: substCFG :: forall m ext s s' (init :: Ctx CrucibleType) (ret :: CrucibleType). (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> CFG ext s init ret -> m (CFG ext s' init ret)
- Lang.Crucible.CFG.Reg: substExpr :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> Expr ext s tp -> m (Expr ext s' tp)
+ Lang.Crucible.CFG.Reg: substExpr :: forall m ext s s' (tp :: CrucibleType). (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> Expr ext s tp -> m (Expr ext s' tp)
- Lang.Crucible.CFG.Reg: substLabel :: Functor m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> Label s -> m (Label s')
+ Lang.Crucible.CFG.Reg: substLabel :: Functor m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> Label s -> m (Label s')
- Lang.Crucible.CFG.Reg: substLambdaLabel :: Applicative m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> LambdaLabel s tp -> m (LambdaLabel s' tp)
+ Lang.Crucible.CFG.Reg: substLambdaLabel :: forall m s s' (tp :: CrucibleType). Applicative m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> LambdaLabel s tp -> m (LambdaLabel s' tp)
- Lang.Crucible.CFG.Reg: substPosdStmt :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> Posd (Stmt ext s) -> m (Posd (Stmt ext s'))
+ Lang.Crucible.CFG.Reg: substPosdStmt :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> Posd (Stmt ext s) -> m (Posd (Stmt ext s'))
- Lang.Crucible.CFG.Reg: substPosdTermStmt :: Applicative m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> Posd (TermStmt s ret) -> m (Posd (TermStmt s' ret))
+ Lang.Crucible.CFG.Reg: substPosdTermStmt :: forall m s s' (ret :: CrucibleType). Applicative m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> Posd (TermStmt s ret) -> m (Posd (TermStmt s' ret))
- Lang.Crucible.CFG.Reg: substReg :: Applicative m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> Reg s tp -> m (Reg s' tp)
+ Lang.Crucible.CFG.Reg: substReg :: forall m s s' (tp :: CrucibleType). Applicative m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> Reg s tp -> m (Reg s' tp)
- Lang.Crucible.CFG.Reg: substStmt :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> Stmt ext s -> m (Stmt ext s')
+ Lang.Crucible.CFG.Reg: substStmt :: (Applicative m, TraverseExt ext) => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> Stmt ext s -> m (Stmt ext s')
- Lang.Crucible.CFG.Reg: substTermStmt :: Applicative m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> TermStmt s ret -> m (TermStmt s' ret)
+ Lang.Crucible.CFG.Reg: substTermStmt :: forall m s s' (ret :: CrucibleType). Applicative m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> TermStmt s ret -> m (TermStmt s' ret)
- Lang.Crucible.CFG.Reg: substValue :: Applicative m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> Value s tp -> m (Value s' tp)
+ Lang.Crucible.CFG.Reg: substValue :: forall m s s' (tp :: CrucibleType). Applicative m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> Value s tp -> m (Value s' tp)
- Lang.Crucible.CFG.Reg: substValueSet :: Applicative m => (forall (x :: CrucibleType). Nonce s x -> m (Nonce s' x)) -> ValueSet s -> m (ValueSet s')
+ Lang.Crucible.CFG.Reg: substValueSet :: Applicative m => (forall (x :: CrucibleType). () => Nonce s x -> m (Nonce s' x)) -> ValueSet s -> m (ValueSet s')
- Lang.Crucible.CFG.Reg: termNextLabels :: TermStmt s ret -> Maybe [BlockID s]
+ Lang.Crucible.CFG.Reg: termNextLabels :: forall s (ret :: CrucibleType). TermStmt s ret -> Maybe [BlockID s]
- Lang.Crucible.CFG.Reg: termStmtInputs :: TermStmt s ret -> ValueSet s
+ Lang.Crucible.CFG.Reg: termStmtInputs :: forall s (ret :: CrucibleType). TermStmt s ret -> ValueSet s
- Lang.Crucible.CFG.Reg: traverseCFG :: (Monad m, TraverseExt ext) => (genv -> penv -> Block ext s ret -> m (genv, penv)) -> genv -> penv -> Block ext s ret -> CFG ext s init ret -> m genv
+ Lang.Crucible.CFG.Reg: traverseCFG :: forall m ext genv penv s (ret :: CrucibleType) (init :: Ctx CrucibleType). (Monad m, TraverseExt ext) => (genv -> penv -> Block ext s ret -> m (genv, penv)) -> genv -> penv -> Block ext s ret -> CFG ext s init ret -> m genv
- Lang.Crucible.CFG.Reg: type ValueSet s = Set (Some (Value s))
+ Lang.Crucible.CFG.Reg: type ValueSet s = Set Some Value s
- Lang.Crucible.CFG.Reg: typeOfAtomValue :: (TypeApp (StmtExtension ext), TypeApp (ExprExtension ext)) => AtomValue ext s tp -> TypeRepr tp
+ Lang.Crucible.CFG.Reg: typeOfAtomValue :: forall ext s (tp :: CrucibleType). (TypeApp (StmtExtension ext), TypeApp (ExprExtension ext)) => AtomValue ext s tp -> TypeRepr tp
- Lang.Crucible.CFG.Reg: typeOfValue :: Value s tp -> TypeRepr tp
+ Lang.Crucible.CFG.Reg: typeOfValue :: forall s (tp :: CrucibleType). Value s tp -> TypeRepr tp
- Lang.Crucible.CFG.SSAConversion: toSSA :: IsSyntaxExtension ext => CFG ext s init ret -> SomeCFG ext init ret
+ Lang.Crucible.CFG.SSAConversion: toSSA :: forall ext s (init :: Ctx CrucibleType) (ret :: CrucibleType). IsSyntaxExtension ext => CFG ext s init ret -> SomeCFG ext init ret
- Lang.Crucible.Concretize: ConcRV' :: ConcRegValue sym tp -> ConcRV' sym tp
+ Lang.Crucible.Concretize: ConcRV' :: ConcRegValue sym tp -> ConcRV' sym (tp :: CrucibleType)
- Lang.Crucible.Concretize: IntrinsicConcFn :: (forall sym ctx. SymExpr sym ~ Expr t => IsExprBuilder sym => ConcCtx sym t -> Assignment TypeRepr ctx -> Intrinsic sym nm ctx -> IO (ConcRegValue sym (IntrinsicType nm ctx))) -> IntrinsicConcFn t nm
+ Lang.Crucible.Concretize: IntrinsicConcFn :: (forall sym (ctx :: Ctx CrucibleType). (SymExpr sym ~ Expr t, IsExprBuilder sym) => ConcCtx sym t -> Assignment TypeRepr ctx -> Intrinsic sym nm ctx -> IO (ConcRegValue sym (IntrinsicType nm ctx))) -> IntrinsicConcFn t (nm :: Symbol)
- Lang.Crucible.Concretize: IntrinsicConcToSymFn :: (forall sym ctx. IsExprBuilder sym => sym -> Assignment TypeRepr ctx -> ConcIntrinsic nm ctx -> IO (RegValue sym (IntrinsicType nm ctx))) -> IntrinsicConcToSymFn nm
+ Lang.Crucible.Concretize: IntrinsicConcToSymFn :: (forall sym (ctx :: Ctx CrucibleType). IsExprBuilder sym => sym -> Assignment TypeRepr ctx -> ConcIntrinsic nm ctx -> IO (RegValue sym (IntrinsicType nm ctx))) -> IntrinsicConcToSymFn (nm :: Symbol)
- Lang.Crucible.Concretize: [unConcRV'] :: ConcRV' sym tp -> ConcRegValue sym tp
+ Lang.Crucible.Concretize: [unConcRV'] :: ConcRV' sym (tp :: CrucibleType) -> ConcRegValue sym tp
- Lang.Crucible.Concretize: concRegEntry :: SymExpr sym ~ Expr t => IsExprBuilder sym => ConcCtx sym t -> RegEntry sym tp -> IO (ConcRegValue sym tp)
+ Lang.Crucible.Concretize: concRegEntry :: forall (tp :: CrucibleType) sym bak solver scope (st :: Type -> Type) fs. (IsSymBackend sym bak, sym ~ ExprBuilder scope st fs, SymExpr sym ~ Expr scope, bak ~ OnlineBackend solver scope st fs, OnlineSolver solver) => bak -> MapF SymbolRepr (IntrinsicConcFn scope) -> RegEntry sym tp -> IO (Either ConcretizationFailure (ConcRegValue sym tp))
- Lang.Crucible.Concretize: concRegMap :: SymExpr sym ~ Expr t => IsExprBuilder sym => ConcCtx sym t -> RegMap sym tps -> IO (Assignment (ConcRV' sym) tps)
+ Lang.Crucible.Concretize: concRegMap :: forall (tps :: Ctx CrucibleType) sym bak solver scope (st :: Type -> Type) fs. (IsSymBackend sym bak, sym ~ ExprBuilder scope st fs, SymExpr sym ~ Expr scope, bak ~ OnlineBackend solver scope st fs, OnlineSolver solver) => bak -> MapF SymbolRepr (IntrinsicConcFn scope) -> RegMap sym tps -> IO (Either ConcretizationFailure (Assignment (ConcRV' sym) tps))
- Lang.Crucible.Concretize: concRegValue :: SymExpr sym ~ Expr t => IsExprBuilder sym => ConcCtx sym t -> TypeRepr tp -> RegValue sym tp -> IO (ConcRegValue sym tp)
+ Lang.Crucible.Concretize: concRegValue :: forall (tp :: CrucibleType) sym bak solver scope (st :: Type -> Type) fs. (IsSymBackend sym bak, sym ~ ExprBuilder scope st fs, SymExpr sym ~ Expr scope, bak ~ OnlineBackend solver scope st fs, OnlineSolver solver) => bak -> MapF SymbolRepr (IntrinsicConcFn scope) -> TypeRepr tp -> RegValue sym tp -> IO (Either ConcretizationFailure (ConcRegValue sym tp))
- Lang.Crucible.Concretize: concToSym :: sym ~ ExprBuilder scope st (Flags fm) => sym -> MapF SymbolRepr IntrinsicConcToSymFn -> FloatModeRepr fm -> TypeRepr tp -> ConcRegValue sym tp -> IO (RegValue sym tp)
+ Lang.Crucible.Concretize: concToSym :: forall sym scope (st :: Type -> Type) (fm :: FloatMode) (tp :: CrucibleType). sym ~ ExprBuilder scope st (Flags fm) => sym -> MapF SymbolRepr IntrinsicConcToSymFn -> FloatModeRepr fm -> TypeRepr tp -> ConcRegValue sym tp -> IO (RegValue sym tp)
- Lang.Crucible.Concretize: newtype ConcRV' sym tp
+ Lang.Crucible.Concretize: newtype ConcRV' sym (tp :: CrucibleType)
- Lang.Crucible.Concretize: newtype IntrinsicConcFn t nm
+ Lang.Crucible.Concretize: newtype IntrinsicConcFn t (nm :: Symbol)
- Lang.Crucible.Concretize: newtype IntrinsicConcToSymFn nm
+ Lang.Crucible.Concretize: newtype IntrinsicConcToSymFn (nm :: Symbol)
- Lang.Crucible.Concretize: type family ConcIntrinsic nm ctx
+ Lang.Crucible.Concretize: type family ConcIntrinsic (nm :: Symbol) (ctx :: Ctx CrucibleType)
- Lang.Crucible.FunctionHandle: [SomeHandle] :: !FnHandle args ret -> SomeHandle
+ Lang.Crucible.FunctionHandle: [SomeHandle] :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType). !FnHandle args ret -> SomeHandle
- Lang.Crucible.FunctionHandle: data FnHandleMap f
+ Lang.Crucible.FunctionHandle: data FnHandleMap (f :: Ctx CrucibleType -> CrucibleType -> Type)
- Lang.Crucible.FunctionHandle: emptyHandleMap :: FnHandleMap f
+ Lang.Crucible.FunctionHandle: emptyHandleMap :: forall (f :: Ctx CrucibleType -> CrucibleType -> Type). FnHandleMap f
- Lang.Crucible.FunctionHandle: freshRefCell :: HandleAllocator -> TypeRepr tp -> IO (RefCell tp)
+ Lang.Crucible.FunctionHandle: freshRefCell :: forall (tp :: CrucibleType). HandleAllocator -> TypeRepr tp -> IO (RefCell tp)
- Lang.Crucible.FunctionHandle: handleMapToHandles :: FnHandleMap f -> [SomeHandle]
+ Lang.Crucible.FunctionHandle: handleMapToHandles :: forall (f :: Ctx CrucibleType -> CrucibleType -> Type). FnHandleMap f -> [SomeHandle]
- Lang.Crucible.FunctionHandle: handleType :: FnHandle args ret -> TypeRepr (FunctionHandleType args ret)
+ Lang.Crucible.FunctionHandle: handleType :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType). FnHandle args ret -> TypeRepr (FunctionHandleType args ret)
- Lang.Crucible.FunctionHandle: insertHandleMap :: FnHandle args ret -> f args ret -> FnHandleMap f -> FnHandleMap f
+ Lang.Crucible.FunctionHandle: insertHandleMap :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType) f. FnHandle args ret -> f args ret -> FnHandleMap f -> FnHandleMap f
- Lang.Crucible.FunctionHandle: lookupHandleMap :: FnHandle args ret -> FnHandleMap f -> Maybe (f args ret)
+ Lang.Crucible.FunctionHandle: lookupHandleMap :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType) f. FnHandle args ret -> FnHandleMap f -> Maybe (f args ret)
- Lang.Crucible.FunctionHandle: mkHandle :: (KnownCtx TypeRepr args, KnownRepr TypeRepr ret) => HandleAllocator -> FunctionName -> IO (FnHandle args ret)
+ Lang.Crucible.FunctionHandle: mkHandle :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType). (KnownCtx TypeRepr args, KnownRepr TypeRepr ret) => HandleAllocator -> FunctionName -> IO (FnHandle args ret)
- Lang.Crucible.FunctionHandle: mkHandle' :: HandleAllocator -> FunctionName -> Assignment TypeRepr args -> TypeRepr ret -> IO (FnHandle args ret)
+ Lang.Crucible.FunctionHandle: mkHandle' :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType). HandleAllocator -> FunctionName -> Assignment TypeRepr args -> TypeRepr ret -> IO (FnHandle args ret)
- Lang.Crucible.FunctionHandle: refType :: RefCell tp -> TypeRepr tp
+ Lang.Crucible.FunctionHandle: refType :: forall (tp :: CrucibleType). RefCell tp -> TypeRepr tp
- Lang.Crucible.FunctionHandle: searchHandleMap :: FunctionName -> TypeRepr (FunctionHandleType args ret) -> FnHandleMap f -> Maybe (FnHandle args ret, f args ret)
+ Lang.Crucible.FunctionHandle: searchHandleMap :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType) f. FunctionName -> TypeRepr (FunctionHandleType args ret) -> FnHandleMap f -> Maybe (FnHandle args ret, f args ret)
- Lang.Crucible.FunctionHandle: updateHandleMap :: (f args ret -> f args ret) -> FnHandle args ret -> FnHandleMap f -> FnHandleMap f
+ Lang.Crucible.FunctionHandle: updateHandleMap :: forall f (args :: Ctx CrucibleType) (ret :: CrucibleType). (f args ret -> f args ret) -> FnHandle args ret -> FnHandleMap f -> FnHandleMap f
- Lang.Crucible.Panic: data () => Panic a
+ Lang.Crucible.Panic: data Panic a
- Lang.Crucible.Simulator: AH :: (forall (l :: Type) args. AbortExecReason -> ExecCont p sym ext rtp l args) -> AbortHandler p sym ext rtp
+ Lang.Crucible.Simulator: AH :: (forall l (args :: Maybe (Ctx CrucibleType)). () => AbortExecReason -> ExecCont p sym ext rtp l args) -> AbortHandler p sym ext rtp
- Lang.Crucible.Simulator: AbortState :: !AbortExecReason -> !SimState p sym ext rtp f a -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator: AbortState :: !AbortExecReason -> !SimState p sym ext rtp f a -> ExecState p sym ext rtp
- Lang.Crucible.Simulator: AbortedResult :: !SimContext p sym ext -> !AbortedResult sym ext -> ExecResult p sym ext (r :: Type)
+ Lang.Crucible.Simulator: AbortedResult :: !SimContext p sym ext -> !AbortedResult sym ext -> ExecResult p sym ext rtp
- Lang.Crucible.Simulator: BranchMergeState :: !CrucibleBranchTarget f args -> !SimState p sym ext rtp f args -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator: BranchMergeState :: !CrucibleBranchTarget f args -> !SimState p sym ext rtp f args -> ExecState p sym ext rtp
- Lang.Crucible.Simulator: CallState :: !ReturnHandler ret p sym ext rtp f a -> !ResolvedCall p sym ext ret -> !SimState p sym ext rtp f a -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator: CallState :: !ReturnHandler ret p sym ext rtp f a -> !ResolvedCall p sym ext ret -> !SimState p sym ext rtp f a -> ExecState p sym ext rtp
- Lang.Crucible.Simulator: ControlTransferState :: !ControlResumption p sym ext rtp f -> !SimState p sym ext rtp f ('Just a) -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator: ControlTransferState :: !ControlResumption p sym ext rtp f -> !SimState p sym ext rtp f ('Just a) -> ExecState p sym ext rtp
- Lang.Crucible.Simulator: ExtensionImpl :: (forall bak rtp blocks r ctx. IsSymBackend sym bak => bak -> IntrinsicTypes sym -> (Int -> String -> IO ()) -> CrucibleState p sym ext rtp blocks r ctx -> EvalAppFunc sym (ExprExtension ext)) -> EvalStmtFunc p sym ext -> ExtensionImpl p sym ext
+ Lang.Crucible.Simulator: ExtensionImpl :: (forall bak rtp (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType) (ctx :: Ctx CrucibleType). IsSymBackend sym bak => bak -> IntrinsicTypes sym -> (Int -> String -> IO ()) -> CrucibleState p sym ext rtp blocks r ctx -> EvalAppFunc sym (ExprExtension ext)) -> EvalStmtFunc p sym ext -> ExtensionImpl p sym ext
- Lang.Crucible.Simulator: FinishedResult :: !SimContext p sym ext -> !PartialResult sym ext r -> ExecResult p sym ext (r :: Type)
+ Lang.Crucible.Simulator: FinishedResult :: !SimContext p sym ext -> !PartialResult sym ext rtp -> ExecResult p sym ext rtp
- Lang.Crucible.Simulator: GlobalPair :: !v -> !SymGlobalState sym -> GlobalPair sym (v :: Type)
+ Lang.Crucible.Simulator: GlobalPair :: !v -> !SymGlobalState sym -> GlobalPair sym v
- Lang.Crucible.Simulator: InitialState :: !SimContext p sym ext -> !SymGlobalState sym -> !AbortHandler p sym ext (RegEntry sym ret) -> !TypeRepr ret -> !ExecCont p sym ext (RegEntry sym ret) (OverrideLang ret) ('Just EmptyCtx) -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator: InitialState :: !SimContext p sym ext -> !SymGlobalState sym -> !AbortHandler p sym ext (RegEntry sym ret) -> !TypeRepr ret -> !ExecCont p sym ext (RegEntry sym ret) (OverrideLang ret) ('Just (EmptyCtx :: Ctx CrucibleType)) -> ExecState p sym ext rtp
- Lang.Crucible.Simulator: Override :: FunctionName -> (forall r. ExecCont p sym ext r (OverrideLang ret) ('Just args)) -> Override p sym ext (args :: Ctx CrucibleType) ret
+ Lang.Crucible.Simulator: Override :: FunctionName -> (forall r. () => ExecCont p sym ext r (OverrideLang ret) ('Just args)) -> Override p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType)
- Lang.Crucible.Simulator: OverrideState :: !Override p sym ext args ret -> !SimState p sym ext rtp (OverrideLang ret) ('Just args) -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator: OverrideState :: !Override p sym ext args ret -> !SimState p sym ext rtp (OverrideLang ret) ('Just args) -> ExecState p sym ext rtp
- Lang.Crucible.Simulator: PartialRes :: !ProgramLoc -> !Pred sym -> !GlobalPair sym v -> !AbortedResult sym ext -> PartialResult sym ext (v :: Type)
+ Lang.Crucible.Simulator: PartialRes :: !ProgramLoc -> !Pred sym -> !GlobalPair sym v -> !AbortedResult sym ext -> PartialResult sym ext v
- Lang.Crucible.Simulator: RV :: RegValue sym tp -> RegValue' sym tp
+ Lang.Crucible.Simulator: RV :: RegValue sym tp -> RegValue' sym (tp :: CrucibleType)
- Lang.Crucible.Simulator: RegEntry :: !TypeRepr tp -> !RegValue sym tp -> RegEntry sym tp
+ Lang.Crucible.Simulator: RegEntry :: !TypeRepr tp -> !RegValue sym tp -> RegEntry sym (tp :: CrucibleType)
- Lang.Crucible.Simulator: ResultState :: !ExecResult p sym ext rtp -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator: ResultState :: !ExecResult p sym ext rtp -> ExecState p sym ext rtp
- Lang.Crucible.Simulator: ReturnState :: !FunctionName -> !ValueFromValue p sym ext rtp ret -> !RegEntry sym ret -> !SimState p sym ext rtp f a -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator: ReturnState :: !FunctionName -> !ValueFromValue p sym ext rtp ret -> !RegEntry sym ret -> !SimState p sym ext rtp f a -> ExecState p sym ext rtp
- Lang.Crucible.Simulator: RolledType :: RegValue sym (UnrollType nm ctx) -> RolledType sym nm ctx
+ Lang.Crucible.Simulator: RolledType :: RegValue sym (UnrollType nm ctx) -> RolledType sym (nm :: Symbol) (ctx :: Ctx CrucibleType)
- Lang.Crucible.Simulator: RunningState :: !RunningStateInfo blocks args -> !SimState p sym ext rtp (CrucibleLang blocks r) ('Just args) -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator: RunningState :: !RunningStateInfo blocks args -> !SimState p sym ext rtp (CrucibleLang blocks r) ('Just args) -> ExecState p sym ext rtp
- Lang.Crucible.Simulator: SimContext :: !SomeBackend sym -> !forall a. IsSymInterfaceProof sym a -> !IntrinsicTypes sym -> !HandleAllocator -> !Handle -> ExtensionImpl personality sym ext -> !FunctionBindings personality sym ext -> !personality -> !Map Text (Metric personality sym ext) -> SimContext (personality :: Type) (sym :: Type) (ext :: Type)
+ Lang.Crucible.Simulator: SimContext :: !SomeBackend sym -> !forall a. () => IsSymInterfaceProof sym a -> !IntrinsicTypes sym -> !HandleAllocator -> !Handle -> ExtensionImpl p sym ext -> !FunctionBindings p sym ext -> !p -> !Map Text (Metric p sym ext) -> SimContext p sym ext
- Lang.Crucible.Simulator: SymbolicBranchState :: !Pred sym -> !PausedFrame p sym ext rtp f -> !PausedFrame p sym ext rtp f -> !CrucibleBranchTarget f postdom_args -> !SimState p sym ext rtp f ('Just args) -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator: SymbolicBranchState :: !Pred sym -> !PausedFrame p sym ext rtp f -> !PausedFrame p sym ext rtp f -> !CrucibleBranchTarget f postdom_args -> !SimState p sym ext rtp f ('Just args) -> ExecState p sym ext rtp
- Lang.Crucible.Simulator: TailCallState :: !ValueFromValue p sym ext rtp ret -> !ResolvedCall p sym ext ret -> !SimState p sym ext rtp f a -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator: TailCallState :: !ValueFromValue p sym ext rtp ret -> !ResolvedCall p sym ext ret -> !SimState p sym ext rtp f a -> ExecState p sym ext rtp
- Lang.Crucible.Simulator: TimeoutResult :: !ExecState p sym ext r -> ExecResult p sym ext (r :: Type)
+ Lang.Crucible.Simulator: TimeoutResult :: !ExecState p sym ext rtp -> ExecResult p sym ext rtp
- Lang.Crucible.Simulator: TotalRes :: !GlobalPair sym v -> PartialResult sym ext (v :: Type)
+ Lang.Crucible.Simulator: TotalRes :: !GlobalPair sym v -> PartialResult sym ext v
- Lang.Crucible.Simulator: UnwindCallState :: !ValueFromValue p sym ext rtp r -> !AbortedResult sym ext -> !SimState p sym ext rtp f a -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator: UnwindCallState :: !ValueFromValue p sym ext rtp r -> !AbortedResult sym ext -> !SimState p sym ext rtp f a -> ExecState p sym ext rtp
- Lang.Crucible.Simulator: VB :: PartExpr (Pred sym) (RegValue sym tp) -> VariantBranch sym tp
+ Lang.Crucible.Simulator: VB :: PartExpr (Pred sym) (RegValue sym tp) -> VariantBranch sym (tp :: CrucibleType)
- Lang.Crucible.Simulator: [AbortedBranch] :: !ProgramLoc -> !Pred sym -> !AbortedResult sym ext -> !AbortedResult sym ext -> AbortedResult sym ext
+ Lang.Crucible.Simulator: [AbortedBranch] :: forall sym ext. !ProgramLoc -> !Pred sym -> !AbortedResult sym ext -> !AbortedResult sym ext -> AbortedResult sym ext
- Lang.Crucible.Simulator: [AbortedExec] :: !AbortExecReason -> !GlobalPair sym (SimFrame sym ext l args) -> AbortedResult sym ext
+ Lang.Crucible.Simulator: [AbortedExec] :: forall sym ext l (args :: Maybe (Ctx CrucibleType)). !AbortExecReason -> !GlobalPair sym (SimFrame sym ext l args) -> AbortedResult sym ext
- Lang.Crucible.Simulator: [AbortedExit] :: !ExitCode -> AbortedResult sym ext
+ Lang.Crucible.Simulator: [AbortedExit] :: forall sym ext l (args :: Maybe (Ctx CrucibleType)). !ExitCode -> !GlobalPair sym (SimFrame sym ext l args) -> AbortedResult sym ext
- Lang.Crucible.Simulator: [AnyValue] :: TypeRepr tp -> RegValue sym tp -> AnyValue sym
+ Lang.Crucible.Simulator: [AnyValue] :: forall (tp :: CrucibleType) sym. TypeRepr tp -> RegValue sym tp -> AnyValue sym
- Lang.Crucible.Simulator: [ClosureFnVal] :: !FnVal sym (args ::> tp) ret -> !TypeRepr tp -> !RegValue sym tp -> FnVal sym args ret
+ Lang.Crucible.Simulator: [ClosureFnVal] :: forall sym (args :: Ctx CrucibleType) (tp :: CrucibleType) (res :: CrucibleType). !FnVal sym (args ::> tp) res -> !TypeRepr tp -> !RegValue sym tp -> FnVal sym args res
- Lang.Crucible.Simulator: [HandleFnVal] :: !FnHandle a r -> FnVal sym a r
+ Lang.Crucible.Simulator: [HandleFnVal] :: forall (args :: Ctx CrucibleType) (res :: CrucibleType) sym. !FnHandle args res -> FnVal sym args res
- Lang.Crucible.Simulator: [IntrinsicMuxFn] :: IntrinsicClass sym nm => IntrinsicMuxFn sym nm
+ Lang.Crucible.Simulator: [IntrinsicMuxFn] :: forall sym (nm :: Symbol). IntrinsicClass sym nm => IntrinsicMuxFn sym nm
- Lang.Crucible.Simulator: [VarargsFnVal] :: !FnHandle (args ::> VectorType AnyType) ret -> !CtxRepr addlArgs -> FnVal sym (args <+> addlArgs) ret
+ Lang.Crucible.Simulator: [VarargsFnVal] :: forall (args1 :: Ctx CrucibleType) (res :: CrucibleType) (addlArgs :: Ctx CrucibleType) sym. !FnHandle (args1 ::> VectorType AnyType) res -> !CtxRepr addlArgs -> FnVal sym (args1 <+> addlArgs) res
- Lang.Crucible.Simulator: [_cruciblePersonality] :: SimContext (personality :: Type) (sym :: Type) (ext :: Type) -> !personality
+ Lang.Crucible.Simulator: [_cruciblePersonality] :: SimContext p sym ext -> !p
- Lang.Crucible.Simulator: [_ctxBackend] :: SimContext (personality :: Type) (sym :: Type) (ext :: Type) -> !SomeBackend sym
+ Lang.Crucible.Simulator: [_ctxBackend] :: SimContext p sym ext -> !SomeBackend sym
- Lang.Crucible.Simulator: [_functionBindings] :: SimContext (personality :: Type) (sym :: Type) (ext :: Type) -> !FunctionBindings personality sym ext
+ Lang.Crucible.Simulator: [_functionBindings] :: SimContext p sym ext -> !FunctionBindings p sym ext
- Lang.Crucible.Simulator: [_gpGlobals] :: GlobalPair sym (v :: Type) -> !SymGlobalState sym
+ Lang.Crucible.Simulator: [_gpGlobals] :: GlobalPair sym v -> !SymGlobalState sym
- Lang.Crucible.Simulator: [_gpValue] :: GlobalPair sym (v :: Type) -> !v
+ Lang.Crucible.Simulator: [_gpValue] :: GlobalPair sym v -> !v
- Lang.Crucible.Simulator: [_profilingMetrics] :: SimContext (personality :: Type) (sym :: Type) (ext :: Type) -> !Map Text (Metric personality sym ext)
+ Lang.Crucible.Simulator: [_profilingMetrics] :: SimContext p sym ext -> !Map Text (Metric p sym ext)
- Lang.Crucible.Simulator: [ctxIntrinsicTypes] :: SimContext (personality :: Type) (sym :: Type) (ext :: Type) -> !IntrinsicTypes sym
+ Lang.Crucible.Simulator: [ctxIntrinsicTypes] :: SimContext p sym ext -> !IntrinsicTypes sym
- Lang.Crucible.Simulator: [ctxSolverProof] :: SimContext (personality :: Type) (sym :: Type) (ext :: Type) -> !forall a. IsSymInterfaceProof sym a
+ Lang.Crucible.Simulator: [ctxSolverProof] :: SimContext p sym ext -> !forall a. () => IsSymInterfaceProof sym a
- Lang.Crucible.Simulator: [extensionEval] :: ExtensionImpl p sym ext -> forall bak rtp blocks r ctx. IsSymBackend sym bak => bak -> IntrinsicTypes sym -> (Int -> String -> IO ()) -> CrucibleState p sym ext rtp blocks r ctx -> EvalAppFunc sym (ExprExtension ext)
+ Lang.Crucible.Simulator: [extensionEval] :: ExtensionImpl p sym ext -> forall bak rtp (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType) (ctx :: Ctx CrucibleType). IsSymBackend sym bak => bak -> IntrinsicTypes sym -> (Int -> String -> IO ()) -> CrucibleState p sym ext rtp blocks r ctx -> EvalAppFunc sym (ExprExtension ext)
- Lang.Crucible.Simulator: [extensionImpl] :: SimContext (personality :: Type) (sym :: Type) (ext :: Type) -> ExtensionImpl personality sym ext
+ Lang.Crucible.Simulator: [extensionImpl] :: SimContext p sym ext -> ExtensionImpl p sym ext
- Lang.Crucible.Simulator: [overrideHandler] :: Override p sym ext (args :: Ctx CrucibleType) ret -> forall r. ExecCont p sym ext r (OverrideLang ret) ('Just args)
+ Lang.Crucible.Simulator: [overrideHandler] :: Override p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType) -> forall r. () => ExecCont p sym ext r (OverrideLang ret) ('Just args)
- Lang.Crucible.Simulator: [overrideName] :: Override p sym ext (args :: Ctx CrucibleType) ret -> FunctionName
+ Lang.Crucible.Simulator: [overrideName] :: Override p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType) -> FunctionName
- Lang.Crucible.Simulator: [printHandle] :: SimContext (personality :: Type) (sym :: Type) (ext :: Type) -> !Handle
+ Lang.Crucible.Simulator: [printHandle] :: SimContext p sym ext -> !Handle
- Lang.Crucible.Simulator: [regType] :: RegEntry sym tp -> !TypeRepr tp
+ Lang.Crucible.Simulator: [regType] :: RegEntry sym (tp :: CrucibleType) -> !TypeRepr tp
- Lang.Crucible.Simulator: [regValue] :: RegEntry sym tp -> !RegValue sym tp
+ Lang.Crucible.Simulator: [regValue] :: RegEntry sym (tp :: CrucibleType) -> !RegValue sym tp
- Lang.Crucible.Simulator: [runAH] :: AbortHandler p sym ext rtp -> forall (l :: Type) args. AbortExecReason -> ExecCont p sym ext rtp l args
+ Lang.Crucible.Simulator: [runAH] :: AbortHandler p sym ext rtp -> forall l (args :: Maybe (Ctx CrucibleType)). () => AbortExecReason -> ExecCont p sym ext rtp l args
- Lang.Crucible.Simulator: [simHandleAllocator] :: SimContext (personality :: Type) (sym :: Type) (ext :: Type) -> !HandleAllocator
+ Lang.Crucible.Simulator: [simHandleAllocator] :: SimContext p sym ext -> !HandleAllocator
- Lang.Crucible.Simulator: [unRV] :: RegValue' sym tp -> RegValue sym tp
+ Lang.Crucible.Simulator: [unRV] :: RegValue' sym (tp :: CrucibleType) -> RegValue sym tp
- Lang.Crucible.Simulator: [unVB] :: VariantBranch sym tp -> PartExpr (Pred sym) (RegValue sym tp)
+ Lang.Crucible.Simulator: [unVB] :: VariantBranch sym (tp :: CrucibleType) -> PartExpr (Pred sym) (RegValue sym tp)
- Lang.Crucible.Simulator: [unroll] :: RolledType sym nm ctx -> RegValue sym (UnrollType nm ctx)
+ Lang.Crucible.Simulator: [unroll] :: RolledType sym (nm :: Symbol) (ctx :: Ctx CrucibleType) -> RegValue sym (UnrollType nm ctx)
- Lang.Crucible.Simulator: assignReg :: TypeRepr tp -> RegValue sym tp -> RegMap sym ctx -> RegMap sym (ctx ::> tp)
+ Lang.Crucible.Simulator: assignReg :: forall (tp :: CrucibleType) sym (ctx :: Ctx CrucibleType). TypeRepr tp -> RegValue sym tp -> RegMap sym ctx -> RegMap sym (ctx ::> tp)
- Lang.Crucible.Simulator: class IntrinsicClass (sym :: Type) (nm :: Symbol)
+ Lang.Crucible.Simulator: class IntrinsicClass sym (nm :: Symbol)
- Lang.Crucible.Simulator: cruciblePersonality :: Lens' (SimContext p sym ext) p
+ Lang.Crucible.Simulator: cruciblePersonality :: forall p sym ext f. Functor f => (p -> f p) -> SimContext p sym ext -> f (SimContext p sym ext)
- Lang.Crucible.Simulator: ctxSymInterface :: Getter (SimContext p sym ext) sym
+ Lang.Crucible.Simulator: ctxSymInterface :: forall p sym ext f. (Contravariant f, Functor f) => (sym -> f sym) -> SimContext p sym ext -> f (SimContext p sym ext)
- Lang.Crucible.Simulator: data ExecResult p sym ext (r :: Type)
+ Lang.Crucible.Simulator: data ExecResult p sym ext rtp
- Lang.Crucible.Simulator: data ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator: data ExecState p sym ext rtp
- Lang.Crucible.Simulator: data FnVal (sym :: Type) (args :: Ctx CrucibleType) (res :: CrucibleType)
+ Lang.Crucible.Simulator: data FnVal sym (args :: Ctx CrucibleType) (res :: CrucibleType)
- Lang.Crucible.Simulator: data GlobalPair sym (v :: Type)
+ Lang.Crucible.Simulator: data GlobalPair sym v
- Lang.Crucible.Simulator: data IntrinsicMuxFn (sym :: Type) (nm :: Symbol)
+ Lang.Crucible.Simulator: data IntrinsicMuxFn sym (nm :: Symbol)
- Lang.Crucible.Simulator: data Override p sym ext (args :: Ctx CrucibleType) ret
+ Lang.Crucible.Simulator: data Override p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType)
- Lang.Crucible.Simulator: data PartialResult sym ext (v :: Type)
+ Lang.Crucible.Simulator: data PartialResult sym ext v
- Lang.Crucible.Simulator: data RegEntry sym tp
+ Lang.Crucible.Simulator: data RegEntry sym (tp :: CrucibleType)
- Lang.Crucible.Simulator: data SimContext (personality :: Type) (sym :: Type) (ext :: Type)
+ Lang.Crucible.Simulator: data SimContext p sym ext
- Lang.Crucible.Simulator: data SimState p sym ext rtp f (args :: Maybe (Ctx CrucibleType))
+ Lang.Crucible.Simulator: data SimState p sym ext rtp f (args :: Maybe Ctx CrucibleType)
- Lang.Crucible.Simulator: data SymGlobalState (sym :: Type)
+ Lang.Crucible.Simulator: data SymGlobalState sym
- Lang.Crucible.Simulator: emptyRegMap :: RegMap sym EmptyCtx
+ Lang.Crucible.Simulator: emptyRegMap :: RegMap sym (EmptyCtx :: Ctx CrucibleType)
- Lang.Crucible.Simulator: evalArgs :: Monad m => Assignment (Reg ctx) args -> ReaderT (CrucibleState p sym ext rtp blocks r ctx) m (RegMap sym args)
+ Lang.Crucible.Simulator: evalArgs :: forall (m :: Type -> Type) (ctx :: Ctx CrucibleType) (args :: Ctx CrucibleType) p sym ext rtp (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType). Monad m => Assignment (Reg ctx) args -> ReaderT (CrucibleState p sym ext rtp blocks r ctx) m (RegMap sym args)
- Lang.Crucible.Simulator: evalReg :: Monad m => Reg ctx tp -> ReaderT (CrucibleState p sym ext rtp blocks r ctx) m (RegValue sym tp)
+ Lang.Crucible.Simulator: evalReg :: forall (m :: Type -> Type) (ctx :: Ctx CrucibleType) (tp :: CrucibleType) p sym ext rtp (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType). Monad m => Reg ctx tp -> ReaderT (CrucibleState p sym ext rtp blocks r ctx) m (RegValue sym tp)
- Lang.Crucible.Simulator: fnValType :: FnVal sym args res -> TypeRepr (FunctionHandleType args res)
+ Lang.Crucible.Simulator: fnValType :: forall sym (args :: Ctx CrucibleType) (res :: CrucibleType). FnVal sym args res -> TypeRepr (FunctionHandleType args res)
- Lang.Crucible.Simulator: functionBindings :: Lens' (SimContext p sym ext) (FunctionBindings p sym ext)
+ Lang.Crucible.Simulator: functionBindings :: forall p sym ext f. Functor f => (FunctionBindings p sym ext -> f (FunctionBindings p sym ext)) -> SimContext p sym ext -> f (SimContext p sym ext)
- Lang.Crucible.Simulator: gpGlobals :: Simple Lens (GlobalPair sym u) (SymGlobalState sym)
+ Lang.Crucible.Simulator: gpGlobals :: forall sym u f. Functor f => (SymGlobalState sym -> f (SymGlobalState sym)) -> GlobalPair sym u -> f (GlobalPair sym u)
- Lang.Crucible.Simulator: gpValue :: Lens (GlobalPair sym u) (GlobalPair sym v) u v
+ Lang.Crucible.Simulator: gpValue :: forall sym u v f. Functor f => (u -> f v) -> GlobalPair sym u -> f (GlobalPair sym v)
- Lang.Crucible.Simulator: initSimState :: SimContext p sym ext -> SymGlobalState sym -> AbortHandler p sym ext (RegEntry sym ret) -> TypeRepr ret -> IO (SimState p sym ext (RegEntry sym ret) (OverrideLang ret) ('Just EmptyCtx))
+ Lang.Crucible.Simulator: initSimState :: forall p sym ext (ret :: CrucibleType). SimContext p sym ext -> SymGlobalState sym -> AbortHandler p sym ext (RegEntry sym ret) -> TypeRepr ret -> IO (SimState p sym ext (RegEntry sym ret) (OverrideLang ret) ('Just (EmptyCtx :: Ctx CrucibleType)))
- Lang.Crucible.Simulator: injectVariant :: IsExprBuilder sym => sym -> CtxRepr ctx -> Index ctx tp -> RegValue sym tp -> RegValue sym (VariantType ctx)
+ Lang.Crucible.Simulator: injectVariant :: forall sym (ctx :: Ctx CrucibleType) (tp :: CrucibleType). IsExprBuilder sym => sym -> CtxRepr ctx -> Index ctx tp -> RegValue sym tp -> RegValue sym (VariantType ctx)
- Lang.Crucible.Simulator: newtype RegValue' sym tp
+ Lang.Crucible.Simulator: newtype RegValue' sym (tp :: CrucibleType)
- Lang.Crucible.Simulator: newtype RolledType sym nm ctx
+ Lang.Crucible.Simulator: newtype RolledType sym (nm :: Symbol) (ctx :: Ctx CrucibleType)
- Lang.Crucible.Simulator: newtype VariantBranch sym tp
+ Lang.Crucible.Simulator: newtype VariantBranch sym (tp :: CrucibleType)
- Lang.Crucible.Simulator: partialValue :: Lens (PartialResult sym ext u) (PartialResult sym ext v) (GlobalPair sym u) (GlobalPair sym v)
+ Lang.Crucible.Simulator: partialValue :: forall sym ext u v f. Functor f => (GlobalPair sym u -> f (GlobalPair sym v)) -> PartialResult sym ext u -> f (PartialResult sym ext v)
- Lang.Crucible.Simulator: profilingMetrics :: Lens' (SimContext p sym ext) (Map Text (Metric p sym ext))
+ Lang.Crucible.Simulator: profilingMetrics :: forall p sym ext f. Functor f => (Map Text (Metric p sym ext) -> f (Map Text (Metric p sym ext))) -> SimContext p sym ext -> f (SimContext p sym ext)
- Lang.Crucible.Simulator: reg :: forall n sym ctx tp. Idx n ctx tp => RegMap sym ctx -> RegValue sym tp
+ Lang.Crucible.Simulator: reg :: forall (n :: Nat) sym (ctx :: Ctx CrucibleType) (tp :: CrucibleType). Idx n ctx tp => RegMap sym ctx -> RegValue sym tp
- Lang.Crucible.Simulator: regVal :: RegMap sym ctx -> Reg ctx tp -> RegValue sym tp
+ Lang.Crucible.Simulator: regVal :: forall sym (ctx :: Ctx CrucibleType) (tp :: CrucibleType). RegMap sym ctx -> Reg ctx tp -> RegValue sym tp
- Lang.Crucible.Simulator: stateContext :: Simple Lens (SimState p sym ext r f a) (SimContext p sym ext)
+ Lang.Crucible.Simulator: stateContext :: forall p sym ext r f1 (a :: Maybe (Ctx CrucibleType)) f2. Functor f2 => (SimContext p sym ext -> f2 (SimContext p sym ext)) -> SimState p sym ext r f1 a -> f2 (SimState p sym ext r f1 a)
- Lang.Crucible.Simulator: stepBasicBlock :: (IsSymInterface sym, IsSyntaxExtension ext) => Int -> ExecCont p sym ext rtp (CrucibleLang blocks r) ('Just ctx)
+ Lang.Crucible.Simulator: stepBasicBlock :: forall sym ext p rtp (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType) (ctx :: Ctx CrucibleType). (IsSymInterface sym, IsSyntaxExtension ext) => Int -> ExecCont p sym ext rtp (CrucibleLang blocks r) ('Just ctx)
- Lang.Crucible.Simulator: stepStmt :: forall p sym ext rtp blocks r ctx ctx'. (IsSymInterface sym, IsSyntaxExtension ext) => Int -> Stmt ext ctx ctx' -> StmtSeq ext blocks r ctx' -> ExecCont p sym ext rtp (CrucibleLang blocks r) ('Just ctx)
+ Lang.Crucible.Simulator: stepStmt :: forall p sym ext rtp (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType) (ctx :: Ctx CrucibleType) (ctx' :: Ctx CrucibleType). (IsSymInterface sym, IsSyntaxExtension ext) => Int -> Stmt ext ctx ctx' -> StmtSeq ext blocks r ctx' -> ExecCont p sym ext rtp (CrucibleLang blocks r) ('Just ctx)
- Lang.Crucible.Simulator: stepTerm :: forall p sym ext rtp blocks r ctx. (IsSymInterface sym, IsSyntaxExtension ext) => Int -> TermStmt blocks r ctx -> ExecCont p sym ext rtp (CrucibleLang blocks r) ('Just ctx)
+ Lang.Crucible.Simulator: stepTerm :: forall p sym ext rtp (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType) (ctx :: Ctx CrucibleType). (IsSymInterface sym, IsSyntaxExtension ext) => Int -> TermStmt blocks r ctx -> ExecCont p sym ext rtp (CrucibleLang blocks r) ('Just ctx)
- Lang.Crucible.Simulator: type CrucibleState p sym ext rtp blocks ret args = SimState p sym ext rtp (CrucibleLang blocks ret) ('Just args)
+ Lang.Crucible.Simulator: type CrucibleState p sym ext rtp (blocks :: Ctx Ctx CrucibleType) (ret :: CrucibleType) (args :: Ctx CrucibleType) = SimState p sym ext rtp CrucibleLang blocks ret 'Just args
- Lang.Crucible.Simulator: type ExecCont p sym ext r f a = ReaderT (SimState p sym ext r f a) IO (ExecState p sym ext r)
+ Lang.Crucible.Simulator: type ExecCont p sym ext rtp f (args :: Maybe Ctx CrucibleType) = ReaderT SimState p sym ext rtp f args IO ExecState p sym ext rtp
- Lang.Crucible.Simulator: type IntrinsicTypes sym = MapF SymbolRepr (IntrinsicMuxFn sym)
+ Lang.Crucible.Simulator: type IntrinsicTypes sym = MapF SymbolRepr IntrinsicMuxFn sym
- Lang.Crucible.Simulator: type family RegValue (sym :: Type) (tp :: CrucibleType) :: Type
+ Lang.Crucible.Simulator: type family RegValue sym (tp :: CrucibleType)
- Lang.Crucible.Simulator.Breakpoint: breakAndReturn :: (IsSymInterface sym, IsSyntaxExtension ext) => CFG ext blocks init ret -> BreakpointName -> Assignment TypeRepr args -> TypeRepr ret -> OverrideSim p sym ext rtp args ret (RegValue sym ret) -> HashMap SomeHandle [BreakpointName] -> IO (ExecutionFeature p sym ext rtp)
+ Lang.Crucible.Simulator.Breakpoint: breakAndReturn :: forall sym ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType) (args :: Ctx CrucibleType) p rtp. (IsSymInterface sym, IsSyntaxExtension ext) => CFG ext blocks init ret -> BreakpointName -> Assignment TypeRepr args -> TypeRepr ret -> OverrideSim p sym ext rtp args ret (RegValue sym ret) -> HashMap SomeHandle [BreakpointName] -> IO (ExecutionFeature p sym ext rtp)
- Lang.Crucible.Simulator.CallFrame: CallFrame :: CFG ext blocks initialArgs ret -> !CFGPostdom blocks -> !Some (BlockID blocks) -> !RegMap sym args -> !StmtSeq ext blocks ret args -> !Some (CrucibleBranchTarget (CrucibleLang blocks ret)) -> CallFrame sym ext blocks ret args
+ Lang.Crucible.Simulator.CallFrame: CallFrame :: CFG ext blocks initialArgs ret -> !CFGPostdom blocks -> !Some (BlockID blocks) -> !RegMap sym args -> !StmtSeq ext blocks ret args -> !Some (CrucibleBranchTarget (CrucibleLang blocks ret)) -> CallFrame sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (args :: Ctx CrucibleType)
- Lang.Crucible.Simulator.CallFrame: OverrideFrame :: !FunctionName -> !SomeHandle -> !RegMap sym args -> OverrideFrame sym (ret :: CrucibleType) args
+ Lang.Crucible.Simulator.CallFrame: OverrideFrame :: !FunctionName -> !SomeHandle -> !RegMap sym args -> OverrideFrame sym (ret :: CrucibleType) (args :: Ctx CrucibleType)
- Lang.Crucible.Simulator.CallFrame: [BlockTarget] :: !BlockID blocks args -> CrucibleBranchTarget (CrucibleLang blocks r) ('Just args)
+ Lang.Crucible.Simulator.CallFrame: [BlockTarget] :: forall (blocks :: Ctx (Ctx CrucibleType)) (args1 :: Ctx CrucibleType) (r :: CrucibleType). !BlockID blocks args1 -> CrucibleBranchTarget (CrucibleLang blocks r) ('Just args1)
- Lang.Crucible.Simulator.CallFrame: [MF] :: !CallFrame sym ext blocks ret args -> SimFrame sym ext (CrucibleLang blocks ret) ('Just args)
+ Lang.Crucible.Simulator.CallFrame: [MF] :: forall sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (args1 :: Ctx CrucibleType). !CallFrame sym ext blocks ret args1 -> SimFrame sym ext (CrucibleLang blocks ret) ('Just args1)
- Lang.Crucible.Simulator.CallFrame: [OF] :: !OverrideFrame sym ret args -> SimFrame sym ext (OverrideLang ret) ('Just args)
+ Lang.Crucible.Simulator.CallFrame: [OF] :: forall sym (ret :: CrucibleType) (args1 :: Ctx CrucibleType) ext. !OverrideFrame sym ret args1 -> SimFrame sym ext (OverrideLang ret) ('Just args1)
- Lang.Crucible.Simulator.CallFrame: [RF] :: !FunctionName -> !RegEntry sym (FrameRetType f) -> SimFrame sym ext f 'Nothing
+ Lang.Crucible.Simulator.CallFrame: [RF] :: forall sym f ext. !FunctionName -> !RegEntry sym (FrameRetType f) -> SimFrame sym ext f ('Nothing :: Maybe (Ctx CrucibleType))
- Lang.Crucible.Simulator.CallFrame: [ReturnTarget] :: CrucibleBranchTarget f 'Nothing
+ Lang.Crucible.Simulator.CallFrame: [ReturnTarget] :: forall f. CrucibleBranchTarget f ('Nothing :: Maybe (Ctx CrucibleType))
- Lang.Crucible.Simulator.CallFrame: [SomeHandle] :: !FnHandle args ret -> SomeHandle
+ Lang.Crucible.Simulator.CallFrame: [SomeHandle] :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType). !FnHandle args ret -> SomeHandle
- Lang.Crucible.Simulator.CallFrame: [_frameBlockID] :: CallFrame sym ext blocks ret args -> !Some (BlockID blocks)
+ Lang.Crucible.Simulator.CallFrame: [_frameBlockID] :: CallFrame sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (args :: Ctx CrucibleType) -> !Some (BlockID blocks)
- Lang.Crucible.Simulator.CallFrame: [_frameCFG] :: CallFrame sym ext blocks ret args -> CFG ext blocks initialArgs ret
+ Lang.Crucible.Simulator.CallFrame: [_frameCFG] :: CallFrame sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (args :: Ctx CrucibleType) -> CFG ext blocks initialArgs ret
- Lang.Crucible.Simulator.CallFrame: [_framePostdomMap] :: CallFrame sym ext blocks ret args -> !CFGPostdom blocks
+ Lang.Crucible.Simulator.CallFrame: [_framePostdomMap] :: CallFrame sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (args :: Ctx CrucibleType) -> !CFGPostdom blocks
- Lang.Crucible.Simulator.CallFrame: [_framePostdom] :: CallFrame sym ext blocks ret args -> !Some (CrucibleBranchTarget (CrucibleLang blocks ret))
+ Lang.Crucible.Simulator.CallFrame: [_framePostdom] :: CallFrame sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (args :: Ctx CrucibleType) -> !Some (CrucibleBranchTarget (CrucibleLang blocks ret))
- Lang.Crucible.Simulator.CallFrame: [_frameRegs] :: CallFrame sym ext blocks ret args -> !RegMap sym args
+ Lang.Crucible.Simulator.CallFrame: [_frameRegs] :: CallFrame sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (args :: Ctx CrucibleType) -> !RegMap sym args
- Lang.Crucible.Simulator.CallFrame: [_frameStmts] :: CallFrame sym ext blocks ret args -> !StmtSeq ext blocks ret args
+ Lang.Crucible.Simulator.CallFrame: [_frameStmts] :: CallFrame sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (args :: Ctx CrucibleType) -> !StmtSeq ext blocks ret args
- Lang.Crucible.Simulator.CallFrame: [_overrideHandle] :: OverrideFrame sym (ret :: CrucibleType) args -> !SomeHandle
+ Lang.Crucible.Simulator.CallFrame: [_overrideHandle] :: OverrideFrame sym (ret :: CrucibleType) (args :: Ctx CrucibleType) -> !SomeHandle
- Lang.Crucible.Simulator.CallFrame: [_overrideRegMap] :: OverrideFrame sym (ret :: CrucibleType) args -> !RegMap sym args
+ Lang.Crucible.Simulator.CallFrame: [_overrideRegMap] :: OverrideFrame sym (ret :: CrucibleType) (args :: Ctx CrucibleType) -> !RegMap sym args
- Lang.Crucible.Simulator.CallFrame: [_override] :: OverrideFrame sym (ret :: CrucibleType) args -> !FunctionName
+ Lang.Crucible.Simulator.CallFrame: [_override] :: OverrideFrame sym (ret :: CrucibleType) (args :: Ctx CrucibleType) -> !FunctionName
- Lang.Crucible.Simulator.CallFrame: crucibleSimFrame :: Lens (SimFrame sym ext (CrucibleLang blocks r) ('Just args)) (SimFrame sym ext (CrucibleLang blocks' r') ('Just args')) (CallFrame sym ext blocks r args) (CallFrame sym ext blocks' r' args')
+ Lang.Crucible.Simulator.CallFrame: crucibleSimFrame :: forall sym ext (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType) (args :: Ctx CrucibleType) (blocks' :: Ctx (Ctx CrucibleType)) (r' :: CrucibleType) (args' :: Ctx CrucibleType) f. Functor f => (CallFrame sym ext blocks r args -> f (CallFrame sym ext blocks' r' args')) -> SimFrame sym ext (CrucibleLang blocks r) ('Just args) -> f (SimFrame sym ext (CrucibleLang blocks' r') ('Just args'))
- Lang.Crucible.Simulator.CallFrame: data CallFrame sym ext blocks ret args
+ Lang.Crucible.Simulator.CallFrame: data CallFrame sym ext (blocks :: Ctx Ctx CrucibleType) (ret :: CrucibleType) (args :: Ctx CrucibleType)
- Lang.Crucible.Simulator.CallFrame: data CrucibleBranchTarget f (args :: Maybe (Ctx CrucibleType))
+ Lang.Crucible.Simulator.CallFrame: data CrucibleBranchTarget f (args :: Maybe Ctx CrucibleType)
- Lang.Crucible.Simulator.CallFrame: data CrucibleLang (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType)
+ Lang.Crucible.Simulator.CallFrame: data CrucibleLang (blocks :: Ctx Ctx CrucibleType) (ret :: CrucibleType)
- Lang.Crucible.Simulator.CallFrame: data OverrideFrame sym (ret :: CrucibleType) args
+ Lang.Crucible.Simulator.CallFrame: data OverrideFrame sym (ret :: CrucibleType) (args :: Ctx CrucibleType)
- Lang.Crucible.Simulator.CallFrame: data SimFrame sym ext l (args :: Maybe (Ctx CrucibleType))
+ Lang.Crucible.Simulator.CallFrame: data SimFrame sym ext f (args :: Maybe Ctx CrucibleType)
- Lang.Crucible.Simulator.CallFrame: extendFrame :: TypeRepr tp -> RegValue sym tp -> StmtSeq ext blocks ret (ctx ::> tp) -> CallFrame sym ext blocks ret ctx -> CallFrame sym ext blocks ret (ctx ::> tp)
+ Lang.Crucible.Simulator.CallFrame: extendFrame :: forall (tp :: CrucibleType) sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType). TypeRepr tp -> RegValue sym tp -> StmtSeq ext blocks ret (ctx ::> tp) -> CallFrame sym ext blocks ret ctx -> CallFrame sym ext blocks ret (ctx ::> tp)
- Lang.Crucible.Simulator.CallFrame: frameBlockID :: Simple Lens (CallFrame sym ext blocks ret ctx) (Some (BlockID blocks))
+ Lang.Crucible.Simulator.CallFrame: frameBlockID :: forall sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType) f. Functor f => (Some (BlockID blocks) -> f (Some (BlockID blocks))) -> CallFrame sym ext blocks ret ctx -> f (CallFrame sym ext blocks ret ctx)
- Lang.Crucible.Simulator.CallFrame: frameBlockMap :: CallFrame sym ext blocks ret ctx -> BlockMap ext blocks ret
+ Lang.Crucible.Simulator.CallFrame: frameBlockMap :: forall sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType). CallFrame sym ext blocks ret ctx -> BlockMap ext blocks ret
- Lang.Crucible.Simulator.CallFrame: frameFunctionName :: Getter (SimFrame sym ext f a) FunctionName
+ Lang.Crucible.Simulator.CallFrame: frameFunctionName :: forall sym ext f1 (a :: Maybe (Ctx CrucibleType)) f2. (Contravariant f2, Functor f2) => (FunctionName -> f2 FunctionName) -> SimFrame sym ext f1 a -> f2 (SimFrame sym ext f1 a)
- Lang.Crucible.Simulator.CallFrame: frameHandle :: CallFrame sym ext blocks ret ctx -> SomeHandle
+ Lang.Crucible.Simulator.CallFrame: frameHandle :: forall sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType). CallFrame sym ext blocks ret ctx -> SomeHandle
- Lang.Crucible.Simulator.CallFrame: framePostdom :: Simple Lens (CallFrame sym ext blocks ret ctx) (Some (CrucibleBranchTarget (CrucibleLang blocks ret)))
+ Lang.Crucible.Simulator.CallFrame: framePostdom :: forall sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType) f. Functor f => (Some (CrucibleBranchTarget (CrucibleLang blocks ret)) -> f (Some (CrucibleBranchTarget (CrucibleLang blocks ret)))) -> CallFrame sym ext blocks ret ctx -> f (CallFrame sym ext blocks ret ctx)
- Lang.Crucible.Simulator.CallFrame: framePostdomMap :: Simple Lens (CallFrame sym ext blocks ret ctx) (CFGPostdom blocks)
+ Lang.Crucible.Simulator.CallFrame: framePostdomMap :: forall sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType) f. Functor f => (CFGPostdom blocks -> f (CFGPostdom blocks)) -> CallFrame sym ext blocks ret ctx -> f (CallFrame sym ext blocks ret ctx)
- Lang.Crucible.Simulator.CallFrame: frameProgramLoc :: CallFrame sym ext blocks ret ctx -> ProgramLoc
+ Lang.Crucible.Simulator.CallFrame: frameProgramLoc :: forall sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType). CallFrame sym ext blocks ret ctx -> ProgramLoc
- Lang.Crucible.Simulator.CallFrame: frameRegs :: Simple Lens (CallFrame sym ext blocks ret args) (RegMap sym args)
+ Lang.Crucible.Simulator.CallFrame: frameRegs :: forall sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (args :: Ctx CrucibleType) f. Functor f => (RegMap sym args -> f (RegMap sym args)) -> CallFrame sym ext blocks ret args -> f (CallFrame sym ext blocks ret args)
- Lang.Crucible.Simulator.CallFrame: frameReturnType :: CallFrame sym ext blocks ret ctx -> TypeRepr ret
+ Lang.Crucible.Simulator.CallFrame: frameReturnType :: forall sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType). CallFrame sym ext blocks ret ctx -> TypeRepr ret
- Lang.Crucible.Simulator.CallFrame: frameStmts :: Simple Lens (CallFrame sym ext blocks ret ctx) (StmtSeq ext blocks ret ctx)
+ Lang.Crucible.Simulator.CallFrame: frameStmts :: forall sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType) f. Functor f => (StmtSeq ext blocks ret ctx -> f (StmtSeq ext blocks ret ctx)) -> CallFrame sym ext blocks ret ctx -> f (CallFrame sym ext blocks ret ctx)
- Lang.Crucible.Simulator.CallFrame: fromCallFrame :: SimFrame sym ext (CrucibleLang b r) ('Just a) -> CallFrame sym ext b r a
+ Lang.Crucible.Simulator.CallFrame: fromCallFrame :: forall sym ext (b :: Ctx (Ctx CrucibleType)) (r :: CrucibleType) (a :: Ctx CrucibleType). SimFrame sym ext (CrucibleLang b r) ('Just a) -> CallFrame sym ext b r a
- Lang.Crucible.Simulator.CallFrame: fromReturnFrame :: SimFrame sym ext f 'Nothing -> RegEntry sym (FrameRetType f)
+ Lang.Crucible.Simulator.CallFrame: fromReturnFrame :: SimFrame sym ext f ('Nothing :: Maybe (Ctx CrucibleType)) -> RegEntry sym (FrameRetType f)
- Lang.Crucible.Simulator.CallFrame: mergeCallFrame :: IsSymInterface sym => sym -> IntrinsicTypes sym -> MuxFn (Pred sym) (CallFrame sym ext blocks ret args)
+ Lang.Crucible.Simulator.CallFrame: mergeCallFrame :: forall sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (args :: Ctx CrucibleType). IsSymInterface sym => sym -> IntrinsicTypes sym -> MuxFn (Pred sym) (CallFrame sym ext blocks ret args)
- Lang.Crucible.Simulator.CallFrame: mkBlockFrame :: CFG ext blocks init ret -> BlockID blocks args -> CFGPostdom blocks -> RegMap sym args -> CallFrame sym ext blocks ret args
+ Lang.Crucible.Simulator.CallFrame: mkBlockFrame :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType) (args :: Ctx CrucibleType) sym. CFG ext blocks init ret -> BlockID blocks args -> CFGPostdom blocks -> RegMap sym args -> CallFrame sym ext blocks ret args
- Lang.Crucible.Simulator.CallFrame: mkCallFrame :: CFG ext blocks init ret -> CFGPostdom blocks -> RegMap sym init -> CallFrame sym ext blocks ret init
+ Lang.Crucible.Simulator.CallFrame: mkCallFrame :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType) sym. CFG ext blocks init ret -> CFGPostdom blocks -> RegMap sym init -> CallFrame sym ext blocks ret init
- Lang.Crucible.Simulator.CallFrame: override :: Simple Lens (OverrideFrame sym ret args) FunctionName
+ Lang.Crucible.Simulator.CallFrame: override :: forall sym (ret :: CrucibleType) (args :: Ctx CrucibleType) f. Functor f => (FunctionName -> f FunctionName) -> OverrideFrame sym ret args -> f (OverrideFrame sym ret args)
- Lang.Crucible.Simulator.CallFrame: overrideHandle :: Simple Lens (OverrideFrame sym ret args) SomeHandle
+ Lang.Crucible.Simulator.CallFrame: overrideHandle :: forall sym (ret :: CrucibleType) (args :: Ctx CrucibleType) f. Functor f => (SomeHandle -> f SomeHandle) -> OverrideFrame sym ret args -> f (OverrideFrame sym ret args)
- Lang.Crucible.Simulator.CallFrame: overrideRegMap :: Lens (OverrideFrame sym ret args) (OverrideFrame sym ret args') (RegMap sym args) (RegMap sym args')
+ Lang.Crucible.Simulator.CallFrame: overrideRegMap :: forall sym (ret :: CrucibleType) (args :: Ctx CrucibleType) (args' :: Ctx CrucibleType) f. Functor f => (RegMap sym args -> f (RegMap sym args')) -> OverrideFrame sym ret args -> f (OverrideFrame sym ret args')
- Lang.Crucible.Simulator.CallFrame: overrideSimFrame :: Lens (SimFrame sym ext (OverrideLang r) ('Just args)) (SimFrame sym ext (OverrideLang r') ('Just args')) (OverrideFrame sym r args) (OverrideFrame sym r' args')
+ Lang.Crucible.Simulator.CallFrame: overrideSimFrame :: forall sym ext (r :: CrucibleType) (args :: Ctx CrucibleType) (r' :: CrucibleType) (args' :: Ctx CrucibleType) f. Functor f => (OverrideFrame sym r args -> f (OverrideFrame sym r' args')) -> SimFrame sym ext (OverrideLang r) ('Just args) -> f (SimFrame sym ext (OverrideLang r') ('Just args'))
- Lang.Crucible.Simulator.CallFrame: ppBranchTarget :: CrucibleBranchTarget f args -> String
+ Lang.Crucible.Simulator.CallFrame: ppBranchTarget :: forall f (args :: Maybe (Ctx CrucibleType)). CrucibleBranchTarget f args -> String
- Lang.Crucible.Simulator.CallFrame: setFrameBlock :: BlockID blocks args -> RegMap sym args -> CallFrame sym ext blocks ret ctx -> CallFrame sym ext blocks ret args
+ Lang.Crucible.Simulator.CallFrame: setFrameBlock :: forall (blocks :: Ctx (Ctx CrucibleType)) (args :: Ctx CrucibleType) sym ext (ret :: CrucibleType) (ctx :: Ctx CrucibleType). BlockID blocks args -> RegMap sym args -> CallFrame sym ext blocks ret ctx -> CallFrame sym ext blocks ret args
- Lang.Crucible.Simulator.CallFrame: setFrameBreakpointPostdomInfo :: [BreakpointName] -> CallFrame sym ext blocks ret ctx -> CallFrame sym ext blocks ret ctx
+ Lang.Crucible.Simulator.CallFrame: setFrameBreakpointPostdomInfo :: forall sym ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType). [BreakpointName] -> CallFrame sym ext blocks ret ctx -> CallFrame sym ext blocks ret ctx
- Lang.Crucible.Simulator.CallFrame: type family FrameRetType (f :: Type) :: CrucibleType
+ Lang.Crucible.Simulator.CallFrame: type family FrameRetType f :: CrucibleType
- Lang.Crucible.Simulator.CallFrame: updateFrame :: RegMap sym ctx' -> BlockID blocks ctx -> StmtSeq ext blocks ret ctx' -> CallFrame sym ext blocks ret ctx -> CallFrame sym ext blocks ret ctx'
+ Lang.Crucible.Simulator.CallFrame: updateFrame :: forall sym (ctx' :: Ctx CrucibleType) (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType) ext (ret :: CrucibleType). RegMap sym ctx' -> BlockID blocks ctx -> StmtSeq ext blocks ret ctx' -> CallFrame sym ext blocks ret ctx -> CallFrame sym ext blocks ret ctx'
- Lang.Crucible.Simulator.EvalStmt: [ExecutionFeatureModifiedState] :: ExecState p sym ext rtp -> ExecutionFeatureResult p sym ext rtp
+ Lang.Crucible.Simulator.EvalStmt: [ExecutionFeatureModifiedState] :: forall p sym ext rtp. ExecState p sym ext rtp -> ExecutionFeatureResult p sym ext rtp
- Lang.Crucible.Simulator.EvalStmt: [ExecutionFeatureNewState] :: ExecState p sym ext rtp -> ExecutionFeatureResult p sym ext rtp
+ Lang.Crucible.Simulator.EvalStmt: [ExecutionFeatureNewState] :: forall p sym ext rtp. ExecState p sym ext rtp -> ExecutionFeatureResult p sym ext rtp
- Lang.Crucible.Simulator.EvalStmt: [ExecutionFeatureNoChange] :: ExecutionFeatureResult p sym ext rtp
+ Lang.Crucible.Simulator.EvalStmt: [ExecutionFeatureNoChange] :: forall p sym ext rtp. ExecutionFeatureResult p sym ext rtp
- Lang.Crucible.Simulator.EvalStmt: advanceCrucibleState :: (IsSymInterface sym, IsSyntaxExtension ext) => ExecCont p sym ext rtp f a -> SimState p sym ext rtp f a -> IO (ExecState p sym ext rtp)
+ Lang.Crucible.Simulator.EvalStmt: advanceCrucibleState :: forall sym ext p rtp f (a :: Maybe (Ctx CrucibleType)). (IsSymInterface sym, IsSyntaxExtension ext) => ExecCont p sym ext rtp f a -> SimState p sym ext rtp f a -> IO (ExecState p sym ext rtp)
- Lang.Crucible.Simulator.EvalStmt: alterRef :: IsSymInterface sym => sym -> IntrinsicTypes sym -> TypeRepr tp -> MuxTree sym (RefCell tp) -> PartExpr (Pred sym) (RegValue sym tp) -> SymGlobalState sym -> IO (SymGlobalState sym)
+ Lang.Crucible.Simulator.EvalStmt: alterRef :: forall sym (tp :: CrucibleType). IsSymInterface sym => sym -> IntrinsicTypes sym -> TypeRepr tp -> MuxTree sym (RefCell tp) -> PartExpr (Pred sym) (RegValue sym tp) -> SymGlobalState sym -> IO (SymGlobalState sym)
- Lang.Crucible.Simulator.EvalStmt: dispatchExecState :: (IsSymInterface sym, IsSyntaxExtension ext) => IO Int -> ExecState p sym ext rtp -> (ExecResult p sym ext rtp -> IO z) -> (forall f a. ExecCont p sym ext rtp f a -> SimState p sym ext rtp f a -> IO z) -> IO z
+ Lang.Crucible.Simulator.EvalStmt: dispatchExecState :: (IsSymInterface sym, IsSyntaxExtension ext) => IO Int -> ExecState p sym ext rtp -> (ExecResult p sym ext rtp -> IO z) -> (forall f (a :: Maybe (Ctx CrucibleType)). () => ExecCont p sym ext rtp f a -> SimState p sym ext rtp f a -> IO z) -> IO z
- Lang.Crucible.Simulator.EvalStmt: evalArgs :: Monad m => Assignment (Reg ctx) args -> ReaderT (CrucibleState p sym ext rtp blocks r ctx) m (RegMap sym args)
+ Lang.Crucible.Simulator.EvalStmt: evalArgs :: forall (m :: Type -> Type) (ctx :: Ctx CrucibleType) (args :: Ctx CrucibleType) p sym ext rtp (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType). Monad m => Assignment (Reg ctx) args -> ReaderT (CrucibleState p sym ext rtp blocks r ctx) m (RegMap sym args)
- Lang.Crucible.Simulator.EvalStmt: evalExpr :: forall p sym ext ctx tp rtp blocks r. (IsSymInterface sym, IsSyntaxExtension ext) => Int -> Expr ext ctx tp -> ReaderT (CrucibleState p sym ext rtp blocks r ctx) IO (RegValue sym tp)
+ Lang.Crucible.Simulator.EvalStmt: evalExpr :: forall p sym ext (ctx :: Ctx CrucibleType) (tp :: CrucibleType) rtp (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType). (IsSymInterface sym, IsSyntaxExtension ext) => Int -> Expr ext ctx tp -> ReaderT (CrucibleState p sym ext rtp blocks r ctx) IO (RegValue sym tp)
- Lang.Crucible.Simulator.EvalStmt: evalJumpTarget :: (IsSymInterface sym, Monad m) => JumpTarget blocks ctx -> ReaderT (CrucibleState p sym ext rtp blocks r ctx) m (ResolvedJump sym blocks)
+ Lang.Crucible.Simulator.EvalStmt: evalJumpTarget :: forall sym (m :: Type -> Type) (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType) p ext rtp (r :: CrucibleType). (IsSymInterface sym, Monad m) => JumpTarget blocks ctx -> ReaderT (CrucibleState p sym ext rtp blocks r ctx) m (ResolvedJump sym blocks)
- Lang.Crucible.Simulator.EvalStmt: evalReg :: Monad m => Reg ctx tp -> ReaderT (CrucibleState p sym ext rtp blocks r ctx) m (RegValue sym tp)
+ Lang.Crucible.Simulator.EvalStmt: evalReg :: forall (m :: Type -> Type) (ctx :: Ctx CrucibleType) (tp :: CrucibleType) p sym ext rtp (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType). Monad m => Reg ctx tp -> ReaderT (CrucibleState p sym ext rtp blocks r ctx) m (RegValue sym tp)
- Lang.Crucible.Simulator.EvalStmt: evalReg' :: Monad m => Reg ctx tp -> ReaderT (CrucibleState p sym ext rtp blocks r ctx) m (RegEntry sym tp)
+ Lang.Crucible.Simulator.EvalStmt: evalReg' :: forall (m :: Type -> Type) (ctx :: Ctx CrucibleType) (tp :: CrucibleType) p sym ext rtp (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType). Monad m => Reg ctx tp -> ReaderT (CrucibleState p sym ext rtp blocks r ctx) m (RegEntry sym tp)
- Lang.Crucible.Simulator.EvalStmt: evalSwitchTarget :: (IsSymInterface sym, Monad m) => SwitchTarget blocks ctx tp -> RegEntry sym tp -> ReaderT (CrucibleState p sym ext rtp blocks r ctx) m (ResolvedJump sym blocks)
+ Lang.Crucible.Simulator.EvalStmt: evalSwitchTarget :: forall sym (m :: Type -> Type) (blocks :: Ctx (Ctx CrucibleType)) (ctx :: Ctx CrucibleType) (tp :: CrucibleType) p ext rtp (r :: CrucibleType). (IsSymInterface sym, Monad m) => SwitchTarget blocks ctx tp -> RegEntry sym tp -> ReaderT (CrucibleState p sym ext rtp blocks r ctx) m (ResolvedJump sym blocks)
- Lang.Crucible.Simulator.EvalStmt: readRef :: IsSymBackend sym bak => bak -> IntrinsicTypes sym -> TypeRepr tp -> MuxTree sym (RefCell tp) -> SymGlobalState sym -> IO (RegValue sym tp)
+ Lang.Crucible.Simulator.EvalStmt: readRef :: forall sym bak (tp :: CrucibleType). IsSymBackend sym bak => bak -> IntrinsicTypes sym -> TypeRepr tp -> MuxTree sym (RefCell tp) -> SymGlobalState sym -> IO (RegValue sym tp)
- Lang.Crucible.Simulator.EvalStmt: stepBasicBlock :: (IsSymInterface sym, IsSyntaxExtension ext) => Int -> ExecCont p sym ext rtp (CrucibleLang blocks r) ('Just ctx)
+ Lang.Crucible.Simulator.EvalStmt: stepBasicBlock :: forall sym ext p rtp (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType) (ctx :: Ctx CrucibleType). (IsSymInterface sym, IsSyntaxExtension ext) => Int -> ExecCont p sym ext rtp (CrucibleLang blocks r) ('Just ctx)
- Lang.Crucible.Simulator.EvalStmt: stepStmt :: forall p sym ext rtp blocks r ctx ctx'. (IsSymInterface sym, IsSyntaxExtension ext) => Int -> Stmt ext ctx ctx' -> StmtSeq ext blocks r ctx' -> ExecCont p sym ext rtp (CrucibleLang blocks r) ('Just ctx)
+ Lang.Crucible.Simulator.EvalStmt: stepStmt :: forall p sym ext rtp (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType) (ctx :: Ctx CrucibleType) (ctx' :: Ctx CrucibleType). (IsSymInterface sym, IsSyntaxExtension ext) => Int -> Stmt ext ctx ctx' -> StmtSeq ext blocks r ctx' -> ExecCont p sym ext rtp (CrucibleLang blocks r) ('Just ctx)
- Lang.Crucible.Simulator.EvalStmt: stepTerm :: forall p sym ext rtp blocks r ctx. (IsSymInterface sym, IsSyntaxExtension ext) => Int -> TermStmt blocks r ctx -> ExecCont p sym ext rtp (CrucibleLang blocks r) ('Just ctx)
+ Lang.Crucible.Simulator.EvalStmt: stepTerm :: forall p sym ext rtp (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType) (ctx :: Ctx CrucibleType). (IsSymInterface sym, IsSyntaxExtension ext) => Int -> TermStmt blocks r ctx -> ExecCont p sym ext rtp (CrucibleLang blocks r) ('Just ctx)
- Lang.Crucible.Simulator.Evaluation: evalApp :: forall sym bak ext. IsSymBackend sym bak => bak -> IntrinsicTypes sym -> (Int -> String -> IO ()) -> EvalAppFunc sym (ExprExtension ext) -> EvalAppFunc sym (App ext)
+ Lang.Crucible.Simulator.Evaluation: evalApp :: IsSymBackend sym bak => bak -> IntrinsicTypes sym -> (Int -> String -> IO ()) -> EvalAppFunc sym (ExprExtension ext) -> EvalAppFunc sym (App ext)
- Lang.Crucible.Simulator.ExecutionTree: AH :: (forall (l :: Type) args. AbortExecReason -> ExecCont p sym ext rtp l args) -> AbortHandler p sym ext rtp
+ Lang.Crucible.Simulator.ExecutionTree: AH :: (forall l (args :: Maybe (Ctx CrucibleType)). () => AbortExecReason -> ExecCont p sym ext rtp l args) -> AbortHandler p sym ext rtp
- Lang.Crucible.Simulator.ExecutionTree: AbortState :: !AbortExecReason -> !SimState p sym ext rtp f a -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: AbortState :: !AbortExecReason -> !SimState p sym ext rtp f a -> ExecState p sym ext rtp
- Lang.Crucible.Simulator.ExecutionTree: AbortedResult :: !SimContext p sym ext -> !AbortedResult sym ext -> ExecResult p sym ext (r :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: AbortedResult :: !SimContext p sym ext -> !AbortedResult sym ext -> ExecResult p sym ext rtp
- Lang.Crucible.Simulator.ExecutionTree: ActiveTree :: !ValueFromFrame p sym ext root f -> !PartialResultFrame sym ext f args -> ActiveTree p sym ext root (f :: Type) args
+ Lang.Crucible.Simulator.ExecutionTree: ActiveTree :: !ValueFromFrame p sym ext root f -> !PartialResultFrame sym ext f args -> ActiveTree p sym ext root f (args :: Maybe (Ctx CrucibleType))
- Lang.Crucible.Simulator.ExecutionTree: BranchMergeState :: !CrucibleBranchTarget f args -> !SimState p sym ext rtp f args -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: BranchMergeState :: !CrucibleBranchTarget f args -> !SimState p sym ext rtp f args -> ExecState p sym ext rtp
- Lang.Crucible.Simulator.ExecutionTree: CallState :: !ReturnHandler ret p sym ext rtp f a -> !ResolvedCall p sym ext ret -> !SimState p sym ext rtp f a -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: CallState :: !ReturnHandler ret p sym ext rtp f a -> !ResolvedCall p sym ext ret -> !SimState p sym ext rtp f a -> ExecState p sym ext rtp
- Lang.Crucible.Simulator.ExecutionTree: ControlTransferState :: !ControlResumption p sym ext rtp f -> !SimState p sym ext rtp f ('Just a) -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: ControlTransferState :: !ControlResumption p sym ext rtp f -> !SimState p sym ext rtp f ('Just a) -> ExecState p sym ext rtp
- Lang.Crucible.Simulator.ExecutionTree: ExtensionImpl :: (forall bak rtp blocks r ctx. IsSymBackend sym bak => bak -> IntrinsicTypes sym -> (Int -> String -> IO ()) -> CrucibleState p sym ext rtp blocks r ctx -> EvalAppFunc sym (ExprExtension ext)) -> EvalStmtFunc p sym ext -> ExtensionImpl p sym ext
+ Lang.Crucible.Simulator.ExecutionTree: ExtensionImpl :: (forall bak rtp (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType) (ctx :: Ctx CrucibleType). IsSymBackend sym bak => bak -> IntrinsicTypes sym -> (Int -> String -> IO ()) -> CrucibleState p sym ext rtp blocks r ctx -> EvalAppFunc sym (ExprExtension ext)) -> EvalStmtFunc p sym ext -> ExtensionImpl p sym ext
- Lang.Crucible.Simulator.ExecutionTree: FinishedResult :: !SimContext p sym ext -> !PartialResult sym ext r -> ExecResult p sym ext (r :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: FinishedResult :: !SimContext p sym ext -> !PartialResult sym ext rtp -> ExecResult p sym ext rtp
- Lang.Crucible.Simulator.ExecutionTree: GlobalPair :: !v -> !SymGlobalState sym -> GlobalPair sym (v :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: GlobalPair :: !v -> !SymGlobalState sym -> GlobalPair sym v
- Lang.Crucible.Simulator.ExecutionTree: InitialState :: !SimContext p sym ext -> !SymGlobalState sym -> !AbortHandler p sym ext (RegEntry sym ret) -> !TypeRepr ret -> !ExecCont p sym ext (RegEntry sym ret) (OverrideLang ret) ('Just EmptyCtx) -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: InitialState :: !SimContext p sym ext -> !SymGlobalState sym -> !AbortHandler p sym ext (RegEntry sym ret) -> !TypeRepr ret -> !ExecCont p sym ext (RegEntry sym ret) (OverrideLang ret) ('Just (EmptyCtx :: Ctx CrucibleType)) -> ExecState p sym ext rtp
- Lang.Crucible.Simulator.ExecutionTree: Metric :: (forall rtp f args. SimState p sym ext rtp f args -> IO Integer) -> Metric p sym ext
+ Lang.Crucible.Simulator.ExecutionTree: Metric :: (forall rtp f (args :: Maybe (Ctx CrucibleType)). () => SimState p sym ext rtp f args -> IO Integer) -> Metric p sym ext
- Lang.Crucible.Simulator.ExecutionTree: Override :: FunctionName -> (forall r. ExecCont p sym ext r (OverrideLang ret) ('Just args)) -> Override p sym ext (args :: Ctx CrucibleType) ret
+ Lang.Crucible.Simulator.ExecutionTree: Override :: FunctionName -> (forall r. () => ExecCont p sym ext r (OverrideLang ret) ('Just args)) -> Override p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType)
- Lang.Crucible.Simulator.ExecutionTree: OverrideState :: !Override p sym ext args ret -> !SimState p sym ext rtp (OverrideLang ret) ('Just args) -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: OverrideState :: !Override p sym ext args ret -> !SimState p sym ext rtp (OverrideLang ret) ('Just args) -> ExecState p sym ext rtp
- Lang.Crucible.Simulator.ExecutionTree: PartialRes :: !ProgramLoc -> !Pred sym -> !GlobalPair sym v -> !AbortedResult sym ext -> PartialResult sym ext (v :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: PartialRes :: !ProgramLoc -> !Pred sym -> !GlobalPair sym v -> !AbortedResult sym ext -> PartialResult sym ext v
- Lang.Crucible.Simulator.ExecutionTree: ResolvedJump :: !BlockID blocks args -> !RegMap sym args -> ResolvedJump sym blocks
+ Lang.Crucible.Simulator.ExecutionTree: ResolvedJump :: !BlockID blocks args -> !RegMap sym args -> ResolvedJump sym (blocks :: Ctx (Ctx CrucibleType))
- Lang.Crucible.Simulator.ExecutionTree: ResultState :: !ExecResult p sym ext rtp -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: ResultState :: !ExecResult p sym ext rtp -> ExecState p sym ext rtp
- Lang.Crucible.Simulator.ExecutionTree: ReturnState :: !FunctionName -> !ValueFromValue p sym ext rtp ret -> !RegEntry sym ret -> !SimState p sym ext rtp f a -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: ReturnState :: !FunctionName -> !ValueFromValue p sym ext rtp ret -> !RegEntry sym ret -> !SimState p sym ext rtp f a -> ExecState p sym ext rtp
- Lang.Crucible.Simulator.ExecutionTree: RunBlockEnd :: !Some (BlockID blocks) -> RunningStateInfo blocks args
+ Lang.Crucible.Simulator.ExecutionTree: RunBlockEnd :: !Some (BlockID blocks) -> RunningStateInfo (blocks :: Ctx (Ctx CrucibleType)) (args :: Ctx CrucibleType)
- Lang.Crucible.Simulator.ExecutionTree: RunBlockStart :: !BlockID blocks args -> RunningStateInfo blocks args
+ Lang.Crucible.Simulator.ExecutionTree: RunBlockStart :: !BlockID blocks args -> RunningStateInfo (blocks :: Ctx (Ctx CrucibleType)) (args :: Ctx CrucibleType)
- Lang.Crucible.Simulator.ExecutionTree: RunPostBranchMerge :: !BlockID blocks args -> RunningStateInfo blocks args
+ Lang.Crucible.Simulator.ExecutionTree: RunPostBranchMerge :: !BlockID blocks args -> RunningStateInfo (blocks :: Ctx (Ctx CrucibleType)) (args :: Ctx CrucibleType)
- Lang.Crucible.Simulator.ExecutionTree: RunReturnFrom :: !FunctionName -> RunningStateInfo blocks args
+ Lang.Crucible.Simulator.ExecutionTree: RunReturnFrom :: !FunctionName -> RunningStateInfo (blocks :: Ctx (Ctx CrucibleType)) (args :: Ctx CrucibleType)
- Lang.Crucible.Simulator.ExecutionTree: RunningState :: !RunningStateInfo blocks args -> !SimState p sym ext rtp (CrucibleLang blocks r) ('Just args) -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: RunningState :: !RunningStateInfo blocks args -> !SimState p sym ext rtp (CrucibleLang blocks r) ('Just args) -> ExecState p sym ext rtp
- Lang.Crucible.Simulator.ExecutionTree: SimContext :: !SomeBackend sym -> !forall a. IsSymInterfaceProof sym a -> !IntrinsicTypes sym -> !HandleAllocator -> !Handle -> ExtensionImpl personality sym ext -> !FunctionBindings personality sym ext -> !personality -> !Map Text (Metric personality sym ext) -> SimContext (personality :: Type) (sym :: Type) (ext :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: SimContext :: !SomeBackend sym -> !forall a. () => IsSymInterfaceProof sym a -> !IntrinsicTypes sym -> !HandleAllocator -> !Handle -> ExtensionImpl p sym ext -> !FunctionBindings p sym ext -> !p -> !Map Text (Metric p sym ext) -> SimContext p sym ext
- Lang.Crucible.Simulator.ExecutionTree: SymbolicBranchState :: !Pred sym -> !PausedFrame p sym ext rtp f -> !PausedFrame p sym ext rtp f -> !CrucibleBranchTarget f postdom_args -> !SimState p sym ext rtp f ('Just args) -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: SymbolicBranchState :: !Pred sym -> !PausedFrame p sym ext rtp f -> !PausedFrame p sym ext rtp f -> !CrucibleBranchTarget f postdom_args -> !SimState p sym ext rtp f ('Just args) -> ExecState p sym ext rtp
- Lang.Crucible.Simulator.ExecutionTree: TailCallState :: !ValueFromValue p sym ext rtp ret -> !ResolvedCall p sym ext ret -> !SimState p sym ext rtp f a -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: TailCallState :: !ValueFromValue p sym ext rtp ret -> !ResolvedCall p sym ext ret -> !SimState p sym ext rtp f a -> ExecState p sym ext rtp
- Lang.Crucible.Simulator.ExecutionTree: TimeoutResult :: !ExecState p sym ext r -> ExecResult p sym ext (r :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: TimeoutResult :: !ExecState p sym ext rtp -> ExecResult p sym ext rtp
- Lang.Crucible.Simulator.ExecutionTree: TotalRes :: !GlobalPair sym v -> PartialResult sym ext (v :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: TotalRes :: !GlobalPair sym v -> PartialResult sym ext v
- Lang.Crucible.Simulator.ExecutionTree: UnwindCallState :: !ValueFromValue p sym ext rtp r -> !AbortedResult sym ext -> !SimState p sym ext rtp f a -> ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: UnwindCallState :: !ValueFromValue p sym ext rtp r -> !AbortedResult sym ext -> !SimState p sym ext rtp f a -> ExecState p sym ext rtp
- Lang.Crucible.Simulator.ExecutionTree: VFFActivePath :: !PausedFrame p sym ext ret f -> VFFOtherPath p sym ext ret f args
+ Lang.Crucible.Simulator.ExecutionTree: VFFActivePath :: !PausedFrame p sym ext ret f -> VFFOtherPath p sym ext ret f (args :: Maybe (Ctx CrucibleType))
- Lang.Crucible.Simulator.ExecutionTree: VFFBranch :: !ValueFromFrame p sym ext ret f -> !FrameIdentifier -> !ProgramLoc -> !Pred sym -> !VFFOtherPath p sym ext ret f args -> !CrucibleBranchTarget f args -> ValueFromFrame p sym ext (ret :: Type) (f :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: VFFBranch :: !ValueFromFrame p sym ext ret f -> !FrameIdentifier -> !ProgramLoc -> !Pred sym -> !VFFOtherPath p sym ext ret f args -> !CrucibleBranchTarget f args -> ValueFromFrame p sym ext ret f
- Lang.Crucible.Simulator.ExecutionTree: VFFCompletePath :: !Assumptions sym -> !PartialResultFrame sym ext f args -> VFFOtherPath p sym ext ret f args
+ Lang.Crucible.Simulator.ExecutionTree: VFFCompletePath :: !Assumptions sym -> !PartialResultFrame sym ext f args -> VFFOtherPath p sym ext ret f (args :: Maybe (Ctx CrucibleType))
- Lang.Crucible.Simulator.ExecutionTree: VFFEnd :: !ValueFromValue p sym ext ret (FrameRetType f) -> ValueFromFrame p sym ext (ret :: Type) (f :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: VFFEnd :: !ValueFromValue p sym ext ret (FrameRetType f) -> ValueFromFrame p sym ext ret f
- Lang.Crucible.Simulator.ExecutionTree: VFFPartial :: !ValueFromFrame p sym ext ret f -> !ProgramLoc -> !Pred sym -> !AbortedResult sym ext -> !PendingPartialMerges -> ValueFromFrame p sym ext (ret :: Type) (f :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: VFFPartial :: !ValueFromFrame p sym ext ret f -> !ProgramLoc -> !Pred sym -> !AbortedResult sym ext -> !PendingPartialMerges -> ValueFromFrame p sym ext ret f
- Lang.Crucible.Simulator.ExecutionTree: VFVCall :: !ValueFromFrame p sym ext ret caller -> !SimFrame sym ext caller args -> !ReturnHandler top_return p sym ext ret caller args -> ValueFromValue p sym ext (ret :: Type) (top_return :: CrucibleType)
+ Lang.Crucible.Simulator.ExecutionTree: VFVCall :: !ValueFromFrame p sym ext ret caller -> !SimFrame sym ext caller args -> !ReturnHandler top_return p sym ext ret caller args -> ValueFromValue p sym ext ret (top_return :: CrucibleType)
- Lang.Crucible.Simulator.ExecutionTree: VFVEnd :: ValueFromValue p sym ext (ret :: Type) (top_return :: CrucibleType)
+ Lang.Crucible.Simulator.ExecutionTree: VFVEnd :: ValueFromValue p sym ext ret (top_return :: CrucibleType)
- Lang.Crucible.Simulator.ExecutionTree: VFVPartial :: !ValueFromValue p sym ext ret top_return -> !ProgramLoc -> !Pred sym -> !AbortedResult sym ext -> ValueFromValue p sym ext (ret :: Type) (top_return :: CrucibleType)
+ Lang.Crucible.Simulator.ExecutionTree: VFVPartial :: !ValueFromValue p sym ext ret top_return -> !ProgramLoc -> !Pred sym -> !AbortedResult sym ext -> ValueFromValue p sym ext ret (top_return :: CrucibleType)
- Lang.Crucible.Simulator.ExecutionTree: [AbortedBranch] :: !ProgramLoc -> !Pred sym -> !AbortedResult sym ext -> !AbortedResult sym ext -> AbortedResult sym ext
+ Lang.Crucible.Simulator.ExecutionTree: [AbortedBranch] :: forall sym ext. !ProgramLoc -> !Pred sym -> !AbortedResult sym ext -> !AbortedResult sym ext -> AbortedResult sym ext
- Lang.Crucible.Simulator.ExecutionTree: [AbortedExec] :: !AbortExecReason -> !GlobalPair sym (SimFrame sym ext l args) -> AbortedResult sym ext
+ Lang.Crucible.Simulator.ExecutionTree: [AbortedExec] :: forall sym ext l (args :: Maybe (Ctx CrucibleType)). !AbortExecReason -> !GlobalPair sym (SimFrame sym ext l args) -> AbortedResult sym ext
- Lang.Crucible.Simulator.ExecutionTree: [AbortedExit] :: !ExitCode -> AbortedResult sym ext
+ Lang.Crucible.Simulator.ExecutionTree: [AbortedExit] :: forall sym ext l (args :: Maybe (Ctx CrucibleType)). !ExitCode -> !GlobalPair sym (SimFrame sym ext l args) -> AbortedResult sym ext
- Lang.Crucible.Simulator.ExecutionTree: [BlockTarget] :: !BlockID blocks args -> CrucibleBranchTarget (CrucibleLang blocks r) ('Just args)
+ Lang.Crucible.Simulator.ExecutionTree: [BlockTarget] :: forall (blocks :: Ctx (Ctx CrucibleType)) (args1 :: Ctx CrucibleType) (r :: CrucibleType). !BlockID blocks args1 -> CrucibleBranchTarget (CrucibleLang blocks r) ('Just args1)
- Lang.Crucible.Simulator.ExecutionTree: [CheckMergeResumption] :: !ResolvedJump sym blocks -> ControlResumption p sym ext rtp (CrucibleLang blocks r)
+ Lang.Crucible.Simulator.ExecutionTree: [CheckMergeResumption] :: forall sym (blocks :: Ctx (Ctx CrucibleType)) p ext rtp (r :: CrucibleType). !ResolvedJump sym blocks -> ControlResumption p sym ext rtp (CrucibleLang blocks r)
- Lang.Crucible.Simulator.ExecutionTree: [ContinueResumption] :: !ResolvedJump sym blocks -> ControlResumption p sym ext rtp (CrucibleLang blocks r)
+ Lang.Crucible.Simulator.ExecutionTree: [ContinueResumption] :: forall sym (blocks :: Ctx (Ctx CrucibleType)) p ext rtp (r :: CrucibleType). !ResolvedJump sym blocks -> ControlResumption p sym ext rtp (CrucibleLang blocks r)
- Lang.Crucible.Simulator.ExecutionTree: [CrucibleCall] :: !BlockID blocks args -> !CallFrame sym ext blocks ret args -> ResolvedCall p sym ext ret
+ Lang.Crucible.Simulator.ExecutionTree: [CrucibleCall] :: forall (blocks :: Ctx (Ctx CrucibleType)) (args :: Ctx CrucibleType) sym ext (ret :: CrucibleType) p. !BlockID blocks args -> !CallFrame sym ext blocks ret args -> ResolvedCall p sym ext ret
- Lang.Crucible.Simulator.ExecutionTree: [OverrideCall] :: !Override p sym ext args ret -> !OverrideFrame sym ret args -> ResolvedCall p sym ext ret
+ Lang.Crucible.Simulator.ExecutionTree: [OverrideCall] :: forall p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType). !Override p sym ext args ret -> !OverrideFrame sym ret args -> ResolvedCall p sym ext ret
- Lang.Crucible.Simulator.ExecutionTree: [OverrideResumption] :: ExecCont p sym ext rtp (OverrideLang r) ('Just args) -> !RegMap sym args -> ControlResumption p sym ext rtp (OverrideLang r)
+ Lang.Crucible.Simulator.ExecutionTree: [OverrideResumption] :: forall p sym ext rtp (r :: CrucibleType) (args :: Ctx CrucibleType). ExecCont p sym ext rtp (OverrideLang r) ('Just args) -> !RegMap sym args -> ControlResumption p sym ext rtp (OverrideLang r)
- Lang.Crucible.Simulator.ExecutionTree: [ReturnTarget] :: CrucibleBranchTarget f 'Nothing
+ Lang.Crucible.Simulator.ExecutionTree: [ReturnTarget] :: forall f. CrucibleBranchTarget f ('Nothing :: Maybe (Ctx CrucibleType))
- Lang.Crucible.Simulator.ExecutionTree: [ReturnToCrucible] :: TypeRepr ret -> StmtSeq ext blocks r (ctx ::> ret) -> ReturnHandler ret p sym ext root (CrucibleLang blocks r) ('Just ctx)
+ Lang.Crucible.Simulator.ExecutionTree: [ReturnToCrucible] :: forall (ret :: CrucibleType) ext (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType) (ctx :: Ctx CrucibleType) p sym root. TypeRepr ret -> StmtSeq ext blocks r (ctx ::> ret) -> ReturnHandler ret p sym ext root (CrucibleLang blocks r) ('Just ctx)
- Lang.Crucible.Simulator.ExecutionTree: [ReturnToOverride] :: (RegEntry sym ret -> SimState p sym ext root (OverrideLang r) ('Just args) -> IO (ExecState p sym ext root)) -> ReturnHandler ret p sym ext root (OverrideLang r) ('Just args)
+ Lang.Crucible.Simulator.ExecutionTree: [ReturnToOverride] :: forall sym (ret :: CrucibleType) p ext root (r :: CrucibleType) (args1 :: Ctx CrucibleType). (RegEntry sym ret -> SimState p sym ext root (OverrideLang r) ('Just args1) -> IO (ExecState p sym ext root)) -> ReturnHandler ret p sym ext root (OverrideLang r) ('Just args1)
- Lang.Crucible.Simulator.ExecutionTree: [SwitchResumption] :: ![(Pred sym, ResolvedJump sym blocks)] -> ControlResumption p sym ext rtp (CrucibleLang blocks r)
+ Lang.Crucible.Simulator.ExecutionTree: [SwitchResumption] :: forall sym (blocks :: Ctx (Ctx CrucibleType)) p ext rtp (r :: CrucibleType). ![(Pred sym, ResolvedJump sym blocks)] -> ControlResumption p sym ext rtp (CrucibleLang blocks r)
- Lang.Crucible.Simulator.ExecutionTree: [TailReturnToCrucible] :: ret ~ r => ReturnHandler ret p sym ext root (CrucibleLang blocks r) ctx
+ Lang.Crucible.Simulator.ExecutionTree: [TailReturnToCrucible] :: forall (ret :: CrucibleType) (r :: CrucibleType) p sym ext root (blocks :: Ctx (Ctx CrucibleType)) (args :: Maybe (Ctx CrucibleType)). ret ~ r => ReturnHandler ret p sym ext root (CrucibleLang blocks r) args
- Lang.Crucible.Simulator.ExecutionTree: [_actContext] :: ActiveTree p sym ext root (f :: Type) args -> !ValueFromFrame p sym ext root f
+ Lang.Crucible.Simulator.ExecutionTree: [_actContext] :: ActiveTree p sym ext root f (args :: Maybe (Ctx CrucibleType)) -> !ValueFromFrame p sym ext root f
- Lang.Crucible.Simulator.ExecutionTree: [_actResult] :: ActiveTree p sym ext root (f :: Type) args -> !PartialResultFrame sym ext f args
+ Lang.Crucible.Simulator.ExecutionTree: [_actResult] :: ActiveTree p sym ext root f (args :: Maybe (Ctx CrucibleType)) -> !PartialResultFrame sym ext f args
- Lang.Crucible.Simulator.ExecutionTree: [_cruciblePersonality] :: SimContext (personality :: Type) (sym :: Type) (ext :: Type) -> !personality
+ Lang.Crucible.Simulator.ExecutionTree: [_cruciblePersonality] :: SimContext p sym ext -> !p
- Lang.Crucible.Simulator.ExecutionTree: [_ctxBackend] :: SimContext (personality :: Type) (sym :: Type) (ext :: Type) -> !SomeBackend sym
+ Lang.Crucible.Simulator.ExecutionTree: [_ctxBackend] :: SimContext p sym ext -> !SomeBackend sym
- Lang.Crucible.Simulator.ExecutionTree: [_functionBindings] :: SimContext (personality :: Type) (sym :: Type) (ext :: Type) -> !FunctionBindings personality sym ext
+ Lang.Crucible.Simulator.ExecutionTree: [_functionBindings] :: SimContext p sym ext -> !FunctionBindings p sym ext
- Lang.Crucible.Simulator.ExecutionTree: [_gpGlobals] :: GlobalPair sym (v :: Type) -> !SymGlobalState sym
+ Lang.Crucible.Simulator.ExecutionTree: [_gpGlobals] :: GlobalPair sym v -> !SymGlobalState sym
- Lang.Crucible.Simulator.ExecutionTree: [_gpValue] :: GlobalPair sym (v :: Type) -> !v
+ Lang.Crucible.Simulator.ExecutionTree: [_gpValue] :: GlobalPair sym v -> !v
- Lang.Crucible.Simulator.ExecutionTree: [_profilingMetrics] :: SimContext (personality :: Type) (sym :: Type) (ext :: Type) -> !Map Text (Metric personality sym ext)
+ Lang.Crucible.Simulator.ExecutionTree: [_profilingMetrics] :: SimContext p sym ext -> !Map Text (Metric p sym ext)
- Lang.Crucible.Simulator.ExecutionTree: [ctxIntrinsicTypes] :: SimContext (personality :: Type) (sym :: Type) (ext :: Type) -> !IntrinsicTypes sym
+ Lang.Crucible.Simulator.ExecutionTree: [ctxIntrinsicTypes] :: SimContext p sym ext -> !IntrinsicTypes sym
- Lang.Crucible.Simulator.ExecutionTree: [ctxSolverProof] :: SimContext (personality :: Type) (sym :: Type) (ext :: Type) -> !forall a. IsSymInterfaceProof sym a
+ Lang.Crucible.Simulator.ExecutionTree: [ctxSolverProof] :: SimContext p sym ext -> !forall a. () => IsSymInterfaceProof sym a
- Lang.Crucible.Simulator.ExecutionTree: [extensionEval] :: ExtensionImpl p sym ext -> forall bak rtp blocks r ctx. IsSymBackend sym bak => bak -> IntrinsicTypes sym -> (Int -> String -> IO ()) -> CrucibleState p sym ext rtp blocks r ctx -> EvalAppFunc sym (ExprExtension ext)
+ Lang.Crucible.Simulator.ExecutionTree: [extensionEval] :: ExtensionImpl p sym ext -> forall bak rtp (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType) (ctx :: Ctx CrucibleType). IsSymBackend sym bak => bak -> IntrinsicTypes sym -> (Int -> String -> IO ()) -> CrucibleState p sym ext rtp blocks r ctx -> EvalAppFunc sym (ExprExtension ext)
- Lang.Crucible.Simulator.ExecutionTree: [extensionImpl] :: SimContext (personality :: Type) (sym :: Type) (ext :: Type) -> ExtensionImpl personality sym ext
+ Lang.Crucible.Simulator.ExecutionTree: [extensionImpl] :: SimContext p sym ext -> ExtensionImpl p sym ext
- Lang.Crucible.Simulator.ExecutionTree: [overrideHandler] :: Override p sym ext (args :: Ctx CrucibleType) ret -> forall r. ExecCont p sym ext r (OverrideLang ret) ('Just args)
+ Lang.Crucible.Simulator.ExecutionTree: [overrideHandler] :: Override p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType) -> forall r. () => ExecCont p sym ext r (OverrideLang ret) ('Just args)
- Lang.Crucible.Simulator.ExecutionTree: [overrideName] :: Override p sym ext (args :: Ctx CrucibleType) ret -> FunctionName
+ Lang.Crucible.Simulator.ExecutionTree: [overrideName] :: Override p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType) -> FunctionName
- Lang.Crucible.Simulator.ExecutionTree: [printHandle] :: SimContext (personality :: Type) (sym :: Type) (ext :: Type) -> !Handle
+ Lang.Crucible.Simulator.ExecutionTree: [printHandle] :: SimContext p sym ext -> !Handle
- Lang.Crucible.Simulator.ExecutionTree: [runAH] :: AbortHandler p sym ext rtp -> forall (l :: Type) args. AbortExecReason -> ExecCont p sym ext rtp l args
+ Lang.Crucible.Simulator.ExecutionTree: [runAH] :: AbortHandler p sym ext rtp -> forall l (args :: Maybe (Ctx CrucibleType)). () => AbortExecReason -> ExecCont p sym ext rtp l args
- Lang.Crucible.Simulator.ExecutionTree: [runMetric] :: Metric p sym ext -> forall rtp f args. SimState p sym ext rtp f args -> IO Integer
+ Lang.Crucible.Simulator.ExecutionTree: [runMetric] :: Metric p sym ext -> forall rtp f (args :: Maybe (Ctx CrucibleType)). () => SimState p sym ext rtp f args -> IO Integer
- Lang.Crucible.Simulator.ExecutionTree: [simHandleAllocator] :: SimContext (personality :: Type) (sym :: Type) (ext :: Type) -> !HandleAllocator
+ Lang.Crucible.Simulator.ExecutionTree: [simHandleAllocator] :: SimContext p sym ext -> !HandleAllocator
- Lang.Crucible.Simulator.ExecutionTree: abortHandler :: Simple Lens (SimState p sym ext r f a) (AbortHandler p sym ext r)
+ Lang.Crucible.Simulator.ExecutionTree: abortHandler :: forall p sym ext r f1 (a :: Maybe (Ctx CrucibleType)) f2. Functor f2 => (AbortHandler p sym ext r -> f2 (AbortHandler p sym ext r)) -> SimState p sym ext r f1 a -> f2 (SimState p sym ext r f1 a)
- Lang.Crucible.Simulator.ExecutionTree: actContext :: Lens (ActiveTree p sym ext root f args) (ActiveTree p sym ext root f args) (ValueFromFrame p sym ext root f) (ValueFromFrame p sym ext root f)
+ Lang.Crucible.Simulator.ExecutionTree: actContext :: forall p sym ext root f1 (args :: Maybe (Ctx CrucibleType)) f2. Functor f2 => (ValueFromFrame p sym ext root f1 -> f2 (ValueFromFrame p sym ext root f1)) -> ActiveTree p sym ext root f1 args -> f2 (ActiveTree p sym ext root f1 args)
- Lang.Crucible.Simulator.ExecutionTree: actFrame :: Lens (ActiveTree p sym ext root f args) (ActiveTree p sym ext root f args') (TopFrame sym ext f args) (TopFrame sym ext f args')
+ Lang.Crucible.Simulator.ExecutionTree: actFrame :: forall p sym ext root f1 (args :: Maybe (Ctx CrucibleType)) (args' :: Maybe (Ctx CrucibleType)) f2. Functor f2 => (TopFrame sym ext f1 args -> f2 (TopFrame sym ext f1 args')) -> ActiveTree p sym ext root f1 args -> f2 (ActiveTree p sym ext root f1 args')
- Lang.Crucible.Simulator.ExecutionTree: activeFrames :: ActiveTree ctx sym ext root a args -> [SomeFrame (SimFrame sym ext)]
+ Lang.Crucible.Simulator.ExecutionTree: activeFrames :: forall ctx sym ext root a (args :: Maybe (Ctx CrucibleType)). ActiveTree ctx sym ext root a args -> [SomeFrame (SimFrame sym ext)]
- Lang.Crucible.Simulator.ExecutionTree: arFrames :: Simple Traversal (AbortedResult sym ext) (SomeFrame (SimFrame sym ext))
+ Lang.Crucible.Simulator.ExecutionTree: arFrames :: forall sym ext f. Applicative f => (SomeFrame (SimFrame sym ext) -> f (SomeFrame (SimFrame sym ext))) -> AbortedResult sym ext -> f (AbortedResult sym ext)
- Lang.Crucible.Simulator.ExecutionTree: cruciblePersonality :: Lens' (SimContext p sym ext) p
+ Lang.Crucible.Simulator.ExecutionTree: cruciblePersonality :: forall p sym ext f. Functor f => (p -> f p) -> SimContext p sym ext -> f (SimContext p sym ext)
- Lang.Crucible.Simulator.ExecutionTree: crucibleTopFrame :: Lens (TopFrame sym ext (CrucibleLang blocks r) ('Just args)) (TopFrame sym ext (CrucibleLang blocks r) ('Just args')) (CallFrame sym ext blocks r args) (CallFrame sym ext blocks r args')
+ Lang.Crucible.Simulator.ExecutionTree: crucibleTopFrame :: forall sym ext (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType) (args :: Ctx CrucibleType) (args' :: Ctx CrucibleType) f. Functor f => (CallFrame sym ext blocks r args -> f (CallFrame sym ext blocks r args')) -> TopFrame sym ext (CrucibleLang blocks r) ('Just args) -> f (TopFrame sym ext (CrucibleLang blocks r) ('Just args'))
- Lang.Crucible.Simulator.ExecutionTree: ctxSymInterface :: Getter (SimContext p sym ext) sym
+ Lang.Crucible.Simulator.ExecutionTree: ctxSymInterface :: forall p sym ext f. (Contravariant f, Functor f) => (sym -> f sym) -> SimContext p sym ext -> f (SimContext p sym ext)
- Lang.Crucible.Simulator.ExecutionTree: data ActiveTree p sym ext root (f :: Type) args
+ Lang.Crucible.Simulator.ExecutionTree: data ActiveTree p sym ext root f (args :: Maybe Ctx CrucibleType)
- Lang.Crucible.Simulator.ExecutionTree: data CrucibleBranchTarget f (args :: Maybe (Ctx CrucibleType))
+ Lang.Crucible.Simulator.ExecutionTree: data CrucibleBranchTarget f (args :: Maybe Ctx CrucibleType)
- Lang.Crucible.Simulator.ExecutionTree: data ExecResult p sym ext (r :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: data ExecResult p sym ext rtp
- Lang.Crucible.Simulator.ExecutionTree: data ExecState p sym ext (rtp :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: data ExecState p sym ext rtp
- Lang.Crucible.Simulator.ExecutionTree: data GlobalPair sym (v :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: data GlobalPair sym v
- Lang.Crucible.Simulator.ExecutionTree: data Override p sym ext (args :: Ctx CrucibleType) ret
+ Lang.Crucible.Simulator.ExecutionTree: data Override p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType)
- Lang.Crucible.Simulator.ExecutionTree: data PartialResult sym ext (v :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: data PartialResult sym ext v
- Lang.Crucible.Simulator.ExecutionTree: data ResolvedCall p sym ext ret
+ Lang.Crucible.Simulator.ExecutionTree: data ResolvedCall p sym ext (ret :: CrucibleType)
- Lang.Crucible.Simulator.ExecutionTree: data ResolvedJump sym blocks
+ Lang.Crucible.Simulator.ExecutionTree: data ResolvedJump sym (blocks :: Ctx Ctx CrucibleType)
- Lang.Crucible.Simulator.ExecutionTree: data ReturnHandler (ret :: CrucibleType) p sym ext root f args
+ Lang.Crucible.Simulator.ExecutionTree: data ReturnHandler (ret :: CrucibleType) p sym ext root f (args :: Maybe Ctx CrucibleType)
- Lang.Crucible.Simulator.ExecutionTree: data RunningStateInfo blocks args
+ Lang.Crucible.Simulator.ExecutionTree: data RunningStateInfo (blocks :: Ctx Ctx CrucibleType) (args :: Ctx CrucibleType)
- Lang.Crucible.Simulator.ExecutionTree: data SimContext (personality :: Type) (sym :: Type) (ext :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: data SimContext p sym ext
- Lang.Crucible.Simulator.ExecutionTree: data SimState p sym ext rtp f (args :: Maybe (Ctx CrucibleType))
+ Lang.Crucible.Simulator.ExecutionTree: data SimState p sym ext rtp f (args :: Maybe Ctx CrucibleType)
- Lang.Crucible.Simulator.ExecutionTree: data VFFOtherPath p sym ext ret f args
+ Lang.Crucible.Simulator.ExecutionTree: data VFFOtherPath p sym ext ret f (args :: Maybe Ctx CrucibleType)
- Lang.Crucible.Simulator.ExecutionTree: data ValueFromFrame p sym ext (ret :: Type) (f :: Type)
+ Lang.Crucible.Simulator.ExecutionTree: data ValueFromFrame p sym ext ret f
- Lang.Crucible.Simulator.ExecutionTree: data ValueFromValue p sym ext (ret :: Type) (top_return :: CrucibleType)
+ Lang.Crucible.Simulator.ExecutionTree: data ValueFromValue p sym ext ret (top_return :: CrucibleType)
- Lang.Crucible.Simulator.ExecutionTree: functionBindings :: Lens' (SimContext p sym ext) (FunctionBindings p sym ext)
+ Lang.Crucible.Simulator.ExecutionTree: functionBindings :: forall p sym ext f. Functor f => (FunctionBindings p sym ext -> f (FunctionBindings p sym ext)) -> SimContext p sym ext -> f (SimContext p sym ext)
- Lang.Crucible.Simulator.ExecutionTree: gpGlobals :: Simple Lens (GlobalPair sym u) (SymGlobalState sym)
+ Lang.Crucible.Simulator.ExecutionTree: gpGlobals :: forall sym u f. Functor f => (SymGlobalState sym -> f (SymGlobalState sym)) -> GlobalPair sym u -> f (GlobalPair sym u)
- Lang.Crucible.Simulator.ExecutionTree: gpValue :: Lens (GlobalPair sym u) (GlobalPair sym v) u v
+ Lang.Crucible.Simulator.ExecutionTree: gpValue :: forall sym u v f. Functor f => (u -> f v) -> GlobalPair sym u -> f (GlobalPair sym v)
- Lang.Crucible.Simulator.ExecutionTree: initSimState :: SimContext p sym ext -> SymGlobalState sym -> AbortHandler p sym ext (RegEntry sym ret) -> TypeRepr ret -> IO (SimState p sym ext (RegEntry sym ret) (OverrideLang ret) ('Just EmptyCtx))
+ Lang.Crucible.Simulator.ExecutionTree: initSimState :: forall p sym ext (ret :: CrucibleType). SimContext p sym ext -> SymGlobalState sym -> AbortHandler p sym ext (RegEntry sym ret) -> TypeRepr ret -> IO (SimState p sym ext (RegEntry sym ret) (OverrideLang ret) ('Just (EmptyCtx :: Ctx CrucibleType)))
- Lang.Crucible.Simulator.ExecutionTree: overrideTopFrame :: Lens (TopFrame sym ext (OverrideLang r) ('Just args)) (TopFrame sym ext (OverrideLang r') ('Just args')) (OverrideFrame sym r args) (OverrideFrame sym r' args')
+ Lang.Crucible.Simulator.ExecutionTree: overrideTopFrame :: forall sym ext (r :: CrucibleType) (args :: Ctx CrucibleType) (r' :: CrucibleType) (args' :: Ctx CrucibleType) f. Functor f => (OverrideFrame sym r args -> f (OverrideFrame sym r' args')) -> TopFrame sym ext (OverrideLang r) ('Just args) -> f (TopFrame sym ext (OverrideLang r') ('Just args'))
- Lang.Crucible.Simulator.ExecutionTree: partialValue :: Lens (PartialResult sym ext u) (PartialResult sym ext v) (GlobalPair sym u) (GlobalPair sym v)
+ Lang.Crucible.Simulator.ExecutionTree: partialValue :: forall sym ext u v f. Functor f => (GlobalPair sym u -> f (GlobalPair sym v)) -> PartialResult sym ext u -> f (PartialResult sym ext v)
- Lang.Crucible.Simulator.ExecutionTree: ppBranchTarget :: CrucibleBranchTarget f args -> String
+ Lang.Crucible.Simulator.ExecutionTree: ppBranchTarget :: forall f (args :: Maybe (Ctx CrucibleType)). CrucibleBranchTarget f args -> String
- Lang.Crucible.Simulator.ExecutionTree: profilingMetrics :: Lens' (SimContext p sym ext) (Map Text (Metric p sym ext))
+ Lang.Crucible.Simulator.ExecutionTree: profilingMetrics :: forall p sym ext f. Functor f => (Map Text (Metric p sym ext) -> f (Map Text (Metric p sym ext))) -> SimContext p sym ext -> f (SimContext p sym ext)
- Lang.Crucible.Simulator.ExecutionTree: resolvedCallHandle :: ResolvedCall p sym ext ret -> SomeHandle
+ Lang.Crucible.Simulator.ExecutionTree: resolvedCallHandle :: forall p sym ext (ret :: CrucibleType). ResolvedCall p sym ext ret -> SomeHandle
- Lang.Crucible.Simulator.ExecutionTree: singletonTree :: TopFrame sym ext f args -> ActiveTree p sym ext (RegEntry sym (FrameRetType f)) f args
+ Lang.Crucible.Simulator.ExecutionTree: singletonTree :: forall sym ext f (args :: Maybe (Ctx CrucibleType)) p. TopFrame sym ext f args -> ActiveTree p sym ext (RegEntry sym (FrameRetType f)) f args
- Lang.Crucible.Simulator.ExecutionTree: stateConfiguration :: Getter (SimState p sym ext r f args) Config
+ Lang.Crucible.Simulator.ExecutionTree: stateConfiguration :: forall p sym ext r f1 (args :: Maybe (Ctx CrucibleType)) f2. (Contravariant f2, Functor f2) => (Config -> f2 Config) -> SimState p sym ext r f1 args -> f2 (SimState p sym ext r f1 args)
- Lang.Crucible.Simulator.ExecutionTree: stateContext :: Simple Lens (SimState p sym ext r f a) (SimContext p sym ext)
+ Lang.Crucible.Simulator.ExecutionTree: stateContext :: forall p sym ext r f1 (a :: Maybe (Ctx CrucibleType)) f2. Functor f2 => (SimContext p sym ext -> f2 (SimContext p sym ext)) -> SimState p sym ext r f1 a -> f2 (SimState p sym ext r f1 a)
- Lang.Crucible.Simulator.ExecutionTree: stateCrucibleFrame :: Lens (SimState p sym ext rtp (CrucibleLang blocks r) ('Just a)) (SimState p sym ext rtp (CrucibleLang blocks r) ('Just a')) (CallFrame sym ext blocks r a) (CallFrame sym ext blocks r a')
+ Lang.Crucible.Simulator.ExecutionTree: stateCrucibleFrame :: forall p sym ext rtp (blocks :: Ctx (Ctx CrucibleType)) (r :: CrucibleType) (a :: Ctx CrucibleType) (a' :: Ctx CrucibleType) f. Functor f => (CallFrame sym ext blocks r a -> f (CallFrame sym ext blocks r a')) -> SimState p sym ext rtp (CrucibleLang blocks r) ('Just a) -> f (SimState p sym ext rtp (CrucibleLang blocks r) ('Just a'))
- Lang.Crucible.Simulator.ExecutionTree: stateGlobals :: Simple Lens (SimState p sym ext q f args) (SymGlobalState sym)
+ Lang.Crucible.Simulator.ExecutionTree: stateGlobals :: forall p sym ext q f1 (args :: Maybe (Ctx CrucibleType)) f2. Functor f2 => (SymGlobalState sym -> f2 (SymGlobalState sym)) -> SimState p sym ext q f1 args -> f2 (SimState p sym ext q f1 args)
- Lang.Crucible.Simulator.ExecutionTree: stateIntrinsicTypes :: Getter (SimState p sym ext r f args) (IntrinsicTypes sym)
+ Lang.Crucible.Simulator.ExecutionTree: stateIntrinsicTypes :: forall p sym ext r f1 (args :: Maybe (Ctx CrucibleType)) f2. (Contravariant f2, Functor f2) => (IntrinsicTypes sym -> f2 (IntrinsicTypes sym)) -> SimState p sym ext r f1 args -> f2 (SimState p sym ext r f1 args)
- Lang.Crucible.Simulator.ExecutionTree: stateLocation :: Getter (SimState p sym ext r f a) (Maybe ProgramLoc)
+ Lang.Crucible.Simulator.ExecutionTree: stateLocation :: forall p sym ext r f1 (a :: Maybe (Ctx CrucibleType)) f2. (Contravariant f2, Functor f2) => (Maybe ProgramLoc -> f2 (Maybe ProgramLoc)) -> SimState p sym ext r f1 a -> f2 (SimState p sym ext r f1 a)
- Lang.Crucible.Simulator.ExecutionTree: stateOverrideFrame :: Lens (SimState p sym ext q (OverrideLang r) ('Just a)) (SimState p sym ext q (OverrideLang r) ('Just a')) (OverrideFrame sym r a) (OverrideFrame sym r a')
+ Lang.Crucible.Simulator.ExecutionTree: stateOverrideFrame :: forall p sym ext q (r :: CrucibleType) (a :: Ctx CrucibleType) (a' :: Ctx CrucibleType) f. Functor f => (OverrideFrame sym r a -> f (OverrideFrame sym r a')) -> SimState p sym ext q (OverrideLang r) ('Just a) -> f (SimState p sym ext q (OverrideLang r) ('Just a'))
- Lang.Crucible.Simulator.ExecutionTree: stateSolverProof :: SimState p sym ext r f args -> forall a. IsSymInterfaceProof sym a
+ Lang.Crucible.Simulator.ExecutionTree: stateSolverProof :: forall p sym ext r f (args :: Maybe (Ctx CrucibleType)). SimState p sym ext r f args -> forall a. () => IsSymInterfaceProof sym a
- Lang.Crucible.Simulator.ExecutionTree: stateSymInterface :: Getter (SimState p sym ext r f a) sym
+ Lang.Crucible.Simulator.ExecutionTree: stateSymInterface :: forall p sym ext r f1 (a :: Maybe (Ctx CrucibleType)) f2. (Contravariant f2, Functor f2) => (sym -> f2 sym) -> SimState p sym ext r f1 a -> f2 (SimState p sym ext r f1 a)
- Lang.Crucible.Simulator.ExecutionTree: stateTree :: Lens (SimState p sym ext rtp f a) (SimState p sym ext rtp g b) (ActiveTree p sym ext rtp f a) (ActiveTree p sym ext rtp g b)
+ Lang.Crucible.Simulator.ExecutionTree: stateTree :: forall p sym ext rtp f1 (a :: Maybe (Ctx CrucibleType)) g (b :: Maybe (Ctx CrucibleType)) f2. Functor f2 => (ActiveTree p sym ext rtp f1 a -> f2 (ActiveTree p sym ext rtp g b)) -> SimState p sym ext rtp f1 a -> f2 (SimState p sym ext rtp g b)
- Lang.Crucible.Simulator.ExecutionTree: type CrucibleState p sym ext rtp blocks ret args = SimState p sym ext rtp (CrucibleLang blocks ret) ('Just args)
+ Lang.Crucible.Simulator.ExecutionTree: type CrucibleState p sym ext rtp (blocks :: Ctx Ctx CrucibleType) (ret :: CrucibleType) (args :: Ctx CrucibleType) = SimState p sym ext rtp CrucibleLang blocks ret 'Just args
- Lang.Crucible.Simulator.ExecutionTree: type ExecCont p sym ext r f a = ReaderT (SimState p sym ext r f a) IO (ExecState p sym ext r)
+ Lang.Crucible.Simulator.ExecutionTree: type ExecCont p sym ext rtp f (args :: Maybe Ctx CrucibleType) = ReaderT SimState p sym ext rtp f args IO ExecState p sym ext rtp
- Lang.Crucible.Simulator.ExecutionTree: type PartialResultFrame sym ext f args = PartialResult sym ext (SimFrame sym ext f args)
+ Lang.Crucible.Simulator.ExecutionTree: type PartialResultFrame sym ext f (args :: Maybe Ctx CrucibleType) = PartialResult sym ext SimFrame sym ext f args
- Lang.Crucible.Simulator.ExecutionTree: type TopFrame sym ext f a = GlobalPair sym (SimFrame sym ext f a)
+ Lang.Crucible.Simulator.ExecutionTree: type TopFrame sym ext f (args :: Maybe Ctx CrucibleType) = GlobalPair sym SimFrame sym ext f args
- Lang.Crucible.Simulator.ExecutionTree: type family FrameRetType (f :: Type) :: CrucibleType
+ Lang.Crucible.Simulator.ExecutionTree: type family FrameRetType f :: CrucibleType
- Lang.Crucible.Simulator.GlobalState: GlobalEntry :: RegValue sym tp -> GlobalEntry (sym :: Type) (tp :: CrucibleType)
+ Lang.Crucible.Simulator.GlobalState: GlobalEntry :: RegValue sym tp -> GlobalEntry sym (tp :: CrucibleType)
- Lang.Crucible.Simulator.GlobalState: [globalEntryValue] :: GlobalEntry (sym :: Type) (tp :: CrucibleType) -> RegValue sym tp
+ Lang.Crucible.Simulator.GlobalState: [globalEntryValue] :: GlobalEntry sym (tp :: CrucibleType) -> RegValue sym tp
- Lang.Crucible.Simulator.GlobalState: data SymGlobalState (sym :: Type)
+ Lang.Crucible.Simulator.GlobalState: data SymGlobalState sym
- Lang.Crucible.Simulator.GlobalState: dropRef :: RefCell tp -> SymGlobalState sym -> SymGlobalState sym
+ Lang.Crucible.Simulator.GlobalState: dropRef :: forall (tp :: CrucibleType) sym. RefCell tp -> SymGlobalState sym -> SymGlobalState sym
- Lang.Crucible.Simulator.GlobalState: globalAbortBranch :: forall sym. IsSymInterface sym => sym -> IntrinsicTypes sym -> SymGlobalState sym -> IO (SymGlobalState sym)
+ Lang.Crucible.Simulator.GlobalState: globalAbortBranch :: IsSymInterface sym => sym -> IntrinsicTypes sym -> SymGlobalState sym -> IO (SymGlobalState sym)
- Lang.Crucible.Simulator.GlobalState: globalMuxFn :: forall sym. IsSymInterface sym => sym -> IntrinsicTypes sym -> MuxFn (Pred sym) (SymGlobalState sym)
+ Lang.Crucible.Simulator.GlobalState: globalMuxFn :: IsSymInterface sym => sym -> IntrinsicTypes sym -> MuxFn (Pred sym) (SymGlobalState sym)
- Lang.Crucible.Simulator.GlobalState: globalPushBranch :: forall sym. IsSymInterface sym => sym -> IntrinsicTypes sym -> SymGlobalState sym -> IO (SymGlobalState sym)
+ Lang.Crucible.Simulator.GlobalState: globalPushBranch :: IsSymInterface sym => sym -> IntrinsicTypes sym -> SymGlobalState sym -> IO (SymGlobalState sym)
- Lang.Crucible.Simulator.GlobalState: insertGlobal :: GlobalVar tp -> RegValue sym tp -> SymGlobalState sym -> SymGlobalState sym
+ Lang.Crucible.Simulator.GlobalState: insertGlobal :: forall (tp :: CrucibleType) sym. GlobalVar tp -> RegValue sym tp -> SymGlobalState sym -> SymGlobalState sym
- Lang.Crucible.Simulator.GlobalState: insertRef :: IsExprBuilder sym => sym -> RefCell tp -> RegValue sym tp -> SymGlobalState sym -> SymGlobalState sym
+ Lang.Crucible.Simulator.GlobalState: insertRef :: forall sym (tp :: CrucibleType). IsExprBuilder sym => sym -> RefCell tp -> RegValue sym tp -> SymGlobalState sym -> SymGlobalState sym
- Lang.Crucible.Simulator.GlobalState: lookupGlobal :: GlobalVar tp -> SymGlobalState sym -> Maybe (RegValue sym tp)
+ Lang.Crucible.Simulator.GlobalState: lookupGlobal :: forall (tp :: CrucibleType) sym. GlobalVar tp -> SymGlobalState sym -> Maybe (RegValue sym tp)
- Lang.Crucible.Simulator.GlobalState: lookupRef :: RefCell tp -> SymGlobalState sym -> PartExpr (Pred sym) (RegValue sym tp)
+ Lang.Crucible.Simulator.GlobalState: lookupRef :: forall (tp :: CrucibleType) sym. RefCell tp -> SymGlobalState sym -> PartExpr (Pred sym) (RegValue sym tp)
- Lang.Crucible.Simulator.GlobalState: newtype GlobalEntry (sym :: Type) (tp :: CrucibleType)
+ Lang.Crucible.Simulator.GlobalState: newtype GlobalEntry sym (tp :: CrucibleType)
- Lang.Crucible.Simulator.GlobalState: updateRef :: RefCell tp -> PartExpr (Pred sym) (RegValue sym tp) -> SymGlobalState sym -> SymGlobalState sym
+ Lang.Crucible.Simulator.GlobalState: updateRef :: forall (tp :: CrucibleType) sym. RefCell tp -> PartExpr (Pred sym) (RegValue sym tp) -> SymGlobalState sym -> SymGlobalState sym
- Lang.Crucible.Simulator.Intrinsics: [IntrinsicMuxFn] :: IntrinsicClass sym nm => IntrinsicMuxFn sym nm
+ Lang.Crucible.Simulator.Intrinsics: [IntrinsicMuxFn] :: forall sym (nm :: Symbol). IntrinsicClass sym nm => IntrinsicMuxFn sym nm
- Lang.Crucible.Simulator.Intrinsics: abortBranchIntrinsic :: IntrinsicClass sym nm => sym -> IntrinsicTypes sym -> SymbolRepr nm -> CtxRepr ctx -> Intrinsic sym nm ctx -> IO (Intrinsic sym nm ctx)
+ Lang.Crucible.Simulator.Intrinsics: abortBranchIntrinsic :: forall (ctx :: Ctx CrucibleType). IntrinsicClass sym nm => sym -> IntrinsicTypes sym -> SymbolRepr nm -> CtxRepr ctx -> Intrinsic sym nm ctx -> IO (Intrinsic sym nm ctx)
- Lang.Crucible.Simulator.Intrinsics: class IntrinsicClass (sym :: Type) (nm :: Symbol) where {
+ Lang.Crucible.Simulator.Intrinsics: class IntrinsicClass sym (nm :: Symbol) where {
- Lang.Crucible.Simulator.Intrinsics: data IntrinsicMuxFn (sym :: Type) (nm :: Symbol)
+ Lang.Crucible.Simulator.Intrinsics: data IntrinsicMuxFn sym (nm :: Symbol)
- Lang.Crucible.Simulator.Intrinsics: muxIntrinsic :: IntrinsicClass sym nm => sym -> IntrinsicTypes sym -> SymbolRepr nm -> CtxRepr ctx -> Pred sym -> Intrinsic sym nm ctx -> Intrinsic sym nm ctx -> IO (Intrinsic sym nm ctx)
+ Lang.Crucible.Simulator.Intrinsics: muxIntrinsic :: forall (ctx :: Ctx CrucibleType). IntrinsicClass sym nm => sym -> IntrinsicTypes sym -> SymbolRepr nm -> CtxRepr ctx -> Pred sym -> Intrinsic sym nm ctx -> Intrinsic sym nm ctx -> IO (Intrinsic sym nm ctx)
- Lang.Crucible.Simulator.Intrinsics: pushBranchIntrinsic :: IntrinsicClass sym nm => sym -> IntrinsicTypes sym -> SymbolRepr nm -> CtxRepr ctx -> Intrinsic sym nm ctx -> IO (Intrinsic sym nm ctx)
+ Lang.Crucible.Simulator.Intrinsics: pushBranchIntrinsic :: forall (ctx :: Ctx CrucibleType). IntrinsicClass sym nm => sym -> IntrinsicTypes sym -> SymbolRepr nm -> CtxRepr ctx -> Intrinsic sym nm ctx -> IO (Intrinsic sym nm ctx)
- Lang.Crucible.Simulator.Intrinsics: type Intrinsic (sym :: Type) (nm :: Symbol) (ctx :: Ctx CrucibleType) :: Type;
+ Lang.Crucible.Simulator.Intrinsics: type Intrinsic sym (nm :: Symbol) (ctx :: Ctx CrucibleType);
- Lang.Crucible.Simulator.Intrinsics: type IntrinsicTypes sym = MapF SymbolRepr (IntrinsicMuxFn sym)
+ Lang.Crucible.Simulator.Intrinsics: type IntrinsicTypes sym = MapF SymbolRepr IntrinsicMuxFn sym
- Lang.Crucible.Simulator.Intrinsics: type family GetIntrinsic sym ity
+ Lang.Crucible.Simulator.Intrinsics: type family GetIntrinsic sym (ity :: CrucibleType)
- Lang.Crucible.Simulator.Intrinsics: typeError :: HasCallStack => SymbolRepr nm -> CtxRepr ctx -> b
+ Lang.Crucible.Simulator.Intrinsics: typeError :: forall (nm :: Symbol) (ctx :: Ctx CrucibleType) b. HasCallStack => SymbolRepr nm -> CtxRepr ctx -> b
- Lang.Crucible.Simulator.Operations: [CrucibleCall] :: !BlockID blocks args -> !CallFrame sym ext blocks ret args -> ResolvedCall p sym ext ret
+ Lang.Crucible.Simulator.Operations: [CrucibleCall] :: forall (blocks :: Ctx (Ctx CrucibleType)) (args :: Ctx CrucibleType) sym ext (ret :: CrucibleType) p. !BlockID blocks args -> !CallFrame sym ext blocks ret args -> ResolvedCall p sym ext ret
- Lang.Crucible.Simulator.Operations: [OverrideCall] :: !Override p sym ext args ret -> !OverrideFrame sym ret args -> ResolvedCall p sym ext ret
+ Lang.Crucible.Simulator.Operations: [OverrideCall] :: forall p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType). !Override p sym ext args ret -> !OverrideFrame sym ret args -> ResolvedCall p sym ext ret
- Lang.Crucible.Simulator.Operations: [UnresolvableFunction] :: !ProgramLoc -> [SomeFrame (SimFrame sym ext)] -> !FnHandle args ret -> UnresolvableFunction
+ Lang.Crucible.Simulator.Operations: [UnresolvableFunction] :: forall sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType). !ProgramLoc -> [SomeFrame (SimFrame sym ext)] -> !FnHandle args ret -> UnresolvableFunction
- Lang.Crucible.Simulator.Operations: abortExec :: IsSymInterface sym => AbortExecReason -> ExecCont p sym ext rtp f args
+ Lang.Crucible.Simulator.Operations: abortExec :: forall sym p ext rtp f (args :: Maybe (Ctx CrucibleType)). IsSymInterface sym => AbortExecReason -> ExecCont p sym ext rtp f args
- Lang.Crucible.Simulator.Operations: abortExecAndLog :: IsSymInterface sym => AbortExecReason -> ExecCont p sym ext rtp f args
+ Lang.Crucible.Simulator.Operations: abortExecAndLog :: forall sym p ext rtp f (args :: Maybe (Ctx CrucibleType)). IsSymInterface sym => AbortExecReason -> ExecCont p sym ext rtp f args
- Lang.Crucible.Simulator.Operations: asContFrame :: ActiveTree p sym ext ret f args -> ValueFromFrame p sym ext ret f
+ Lang.Crucible.Simulator.Operations: asContFrame :: forall p sym ext ret f (args :: Maybe (Ctx CrucibleType)). ActiveTree p sym ext ret f args -> ValueFromFrame p sym ext ret f
- Lang.Crucible.Simulator.Operations: callFunction :: IsExprBuilder sym => FnVal sym args ret -> RegMap sym args -> ReturnHandler ret p sym ext rtp f a -> ProgramLoc -> ExecCont p sym ext rtp f a
+ Lang.Crucible.Simulator.Operations: callFunction :: forall sym (args :: Ctx CrucibleType) (ret :: CrucibleType) p ext rtp f (a :: Maybe (Ctx CrucibleType)). IsExprBuilder sym => FnVal sym args ret -> RegMap sym args -> ReturnHandler ret p sym ext rtp f a -> ProgramLoc -> ExecCont p sym ext rtp f a
- Lang.Crucible.Simulator.Operations: conditionalBranch :: (IsSymInterface sym, IsSyntaxExtension ext) => Pred sym -> ResolvedJump sym blocks -> ResolvedJump sym blocks -> ExecCont p sym ext rtp (CrucibleLang blocks ret) ('Just ctx)
+ Lang.Crucible.Simulator.Operations: conditionalBranch :: forall sym ext (blocks :: Ctx (Ctx CrucibleType)) p rtp (ret :: CrucibleType) (ctx :: Ctx CrucibleType). (IsSymInterface sym, IsSyntaxExtension ext) => Pred sym -> ResolvedJump sym blocks -> ResolvedJump sym blocks -> ExecCont p sym ext rtp (CrucibleLang blocks ret) ('Just ctx)
- Lang.Crucible.Simulator.Operations: continue :: RunningStateInfo blocks a -> ExecCont p sym ext rtp (CrucibleLang blocks r) ('Just a)
+ Lang.Crucible.Simulator.Operations: continue :: forall (blocks :: Ctx (Ctx CrucibleType)) (a :: Ctx CrucibleType) p sym ext rtp (r :: CrucibleType). RunningStateInfo blocks a -> ExecCont p sym ext rtp (CrucibleLang blocks r) ('Just a)
- Lang.Crucible.Simulator.Operations: data ResolvedCall p sym ext ret
+ Lang.Crucible.Simulator.Operations: data ResolvedCall p sym ext (ret :: CrucibleType)
- Lang.Crucible.Simulator.Operations: extractCurrentPath :: ActiveTree p sym ext ret f args -> ActiveTree p sym ext ret f args
+ Lang.Crucible.Simulator.Operations: extractCurrentPath :: forall p sym ext ret f (args :: Maybe (Ctx CrucibleType)). ActiveTree p sym ext ret f args -> ActiveTree p sym ext ret f args
- Lang.Crucible.Simulator.Operations: jumpToBlock :: IsSymInterface sym => ResolvedJump sym blocks -> ExecCont p sym ext rtp (CrucibleLang blocks r) ('Just a)
+ Lang.Crucible.Simulator.Operations: jumpToBlock :: forall sym (blocks :: Ctx (Ctx CrucibleType)) p ext rtp (r :: CrucibleType) (a :: Ctx CrucibleType). IsSymInterface sym => ResolvedJump sym blocks -> ExecCont p sym ext rtp (CrucibleLang blocks r) ('Just a)
- Lang.Crucible.Simulator.Operations: overrideSymbolicBranch :: IsSymInterface sym => Pred sym -> RegMap sym then_args -> ExecCont p sym ext rtp (OverrideLang r) ('Just then_args) -> Maybe Position -> RegMap sym else_args -> ExecCont p sym ext rtp (OverrideLang r) ('Just else_args) -> Maybe Position -> ExecCont p sym ext rtp (OverrideLang r) ('Just args)
+ Lang.Crucible.Simulator.Operations: overrideSymbolicBranch :: forall sym (then_args :: Ctx CrucibleType) p ext rtp (r :: CrucibleType) (else_args :: Ctx CrucibleType) (args :: Ctx CrucibleType). IsSymInterface sym => Pred sym -> RegMap sym then_args -> ExecCont p sym ext rtp (OverrideLang r) ('Just then_args) -> Maybe Position -> RegMap sym else_args -> ExecCont p sym ext rtp (OverrideLang r) ('Just else_args) -> Maybe Position -> ExecCont p sym ext rtp (OverrideLang r) ('Just args)
- Lang.Crucible.Simulator.Operations: performControlTransfer :: IsSymInterface sym => ControlResumption p sym ext rtp f -> ExecCont p sym ext rtp f ('Just a)
+ Lang.Crucible.Simulator.Operations: performControlTransfer :: forall sym p ext rtp f (a :: Ctx CrucibleType). IsSymInterface sym => ControlResumption p sym ext rtp f -> ExecCont p sym ext rtp f ('Just a)
- Lang.Crucible.Simulator.Operations: performFunctionCall :: IsSymInterface sym => ReturnHandler ret p sym ext rtp outer_frame outer_args -> ResolvedCall p sym ext ret -> ExecCont p sym ext rtp outer_frame outer_args
+ Lang.Crucible.Simulator.Operations: performFunctionCall :: forall sym (ret :: CrucibleType) p ext rtp outer_frame (outer_args :: Maybe (Ctx CrucibleType)). IsSymInterface sym => ReturnHandler ret p sym ext rtp outer_frame outer_args -> ResolvedCall p sym ext ret -> ExecCont p sym ext rtp outer_frame outer_args
- Lang.Crucible.Simulator.Operations: performIntraFrameMerge :: IsSymInterface sym => CrucibleBranchTarget f args -> ExecCont p sym ext root f args
+ Lang.Crucible.Simulator.Operations: performIntraFrameMerge :: forall sym f (args :: Maybe (Ctx CrucibleType)) p ext root. IsSymInterface sym => CrucibleBranchTarget f args -> ExecCont p sym ext root f args
- Lang.Crucible.Simulator.Operations: performIntraFrameSplit :: IsSymInterface sym => Pred sym -> PausedFrame p sym ext rtp f -> PausedFrame p sym ext rtp f -> CrucibleBranchTarget f (args :: Maybe (Ctx CrucibleType)) -> ExecCont p sym ext rtp f ('Just dc_args)
+ Lang.Crucible.Simulator.Operations: performIntraFrameSplit :: forall sym p ext rtp f (args :: Maybe (Ctx CrucibleType)) (dc_args :: Ctx CrucibleType). IsSymInterface sym => Pred sym -> PausedFrame p sym ext rtp f -> PausedFrame p sym ext rtp f -> CrucibleBranchTarget f args -> ExecCont p sym ext rtp f ('Just dc_args)
- Lang.Crucible.Simulator.Operations: performReturn :: IsSymInterface sym => FunctionName -> ValueFromValue p sym ext r ret -> RegEntry sym ret -> ExecCont p sym ext r f a
+ Lang.Crucible.Simulator.Operations: performReturn :: forall sym p ext r (ret :: CrucibleType) f (a :: Maybe (Ctx CrucibleType)). IsSymInterface sym => FunctionName -> ValueFromValue p sym ext r ret -> RegEntry sym ret -> ExecCont p sym ext r f a
- Lang.Crucible.Simulator.Operations: performTailCall :: IsSymInterface sym => ValueFromValue p sym ext rtp ret -> ResolvedCall p sym ext ret -> ExecCont p sym ext rtp f a
+ Lang.Crucible.Simulator.Operations: performTailCall :: forall sym p ext rtp (ret :: CrucibleType) f (a :: Maybe (Ctx CrucibleType)). IsSymInterface sym => ValueFromValue p sym ext rtp ret -> ResolvedCall p sym ext ret -> ExecCont p sym ext rtp f a
- Lang.Crucible.Simulator.Operations: pushCallFrame :: ReturnHandler (FrameRetType a) p sym ext r f old_args -> SimFrame sym ext a args -> ActiveTree p sym ext r f old_args -> ActiveTree p sym ext r a args
+ Lang.Crucible.Simulator.Operations: pushCallFrame :: forall a p sym ext r f (old_args :: Maybe (Ctx CrucibleType)) (args :: Maybe (Ctx CrucibleType)). ReturnHandler (FrameRetType a) p sym ext r f old_args -> SimFrame sym ext a args -> ActiveTree p sym ext r f old_args -> ActiveTree p sym ext r a args
- Lang.Crucible.Simulator.Operations: replaceTailFrame :: forall p sym ext a b c args args'. FrameRetType a ~ FrameRetType c => ActiveTree p sym ext b a args -> SimFrame sym ext c args' -> Maybe (ActiveTree p sym ext b c args')
+ Lang.Crucible.Simulator.Operations: replaceTailFrame :: forall p sym ext a b c (args :: Maybe (Ctx CrucibleType)) (args' :: Maybe (Ctx CrucibleType)). FrameRetType a ~ FrameRetType c => ActiveTree p sym ext b a args -> SimFrame sym ext c args' -> Maybe (ActiveTree p sym ext b c args')
- Lang.Crucible.Simulator.Operations: resolveCall :: FunctionBindings p sym ext -> FnVal sym args ret -> RegMap sym args -> ProgramLoc -> [SomeFrame (SimFrame sym ext)] -> ResolvedCall p sym ext ret
+ Lang.Crucible.Simulator.Operations: resolveCall :: forall p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType). FunctionBindings p sym ext -> FnVal sym args ret -> RegMap sym args -> ProgramLoc -> [SomeFrame (SimFrame sym ext)] -> ResolvedCall p sym ext ret
- Lang.Crucible.Simulator.Operations: resolvedCallName :: ResolvedCall p sym ext ret -> FunctionName
+ Lang.Crucible.Simulator.Operations: resolvedCallName :: forall p sym ext (ret :: CrucibleType). ResolvedCall p sym ext ret -> FunctionName
- Lang.Crucible.Simulator.Operations: resumeFrame :: IsSymInterface sym => PausedFrame p sym ext rtp f -> ValueFromFrame p sym ext rtp f -> ExecCont p sym ext rtp g ba
+ Lang.Crucible.Simulator.Operations: resumeFrame :: forall sym p ext rtp f g (ba :: Maybe (Ctx CrucibleType)). IsSymInterface sym => PausedFrame p sym ext rtp f -> ValueFromFrame p sym ext rtp f -> ExecCont p sym ext rtp g ba
- Lang.Crucible.Simulator.Operations: resumeValueFromValueAbort :: IsSymInterface sym => ValueFromValue p sym ext r ret' -> AbortedResult sym ext -> ExecCont p sym ext r f a
+ Lang.Crucible.Simulator.Operations: resumeValueFromValueAbort :: forall sym p ext r (ret' :: CrucibleType) f (a :: Maybe (Ctx CrucibleType)). IsSymInterface sym => ValueFromValue p sym ext r ret' -> AbortedResult sym ext -> ExecCont p sym ext r f a
- Lang.Crucible.Simulator.Operations: returnValue :: forall p sym ext rtp f args. RegEntry sym (FrameRetType f) -> ExecCont p sym ext rtp f args
+ Lang.Crucible.Simulator.Operations: returnValue :: forall p sym ext rtp f (args :: Maybe (Ctx CrucibleType)). RegEntry sym (FrameRetType f) -> ExecCont p sym ext rtp f args
- Lang.Crucible.Simulator.Operations: runAbortHandler :: AbortExecReason -> SimState p sym ext rtp f args -> IO (ExecState p sym ext rtp)
+ Lang.Crucible.Simulator.Operations: runAbortHandler :: forall p sym ext rtp f (args :: Maybe (Ctx CrucibleType)). AbortExecReason -> SimState p sym ext rtp f args -> IO (ExecState p sym ext rtp)
- Lang.Crucible.Simulator.Operations: runErrorHandler :: SimErrorReason -> SimState p sym ext rtp f args -> IO (ExecState p sym ext rtp)
+ Lang.Crucible.Simulator.Operations: runErrorHandler :: forall p sym ext rtp f (args :: Maybe (Ctx CrucibleType)). SimErrorReason -> SimState p sym ext rtp f args -> IO (ExecState p sym ext rtp)
- Lang.Crucible.Simulator.Operations: runGenericErrorHandler :: String -> SimState p sym ext rtp f args -> IO (ExecState p sym ext rtp)
+ Lang.Crucible.Simulator.Operations: runGenericErrorHandler :: forall p sym ext rtp f (args :: Maybe (Ctx CrucibleType)). String -> SimState p sym ext rtp f args -> IO (ExecState p sym ext rtp)
- Lang.Crucible.Simulator.Operations: runOverride :: Override p sym ext args ret -> ExecCont p sym ext rtp (OverrideLang ret) ('Just args)
+ Lang.Crucible.Simulator.Operations: runOverride :: forall p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType) rtp. Override p sym ext args ret -> ExecCont p sym ext rtp (OverrideLang ret) ('Just args)
- Lang.Crucible.Simulator.Operations: tailCallFunction :: FrameRetType f ~ ret => FnVal sym args ret -> RegMap sym args -> ValueFromValue p sym ext rtp ret -> ProgramLoc -> ExecCont p sym ext rtp f a
+ Lang.Crucible.Simulator.Operations: tailCallFunction :: forall f (ret :: CrucibleType) sym (args :: Ctx CrucibleType) p ext rtp (a :: Maybe (Ctx CrucibleType)). FrameRetType f ~ ret => FnVal sym args ret -> RegMap sym args -> ValueFromValue p sym ext rtp ret -> ProgramLoc -> ExecCont p sym ext rtp f a
- Lang.Crucible.Simulator.Operations: variantCases :: IsSymInterface sym => [(Pred sym, ResolvedJump sym blocks)] -> ExecCont p sym ext rtp (CrucibleLang blocks r) ('Just ctx)
+ Lang.Crucible.Simulator.Operations: variantCases :: forall sym (blocks :: Ctx (Ctx CrucibleType)) p ext rtp (r :: CrucibleType) (ctx :: Ctx CrucibleType). IsSymInterface sym => [(Pred sym, ResolvedJump sym blocks)] -> ExecCont p sym ext rtp (CrucibleLang blocks r) ('Just ctx)
- Lang.Crucible.Simulator.OverrideSim: TypedOverride :: (forall rtp args' ret'. Assignment (RegValue' sym) args -> OverrideSim p sym ext rtp args' ret' (RegValue sym ret)) -> CtxRepr args -> TypeRepr ret -> TypedOverride p sym ext args ret
+ Lang.Crucible.Simulator.OverrideSim: TypedOverride :: (forall rtp (args' :: Ctx CrucibleType) (ret' :: CrucibleType). () => Assignment (RegValue' sym) args -> OverrideSim p sym ext rtp args' ret' (RegValue sym ret)) -> CtxRepr args -> TypeRepr ret -> TypedOverride p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType)
- Lang.Crucible.Simulator.OverrideSim: [FnBinding] :: FnHandle args ret -> FnState p sym ext args ret -> FnBinding p sym ext
+ Lang.Crucible.Simulator.OverrideSim: [FnBinding] :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType) p sym ext. FnHandle args ret -> FnState p sym ext args ret -> FnBinding p sym ext
- Lang.Crucible.Simulator.OverrideSim: [typedOverrideArgs] :: TypedOverride p sym ext args ret -> CtxRepr args
+ Lang.Crucible.Simulator.OverrideSim: [typedOverrideArgs] :: TypedOverride p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType) -> CtxRepr args
- Lang.Crucible.Simulator.OverrideSim: [typedOverrideHandler] :: TypedOverride p sym ext args ret -> forall rtp args' ret'. Assignment (RegValue' sym) args -> OverrideSim p sym ext rtp args' ret' (RegValue sym ret)
+ Lang.Crucible.Simulator.OverrideSim: [typedOverrideHandler] :: TypedOverride p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType) -> forall rtp (args' :: Ctx CrucibleType) (ret' :: CrucibleType). () => Assignment (RegValue' sym) args -> OverrideSim p sym ext rtp args' ret' (RegValue sym ret)
- Lang.Crucible.Simulator.OverrideSim: [typedOverrideRet] :: TypedOverride p sym ext args ret -> TypeRepr ret
+ Lang.Crucible.Simulator.OverrideSim: [typedOverrideRet] :: TypedOverride p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType) -> TypeRepr ret
- Lang.Crucible.Simulator.OverrideSim: bindCFG :: CFG ext blocks args ret -> OverrideSim p sym ext rtp a r ()
+ Lang.Crucible.Simulator.OverrideSim: bindCFG :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (args :: Ctx CrucibleType) (ret :: CrucibleType) p sym rtp (a :: Ctx CrucibleType) (r :: CrucibleType). CFG ext blocks args ret -> OverrideSim p sym ext rtp a r ()
- Lang.Crucible.Simulator.OverrideSim: bindFnHandle :: FnHandle args ret -> FnState p sym ext args ret -> OverrideSim p sym ext rtp a r ()
+ Lang.Crucible.Simulator.OverrideSim: bindFnHandle :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType) p sym ext rtp (a :: Ctx CrucibleType) (r :: CrucibleType). FnHandle args ret -> FnState p sym ext args ret -> OverrideSim p sym ext rtp a r ()
- Lang.Crucible.Simulator.OverrideSim: callBlock :: IsSyntaxExtension ext => CFG ext blocks init ret -> BlockID blocks args -> RegMap sym args -> OverrideSim p sym ext rtp a r (RegEntry sym ret)
+ Lang.Crucible.Simulator.OverrideSim: callBlock :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType) (args :: Ctx CrucibleType) sym p rtp (a :: Ctx CrucibleType) (r :: CrucibleType). IsSyntaxExtension ext => CFG ext blocks init ret -> BlockID blocks args -> RegMap sym args -> OverrideSim p sym ext rtp a r (RegEntry sym ret)
- Lang.Crucible.Simulator.OverrideSim: callCFG :: IsSyntaxExtension ext => CFG ext blocks init ret -> RegMap sym init -> OverrideSim p sym ext rtp a r (RegEntry sym ret)
+ Lang.Crucible.Simulator.OverrideSim: callCFG :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (init :: Ctx CrucibleType) (ret :: CrucibleType) sym p rtp (a :: Ctx CrucibleType) (r :: CrucibleType). IsSyntaxExtension ext => CFG ext blocks init ret -> RegMap sym init -> OverrideSim p sym ext rtp a r (RegEntry sym ret)
- Lang.Crucible.Simulator.OverrideSim: callFnVal :: (IsExprBuilder sym, IsSyntaxExtension ext) => FnVal sym args ret -> RegMap sym args -> OverrideSim p sym ext rtp a r (RegEntry sym ret)
+ Lang.Crucible.Simulator.OverrideSim: callFnVal :: forall sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType) p rtp (a :: Ctx CrucibleType) (r :: CrucibleType). (IsExprBuilder sym, IsSyntaxExtension ext) => FnVal sym args ret -> RegMap sym args -> OverrideSim p sym ext rtp a r (RegEntry sym ret)
- Lang.Crucible.Simulator.OverrideSim: callFnVal' :: (IsExprBuilder sym, IsSyntaxExtension ext) => FnVal sym args ret -> Assignment (RegValue' sym) args -> OverrideSim p sym ext rtp a r (RegValue sym ret)
+ Lang.Crucible.Simulator.OverrideSim: callFnVal' :: forall sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType) p rtp (a :: Ctx CrucibleType) (r :: CrucibleType). (IsExprBuilder sym, IsSyntaxExtension ext) => FnVal sym args ret -> Assignment (RegValue' sym) args -> OverrideSim p sym ext rtp a r (RegValue sym ret)
- Lang.Crucible.Simulator.OverrideSim: callOverride :: FnHandle args ret -> Override p sym ext args ret -> RegMap sym args -> OverrideSim p sym ext rtp a r (RegEntry sym ret)
+ Lang.Crucible.Simulator.OverrideSim: callOverride :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType) p sym ext rtp (a :: Ctx CrucibleType) (r :: CrucibleType). FnHandle args ret -> Override p sym ext args ret -> RegMap sym args -> OverrideSim p sym ext rtp a r (RegEntry sym ret)
- Lang.Crucible.Simulator.OverrideSim: data Override p sym ext (args :: Ctx CrucibleType) ret
+ Lang.Crucible.Simulator.OverrideSim: data Override p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType)
- Lang.Crucible.Simulator.OverrideSim: data TypedOverride p sym ext args ret
+ Lang.Crucible.Simulator.OverrideSim: data TypedOverride p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType)
- Lang.Crucible.Simulator.OverrideSim: exitExecution :: IsSymInterface sym => ExitCode -> OverrideSim p sym ext rtp args r a
+ Lang.Crucible.Simulator.OverrideSim: exitExecution :: forall sym p ext rtp (args :: Ctx CrucibleType) (r :: CrucibleType) a. IsSymInterface sym => ExitCode -> OverrideSim p sym ext rtp args r a
- Lang.Crucible.Simulator.OverrideSim: getContext :: OverrideSim p sym ext rtp args ret (SimContext p sym ext)
+ Lang.Crucible.Simulator.OverrideSim: getContext :: forall p sym ext rtp (args :: Ctx CrucibleType) (ret :: CrucibleType). OverrideSim p sym ext rtp args ret (SimContext p sym ext)
- Lang.Crucible.Simulator.OverrideSim: getOverrideArgs :: OverrideSim p sym ext rtp args ret (RegMap sym args)
+ Lang.Crucible.Simulator.OverrideSim: getOverrideArgs :: forall p sym ext rtp (args :: Ctx CrucibleType) (ret :: CrucibleType). OverrideSim p sym ext rtp args ret (RegMap sym args)
- Lang.Crucible.Simulator.OverrideSim: getSymInterface :: OverrideSim p sym ext rtp args ret sym
+ Lang.Crucible.Simulator.OverrideSim: getSymInterface :: forall p sym ext rtp (args :: Ctx CrucibleType) (ret :: CrucibleType). OverrideSim p sym ext rtp args ret sym
- Lang.Crucible.Simulator.OverrideSim: mkIntrinsic :: forall p sym ext args ret. CurryAssignmentClass args => (forall r. Proxy r -> sym -> CurryAssignment args (RegEntry sym) (OverrideSim p sym ext r args ret (RegValue sym ret))) -> FnHandle args ret -> Override p sym ext args ret
+ Lang.Crucible.Simulator.OverrideSim: mkIntrinsic :: forall p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType). CurryAssignmentClass args => (forall r. () => Proxy r -> sym -> CurryAssignment args (RegEntry sym) (OverrideSim p sym ext r args ret (RegValue sym ret))) -> FnHandle args ret -> Override p sym ext args ret
- Lang.Crucible.Simulator.OverrideSim: mkOverride :: KnownRepr TypeRepr ret => FunctionName -> (forall r. OverrideSim p sym ext r args ret (RegValue sym ret)) -> Override p sym ext args ret
+ Lang.Crucible.Simulator.OverrideSim: mkOverride :: forall (ret :: CrucibleType) p sym ext (args :: Ctx CrucibleType). KnownRepr TypeRepr ret => FunctionName -> (forall r. () => OverrideSim p sym ext r args ret (RegValue sym ret)) -> Override p sym ext args ret
- Lang.Crucible.Simulator.OverrideSim: mkOverride' :: FunctionName -> TypeRepr ret -> (forall r. OverrideSim p sym ext r args ret (RegValue sym ret)) -> Override p sym ext args ret
+ Lang.Crucible.Simulator.OverrideSim: mkOverride' :: forall (ret :: CrucibleType) p sym ext (args :: Ctx CrucibleType). FunctionName -> TypeRepr ret -> (forall r. () => OverrideSim p sym ext r args ret (RegValue sym ret)) -> Override p sym ext args ret
- Lang.Crucible.Simulator.OverrideSim: modifyGlobal :: IsSymInterface sym => GlobalVar tp -> (RegValue sym tp -> OverrideSim p sym ext rtp args ret (a, RegValue sym tp)) -> OverrideSim p sym ext rtp args ret a
+ Lang.Crucible.Simulator.OverrideSim: modifyGlobal :: forall sym (tp :: CrucibleType) p ext rtp (args :: Ctx CrucibleType) (ret :: CrucibleType) a. IsSymInterface sym => GlobalVar tp -> (RegValue sym tp -> OverrideSim p sym ext rtp args ret (a, RegValue sym tp)) -> OverrideSim p sym ext rtp args ret a
- Lang.Crucible.Simulator.OverrideSim: modifyRef :: IsSymInterface sym => RefCell tp -> (RegValue sym tp -> OverrideSim p sym ext rtp args ret (a, RegValue sym tp)) -> OverrideSim p sym ext rtp args ret a
+ Lang.Crucible.Simulator.OverrideSim: modifyRef :: forall sym (tp :: CrucibleType) p ext rtp (args :: Ctx CrucibleType) (ret :: CrucibleType) a. IsSymInterface sym => RefCell tp -> (RegValue sym tp -> OverrideSim p sym ext rtp args ret (a, RegValue sym tp)) -> OverrideSim p sym ext rtp args ret a
- Lang.Crucible.Simulator.OverrideSim: newEmptyRef :: TypeRepr tp -> OverrideSim p sym ext rtp args ret (RefCell tp)
+ Lang.Crucible.Simulator.OverrideSim: newEmptyRef :: forall (tp :: CrucibleType) p sym ext rtp (args :: Ctx CrucibleType) (ret :: CrucibleType). TypeRepr tp -> OverrideSim p sym ext rtp args ret (RefCell tp)
- Lang.Crucible.Simulator.OverrideSim: newRef :: IsSymInterface sym => TypeRepr tp -> RegValue sym tp -> OverrideSim p sym ext rtp args ret (RefCell tp)
+ Lang.Crucible.Simulator.OverrideSim: newRef :: forall sym (tp :: CrucibleType) p ext rtp (args :: Ctx CrucibleType) (ret :: CrucibleType). IsSymInterface sym => TypeRepr tp -> RegValue sym tp -> OverrideSim p sym ext rtp args ret (RefCell tp)
- Lang.Crucible.Simulator.OverrideSim: nondetBranches :: forall p sym ext rtp args new_args res a. IsSymInterface sym => RegMap sym new_args -> [(Pred sym, OverrideSim p sym ext rtp (args <+> new_args) res a, Maybe Position)] -> OverrideSim p sym ext rtp args res a
+ Lang.Crucible.Simulator.OverrideSim: nondetBranches :: forall p sym ext rtp (args :: Ctx CrucibleType) (new_args :: Ctx CrucibleType) (res :: CrucibleType) a. IsSymInterface sym => RegMap sym new_args -> [(Pred sym, OverrideSim p sym ext rtp (args <+> new_args) res a, Maybe Position)] -> OverrideSim p sym ext rtp args res a
- Lang.Crucible.Simulator.OverrideSim: overrideAbort :: AbortExecReason -> OverrideSim p sym ext rtp args res a
+ Lang.Crucible.Simulator.OverrideSim: overrideAbort :: forall p sym ext rtp (args :: Ctx CrucibleType) (res :: CrucibleType) a. AbortExecReason -> OverrideSim p sym ext rtp args res a
- Lang.Crucible.Simulator.OverrideSim: overrideError :: IsSymInterface sym => SimErrorReason -> OverrideSim p sym ext rtp args res a
+ Lang.Crucible.Simulator.OverrideSim: overrideError :: forall sym p ext rtp (args :: Ctx CrucibleType) (res :: CrucibleType) a. IsSymInterface sym => SimErrorReason -> OverrideSim p sym ext rtp args res a
- Lang.Crucible.Simulator.OverrideSim: overrideReturn :: KnownRepr TypeRepr res => RegValue sym res -> OverrideSim p sym ext rtp args res a
+ Lang.Crucible.Simulator.OverrideSim: overrideReturn :: forall (res :: CrucibleType) sym p ext rtp (args :: Ctx CrucibleType) a. KnownRepr TypeRepr res => RegValue sym res -> OverrideSim p sym ext rtp args res a
- Lang.Crucible.Simulator.OverrideSim: overrideReturn' :: RegEntry sym res -> OverrideSim p sym ext rtp args res a
+ Lang.Crucible.Simulator.OverrideSim: overrideReturn' :: forall sym (res :: CrucibleType) p ext rtp (args :: Ctx CrucibleType) a. RegEntry sym res -> OverrideSim p sym ext rtp args res a
- Lang.Crucible.Simulator.OverrideSim: ovrWithBackend :: (forall bak. IsSymBackend sym bak => bak -> OverrideSim p sym ext rtp args ret a) -> OverrideSim p sym ext rtp args ret a
+ Lang.Crucible.Simulator.OverrideSim: ovrWithBackend :: forall sym p ext rtp (args :: Ctx CrucibleType) (ret :: CrucibleType) a. (forall bak. IsSymBackend sym bak => bak -> OverrideSim p sym ext rtp args ret a) -> OverrideSim p sym ext rtp args ret a
- Lang.Crucible.Simulator.OverrideSim: readGlobal :: IsSymInterface sym => GlobalVar tp -> OverrideSim p sym ext rtp args ret (RegValue sym tp)
+ Lang.Crucible.Simulator.OverrideSim: readGlobal :: forall sym (tp :: CrucibleType) p ext rtp (args :: Ctx CrucibleType) (ret :: CrucibleType). IsSymInterface sym => GlobalVar tp -> OverrideSim p sym ext rtp args ret (RegValue sym tp)
- Lang.Crucible.Simulator.OverrideSim: readGlobals :: OverrideSim p sym ext rtp args ret (SymGlobalState sym)
+ Lang.Crucible.Simulator.OverrideSim: readGlobals :: forall p sym ext rtp (args :: Ctx CrucibleType) (ret :: CrucibleType). OverrideSim p sym ext rtp args ret (SymGlobalState sym)
- Lang.Crucible.Simulator.OverrideSim: readMuxTreeRef :: IsSymInterface sym => TypeRepr tp -> MuxTree sym (RefCell tp) -> OverrideSim p sym ext rtp args ret (RegValue sym tp)
+ Lang.Crucible.Simulator.OverrideSim: readMuxTreeRef :: forall sym (tp :: CrucibleType) p ext rtp (args :: Ctx CrucibleType) (ret :: CrucibleType). IsSymInterface sym => TypeRepr tp -> MuxTree sym (RefCell tp) -> OverrideSim p sym ext rtp args ret (RegValue sym tp)
- Lang.Crucible.Simulator.OverrideSim: readRef :: IsSymInterface sym => RefCell tp -> OverrideSim p sym ext rtp args ret (RegValue sym tp)
+ Lang.Crucible.Simulator.OverrideSim: readRef :: forall sym (tp :: CrucibleType) p ext rtp (args :: Ctx CrucibleType) (ret :: CrucibleType). IsSymInterface sym => RefCell tp -> OverrideSim p sym ext rtp args ret (RegValue sym tp)
- Lang.Crucible.Simulator.OverrideSim: registerFnBinding :: FnBinding p sym ext -> OverrideSim p sym ext rtp a r ()
+ Lang.Crucible.Simulator.OverrideSim: registerFnBinding :: forall p sym ext rtp (a :: Ctx CrucibleType) (r :: CrucibleType). FnBinding p sym ext -> OverrideSim p sym ext rtp a r ()
- Lang.Crucible.Simulator.OverrideSim: runOverrideSim :: TypeRepr tp -> OverrideSim p sym ext rtp args tp (RegValue sym tp) -> ExecCont p sym ext rtp (OverrideLang tp) ('Just args)
+ Lang.Crucible.Simulator.OverrideSim: runOverrideSim :: forall (tp :: CrucibleType) p sym ext rtp (args :: Ctx CrucibleType). TypeRepr tp -> OverrideSim p sym ext rtp args tp (RegValue sym tp) -> ExecCont p sym ext rtp (OverrideLang tp) ('Just args)
- Lang.Crucible.Simulator.OverrideSim: runTypedOverride :: FunctionName -> TypedOverride p sym ext args ret -> Override p sym ext args ret
+ Lang.Crucible.Simulator.OverrideSim: runTypedOverride :: forall p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType). FunctionName -> TypedOverride p sym ext args ret -> Override p sym ext args ret
- Lang.Crucible.Simulator.OverrideSim: symbolicBranch :: IsSymInterface sym => Pred sym -> RegMap sym then_args -> OverrideSim p sym ext rtp then_args res a -> Maybe Position -> RegMap sym else_args -> OverrideSim p sym ext rtp else_args res a -> Maybe Position -> OverrideSim p sym ext rtp args res a
+ Lang.Crucible.Simulator.OverrideSim: symbolicBranch :: forall sym (then_args :: Ctx CrucibleType) p ext rtp (res :: CrucibleType) a (else_args :: Ctx CrucibleType) (args :: Ctx CrucibleType). IsSymInterface sym => Pred sym -> RegMap sym then_args -> OverrideSim p sym ext rtp then_args res a -> Maybe Position -> RegMap sym else_args -> OverrideSim p sym ext rtp else_args res a -> Maybe Position -> OverrideSim p sym ext rtp args res a
- Lang.Crucible.Simulator.OverrideSim: symbolicBranches :: forall p sym ext rtp args new_args res a. IsSymInterface sym => RegMap sym new_args -> [(Pred sym, OverrideSim p sym ext rtp (args <+> new_args) res a, Maybe Position)] -> OverrideSim p sym ext rtp args res a
+ Lang.Crucible.Simulator.OverrideSim: symbolicBranches :: forall p sym ext rtp (args :: Ctx CrucibleType) (new_args :: Ctx CrucibleType) (res :: CrucibleType) a. IsSymInterface sym => RegMap sym new_args -> [(Pred sym, OverrideSim p sym ext rtp (args <+> new_args) res a, Maybe Position)] -> OverrideSim p sym ext rtp args res a
- Lang.Crucible.Simulator.OverrideSim: type IntrinsicImpl p sym ext args ret = IsSymInterface sym => FnHandle args ret -> Override p sym ext args ret
+ Lang.Crucible.Simulator.OverrideSim: type IntrinsicImpl p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType) = IsSymInterface sym => FnHandle args ret -> Override p sym ext args ret
- Lang.Crucible.Simulator.OverrideSim: useIntrinsic :: FnHandle args ret -> (FnHandle args ret -> Override p sym ext args ret) -> FnBinding p sym ext
+ Lang.Crucible.Simulator.OverrideSim: useIntrinsic :: forall (args :: Ctx CrucibleType) (ret :: CrucibleType) p sym ext. FnHandle args ret -> (FnHandle args ret -> Override p sym ext args ret) -> FnBinding p sym ext
- Lang.Crucible.Simulator.OverrideSim: withSimContext :: StateT (SimContext p sym ext) IO a -> OverrideSim p sym ext rtp args ret a
+ Lang.Crucible.Simulator.OverrideSim: withSimContext :: forall p sym ext a rtp (args :: Ctx CrucibleType) (ret :: CrucibleType). StateT (SimContext p sym ext) IO a -> OverrideSim p sym ext rtp args ret a
- Lang.Crucible.Simulator.OverrideSim: writeGlobal :: GlobalVar tp -> RegValue sym tp -> OverrideSim p sym ext rtp args ret ()
+ Lang.Crucible.Simulator.OverrideSim: writeGlobal :: forall (tp :: CrucibleType) sym p ext rtp (args :: Ctx CrucibleType) (ret :: CrucibleType). GlobalVar tp -> RegValue sym tp -> OverrideSim p sym ext rtp args ret ()
- Lang.Crucible.Simulator.OverrideSim: writeGlobals :: SymGlobalState sym -> OverrideSim p sym ext rtp args ret ()
+ Lang.Crucible.Simulator.OverrideSim: writeGlobals :: forall sym p ext rtp (args :: Ctx CrucibleType) (ret :: CrucibleType). SymGlobalState sym -> OverrideSim p sym ext rtp args ret ()
- Lang.Crucible.Simulator.OverrideSim: writeMuxTreeRef :: IsSymInterface sym => TypeRepr tp -> MuxTree sym (RefCell tp) -> RegValue sym tp -> OverrideSim p sym ext rtp args ret ()
+ Lang.Crucible.Simulator.OverrideSim: writeMuxTreeRef :: forall sym (tp :: CrucibleType) p ext rtp (args :: Ctx CrucibleType) (ret :: CrucibleType). IsSymInterface sym => TypeRepr tp -> MuxTree sym (RefCell tp) -> RegValue sym tp -> OverrideSim p sym ext rtp args ret ()
- Lang.Crucible.Simulator.OverrideSim: writeRef :: IsSymInterface sym => RefCell tp -> RegValue sym tp -> OverrideSim p sym ext rtp args ret ()
+ Lang.Crucible.Simulator.OverrideSim: writeRef :: forall sym (tp :: CrucibleType) p ext rtp (args :: Ctx CrucibleType) (ret :: CrucibleType). IsSymInterface sym => RefCell tp -> RegValue sym tp -> OverrideSim p sym ext rtp args ret ()
- Lang.Crucible.Simulator.PathSatisfiability: pathSatisfiabilityFeature :: forall sym. IsSymInterface sym => sym -> (Maybe ProgramLoc -> Pred sym -> IO BranchResult) -> IO (GenericExecutionFeature sym)
+ Lang.Crucible.Simulator.PathSatisfiability: pathSatisfiabilityFeature :: IsSymInterface sym => sym -> (Maybe ProgramLoc -> Pred sym -> IO BranchResult) -> IO (GenericExecutionFeature sym)
- Lang.Crucible.Simulator.PathSplitting: type WorkList p sym ext rtp = IORef (Seq (WorkItem p sym ext rtp))
+ Lang.Crucible.Simulator.PathSplitting: type WorkList p sym ext rtp = IORef Seq WorkItem p sym ext rtp
- Lang.Crucible.Simulator.Profiling: Metric :: (forall rtp f args. SimState p sym ext rtp f args -> IO Integer) -> Metric p sym ext
+ Lang.Crucible.Simulator.Profiling: Metric :: (forall rtp f (args :: Maybe (Ctx CrucibleType)). () => SimState p sym ext rtp f args -> IO Integer) -> Metric p sym ext
- Lang.Crucible.Simulator.Profiling: Metrics :: f Integer -> f Integer -> f Integer -> f Statistics -> f (Map Text Integer) -> Metrics f
+ Lang.Crucible.Simulator.Profiling: Metrics :: f Integer -> f Integer -> f Integer -> f Statistics -> f (Map Text Integer) -> Metrics (f :: Type -> Type)
- Lang.Crucible.Simulator.Profiling: [metricAborts] :: Metrics f -> f Integer
+ Lang.Crucible.Simulator.Profiling: [metricAborts] :: Metrics (f :: Type -> Type) -> f Integer
- Lang.Crucible.Simulator.Profiling: [metricExtraMetrics] :: Metrics f -> f (Map Text Integer)
+ Lang.Crucible.Simulator.Profiling: [metricExtraMetrics] :: Metrics (f :: Type -> Type) -> f (Map Text Integer)
- Lang.Crucible.Simulator.Profiling: [metricMerges] :: Metrics f -> f Integer
+ Lang.Crucible.Simulator.Profiling: [metricMerges] :: Metrics (f :: Type -> Type) -> f Integer
- Lang.Crucible.Simulator.Profiling: [metricSolverStats] :: Metrics f -> f Statistics
+ Lang.Crucible.Simulator.Profiling: [metricSolverStats] :: Metrics (f :: Type -> Type) -> f Statistics
- Lang.Crucible.Simulator.Profiling: [metricSplits] :: Metrics f -> f Integer
+ Lang.Crucible.Simulator.Profiling: [metricSplits] :: Metrics (f :: Type -> Type) -> f Integer
- Lang.Crucible.Simulator.Profiling: [runMetric] :: Metric p sym ext -> forall rtp f args. SimState p sym ext rtp f args -> IO Integer
+ Lang.Crucible.Simulator.Profiling: [runMetric] :: Metric p sym ext -> forall rtp f (args :: Maybe (Ctx CrucibleType)). () => SimState p sym ext rtp f args -> IO Integer
- Lang.Crucible.Simulator.Profiling: data Metrics f
+ Lang.Crucible.Simulator.Profiling: data Metrics (f :: Type -> Type)
- Lang.Crucible.Simulator.RegMap: RegEntry :: !TypeRepr tp -> !RegValue sym tp -> RegEntry sym tp
+ Lang.Crucible.Simulator.RegMap: RegEntry :: !TypeRepr tp -> !RegValue sym tp -> RegEntry sym (tp :: CrucibleType)
- Lang.Crucible.Simulator.RegMap: [regType] :: RegEntry sym tp -> !TypeRepr tp
+ Lang.Crucible.Simulator.RegMap: [regType] :: RegEntry sym (tp :: CrucibleType) -> !TypeRepr tp
- Lang.Crucible.Simulator.RegMap: [regValue] :: RegEntry sym tp -> !RegValue sym tp
+ Lang.Crucible.Simulator.RegMap: [regValue] :: RegEntry sym (tp :: CrucibleType) -> !RegValue sym tp
- Lang.Crucible.Simulator.RegMap: abortBranchForType :: forall sym tp. IsSymInterface sym => sym -> IntrinsicTypes sym -> TypeRepr tp -> RegValue sym tp -> IO (RegValue sym tp)
+ Lang.Crucible.Simulator.RegMap: abortBranchForType :: forall sym (tp :: CrucibleType). IsSymInterface sym => sym -> IntrinsicTypes sym -> TypeRepr tp -> RegValue sym tp -> IO (RegValue sym tp)
- Lang.Crucible.Simulator.RegMap: abortBranchRegEntry :: IsSymInterface sym => sym -> IntrinsicTypes sym -> RegEntry sym tp -> IO (RegEntry sym tp)
+ Lang.Crucible.Simulator.RegMap: abortBranchRegEntry :: forall sym (tp :: CrucibleType). IsSymInterface sym => sym -> IntrinsicTypes sym -> RegEntry sym tp -> IO (RegEntry sym tp)
- Lang.Crucible.Simulator.RegMap: abortBranchRegs :: forall sym ctx. IsSymInterface sym => sym -> IntrinsicTypes sym -> RegMap sym ctx -> IO (RegMap sym ctx)
+ Lang.Crucible.Simulator.RegMap: abortBranchRegs :: forall sym (ctx :: Ctx CrucibleType). IsSymInterface sym => sym -> IntrinsicTypes sym -> RegMap sym ctx -> IO (RegMap sym ctx)
- Lang.Crucible.Simulator.RegMap: appendRegs :: RegMap sym ctx -> RegMap sym ctx' -> RegMap sym (ctx <+> ctx')
+ Lang.Crucible.Simulator.RegMap: appendRegs :: forall sym (ctx :: Ctx CrucibleType) (ctx' :: Ctx CrucibleType). RegMap sym ctx -> RegMap sym ctx' -> RegMap sym (ctx <+> ctx')
- Lang.Crucible.Simulator.RegMap: asSymExpr :: RegEntry sym tp -> (forall bt. tp ~ BaseToType bt => SymExpr sym bt -> a) -> a -> a
+ Lang.Crucible.Simulator.RegMap: asSymExpr :: forall sym (tp :: CrucibleType) a. RegEntry sym tp -> (forall (bt :: BaseType). tp ~ BaseToType bt => SymExpr sym bt -> a) -> a -> a
- Lang.Crucible.Simulator.RegMap: assignReg :: TypeRepr tp -> RegValue sym tp -> RegMap sym ctx -> RegMap sym (ctx ::> tp)
+ Lang.Crucible.Simulator.RegMap: assignReg :: forall (tp :: CrucibleType) sym (ctx :: Ctx CrucibleType). TypeRepr tp -> RegValue sym tp -> RegMap sym ctx -> RegMap sym (ctx ::> tp)
- Lang.Crucible.Simulator.RegMap: assignReg' :: RegEntry sym tp -> RegMap sym ctx -> RegMap sym (ctx ::> tp)
+ Lang.Crucible.Simulator.RegMap: assignReg' :: forall sym (tp :: CrucibleType) (ctx :: Ctx CrucibleType). RegEntry sym tp -> RegMap sym ctx -> RegMap sym (ctx ::> tp)
- Lang.Crucible.Simulator.RegMap: data RegEntry sym tp
+ Lang.Crucible.Simulator.RegMap: data RegEntry sym (tp :: CrucibleType)
- Lang.Crucible.Simulator.RegMap: emptyRegMap :: RegMap sym EmptyCtx
+ Lang.Crucible.Simulator.RegMap: emptyRegMap :: RegMap sym (EmptyCtx :: Ctx CrucibleType)
- Lang.Crucible.Simulator.RegMap: eqReference :: IsSymInterface sym => sym -> RegValue sym (ReferenceType tp) -> RegValue sym (ReferenceType tp) -> IO (Pred sym)
+ Lang.Crucible.Simulator.RegMap: eqReference :: forall sym (tp :: CrucibleType). IsSymInterface sym => sym -> RegValue sym (ReferenceType tp) -> RegValue sym (ReferenceType tp) -> IO (Pred sym)
- Lang.Crucible.Simulator.RegMap: mergeRegs :: IsSymInterface sym => sym -> IntrinsicTypes sym -> MuxFn (Pred sym) (RegMap sym ctx)
+ Lang.Crucible.Simulator.RegMap: mergeRegs :: forall sym (ctx :: Ctx CrucibleType). IsSymInterface sym => sym -> IntrinsicTypes sym -> MuxFn (Pred sym) (RegMap sym ctx)
- Lang.Crucible.Simulator.RegMap: muxReference :: IsSymInterface sym => sym -> ValMuxFn sym (ReferenceType tp)
+ Lang.Crucible.Simulator.RegMap: muxReference :: forall sym (tp :: CrucibleType). IsSymInterface sym => sym -> ValMuxFn sym (ReferenceType tp)
- Lang.Crucible.Simulator.RegMap: muxRegEntry :: IsSymInterface sym => sym -> IntrinsicTypes sym -> MuxFn (Pred sym) (RegEntry sym tp)
+ Lang.Crucible.Simulator.RegMap: muxRegEntry :: forall sym (tp :: CrucibleType). IsSymInterface sym => sym -> IntrinsicTypes sym -> MuxFn (Pred sym) (RegEntry sym tp)
- Lang.Crucible.Simulator.RegMap: muxRegForType :: forall sym tp. IsSymInterface sym => sym -> IntrinsicTypes sym -> TypeRepr tp -> ValMuxFn sym tp
+ Lang.Crucible.Simulator.RegMap: muxRegForType :: forall sym (tp :: CrucibleType). IsSymInterface sym => sym -> IntrinsicTypes sym -> TypeRepr tp -> ValMuxFn sym tp
- Lang.Crucible.Simulator.RegMap: pushBranchForType :: forall sym tp. IsSymInterface sym => sym -> IntrinsicTypes sym -> TypeRepr tp -> RegValue sym tp -> IO (RegValue sym tp)
+ Lang.Crucible.Simulator.RegMap: pushBranchForType :: forall sym (tp :: CrucibleType). IsSymInterface sym => sym -> IntrinsicTypes sym -> TypeRepr tp -> RegValue sym tp -> IO (RegValue sym tp)
- Lang.Crucible.Simulator.RegMap: pushBranchRegEntry :: IsSymInterface sym => sym -> IntrinsicTypes sym -> RegEntry sym tp -> IO (RegEntry sym tp)
+ Lang.Crucible.Simulator.RegMap: pushBranchRegEntry :: forall sym (tp :: CrucibleType). IsSymInterface sym => sym -> IntrinsicTypes sym -> RegEntry sym tp -> IO (RegEntry sym tp)
- Lang.Crucible.Simulator.RegMap: pushBranchRegs :: forall sym ctx. IsSymInterface sym => sym -> IntrinsicTypes sym -> RegMap sym ctx -> IO (RegMap sym ctx)
+ Lang.Crucible.Simulator.RegMap: pushBranchRegs :: forall sym (ctx :: Ctx CrucibleType). IsSymInterface sym => sym -> IntrinsicTypes sym -> RegMap sym ctx -> IO (RegMap sym ctx)
- Lang.Crucible.Simulator.RegMap: reg :: forall n sym ctx tp. Idx n ctx tp => RegMap sym ctx -> RegValue sym tp
+ Lang.Crucible.Simulator.RegMap: reg :: forall (n :: Nat) sym (ctx :: Ctx CrucibleType) (tp :: CrucibleType). Idx n ctx tp => RegMap sym ctx -> RegValue sym tp
- Lang.Crucible.Simulator.RegMap: regMapSize :: RegMap sym ctx -> Size ctx
+ Lang.Crucible.Simulator.RegMap: regMapSize :: forall sym (ctx :: Ctx CrucibleType). RegMap sym ctx -> Size ctx
- Lang.Crucible.Simulator.RegMap: regVal :: RegMap sym ctx -> Reg ctx tp -> RegValue sym tp
+ Lang.Crucible.Simulator.RegMap: regVal :: forall sym (ctx :: Ctx CrucibleType) (tp :: CrucibleType). RegMap sym ctx -> Reg ctx tp -> RegValue sym tp
- Lang.Crucible.Simulator.RegMap: regVal' :: RegMap sym ctx -> Reg ctx tp -> RegEntry sym tp
+ Lang.Crucible.Simulator.RegMap: regVal' :: forall sym (ctx :: Ctx CrucibleType) (tp :: CrucibleType). RegMap sym ctx -> Reg ctx tp -> RegEntry sym tp
- Lang.Crucible.Simulator.RegMap: takeRegs :: Size ctx -> Size ctx' -> RegMap sym (ctx <+> ctx') -> RegMap sym ctx
+ Lang.Crucible.Simulator.RegMap: takeRegs :: forall (ctx :: Ctx CrucibleType) (ctx' :: Ctx CrucibleType) sym. Size ctx -> Size ctx' -> RegMap sym (ctx <+> ctx') -> RegMap sym ctx
- Lang.Crucible.Simulator.RegMap: unconsReg :: RegMap sym (ctx ::> tp) -> (RegMap sym ctx, RegEntry sym tp)
+ Lang.Crucible.Simulator.RegMap: unconsReg :: forall sym (ctx :: Ctx CrucibleType) (tp :: CrucibleType). RegMap sym (ctx ::> tp) -> (RegMap sym ctx, RegEntry sym tp)
- Lang.Crucible.Simulator.RegValue: RV :: RegValue sym tp -> RegValue' sym tp
+ Lang.Crucible.Simulator.RegValue: RV :: RegValue sym tp -> RegValue' sym (tp :: CrucibleType)
- Lang.Crucible.Simulator.RegValue: RolledType :: RegValue sym (UnrollType nm ctx) -> RolledType sym nm ctx
+ Lang.Crucible.Simulator.RegValue: RolledType :: RegValue sym (UnrollType nm ctx) -> RolledType sym (nm :: Symbol) (ctx :: Ctx CrucibleType)
- Lang.Crucible.Simulator.RegValue: VB :: PartExpr (Pred sym) (RegValue sym tp) -> VariantBranch sym tp
+ Lang.Crucible.Simulator.RegValue: VB :: PartExpr (Pred sym) (RegValue sym tp) -> VariantBranch sym (tp :: CrucibleType)
- Lang.Crucible.Simulator.RegValue: [AnyValue] :: TypeRepr tp -> RegValue sym tp -> AnyValue sym
+ Lang.Crucible.Simulator.RegValue: [AnyValue] :: forall (tp :: CrucibleType) sym. TypeRepr tp -> RegValue sym tp -> AnyValue sym
- Lang.Crucible.Simulator.RegValue: [ClosureFnVal] :: !FnVal sym (args ::> tp) ret -> !TypeRepr tp -> !RegValue sym tp -> FnVal sym args ret
+ Lang.Crucible.Simulator.RegValue: [ClosureFnVal] :: forall sym (args :: Ctx CrucibleType) (tp :: CrucibleType) (res :: CrucibleType). !FnVal sym (args ::> tp) res -> !TypeRepr tp -> !RegValue sym tp -> FnVal sym args res
- Lang.Crucible.Simulator.RegValue: [HandleFnVal] :: !FnHandle a r -> FnVal sym a r
+ Lang.Crucible.Simulator.RegValue: [HandleFnVal] :: forall (args :: Ctx CrucibleType) (res :: CrucibleType) sym. !FnHandle args res -> FnVal sym args res
- Lang.Crucible.Simulator.RegValue: [SymSequenceAppend] :: !Nonce GlobalNonceGenerator a -> !SymSequence sym a -> !SymSequence sym a -> SymSequence sym a
+ Lang.Crucible.Simulator.RegValue: [SymSequenceAppend] :: forall a sym. !Nonce GlobalNonceGenerator a -> !SymSequence sym a -> !SymSequence sym a -> SymSequence sym a
- Lang.Crucible.Simulator.RegValue: [SymSequenceCons] :: !Nonce GlobalNonceGenerator a -> a -> !SymSequence sym a -> SymSequence sym a
+ Lang.Crucible.Simulator.RegValue: [SymSequenceCons] :: forall a sym. !Nonce GlobalNonceGenerator a -> a -> !SymSequence sym a -> SymSequence sym a
- Lang.Crucible.Simulator.RegValue: [SymSequenceMerge] :: !Nonce GlobalNonceGenerator a -> !Pred sym -> !SymSequence sym a -> !SymSequence sym a -> SymSequence sym a
+ Lang.Crucible.Simulator.RegValue: [SymSequenceMerge] :: forall a sym. !Nonce GlobalNonceGenerator a -> !Pred sym -> !SymSequence sym a -> !SymSequence sym a -> SymSequence sym a
- Lang.Crucible.Simulator.RegValue: [SymSequenceNil] :: SymSequence sym a
+ Lang.Crucible.Simulator.RegValue: [SymSequenceNil] :: forall sym a. SymSequence sym a
- Lang.Crucible.Simulator.RegValue: [VarargsFnVal] :: !FnHandle (args ::> VectorType AnyType) ret -> !CtxRepr addlArgs -> FnVal sym (args <+> addlArgs) ret
+ Lang.Crucible.Simulator.RegValue: [VarargsFnVal] :: forall (args1 :: Ctx CrucibleType) (res :: CrucibleType) (addlArgs :: Ctx CrucibleType) sym. !FnHandle (args1 ::> VectorType AnyType) res -> !CtxRepr addlArgs -> FnVal sym (args1 <+> addlArgs) res
- Lang.Crucible.Simulator.RegValue: [unRV] :: RegValue' sym tp -> RegValue sym tp
+ Lang.Crucible.Simulator.RegValue: [unRV] :: RegValue' sym (tp :: CrucibleType) -> RegValue sym tp
- Lang.Crucible.Simulator.RegValue: [unVB] :: VariantBranch sym tp -> PartExpr (Pred sym) (RegValue sym tp)
+ Lang.Crucible.Simulator.RegValue: [unVB] :: VariantBranch sym (tp :: CrucibleType) -> PartExpr (Pred sym) (RegValue sym tp)
- Lang.Crucible.Simulator.RegValue: [unroll] :: RolledType sym nm ctx -> RegValue sym (UnrollType nm ctx)
+ Lang.Crucible.Simulator.RegValue: [unroll] :: RolledType sym (nm :: Symbol) (ctx :: Ctx CrucibleType) -> RegValue sym (UnrollType nm ctx)
- Lang.Crucible.Simulator.RegValue: data FnVal (sym :: Type) (args :: Ctx CrucibleType) (res :: CrucibleType)
+ Lang.Crucible.Simulator.RegValue: data FnVal sym (args :: Ctx CrucibleType) (res :: CrucibleType)
- Lang.Crucible.Simulator.RegValue: fnValType :: FnVal sym args res -> TypeRepr (FunctionHandleType args res)
+ Lang.Crucible.Simulator.RegValue: fnValType :: forall sym (args :: Ctx CrucibleType) (res :: CrucibleType). FnVal sym args res -> TypeRepr (FunctionHandleType args res)
- Lang.Crucible.Simulator.RegValue: injectVariant :: IsExprBuilder sym => sym -> CtxRepr ctx -> Index ctx tp -> RegValue sym tp -> RegValue sym (VariantType ctx)
+ Lang.Crucible.Simulator.RegValue: injectVariant :: forall sym (ctx :: Ctx CrucibleType) (tp :: CrucibleType). IsExprBuilder sym => sym -> CtxRepr ctx -> Index ctx tp -> RegValue sym tp -> RegValue sym (VariantType ctx)
- Lang.Crucible.Simulator.RegValue: muxHandle :: IsExpr (SymExpr sym) => sym -> Pred sym -> FnVal sym a r -> FnVal sym a r -> IO (FnVal sym a r)
+ Lang.Crucible.Simulator.RegValue: muxHandle :: forall sym (a :: Ctx CrucibleType) (r :: CrucibleType). IsExpr (SymExpr sym) => sym -> Pred sym -> FnVal sym a r -> FnVal sym a r -> IO (FnVal sym a r)
- Lang.Crucible.Simulator.RegValue: muxRecursive :: IsRecursiveType nm => (forall tp. TypeRepr tp -> ValMuxFn sym tp) -> SymbolRepr nm -> CtxRepr ctx -> ValMuxFn sym (RecursiveType nm ctx)
+ Lang.Crucible.Simulator.RegValue: muxRecursive :: forall (nm :: Symbol) sym (ctx :: Ctx CrucibleType). IsRecursiveType nm => (forall (tp :: CrucibleType). () => TypeRepr tp -> ValMuxFn sym tp) -> SymbolRepr nm -> CtxRepr ctx -> ValMuxFn sym (RecursiveType nm ctx)
- Lang.Crucible.Simulator.RegValue: muxStruct :: (forall tp. TypeRepr tp -> ValMuxFn sym tp) -> CtxRepr ctx -> ValMuxFn sym (StructType ctx)
+ Lang.Crucible.Simulator.RegValue: muxStruct :: forall sym (ctx :: Ctx CrucibleType). (forall (tp :: CrucibleType). () => TypeRepr tp -> ValMuxFn sym tp) -> CtxRepr ctx -> ValMuxFn sym (StructType ctx)
- Lang.Crucible.Simulator.RegValue: muxVariant :: IsExprBuilder sym => sym -> (forall tp. TypeRepr tp -> ValMuxFn sym tp) -> CtxRepr ctx -> ValMuxFn sym (VariantType ctx)
+ Lang.Crucible.Simulator.RegValue: muxVariant :: forall sym (ctx :: Ctx CrucibleType). IsExprBuilder sym => sym -> (forall (tp :: CrucibleType). () => TypeRepr tp -> ValMuxFn sym tp) -> CtxRepr ctx -> ValMuxFn sym (VariantType ctx)
- Lang.Crucible.Simulator.RegValue: newtype RegValue' sym tp
+ Lang.Crucible.Simulator.RegValue: newtype RegValue' sym (tp :: CrucibleType)
- Lang.Crucible.Simulator.RegValue: newtype RolledType sym nm ctx
+ Lang.Crucible.Simulator.RegValue: newtype RolledType sym (nm :: Symbol) (ctx :: Ctx CrucibleType)
- Lang.Crucible.Simulator.RegValue: newtype VariantBranch sym tp
+ Lang.Crucible.Simulator.RegValue: newtype VariantBranch sym (tp :: CrucibleType)
- Lang.Crucible.Simulator.RegValue: type ValMuxFn sym tp = MuxFn (Pred sym) (RegValue sym tp)
+ Lang.Crucible.Simulator.RegValue: type ValMuxFn sym (tp :: CrucibleType) = MuxFn Pred sym RegValue sym tp
- Lang.Crucible.Simulator.RegValue: type family RegValue (sym :: Type) (tp :: CrucibleType) :: Type
+ Lang.Crucible.Simulator.RegValue: type family RegValue sym (tp :: CrucibleType)
- Lang.Crucible.Simulator.SymSequence: [SymSequenceAppend] :: !Nonce GlobalNonceGenerator a -> !SymSequence sym a -> !SymSequence sym a -> SymSequence sym a
+ Lang.Crucible.Simulator.SymSequence: [SymSequenceAppend] :: forall a sym. !Nonce GlobalNonceGenerator a -> !SymSequence sym a -> !SymSequence sym a -> SymSequence sym a
- Lang.Crucible.Simulator.SymSequence: [SymSequenceCons] :: !Nonce GlobalNonceGenerator a -> a -> !SymSequence sym a -> SymSequence sym a
+ Lang.Crucible.Simulator.SymSequence: [SymSequenceCons] :: forall a sym. !Nonce GlobalNonceGenerator a -> a -> !SymSequence sym a -> SymSequence sym a
- Lang.Crucible.Simulator.SymSequence: [SymSequenceMerge] :: !Nonce GlobalNonceGenerator a -> !Pred sym -> !SymSequence sym a -> !SymSequence sym a -> SymSequence sym a
+ Lang.Crucible.Simulator.SymSequence: [SymSequenceMerge] :: forall a sym. !Nonce GlobalNonceGenerator a -> !Pred sym -> !SymSequence sym a -> !SymSequence sym a -> SymSequence sym a
- Lang.Crucible.Simulator.SymSequence: [SymSequenceNil] :: SymSequence sym a
+ Lang.Crucible.Simulator.SymSequence: [SymSequenceNil] :: forall sym a. SymSequence sym a
- Lang.Crucible.Simulator.SymSequence: headSymSequence :: forall sym a. IsExprBuilder sym => sym -> (Pred sym -> a -> a -> IO a) -> SymSequence sym a -> IO (PartExpr (Pred sym) a)
+ Lang.Crucible.Simulator.SymSequence: headSymSequence :: IsExprBuilder sym => sym -> (Pred sym -> a -> a -> IO a) -> SymSequence sym a -> IO (PartExpr (Pred sym) a)
- Lang.Crucible.Simulator.SymSequence: isNilSymSequence :: forall sym a. IsExprBuilder sym => sym -> SymSequence sym a -> IO (Pred sym)
+ Lang.Crucible.Simulator.SymSequence: isNilSymSequence :: IsExprBuilder sym => sym -> SymSequence sym a -> IO (Pred sym)
- Lang.Crucible.Simulator.SymSequence: lengthSymSequence :: forall sym a. IsExprBuilder sym => sym -> SymSequence sym a -> IO (SymNat sym)
+ Lang.Crucible.Simulator.SymSequence: lengthSymSequence :: IsExprBuilder sym => sym -> SymSequence sym a -> IO (SymNat sym)
- Lang.Crucible.Simulator.SymSequence: newSeqCache :: IO (SeqCache f)
+ Lang.Crucible.Simulator.SymSequence: newSeqCache :: forall (f :: Type -> Type). IO (SeqCache f)
- Lang.Crucible.Simulator.SymSequence: tailSymSequence :: forall sym a. IsExprBuilder sym => sym -> SymSequence sym a -> IO (PartExpr (Pred sym) (SymSequence sym a))
+ Lang.Crucible.Simulator.SymSequence: tailSymSequence :: IsExprBuilder sym => sym -> SymSequence sym a -> IO (PartExpr (Pred sym) (SymSequence sym a))
- Lang.Crucible.Simulator.SymSequence: traverseSymSequence :: forall m sym a b. MonadIO m => sym -> (a -> m b) -> SymSequence sym a -> m (SymSequence sym b)
+ Lang.Crucible.Simulator.SymSequence: traverseSymSequence :: MonadIO m => sym -> (a -> m b) -> SymSequence sym a -> m (SymSequence sym b)
- Lang.Crucible.Simulator.SymSequence: unconsSymSequence :: forall sym a. IsExprBuilder sym => sym -> (Pred sym -> a -> a -> IO a) -> SymSequence sym a -> IO (PartExpr (Pred sym) (a, SymSequence sym a))
+ Lang.Crucible.Simulator.SymSequence: unconsSymSequence :: IsExprBuilder sym => sym -> (Pred sym -> a -> a -> IO a) -> SymSequence sym a -> IO (PartExpr (Pred sym) (a, SymSequence sym a))
- Lang.Crucible.Syntax: (.*) :: (NumExpr e tp, IsExpr e) => e tp -> e tp -> e tp
+ Lang.Crucible.Syntax: (.*) :: NumExpr e tp => e tp -> e tp -> e tp
- Lang.Crucible.Syntax: (.+) :: (NumExpr e tp, IsExpr e) => e tp -> e tp -> e tp
+ Lang.Crucible.Syntax: (.+) :: NumExpr e tp => e tp -> e tp -> e tp
- Lang.Crucible.Syntax: (.-) :: (NumExpr e tp, IsExpr e) => e tp -> e tp -> e tp
+ Lang.Crucible.Syntax: (.-) :: NumExpr e tp => e tp -> e tp -> e tp
- Lang.Crucible.Syntax: (./=) :: (EqExpr e tp, IsExpr e) => e tp -> e tp -> e BoolType
+ Lang.Crucible.Syntax: (./=) :: EqExpr e tp => e tp -> e tp -> e BoolType
- Lang.Crucible.Syntax: (.<) :: (OrdExpr e tp, IsExpr e) => e tp -> e tp -> e BoolType
+ Lang.Crucible.Syntax: (.<) :: OrdExpr e tp => e tp -> e tp -> e BoolType
- Lang.Crucible.Syntax: (.<=) :: (OrdExpr e tp, IsExpr e) => e tp -> e tp -> e BoolType
+ Lang.Crucible.Syntax: (.<=) :: OrdExpr e tp => e tp -> e tp -> e BoolType
- Lang.Crucible.Syntax: (.==) :: (EqExpr e tp, IsExpr e) => e tp -> e tp -> e BoolType
+ Lang.Crucible.Syntax: (.==) :: EqExpr e tp => e tp -> e tp -> e BoolType
- Lang.Crucible.Syntax: (.>) :: (OrdExpr e tp, IsExpr e) => e tp -> e tp -> e BoolType
+ Lang.Crucible.Syntax: (.>) :: OrdExpr e tp => e tp -> e tp -> e BoolType
- Lang.Crucible.Syntax: (.>=) :: (OrdExpr e tp, IsExpr e) => e tp -> e tp -> e BoolType
+ Lang.Crucible.Syntax: (.>=) :: OrdExpr e tp => e tp -> e tp -> e BoolType
- Lang.Crucible.Syntax: app :: IsExpr e => App (ExprExt e) e tp -> e tp
+ Lang.Crucible.Syntax: app :: forall (tp :: CrucibleType). IsExpr e => App (ExprExt e) e tp -> e tp
- Lang.Crucible.Syntax: asApp :: IsExpr e => e tp -> Maybe (App (ExprExt e) e tp)
+ Lang.Crucible.Syntax: asApp :: forall (tp :: CrucibleType). IsExpr e => e tp -> Maybe (App (ExprExt e) e tp)
- Lang.Crucible.Syntax: asEapp :: IsExpr e => e tp -> Maybe (ExprExtension (ExprExt e) e tp)
+ Lang.Crucible.Syntax: asEapp :: forall e (tp :: CrucibleType). IsExpr e => e tp -> Maybe (ExprExtension (ExprExt e) e tp)
- Lang.Crucible.Syntax: bigEndianLoad :: (IsExpr expr, 1 <= addrWidth, 1 <= valWidth, 1 <= cellWidth) => NatRepr addrWidth -> NatRepr cellWidth -> NatRepr valWidth -> Int -> expr (BVType addrWidth) -> expr (WordMapType addrWidth (BaseBVType cellWidth)) -> expr (BVType valWidth)
+ Lang.Crucible.Syntax: bigEndianLoad :: forall expr (addrWidth :: Natural) (valWidth :: Natural) (cellWidth :: Natural). (IsExpr expr, 1 <= addrWidth, 1 <= valWidth, 1 <= cellWidth) => NatRepr addrWidth -> NatRepr cellWidth -> NatRepr valWidth -> Int -> expr (BVType addrWidth) -> expr (WordMapType addrWidth (BaseBVType cellWidth)) -> expr (BVType valWidth)
- Lang.Crucible.Syntax: bigEndianLoadDef :: (IsExpr expr, 1 <= addrWidth, 1 <= valWidth, 1 <= cellWidth) => NatRepr addrWidth -> NatRepr cellWidth -> NatRepr valWidth -> Int -> expr (BVType addrWidth) -> expr (WordMapType addrWidth (BaseBVType cellWidth)) -> expr (BVType cellWidth) -> expr (BVType valWidth)
+ Lang.Crucible.Syntax: bigEndianLoadDef :: forall expr (addrWidth :: Natural) (valWidth :: Natural) (cellWidth :: Natural). (IsExpr expr, 1 <= addrWidth, 1 <= valWidth, 1 <= cellWidth) => NatRepr addrWidth -> NatRepr cellWidth -> NatRepr valWidth -> Int -> expr (BVType addrWidth) -> expr (WordMapType addrWidth (BaseBVType cellWidth)) -> expr (BVType cellWidth) -> expr (BVType valWidth)
- Lang.Crucible.Syntax: bigEndianStore :: (IsExpr expr, 1 <= addrWidth, 1 <= valWidth, 1 <= cellWidth) => NatRepr addrWidth -> NatRepr cellWidth -> NatRepr valWidth -> Int -> expr (BVType addrWidth) -> expr (BVType valWidth) -> expr (WordMapType addrWidth (BaseBVType cellWidth)) -> expr (WordMapType addrWidth (BaseBVType cellWidth))
+ Lang.Crucible.Syntax: bigEndianStore :: forall expr (addrWidth :: Natural) (valWidth :: Natural) (cellWidth :: Natural). (IsExpr expr, 1 <= addrWidth, 1 <= valWidth, 1 <= cellWidth) => NatRepr addrWidth -> NatRepr cellWidth -> NatRepr valWidth -> Int -> expr (BVType addrWidth) -> expr (BVType valWidth) -> expr (WordMapType addrWidth (BaseBVType cellWidth)) -> expr (WordMapType addrWidth (BaseBVType cellWidth))
- Lang.Crucible.Syntax: class ConvertableToNat e tp
+ Lang.Crucible.Syntax: class ConvertableToNat (e :: CrucibleType -> Type) (tp :: CrucibleType)
- Lang.Crucible.Syntax: class EqExpr e tp
+ Lang.Crucible.Syntax: class EqExpr (e :: CrucibleType -> Type) (tp :: CrucibleType)
- Lang.Crucible.Syntax: class IsExpr e where {
+ Lang.Crucible.Syntax: class IsExpr (e :: CrucibleType -> Type) where {
- Lang.Crucible.Syntax: class LitExpr e tp ty | tp -> ty
+ Lang.Crucible.Syntax: class LitExpr (e :: CrucibleType -> Type) (tp :: CrucibleType) ty | tp -> ty
- Lang.Crucible.Syntax: class NumExpr e tp
+ Lang.Crucible.Syntax: class NumExpr (e :: CrucibleType -> Type) (tp :: CrucibleType)
- Lang.Crucible.Syntax: class EqExpr e tp => OrdExpr e tp
+ Lang.Crucible.Syntax: class EqExpr e tp => OrdExpr (e :: CrucibleType -> Type) (tp :: CrucibleType)
- Lang.Crucible.Syntax: closure :: (IsExpr e, KnownRepr TypeRepr tp, KnownRepr TypeRepr ret, KnownCtx TypeRepr args) => e (FunctionHandleType (args ::> tp) ret) -> e tp -> e (FunctionHandleType args ret)
+ Lang.Crucible.Syntax: closure :: forall e (tp :: CrucibleType) (ret :: CrucibleType) (args :: Ctx CrucibleType). (IsExpr e, KnownRepr TypeRepr tp, KnownRepr TypeRepr ret, KnownCtx TypeRepr args) => e (FunctionHandleType (args ::> tp) ret) -> e tp -> e (FunctionHandleType args ret)
- Lang.Crucible.Syntax: concatExprs :: forall w a expr. (IsExpr expr, 1 <= w) => NatRepr w -> [expr (BVType w)] -> (forall w'. 1 <= w' => NatRepr w' -> expr (BVType w') -> a) -> a
+ Lang.Crucible.Syntax: concatExprs :: forall (w :: Natural) a expr. (IsExpr expr, 1 <= w) => NatRepr w -> [expr (BVType w)] -> (forall (w' :: Natural). 1 <= w' => NatRepr w' -> expr (BVType w') -> a) -> a
- Lang.Crucible.Syntax: eapp :: IsExpr e => ExprExtension (ExprExt e) e tp -> e tp
+ Lang.Crucible.Syntax: eapp :: forall e (tp :: CrucibleType). IsExpr e => ExprExtension (ExprExt e) e tp -> e tp
- Lang.Crucible.Syntax: emptyIdentValueMap :: KnownRepr TypeRepr tp => IsExpr e => e (StringMapType tp)
+ Lang.Crucible.Syntax: emptyIdentValueMap :: forall (tp :: CrucibleType) e. (KnownRepr TypeRepr tp, IsExpr e) => e (StringMapType tp)
- Lang.Crucible.Syntax: exprType :: IsExpr e => e tp -> TypeRepr tp
+ Lang.Crucible.Syntax: exprType :: forall (tp :: CrucibleType). IsExpr e => e tp -> TypeRepr tp
- Lang.Crucible.Syntax: getStruct :: IsExpr e => Index ctx tp -> e (StructType ctx) -> e tp
+ Lang.Crucible.Syntax: getStruct :: forall e (ctx :: Ctx CrucibleType) (tp :: CrucibleType). IsExpr e => Index ctx tp -> e (StructType ctx) -> e tp
- Lang.Crucible.Syntax: justValue :: (IsExpr e, KnownRepr TypeRepr tp) => e tp -> e (MaybeType tp)
+ Lang.Crucible.Syntax: justValue :: forall e (tp :: CrucibleType). (IsExpr e, KnownRepr TypeRepr tp) => e tp -> e (MaybeType tp)
- Lang.Crucible.Syntax: litExpr :: (LitExpr e tp ty, IsExpr e) => ty -> e tp
+ Lang.Crucible.Syntax: litExpr :: LitExpr e tp ty => ty -> e tp
- Lang.Crucible.Syntax: littleEndianLoad :: (IsExpr expr, 1 <= addrWidth, 1 <= valWidth, 1 <= cellWidth) => NatRepr addrWidth -> NatRepr cellWidth -> NatRepr valWidth -> Int -> expr (BVType addrWidth) -> expr (WordMapType addrWidth (BaseBVType cellWidth)) -> expr (BVType valWidth)
+ Lang.Crucible.Syntax: littleEndianLoad :: forall expr (addrWidth :: Natural) (valWidth :: Natural) (cellWidth :: Natural). (IsExpr expr, 1 <= addrWidth, 1 <= valWidth, 1 <= cellWidth) => NatRepr addrWidth -> NatRepr cellWidth -> NatRepr valWidth -> Int -> expr (BVType addrWidth) -> expr (WordMapType addrWidth (BaseBVType cellWidth)) -> expr (BVType valWidth)
- Lang.Crucible.Syntax: littleEndianLoadDef :: (IsExpr expr, 1 <= addrWidth, 1 <= valWidth, 1 <= cellWidth) => NatRepr addrWidth -> NatRepr cellWidth -> NatRepr valWidth -> Int -> expr (BVType addrWidth) -> expr (WordMapType addrWidth (BaseBVType cellWidth)) -> expr (BVType cellWidth) -> expr (BVType valWidth)
+ Lang.Crucible.Syntax: littleEndianLoadDef :: forall expr (addrWidth :: Natural) (valWidth :: Natural) (cellWidth :: Natural). (IsExpr expr, 1 <= addrWidth, 1 <= valWidth, 1 <= cellWidth) => NatRepr addrWidth -> NatRepr cellWidth -> NatRepr valWidth -> Int -> expr (BVType addrWidth) -> expr (WordMapType addrWidth (BaseBVType cellWidth)) -> expr (BVType cellWidth) -> expr (BVType valWidth)
- Lang.Crucible.Syntax: littleEndianStore :: (IsExpr expr, 1 <= addrWidth, 1 <= valWidth, 1 <= cellWidth) => NatRepr addrWidth -> NatRepr cellWidth -> NatRepr valWidth -> Int -> expr (BVType addrWidth) -> expr (BVType valWidth) -> expr (WordMapType addrWidth (BaseBVType cellWidth)) -> expr (WordMapType addrWidth (BaseBVType cellWidth))
+ Lang.Crucible.Syntax: littleEndianStore :: forall expr (addrWidth :: Natural) (valWidth :: Natural) (cellWidth :: Natural). (IsExpr expr, 1 <= addrWidth, 1 <= valWidth, 1 <= cellWidth) => NatRepr addrWidth -> NatRepr cellWidth -> NatRepr valWidth -> Int -> expr (BVType addrWidth) -> expr (BVType valWidth) -> expr (WordMapType addrWidth (BaseBVType cellWidth)) -> expr (WordMapType addrWidth (BaseBVType cellWidth))
- Lang.Crucible.Syntax: mkStruct :: IsExpr e => CtxRepr ctx -> Assignment e ctx -> e (StructType ctx)
+ Lang.Crucible.Syntax: mkStruct :: forall e (ctx :: Ctx CrucibleType). IsExpr e => CtxRepr ctx -> Assignment e ctx -> e (StructType ctx)
- Lang.Crucible.Syntax: nothingValue :: (IsExpr e, KnownRepr TypeRepr tp) => e (MaybeType tp)
+ Lang.Crucible.Syntax: nothingValue :: forall e (tp :: CrucibleType). (IsExpr e, KnownRepr TypeRepr tp) => e (MaybeType tp)
- Lang.Crucible.Syntax: setIdentValue :: (IsExpr e, KnownRepr TypeRepr tp) => e (StringMapType tp) -> Text -> e (MaybeType tp) -> e (StringMapType tp)
+ Lang.Crucible.Syntax: setIdentValue :: forall e (tp :: CrucibleType). (IsExpr e, KnownRepr TypeRepr tp) => e (StringMapType tp) -> Text -> e (MaybeType tp) -> e (StringMapType tp)
- Lang.Crucible.Syntax: setStruct :: IsExpr e => CtxRepr ctx -> e (StructType ctx) -> Index ctx tp -> e tp -> e (StructType ctx)
+ Lang.Crucible.Syntax: setStruct :: forall e (ctx :: Ctx CrucibleType) (tp :: CrucibleType). IsExpr e => CtxRepr ctx -> e (StructType ctx) -> Index ctx tp -> e tp -> e (StructType ctx)
- Lang.Crucible.Syntax: toNat :: (ConvertableToNat e tp, IsExpr e) => e tp -> e NatType
+ Lang.Crucible.Syntax: toNat :: ConvertableToNat e tp => e tp -> e NatType
- Lang.Crucible.Syntax: type ExprExt e :: Type;
+ Lang.Crucible.Syntax: type ExprExt (e :: CrucibleType -> Type);
- Lang.Crucible.Syntax: vecReplicate :: (IsExpr e, KnownRepr TypeRepr tp) => e NatType -> e tp -> e (VectorType tp)
+ Lang.Crucible.Syntax: vecReplicate :: forall e (tp :: CrucibleType). (IsExpr e, KnownRepr TypeRepr tp) => e NatType -> e tp -> e (VectorType tp)
- Lang.Crucible.Syntax: vectorGetEntry :: (IsExpr e, KnownRepr TypeRepr tp) => e (VectorType tp) -> e NatType -> e tp
+ Lang.Crucible.Syntax: vectorGetEntry :: forall e (tp :: CrucibleType). (IsExpr e, KnownRepr TypeRepr tp) => e (VectorType tp) -> e NatType -> e tp
- Lang.Crucible.Syntax: vectorIsEmpty :: IsExpr e => e (VectorType tp) -> e BoolType
+ Lang.Crucible.Syntax: vectorIsEmpty :: forall e (tp :: CrucibleType). IsExpr e => e (VectorType tp) -> e BoolType
- Lang.Crucible.Syntax: vectorLit :: IsExpr e => TypeRepr tp -> Vector (e tp) -> e (VectorType tp)
+ Lang.Crucible.Syntax: vectorLit :: forall e (tp :: CrucibleType). IsExpr e => TypeRepr tp -> Vector (e tp) -> e (VectorType tp)
- Lang.Crucible.Syntax: vectorSetEntry :: (IsExpr e, KnownRepr TypeRepr tp) => e (VectorType tp) -> e NatType -> e tp -> e (VectorType tp)
+ Lang.Crucible.Syntax: vectorSetEntry :: forall e (tp :: CrucibleType). (IsExpr e, KnownRepr TypeRepr tp) => e (VectorType tp) -> e NatType -> e tp -> e (VectorType tp)
- Lang.Crucible.Syntax: vectorSize :: IsExpr e => e (VectorType tp) -> e NatType
+ Lang.Crucible.Syntax: vectorSize :: forall e (tp :: CrucibleType). IsExpr e => e (VectorType tp) -> e NatType
- Lang.Crucible.Types: [AnyRepr] :: TypeRepr AnyType
+ Lang.Crucible.Types: [AnyRepr] :: TypeRepr 'AnyType
- Lang.Crucible.Types: [AsBaseType] :: tp ~ BaseToType bt => BaseTypeRepr bt -> AsBaseType tp
+ Lang.Crucible.Types: [AsBaseType] :: forall (tp :: CrucibleType) (bt :: BaseType). tp ~ BaseToType bt => BaseTypeRepr bt -> AsBaseType tp
- Lang.Crucible.Types: [BVRepr] :: 1 <= n => !NatRepr n -> TypeRepr (BVType n)
+ Lang.Crucible.Types: [BVRepr] :: forall (n :: Natural). 1 <= n => !NatRepr n -> TypeRepr ('BaseToType (BaseBVType n))
- Lang.Crucible.Types: [BoolRepr] :: TypeRepr BoolType
+ Lang.Crucible.Types: [BoolRepr] :: TypeRepr ('BaseToType BaseBoolType)
- Lang.Crucible.Types: [CharRepr] :: TypeRepr CharType
+ Lang.Crucible.Types: [CharRepr] :: TypeRepr 'CharType
- Lang.Crucible.Types: [ComplexRealRepr] :: TypeRepr ComplexRealType
+ Lang.Crucible.Types: [ComplexRealRepr] :: TypeRepr ('BaseToType BaseComplexType)
- Lang.Crucible.Types: [FloatRepr] :: !FloatInfoRepr flt -> TypeRepr (FloatType flt)
+ Lang.Crucible.Types: [FloatRepr] :: forall (flt :: FloatInfo). !FloatInfoRepr flt -> TypeRepr ('FloatType flt)
- Lang.Crucible.Types: [FunctionHandleRepr] :: !CtxRepr ctx -> !TypeRepr ret -> TypeRepr (FunctionHandleType ctx ret)
+ Lang.Crucible.Types: [FunctionHandleRepr] :: forall (ctx :: Ctx CrucibleType) (ret :: CrucibleType). !CtxRepr ctx -> !TypeRepr ret -> TypeRepr ('FunctionHandleType ctx ret)
- Lang.Crucible.Types: [IEEEFloatRepr] :: !FloatPrecisionRepr ps -> TypeRepr (IEEEFloatType ps)
+ Lang.Crucible.Types: [IEEEFloatRepr] :: forall (ps :: FloatPrecision). !FloatPrecisionRepr ps -> TypeRepr ('BaseToType (BaseFloatType ps))
- Lang.Crucible.Types: [IntegerRepr] :: TypeRepr IntegerType
+ Lang.Crucible.Types: [IntegerRepr] :: TypeRepr ('BaseToType BaseIntegerType)
- Lang.Crucible.Types: [IntrinsicRepr] :: !SymbolRepr nm -> !CtxRepr ctx -> TypeRepr (IntrinsicType nm ctx)
+ Lang.Crucible.Types: [IntrinsicRepr] :: forall (nm :: Symbol) (ctx :: Ctx CrucibleType). !SymbolRepr nm -> !CtxRepr ctx -> TypeRepr ('IntrinsicType nm ctx)
- Lang.Crucible.Types: [MaybeRepr] :: !TypeRepr tp -> TypeRepr (MaybeType tp)
+ Lang.Crucible.Types: [MaybeRepr] :: forall (tp1 :: CrucibleType). !TypeRepr tp1 -> TypeRepr ('MaybeType tp1)
- Lang.Crucible.Types: [NatRepr] :: TypeRepr NatType
+ Lang.Crucible.Types: [NatRepr] :: TypeRepr 'NatType
- Lang.Crucible.Types: [NotBaseType] :: AsBaseType tp
+ Lang.Crucible.Types: [NotBaseType] :: forall (tp :: CrucibleType). AsBaseType tp
- Lang.Crucible.Types: [RealValRepr] :: TypeRepr RealValType
+ Lang.Crucible.Types: [RealValRepr] :: TypeRepr ('BaseToType BaseRealType)
- Lang.Crucible.Types: [RecursiveRepr] :: IsRecursiveType nm => SymbolRepr nm -> CtxRepr ctx -> TypeRepr (RecursiveType nm ctx)
+ Lang.Crucible.Types: [RecursiveRepr] :: forall (nm :: Symbol) (ctx :: Ctx CrucibleType). IsRecursiveType nm => SymbolRepr nm -> CtxRepr ctx -> TypeRepr ('RecursiveType nm ctx)
- Lang.Crucible.Types: [ReferenceRepr] :: !TypeRepr a -> TypeRepr (ReferenceType a)
+ Lang.Crucible.Types: [ReferenceRepr] :: forall (a :: CrucibleType). !TypeRepr a -> TypeRepr ('ReferenceType a)
- Lang.Crucible.Types: [SequenceRepr] :: !TypeRepr tp -> TypeRepr (SequenceType tp)
+ Lang.Crucible.Types: [SequenceRepr] :: forall (tp1 :: CrucibleType). !TypeRepr tp1 -> TypeRepr ('SequenceType tp1)
- Lang.Crucible.Types: [StringMapRepr] :: !TypeRepr tp -> TypeRepr (StringMapType tp)
+ Lang.Crucible.Types: [StringMapRepr] :: forall (tp1 :: CrucibleType). !TypeRepr tp1 -> TypeRepr ('StringMapType tp1)
- Lang.Crucible.Types: [StringRepr] :: StringInfoRepr si -> TypeRepr (StringType si)
+ Lang.Crucible.Types: [StringRepr] :: forall (si :: StringInfo). StringInfoRepr si -> TypeRepr ('BaseToType (BaseStringType si))
- Lang.Crucible.Types: [StructRepr] :: !CtxRepr ctx -> TypeRepr (StructType ctx)
+ Lang.Crucible.Types: [StructRepr] :: forall (ctx :: Ctx CrucibleType). !CtxRepr ctx -> TypeRepr ('StructType ctx)
- Lang.Crucible.Types: [SymbolicArrayRepr] :: !Assignment BaseTypeRepr (idx ::> tp) -> !BaseTypeRepr t -> TypeRepr (SymbolicArrayType (idx ::> tp) t)
+ Lang.Crucible.Types: [SymbolicArrayRepr] :: forall (idx :: Ctx BaseType) (tp1 :: BaseType) (t :: BaseType). !Assignment BaseTypeRepr (idx ::> tp1) -> !BaseTypeRepr t -> TypeRepr ('BaseToType (BaseArrayType (idx ::> tp1) t))
- Lang.Crucible.Types: [SymbolicStructRepr] :: Assignment BaseTypeRepr ctx -> TypeRepr (SymbolicStructType ctx)
+ Lang.Crucible.Types: [SymbolicStructRepr] :: forall (ctx :: Ctx BaseType). Assignment BaseTypeRepr ctx -> TypeRepr ('BaseToType (BaseStructType ctx))
- Lang.Crucible.Types: [UnitRepr] :: TypeRepr UnitType
+ Lang.Crucible.Types: [UnitRepr] :: TypeRepr 'UnitType
- Lang.Crucible.Types: [VariantRepr] :: !CtxRepr ctx -> TypeRepr (VariantType ctx)
+ Lang.Crucible.Types: [VariantRepr] :: forall (ctx :: Ctx CrucibleType). !CtxRepr ctx -> TypeRepr ('VariantType ctx)
- Lang.Crucible.Types: [VectorRepr] :: !TypeRepr tp -> TypeRepr (VectorType tp)
+ Lang.Crucible.Types: [VectorRepr] :: forall (tp1 :: CrucibleType). !TypeRepr tp1 -> TypeRepr ('VectorType tp1)
- Lang.Crucible.Types: [WordMapRepr] :: 1 <= n => !NatRepr n -> !BaseTypeRepr tp -> TypeRepr (WordMapType n tp)
+ Lang.Crucible.Types: [WordMapRepr] :: forall (n :: Natural) (tp1 :: BaseType). 1 <= n => !NatRepr n -> !BaseTypeRepr tp1 -> TypeRepr ('WordMapType n tp1)
- Lang.Crucible.Types: asBaseType :: TypeRepr tp -> AsBaseType tp
+ Lang.Crucible.Types: asBaseType :: forall (tp :: CrucibleType). TypeRepr tp -> AsBaseType tp
- Lang.Crucible.Types: baseToType :: BaseTypeRepr bt -> TypeRepr (BaseToType bt)
+ Lang.Crucible.Types: baseToType :: forall (bt :: BaseType). BaseTypeRepr bt -> TypeRepr (BaseToType bt)
- Lang.Crucible.Types: data AsBaseType tp
+ Lang.Crucible.Types: data AsBaseType (tp :: CrucibleType)
- Lang.Crucible.Types: pattern KnownBV :: forall n. (1 <= n, KnownNat n) => TypeRepr (BVType n)
+ Lang.Crucible.Types: pattern KnownBV :: forall (n :: Natural). (1 <= n, KnownNat n) => TypeRepr (BVType n)
- Lang.Crucible.Types: ppIntrinsicDefault :: SymbolRepr s -> CtxRepr ctx -> Doc ann
+ Lang.Crucible.Types: ppIntrinsicDefault :: forall (s :: Symbol) (ctx :: Ctx CrucibleType) ann. SymbolRepr s -> CtxRepr ctx -> Doc ann
- Lang.Crucible.Types: ppTypeRepr :: Monad f => (forall s ctx. SymbolRepr s -> CtxRepr ctx -> f (Doc ann)) -> TypeRepr tp -> f (Doc ann)
+ Lang.Crucible.Types: ppTypeRepr :: forall f ann (tp :: CrucibleType). Monad f => (forall (s :: Symbol) (ctx :: Ctx CrucibleType). () => SymbolRepr s -> CtxRepr ctx -> f (Doc ann)) -> TypeRepr tp -> f (Doc ann)
- Lang.Crucible.Types: type AnyType = -- | @:: 'CrucibleType'@. 'AnyType
+ Lang.Crucible.Types: type AnyType = 'AnyType
- Lang.Crucible.Types: type BVType w = -- | @:: 'Nat' -> 'CrucibleType'@. BaseToType (BaseBVType w)
+ Lang.Crucible.Types: type BVType (w :: Nat) = BaseToType BaseBVType w
- Lang.Crucible.Types: type BaseToType = -- | @:: 'BaseType' -> 'CrucibleType'@. 'BaseToType
+ Lang.Crucible.Types: type BaseToType = 'BaseToType
- Lang.Crucible.Types: type BoolType = -- | @:: 'CrucibleType'@. BaseToType BaseBoolType
+ Lang.Crucible.Types: type BoolType = BaseToType BaseBoolType
- Lang.Crucible.Types: type CharType = -- | @:: 'CrucibleType'@. 'CharType
+ Lang.Crucible.Types: type CharType = 'CharType
- Lang.Crucible.Types: type ComplexRealType = -- | @:: 'CrucibleType'@. BaseToType BaseComplexType
+ Lang.Crucible.Types: type ComplexRealType = BaseToType BaseComplexType
- Lang.Crucible.Types: type FloatType = -- | @:: 'FloatInfo' -> 'CrucibleType'@. 'FloatType
+ Lang.Crucible.Types: type FloatType = 'FloatType
- Lang.Crucible.Types: type FunctionHandleType = -- | @:: 'Ctx' 'CrucibleType' -> 'CrucibleType' -> 'CrucibleType'@. 'FunctionHandleType
+ Lang.Crucible.Types: type FunctionHandleType = 'FunctionHandleType
- Lang.Crucible.Types: type IEEEFloatType p = -- | @:: FloatPrecision -> CrucibleType@ BaseToType (BaseFloatType p)
+ Lang.Crucible.Types: type IEEEFloatType (p :: FloatPrecision) = BaseToType BaseFloatType p
- Lang.Crucible.Types: type IntegerType = -- | @:: 'CrucibleType'@. BaseToType BaseIntegerType
+ Lang.Crucible.Types: type IntegerType = BaseToType BaseIntegerType
- Lang.Crucible.Types: type IntrinsicType ctx = -- | @:: 'Symbol' -> 'Ctx' 'CrucibleType' -> 'CrucibleType'@. 'IntrinsicType ctx
+ Lang.Crucible.Types: type IntrinsicType (ctx :: Symbol) = 'IntrinsicType ctx
- Lang.Crucible.Types: type MaybeType = -- | @:: 'CrucibleType' -> 'CrucibleType'@. 'MaybeType
+ Lang.Crucible.Types: type MaybeType = 'MaybeType
- Lang.Crucible.Types: type NatType = -- | @:: 'CrucibleType'@. 'NatType
+ Lang.Crucible.Types: type NatType = 'NatType
- Lang.Crucible.Types: type RealValType = -- | @:: 'CrucibleType'@. BaseToType BaseRealType
+ Lang.Crucible.Types: type RealValType = BaseToType BaseRealType
- Lang.Crucible.Types: type RecursiveType = -- | @:: 'Symbol' -> 'Ctx' 'CrucibleType' -> 'CrucibleType'@. 'RecursiveType
+ Lang.Crucible.Types: type RecursiveType = 'RecursiveType
- Lang.Crucible.Types: type ReferenceType = -- | @:: 'CrucibleType' -> 'CrucibleType'@. 'ReferenceType
+ Lang.Crucible.Types: type ReferenceType = 'ReferenceType
- Lang.Crucible.Types: type SequenceType = -- | @:: 'CrucibleType' -> 'CrucibleType'@. 'SequenceType
+ Lang.Crucible.Types: type SequenceType = 'SequenceType
- Lang.Crucible.Types: type StringMapType = -- | @:: 'CrucibleType' -> 'CrucibleType'@. 'StringMapType
+ Lang.Crucible.Types: type StringMapType = 'StringMapType
- Lang.Crucible.Types: type StringType si = -- | @:: 'StringInfo' -> 'CrucibleType'@. BaseToType (BaseStringType si)
+ Lang.Crucible.Types: type StringType (si :: StringInfo) = BaseToType BaseStringType si
- Lang.Crucible.Types: type StructType = -- | @:: 'Ctx' 'CrucibleType' -> 'CrucibleType'@. 'StructType
+ Lang.Crucible.Types: type StructType = 'StructType
- Lang.Crucible.Types: type SymbolicArrayType idx xs = -- | @:: 'Ctx.Ctx' 'BaseType' -> 'BaseType' -> 'CrucibleType'@. BaseToType (BaseArrayType idx xs)
+ Lang.Crucible.Types: type SymbolicArrayType (idx :: Ctx BaseType) (xs :: BaseType) = BaseToType BaseArrayType idx xs
- Lang.Crucible.Types: type SymbolicStructType flds = -- | @:: 'Ctx.Ctx' 'BaseType' -> 'CrucibleType'@. BaseToType (BaseStructType flds)
+ Lang.Crucible.Types: type SymbolicStructType (flds :: Ctx BaseType) = BaseToType BaseStructType flds
- Lang.Crucible.Types: type UnitType = -- | @:: 'CrucibleType'@. 'UnitType
+ Lang.Crucible.Types: type UnitType = 'UnitType
- Lang.Crucible.Types: type UnrollType nm (ctx :: Ctx CrucibleType) :: CrucibleType;
+ Lang.Crucible.Types: type UnrollType (nm :: Symbol) (ctx :: Ctx CrucibleType) :: CrucibleType;
- Lang.Crucible.Types: type VariantType = -- | @:: 'Ctx' 'CrucibleType' -> 'CrucibleType'@. 'VariantType
+ Lang.Crucible.Types: type VariantType = 'VariantType
- Lang.Crucible.Types: type VectorType = -- | @:: 'CrucibleType' -> 'CrucibleType'@. 'VectorType
+ Lang.Crucible.Types: type VectorType = 'VectorType
- Lang.Crucible.Types: type WordMapType = -- | @:: 'Nat' -> 'BaseType' -> 'CrucibleType'@. 'WordMapType
+ Lang.Crucible.Types: type WordMapType = 'WordMapType
- Lang.Crucible.Types: unrollType :: IsRecursiveType nm => SymbolRepr nm -> CtxRepr ctx -> TypeRepr (UnrollType nm ctx)
+ Lang.Crucible.Types: unrollType :: forall (ctx :: Ctx CrucibleType). IsRecursiveType nm => SymbolRepr nm -> CtxRepr ctx -> TypeRepr (UnrollType nm ctx)
- Lang.Crucible.Utils.CoreRewrite: annotateCFGStmts :: TraverseExt ext => (forall cin cout. Some (BlockID blocks) -> Size cout -> Stmt ext cin cout -> Maybe (StmtSeq ext blocks UnitType cout)) -> (forall ctx'. Some (BlockID blocks) -> Size ctx' -> TermStmt blocks ret ctx' -> Maybe (StmtSeq ext blocks UnitType ctx')) -> CFG ext blocks ctx ret -> CFG ext blocks ctx ret
+ Lang.Crucible.Utils.CoreRewrite: annotateCFGStmts :: forall ext (blocks :: Ctx (Ctx CrucibleType)) (ret :: CrucibleType) (ctx :: Ctx CrucibleType). TraverseExt ext => (forall (cin :: Ctx CrucibleType) (cout :: Ctx CrucibleType). () => Some (BlockID blocks) -> Size cout -> Stmt ext cin cout -> Maybe (StmtSeq ext blocks UnitType cout)) -> (forall (ctx' :: Ctx CrucibleType). () => Some (BlockID blocks) -> Size ctx' -> TermStmt blocks ret ctx' -> Maybe (StmtSeq ext blocks UnitType ctx')) -> CFG ext blocks ctx ret -> CFG ext blocks ctx ret
- Lang.Crucible.Utils.MonadVerbosity: class (Applicative m, MonadIO m) => MonadVerbosity m
+ Lang.Crucible.Utils.MonadVerbosity: class (Applicative m, MonadIO m) => MonadVerbosity (m :: Type -> Type)
- Lang.Crucible.Utils.MonadVerbosity: withVerbosity :: Handle -> Int -> (forall m. MonadVerbosity m => m a) -> IO a
+ Lang.Crucible.Utils.MonadVerbosity: withVerbosity :: Handle -> Int -> (forall (m :: Type -> Type). MonadVerbosity m => m a) -> IO a
- Lang.Crucible.Utils.RegRewrite: addInternalStmt :: Stmt ext s -> Rewriter ext h s ret u ()
+ Lang.Crucible.Utils.RegRewrite: addInternalStmt :: forall ext s h (ret :: CrucibleType) u. Stmt ext s -> Rewriter ext h s ret u ()
- Lang.Crucible.Utils.RegRewrite: addStmt :: Posd (Stmt ext s) -> Rewriter ext h s ret u ()
+ Lang.Crucible.Utils.RegRewrite: addStmt :: forall ext s h (ret :: CrucibleType) u. Posd (Stmt ext s) -> Rewriter ext h s ret u ()
- Lang.Crucible.Utils.RegRewrite: annotateCFGStmts :: TraverseExt ext => u -> (forall s h. Posd (Stmt ext s) -> Rewriter ext h s ret u ()) -> (forall s h. Posd (TermStmt s ret) -> Rewriter ext h s ret u ()) -> SomeCFG ext init ret -> SomeCFG ext init ret
+ Lang.Crucible.Utils.RegRewrite: annotateCFGStmts :: forall ext u (ret :: CrucibleType) (init :: Ctx CrucibleType). TraverseExt ext => u -> (forall s h. () => Posd (Stmt ext s) -> Rewriter ext h s ret u ()) -> (forall s h. () => Posd (TermStmt s ret) -> Rewriter ext h s ret u ()) -> SomeCFG ext init ret -> SomeCFG ext init ret
- Lang.Crucible.Utils.RegRewrite: freshAtom :: TypeRepr tp -> Rewriter ext h s ret u (Atom s tp)
+ Lang.Crucible.Utils.RegRewrite: freshAtom :: forall (tp :: CrucibleType) ext h s (ret :: CrucibleType) u. TypeRepr tp -> Rewriter ext h s ret u (Atom s tp)
- Lang.Crucible.Utils.RegRewrite: ifte :: Atom s BoolType -> Rewriter ext h s ret u () -> Rewriter ext h s ret u () -> Rewriter ext h s ret u ()
+ Lang.Crucible.Utils.RegRewrite: ifte :: forall s ext h (ret :: CrucibleType) u. Atom s BoolType -> Rewriter ext h s ret u () -> Rewriter ext h s ret u () -> Rewriter ext h s ret u ()
- Lang.Crucible.Utils.StateContT: StateContT :: ((a -> s -> m r) -> s -> m r) -> StateContT s r m a
+ Lang.Crucible.Utils.StateContT: StateContT :: ((a -> s -> m r) -> s -> m r) -> StateContT s r (m :: Type -> Type) a
- Lang.Crucible.Utils.StateContT: [runStateContT] :: StateContT s r m a -> (a -> s -> m r) -> s -> m r
+ Lang.Crucible.Utils.StateContT: [runStateContT] :: StateContT s r (m :: Type -> Type) a -> (a -> s -> m r) -> s -> m r
- Lang.Crucible.Utils.StateContT: newtype StateContT s r m a
+ Lang.Crucible.Utils.StateContT: newtype StateContT s r (m :: Type -> Type) a
- Lang.Crucible.Vector: fromBV :: forall f w n. (1 <= w, 1 <= n, IsExpr f) => Endian -> NatRepr n -> NatRepr w -> f (BVType (n * w)) -> Vector n (f (BVType w))
+ Lang.Crucible.Vector: fromBV :: forall f (w :: Natural) (n :: Natural). (1 <= w, 1 <= n, IsExpr f) => Endian -> NatRepr n -> NatRepr w -> f (BVType (n * w)) -> Vector n (f (BVType w))
- Lang.Crucible.Vector: joinVecBV :: (IsExpr f, 1 <= i, 1 <= w, 1 <= n) => Endian -> NatRepr w -> NatRepr i -> Vector (n * i) (f (BVType w)) -> Vector n (f (BVType (i * w)))
+ Lang.Crucible.Vector: joinVecBV :: forall f (i :: Natural) (w :: Natural) (n :: Natural). (IsExpr f, 1 <= i, 1 <= w, 1 <= n) => Endian -> NatRepr w -> NatRepr i -> Vector (n * i) (f (BVType w)) -> Vector n (f (BVType (i * w)))
- Lang.Crucible.Vector: splitVecBV :: (IsExpr f, 1 <= i, 1 <= w) => Endian -> NatRepr i -> NatRepr w -> Vector n (f (BVType (i * w))) -> Vector (n * i) (f (BVType w))
+ Lang.Crucible.Vector: splitVecBV :: forall f (i :: Natural) (w :: Natural) (n :: Natural). (IsExpr f, 1 <= i, 1 <= w) => Endian -> NatRepr i -> NatRepr w -> Vector n (f (BVType (i * w))) -> Vector (n * i) (f (BVType w))
- Lang.Crucible.Vector: toBV :: forall f n w. (1 <= w, IsExpr f) => Endian -> NatRepr w -> Vector n (f (BVType w)) -> f (BVType (n * w))
+ Lang.Crucible.Vector: toBV :: forall f (n :: Natural) (w :: Natural). (1 <= w, IsExpr f) => Endian -> NatRepr w -> Vector n (f (BVType w)) -> f (BVType (n * w))
Files
- CHANGELOG.md +17/−0
- crucible.cabal +7/−3
- src/Lang/Crucible/Backend.hs +27/−2
- src/Lang/Crucible/Backend/AssumptionStack.hs +16/−15
- src/Lang/Crucible/Backend/Assumptions.hs +67/−4
- src/Lang/Crucible/Backend/Goals.hs +32/−0
- src/Lang/Crucible/Backend/Online.hs +219/−236
- src/Lang/Crucible/Backend/ProofGoals.hs +96/−4
- src/Lang/Crucible/Backend/Simple.hs +9/−6
- src/Lang/Crucible/Concretize.hs +273/−28
- src/Lang/Crucible/Simulator/BoundedExec.hs +44/−35
- src/Lang/Crucible/Simulator/BoundedRecursion.hs +40/−30
- src/Lang/Crucible/Simulator/CallFrame.hs +7/−1
- src/Lang/Crucible/Simulator/ExecutionTree.hs +358/−61
- src/Lang/Crucible/Simulator/Operations.hs +2/−2
- src/Lang/Crucible/Simulator/OverrideSim.hs +36/−5
- src/Lang/Crucible/Simulator/PathSatisfiability.hs +12/−6
- src/Lang/Crucible/Simulator/RecordAndReplay.hs +365/−0
- src/Lang/Crucible/Simulator/RegValue.hs +40/−0
- src/Lang/Crucible/Utils/BitSet.hs +1/−1
- test/helpers/Main.hs +8/−4
- test/helpers/SymSequence.hs +300/−0
CHANGELOG.md view
@@ -1,3 +1,20 @@+# 0.8.0 -- 2025-11-09++* Add `setExecResultContext`, `setExecStateContext`+* Add `Lang.Crucible.Simulator.RecordAndReplay`, a module with two new execution+ features for recording and replaying control-flow traces.+* Add a `GlobalPair` argument to `AbortedExit`.+* Add new helpers for extracting `SymGlobalState`s: `exec{Result,State}Globals`.+* Add `typedOverride` for constructing `TypedOverride`s with statically-known+ signatures.+* Add `bindTypedOverride` for binding `TypedOverride`s to `FnHandle`s.+* Add `FunctorF`, `FoldableF`, and `TraversableF` instances for `CrucibleEvent`,+ `CrucibleAssumption`, and `CrucibleAssumptions`.+* Add `gcAddTopLevelAssume`, for making top-level assumptions.+* Rename functions in `Lang.Crucible.Concretize` to match What4's conventions.+ In particular, rename `concRegValue` to `groundRegValue`, `concRegEntry` to+ `groundRegEntry`, and `concRegMap` to `groundRegMap`.+ # 0.7.2 -- 2025-03-21 * Add support for Bitwuzla as an online SMT solver backend.
crucible.cabal view
@@ -1,6 +1,6 @@ Cabal-version: 2.2 Name: crucible-Version: 0.7.2+Version: 0.8.0.0 Author: Galois Inc. Maintainer: rscott@galois.com, kquick@galois.com, langston@galois.com Copyright: (c) Galois, Inc 2014-2022@@ -45,7 +45,7 @@ import: bldflags build-depends: async,- base >= 4.13 && < 4.20,+ base >= 4.13 && < 4.21, bimap, bv-sized >= 1.0.0 && < 1.1, containers >= 0.5.9.0,@@ -117,6 +117,7 @@ Lang.Crucible.Simulator.PathSplitting Lang.Crucible.Simulator.PositionTracking Lang.Crucible.Simulator.Profiling+ Lang.Crucible.Simulator.RecordAndReplay Lang.Crucible.Simulator.RegMap Lang.Crucible.Simulator.RegValue Lang.Crucible.Simulator.SimError@@ -163,15 +164,18 @@ import: bldflags type: exitcode-stdio-1.0 hs-source-dirs: test/helpers--- other-modules:+ other-modules:+ SymSequence main-is: Main.hs build-depends: base, hspec >= 2.5, crucible,+ hedgehog, lens, panic >= 0.3, parameterized-utils, tasty >= 0.10, tasty-hspec >= 1.1,+ tasty-hedgehog >= 1.2, tasty-hunit, what4
src/Lang/Crucible/Backend.hs view
@@ -4,8 +4,8 @@ License : BSD3 Maintainer : Joe Hendrix <jhendrix@galois.com> -This module provides an interface that symbolic backends must provide-for interacting with the symbolic simulator.+This module provides the interface that the symbolic simulator uses when+interacting with symbolic backends (i.e., SMT solvers). Compared to the solver connections provided by What4, Crucible backends provide a facility for managing an /assumption stack/ (see 'AS.AssumptionStack'). Note@@ -81,6 +81,7 @@ , ppProofObligation , backendOptions , assertThenAssumeConfigOption+ , ppAssumptionState ) where import Control.Exception(Exception(..), throwIO)@@ -110,6 +111,7 @@ import qualified Lang.Crucible.Backend.AssumptionStack as AS import qualified Lang.Crucible.Backend.ProofGoals as PG import Lang.Crucible.Simulator.SimError+import Lang.Crucible.Backend.ProofGoals (ppGoalCollector) type Assertion sym = LabeledPred (Pred sym) SimError type ProofObligation sym = AS.ProofGoal (Assumptions sym) (Assertion sym)@@ -311,6 +313,11 @@ resetAssumptionState :: bak -> IO () resetAssumptionState bak = restoreAssumptionState bak PG.emptyGoalCollector + -- | Get the state of the backend+ --+ -- In contrast to 'saveAssumptionState', this also includes the goals.+ getBackendState :: bak -> IO (AssumptionState sym)+ assertThenAssumeConfigOption :: ConfigOption BaseBoolType assertThenAssumeConfigOption = configOption knownRepr "assertThenAssume" @@ -490,3 +497,21 @@ ppGl = PP.indent 2 $ PP.vsep [ppSimError (gl^.labeledPredMsg), printSymExpr (gl^.labeledPred)]++-- | Pretty-printer for 'AssumptionState'.+ppAssumptionState ::+ IsExpr (SymExpr sym) =>+ proxy sym ->+ AssumptionState sym ->+ PP.Doc ann+ppAssumptionState _proxy = ppGoalCollector ppAssumptions ppPred+ where+ ppPred (LabeledPred p simErr) =+ PP.vcat+ [ "Labeled predicate:"+ , PP.indent 2 $+ PP.vcat+ [ printSymExpr p+ , ppSimError simErr+ ]+ ]
src/Lang/Crucible/Backend/AssumptionStack.hs view
@@ -4,17 +4,16 @@ License : BSD3 Maintainer : Rob Dockins <rdockins@galois.com> -This module provides management support for keeping track-of a context of logical assumptions. The API provided here-is similar to the interactive mode of an SMT solver. Logical-conditions can be assumed into the current context, and bundles-of assumptions are organized into frames which are pushed and-popped by the user to manage the state.+This module provides management support for keeping track of a context of+logical assumptions and proof obligations that arise from symbolic simulation.+The API provided here is similar to the interactive mode of an SMT solver.+Logical conditions can be assumed into the current context, and conjunctions+of assumptions are organized into frames which are pushed and popped by the+simulator to manage the state. -Additionally, proof goals can be asserted to the system. These will be-turned into complete logical statements by assuming the current context-and be stashed in a collection of remembered goals for later dispatch to-solvers.+Additionally, proof goals can be asserted to the system. These will be turned+into complete logical statements by assuming the current context and will be+stashed in a collection of remembered goals for later dispatch to SMT solvers. -} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-}@@ -70,11 +69,13 @@ , assumeFrameCond :: asmp } --- | An assumption stack is a data structure for tracking--- logical assumptions and proof obligations. Assumptions--- can be added to the current stack frame, and stack frames--- may be pushed (to remember a previous state) or popped--- to restore a previous state.+-- | An assumption stack is a data structure for tracking logical assumptions+-- and proof obligations that arise from symbolic simulation. Assumptions+-- can be added to the current stack frame, and stack frames may be pushed (to+-- remember a previous state) or popped (to restore a previous state).+--+-- The main use of 'AssumptionStack' is as the state of the simple or online+-- backends. data AssumptionStack asmp ast = AssumptionStack { assumeStackGen :: IO FrameIdentifier
src/Lang/Crucible/Backend/Assumptions.hs view
@@ -41,13 +41,17 @@ , assumptionsPred , flattenAssumptions , assumptionsTopLevelLocs+ , ppAssumptions'+ , ppAssumptions ) where import Control.Lens (Traversal, folded) import Data.Kind (Type)+import qualified Data.Foldable as F import Data.Functor.Identity import Data.Functor.Const+import qualified Data.Parameterized.TraversableF as TF import qualified Data.Sequence as Seq import Data.Sequence (Seq) import qualified Prettyprinter as PP@@ -76,6 +80,13 @@ -- ^ An assumption justified by a proof of the impossibility of -- a certain simulator error. +instance TF.FunctorF CrucibleAssumption where+ fmapF = TF.fmapFDefault+instance TF.FoldableF CrucibleAssumption where+ foldMapF = TF.foldMapFDefault+instance TF.TraversableF CrucibleAssumption where+ traverseF = traverseAssumption+ -- | This type describes events we can track during program execution. data CrucibleEvent (e :: BaseType -> Type) where -- | This event describes the creation of a symbolic variable.@@ -91,13 +102,24 @@ ProgramLoc -> CrucibleEvent e +instance TF.FunctorF CrucibleEvent where+ fmapF = TF.fmapFDefault+instance TF.FoldableF CrucibleEvent where+ foldMapF = TF.foldMapFDefault+instance TF.TraversableF CrucibleEvent where+ traverseF = traverseEvent+ -- | Pretty print an event-ppEvent :: IsExpr e => CrucibleEvent e -> PP.Doc ann-ppEvent (CreateVariableEvent loc nm _tpr v) =- "create var" PP.<+> PP.pretty nm PP.<+> "=" PP.<+> printSymExpr v PP.<+> "at" PP.<+> PP.pretty (plSourceLoc loc)-ppEvent (LocationReachedEvent loc) =+ppEvent' :: (forall t. e t -> PP.Doc ann) -> CrucibleEvent e -> PP.Doc ann+ppEvent' ppExp (CreateVariableEvent loc nm _tpr v) =+ "create var" PP.<+> PP.pretty nm PP.<+> "=" PP.<+> ppExp v PP.<+> "at" PP.<+> PP.pretty (plSourceLoc loc)+ppEvent' _ppExp (LocationReachedEvent loc) = "reached" PP.<+> PP.pretty (plSourceLoc loc) PP.<+> "in" PP.<+> PP.pretty (plFunction loc) +-- | Pretty print an event+ppEvent :: IsExpr e => CrucibleEvent e -> PP.Doc ann+ppEvent = ppEvent' printSymExpr+ -- | Return the program location associated with an event eventLoc :: CrucibleEvent e -> ProgramLoc eventLoc (CreateVariableEvent loc _ _ _) = loc@@ -152,6 +174,21 @@ instance Monoid (CrucibleAssumptions e) where mempty = ManyAssumptions mempty +instance TF.FunctorF CrucibleAssumptions where+ fmapF = TF.fmapFDefault+instance TF.FoldableF CrucibleAssumptions where+ foldMapF = TF.foldMapFDefault+instance TF.TraversableF CrucibleAssumptions where+ traverseF f = \case+ SingleAssumption a ->+ SingleAssumption <$> TF.traverseF f a+ SingleEvent e ->+ SingleEvent <$> TF.traverseF f e+ ManyAssumptions xs ->+ ManyAssumptions <$> traverse (TF.traverseF f) xs+ MergeAssumptions c xs ys ->+ MergeAssumptions <$> f c <*> TF.traverseF f xs <*> TF.traverseF f ys+ singleAssumption :: CrucibleAssumption e -> CrucibleAssumptions e singleAssumption x = SingleAssumption x @@ -239,6 +276,8 @@ ppAssumption :: (forall tp. e tp -> PP.Doc ann) -> CrucibleAssumption e -> PP.Doc ann ppAssumption ppDoc e =+ -- TODO(lb): These should really all be `align`ed, but that breaks a bunch+ -- of tests. case e of GenericAssumption l msg p -> PP.vsep [ ppLocated l (PP.pretty msg)@@ -266,3 +305,27 @@ ppLoc :: ProgramLoc -> PP.Doc ann ppLoc l = PP.pretty (plSourceLoc l)++-- | Pretty-print 'CrucibleAssumptions'.+ppAssumptions' ::+ -- | How to print expressions. If @'IsExpr' e@ holds, then see 'ppAssumptions'+ -- for a version that uses 'printSymExpr'.+ (forall tp. e tp -> PP.Doc ann) ->+ CrucibleAssumptions e ->+ PP.Doc ann+ppAssumptions' ppExp =+ \case+ SingleAssumption asmp -> ppAssumption ppExp asmp+ SingleEvent e -> ppEvent' ppExp e+ ManyAssumptions asmps -> PP.list (map (ppAssumptions' ppExp) (F.toList asmps))+ MergeAssumptions b thn els ->+ PP.align $+ PP.vcat+ [ "if " <> PP.align (ppExp b)+ , "then " <> PP.align (ppAssumptions' ppExp thn)+ , "else " <> PP.align (ppAssumptions' ppExp els)+ ]++-- | @'ppAssumptions' = `ppAssumptions'` 'printSymExpr'@+ppAssumptions :: IsExpr e => CrucibleAssumptions e -> PP.Doc ann+ppAssumptions = ppAssumptions' printSymExpr
src/Lang/Crucible/Backend/Goals.hs view
@@ -7,12 +7,14 @@ proof obligations, and the current state of assumptions. -} +{-# LANGUAGE LambdaCase #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE TupleSections #-} module Lang.Crucible.Backend.Goals ( ProofGoal(..) , Goals(..)+ , ppGoals , goalsToList , assuming , proveAll@@ -29,6 +31,7 @@ import Data.Functor.Const (Const(..)) import Data.Sequence (Seq) import qualified Data.Sequence as Seq+import qualified Prettyprinter as PP -- | A proof goal consists of a collection of assumptions -- that were in scope when an assertion was made, together@@ -52,6 +55,35 @@ -- | A conjunction of two goals. | ProveConj !(Goals asmp goal) !(Goals asmp goal) deriving Show++-- | Intended for debugging, this is not generally a user-facing datatype.+ppGoals ::+ (asmp -> PP.Doc ann) ->+ (goal -> PP.Doc ann) ->+ Goals asmp goal ->+ PP.Doc ann+ppGoals ppAsmp ppGoal =+ \case+ Assuming asmp gls ->+ PP.align $+ PP.vcat+ [ PP.pretty "Assuming:"+ , PP.indent 2 (ppAsmp asmp)+ , PP.pretty "Prove:"+ , PP.indent 2 (ppGoals ppAsmp ppGoal gls)+ ]+ Prove gl -> ppGoal gl+ ProveConj gls gls' ->+ PP.align $+ PP.vcat+ [ PP.pretty "Prove both:"+ , PP.indent 2 (ppGoals ppAsmp ppGoal gls)+ , PP.indent 2 (ppGoals ppAsmp ppGoal gls')+ ]++-- | Intended for debugging, this is not generally a user-facing datatype.+instance (PP.Pretty asmp, PP.Pretty goal) => PP.Pretty (Goals asmp goal) where+ pretty = ppGoals PP.pretty PP.pretty -- | Construct a goal that first assumes a collection of -- assumptions and then states a goal.
src/Lang/Crucible/Backend/Online.hs view
@@ -4,19 +4,26 @@ -- Description : A solver backend that maintains a persistent connection -- Copyright : (c) Galois, Inc 2015-2016 -- License : BSD3--- Maintainer : Joe Hendrix <jhendrix@galois.com>+-- Maintainer : Ryan Scott <rscott@galois.com>, Langston Barrett <langston@galois.com> -- Stability : provisional ----- The online backend maintains an open connection to an SMT solver--- that is used to prune unsatisfiable execution traces during simulation.--- At every symbolic branch point, the SMT solver is queried to determine--- if one or both symbolic branches are unsatisfiable.--- Only branches with satisfiable branch conditions are explored.+-- A solver backend ('IsSymBackend') that maintains an open connection to an+-- SMT solver (in contrast to "Lang.Crucible.Backend.Simple"). ----- The online backend also allows override definitions access to a--- persistent SMT solver connection. This can be useful for some--- kinds of algorithms that benefit from quickly performing many--- small solver queries in a tight interaction loop.+-- The primary intended use-case is to prune unsatisfiable execution+-- traces during simulation using the execution feature provided by+-- "Lang.Crucible.Simulator.PathSatisfiability". That execution feature is+-- parameterized over a function argument that can be instantiated with this+-- module's 'considerSatisfiability'.+--+-- The online backend also allows override definitions access to a persistent+-- SMT solver connection. This can be useful for some kinds of algorithms+-- that benefit from quickly performing many small solver queries in a tight+-- interaction loop.+--+-- The online backend is not currently used to dispatch proof obligations during+-- symbolic execution, see [GaloisInc/crucible#369, \"Interleave proof with+-- simulation\"](https://github.com/GaloisInc/crucible/issues/369). ------------------------------------------------------------------------ {-# LANGUAGE DeriveDataTypeable #-}@@ -27,9 +34,14 @@ {-# LANGUAGE LambdaCase #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE ScopedTypeVariables #-}+ module Lang.Crucible.Backend.Online- ( -- * OnlineBackend- OnlineBackend+ ( -- * Configuration options+ solverInteractionFile+ , enableOnlineBackend+ , onlineBackendOptions+ -- * OnlineBackend+ , OnlineBackend , withOnlineBackend , newOnlineBackend , checkSatisfiable@@ -39,13 +51,10 @@ , restoreSolverState , UnsatFeatures(..) , unsatFeaturesToProblemFeatures- -- ** Configuration options- , solverInteractionFile- , enableOnlineBackend- , onlineBackendOptions- -- ** Branch satisfiability+ -- * Branch satisfiability , BranchResult(..) , considerSatisfiability+ -- * Backends for different solvers -- ** Yices , YicesOnlineBackend , withYicesOnlineBackend@@ -69,7 +78,6 @@ , withSTPOnlineBackend ) where - import Control.Lens ( (^.) ) import Control.Monad import Control.Monad.Fix (mfix)@@ -104,10 +112,13 @@ import qualified What4.Solver.Z3 as Z3 import Lang.Crucible.Backend-import Lang.Crucible.Backend.AssumptionStack as AS+import qualified Lang.Crucible.Backend.AssumptionStack as AS import qualified Lang.Crucible.Backend.ProofGoals as PG import Lang.Crucible.Simulator.SimError +--------------------------------------------------------------------------------+-- Configuration options+ data UnsatFeatures = NoUnsatFeatures -- ^ Do not compute unsat cores or assumptions@@ -181,7 +192,7 @@ ProblemFeatures -> IO (OnlineBackend solver scope st fs) newOnlineBackend sym feats =- do stk <- initAssumptionStack (sym ^. B.exprCounter)+ do stk <- AS.initAssumptionStack (sym ^. B.exprCounter) procref <- newIORef SolverNotStarted featref <- newIORef feats @@ -224,176 +235,6 @@ ) -type YicesOnlineBackend scope st fs = OnlineBackend Yices.Connection scope st fs---- | Do something with a Yices online backend.--- The backend is only valid in the continuation.------ The Yices configuration options will be automatically--- installed into the backend configuration object.------ n.b. the explicit forall allows the fs to be expressed as the--- first argument so that it can be dictated easily from the caller.--- Example:------ > withYicesOnlineBackend FloatRealRepr ng f'-withYicesOnlineBackend ::- (MonadIO m, MonadMask m) =>- B.ExprBuilder scope st fs ->- UnsatFeatures ->- ProblemFeatures ->- (YicesOnlineBackend scope st fs -> m a) ->- m a-withYicesOnlineBackend sym unsatFeat extraFeatures action =- let feat = Yices.yicesDefaultFeatures .|. unsatFeaturesToProblemFeatures unsatFeat .|. extraFeatures in- withOnlineBackend sym feat $ \bak ->- do liftIO $ tryExtendConfig Yices.yicesOptions (getConfiguration sym)- action bak--type Z3OnlineBackend scope st fs = OnlineBackend (SMT2.Writer Z3.Z3) scope st fs---- | Do something with a Z3 online backend.--- The backend is only valid in the continuation.------ The Z3 configuration options will be automatically--- installed into the backend configuration object.------ n.b. the explicit forall allows the fs to be expressed as the--- first argument so that it can be dictated easily from the caller.--- Example:------ > withz3OnlineBackend FloatRealRepr ng f'-withZ3OnlineBackend ::- (MonadIO m, MonadMask m) =>- B.ExprBuilder scope st fs ->- UnsatFeatures ->- ProblemFeatures ->- (Z3OnlineBackend scope st fs -> m a) ->- m a-withZ3OnlineBackend sym unsatFeat extraFeatures action =- let feat = (SMT2.defaultFeatures Z3.Z3 .|. unsatFeaturesToProblemFeatures unsatFeat .|. extraFeatures) in- withOnlineBackend sym feat $ \bak ->- do liftIO $ tryExtendConfig Z3.z3Options (getConfiguration sym)- action bak--type BitwuzlaOnlineBackend scope st fs = OnlineBackend (SMT2.Writer Bitwuzla.Bitwuzla) scope st fs---- | Do something with a Bitwuzla online backend.--- The backend is only valid in the continuation.------ The Bitwuzla configuration options will be automatically--- installed into the backend configuration object.------ > withBitwuzlaOnineBackend FloatRealRepr ng f'-withBitwuzlaOnlineBackend ::- (MonadIO m, MonadMask m) =>- B.ExprBuilder scope st fs ->- UnsatFeatures ->- ProblemFeatures ->- (BitwuzlaOnlineBackend scope st fs -> m a) ->- m a-withBitwuzlaOnlineBackend sym unsatFeat extraFeatures action =- let feat = (SMT2.defaultFeatures Bitwuzla.Bitwuzla .|. unsatFeaturesToProblemFeatures unsatFeat .|. extraFeatures) in- withOnlineBackend sym feat $ \bak -> do- liftIO $ tryExtendConfig Bitwuzla.bitwuzlaOptions (getConfiguration sym)- action bak--type BoolectorOnlineBackend scope st fs = OnlineBackend (SMT2.Writer Boolector.Boolector) scope st fs---- | Do something with a Boolector online backend.--- The backend is only valid in the continuation.------ The Boolector configuration options will be automatically--- installed into the backend configuration object.------ > withBoolectorOnineBackend FloatRealRepr ng f'-withBoolectorOnlineBackend ::- (MonadIO m, MonadMask m) =>- B.ExprBuilder scope st fs ->- UnsatFeatures ->- (BoolectorOnlineBackend scope st fs -> m a) ->- m a-withBoolectorOnlineBackend sym unsatFeat action =- let feat = (SMT2.defaultFeatures Boolector.Boolector .|. unsatFeaturesToProblemFeatures unsatFeat) in- withOnlineBackend sym feat $ \bak -> do- liftIO $ tryExtendConfig Boolector.boolectorOptions (getConfiguration sym)- action bak--type CVC4OnlineBackend scope st fs = OnlineBackend (SMT2.Writer CVC4.CVC4) scope st fs---- | Do something with a CVC4 online backend.--- The backend is only valid in the continuation.------ The CVC4 configuration options will be automatically--- installed into the backend configuration object.------ n.b. the explicit forall allows the fs to be expressed as the--- first argument so that it can be dictated easily from the caller.--- Example:------ > withCVC4OnlineBackend FloatRealRepr ng f'-withCVC4OnlineBackend ::- (MonadIO m, MonadMask m) =>- B.ExprBuilder scope st fs ->- UnsatFeatures ->- ProblemFeatures ->- (CVC4OnlineBackend scope st fs -> m a) ->- m a-withCVC4OnlineBackend sym unsatFeat extraFeatures action =- let feat = (SMT2.defaultFeatures CVC4.CVC4 .|. unsatFeaturesToProblemFeatures unsatFeat .|. extraFeatures) in- withOnlineBackend sym feat $ \bak -> do- liftIO $ tryExtendConfig CVC4.cvc4Options (getConfiguration sym)- action bak--type CVC5OnlineBackend scope st fs = OnlineBackend (SMT2.Writer CVC5.CVC5) scope st fs---- | Do something with a CVC5 online backend.--- The backend is only valid in the continuation.------ The CVC5 configuration options will be automatically--- installed into the backend configuration object.------ n.b. the explicit forall allows the fs to be expressed as the--- first argument so that it can be dictated easily from the caller.--- Example:------ > withCVC5OnlineBackend FloatRealRepr ng f'-withCVC5OnlineBackend ::- (MonadIO m, MonadMask m) =>- B.ExprBuilder scope st fs ->- UnsatFeatures ->- ProblemFeatures ->- (CVC5OnlineBackend scope st fs -> m a) ->- m a-withCVC5OnlineBackend sym unsatFeat extraFeatures action =- let feat = (SMT2.defaultFeatures CVC5.CVC5 .|. unsatFeaturesToProblemFeatures unsatFeat .|. extraFeatures) in- withOnlineBackend sym feat $ \bak -> do- liftIO $ tryExtendConfig CVC5.cvc5Options (getConfiguration sym)- action bak--type STPOnlineBackend scope st fs = OnlineBackend (SMT2.Writer STP.STP) scope st fs---- | Do something with a STP online backend.--- The backend is only valid in the continuation.------ The STO configuration options will be automatically--- installed into the backend configuration object.------ n.b. the explicit forall allows the fs to be expressed as the--- first argument so that it can be dictated easily from the caller.--- Example:------ > withSTPOnlineBackend FloatRealRepr ng f'-withSTPOnlineBackend ::- (MonadIO m, MonadMask m) =>- B.ExprBuilder scope st fs ->- (STPOnlineBackend scope st fs -> m a) ->- m a-withSTPOnlineBackend sym action =- withOnlineBackend sym (SMT2.defaultFeatures STP.STP) $ \bak -> do- liftIO $ tryExtendConfig STP.stpOptions (getConfiguration sym)- action bak- -- | Shutdown any currently-active solver process. -- A fresh solver process will be started on the -- next call to `getSolverProcess`.@@ -497,30 +338,13 @@ withSolverConn bak k = withSolverProcess bak (pure ()) (k . solverConn) --- | Result of attempting to branch on a predicate.-data BranchResult- -- | The both branches of the predicate might be satisfiable- -- (although satisfiablility of either branch is not guaranteed).- = IndeterminateBranchResult-- -- | Commit to the branch where the given predicate is equal to- -- the returned boolean. The opposite branch is unsatisfiable- -- (although the given branch is not necessarily satisfiable).- | NoBranch !Bool-- -- | The context before considering the given predicate was already- -- unsatisfiable.- | UnsatisfiableContext- deriving (Data, Eq, Generic, Ord, Typeable)-- restoreAssumptionFrames :: OnlineSolver solver => OnlineBackend solver scope st fs -> SolverProcess scope solver ->- AssumptionFrames (CrucibleAssumptions (B.Expr scope)) ->+ AS.AssumptionFrames (CrucibleAssumptions (B.Expr scope)) -> IO ()-restoreAssumptionFrames bak proc (AssumptionFrames base frms) =+restoreAssumptionFrames bak proc (AS.AssumptionFrames base frms) = do let sym = onlineExprBuilder bak -- assume the base-level assumptions SMT.assume (solverConn proc) =<< assumptionsPred sym base@@ -530,29 +354,6 @@ do push proc SMT.assume (solverConn proc) =<< assumptionsPred sym frm -considerSatisfiability ::- OnlineSolver solver =>- OnlineBackend solver scope st fs ->- Maybe ProgramLoc ->- B.BoolExpr scope ->- IO BranchResult-considerSatisfiability bak mbPloc p =- let sym = onlineExprBuilder bak in- withSolverProcess bak (pure IndeterminateBranchResult) $ \proc ->- do pnot <- notPred sym p- let locDesc = case mbPloc of- Just ploc -> show (plSourceLoc ploc)- Nothing -> "(unknown location)"- let rsn = "branch sat: " ++ locDesc- p_res <- checkSatisfiable proc rsn p- pnot_res <- checkSatisfiable proc rsn pnot- case (p_res, pnot_res) of- (Unsat{}, Unsat{}) -> return UnsatisfiableContext- (_ , Unsat{}) -> return (NoBranch True)- (Unsat{}, _ ) -> return (NoBranch False)- _ -> return IndeterminateBranchResult-- instance HasSymInterface (B.ExprBuilder t st fs) (OnlineBackend solver t st fs) where backendGetSym = onlineExprBuilder @@ -587,7 +388,7 @@ withSolverConn bak $ \conn -> SMT.assume conn p -- Add assertions to list- appendAssumptions as (assumptionStack bak)+ AS.appendAssumptions as (assumptionStack bak) collectAssumptions bak = AS.collectAssumptions (assumptionStack bak)@@ -596,11 +397,11 @@ -- NB, don't push a frame in the assumption stack unless -- pushing to the solver succeeded do withSolverProcess bak (pure ()) push- pushFrame (assumptionStack bak)+ AS.pushFrame (assumptionStack bak) popAssumptionFrame bak ident = -- NB, pop the frame whether or not the solver pop succeeds- do frm <- popFrame ident (assumptionStack bak)+ do frm <- AS.popFrame ident (assumptionStack bak) withSolverProcess bak (pure ()) pop return frm @@ -612,7 +413,7 @@ popAssumptionFrameAndObligations bak ident = do -- NB, pop the frames whether or not the solver pop succeeds- do frmAndGls <- popFrameAndGoals ident (assumptionStack bak)+ do frmAndGls <- AS.popFrameAndGoals ident (assumptionStack bak) withSolverProcess bak (pure ()) pop return frmAndGls @@ -629,3 +430,185 @@ do restoreSolverState bak gc -- restore the previous assumption stack AS.restoreAssumptionStack gc (assumptionStack bak)++ getBackendState bak = readIORef (AS.proofObligations (assumptionStack bak))++--------------------------------------------------------------------------------+-- Branch satisfiability++-- | Result of attempting to branch on a predicate.+data BranchResult+ -- | The both branches of the predicate might be satisfiable+ -- (although satisfiablility of either branch is not guaranteed).+ = IndeterminateBranchResult++ -- | Commit to the branch where the given predicate is equal to+ -- the returned boolean. The opposite branch is unsatisfiable+ -- (although the given branch is not necessarily satisfiable).+ | NoBranch !Bool++ -- | The context before considering the given predicate was already+ -- unsatisfiable.+ | UnsatisfiableContext+ deriving (Data, Eq, Generic, Ord, Typeable)++considerSatisfiability ::+ OnlineSolver solver =>+ OnlineBackend solver scope st fs ->+ Maybe ProgramLoc ->+ B.BoolExpr scope ->+ IO BranchResult+considerSatisfiability bak mbPloc p =+ let sym = onlineExprBuilder bak in+ withSolverProcess bak (pure IndeterminateBranchResult) $ \proc ->+ do pnot <- notPred sym p+ let locDesc = case mbPloc of+ Just ploc -> show (plSourceLoc ploc)+ Nothing -> "(unknown location)"+ let rsn = "branch sat: " ++ locDesc+ p_res <- checkSatisfiable proc rsn p+ pnot_res <- checkSatisfiable proc rsn pnot+ case (p_res, pnot_res) of+ (Unsat{}, Unsat{}) -> return UnsatisfiableContext+ (_ , Unsat{}) -> return (NoBranch True)+ (Unsat{}, _ ) -> return (NoBranch False)+ _ -> return IndeterminateBranchResult++--------------------------------------------------------------------------------+-- Backends for different solvers++type YicesOnlineBackend scope st fs = OnlineBackend Yices.Connection scope st fs++-- | Do something with a Yices online backend.+-- The backend is only valid in the continuation.+--+-- The Yices configuration options will be automatically+-- installed into the backend configuration object.+withYicesOnlineBackend ::+ (MonadIO m, MonadMask m) =>+ B.ExprBuilder scope st fs ->+ UnsatFeatures ->+ ProblemFeatures ->+ (YicesOnlineBackend scope st fs -> m a) ->+ m a+withYicesOnlineBackend sym unsatFeat extraFeatures action =+ let feat = Yices.yicesDefaultFeatures .|. unsatFeaturesToProblemFeatures unsatFeat .|. extraFeatures in+ withOnlineBackend sym feat $ \bak ->+ do liftIO $ tryExtendConfig Yices.yicesOptions (getConfiguration sym)+ action bak++type Z3OnlineBackend scope st fs = OnlineBackend (SMT2.Writer Z3.Z3) scope st fs++-- | Do something with a Z3 online backend.+-- The backend is only valid in the continuation.+--+-- The Z3 configuration options will be automatically+-- installed into the backend configuration object.+withZ3OnlineBackend ::+ (MonadIO m, MonadMask m) =>+ B.ExprBuilder scope st fs ->+ UnsatFeatures ->+ ProblemFeatures ->+ (Z3OnlineBackend scope st fs -> m a) ->+ m a+withZ3OnlineBackend sym unsatFeat extraFeatures action =+ let feat = (SMT2.defaultFeatures Z3.Z3 .|. unsatFeaturesToProblemFeatures unsatFeat .|. extraFeatures) in+ withOnlineBackend sym feat $ \bak ->+ do liftIO $ tryExtendConfig Z3.z3Options (getConfiguration sym)+ action bak++type BitwuzlaOnlineBackend scope st fs = OnlineBackend (SMT2.Writer Bitwuzla.Bitwuzla) scope st fs++-- | Do something with a Bitwuzla online backend.+-- The backend is only valid in the continuation.+--+-- The Bitwuzla configuration options will be automatically+-- installed into the backend configuration object.+withBitwuzlaOnlineBackend ::+ (MonadIO m, MonadMask m) =>+ B.ExprBuilder scope st fs ->+ UnsatFeatures ->+ ProblemFeatures ->+ (BitwuzlaOnlineBackend scope st fs -> m a) ->+ m a+withBitwuzlaOnlineBackend sym unsatFeat extraFeatures action =+ let feat = (SMT2.defaultFeatures Bitwuzla.Bitwuzla .|. unsatFeaturesToProblemFeatures unsatFeat .|. extraFeatures) in+ withOnlineBackend sym feat $ \bak -> do+ liftIO $ tryExtendConfig Bitwuzla.bitwuzlaOptions (getConfiguration sym)+ action bak++type BoolectorOnlineBackend scope st fs = OnlineBackend (SMT2.Writer Boolector.Boolector) scope st fs++-- | Do something with a Boolector online backend.+-- The backend is only valid in the continuation.+--+-- The Boolector configuration options will be automatically+-- installed into the backend configuration object.+withBoolectorOnlineBackend ::+ (MonadIO m, MonadMask m) =>+ B.ExprBuilder scope st fs ->+ UnsatFeatures ->+ (BoolectorOnlineBackend scope st fs -> m a) ->+ m a+withBoolectorOnlineBackend sym unsatFeat action =+ let feat = (SMT2.defaultFeatures Boolector.Boolector .|. unsatFeaturesToProblemFeatures unsatFeat) in+ withOnlineBackend sym feat $ \bak -> do+ liftIO $ tryExtendConfig Boolector.boolectorOptions (getConfiguration sym)+ action bak++type CVC4OnlineBackend scope st fs = OnlineBackend (SMT2.Writer CVC4.CVC4) scope st fs++-- | Do something with a CVC4 online backend.+-- The backend is only valid in the continuation.+--+-- The CVC4 configuration options will be automatically+-- installed into the backend configuration object.+withCVC4OnlineBackend ::+ (MonadIO m, MonadMask m) =>+ B.ExprBuilder scope st fs ->+ UnsatFeatures ->+ ProblemFeatures ->+ (CVC4OnlineBackend scope st fs -> m a) ->+ m a+withCVC4OnlineBackend sym unsatFeat extraFeatures action =+ let feat = (SMT2.defaultFeatures CVC4.CVC4 .|. unsatFeaturesToProblemFeatures unsatFeat .|. extraFeatures) in+ withOnlineBackend sym feat $ \bak -> do+ liftIO $ tryExtendConfig CVC4.cvc4Options (getConfiguration sym)+ action bak++type CVC5OnlineBackend scope st fs = OnlineBackend (SMT2.Writer CVC5.CVC5) scope st fs++-- | Do something with a CVC5 online backend.+-- The backend is only valid in the continuation.+--+-- The CVC5 configuration options will be automatically+-- installed into the backend configuration object.+withCVC5OnlineBackend ::+ (MonadIO m, MonadMask m) =>+ B.ExprBuilder scope st fs ->+ UnsatFeatures ->+ ProblemFeatures ->+ (CVC5OnlineBackend scope st fs -> m a) ->+ m a+withCVC5OnlineBackend sym unsatFeat extraFeatures action =+ let feat = (SMT2.defaultFeatures CVC5.CVC5 .|. unsatFeaturesToProblemFeatures unsatFeat .|. extraFeatures) in+ withOnlineBackend sym feat $ \bak -> do+ liftIO $ tryExtendConfig CVC5.cvc5Options (getConfiguration sym)+ action bak++type STPOnlineBackend scope st fs = OnlineBackend (SMT2.Writer STP.STP) scope st fs++-- | Do something with a STP online backend.+-- The backend is only valid in the continuation.+--+-- The STO configuration options will be automatically+-- installed into the backend configuration object.+withSTPOnlineBackend ::+ (MonadIO m, MonadMask m) =>+ B.ExprBuilder scope st fs ->+ (STPOnlineBackend scope st fs -> m a) ->+ m a+withSTPOnlineBackend sym action =+ withOnlineBackend sym (SMT2.defaultFeatures STP.STP) $ \bak -> do+ liftIO $ tryExtendConfig STP.stpOptions (getConfiguration sym)+ action bak
src/Lang/Crucible/Backend/ProofGoals.hs view
@@ -3,10 +3,11 @@ Copyright : (c) Galois, Inc 2014-2018 License : BSD3 -This module defines a data strucutre for storing a collection of-proof obligations, and the current state of assumptions.+This module defines a data structure ('GoalCollector') for storing the current+state of assumptions and a collection of proof obligations. -} +{-# LANGUAGE LambdaCase #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TupleSections #-}@@ -22,6 +23,7 @@ -- * Goal collector , FrameIdentifier(..), GoalCollector , emptyGoalCollector+ , ppGoalCollector -- ** traversals , traverseGoalCollector@@ -29,7 +31,7 @@ -- ** Context management , gcAddAssumes, gcProve- , gcPush, gcPop, gcAddGoals,+ , gcPush, gcPop, gcAddGoals, gcAddTopLevelAssume, -- ** Global operations on context gcRemoveObligations, gcRestore, gcReset, gcFinish@@ -40,9 +42,11 @@ where import Control.Monad.Reader+import qualified Data.Foldable as F import Data.Sequence (Seq) import qualified Data.Sequence as Seq import Data.Word (Word64)+import qualified Prettyprinter as PP import Lang.Crucible.Backend.Goals @@ -55,16 +59,80 @@ deriving(Eq,Ord,Show) --- | A data-strucutre that can incrementally collect goals in context.+-- | A data-structure that can incrementally collect goals in context. -- It keeps track both of the collection of assumptions that lead to -- the current state, as well as any proof obligations incurred along -- the way.+--+-- The main use of 'GoalCollector' is as the state of an+-- 'Lang.Crucible.Backend.AssumptionStack.AssumptionStack', which itself is+-- part of the state of the simple and online backends.+--+-- 'GoalCollector' can be somewhat counter-intuitive. The "top"+-- ('TopCollector') is the *leaf* when 'GoalCollector' is considered as+-- a tree (which is a common way to conceptualize recursive algebraic+-- data types such as this one). A 'GoalCollector' is shaped like a+-- cons-list with three different cons-like constructors ('CollectorFrame',+-- 'CollectingAssumptions', and 'CollectingGoals') and one nil-like+-- constructor 'TopCollector'. That is to say, a 'GoalCollector' is a sequence+-- that always ends in a single 'TopCollector'.+--+-- Furthermore, the frame identified by the first ('FrameIdentifier') argument+-- of 'CollectorFrame' does not conceptually contain the goals *inside* the+-- second ('GoalCollector') argument, but rather contains all the assumptions+-- and goals in whatever 'GoalCollector' *contains* the 'CollectorFrame'+-- constructor (everything *outside* of the 'CollectorFrame'). Concretely, in+-- the expression+-- @+-- 'CollectingGoals' gls ('CollectingAssumptions' asmps ('CollectorFrame' frm ('TopCollector' gls0)))+-- @+-- the goals @gls@ and assumptions @asmps@ are in the frame @frm@, rather than+-- the top-level goals @gls0@.+--+-- This inside-out structure is reflected in the pretty-printer+-- 'ppGoalCollector' below. The Crucible-CLI test-case @assumption-state@+-- shows this pretty-printer in action in a Crucible program with branching,+-- which can be helpful in understanding 'GoalCollector'. data GoalCollector asmp goal = TopCollector !(Seq (Goals asmp goal)) | CollectorFrame !FrameIdentifier !(GoalCollector asmp goal) | CollectingAssumptions !asmp !(GoalCollector asmp goal) | CollectingGoals !(Seq (Goals asmp goal)) !(GoalCollector asmp goal) +ppGoalCollector ::+ forall asmp goal ann.+ (asmp -> PP.Doc ann) ->+ (goal -> PP.Doc ann) ->+ GoalCollector asmp goal ->+ PP.Doc ann+ppGoalCollector ppAsmp ppGoal = go mempty+ where+ go :: PP.Doc ann -> GoalCollector asmp goal -> PP.Doc ann+ go remainder =+ \case+ TopCollector gls ->+ PP.vcat+ [ PP.pretty "Top-level goals:"+ , PP.list (map (ppGoals ppAsmp ppGoal) (F.toList gls))+ , remainder+ ]+ CollectorFrame (FrameIdentifier fid) gc ->+ let pLines = [PP.pretty "Frame " <> PP.viaShow fid <> PP.pretty ":", remainder] in+ go (PP.hang 2 (PP.vcat pLines)) gc+ CollectingAssumptions asmp gc ->+ let pLines = [PP.pretty "Assumptions:" , ppAsmp asmp, remainder] in+ go (PP.hang 2 (PP.vcat pLines)) gc+ CollectingGoals gls gc ->+ let pLines = [ PP.pretty "Prove all:"+ , PP.list (map (ppGoals ppAsmp ppGoal) (F.toList gls))+ , remainder+ ] in+ go (PP.hang 2 (PP.vcat pLines)) gc++-- | Intended for debugging, this is not generally a user-facing datatype.+instance (PP.Pretty asmp, PP.Pretty goal) => PP.Pretty (GoalCollector asmp goal) where+ pretty = ppGoalCollector PP.pretty PP.pretty+ -- | A collector with no goals and no context. emptyGoalCollector :: GoalCollector asmp goal emptyGoalCollector = TopCollector mempty@@ -141,6 +209,30 @@ gcAddGoals g (TopCollector gs) = TopCollector (gs Seq.|> g) gcAddGoals g (CollectingGoals gs gc) = CollectingGoals (gs Seq.|> g) gc gcAddGoals g gc = CollectingGoals (Seq.singleton g) gc++-- | Add an assumption that is in scope for all goals, even ones in earlier+-- frames.+gcAddTopLevelAssume ::+ Monoid asmp =>+ asmp ->+ GoalCollector asmp goal ->+ GoalCollector asmp goal+gcAddTopLevelAssume asmp =+ \case+ TopCollector gls ->+ -- Syntactically, it appears that `asmp` is duplicated here, perhaps+ -- unnecessarily. In fact, this is necessary. The `CollectingAssumptions`+ -- constructor brings the assumption into scope for all the goals+ -- *outside* of the top-level (see the comment on `GoalCollector` for+ -- the "inside-out" structure of `GoalCollector`), whereas the `assuming`+ -- brings it into scope for top-level goals.+ CollectingAssumptions asmp (TopCollector (assuming asmp <$> gls))+ CollectorFrame frm gc ->+ CollectorFrame frm (gcAddTopLevelAssume asmp gc)+ CollectingAssumptions asmp' gc ->+ CollectingAssumptions asmp' (gcAddTopLevelAssume asmp gc)+ CollectingGoals gls gc ->+ CollectingGoals gls (gcAddTopLevelAssume asmp gc) -- | Add a new proof obligation to the current context. gcProve :: goal -> GoalCollector asmp goal -> GoalCollector asmp goal
src/Lang/Crucible/Backend/Simple.hs view
@@ -4,13 +4,13 @@ -- Description : The "simple" solver backend -- Copyright : (c) Galois, Inc 2015-2016 -- License : BSD3--- Maintainer : Rob Dockins <rdockins@galois.com>+-- Maintainer : Ryan Scott <rscott@galois.com>, Langston Barrett <langston@galois.com> -- Stability : provisional ----- An "offline" backend for communicating with solvers. This backend--- does not maintain a persistent connection to a solver, and does--- not perform satisfiability checks at symbolic branch points.-------------------------------------------------------------------------+-- An "offline" backend for communicating with SMT solvers. In contrast to+-- "Lang.Crucible.Backend.Online", this backend does not maintain a persistent+-- connection to a solver.+-- ---------------------------------------------------------------------- {-# LANGUAGE GADTs #-} {-# LANGUAGE FlexibleContexts #-}@@ -32,6 +32,7 @@ import Control.Lens ( (^.) ) import Control.Monad (void)+import Data.IORef (readIORef) import What4.Config import What4.Interface@@ -42,7 +43,7 @@ import Lang.Crucible.Simulator.SimError --------------------------------------------------------------------------- SimpleBackendState+-- SimpleBackend -- | This represents the state of the backend along a given execution. -- It contains the current assertion stack.@@ -111,3 +112,5 @@ restoreAssumptionState bak newstk = do AS.restoreAssumptionStack newstk (sbAssumptionStack bak)++ getBackendState bak = readIORef (AS.proofObligations (sbAssumptionStack bak))
src/Lang/Crucible/Concretize.hs view
@@ -7,15 +7,27 @@ -- Maintainer : Langston Barrett <langston@galois.com> -- Stability : provisional ----- This module defines 'concRegValue', a function that takes a 'RegValue' (i.e.,--- a symbolic value), and a model from the SMT solver ('W4GE.GroundEvalFn'), and--- returns the concrete value that the symbolic value takes in the model.+-- This module defines three different kinds of functions. In order of how much+-- work they perform: ----- This can be used to report specific values that lead to violations of--- assertions, including safety assertions.+-- * /Grounding/ functions (e.g., 'groundRegValue') take symbolic values+-- ('RegValue's) and a model from an SMT solver ('W4GE.GroundEvalFn'), and+-- return the concrete value ('ConcRegValue') that the symbolic value takes in+-- the model. These functions can be used to report specific values that lead+-- to violations of assertions, including safety assertions.+-- * /Concretization/ functions (e.g., 'concRegValue') request a model that is+-- consistent with the current assumptions (e.g., path conditions) from the+-- symbolic backend, and then ground a value in that model. These can be used+-- to reduce the size and complexity of later queries to SMT solvers, at the+-- cost of no longer being sound from a verification standpoint.+-- * /Unique concretization/ functions (e.g., 'uniquelyConcRegValue') do the+-- same thing as concretization functions, but then check if the concrete+-- value is the /only possible/ value for the given symbolic expression in+-- /any/ model. ------------------------------------------------------------------------ {-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE StandaloneKindSignatures #-}@@ -30,24 +42,38 @@ module Lang.Crucible.Concretize ( ConcRegValue , ConcRV'(..)+ , asConcRegValue+ , asConcRegEntry+ , asConcRegMap , ConcAnyValue(..) , ConcIntrinsic , IntrinsicConcFn(..) , ConcCtx(..)+ -- * Grounding+ , groundRegValue+ , groundRegEntry+ , groundRegMap+ -- * Concretization , concRegValue , concRegEntry , concRegMap+ -- * Unique concretization+ , uniquelyConcRegValue+ , uniquelyConcRegEntry+ , uniquelyConcRegMap -- * There and back again , IntrinsicConcToSymFn(..) , concToSym ) where import qualified Data.Foldable as F+import Data.Functor.Const (Const(..)) import Data.Kind (Type) import Data.List.NonEmpty (NonEmpty) import qualified Data.List.NonEmpty as NE import Data.Map (Map) import qualified Data.Map as Map+import Data.Proxy (Proxy(Proxy)) import Data.Sequence (Seq) import Data.Text (Text) import qualified Data.Text as Text@@ -57,14 +83,20 @@ import qualified Data.Parameterized.Context as Ctx import Data.Parameterized.Map (MapF) import qualified Data.Parameterized.Map as MapF-import Data.Parameterized.TraversableFC (traverseFC)+import Data.Parameterized.TraversableFC (traverseFC, foldlMFC) +import qualified What4.Concretize as W4C+import qualified What4.Config as W4Cfg import What4.Expr (Expr, ExprBuilder, Flags, FloatModeRepr(..)) import qualified What4.Expr.GroundEval as W4GE import What4.Interface (SymExpr) import qualified What4.Interface as W4I import qualified What4.Partial as W4P+import qualified What4.Protocol.Online as WPO+import qualified What4.SatResult as WSat +import qualified Lang.Crucible.Backend as CB+import qualified Lang.Crucible.Backend.Online as CBO import Lang.Crucible.FunctionHandle (FnHandle, RefCell) import Lang.Crucible.Simulator.Intrinsics (Intrinsic) import Lang.Crucible.Simulator.RegMap (RegEntry, RegMap)@@ -84,7 +116,7 @@ -- | Defines the \"concrete\" interpretations of 'CrucibleType' (as opposed -- to the \"symbolic\" interpretations, which are defined by 'RegValue'), as--- returned by 'concRegValue'.+-- returned by 'groundRegValue'. -- -- Unlike What4\'s 'W4GE.GroundValue', this type family is parameterized -- by @sym@, the symbolic backend. This is because Crucible makes use of@@ -112,10 +144,40 @@ ConcRegValue sym (IntrinsicType nm ctx) = ConcIntrinsic nm ctx ConcRegValue sym (StringMapType tp) = Map Text (ConcRV' sym tp) +-- | Check if a 'RegValue' is actually concrete+asConcRegValue ::+ W4I.IsExpr (SymExpr sym) =>+ proxy sym ->+ TypeRepr tp ->+ RegValue sym tp ->+ Maybe (ConcRegValue sym tp)+asConcRegValue _proxy tp val =+ -- TODO: More cases could be added here.+ case asBaseType tp of+ AsBaseType {} -> W4GE.asGround val+ _ -> Nothing++-- | Check if a 'RM.RegEntry' is actually concrete+asConcRegEntry ::+ forall sym tp.+ W4I.IsExpr (SymExpr sym) =>+ RM.RegEntry sym tp ->+ Maybe (ConcRegValue sym tp)+asConcRegEntry (RM.RegEntry t v) = asConcRegValue (Proxy @sym) t v++-- | Check if a 'RM.RegMap' is actually concrete+asConcRegMap ::+ forall sym tp.+ W4I.IsExpr (SymExpr sym) =>+ RM.RegMap sym tp ->+ Maybe (Ctx.Assignment (ConcRV' sym) tp)+asConcRegMap (RM.RegMap assign) =+ traverseFC (\re -> ConcRV' <$> asConcRegEntry re) assign+ --------------------------------------------------------------------- -- * ConcCtx --- | Context needed for 'concRegValue'+-- | Context needed for 'groundRegValue' -- -- The @t@ parameter matches that on 'W4GE.GroundEvalFn' and 'Expr', namely, it -- is a phantom type brand used to relate nonces to a specific nonce generator@@ -172,7 +234,7 @@ W4P.Partial (W4I.Pred sym) (RegValue sym tp) -> IO (Maybe (ConcRegValue sym tp)) concPartial ctx tp (W4P.Partial p v) =- iteIO ctx p (Just <$> concRegValue ctx tp v) (pure Nothing)+ iteIO ctx p (Just <$> groundRegValue ctx tp v) (pure Nothing) -- | Helper, not exported concPartialWithErr ::@@ -224,13 +286,13 @@ --------------------------------------------------------------------- -- * Any --- | An 'AnyValue' concretized by 'concRegValue'+-- | An 'AnyValue' concretized by 'groundRegValue' data ConcAnyValue sym = forall tp. ConcAnyValue (TypeRepr tp) (ConcRV' sym tp) --------------------------------------------------------------------- -- * FnVal --- | A 'FnVal' concretized by 'concRegValue'+-- | A 'FnVal' concretized by 'groundRegValue' data ConcFnVal (sym :: Type) (args :: Ctx CrucibleType) (res :: CrucibleType) where ConcClosureFnVal :: !(ConcFnVal sym (args ::> tp) ret) ->@@ -260,7 +322,7 @@ \case RV.ClosureFnVal fv t v -> do concV <- concFnVal ctx (args Ctx.:> t) ret fv- v' <- concRegValue ctx t v+ v' <- groundRegValue ctx t v pure (ConcClosureFnVal concV t (ConcRV' v')) RV.VarargsFnVal hdl extra -> pure (ConcVarargsFnVal hdl extra)@@ -306,7 +368,7 @@ concSymSequence ctx tp = SymSeq.concretizeSymSequence (ground ctx)- (fmap ConcRV' . concRegValue ctx tp)+ (fmap ConcRV' . groundRegValue ctx tp) --------------------------------------------------------------------- -- * StringMap@@ -331,7 +393,7 @@ --------------------------------------------------------------------- -- * Variant --- | Note that we do not attempt to \"normalize\" variants in 'concRegValue'+-- | Note that we do not attempt to \"normalize\" variants in 'groundRegValue' -- in any way. If the model reports that multiple branches of a variant are -- plausible, then multiple branches might be included as 'Just's. newtype ConcVariantBranch sym tp@@ -356,21 +418,21 @@ Nothing -> pure (ConcVariantBranch Nothing) ------------------------------------------------------------------------ * 'concRegValue'+-- * 'groundRegValue' -- | Pick a feasible concrete value from the model -- -- This function does not attempt to \"normalize\" variants nor mux trees in any -- way. If the model reports that multiple branches of a variant or mux tree are -- plausible, then multiple branches might be included in the result.-concRegValue ::+groundRegValue :: (SymExpr sym ~ Expr t) => W4I.IsExprBuilder sym => ConcCtx sym t -> TypeRepr tp -> RegValue sym tp -> IO (ConcRegValue sym tp)-concRegValue ctx tp v =+groundRegValue ctx tp v = case (tp, v) of -- Base types (BoolRepr, _) -> ground ctx v@@ -391,13 +453,13 @@ -- Simple recursive cases (AnyRepr, RV.AnyValue tp' v') ->- ConcAnyValue tp' . ConcRV' <$> concRegValue ctx tp' v'+ ConcAnyValue tp' . ConcRV' <$> groundRegValue ctx tp' v' (RecursiveRepr symb tyCtx, RV.RolledType v') ->- concRegValue ctx (unrollType symb tyCtx) v'+ groundRegValue ctx (unrollType symb tyCtx) v' (StructRepr tps, _) ->- Ctx.zipWithM (\tp' (RV.RV v') -> ConcRV' <$> concRegValue ctx tp' v') tps v+ Ctx.zipWithM (\tp' (RV.RV v') -> ConcRV' <$> groundRegValue ctx tp' v') tps v (VectorRepr tp', _) ->- traverse (fmap ConcRV' . concRegValue ctx tp') v+ traverse (fmap ConcRV' . groundRegValue ctx tp') v -- Cases with helper functions (MaybeRepr tp', _) ->@@ -422,26 +484,209 @@ -- Incomplete cases (WordMapRepr _ _, _) -> pure () --- | Like 'concRegValue', but for 'RegEntry'-concRegEntry ::+-- | Like 'groundRegValue', but for 'RegEntry'+groundRegEntry :: (SymExpr sym ~ Expr t) => W4I.IsExprBuilder sym => ConcCtx sym t -> RegEntry sym tp -> IO (ConcRegValue sym tp)-concRegEntry ctx e = concRegValue ctx (RM.regType e) (RM.regValue e)+groundRegEntry ctx e = groundRegValue ctx (RM.regType e) (RM.regValue e) --- | Like 'concRegEntry', but for a whole 'RegMap'-concRegMap ::+-- | Like 'groundRegEntry', but for a whole 'RegMap'+groundRegMap :: (SymExpr sym ~ Expr t) => W4I.IsExprBuilder sym => ConcCtx sym t -> RegMap sym tps -> IO (Ctx.Assignment (ConcRV' sym) tps)-concRegMap ctx (RM.RegMap m) = traverseFC (fmap ConcRV' . concRegEntry ctx) m+groundRegMap ctx (RM.RegMap m) = traverseFC (fmap ConcRV' . groundRegEntry ctx) m ------------------------------------------------------------------------ * concToSym+-- * 'concRegValue'++-- | Generate a model and pick a feasible concrete value from it+concRegValue ::+ forall tp sym bak solver scope st fs.+ ( CB.IsSymBackend sym bak+ , sym ~ ExprBuilder scope st fs+ , SymExpr sym ~ Expr scope+ , bak ~ CBO.OnlineBackend solver scope st fs+ , WPO.OnlineSolver solver+ ) =>+ bak ->+ MapF SymbolRepr (IntrinsicConcFn scope) ->+ TypeRepr tp ->+ RegValue sym tp ->+ IO (Either W4C.ConcretizationFailure (ConcRegValue sym tp))+concRegValue bak iFns tp v = concRegEntry bak iFns (RM.RegEntry tp v)++-- | Generate a model and pick a feasible concrete value from it+concRegEntry ::+ forall tp sym bak solver scope st fs.+ ( CB.IsSymBackend sym bak+ , sym ~ ExprBuilder scope st fs+ , SymExpr sym ~ Expr scope+ , bak ~ CBO.OnlineBackend solver scope st fs+ , WPO.OnlineSolver solver+ ) =>+ bak ->+ MapF SymbolRepr (IntrinsicConcFn scope) ->+ RM.RegEntry sym tp ->+ IO (Either W4C.ConcretizationFailure (ConcRegValue sym tp))+concRegEntry bak iFns re = do+ res <- concRegMap bak iFns (RM.RegMap (Ctx.singleton re))+ case res of+ Left e -> pure (Left e)+ Right (Ctx.Empty Ctx.:> ConcRV' concV) -> pure (Right concV)++-- | Like 'concRegValue', but for a whole 'RegMap'+concRegMap ::+ forall tps sym bak solver scope st fs.+ ( CB.IsSymBackend sym bak+ , sym ~ ExprBuilder scope st fs+ , SymExpr sym ~ Expr scope+ , bak ~ CBO.OnlineBackend solver scope st fs+ , WPO.OnlineSolver solver+ ) =>+ bak ->+ MapF SymbolRepr (IntrinsicConcFn scope) ->+ RegMap sym tps ->+ IO (Either W4C.ConcretizationFailure (Ctx.Assignment (ConcRV' sym) tps))+concRegMap bak iFns m = do+ case asConcRegMap m of+ Just concM -> pure (Right concM)+ Nothing ->+ withEnabledOnline $ do+ let err = panic "concRegValue" ["requires online solving to be enabled"]+ cond <- CB.getPathCondition bak+ CBO.withSolverProcess bak err $ \sp -> do+ msat <- WPO.checkWithAssumptionsAndModel sp "concRegValue" [cond]+ case msat of+ WSat.Unknown -> pure $ Left W4C.SolverUnknown+ WSat.Unsat {} -> pure $ Left W4C.UnsatInitialAssumptions+ WSat.Sat mdl -> do+ let ctx = ConcCtx { model = mdl, intrinsicConcFuns = iFns }+ expr <- groundRegMap @sym ctx m+ pure (Right expr)+ where+ withEnabledOnline f = do+ let sym = CB.backendGetSym bak+ let conf = W4I.getConfiguration sym+ enabledOpt <- W4Cfg.getOptionSetting CBO.enableOnlineBackend conf+ wasEnabled <- W4Cfg.getOpt enabledOpt+ _ <- W4Cfg.setOpt enabledOpt True+ r <- f+ _ <- W4Cfg.setOpt enabledOpt wasEnabled+ pure r++---------------------------------------------------------------------+-- * 'uniquelyConcRegValue'++-- | Generate a model and pick a feasible concrete value from it+uniquelyConcRegValue ::+ forall tp sym bak solver scope st fm.+ ( CB.IsSymBackend sym bak+ , sym ~ ExprBuilder scope st (Flags fm)+ , SymExpr sym ~ Expr scope+ , bak ~ CBO.OnlineBackend solver scope st (Flags fm)+ , WPO.OnlineSolver solver+ ) =>+ bak ->+ FloatModeRepr fm ->+ MapF SymbolRepr (IntrinsicConcFn scope) ->+ MapF SymbolRepr IntrinsicConcToSymFn ->+ TypeRepr tp ->+ RegValue sym tp ->+ IO (Either W4C.UniqueConcretizationFailure (ConcRegValue sym tp))+uniquelyConcRegValue bak fm iFns sFns tp v =+ uniquelyConcRegEntry bak fm iFns sFns (RM.RegEntry tp v)++-- | Generate a model and pick a feasible concrete value from it+uniquelyConcRegEntry ::+ forall tp sym bak solver scope st fm.+ ( CB.IsSymBackend sym bak+ , sym ~ ExprBuilder scope st (Flags fm)+ , SymExpr sym ~ Expr scope+ , bak ~ CBO.OnlineBackend solver scope st (Flags fm)+ , WPO.OnlineSolver solver+ ) =>+ bak ->+ FloatModeRepr fm ->+ MapF SymbolRepr (IntrinsicConcFn scope) ->+ MapF SymbolRepr IntrinsicConcToSymFn ->+ RM.RegEntry sym tp ->+ IO (Either W4C.UniqueConcretizationFailure (ConcRegValue sym tp))+uniquelyConcRegEntry bak fm iFns sFns re = do+ res <- uniquelyConcRegMap bak fm iFns sFns (RM.RegMap (Ctx.singleton re))+ case res of+ Left e -> pure (Left e)+ Right (Ctx.Empty Ctx.:> ConcRV' concV) -> pure (Right concV)++-- | Like 'concRegValue', but for a whole 'RegMap'+uniquelyConcRegMap ::+ forall tps sym bak solver scope st fm.+ ( CB.IsSymBackend sym bak+ , sym ~ ExprBuilder scope st (Flags fm)+ , SymExpr sym ~ Expr scope+ , bak ~ CBO.OnlineBackend solver scope st (Flags fm)+ , WPO.OnlineSolver solver+ ) =>+ bak ->+ FloatModeRepr fm ->+ MapF SymbolRepr (IntrinsicConcFn scope) ->+ MapF SymbolRepr IntrinsicConcToSymFn ->+ RegMap sym tps ->+ IO (Either W4C.UniqueConcretizationFailure (Ctx.Assignment (ConcRV' sym) tps))+uniquelyConcRegMap bak fm iFns sFns m = do+ case asConcRegMap m of+ Just concM -> pure (Right concM)+ Nothing -> do+ -- First, check to see if there are a models of the symbolic values.+ concM_ <- concRegMap bak iFns m+ case concM_ of+ Left e -> pure (Left (W4C.GroundingFailure e))+ Right concM -> do+ -- We found a model, so check to see if this is the only possible+ -- model for these symbolic values. We do this by adding a blocking+ -- clause that assumes the `RegValue`s are /not/ equal to the+ -- model we found in the previous step. If this is unsatisfiable,+ -- the `RegValue`s can only be equal to the first model, so we can+ -- conclude they are concrete. If it is satisfiable, on the other+ -- hand, the `RegValue`s can be multiple values, so they are truly+ -- symbolic.+ let sym = CB.backendGetSym bak+ let notEq ::+ forall tp.+ ConcRV' sym tp ->+ RM.RegEntry sym tp ->+ IO (Const (W4I.Pred sym) tp)+ notEq (ConcRV' concV) (RM.RegEntry tp v) = do+ symV <- concToSym sym sFns fm tp concV+ p <- W4I.notPred sym =<< RV.eqRegValue sym tp symV v+ pure (Const p)+ let RM.RegMap mAssign = m+ preds <- Ctx.zipWithM notEq concM mAssign+ p <-+ foldlMFC+ (\p (Const p') -> W4I.andPred sym p p')+ (W4I.truePred sym)+ preds++ frm <- CB.pushAssumptionFrame bak+ loc <- W4I.getCurrentProgramLoc sym+ CB.addAssumption bak (CB.GenericAssumption loc "uniquelyConcRegMap" p)+ concM_' <- concRegMap bak iFns m+ res <-+ case concM_' of+ Left W4C.UnsatInitialAssumptions -> pure (Right concM)+ Left e -> pure (Left (W4C.GroundingFailure e))+ Right _ -> pure (Left W4C.MultipleModels)+ _ <- CB.popAssumptionFrame bak frm+ pure res++---------------------------------------------------------------------+-- * 'concToSym' -- | Function for re-symbolizing an intrinsic type type IntrinsicConcToSymFn :: Symbol -> Type
src/Lang/Crucible/Simulator/BoundedExec.hs view
@@ -183,7 +183,7 @@ Bool {- ^ Produce a proof obligation when resources are exhausted? -} -> IO (GenericExecutionFeature sym) boundedExecFeature getLoopBounds generateSideConditions =- do gvRef <- newIORef (error "Global variable for BoundedExecFrameData not initialized")+ do gvRef <- newIORef Nothing return $ GenericExecutionFeature $ onStep gvRef where@@ -202,48 +202,52 @@ } checkBackedge ::- IORef BoundedExecGlobal ->+ IORef (Maybe BoundedExecGlobal) -> Some (BlockID blocks) -> BlockID blocks tgt_args -> SymGlobalState sym -> IO (SymGlobalState sym, Maybe Word64)- checkBackedge gvRef (Some bid_curr) bid_tgt globals =- do gv <- readIORef gvRef- case fromMaybe [] (lookupGlobal gv globals) of- ( Right fbd : rest ) ->- do let id_curr = Ctx.indexVal (blockIDIndex bid_curr)- let id_tgt = Ctx.indexVal (blockIDIndex bid_tgt)- let m = frameWtoMap fbd- case (Map.lookup id_curr m, Map.lookup id_tgt m) of- (Just (cx, _cd), Just (tx, td)) | tx <= cx ->- do let cs = frameBoundCounts fbd- let (cs', q) = incrementBoundCount cs td- let fbd' = fbd{ frameBoundCounts = cs' }- let globals' = insertGlobal gv (Right fbd' : rest) globals- if q > frameBoundLimit fbd then- return (globals', Just (frameBoundLimit fbd))- else- return (globals', Nothing)-- _ -> return (globals, Nothing)- _ -> return (globals, Nothing)+ checkBackedge gvRef (Some bid_curr) bid_tgt globals = do+ let err = panic "checkBackedge" ["Global not initialized"]+ currGv <- readIORef gvRef+ let gv = fromMaybe err currGv+ case fromMaybe [] (lookupGlobal gv globals) of+ (Right fbd : rest) -> do+ let id_curr = Ctx.indexVal (blockIDIndex bid_curr)+ let id_tgt = Ctx.indexVal (blockIDIndex bid_tgt)+ let m = frameWtoMap fbd+ case (Map.lookup id_curr m, Map.lookup id_tgt m) of+ (Just (cx, _cd), Just (tx, td)) | tx <= cx -> do+ let cs = frameBoundCounts fbd+ let (cs', q) = incrementBoundCount cs td+ let fbd' = fbd{frameBoundCounts = cs'}+ let globals' = insertGlobal gv (Right fbd' : rest) globals+ if q > frameBoundLimit fbd+ then+ return (globals', Just (frameBoundLimit fbd))+ else+ return (globals', Nothing)+ _ -> return (globals, Nothing)+ _ -> return (globals, Nothing) modifyStackState ::- IORef BoundedExecGlobal ->+ IORef (Maybe BoundedExecGlobal) -> (SimState p sym ext rtp f args -> ExecState p sym ext rtp) -> SimState p sym ext rtp f args -> ([Either FunctionName FrameBoundData] -> [Either FunctionName FrameBoundData]) -> IO (ExecutionFeatureResult p sym ext rtp)- modifyStackState gvRef mkSt st f =- do gv <- readIORef gvRef- let xs = case lookupGlobal gv (st ^. stateGlobals) of- Nothing -> error "bounded execution global not defined!"- Just v -> v- let st' = st & stateGlobals %~ insertGlobal gv (f xs)- return (ExecutionFeatureModifiedState (mkSt st'))+ modifyStackState gvRef mkSt st f = do + currGv <- readIORef gvRef+ let err = panic "modifyStackState" ["Global variable not initialized"]+ let gv = fromMaybe err currGv+ let xs = case lookupGlobal gv (st ^. stateGlobals) of+ Nothing -> panic "modifyStackState" ["Global variable not defined!"]+ Just v -> v+ let st' = st & stateGlobals %~ insertGlobal gv (f xs)+ return (ExecutionFeatureModifiedState (mkSt st')) onTransition ::- IORef BoundedExecGlobal ->+ IORef (Maybe BoundedExecGlobal) -> BlockID blocks tgt_args -> ControlResumption p sym ext rtp (CrucibleLang blocks ret) -> SimState p sym ext rtp (CrucibleLang blocks ret) ('Just a) ->@@ -264,16 +268,21 @@ Nothing -> return (ExecutionFeatureModifiedState (ControlTransferState res st')) onStep ::- IORef BoundedExecGlobal ->+ IORef (Maybe BoundedExecGlobal) -> ExecState p sym ext rtp -> IO (ExecutionFeatureResult p sym ext rtp) onStep gvRef = \case InitialState simctx globals ah ret cont -> do let halloc = simHandleAllocator simctx- gv <- freshGlobalVar halloc (Text.pack "BoundedExecFrameData") knownRepr- writeIORef gvRef gv- let globals' = insertGlobal gv [Left "_init"] globals+ currGv <- readIORef gvRef+ ngv <- case currGv of + Nothing -> do + gv <- freshGlobalVar halloc (Text.pack "BoundedExecFrameData") knownRepr+ writeIORef gvRef (Just gv)+ pure gv+ Just gv -> pure gv+ let globals' = insertGlobal ngv [Left "_init"] globals let simctx' = simctx{ ctxIntrinsicTypes = MapF.insert (knownSymbol @"BoundedExecFrameData") IntrinsicMuxFn (ctxIntrinsicTypes simctx) } return (ExecutionFeatureModifiedState (InitialState simctx' globals' ah ret cont))
src/Lang/Crucible/Simulator/BoundedRecursion.hs view
@@ -81,26 +81,28 @@ IO (GenericExecutionFeature sym) boundedRecursionFeature getRecursionBound generateSideConditions =- do gvRef <- newIORef (error "Global variable for BoundedRecursionData not initialized")+ do gvRef <- newIORef Nothing return $ GenericExecutionFeature $ onStep gvRef where popFrame ::- IORef BoundedRecursionGlobal ->+ IORef (Maybe BoundedRecursionGlobal) -> (SimState p sym ext rtp f args -> ExecState p sym ext rtp) -> SimState p sym ext rtp f args -> IO (ExecutionFeatureResult p sym ext rtp)- popFrame gvRef mkSt st =- do gv <- readIORef gvRef- case lookupGlobal gv (st ^. stateGlobals) of- Nothing -> panic "bounded recursion" ["global not defined!"]- Just [] -> panic "bounded recursion" ["pop on empty stack!"]- Just (_:xs) ->- do let st' = st & stateGlobals %~ insertGlobal gv xs- return (ExecutionFeatureModifiedState (mkSt st'))+ popFrame gvRef mkSt st = do+ currGv <- readIORef gvRef+ let err = panic "bounded recursion" ["gv not initialized"]+ let gv = fromMaybe err currGv+ case lookupGlobal gv (st ^. stateGlobals) of+ Nothing -> panic "bounded recursion" ["global not defined!"]+ Just [] -> panic "bounded recursion" ["pop on empty stack!"]+ Just (_ : xs) -> do+ let st' = st & stateGlobals %~ insertGlobal gv xs+ return (ExecutionFeatureModifiedState (mkSt st')) pushFrame ::- IORef BoundedRecursionGlobal ->+ IORef (Maybe BoundedRecursionGlobal) -> (BoundedRecursionMap -> BoundedRecursionMap -> [BoundedRecursionMap] -> [BoundedRecursionMap]) -> SomeHandle -> (SimState p sym ext rtp f args -> ExecState p sym ext rtp) ->@@ -109,28 +111,31 @@ pushFrame gvRef rebuildStack h mkSt st = stateSolverProof st $ do let sym = st^.stateSymInterface let simCtx = st^.stateContext- gv <- readIORef gvRef+ currGv <- readIORef gvRef+ let err = panic "pushFrame" ["Uninitialized global!"]+ let gv = fromMaybe err currGv case lookupGlobal gv (st ^. stateGlobals) of Nothing -> panic "bounded recursion" ["global not defined!"] Just [] -> panic "bounded recursion" ["empty stack!"]- Just (x:xs) ->- do mb <- getRecursionBound h- let v = 1 + fromMaybe 0 (Map.lookup h x)- case mb of- Just b | v > b ->- do loc <- getCurrentProgramLoc sym- let msg = ("reached maximum number of recursive calls to function " ++ show h ++ " (" ++ show b ++ ")")- let err = SimError loc (ResourceExhausted msg)- when generateSideConditions $ withBackend simCtx $ \bak ->- addProofObligation bak (LabeledPred (falsePred sym) err)- return (ExecutionFeatureNewState (AbortState (AssertionFailure err) st))- _ ->- do let x' = Map.insert h v x- let st' = st & stateGlobals %~ insertGlobal gv (rebuildStack x' x xs)- x' `seq` return (ExecutionFeatureModifiedState (mkSt st'))+ Just (x:xs) -> do + mb <- getRecursionBound h+ let v = 1 + fromMaybe 0 (Map.lookup h x)+ case mb of+ Just b | v > b -> do + loc <- getCurrentProgramLoc sym+ let msg = ("reached maximum number of recursive calls to function " ++ show h ++ " (" ++ show b ++ ")")+ let simerr = SimError loc (ResourceExhausted msg)+ when generateSideConditions $ withBackend simCtx $ \bak ->+ addProofObligation bak (LabeledPred (falsePred sym) simerr)+ return (ExecutionFeatureNewState (AbortState (AssertionFailure simerr) st))+ _ -> do + let x' = Map.insert h v x+ let st' = st & stateGlobals %~ insertGlobal gv (rebuildStack x' x xs)+ x' `seq` return (ExecutionFeatureModifiedState (mkSt st')) + onStep ::- IORef BoundedRecursionGlobal ->+ IORef (Maybe BoundedRecursionGlobal) -> ExecState p sym ext rtp -> IO (ExecutionFeatureResult p sym ext rtp) @@ -138,8 +143,13 @@ InitialState simctx globals ah ret cont -> do let halloc = simHandleAllocator simctx- gv <- freshGlobalVar halloc (Text.pack "BoundedRecursionData") knownRepr- writeIORef gvRef gv+ currGv <- readIORef gvRef + gv <- case currGv of + Just gv -> pure gv + Nothing -> do+ gv <- freshGlobalVar halloc (Text.pack "BoundedRecursionData") knownRepr+ writeIORef gvRef (Just gv)+ pure gv let simctx' = simctx{ ctxIntrinsicTypes = MapF.insert (knownSymbol @"BoundedRecursionData") IntrinsicMuxFn
src/Lang/Crucible/Simulator/CallFrame.hs view
@@ -281,7 +281,13 @@ FrameRetType (CrucibleLang b r) = r FrameRetType (OverrideLang r) = r -data SimFrame sym ext l (args :: Maybe (Ctx CrucibleType)) where+-- | A frame on the stack.+--+-- Type parameters:+--+-- - @f@: the type of the top frame ('CrucibleLang' or 'OverrideLang')+-- - @args@: arguments; 'Just' for call frames, 'Nothing' for a return frame+data SimFrame sym ext f (args :: Maybe (Ctx CrucibleType)) where -- | Custom code to execute, typically for "overrides" OF :: !(OverrideFrame sym ret args) -> SimFrame sym ext (OverrideLang ret) ('Just args)
src/Lang/Crucible/Simulator/ExecutionTree.hs view
@@ -30,6 +30,7 @@ {-# LANGUAGE PolyKinds #-} {-# LANGUAGE RankNTypes #-} {-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE StandaloneKindSignatures #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# OPTIONS_GHC -fprint-explicit-kinds -Wall #-}@@ -68,8 +69,12 @@ , ResolvedCall(..) , resolvedCallHandle , execResultContext+ , setExecResultContext , execStateContext+ , setExecStateContext , execStateSimState+ , execResultGlobals+ , execStateGlobals -- * Simulator context trees -- ** Main context data structures@@ -174,8 +179,14 @@ ------------------------------------------------------------------------ -- GlobalPair --- | A value of some type 'v' together with a global state.-data GlobalPair sym (v :: Type) =+-- | A value of some type @v@ together with a global state.+--+-- Type parameters:+--+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @v@: type of the value+type GlobalPair :: Type -> Type -> Type+data GlobalPair sym v = GlobalPair { _gpValue :: !v , _gpGlobals :: !(SymGlobalState sym)@@ -194,7 +205,15 @@ -- TopFrame -- | The currently-executing frame plus the global state associated with it.-type TopFrame sym ext f a = GlobalPair sym (SimFrame sym ext f a)+--+-- Type parameters:+--+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+-- - @f@: the type of the top frame ('CrucibleLang' or 'OverrideLang')+-- - @args@: arguments to this frame (see 'SimFrame')+type TopFrame :: Type -> Type -> Type -> Maybe (Ctx CrucibleType) -> Type+type TopFrame sym ext f args = GlobalPair sym (SimFrame sym ext f args) -- | Access the Crucible call frame inside a 'TopFrame'. crucibleTopFrame ::@@ -222,6 +241,12 @@ -- path might abort because it became infeasible (inconsistent path -- conditions), because the program called an exit primitive, or -- because of a true error condition (e.g., a failed assertion).+--+-- Type parameters:+--+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+type AbortedResult :: Type -> Type -> Type data AbortedResult sym ext where -- | A single aborted execution with the execution state at time of the abort and the reason. AbortedExec ::@@ -229,9 +254,10 @@ !(GlobalPair sym (SimFrame sym ext l args)) -> AbortedResult sym ext - -- | An aborted execution that was ended by a call to 'exit'.+ -- | An aborted execution that was ended by a call to @exit@. AbortedExit :: !ExitCode ->+ !(GlobalPair sym (SimFrame sym ext l args)) -> AbortedResult sym ext -- | Two separate threads of execution aborted after a symbolic branch,@@ -248,7 +274,10 @@ -- | This represents an execution frame where its frame type -- and arguments have been hidden.-data SomeFrame (f :: fk -> argk -> Type) = forall l a . SomeFrame !(f l a)+--+-- The type parameter @f@ is usually 'SimFrame'.+type SomeFrame :: forall fk argk. (fk -> argk -> Type) -> Type+data SomeFrame f = forall l a . SomeFrame !(f l a) -- | Return the program locations of all the Crucible frames. filterCrucibleFrames :: SomeFrame (SimFrame sym ext) -> Maybe ProgramLoc@@ -260,7 +289,9 @@ arFrames h (AbortedExec e p) = (\(SomeFrame f') -> AbortedExec e (p & gpValue .~ f')) <$> h (SomeFrame (p^.gpValue))-arFrames _ (AbortedExit ec) = pure (AbortedExit ec)+arFrames h (AbortedExit ec p) =+ (\(SomeFrame f') -> AbortedExit ec (p & gpValue .~ f'))+ <$> h (SomeFrame (p^.gpValue)) arFrames h (AbortedBranch predicate loc r s) = AbortedBranch predicate loc <$> arFrames h r <*> arFrames h s@@ -289,7 +320,14 @@ -- 'PartialResult', then some of the computation paths that led to -- this result aborted for some reason, and the resulting value is -- only defined if the associated condition is true.-data PartialResult sym ext (v :: Type)+--+-- Type parameters:+--+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+-- - @v@: Type of the result of the computation+type PartialResult :: Type -> Type -> Type -> Type+data PartialResult sym ext v {- | A 'TotalRes' indicates that the the global pair is always defined. -} = TotalRes !(GlobalPair sym v)@@ -318,6 +356,14 @@ {-# INLINE partialValue #-} -- | The result of resolving a function call.+--+-- Type parameters:+--+-- - @p@: see 'cruciblePersonality'+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+-- - @ret@: 'CrucibleType' of the return value+type ResolvedCall :: Type -> Type -> Type -> CrucibleType -> Type data ResolvedCall p sym ext ret where -- | A resolved function call to an override. OverrideCall ::@@ -341,15 +387,23 @@ -- | Executions that have completed either due to (partial or total) -- successful completion or by some abort condition.-data ExecResult p sym ext (r :: Type)+--+-- Type parameters:+--+-- - @p@: see 'cruciblePersonality'+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+-- - @rtp@: type of the return value+type ExecResult :: Type -> Type -> Type -> Type -> Type+data ExecResult p sym ext rtp = -- | At least one execution path resulted in some return result.- FinishedResult !(SimContext p sym ext) !(PartialResult sym ext r)+ FinishedResult !(SimContext p sym ext) !(PartialResult sym ext rtp) -- | All execution paths resulted in an abort condition, and there is -- no result to return. | AbortedResult !(SimContext p sym ext) !(AbortedResult sym ext) -- | An execution stopped somewhere in the middle of a run because -- a timeout condition occurred.- | TimeoutResult !(ExecState p sym ext r)+ | TimeoutResult !(ExecState p sym ext rtp) execResultContext :: ExecResult p sym ext r -> SimContext p sym ext@@ -357,6 +411,16 @@ execResultContext (AbortedResult ctx _) = ctx execResultContext (TimeoutResult exst) = execStateContext exst +setExecResultContext ::+ SimContext p sym ext ->+ ExecResult p sym ext r ->+ ExecResult p sym ext r+setExecResultContext ctx =+ \case+ FinishedResult _ x -> FinishedResult ctx x+ AbortedResult _ x -> AbortedResult ctx x+ TimeoutResult execState -> TimeoutResult (setExecStateContext ctx execState)+ execStateContext :: ExecState p sym ext r -> SimContext p sym ext execStateContext = \case ResultState res -> execResultContext res@@ -372,6 +436,24 @@ BranchMergeState _ st -> st^.stateContext InitialState stctx _ _ _ _ -> stctx +setExecStateContext ::+ SimContext p sym ext ->+ ExecState p sym ext r ->+ ExecState p sym ext r+setExecStateContext ctx = \case+ ResultState res -> ResultState (setExecResultContext ctx res)+ AbortState x st -> AbortState x (st & stateContext .~ ctx)+ UnwindCallState x y st -> UnwindCallState x y (st & stateContext .~ ctx)+ CallState x y st -> CallState x y (st & stateContext .~ ctx)+ TailCallState x y st -> TailCallState x y (st & stateContext .~ ctx)+ ReturnState x y z st -> ReturnState x y z (st & stateContext .~ ctx)+ ControlTransferState x st -> ControlTransferState x (st & stateContext .~ ctx)+ RunningState x st -> RunningState x (st & stateContext .~ ctx)+ SymbolicBranchState u v x y st -> SymbolicBranchState u v x y (st & stateContext .~ ctx)+ OverrideState x st -> OverrideState x (st & stateContext .~ ctx)+ BranchMergeState x st -> BranchMergeState x (st & stateContext .~ ctx)+ InitialState _ u v x y -> InitialState ctx u v x y+ execStateSimState :: ExecState p sym ext r -> Maybe (SomeSimState p sym ext r) execStateSimState = \case@@ -388,6 +470,66 @@ BranchMergeState _ st -> Just (SomeSimState st) InitialState _ _ _ _ _ -> Nothing +abortedGlobals ::+ Monad f =>+ -- | How to handle 'AbortedBranch'.+ --+ -- Common options include concretizing the 'Pred' or returning a partial+ -- result (e.g., 'Nothing').+ (ProgramLoc -> Pred sym -> SymGlobalState sym -> SymGlobalState sym -> f (SymGlobalState sym)) ->+ AbortedResult sym ext ->+ f (SymGlobalState sym)+abortedGlobals handleBranch =+ \case+ AbortedExec _ gp -> pure (gp ^. gpGlobals)+ AbortedExit _ gp -> pure (gp ^. gpGlobals)+ AbortedBranch loc p rl rr -> do+ l <- abortedGlobals handleBranch rl+ r <- abortedGlobals handleBranch rr+ handleBranch loc p l r++-- | Extract the 'SymGlobalState' from an 'ExecResult'.+execResultGlobals ::+ Monad f =>+ -- | How to handle 'AbortedBranch'.+ --+ -- Common options include concretizing the 'Pred' or returning a partial+ -- result (e.g., 'Nothing').+ (SimContext p sym ext -> ProgramLoc -> Pred sym -> SymGlobalState sym -> SymGlobalState sym -> f (SymGlobalState sym)) ->+ ExecResult p sym ext rtp ->+ f (SymGlobalState sym)+execResultGlobals handleBranch =+ \case+ FinishedResult _ctx partial -> pure (partial ^. partialValue . gpGlobals)+ TimeoutResult st -> execStateGlobals handleBranch st+ AbortedResult simCtx aborted ->+ abortedGlobals (handleBranch simCtx) aborted++-- | Extract the 'SymGlobalState' from an 'ExecState'.+execStateGlobals ::+ Monad f =>+ -- | How to handle 'AbortedBranch'.+ --+ -- Common options include concretizing the 'Pred' or returning a partial+ -- result (e.g., 'Nothing').+ (SimContext p sym ext -> ProgramLoc -> Pred sym -> SymGlobalState sym -> SymGlobalState sym -> f (SymGlobalState sym)) ->+ ExecState p sym ext rtp ->+ f (SymGlobalState sym)+execStateGlobals handleBranch =+ \case+ AbortState _ st -> pure (st ^. stateGlobals)+ BranchMergeState _ st -> pure (st ^. stateGlobals)+ CallState _ _ st -> pure (st ^. stateGlobals)+ ControlTransferState _ st -> pure (st ^. stateGlobals)+ InitialState _ globState _ _ _ -> pure globState+ OverrideState _ st -> pure (st ^. stateGlobals)+ ResultState r -> execResultGlobals handleBranch r+ ReturnState _ _ _ st -> pure (st ^. stateGlobals)+ RunningState _ st -> pure (st ^. stateGlobals)+ SymbolicBranchState _ _ _ _ st -> pure (st ^. stateGlobals)+ TailCallState _ _ st -> pure (st ^. stateGlobals)+ UnwindCallState _ _ st -> pure (st ^. stateGlobals)+ ----------------------------------------------------------------------- -- ExecState @@ -395,7 +537,15 @@ -- Crucible program. The Crucible simulator executes by transitioning -- between these different states until it results in a 'ResultState', -- indicating the program has completed.-data ExecState p sym ext (rtp :: Type)+--+-- Type parameters:+--+-- - @p@: see 'cruciblePersonality'+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+-- - @rtp@: type of the return value+type ExecState :: Type -> Type -> Type -> Type -> Type+data ExecState p sym ext rtp {- | The 'ResultState' is used to indicate that the program has completed. -} = ResultState !(ExecResult p sym ext rtp)@@ -532,11 +682,27 @@ -- | An action which will construct an 'ExecState' given a current -- 'SimState'. Such continuations correspond to a single transition -- of the simulator transition system.-type ExecCont p sym ext r f a =- ReaderT (SimState p sym ext r f a) IO (ExecState p sym ext r)+--+-- Type parameters:+--+-- - @p@: see 'cruciblePersonality'+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+-- - @rtp@: type of the return value+-- - @f@: the type of the top frame ('CrucibleLang' or 'OverrideLang')+-- - @args@: arguments to the current frame (see 'SimFrame')+type ExecCont :: Type -> Type -> Type -> Type -> Type -> Maybe (Ctx.Ctx CrucibleType) -> Type+type ExecCont p sym ext rtp f args =+ ReaderT (SimState p sym ext rtp f args) IO (ExecState p sym ext rtp) -- | Some additional information attached to a @RunningState@ -- that indicates how we got to this running state.+--+-- Type parameters:+--+-- - @blocks@: types of variables in scope from previous blocks+-- - @args@: arguments to this block+type RunningStateInfo :: Ctx (Ctx CrucibleType) -> Ctx CrucibleType -> Type data RunningStateInfo blocks args -- | This indicates that we are now in a @RunningState@ because -- we transferred execution to the start of a basic block.@@ -554,6 +720,12 @@ -- | A 'ResolvedJump' is a block label together with a collection of -- actual arguments that are expected by that block. These data -- are sufficient to actually transfer control to the named label.+--+-- Type parameters:+--+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @blocks@: types of variables in scope from previous blocks+type ResolvedJump :: Type -> Ctx (Ctx CrucibleType) -> Type data ResolvedJump sym blocks = forall args. ResolvedJump@@ -564,6 +736,15 @@ -- (while it first explores other paths), a 'ControlResumption' -- indicates what actions must later be taken in order to resume -- execution of that path.+--+-- Type parameters:+--+-- - @p@: see 'cruciblePersonality'+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+-- - @rtp@: type of the return value+-- - @f@: the type of the top frame ('CrucibleLang' or 'OverrideLang')+type ControlResumption :: Type -> Type -> Type -> Type -> Type -> Type data ControlResumption p sym ext rtp f where {- | When resuming a paused frame with a @ContinueResumption@, no special work needs to be done, simply begin executing@@ -603,6 +784,15 @@ -- while other paths are explored. It consists of a (potentially partial) -- 'SimFrame' together with some information about how to resume execution -- of that frame.+--+-- Type parameters:+--+-- - @p@: see 'cruciblePersonality'+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+-- - @rtp@: type of the return value+-- - @f@: the type of the top frame ('CrucibleLang' or 'OverrideLang')+type PausedFrame :: Type -> Type -> Type -> Type -> Type -> Type data PausedFrame p sym ext rtp f = forall old_args. PausedFrame@@ -619,6 +809,16 @@ -- stored in the 'VFFCompletePath' state until the second path also -- reaches its merge point. The two paths will then be merged, -- and execution will continue beyond the merge point.+--+-- Type parameters:+--+-- - @p@: see 'cruciblePersonality'+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+-- - @rtp@: type of the return value+-- - @f@: the type of the top frame ('CrucibleLang' or 'OverrideLang')+-- - @args@: arguments to this frame (see 'SimFrame')+type VFFOtherPath :: Type -> Type -> Type -> Type -> Type -> Maybe (Ctx CrucibleType) -> Type data VFFOtherPath p sym ext ret f args {- | This corresponds the a path that still needs to be analyzed. -}@@ -639,20 +839,17 @@ of the branching structure of a program. The 'ValueFromFrame' states correspond to the structure of symbolic branching that occurs within a single function call. -The type parameters have the following meanings:-- * @p@ is the personality of the simulator (i.e., custom user state).-- * @sym@ is the simulator backend being used.-- * @ext@ specifies what extensions to the Crucible language are enabled-- * @ret@ is the global return type of the entire execution.+Type parameters: - * @f@ is the type of the top frame.+- @p@: see 'cruciblePersonality'+- @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+- @ext@: language extension, see "Lang.Crucible.CFG.Extension"+- @ret@: global return type of the entire execution+- @f@: the type of the top frame ('CrucibleLang' or 'OverrideLang') -} -data ValueFromFrame p sym ext (ret :: Type) (f :: Type)+type ValueFromFrame :: Type -> Type -> Type -> Type -> Type -> Type+data ValueFromFrame p sym ext ret f {- | We are working on a branch; this could be the first or the second of both branches (see the 'VFFOtherPath' field). -}@@ -715,6 +912,7 @@ -- occur or not. If the context sill expects a merge, we need to -- take some actions to indicate that the merge will not occur; -- otherwise there is no special work to be done.+type PendingPartialMerges :: Type data PendingPartialMerges = {- | Don't indicate an abort condition in the context -} NoNeedToAbort@@ -728,19 +926,14 @@ of the branching structure of a program. The 'ValueFromValue' states correspond to stack call frames in a more traditional simulator environment. -The type parameters have the following meanings:-- * @p@ is the personality of the simulator (i.e., custom user state).-- * @sym@ is the simulator backend being used.-- * @ext@ specifies what extensions to the Crucible language are enabled-- * @ret@ is the global return type of the entire computation-- * @top_return@ is the return type of the top-most call on the stack.+- @p@: see 'cruciblePersonality'+- @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+- @ext@: language extension, see "Lang.Crucible.CFG.Extension"+- @ret@: global return type of the entire execution+- @top_return@: return type of the top-most call on the stack. -}-data ValueFromValue p sym ext (ret :: Type) (top_return :: CrucibleType)+type ValueFromValue :: Type -> Type -> Type -> Type -> CrucibleType -> Type+data ValueFromValue p sym ext ret top_return {- | 'VFVCall' denotes a call site in the outer context, and represents the point to which a function higher on the stack will@@ -851,23 +1044,18 @@ executing in a caller's context once a function call has completed and the return value is available. -The type parameters have the following meanings:-- * @ret@ is the type of the return value that is expected.-- * @p@ is the personality of the simulator (i.e., custom user state).-- * @sym@ is the simulator backend being used.-- * @ext@ specifies what extensions to the Crucible language are enabled.-- * @root@ is the global return type of the entire computation.-- * @f@ is the stack type of the caller.+Type parameters: - * @args@ is the type of the local variables in scope prior to the call.+- @ret@: the type of the return value that is expected+- @p@: see 'cruciblePersonality'+- @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+- @ext@: language extension, see "Lang.Crucible.CFG.Extension"+- @root@: global return type of the entire computation+- @f@: the frame type of the caller ('CrucibleLang' or 'OverrideLang')+- @args@: types of the local variables in scope prior to the call (see 'SimFrame') -}-data ReturnHandler (ret :: CrucibleType) p sym ext root f args where+type ReturnHandler :: CrucibleType -> Type -> Type -> Type -> Type -> Type -> Maybe (Ctx CrucibleType) -> Type+data ReturnHandler ret p sym ext root f args where {- | The 'ReturnToOverride' constructor indicates that the calling context is primitive code written directly in Haskell. -}@@ -899,13 +1087,25 @@ ------------------------------------------------------------------------ -- ActiveTree +type PartialResultFrame :: Type -> Type -> Type -> Maybe (Ctx CrucibleType) -> Type type PartialResultFrame sym ext f args = PartialResult sym ext (SimFrame sym ext f args) {- | An active execution tree contains at least one active execution. The data structure is organized so that the current execution- can be accessed rapidly. -}-data ActiveTree p sym ext root (f :: Type) args+ can be accessed rapidly.++ Type parameters:++ - @p@: see 'cruciblePersonality'+ - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+ - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+ - @root@: global return type of the entire computation+ - @f@: the frame type of the caller ('CrucibleLang' or 'OverrideLang')+-- - @args@: arguments to the current frame (see 'SimFrame')+-}+type ActiveTree :: Type -> Type -> Type -> Type -> Type -> Maybe (Ctx.Ctx CrucibleType) -> Type+data ActiveTree p sym ext root f args = ActiveTree { _actContext :: !(ValueFromFrame p sym ext root f) , _actResult :: !(PartialResultFrame sym ext f args)@@ -960,6 +1160,15 @@ -- SimContext -- | A definition of a function's semantics, given as a Haskell action.+--+-- Type parameters:+--+-- - @p@: see 'cruciblePersonality'+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+-- - @args@: types of arguments to the override+-- - @ret@: return type of the override+type Override :: Type -> Type -> Type -> Ctx CrucibleType -> CrucibleType -> Type data Override p sym ext (args :: Ctx CrucibleType) ret = Override { overrideName :: FunctionName , overrideHandler :: forall r. ExecCont p sym ext r (OverrideLang ret) ('Just args)@@ -968,16 +1177,39 @@ -- | State used to indicate what to do when function is called. A function -- may either be defined by writing a Haskell 'Override' or by giving -- a Crucible control-flow graph representation.-data FnState p sym ext (args :: Ctx CrucibleType) (ret :: CrucibleType)+--+-- Type parameters:+--+-- - @p@: see 'cruciblePersonality'+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+-- - @args@: argument types+-- - @ret@: return type+type FnState :: Type -> Type -> Type -> Ctx CrucibleType -> CrucibleType -> Type+data FnState p sym ext args ret = UseOverride !(Override p sym ext args ret) | forall blocks . UseCFG !(CFG ext blocks args ret) !(CFGPostdom blocks) -- | A map from function handles to their semantics.+--+-- Type parameters:+--+-- - @p@: see 'cruciblePersonality'+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+type FunctionBindings :: Type -> Type -> Type -> Type newtype FunctionBindings p sym ext = FnBindings { fnBindings :: FnHandleMap (FnState p sym ext) } -- | The type of functions that interpret extension statements. These -- have access to the main simulator state, and can make fairly arbitrary -- changes to it.+--+-- Type parameters:+--+-- - @p@: see 'cruciblePersonality'+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+type EvalStmtFunc :: Type -> Type -> Type -> Type type EvalStmtFunc p sym ext = forall rtp blocks r ctx tp'. StmtExtension ext (RegEntry sym) tp' ->@@ -987,6 +1219,13 @@ -- | In order to start executing a simulator, one must provide an implementation -- of the extension syntax. This includes an evaluator for the added -- expression forms, and an evaluator for the added statement forms.+--+-- Type parameters:+--+-- - @p@: see 'cruciblePersonality'+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+type ExtensionImpl :: Type -> Type -> Type -> Type data ExtensionImpl p sym ext = ExtensionImpl { extensionEval ::@@ -1010,8 +1249,17 @@ , extensionExec = \case } +type IsSymInterfaceProof :: Type -> Type -> Type type IsSymInterfaceProof sym a = (IsSymInterface sym => a) -> a +-- | Some kind of 'Integer' to be collected during execution.+--+-- Type parameters:+--+-- - @p@: see 'cruciblePersonality'+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+type Metric :: Type -> Type -> Type -> Type newtype Metric p sym ext = Metric { runMetric :: forall rtp f args. SimState p sym ext rtp f args -> IO Integer@@ -1021,7 +1269,14 @@ -- remains persistent across all symbolic simulator actions. In particular, it -- is not rolled back when the simulator returns previous program points to -- explore additional paths, etc.-data SimContext (personality :: Type) (sym :: Type) (ext :: Type)+--+-- Type parameters:+--+-- - @p@: see 'cruciblePersonality'+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+type SimContext :: Type -> Type -> Type -> Type+data SimContext p sym ext = SimContext { _ctxBackend :: !(SomeBackend sym) -- | Class dictionary for @'IsSymInterface' sym@ , ctxSolverProof :: !(forall a . IsSymInterfaceProof sym a)@@ -1030,10 +1285,11 @@ , simHandleAllocator :: !(HandleAllocator) -- | Handle to write messages to. , printHandle :: !Handle- , extensionImpl :: ExtensionImpl personality sym ext- , _functionBindings :: !(FunctionBindings personality sym ext)- , _cruciblePersonality :: !personality- , _profilingMetrics :: !(Map Text (Metric personality sym ext))+ , extensionImpl :: ExtensionImpl p sym ext+ , _functionBindings :: !(FunctionBindings p sym ext)+ -- | See 'cruciblePersonality'.+ , _cruciblePersonality :: !p+ , _profilingMetrics :: !(Map Text (Metric p sym ext)) } -- | Create a new 'SimContext' with the given bindings.@@ -1075,7 +1331,30 @@ functionBindings :: Lens' (SimContext p sym ext) (FunctionBindings p sym ext) functionBindings = lens _functionBindings (\s v -> s { _functionBindings = v }) --- | Access the custom user-state inside the 'SimContext'.+-- | Custom state inside the 'SimContext'.+--+-- Crucible itself is entirely polymorphic over @p@. Downstream applications can+-- instantiate it to any sort of state that they would like to associate with a+-- 'SimContext'.+--+-- For example, applications based on+-- [@macaw-symbolic@](https://github.com/GaloisInc/macaw/tree/master/symbolic)+-- can instantiate this to a structure holding enough information to perform+-- incremental code discovery. See @ambient-verifier@'s+-- [@AmbientSimulatorState@](https://github.com/GaloisInc/ambient-verifier/blob/eab04abb9750825a25ec0cbe0379add63f05f6c6/src/Ambient/Extensions.hs#L1092-1137).+--+-- Code that needs to store some state in the personality but doesn\'t wish to+-- fix a particular type can use the \"classy lenses\" approach, e.g.,+--+-- @+-- class HasFooState p where+-- fooState :: `Lens'` p FooState+-- @+--+-- For examples of this approach, see+--+-- * [@HasMacawLazySimulatorState@](https://github.com/GaloisInc/macaw/blob/cbec559b428fdd194398d07fc08c8c570a1d3bab/symbolic/src/Data/Macaw/Symbolic/MemOps.hs#L385-L394)+-- * [@HasGreaseSimulatorState@](https://github.com/GaloisInc/grease/blob/a50d54d2f414d15974dcf2d21654fbfe3527f0fa/src/Grease/Macaw/SimulatorState.hs#L90-L97) cruciblePersonality :: Lens' (SimContext p sym ext) p cruciblePersonality = lens _cruciblePersonality (\s v -> s{ _cruciblePersonality = v }) @@ -1094,6 +1373,13 @@ -- may be desirable to take additional or alternate actions on abort -- events; in which case, the library user may replace the default -- abort handler with their own.+--+-- Type parameters:+--+-- - @p@: see 'cruciblePersonality'+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+-- - @rtp@: type of the return value newtype AbortHandler p sym ext rtp = AH { runAH :: forall (l :: Type) args. AbortExecReason ->@@ -1103,12 +1389,23 @@ -- | A SimState contains the execution context, an error handler, and -- the current execution tree. It captures the entire state -- of the symbolic simulator.-data SimState p sym ext rtp f (args :: Maybe (Ctx.Ctx CrucibleType))+--+-- Type parameters:+--+-- - @p@: see 'cruciblePersonality'+-- - @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- - @ext@: language extension, see "Lang.Crucible.CFG.Extension"+-- - @rtp@: type of the return value+-- - @f@: the type of the top frame ('CrucibleLang' or 'OverrideLang')+-- - @args@: arguments to the current frame (see 'SimFrame')+type SimState :: Type -> Type -> Type -> Type -> Type -> Maybe (Ctx.Ctx CrucibleType) -> Type+data SimState p sym ext rtp f args = SimState { _stateContext :: !(SimContext p sym ext) , _abortHandler :: !(AbortHandler p sym ext rtp) , _stateTree :: !(ActiveTree p sym ext rtp f args) } +type SomeSimState :: Type -> Type -> Type -> Type -> Type data SomeSimState p sym ext rtp = forall f args. SomeSimState !(SimState p sym ext rtp f args)
src/Lang/Crucible/Simulator/Operations.hs view
@@ -125,8 +125,8 @@ AbortedResult sym ext -> AbortedResult sym ext -> AbortedResult sym ext-mergeAbortedResult _ _ (AbortedExit ec) _ = AbortedExit ec-mergeAbortedResult _ _ _ (AbortedExit ec) = AbortedExit ec+mergeAbortedResult _ _ ae@(AbortedExit {}) _ = ae+mergeAbortedResult _ _ _ ae@(AbortedExit {}) = ae mergeAbortedResult loc pred q r = AbortedBranch loc pred q r mergePartialAndAbortedResult ::
src/Lang/Crucible/Simulator/OverrideSim.hs view
@@ -75,8 +75,10 @@ , useIntrinsic -- * Typed overrides , TypedOverride(..)+ , typedOverride , SomeTypedOverride(..) , runTypedOverride+ , bindTypedOverride -- * Re-exports , Lang.Crucible.Simulator.ExecutionTree.Override ) where@@ -89,7 +91,7 @@ import Control.Monad.Reader (ReaderT(..)) import Control.Monad.ST import Control.Monad.State.Strict (StateT(..))-import Data.List (foldl')+import qualified Data.Foldable as Foldable import qualified Data.Parameterized.Context as Ctx import Data.Proxy import qualified Data.Text as T@@ -135,7 +137,7 @@ -- -- Type parameters: ----- * 'p' the "personality", i.e. user-defined state parameterized by @sym@+-- * 'p' see 'Lang.Crucible.Simulator.ExecutionTree.cruciblePersonality' -- * 'sym' the symbolic backend -- * 'ext' the syntax extension ("Lang.Crucible.CFG.Extension") -- * 'rtp' global return type@@ -156,8 +158,14 @@ -- | Exit from the current execution by ignoring the continuation -- and immediately returning an aborted execution result. exitExecution :: IsSymInterface sym => ExitCode -> OverrideSim p sym ext rtp args r a-exitExecution ec = Sim $ StateContT $ \_c s ->- return $ ResultState $ AbortedResult (s^.stateContext) (AbortedExit ec)+exitExecution ec = do+ ActiveTree _ctx ar0 <- use stateTree+ let gp =+ case ar0 of+ TotalRes e -> e+ PartialRes _loc _pred ex _ar1 -> ex+ Sim $ StateContT $ \_c s ->+ return $ ResultState $ AbortedResult (s^.stateContext) (AbortedExit ec gp) bindOverrideSim :: OverrideSim p sym ext rtp args r a ->@@ -627,7 +635,7 @@ -- | Build a map of function bindings from a list of -- handle/binding pairs. fnBindingsFromList :: [FnBinding p sym ext] -> FunctionBindings p sym ext-fnBindingsFromList = foldl' insertFnBinding $ FnBindings emptyHandleMap+fnBindingsFromList = Foldable.foldl' insertFnBinding $ FnBindings emptyHandleMap registerFnBinding :: FnBinding p sym ext -> OverrideSim p sym ext rtp a r ()@@ -690,6 +698,21 @@ , typedOverrideRet :: TypeRepr ret } +-- | Create a 'TypedOverride' with a statically-known signature+typedOverride ::+ KnownRepr (Ctx.Assignment TypeRepr) args =>+ KnownRepr TypeRepr ret =>+ (forall rtp args' ret'.+ Ctx.Assignment (RegValue' sym) args ->+ OverrideSim p sym ext rtp args' ret' (RegValue sym ret)) ->+ TypedOverride p sym ext args ret+typedOverride handler =+ TypedOverride+ { typedOverrideHandler = handler+ , typedOverrideArgs = knownRepr+ , typedOverrideRet = knownRepr+ }+ -- | A 'TypedOverride' with the type parameters @args@, @ret@ existentially -- quantified data SomeTypedOverride p sym ext =@@ -703,3 +726,11 @@ runTypedOverride nm typedOvr = mkOverride' nm (typedOverrideRet typedOvr) $ do RegMap args <- getOverrideArgs typedOverrideHandler typedOvr (fmapFC (RV . regValue) args)++-- | Bind a 'TypedOverride' to a 'FnHandle'+bindTypedOverride ::+ FnHandle args ret ->+ TypedOverride p sym ext args ret ->+ OverrideSim p sym ext rtp args' ret' ()+bindTypedOverride hdl ov =+ bindFnHandle hdl (UseOverride (runTypedOverride (handleName hdl) ov))
src/Lang/Crucible/Simulator/PathSatisfiability.hs view
@@ -5,7 +5,7 @@ -- at symbolic branch points -- Copyright : (c) Galois, Inc 2018 -- License : BSD3--- Maintainer : Rob Dockins <rdockins@galois.com>+-- Maintainer : Ryan Scott <rscott@galois.com>, Langston Barrett <langston@galois.com> -- Stability : provisional ------------------------------------------------------------------------ {-# LANGUAGE DataKinds #-}@@ -54,14 +54,20 @@ (Just (ConcreteBool True)) ] -+-- | Prune unsatisfiable execution traces during simulation.+--+-- At every symbolic branch point, an SMT solver is queried to determine if one+-- or both symbolic branches are unsatisfiable. Only branches with satisfiable+-- branch conditions are explored. pathSatisfiabilityFeature :: forall sym. IsSymInterface sym => sym ->- (Maybe ProgramLoc -> Pred sym -> IO BranchResult)- {- ^ An action for considering the satisfiability of a predicate.- In the current state of the symbolic interface, indicate what- we can determine about the given predicate. -} ->+ -- | An action for considering the satisfiability of a predicate. In the+ -- current state of the symbolic interface, indicate what we can determine+ -- about the given predicate.+ --+ -- Usually, this is set to 'Lang.Crucible.Backend.Online.considerSatisfiability'.+ (Maybe ProgramLoc -> Pred sym -> IO BranchResult) -> IO (GenericExecutionFeature sym) pathSatisfiabilityFeature sym considerSatisfiability = do tryExtendConfig pathSatOptions (getConfiguration sym)
+ src/Lang/Crucible/Simulator/RecordAndReplay.hs view
@@ -0,0 +1,365 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE FunctionalDependencies #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE StandaloneKindSignatures #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE TypeFamilies #-}++module Lang.Crucible.Simulator.RecordAndReplay (+ HasRecordState(..),+ RecordState,+ mkRecordState,+ HasReplayState(..),+ ReplayState,+ mkReplayState,+ recordTraceLength,+ replayTraceLength,+ RecordedTrace,+ getRecordedTrace,+ recordFeature,+ replayFeature,+ initialTrace,+ traceGlobal,+ emptyRecordedTrace+) where++import Control.Exception qualified as X+import Control.Lens ((%~), (&), (^.))+import Control.Lens qualified as Lens+import Data.Foldable qualified as F+import Data.Kind (Type)+import Data.Text qualified as Text+import Data.Sequence qualified as Seq+import Lang.Crucible.Backend qualified as CB+import Lang.Crucible.CFG.Core qualified as C+import Lang.Crucible.FunctionHandle qualified as C+import Lang.Crucible.Panic (panic)+import Lang.Crucible.Simulator qualified as C+import Lang.Crucible.Simulator.EvalStmt qualified as C+import Lang.Crucible.Simulator.ExecutionTree qualified as C+import Lang.Crucible.Simulator.GlobalState qualified as C+import Lang.Crucible.Simulator.SymSequence qualified as CSSS+import Lang.Crucible.Types qualified as CT+import What4.Interface qualified as W4+import What4.Partial qualified as W4P++-- | A trace consists of the 'W4.ProgramLoc's returned by+-- 'W4.getCurrentProgramLoc' in 'C.RunningState's during symbolic execution.+--+-- Intentionally not part of the API so as to keep the implementation abstract.+type TraceType = CT.SequenceType (CT.StringType W4.Unicode)++-- | Type parameters:+--+-- * @p@: see 'C.cruciblePersonality'+-- * @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- * @ext@: language extension, see "Lang.Crucible.CFG.Extension"+-- * @rtp@: type of the simulator return value+type RecordState :: Type -> Type -> Type -> Type -> Type+newtype RecordState p sym ext rtp+ = RecordState (C.GlobalVar TraceType)+ -- ^ constructor intentionally not exported++{- | A trace from 'recordFeature', processed and ready for consumption by+'replayFeature'.+-}+newtype RecordedTrace sym+ = RecordedTrace (C.RegValue sym TraceType)++-- | Type parameters:+--+-- * @p@: see 'C.cruciblePersonality'+-- * @sym@: instance of 'Lang.Crucible.Backend.IsSymInterface'+-- * @ext@: language extension, see "Lang.Crucible.CFG.Extension"+-- * @rtp@: type of the simulator return value+type ReplayState :: Type -> Type -> Type -> Type -> Type+data ReplayState p sym ext rtp+ = ReplayState+ { _traceGlobal :: (C.GlobalVar TraceType)+ , _initialTrace :: (RecordedTrace sym)+ }+ -- ^ constructor intentionally not exported+Lens.makeLenses ''ReplayState++-- | Constructor for 'RecordState'+mkRecordState ::+ C.HandleAllocator -> IO (RecordState p sym ext rtp)+mkRecordState halloc =+ RecordState <$> C.freshGlobalVar halloc "recordState" W4.knownRepr++-- | Constructor for 'ReplayState'+mkReplayState ::+ C.HandleAllocator -> RecordedTrace sym -> IO (ReplayState p sym ext rtp)+mkReplayState halloc rt =+ ReplayState <$> C.freshGlobalVar halloc "replayState" W4.knownRepr <*> pure rt++-- | A class for Crucible personality types @p@ which contain a+-- 'RecordState'. This execution feature is polymorphic over+-- 'RecordState' so that downstream users can supply their own+-- personality types that extend 'RecordState' further.+class HasRecordState p r sym ext rtp | p -> r sym ext rtp where+ recordState :: Lens.Lens' p (RecordState r sym ext rtp)++instance HasRecordState (RecordState p sym ext rtp) p sym ext rtp where+ recordState = id+ {-# INLINE recordState #-}++-- | A class for Crucible personality types @p@ which contain a+-- 'ReplayState'. This execution feature is polymorphic over+-- 'ReplayState' so that downstream users can supply their own+-- personality types that extend 'ReplayState' further.+class HasReplayState p r sym ext rtp | p -> r sym ext rtp where+ replayState :: Lens.Lens' p (ReplayState r sym ext rtp)++instance HasReplayState (ReplayState p sym ext rtp) p sym ext rtp where+ replayState = id+ {-# INLINE replayState #-}++data TraceGlobalNotDefined = TraceGlobalNotDefined++instance Show TraceGlobalNotDefined where+ show _ = "record and replay trace global not defined"++instance X.Exception TraceGlobalNotDefined++locAsStr ::+ W4.IsExprBuilder sym =>+ sym ->+ IO (C.RegValue sym (CT.StringType W4.Unicode))+locAsStr sym = do+ loc <- W4.getCurrentProgramLoc sym+ let txtLoc = Text.pack (show loc)+ W4.stringLit sym (W4.UnicodeLiteral txtLoc)++emptyRecordedTrace :: sym -> IO (RecordedTrace sym)+emptyRecordedTrace sym = RecordedTrace <$> CSSS.nilSymSequence sym++getRecordTrace ::+ HasRecordState p p sym ext rtp =>+ C.SimState p sym ext rtp f args ->+ Maybe (C.RegValue sym TraceType)+getRecordTrace simState = do+ let ctx = simState ^. C.stateContext+ let RecordState g = ctx ^. C.cruciblePersonality . recordState+ C.lookupGlobal g (simState ^. C.stateGlobals)++-- | Get the length of the currently recorded trace+recordTraceLength ::+ W4.IsExprBuilder sym =>+ HasRecordState p p sym ext rtp =>+ C.SimState p sym ext rtp f args ->+ IO (Maybe (W4.SymNat sym))+recordTraceLength simState = do+ let sym = simState ^. C.stateSymInterface+ case getRecordTrace simState of+ Nothing -> pure Nothing+ Just s -> Just <$> CSSS.lengthSymSequence sym s++getReplayTrace ::+ HasReplayState p p sym ext rtp =>+ C.SimState p sym ext rtp f args ->+ Maybe (C.RegValue sym TraceType)+getReplayTrace simState = do+ let ctx = simState ^. C.stateContext+ let g = ctx ^. C.cruciblePersonality . replayState . traceGlobal+ C.lookupGlobal g (simState ^. C.stateGlobals)++-- | Get the length of the trace being replayed+replayTraceLength ::+ W4.IsExprBuilder sym =>+ HasReplayState p p sym ext rtp =>+ C.SimState p sym ext rtp f args ->+ IO (Maybe (W4.SymNat sym))+replayTraceLength simState = do+ let sym = simState ^. C.stateSymInterface+ case getReplayTrace simState of+ Nothing -> pure Nothing+ Just s -> Just <$> CSSS.lengthSymSequence sym s++-- | An 'C.ExecutionFeature' to record traces.+--+-- During execution this logs program locations to a Crucible global variable.+-- After execution, this variable may be read with 'getRecordedTrace' and the+-- 'RecordedTrace' can be passed to 'replayFeature' to \"replay\" it, i.e., to+-- abort all branches that deviate from it.+--+-- If this is not called with 'C.InitialState' before any other 'C.ExecState',+-- it may throw a 'TraceGlobalNotDefined' exception.+recordFeature ::+ ( HasRecordState p p sym ext rtp+ , W4.IsExprBuilder sym+ ) =>+ C.ExecutionFeature p sym ext rtp+recordFeature =+ C.ExecutionFeature $+ \case+ C.InitialState simCtx globals abortHandler retTy cont -> do+ globals' <- insertNewTrace simCtx globals+ let iState = C.InitialState simCtx globals' abortHandler retTy cont+ return $ C.ExecutionFeatureModifiedState iState+ C.RunningState runStateInfo st -> do+ loc <- locAsStr (st ^. C.stateSymInterface)+ st' <- consTrace st loc+ let rState = C.RunningState runStateInfo st'+ return $ C.ExecutionFeatureModifiedState rState+ _ -> pure C.ExecutionFeatureNoChange+ where+ insertNewTrace ::+ HasRecordState p p sym ext rtp =>+ C.SimContext p sym ext ->+ C.SymGlobalState sym ->+ IO (C.SymGlobalState sym)+ insertNewTrace simCtx globals = do+ let RecordState g = simCtx ^. C.cruciblePersonality . recordState+ let sym = simCtx ^. C.ctxSymInterface+ nil <- CSSS.nilSymSequence sym+ return (C.insertGlobal g nil globals)++ getTraceOrThrow ::+ HasRecordState p p sym ext rtp =>+ C.SimState p sym ext rtp f args ->+ IO (C.RegValue sym TraceType)+ getTraceOrThrow st =+ case getRecordTrace st of+ Nothing -> X.throw TraceGlobalNotDefined+ Just t -> pure t++ insertTrace ::+ HasRecordState p p sym ext rtp =>+ C.SimState p sym ext rtp f args ->+ C.RegValue sym TraceType ->+ C.SimState p sym ext rtp f args+ insertTrace st v = do+ let simCtx = st ^. C.stateContext+ let RecordState g = simCtx ^. C.cruciblePersonality . recordState+ st & C.stateGlobals %~ C.insertGlobal g v++ consTrace ::+ HasRecordState p p sym ext rtp =>+ C.SimState p sym ext rtp f args ->+ C.RegValue sym (CT.StringType W4.Unicode) ->+ IO (C.SimState p sym ext rtp f args)+ consTrace st v = do+ s <- getTraceOrThrow st+ let sym = st ^. C.stateSymInterface+ s' <- CSSS.consSymSequence sym v s+ pure (insertTrace st s')+++ -- ^ constructor intentionally not exported to keep 'TraceType' out of the+ -- API, but it could be exported in the future if necessary.++-- | Obtain a 'RecordedTrace' after execution.+--+-- This currently requires concretizing the trace, because there is no efficient+-- reverse operation for 'CSSS.SymSequence'.+getRecordedTrace ::+ W4.IsExprBuilder sym =>+ C.SymGlobalState sym ->+ RecordState p sym ext rtp ->+ sym ->+ -- | Evaluation for booleans, usually a 'What4.Expr.GroundEval.GroundEvalFn'+ (W4.Pred sym -> IO Bool) ->+ IO (RecordedTrace sym)+getRecordedTrace globals (RecordState g) sym evalBool = do+ case C.lookupGlobal g globals of+ Nothing -> X.throw TraceGlobalNotDefined+ Just s -> RecordedTrace <$> concretizeAndReverseTrace s+ where+ concretizeAndReverseTrace s = do+ concretized <- CSSS.concretizeSymSequence evalBool (evalStr sym) s+ let reversed = Seq.reverse concretized+ symbolized <- mapM (W4.stringLit sym . W4.UnicodeLiteral) reversed+ CSSS.fromListSymSequence sym (F.toList symbolized)++ evalStr ::+ W4.IsExpr (W4.SymExpr sym) =>+ sym ->+ W4.SymString sym W4.Unicode ->+ IO Text.Text+ evalStr _sym s =+ case W4.asString s of+ Just (W4.UnicodeLiteral s') -> pure s'+ Nothing -> panic "getRecordedTrace" ["Non-literal trace element?"]++{- | Inserts a recorded trace into the state's replay trace variable+The replay feature will follow this trace if it is enabled+-}+insertReplayTrace ::+ (HasReplayState p p sym ext rtp) =>+ C.SimState p sym ext rtp f args ->+ C.RegValue sym TraceType ->+ C.SimState p sym ext rtp f args+insertReplayTrace st v = do+ let simCtx = st ^. C.stateContext+ let g = simCtx ^. C.cruciblePersonality . replayState . traceGlobal+ st & C.stateGlobals %~ C.insertGlobal g v++-- | An 'C.ExecutionFeature' to replay traces recorded with 'recordFeature'.+--+-- Branches that deviate from the given trace will be aborted with+-- 'C.InfeasibleBranch'.+--+-- If this is not called with 'C.InitialState' before any other 'C.ExecState',+-- it may throw a 'TraceGlobalNotDefined' exception.+replayFeature ::+ ( HasReplayState p p sym ext rtp+ , W4.IsExprBuilder sym+ ) =>+ -- | Whether to stop at the end of the trace. If this is 'True' and execution+ -- has exhausted the trace, then any further execution will be aborted via+ -- 'C.InfeasibleBranch'.+ Bool ->+ C.ExecutionFeature p sym ext rtp+replayFeature stop =+ C.ExecutionFeature $+ \case+ C.InitialState simCtx globals abortHandler retTy cont -> do+ let rstate = simCtx ^. C.cruciblePersonality . replayState+ let g = rstate ^. traceGlobal+ let RecordedTrace trace = rstate ^. initialTrace+ let globals' = C.insertGlobal g trace globals+ let iState = C.InitialState simCtx globals' abortHandler retTy cont+ return $ C.ExecutionFeatureModifiedState iState+ C.RunningState runStateInfo st -> do+ let sym = st ^. C.stateSymInterface+ s <- getTraceOrThrow st+ partExpr <- CSSS.unconsSymSequence sym (W4.stringIte sym) s+ let badPath = do+ loc <- W4.getCurrentProgramLoc sym+ let st' = C.AbortState (CB.InfeasibleBranch loc) st+ pure (C.ExecutionFeatureNewState st')+ case partExpr of+ W4P.Unassigned+ | stop -> badPath+ | otherwise -> pure C.ExecutionFeatureNoChange+ W4P.PE valid (expectedLoc, rest) ->+ C.withBackend (st ^. C.stateContext) $ \bak -> do+ let msg = "Trace must be valid"+ CB.assert bak valid (C.AssertFailureSimError msg "")++ currLoc <- locAsStr sym+ atExpectedLoc <- W4.stringEq sym currLoc expectedLoc+ case W4.asConstantPred atExpectedLoc of+ Just False -> badPath+ _ -> do+ let msg' = "Execution deviated from trace"+ CB.assert bak atExpectedLoc (C.AssertFailureSimError msg' "")+ let st' = insertReplayTrace st rest+ let rState = C.RunningState runStateInfo st'+ pure (C.ExecutionFeatureModifiedState rState)++ _ -> pure C.ExecutionFeatureNoChange+ where+ getTraceOrThrow ::+ HasReplayState p p sym ext rtp =>+ C.SimState p sym ext rtp f args ->+ IO (C.RegValue sym TraceType)+ getTraceOrThrow st =+ case getReplayTrace st of+ Nothing -> X.throw TraceGlobalNotDefined+ Just t -> pure t
src/Lang/Crucible/Simulator/RegValue.hs view
@@ -48,6 +48,8 @@ , muxVector , muxSymSequence , muxHandle+ -- * Equality+ , eqRegValue ) where import Control.Monad@@ -361,3 +363,41 @@ p (unVB (x Ctx.! i)) (unVB (y Ctx.! i))++------------------------------------------------------------------------+-- Equality++-- | Equality of 'RegValue's.+--+-- This is only supported for a few types, see #1582.+eqRegValue ::+ forall sym tp.+ IsInterpretedFloatExprBuilder sym =>+ sym ->+ TypeRepr tp ->+ RegValue sym tp ->+ RegValue sym tp ->+ IO (Pred sym)+eqRegValue sym tp x y =+ case tp of+ -- Base types+ BoolRepr -> eqPred sym x y+ BVRepr _width -> bvEq sym x y+ ComplexRealRepr -> cplxEq sym x y+ FloatRepr @fi _ -> iFloatEq @_ @fi sym x y+ IEEEFloatRepr _fpp -> floatEq sym x y+ IntegerRepr -> intEq sym x y+ NatRepr -> natEq sym x y+ RealValRepr -> realEq sym x y+ SymbolicStructRepr _tys -> structEq sym x y+ SymbolicArrayRepr _idxs _tp -> arrayEq sym x y+ StringRepr _si -> stringEq sym x y++ -- Trivial cases+ UnitRepr -> pure (truePred sym)+ CharRepr ->+ if x == y+ then pure (truePred sym)+ else pure (falsePred sym)++ _ -> fail ("eqRegValue not supported for " ++ show tp)
src/Lang/Crucible/Utils/BitSet.hs view
@@ -35,7 +35,7 @@ import Data.Word import Data.Hashable import qualified Data.List as List-import Prelude hiding (null, foldr, foldl)+import Prelude hiding (null, foldr, foldl, foldl') newtype BitSet a = BitSet { getBits :: Integer } deriving (Show, Eq, Ord)
test/helpers/Main.hs view
@@ -1,6 +1,7 @@ {-# LANGUAGE AllowAmbiguousTypes #-}-module Main where +module Main (main) where+ import Control.Lens ((^.)) import Data.List (isInfixOf) import Data.Maybe (fromMaybe)@@ -26,9 +27,12 @@ import qualified Panic as P +import qualified SymSequence as S+ main :: IO ()-main =- defaultMain =<< panicTests+main = do+ p <- panicTests+ defaultMain (testGroup "crucible" [p, backendTests, S.tests]) mkBackend :: IO (Some SomeBackend) mkBackend = do@@ -81,7 +85,7 @@ c <- W4I.freshConstant sym (W4I.safeSymbol "c") W4I.BaseBoolRepr assumePred bak "assuming c" c d <- W4I.freshConstant sym (W4I.safeSymbol "d") W4I.BaseBoolRepr- LCB.assert bak c (GenericSimError "asserting d")+ LCB.assert bak d (GenericSimError "asserting d") (_asmps, mbGoals) <- LCB.popAssumptionFrameAndObligations bak frm [LCB.ProofGoal asmps gl] <- pure (fromMaybe [] (LCB.goalsToList <$> mbGoals)) asmpsPred <- LCB.assumptionsPred sym asmps
+ test/helpers/SymSequence.hs view
@@ -0,0 +1,300 @@+{-# LANGUAGE EmptyDataDeriving #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE ImportQualifiedPost #-}+{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE RankNTypes #-}+{-# LANGUAGE TypeApplications #-}+{-# LANGUAGE TypeFamilies #-}++module SymSequence (tests) where++import Control.Monad.IO.Class (liftIO)+import Data.Foldable qualified as F+import Data.List qualified as List+import Data.Maybe qualified as Maybe+import Data.Parameterized.Nonce qualified as Nonce+import Data.Parameterized.Some (Some(Some))+import Hedgehog (Gen)+import Hedgehog qualified as H+import Hedgehog.Gen qualified as Gen+import Hedgehog.Range qualified as Range+import Lang.Crucible.Backend (SomeBackend(SomeBackend), backendGetSym)+import Lang.Crucible.Backend.Simple (newSimpleBackend)+import Lang.Crucible.Simulator.SymSequence (SymSequence)+import Lang.Crucible.Simulator.SymSequence qualified as S+import Test.Tasty qualified as TT+import Test.Tasty.Hedgehog qualified as TTH+import What4.Expr (EmptyExprBuilderState(EmptyExprBuilderState))+import What4.Expr.Builder (newExprBuilder)+import What4.FloatMode (FloatModeRepr(FloatIEEERepr))+import What4.Interface qualified as WI+import What4.Partial qualified as WP++---------------------------------------------------------------------+-- Tests++tests :: TT.TestTree+tests =+ TTH.testProperty+ "propSame"+ -- This is a big API, so we want adequate coverage (default is 100)+ (H.withTests 4096 propSame)++-- | Check that a generated API interaction has the same effect when interpreted+-- with either 'SymSequence' or lists.+propSame :: H.Property+propSame =+ H.property $ do+ Some (SomeBackend bak) <- liftIO mkBackend+ let sym = backendGetSym bak+ op <- H.forAll (Gen.sized $ \n -> genList (H.unSize n) Gen.bool)+ let l = opList op+ s <- liftIO (opSeq sym op)+ l' <- liftIO (F.toList <$> asSeq sym s)+ l H.=== l'+ where+ asSeq sym =+ S.concretizeSymSequence (pure . asConstPred (Just sym)) pure++---------------------------------------------------------------------+-- Helpers++mkBackend :: IO (Some SomeBackend)+mkBackend = do+ sym <- newExprBuilder FloatIEEERepr EmptyExprBuilderState Nonce.globalNonceGenerator+ Some . SomeBackend <$> newSimpleBackend sym++-- Requires that the predicate is concrete+asConstPred ::+ WI.IsExprBuilder sym =>+ proxy sym ->+ WI.Pred sym ->+ Bool+asConstPred _proxy p =+ case WI.asConstantPred p of+ Just True -> True+ Just False -> False+ Nothing -> error "non-constant predicate?"++---------------------------------------------------------------------+-- Op++data Elem a deriving Show++data List a deriving Show++-- TODO: Replace with `Seq` for performance+type family AsList t where+ AsList (List a) = [a]+ AsList (Elem a) = a+ AsList (Maybe a) = Maybe (AsList a)+ AsList (a, b) = (AsList a, AsList b)+ AsList a = a++type family AsSeq sym t where+ AsSeq sym (List a) = SymSequence sym a+ AsSeq sym (Elem a) = a+ AsSeq sym (Maybe a) = Maybe (AsSeq sym a)+ AsSeq sym (a, b) = (AsSeq sym a, AsSeq sym b)+ AsSeq sym a = a++-- | An interaction with the 'SymSequence' API+data Op a t where+ -- Generic functions+ OTrue :: Op a Bool+ OFalse :: Op a Bool+ OFst :: Op a (l, r) -> Op a l+ OSnd :: Op a (l, r) -> Op a r+ OElem :: a -> Op a (Elem a)+ OFromMaybe :: Op a t -> Op a (Maybe t) -> Op a t++ -- Constructors+ ONil :: Op a (List a)+ OCons :: Op a (Elem a) -> Op a (List a) -> Op a (List a)+ OAppend :: Op a (List a) -> Op a (List a) -> Op a (List a)+ OMux :: Op a Bool -> Op a (List a) -> Op a (List a) -> Op a (List a)++ -- Operations+ OUncons :: Op a (List a) -> Op a (Maybe (Elem a), (List a))+ OLength :: Op a (List a) -> Op a Integer+ -- TODO: isNil, head, tail++sexp :: [String] -> String+sexp s = '(' : (unwords s ++ ")")++fun :: String -> [String] -> String+fun f s = sexp (f:s)++fun1 :: Show a => String -> a -> String+fun1 f a = fun f [show a]++fun2 :: (Show a, Show b) => String -> a -> b -> String+fun2 f a b = fun f [show a, show b]++fun3 :: (Show a, Show b, Show c) => String -> a -> b -> c -> String+fun3 f a b c = fun f [show a, show b, show c]++instance Show a => Show (Op a t) where+ show =+ \case+ -- Generic functions+ OTrue -> "true"+ OFalse -> "false"+ OFst t -> fun1 "fst" t+ OSnd t -> fun1 "snd" t+ OElem a -> show a+ OFromMaybe a m -> fun2 "fromMaybe" a m++ -- Constructors+ ONil -> "nil"+ OCons l r -> fun2 "cons" l r+ OAppend l r -> fun2 "append" l r+ OMux b l r -> fun3 "mux" b l r++ -- Operations+ OUncons l -> fun1 "uncons" l+ OLength l -> fun1 "length" l++---------------------------------------------------------------------+-- Generating Op++genBool :: Gen (Op a Bool)+genBool =+ Gen.choice+ [ pure OTrue+ , pure OFalse+ ]++genElem ::+ Int ->+ Gen a ->+ Gen (Op a (Elem a))+genElem sz genA =+ if sz <= 0+ then OElem <$> genA+ else+ Gen.choice+ [ OElem <$> genA+ , OFromMaybe+ <$> genElem (sz - 1) genA+ <*> (OFst <$> (OUncons <$> genList (sz - 1) genA))+ ]++genList ::+ Int ->+ Gen a ->+ Gen (Op a (List a))+genList sz genA =+ if sz <= 0+ then pure ONil+ else+ Gen.choice+ [ genCons+ , genAppend+ , genMux+ ]+ where+ sub1 = genList (sz - 1) genA+ sub2 = do+ let budget = max 0 (sz - 1)+ bl <- Gen.integral (Range.linear 0 budget)+ let br = max 0 (budget - bl)+ l <- genList bl genA+ r <- genList br genA+ pure (l, r)++ genCons = OCons <$> genElem (sz - 1) genA <*> sub1++ genAppend = uncurry OAppend <$> sub2++ genMux = do+ b <- genBool+ uncurry (OMux b) <$> sub2++---------------------------------------------------------------------+-- Interpreting Op++opList :: Op a t -> AsList t+opList =+ \case+ -- Generic functions+ OTrue -> True+ OFalse -> False+ OFst t -> fst (opList t)+ OSnd t -> snd (opList t)+ OElem a -> a+ OFromMaybe a m -> Maybe.fromMaybe (opList a) (opList m)++ -- Constructors+ ONil -> []+ OCons a l -> opList a : opList l+ OAppend l r -> opList l ++ opList r+ OMux b l r -> if opList b then opList l else opList r++ -- Operations+ OUncons l ->+ let l' = opList l in+ case List.uncons l' of+ Just (hd, tl) -> (Just hd, tl)+ Nothing -> (Nothing, l')+ OLength l -> fromIntegral @Int @Integer (length (opList l)) -- safe++opSeq ::+ WI.IsExprBuilder sym =>+ sym ->+ Op a t ->+ IO (AsSeq sym t)+opSeq sym =+ \case+ -- Generic functions+ OTrue -> pure True+ OFalse -> pure False+ OFst t -> fst <$> opSeq sym t+ OSnd t -> snd <$> opSeq sym t+ OElem a -> pure a+ OFromMaybe a m ->+ Maybe.fromMaybe+ <$> opSeq sym a+ <*> opSeq sym m++ -- Constructors+ ONil -> pure S.SymSequenceNil+ OCons a l ->+ S.SymSequenceCons+ <$> Nonce.freshNonce Nonce.globalNonceGenerator+ <*> opSeq sym a+ <*> opSeq sym l+ OAppend l r ->+ S.SymSequenceAppend+ <$> Nonce.freshNonce Nonce.globalNonceGenerator+ <*> opSeq sym l+ <*> opSeq sym r+ OMux b l r -> do+ b' <- opSeq sym b+ let b'' = if b' then WI.truePred sym else WI.falsePred sym+ S.SymSequenceMerge+ <$> Nonce.freshNonce Nonce.globalNonceGenerator+ <*> pure b''+ <*> opSeq sym l+ <*> opSeq sym r++ -- Operations+ OUncons l -> do+ l' <- opSeq sym l+ let interpPred p x y =+ if asConstPred (Just sym) p+ then pure x+ else pure y+ pe <- S.unconsSymSequence sym interpPred l'+ case pe of+ WP.Unassigned -> pure (Nothing, l')+ WP.PE _ (hd, tl) -> -- TODO: assert pred is truePred+ pure (Just hd, tl)+ OLength s -> do+ l <- S.lengthSymSequence sym =<< opSeq sym s+ case WI.asInteger (WI.natToIntegerPure l) of+ Just l' -> pure l'+ Nothing -> error "SymSequence: symbolic length"