-----------------------------------------------------------------------
-- |
-- Module           : Lang.Crucible.Simulator
-- Description      : Reexports of relevant parts of submodules
-- Copyright        : (c) Galois, Inc 2018
-- License          : BSD3
-- Maintainer       : Joe Hendrix <jhendrix@galois.com>
-- Stability        : provisional
--
-- This module reexports the parts of the symbolic simulator codebase
-- that are most relevant for users.  Additional types and operations
-- are exported from the relevant submodules if necessary.
------------------------------------------------------------------------
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module Lang.Crucible.Simulator
  ( -- * Register values
    RegValue
  , RegValue'(..)
    -- ** Variants
  , VariantBranch(..)
  , injectVariant
    -- ** Any Values
  , AnyValue(..)
    -- ** Function Values
  , FnVal(..)
  , fnValType
    -- ** Recursive Values
  , RolledType(..)

    -- * Register maps
  , RegEntry(..)
  , RegMap(..)
  , emptyRegMap
  , regVal
  , assignReg
  , reg

    -- * SimError
  , SimErrorReason(..)
  , SimError(..)
  , ppSimError

    -- * SimGlobalState
  , GlobalVar(..)
  , SymGlobalState
  , emptyGlobals

    -- * GlobalPair
  , GlobalPair(..)
  , gpValue
  , gpGlobals

    -- * AbortedResult
  , AbortedResult(..)

    -- * Partial result
  , PartialResult(..)
  , partialValue

    -- * Execution states
  , ExecResult(..)
  , ExecState(..)
  , ExecCont
  , execResultContext

    -- * Simulator context
    -- ** Function bindings
  , Override(..)
  , FnState(..)
  , FunctionBindings(..)

    -- ** Extensions
  , ExtensionImpl(..)
  , EvalStmtFunc
  , emptyExtensionImpl

    -- ** SimContext record
  , IsSymInterfaceProof
  , SimContext(..)
  , initSimContext
  , ctxSymInterface
  , functionBindings
  , cruciblePersonality
  , profilingMetrics

    -- * SimState
  , SimState
  , initSimState
  , defaultAbortHandler
  , AbortHandler(..)
  , CrucibleState
  , stateContext

    -- * Intrinsic types
  , IntrinsicClass
  , IntrinsicMuxFn(..)
  , IntrinsicTypes
  , emptyIntrinsicTypes

    -- * Evaluation
  , executeCrucible
  , singleStepCrucible
  , evalReg
  , evalArgs
  , stepStmt
  , stepTerm
  , stepBasicBlock
  , ExecutionFeature
  , GenericExecutionFeature
  , genericToExecutionFeature
  , timeoutFeature

    -- * OverrideSim monad
  , module Lang.Crucible.Simulator.OverrideSim
  ) where

import Lang.Crucible.CFG.Common
import Lang.Crucible.Simulator.ExecutionTree
import Lang.Crucible.Simulator.EvalStmt
import Lang.Crucible.Simulator.GlobalState
import Lang.Crucible.Simulator.Intrinsics
import Lang.Crucible.Simulator.Operations
import Lang.Crucible.Simulator.OverrideSim
import Lang.Crucible.Simulator.RegMap
import Lang.Crucible.Simulator.SimError