SSTG-0.1.1.7: STG Symbolic Execution

Safe HaskellSafe
LanguageHaskell2010

SSTG.Core.Language.Syntax

Description

SSTG Syntax Definitions

Synopsis

Documentation

newtype Program Source #

A Program is defined as a list of bindings. The Name is an identifier that determines a unique binder to the var. In practice, these are defined to be Name and Var respectively.

Constructors

Program [Binds] 

data Name Source #

The occurrence name is defined as a string, with a Maybe module name appearing. The Int denotes a Unique translated from GHC. For instance, in the case of Map.empty, the occurrence name is "empty", while the module name is some variant of Just "Data.Map".

Instances

data Var Source #

Variables consist of a Name and a Type.

Constructors

Var Name Type 

Instances

data Lit Source #

Literals are largely augmented from the original GHC implementation, with additional annotations to denote BlankAddr for lifting, AddrLit for value deriviation, and LitEval to represent symbolic literal evaluation, as literal manipulation functions are defined in the Haskell Prelude, and thus outside of scope for us.

Instances

data Atom Source #

Atomic objects. VarAtom may be used for variable lookups, while LitAtom is used to denote literals.

Constructors

LitAtom Lit 
VarAtom Var 

data Expr Source #

Expressions closely correspond to their representation in GHC.

data Alt Source #

Alternatives utilize an AltCon, a list of parameters of that match to the appropriate DataAlt as applicable, and an expression for the result.

Constructors

Alt AltCon Expr 

Instances

data BindRhs Source #

BindRhs taken straight from STG can be either in constructor form, or function form. Empty parameter list denotes a thunk.

Constructors

ConForm DataCon [Atom] 
FunForm [Var] Expr 

data DataCon Source #

Data Constructor consists of its tag, the type that corresponds to its ADT, and a list of paramters it takes.

Constructors

DataCon Name Type [Type] 

data Type Source #

Types are information that are useful to keep during symbolic execution in order to generate correct feeds into the SMT solver. Overapproxmation is currently performed, and is likely to be cut back in the future.

data Coercion Source #

Coercion. I have no idea what this does :)

Constructors

Coercion Type Type