SSTG 0.1.1.0 → 0.1.1.1
raw patch · 16 files changed
+330/−338 lines, 16 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- SSTG.Core.Execution.Engine: [dump_dir] :: RunFlags -> Maybe FilePath
- SSTG.Core.Execution.Engine: [step_count] :: RunFlags -> Int
- SSTG.Core.Execution.Engine: [step_type] :: RunFlags -> StepType
- SSTG.Core.Execution.Support: [state_links] :: State -> SymLinks
- SSTG.Core.Execution.Support: [steps] :: Status -> Int
- SSTG.Core.Execution.Support: data SymLinks
- SSTG.Core.Execution.Support: empty_symlinks :: SymLinks
- SSTG.Core.Execution.Support: insertSymLinks :: Name -> Name -> SymLinks -> SymLinks
- SSTG.Core.Execution.Support: instance GHC.Classes.Eq SSTG.Core.Execution.Support.SymLinks
- SSTG.Core.Execution.Support: instance GHC.Read.Read SSTG.Core.Execution.Support.SymLinks
- SSTG.Core.Execution.Support: instance GHC.Show.Show SSTG.Core.Execution.Support.SymLinks
- SSTG.Core.Execution.Support: symlinksToList :: SymLinks -> [(Name, Name)]
- SSTG.Core.Syntax.Language: AbstractTyCon :: Bool -> GenAlgTyRhs bnd
- SSTG.Core.Syntax.Language: AddrLit :: Int -> GenLit bnd var
- SSTG.Core.Syntax.Language: AlgTyCon :: bnd -> [bnd] -> (GenAlgTyRhs bnd) -> GenTyCon bnd
- SSTG.Core.Syntax.Language: Alt :: (GenAltCon bnd var) -> [var] -> (GenExpr bnd var) -> GenAlt bnd var
- SSTG.Core.Syntax.Language: AnonTyBndr :: GenTyBinder bnd
- SSTG.Core.Syntax.Language: AppTy :: (GenType bnd) -> (GenType bnd) -> GenType bnd
- SSTG.Core.Syntax.Language: Atom :: (GenAtom bnd var) -> GenExpr bnd var
- SSTG.Core.Syntax.Language: Binding :: RecForm -> [(var, GenBindRhs bnd var)] -> GenBinding bnd var
- SSTG.Core.Syntax.Language: BlankAddr :: GenLit bnd var
- SSTG.Core.Syntax.Language: Bottom :: GenType bnd
- SSTG.Core.Syntax.Language: Case :: (GenExpr bnd var) -> var -> [GenAlt bnd var] -> GenExpr bnd var
- SSTG.Core.Syntax.Language: CastTy :: (GenType bnd) -> (GenCoercion bnd) -> GenType bnd
- SSTG.Core.Syntax.Language: Coercion :: (GenType bnd) -> (GenType bnd) -> GenCoercion bnd
- SSTG.Core.Syntax.Language: CoercionTy :: (GenCoercion bnd) -> GenType bnd
- SSTG.Core.Syntax.Language: ConApp :: (GenDataCon bnd) -> [GenAtom bnd var] -> GenExpr bnd var
- SSTG.Core.Syntax.Language: ConForm :: (GenDataCon bnd) -> [GenAtom bnd var] -> GenBindRhs bnd var
- SSTG.Core.Syntax.Language: DataAlt :: (GenDataCon bnd) -> GenAltCon bnd var
- SSTG.Core.Syntax.Language: DataCon :: bnd -> (GenType bnd) -> [GenType bnd] -> GenDataCon bnd
- SSTG.Core.Syntax.Language: DataNSpace :: NameSpace
- SSTG.Core.Syntax.Language: DataTyCon :: [bnd] -> GenAlgTyRhs bnd
- SSTG.Core.Syntax.Language: Default :: GenAltCon bnd var
- SSTG.Core.Syntax.Language: FamilyTyCon :: bnd -> [bnd] -> GenTyCon bnd
- SSTG.Core.Syntax.Language: ForAllTy :: (GenTyBinder bnd) -> (GenType bnd) -> GenType bnd
- SSTG.Core.Syntax.Language: FunApp :: var -> [GenAtom bnd var] -> GenExpr bnd var
- SSTG.Core.Syntax.Language: FunForm :: [var] -> (GenExpr bnd var) -> GenBindRhs bnd var
- SSTG.Core.Syntax.Language: FunTy :: (GenType bnd) -> (GenType bnd) -> GenType bnd
- SSTG.Core.Syntax.Language: FunTyCon :: bnd -> [GenTyBinder bnd] -> GenTyCon bnd
- SSTG.Core.Syntax.Language: Let :: (GenBinding bnd var) -> (GenExpr bnd var) -> GenExpr bnd var
- SSTG.Core.Syntax.Language: LitAlt :: (GenLit bnd var) -> GenAltCon bnd var
- SSTG.Core.Syntax.Language: LitAtom :: (GenLit bnd var) -> GenAtom bnd var
- SSTG.Core.Syntax.Language: LitTy :: TyLit -> GenType bnd
- SSTG.Core.Syntax.Language: MachChar :: Char -> (GenType bnd) -> GenLit bnd var
- SSTG.Core.Syntax.Language: MachDouble :: Rational -> (GenType bnd) -> GenLit bnd var
- SSTG.Core.Syntax.Language: MachFloat :: Rational -> (GenType bnd) -> GenLit bnd var
- SSTG.Core.Syntax.Language: MachInt :: Int -> (GenType bnd) -> GenLit bnd var
- SSTG.Core.Syntax.Language: MachLabel :: String -> (Maybe Int) -> (GenType bnd) -> GenLit bnd var
- SSTG.Core.Syntax.Language: MachNullAddr :: (GenType bnd) -> GenLit bnd var
- SSTG.Core.Syntax.Language: MachStr :: String -> (GenType bnd) -> GenLit bnd var
- SSTG.Core.Syntax.Language: MachWord :: Int -> (GenType bnd) -> GenLit bnd var
- SSTG.Core.Syntax.Language: Name :: String -> (Maybe String) -> NameSpace -> Int -> Name
- SSTG.Core.Syntax.Language: NamedTyBndr :: bnd -> GenTyBinder bnd
- SSTG.Core.Syntax.Language: NewTyCon :: bnd -> GenAlgTyRhs bnd
- SSTG.Core.Syntax.Language: NonRec :: RecForm
- SSTG.Core.Syntax.Language: NumTyLit :: Int -> TyLit
- SSTG.Core.Syntax.Language: PrimApp :: (GenPrimFun bnd var) -> [GenAtom bnd var] -> GenExpr bnd var
- SSTG.Core.Syntax.Language: PrimFun :: bnd -> (GenType bnd) -> GenPrimFun bnd var
- SSTG.Core.Syntax.Language: PrimTyCon :: bnd -> [GenTyBinder bnd] -> GenTyCon bnd
- SSTG.Core.Syntax.Language: Program :: [GenBinding bnd var] -> GenProgram bnd var
- SSTG.Core.Syntax.Language: Promoted :: bnd -> [GenTyBinder bnd] -> (GenDataCon bnd) -> GenTyCon bnd
- SSTG.Core.Syntax.Language: Rec :: RecForm
- SSTG.Core.Syntax.Language: StrTyLit :: String -> TyLit
- SSTG.Core.Syntax.Language: SymLit :: var -> GenLit bnd var
- SSTG.Core.Syntax.Language: SymLitEval :: (GenPrimFun bnd var) -> [GenLit bnd var] -> GenLit bnd var
- SSTG.Core.Syntax.Language: SynonymTyCon :: bnd -> [bnd] -> GenTyCon bnd
- SSTG.Core.Syntax.Language: TcClsNSpace :: NameSpace
- SSTG.Core.Syntax.Language: TupleTyCon :: bnd -> GenAlgTyRhs bnd
- SSTG.Core.Syntax.Language: TvNSpace :: NameSpace
- SSTG.Core.Syntax.Language: TyConApp :: (GenTyCon bnd) -> [GenType bnd] -> GenType bnd
- SSTG.Core.Syntax.Language: TyVarTy :: bnd -> (GenType bnd) -> GenType bnd
- SSTG.Core.Syntax.Language: Var :: Name -> (GenType Name) -> Var
- SSTG.Core.Syntax.Language: VarAtom :: var -> GenAtom bnd var
- SSTG.Core.Syntax.Language: VarNSpace :: NameSpace
- SSTG.Core.Syntax.Language: data GenAlgTyRhs bnd
- SSTG.Core.Syntax.Language: data GenAlt bnd var
- SSTG.Core.Syntax.Language: data GenAltCon bnd var
- SSTG.Core.Syntax.Language: data GenAtom bnd var
- SSTG.Core.Syntax.Language: data GenBindRhs bnd var
- SSTG.Core.Syntax.Language: data GenBinding bnd var
- SSTG.Core.Syntax.Language: data GenCoercion bnd
- SSTG.Core.Syntax.Language: data GenDataCon bnd
- SSTG.Core.Syntax.Language: data GenExpr bnd var
- SSTG.Core.Syntax.Language: data GenLit bnd var
- SSTG.Core.Syntax.Language: data GenPrimFun bnd var
- SSTG.Core.Syntax.Language: data GenTyBinder bnd
- SSTG.Core.Syntax.Language: data GenTyCon bnd
- SSTG.Core.Syntax.Language: data GenType bnd
- SSTG.Core.Syntax.Language: data Name
- SSTG.Core.Syntax.Language: data NameSpace
- SSTG.Core.Syntax.Language: data RecForm
- SSTG.Core.Syntax.Language: data TyLit
- SSTG.Core.Syntax.Language: data Var
- SSTG.Core.Syntax.Language: instance (GHC.Classes.Eq bnd, GHC.Classes.Eq var) => GHC.Classes.Eq (SSTG.Core.Syntax.Language.GenAlt bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Classes.Eq bnd, GHC.Classes.Eq var) => GHC.Classes.Eq (SSTG.Core.Syntax.Language.GenAtom bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Classes.Eq bnd, GHC.Classes.Eq var) => GHC.Classes.Eq (SSTG.Core.Syntax.Language.GenBinding bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Classes.Eq var, GHC.Classes.Eq bnd) => GHC.Classes.Eq (SSTG.Core.Syntax.Language.GenAltCon bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Classes.Eq var, GHC.Classes.Eq bnd) => GHC.Classes.Eq (SSTG.Core.Syntax.Language.GenBindRhs bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Classes.Eq var, GHC.Classes.Eq bnd) => GHC.Classes.Eq (SSTG.Core.Syntax.Language.GenExpr bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Classes.Eq var, GHC.Classes.Eq bnd) => GHC.Classes.Eq (SSTG.Core.Syntax.Language.GenLit bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Classes.Eq var, GHC.Classes.Eq bnd) => GHC.Classes.Eq (SSTG.Core.Syntax.Language.GenProgram bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Read.Read bnd, GHC.Read.Read var) => GHC.Read.Read (SSTG.Core.Syntax.Language.GenAlt bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Read.Read bnd, GHC.Read.Read var) => GHC.Read.Read (SSTG.Core.Syntax.Language.GenAtom bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Read.Read bnd, GHC.Read.Read var) => GHC.Read.Read (SSTG.Core.Syntax.Language.GenBinding bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Read.Read var, GHC.Read.Read bnd) => GHC.Read.Read (SSTG.Core.Syntax.Language.GenAltCon bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Read.Read var, GHC.Read.Read bnd) => GHC.Read.Read (SSTG.Core.Syntax.Language.GenBindRhs bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Read.Read var, GHC.Read.Read bnd) => GHC.Read.Read (SSTG.Core.Syntax.Language.GenExpr bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Read.Read var, GHC.Read.Read bnd) => GHC.Read.Read (SSTG.Core.Syntax.Language.GenLit bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Read.Read var, GHC.Read.Read bnd) => GHC.Read.Read (SSTG.Core.Syntax.Language.GenProgram bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Show.Show bnd, GHC.Show.Show var) => GHC.Show.Show (SSTG.Core.Syntax.Language.GenAlt bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Show.Show bnd, GHC.Show.Show var) => GHC.Show.Show (SSTG.Core.Syntax.Language.GenAtom bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Show.Show bnd, GHC.Show.Show var) => GHC.Show.Show (SSTG.Core.Syntax.Language.GenBinding bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Show.Show var, GHC.Show.Show bnd) => GHC.Show.Show (SSTG.Core.Syntax.Language.GenAltCon bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Show.Show var, GHC.Show.Show bnd) => GHC.Show.Show (SSTG.Core.Syntax.Language.GenBindRhs bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Show.Show var, GHC.Show.Show bnd) => GHC.Show.Show (SSTG.Core.Syntax.Language.GenExpr bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Show.Show var, GHC.Show.Show bnd) => GHC.Show.Show (SSTG.Core.Syntax.Language.GenLit bnd var)
- SSTG.Core.Syntax.Language: instance (GHC.Show.Show var, GHC.Show.Show bnd) => GHC.Show.Show (SSTG.Core.Syntax.Language.GenProgram bnd var)
- SSTG.Core.Syntax.Language: instance GHC.Classes.Eq SSTG.Core.Syntax.Language.Name
- SSTG.Core.Syntax.Language: instance GHC.Classes.Eq SSTG.Core.Syntax.Language.NameSpace
- SSTG.Core.Syntax.Language: instance GHC.Classes.Eq SSTG.Core.Syntax.Language.RecForm
- SSTG.Core.Syntax.Language: instance GHC.Classes.Eq SSTG.Core.Syntax.Language.TyLit
- SSTG.Core.Syntax.Language: instance GHC.Classes.Eq SSTG.Core.Syntax.Language.Var
- SSTG.Core.Syntax.Language: instance GHC.Classes.Eq bnd => GHC.Classes.Eq (SSTG.Core.Syntax.Language.GenAlgTyRhs bnd)
- SSTG.Core.Syntax.Language: instance GHC.Classes.Eq bnd => GHC.Classes.Eq (SSTG.Core.Syntax.Language.GenCoercion bnd)
- SSTG.Core.Syntax.Language: instance GHC.Classes.Eq bnd => GHC.Classes.Eq (SSTG.Core.Syntax.Language.GenDataCon bnd)
- SSTG.Core.Syntax.Language: instance GHC.Classes.Eq bnd => GHC.Classes.Eq (SSTG.Core.Syntax.Language.GenPrimFun bnd var)
- SSTG.Core.Syntax.Language: instance GHC.Classes.Eq bnd => GHC.Classes.Eq (SSTG.Core.Syntax.Language.GenTyBinder bnd)
- SSTG.Core.Syntax.Language: instance GHC.Classes.Eq bnd => GHC.Classes.Eq (SSTG.Core.Syntax.Language.GenTyCon bnd)
- SSTG.Core.Syntax.Language: instance GHC.Classes.Eq bnd => GHC.Classes.Eq (SSTG.Core.Syntax.Language.GenType bnd)
- SSTG.Core.Syntax.Language: instance GHC.Classes.Ord SSTG.Core.Syntax.Language.Name
- SSTG.Core.Syntax.Language: instance GHC.Classes.Ord SSTG.Core.Syntax.Language.NameSpace
- SSTG.Core.Syntax.Language: instance GHC.Read.Read SSTG.Core.Syntax.Language.Name
- SSTG.Core.Syntax.Language: instance GHC.Read.Read SSTG.Core.Syntax.Language.NameSpace
- SSTG.Core.Syntax.Language: instance GHC.Read.Read SSTG.Core.Syntax.Language.RecForm
- SSTG.Core.Syntax.Language: instance GHC.Read.Read SSTG.Core.Syntax.Language.TyLit
- SSTG.Core.Syntax.Language: instance GHC.Read.Read SSTG.Core.Syntax.Language.Var
- SSTG.Core.Syntax.Language: instance GHC.Read.Read bnd => GHC.Read.Read (SSTG.Core.Syntax.Language.GenAlgTyRhs bnd)
- SSTG.Core.Syntax.Language: instance GHC.Read.Read bnd => GHC.Read.Read (SSTG.Core.Syntax.Language.GenCoercion bnd)
- SSTG.Core.Syntax.Language: instance GHC.Read.Read bnd => GHC.Read.Read (SSTG.Core.Syntax.Language.GenDataCon bnd)
- SSTG.Core.Syntax.Language: instance GHC.Read.Read bnd => GHC.Read.Read (SSTG.Core.Syntax.Language.GenPrimFun bnd var)
- SSTG.Core.Syntax.Language: instance GHC.Read.Read bnd => GHC.Read.Read (SSTG.Core.Syntax.Language.GenTyBinder bnd)
- SSTG.Core.Syntax.Language: instance GHC.Read.Read bnd => GHC.Read.Read (SSTG.Core.Syntax.Language.GenTyCon bnd)
- SSTG.Core.Syntax.Language: instance GHC.Read.Read bnd => GHC.Read.Read (SSTG.Core.Syntax.Language.GenType bnd)
- SSTG.Core.Syntax.Language: instance GHC.Show.Show SSTG.Core.Syntax.Language.Name
- SSTG.Core.Syntax.Language: instance GHC.Show.Show SSTG.Core.Syntax.Language.NameSpace
- SSTG.Core.Syntax.Language: instance GHC.Show.Show SSTG.Core.Syntax.Language.RecForm
- SSTG.Core.Syntax.Language: instance GHC.Show.Show SSTG.Core.Syntax.Language.TyLit
- SSTG.Core.Syntax.Language: instance GHC.Show.Show SSTG.Core.Syntax.Language.Var
- SSTG.Core.Syntax.Language: instance GHC.Show.Show bnd => GHC.Show.Show (SSTG.Core.Syntax.Language.GenAlgTyRhs bnd)
- SSTG.Core.Syntax.Language: instance GHC.Show.Show bnd => GHC.Show.Show (SSTG.Core.Syntax.Language.GenCoercion bnd)
- SSTG.Core.Syntax.Language: instance GHC.Show.Show bnd => GHC.Show.Show (SSTG.Core.Syntax.Language.GenDataCon bnd)
- SSTG.Core.Syntax.Language: instance GHC.Show.Show bnd => GHC.Show.Show (SSTG.Core.Syntax.Language.GenPrimFun bnd var)
- SSTG.Core.Syntax.Language: instance GHC.Show.Show bnd => GHC.Show.Show (SSTG.Core.Syntax.Language.GenTyBinder bnd)
- SSTG.Core.Syntax.Language: instance GHC.Show.Show bnd => GHC.Show.Show (SSTG.Core.Syntax.Language.GenTyCon bnd)
- SSTG.Core.Syntax.Language: instance GHC.Show.Show bnd => GHC.Show.Show (SSTG.Core.Syntax.Language.GenType bnd)
- SSTG.Core.Syntax.Language: newtype GenProgram bnd var
- SSTG.Core.Syntax.Language: type AlgTyRhs = GenAlgTyRhs Name
- SSTG.Core.Syntax.Language: type Alt = GenAlt Name Var
- SSTG.Core.Syntax.Language: type AltCon = GenAltCon Name Var
- SSTG.Core.Syntax.Language: type Atom = GenAtom Name Var
- SSTG.Core.Syntax.Language: type BindRhs = GenBindRhs Name Var
- SSTG.Core.Syntax.Language: type Binding = GenBinding Name Var
- SSTG.Core.Syntax.Language: type Coercion = GenCoercion Name
- SSTG.Core.Syntax.Language: type DataCon = GenDataCon Name
- SSTG.Core.Syntax.Language: type Expr = GenExpr Name Var
- SSTG.Core.Syntax.Language: type Lit = GenLit Name Var
- SSTG.Core.Syntax.Language: type PrimFun = GenPrimFun Name Var
- SSTG.Core.Syntax.Language: type Program = GenProgram Name Var
- SSTG.Core.Syntax.Language: type TyBinder = GenTyBinder Name
- SSTG.Core.Syntax.Language: type TyCon = GenTyCon Name
- SSTG.Core.Syntax.Language: type Type = GenType Name
- SSTG.Core.Syntax.Typing: altType :: Alt -> Type
- SSTG.Core.Syntax.Typing: atomType :: Atom -> Type
- SSTG.Core.Syntax.Typing: dataConType :: DataCon -> Type
- SSTG.Core.Syntax.Typing: exprType :: Expr -> Type
- SSTG.Core.Syntax.Typing: litType :: Lit -> Type
- SSTG.Core.Syntax.Typing: primFunType :: PrimFun -> Type
- SSTG.Core.Syntax.Typing: varType :: Var -> Type
+ SSTG.Core.Execution.Engine: [flag_dump_dir] :: RunFlags -> Maybe FilePath
+ SSTG.Core.Execution.Engine: [flag_step_count] :: RunFlags -> Int
+ SSTG.Core.Execution.Engine: [flag_step_type] :: RunFlags -> StepType
+ SSTG.Core.Execution.Support: [status_id] :: Status -> Int
+ SSTG.Core.Execution.Support: [status_parent_id] :: Status -> Int
+ SSTG.Core.Execution.Support: [status_steps] :: Status -> Int
+ SSTG.Core.Execution.Support: incStatusSteps :: Status -> Status
+ SSTG.Core.Execution.Support: init_status :: Status
+ SSTG.Core.Execution.Support: updateStatusId :: Int -> Status -> Status
+ SSTG.Core.Language.Syntax: AbstractTyCon :: Bool -> GenAlgTyRhs bnd
+ SSTG.Core.Language.Syntax: AddrLit :: Int -> GenLit bnd var
+ SSTG.Core.Language.Syntax: AlgTyCon :: bnd -> [bnd] -> (GenAlgTyRhs bnd) -> GenTyCon bnd
+ SSTG.Core.Language.Syntax: Alt :: (GenAltCon bnd var) -> [var] -> (GenExpr bnd var) -> GenAlt bnd var
+ SSTG.Core.Language.Syntax: AnonTyBndr :: GenTyBinder bnd
+ SSTG.Core.Language.Syntax: AppTy :: (GenType bnd) -> (GenType bnd) -> GenType bnd
+ SSTG.Core.Language.Syntax: Atom :: (GenAtom bnd var) -> GenExpr bnd var
+ SSTG.Core.Language.Syntax: Binding :: RecForm -> [(var, GenBindRhs bnd var)] -> GenBinding bnd var
+ SSTG.Core.Language.Syntax: BlankAddr :: GenLit bnd var
+ SSTG.Core.Language.Syntax: Bottom :: GenType bnd
+ SSTG.Core.Language.Syntax: Case :: (GenExpr bnd var) -> var -> [GenAlt bnd var] -> GenExpr bnd var
+ SSTG.Core.Language.Syntax: CastTy :: (GenType bnd) -> (GenCoercion bnd) -> GenType bnd
+ SSTG.Core.Language.Syntax: Coercion :: (GenType bnd) -> (GenType bnd) -> GenCoercion bnd
+ SSTG.Core.Language.Syntax: CoercionTy :: (GenCoercion bnd) -> GenType bnd
+ SSTG.Core.Language.Syntax: ConApp :: (GenDataCon bnd) -> [GenAtom bnd var] -> GenExpr bnd var
+ SSTG.Core.Language.Syntax: ConForm :: (GenDataCon bnd) -> [GenAtom bnd var] -> GenBindRhs bnd var
+ SSTG.Core.Language.Syntax: DataAlt :: (GenDataCon bnd) -> GenAltCon bnd var
+ SSTG.Core.Language.Syntax: DataCon :: bnd -> (GenType bnd) -> [GenType bnd] -> GenDataCon bnd
+ SSTG.Core.Language.Syntax: DataNSpace :: NameSpace
+ SSTG.Core.Language.Syntax: DataTyCon :: [bnd] -> GenAlgTyRhs bnd
+ SSTG.Core.Language.Syntax: Default :: GenAltCon bnd var
+ SSTG.Core.Language.Syntax: FamilyTyCon :: bnd -> [bnd] -> GenTyCon bnd
+ SSTG.Core.Language.Syntax: ForAllTy :: (GenTyBinder bnd) -> (GenType bnd) -> GenType bnd
+ SSTG.Core.Language.Syntax: FunApp :: var -> [GenAtom bnd var] -> GenExpr bnd var
+ SSTG.Core.Language.Syntax: FunForm :: [var] -> (GenExpr bnd var) -> GenBindRhs bnd var
+ SSTG.Core.Language.Syntax: FunTy :: (GenType bnd) -> (GenType bnd) -> GenType bnd
+ SSTG.Core.Language.Syntax: FunTyCon :: bnd -> [GenTyBinder bnd] -> GenTyCon bnd
+ SSTG.Core.Language.Syntax: Let :: (GenBinding bnd var) -> (GenExpr bnd var) -> GenExpr bnd var
+ SSTG.Core.Language.Syntax: LitAlt :: (GenLit bnd var) -> GenAltCon bnd var
+ SSTG.Core.Language.Syntax: LitAtom :: (GenLit bnd var) -> GenAtom bnd var
+ SSTG.Core.Language.Syntax: LitTy :: TyLit -> GenType bnd
+ SSTG.Core.Language.Syntax: MachChar :: Char -> (GenType bnd) -> GenLit bnd var
+ SSTG.Core.Language.Syntax: MachDouble :: Rational -> (GenType bnd) -> GenLit bnd var
+ SSTG.Core.Language.Syntax: MachFloat :: Rational -> (GenType bnd) -> GenLit bnd var
+ SSTG.Core.Language.Syntax: MachInt :: Int -> (GenType bnd) -> GenLit bnd var
+ SSTG.Core.Language.Syntax: MachLabel :: String -> (Maybe Int) -> (GenType bnd) -> GenLit bnd var
+ SSTG.Core.Language.Syntax: MachNullAddr :: (GenType bnd) -> GenLit bnd var
+ SSTG.Core.Language.Syntax: MachStr :: String -> (GenType bnd) -> GenLit bnd var
+ SSTG.Core.Language.Syntax: MachWord :: Int -> (GenType bnd) -> GenLit bnd var
+ SSTG.Core.Language.Syntax: Name :: String -> (Maybe String) -> NameSpace -> Int -> Name
+ SSTG.Core.Language.Syntax: NamedTyBndr :: bnd -> GenTyBinder bnd
+ SSTG.Core.Language.Syntax: NewTyCon :: bnd -> GenAlgTyRhs bnd
+ SSTG.Core.Language.Syntax: NonRec :: RecForm
+ SSTG.Core.Language.Syntax: NumTyLit :: Int -> TyLit
+ SSTG.Core.Language.Syntax: PrimApp :: (GenPrimFun bnd var) -> [GenAtom bnd var] -> GenExpr bnd var
+ SSTG.Core.Language.Syntax: PrimFun :: bnd -> (GenType bnd) -> GenPrimFun bnd var
+ SSTG.Core.Language.Syntax: PrimTyCon :: bnd -> [GenTyBinder bnd] -> GenTyCon bnd
+ SSTG.Core.Language.Syntax: Program :: [GenBinding bnd var] -> GenProgram bnd var
+ SSTG.Core.Language.Syntax: Promoted :: bnd -> [GenTyBinder bnd] -> (GenDataCon bnd) -> GenTyCon bnd
+ SSTG.Core.Language.Syntax: Rec :: RecForm
+ SSTG.Core.Language.Syntax: StrTyLit :: String -> TyLit
+ SSTG.Core.Language.Syntax: SymLit :: var -> GenLit bnd var
+ SSTG.Core.Language.Syntax: SymLitEval :: (GenPrimFun bnd var) -> [GenLit bnd var] -> GenLit bnd var
+ SSTG.Core.Language.Syntax: SynonymTyCon :: bnd -> [bnd] -> GenTyCon bnd
+ SSTG.Core.Language.Syntax: TcClsNSpace :: NameSpace
+ SSTG.Core.Language.Syntax: TupleTyCon :: bnd -> GenAlgTyRhs bnd
+ SSTG.Core.Language.Syntax: TvNSpace :: NameSpace
+ SSTG.Core.Language.Syntax: TyConApp :: (GenTyCon bnd) -> [GenType bnd] -> GenType bnd
+ SSTG.Core.Language.Syntax: TyVarTy :: bnd -> (GenType bnd) -> GenType bnd
+ SSTG.Core.Language.Syntax: Var :: Name -> (GenType Name) -> Var
+ SSTG.Core.Language.Syntax: VarAtom :: var -> GenAtom bnd var
+ SSTG.Core.Language.Syntax: VarNSpace :: NameSpace
+ SSTG.Core.Language.Syntax: data GenAlgTyRhs bnd
+ SSTG.Core.Language.Syntax: data GenAlt bnd var
+ SSTG.Core.Language.Syntax: data GenAltCon bnd var
+ SSTG.Core.Language.Syntax: data GenAtom bnd var
+ SSTG.Core.Language.Syntax: data GenBindRhs bnd var
+ SSTG.Core.Language.Syntax: data GenBinding bnd var
+ SSTG.Core.Language.Syntax: data GenCoercion bnd
+ SSTG.Core.Language.Syntax: data GenDataCon bnd
+ SSTG.Core.Language.Syntax: data GenExpr bnd var
+ SSTG.Core.Language.Syntax: data GenLit bnd var
+ SSTG.Core.Language.Syntax: data GenPrimFun bnd var
+ SSTG.Core.Language.Syntax: data GenTyBinder bnd
+ SSTG.Core.Language.Syntax: data GenTyCon bnd
+ SSTG.Core.Language.Syntax: data GenType bnd
+ SSTG.Core.Language.Syntax: data Name
+ SSTG.Core.Language.Syntax: data NameSpace
+ SSTG.Core.Language.Syntax: data RecForm
+ SSTG.Core.Language.Syntax: data TyLit
+ SSTG.Core.Language.Syntax: data Var
+ SSTG.Core.Language.Syntax: instance (GHC.Classes.Eq bnd, GHC.Classes.Eq var) => GHC.Classes.Eq (SSTG.Core.Language.Syntax.GenAlt bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Classes.Eq bnd, GHC.Classes.Eq var) => GHC.Classes.Eq (SSTG.Core.Language.Syntax.GenAtom bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Classes.Eq bnd, GHC.Classes.Eq var) => GHC.Classes.Eq (SSTG.Core.Language.Syntax.GenBinding bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Classes.Eq var, GHC.Classes.Eq bnd) => GHC.Classes.Eq (SSTG.Core.Language.Syntax.GenAltCon bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Classes.Eq var, GHC.Classes.Eq bnd) => GHC.Classes.Eq (SSTG.Core.Language.Syntax.GenBindRhs bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Classes.Eq var, GHC.Classes.Eq bnd) => GHC.Classes.Eq (SSTG.Core.Language.Syntax.GenExpr bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Classes.Eq var, GHC.Classes.Eq bnd) => GHC.Classes.Eq (SSTG.Core.Language.Syntax.GenLit bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Classes.Eq var, GHC.Classes.Eq bnd) => GHC.Classes.Eq (SSTG.Core.Language.Syntax.GenProgram bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Read.Read bnd, GHC.Read.Read var) => GHC.Read.Read (SSTG.Core.Language.Syntax.GenAlt bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Read.Read bnd, GHC.Read.Read var) => GHC.Read.Read (SSTG.Core.Language.Syntax.GenAtom bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Read.Read bnd, GHC.Read.Read var) => GHC.Read.Read (SSTG.Core.Language.Syntax.GenBinding bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Read.Read var, GHC.Read.Read bnd) => GHC.Read.Read (SSTG.Core.Language.Syntax.GenAltCon bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Read.Read var, GHC.Read.Read bnd) => GHC.Read.Read (SSTG.Core.Language.Syntax.GenBindRhs bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Read.Read var, GHC.Read.Read bnd) => GHC.Read.Read (SSTG.Core.Language.Syntax.GenExpr bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Read.Read var, GHC.Read.Read bnd) => GHC.Read.Read (SSTG.Core.Language.Syntax.GenLit bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Read.Read var, GHC.Read.Read bnd) => GHC.Read.Read (SSTG.Core.Language.Syntax.GenProgram bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Show.Show bnd, GHC.Show.Show var) => GHC.Show.Show (SSTG.Core.Language.Syntax.GenAlt bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Show.Show bnd, GHC.Show.Show var) => GHC.Show.Show (SSTG.Core.Language.Syntax.GenAtom bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Show.Show bnd, GHC.Show.Show var) => GHC.Show.Show (SSTG.Core.Language.Syntax.GenBinding bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Show.Show var, GHC.Show.Show bnd) => GHC.Show.Show (SSTG.Core.Language.Syntax.GenAltCon bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Show.Show var, GHC.Show.Show bnd) => GHC.Show.Show (SSTG.Core.Language.Syntax.GenBindRhs bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Show.Show var, GHC.Show.Show bnd) => GHC.Show.Show (SSTG.Core.Language.Syntax.GenExpr bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Show.Show var, GHC.Show.Show bnd) => GHC.Show.Show (SSTG.Core.Language.Syntax.GenLit bnd var)
+ SSTG.Core.Language.Syntax: instance (GHC.Show.Show var, GHC.Show.Show bnd) => GHC.Show.Show (SSTG.Core.Language.Syntax.GenProgram bnd var)
+ SSTG.Core.Language.Syntax: instance GHC.Classes.Eq SSTG.Core.Language.Syntax.Name
+ SSTG.Core.Language.Syntax: instance GHC.Classes.Eq SSTG.Core.Language.Syntax.NameSpace
+ SSTG.Core.Language.Syntax: instance GHC.Classes.Eq SSTG.Core.Language.Syntax.RecForm
+ SSTG.Core.Language.Syntax: instance GHC.Classes.Eq SSTG.Core.Language.Syntax.TyLit
+ SSTG.Core.Language.Syntax: instance GHC.Classes.Eq SSTG.Core.Language.Syntax.Var
+ SSTG.Core.Language.Syntax: instance GHC.Classes.Eq bnd => GHC.Classes.Eq (SSTG.Core.Language.Syntax.GenAlgTyRhs bnd)
+ SSTG.Core.Language.Syntax: instance GHC.Classes.Eq bnd => GHC.Classes.Eq (SSTG.Core.Language.Syntax.GenCoercion bnd)
+ SSTG.Core.Language.Syntax: instance GHC.Classes.Eq bnd => GHC.Classes.Eq (SSTG.Core.Language.Syntax.GenDataCon bnd)
+ SSTG.Core.Language.Syntax: instance GHC.Classes.Eq bnd => GHC.Classes.Eq (SSTG.Core.Language.Syntax.GenPrimFun bnd var)
+ SSTG.Core.Language.Syntax: instance GHC.Classes.Eq bnd => GHC.Classes.Eq (SSTG.Core.Language.Syntax.GenTyBinder bnd)
+ SSTG.Core.Language.Syntax: instance GHC.Classes.Eq bnd => GHC.Classes.Eq (SSTG.Core.Language.Syntax.GenTyCon bnd)
+ SSTG.Core.Language.Syntax: instance GHC.Classes.Eq bnd => GHC.Classes.Eq (SSTG.Core.Language.Syntax.GenType bnd)
+ SSTG.Core.Language.Syntax: instance GHC.Classes.Ord SSTG.Core.Language.Syntax.Name
+ SSTG.Core.Language.Syntax: instance GHC.Classes.Ord SSTG.Core.Language.Syntax.NameSpace
+ SSTG.Core.Language.Syntax: instance GHC.Read.Read SSTG.Core.Language.Syntax.Name
+ SSTG.Core.Language.Syntax: instance GHC.Read.Read SSTG.Core.Language.Syntax.NameSpace
+ SSTG.Core.Language.Syntax: instance GHC.Read.Read SSTG.Core.Language.Syntax.RecForm
+ SSTG.Core.Language.Syntax: instance GHC.Read.Read SSTG.Core.Language.Syntax.TyLit
+ SSTG.Core.Language.Syntax: instance GHC.Read.Read SSTG.Core.Language.Syntax.Var
+ SSTG.Core.Language.Syntax: instance GHC.Read.Read bnd => GHC.Read.Read (SSTG.Core.Language.Syntax.GenAlgTyRhs bnd)
+ SSTG.Core.Language.Syntax: instance GHC.Read.Read bnd => GHC.Read.Read (SSTG.Core.Language.Syntax.GenCoercion bnd)
+ SSTG.Core.Language.Syntax: instance GHC.Read.Read bnd => GHC.Read.Read (SSTG.Core.Language.Syntax.GenDataCon bnd)
+ SSTG.Core.Language.Syntax: instance GHC.Read.Read bnd => GHC.Read.Read (SSTG.Core.Language.Syntax.GenPrimFun bnd var)
+ SSTG.Core.Language.Syntax: instance GHC.Read.Read bnd => GHC.Read.Read (SSTG.Core.Language.Syntax.GenTyBinder bnd)
+ SSTG.Core.Language.Syntax: instance GHC.Read.Read bnd => GHC.Read.Read (SSTG.Core.Language.Syntax.GenTyCon bnd)
+ SSTG.Core.Language.Syntax: instance GHC.Read.Read bnd => GHC.Read.Read (SSTG.Core.Language.Syntax.GenType bnd)
+ SSTG.Core.Language.Syntax: instance GHC.Show.Show SSTG.Core.Language.Syntax.Name
+ SSTG.Core.Language.Syntax: instance GHC.Show.Show SSTG.Core.Language.Syntax.NameSpace
+ SSTG.Core.Language.Syntax: instance GHC.Show.Show SSTG.Core.Language.Syntax.RecForm
+ SSTG.Core.Language.Syntax: instance GHC.Show.Show SSTG.Core.Language.Syntax.TyLit
+ SSTG.Core.Language.Syntax: instance GHC.Show.Show SSTG.Core.Language.Syntax.Var
+ SSTG.Core.Language.Syntax: instance GHC.Show.Show bnd => GHC.Show.Show (SSTG.Core.Language.Syntax.GenAlgTyRhs bnd)
+ SSTG.Core.Language.Syntax: instance GHC.Show.Show bnd => GHC.Show.Show (SSTG.Core.Language.Syntax.GenCoercion bnd)
+ SSTG.Core.Language.Syntax: instance GHC.Show.Show bnd => GHC.Show.Show (SSTG.Core.Language.Syntax.GenDataCon bnd)
+ SSTG.Core.Language.Syntax: instance GHC.Show.Show bnd => GHC.Show.Show (SSTG.Core.Language.Syntax.GenPrimFun bnd var)
+ SSTG.Core.Language.Syntax: instance GHC.Show.Show bnd => GHC.Show.Show (SSTG.Core.Language.Syntax.GenTyBinder bnd)
+ SSTG.Core.Language.Syntax: instance GHC.Show.Show bnd => GHC.Show.Show (SSTG.Core.Language.Syntax.GenTyCon bnd)
+ SSTG.Core.Language.Syntax: instance GHC.Show.Show bnd => GHC.Show.Show (SSTG.Core.Language.Syntax.GenType bnd)
+ SSTG.Core.Language.Syntax: newtype GenProgram bnd var
+ SSTG.Core.Language.Syntax: type AlgTyRhs = GenAlgTyRhs Name
+ SSTG.Core.Language.Syntax: type Alt = GenAlt Name Var
+ SSTG.Core.Language.Syntax: type AltCon = GenAltCon Name Var
+ SSTG.Core.Language.Syntax: type Atom = GenAtom Name Var
+ SSTG.Core.Language.Syntax: type BindRhs = GenBindRhs Name Var
+ SSTG.Core.Language.Syntax: type Binding = GenBinding Name Var
+ SSTG.Core.Language.Syntax: type Coercion = GenCoercion Name
+ SSTG.Core.Language.Syntax: type DataCon = GenDataCon Name
+ SSTG.Core.Language.Syntax: type Expr = GenExpr Name Var
+ SSTG.Core.Language.Syntax: type Lit = GenLit Name Var
+ SSTG.Core.Language.Syntax: type PrimFun = GenPrimFun Name Var
+ SSTG.Core.Language.Syntax: type Program = GenProgram Name Var
+ SSTG.Core.Language.Syntax: type TyBinder = GenTyBinder Name
+ SSTG.Core.Language.Syntax: type TyCon = GenTyCon Name
+ SSTG.Core.Language.Syntax: type Type = GenType Name
+ SSTG.Core.Language.Typing: altType :: Alt -> Type
+ SSTG.Core.Language.Typing: atomType :: Atom -> Type
+ SSTG.Core.Language.Typing: dataConType :: DataCon -> Type
+ SSTG.Core.Language.Typing: exprType :: Expr -> Type
+ SSTG.Core.Language.Typing: litType :: Lit -> Type
+ SSTG.Core.Language.Typing: primFunType :: PrimFun -> Type
+ SSTG.Core.Language.Typing: varType :: Var -> Type
- SSTG.Core.Execution.Support: State :: Status -> Stack -> Heap -> Globals -> Code -> [Name] -> PathCons -> SymLinks -> State
+ SSTG.Core.Execution.Support: State :: Status -> Stack -> Heap -> Globals -> Code -> [Name] -> PathCons -> State
- SSTG.Core.Execution.Support: Status :: Int -> Status
+ SSTG.Core.Execution.Support: Status :: Int -> Int -> Int -> Status
- SSTG.Core.Execution.Support: insertGlobals :: Var -> Value -> Globals -> Globals
+ SSTG.Core.Execution.Support: insertGlobals :: (Var, Value) -> Globals -> Globals
- SSTG.Core.Execution.Support: insertHeap :: MemAddr -> HeapObj -> Heap -> Heap
+ SSTG.Core.Execution.Support: insertHeap :: (MemAddr, HeapObj) -> Heap -> Heap
- SSTG.Core.Execution.Support: insertLocals :: Var -> Value -> Locals -> Locals
+ SSTG.Core.Execution.Support: insertLocals :: (Var, Value) -> Locals -> Locals
Files
- SSTG.cabal +4/−4
- app/Main.hs +4/−4
- src/SSTG/Core.hs +2/−2
- src/SSTG/Core/Execution/Engine.hs +10/−9
- src/SSTG/Core/Execution/Naming.hs +18/−25
- src/SSTG/Core/Execution/Rules.hs +15/−15
- src/SSTG/Core/Execution/Stepping.hs +26/−10
- src/SSTG/Core/Execution/Support.hs +35/−44
- src/SSTG/Core/Language.hs +9/−0
- src/SSTG/Core/Language/Syntax.hs +153/−0
- src/SSTG/Core/Language/Typing.hs +53/−0
- src/SSTG/Core/Syntax.hs +0/−9
- src/SSTG/Core/Syntax/Language.hs +0/−153
- src/SSTG/Core/Syntax/Typing.hs +0/−53
- src/SSTG/Core/Translation/Haskell.hs +1/−1
- src/SSTG/Utils/Printing.hs +0/−9
SSTG.cabal view
@@ -1,5 +1,5 @@ name: SSTG-version: 0.1.1.0+version: 0.1.1.1 synopsis: STG Symbolic Execution description: Prototype of STG-based Symbolic Execution for Haskell. homepage: https://github.com/AntonXue/SSTG#readme@@ -19,9 +19,9 @@ , SSTG.Core , SSTG.Core.Translation , SSTG.Core.Translation.Haskell- , SSTG.Core.Syntax- , SSTG.Core.Syntax.Language- , SSTG.Core.Syntax.Typing+ , SSTG.Core.Language+ , SSTG.Core.Language.Syntax+ , SSTG.Core.Language.Typing , SSTG.Core.Execution , SSTG.Core.Execution.Engine , SSTG.Core.Execution.Naming
app/Main.hs view
@@ -45,9 +45,9 @@ ok -> Just ok parseFlags :: [String] -> RunFlags-parseFlags args = RunFlags { step_count = parseStepCount args- , step_type = parseStepType args- , dump_dir = parseDumpDir args }+parseFlags args = RunFlags { flag_step_count = parseStepCount args+ , flag_step_type = parseStepType args+ , flag_dump_dir = parseDumpDir args } injDumpLocs :: String -> Int -> FilePath -> [FilePath] injDumpLocs entry n dir = map (\i -> start ++ (show i) ++ ".txt") [1..n]@@ -77,7 +77,7 @@ putStrLn $ show flags -- Execution! let ldss = execute flags state- case dump_dir flags of+ case flag_dump_dir flags of -- Dump to terminal. Nothing -> mapM_ (putStrLn . pprLivesDeadsStr) ldss -- Dump to file.
src/SSTG/Core.hs view
@@ -1,11 +1,11 @@ -- | Import Module for SSTG.Core module SSTG.Core ( module SSTG.Core.Execution- , module SSTG.Core.Syntax+ , module SSTG.Core.Language , module SSTG.Core.Translation ) where import SSTG.Core.Execution-import SSTG.Core.Syntax+import SSTG.Core.Language import SSTG.Core.Translation
src/SSTG/Core/Execution/Engine.hs view
@@ -9,7 +9,7 @@ , execute1 ) where -import SSTG.Core.Syntax+import SSTG.Core.Language import SSTG.Core.Execution.Naming import SSTG.Core.Execution.Stepping import SSTG.Core.Execution.Support@@ -34,7 +34,9 @@ then LoadOkay state else LoadGuess state (map fst others) where -- Status or something.- status = Status { steps = 0 }+ status = Status { status_id = 1+ , status_parent_id = 0+ , status_steps = 0 } -- Stack initialized to empty. stack = empty_stack -- Globals and Heap are loaded together. They are still beta forms now.@@ -55,8 +57,7 @@ , state_globals = globals , state_code = code , state_names = []- , state_paths = empty_pathcons- , state_links = empty_symlinks }+ , state_paths = empty_pathcons } -- Gather information on all variables. state = state0 { state_names = allNames state0 }@@ -163,9 +164,9 @@ | otherwise = base -- | Run flags.-data RunFlags = RunFlags { step_count :: Int- , step_type :: StepType- , dump_dir :: Maybe FilePath+data RunFlags = RunFlags { flag_step_count :: Int+ , flag_step_type :: StepType+ , flag_dump_dir :: Maybe FilePath } deriving (Show, Eq, Read) -- | Step execution type.@@ -173,9 +174,9 @@ -- | Perform execution on a `State` given the run flags. execute :: RunFlags -> State -> [([LiveState], [DeadState])]-execute flags state = step (step_count flags) state+execute flags state = step (flag_step_count flags) state where step :: Int -> State -> [([LiveState], [DeadState])]- step = case step_type flags of+ step = case flag_step_type flags of BFS -> \k s -> [runBoundedBFS k s] BFSLogged -> runBoundedBFSLogged DFS -> \k s -> [runBoundedDFS k s]
src/SSTG/Core/Execution/Naming.hs view
@@ -8,7 +8,7 @@ , freshSeededNameList ) where -import SSTG.Core.Syntax+import SSTG.Core.Language import SSTG.Core.Execution.Support import qualified Data.List as L@@ -22,9 +22,7 @@ glbls_ns = globalsNames (state_globals state) expr_ns = codeNames (state_code state) pcons_ns = pconsNames (state_paths state)- links_ns = linksNames (state_links state)- acc_ns = stack_ns ++ heap_ns ++ glbls_ns ++- expr_ns ++ pcons_ns ++ links_ns+ acc_ns = stack_ns ++ heap_ns ++ glbls_ns ++ expr_ns ++ pcons_ns -- | `Name`s in a `Stack`. stackNames :: Stack -> [Name]@@ -32,10 +30,10 @@ -- | `Name`s in a `Frame`. frameNames :: Frame -> [Name]-frameNames (UpdateFrame _) = []-frameNames (ApplyFrame as lcs) = concatMap atomNames as ++ localsNames lcs-frameNames (CaseFrame var alts lcs) = varNames var ++ (concatMap altNames alts)- ++ localsNames lcs+frameNames (UpdateFrame _) = []+frameNames (ApplyFrame as ls) = localsNames ls ++ concatMap atomNames as+frameNames (CaseFrame var alts ls) = localsNames ls ++ concatMap altNames alts+ ++ varNames var -- | `Name`s in an `Alt`. altNames :: Alt -> [Name]@@ -68,8 +66,8 @@ -- | `Name`s in a `BindRhs`. bindRhsNames :: BindRhs -> [Name]-bindRhsNames (FunForm prms expr) = (concatMap varNames prms) ++ exprNames expr-bindRhsNames (ConForm dcon args) = dataNames dcon ++ concatMap atomNames args+bindRhsNames (FunForm prms expr) = concatMap varNames prms ++ exprNames expr+bindRhsNames (ConForm dcon args) = concatMap atomNames args ++ dataNames dcon -- | `Name`s in a `Var`. varNames :: Var -> [Name]@@ -77,8 +75,8 @@ -- | `Name`s in an `Atom`. atomNames :: Atom -> [Name]-atomNames (VarAtom var) = varNames var atomNames (LitAtom _) = []+atomNames (VarAtom var) = varNames var -- | `Name`s in `Globals`. globalsNames :: Globals -> [Name]@@ -95,19 +93,19 @@ exprNames (FunApp fun args) = varNames fun ++ concatMap atomNames args exprNames (PrimApp prim args) = pfunNames prim ++ concatMap atomNames args exprNames (ConApp dcon args) = dataNames dcon ++ concatMap atomNames args-exprNames (Let binds expr) = bindingNames binds ++ exprNames expr-exprNames (Case expr var alts) = varNames var ++ exprNames expr- ++ concatMap altNames alts+exprNames (Let bnd expr) = exprNames expr ++ bindingNames bnd+exprNames (Case expr var alts) = exprNames expr ++ varNames var+ ++ concatMap altNames alts -- | `Name`s in a `Type`. typeNames :: Type -> [Name] typeNames (TyVarTy n ty) = n : typeNames ty+typeNames (CoercionTy coer) = coercionNames coer typeNames (AppTy t1 t2) = typeNames t1 ++ typeNames t2-typeNames (ForAllTy bnd ty) = tyBinderNames bnd ++ typeNames ty typeNames (CastTy ty coer) = typeNames ty ++ coercionNames coer typeNames (TyConApp tc ty) = tyConNames tc ++ concatMap typeNames ty-typeNames (CoercionTy coer) = coercionNames coer+typeNames (ForAllTy bnd ty) = typeNames ty ++ tyBinderNames bnd+typeNames (FunTy t1 t2) = typeNames t1 ++ typeNames t2 typeNames (LitTy _) = []-typeNames (FunTy t1 t2) = typeNames t1 ++ typeNames t2 typeNames (Bottom) = [] -- | `Name`s in a `PrimFun`.@@ -155,12 +153,8 @@ -- | `Name`s in a `PathCons`. constraintNames :: Constraint -> [Name]-constraintNames (Constraint (_, vars) expr locals _) = exprNames expr ++- localsNames locals ++- map varName vars--- | `Name`s in a `SymLinks`.-linksNames :: SymLinks -> [Name]-linksNames symlinks = concatMap (\(a, b) -> [a, b]) (symlinksToList symlinks)+constraintNames (Constraint (_, vs) e locs _) = exprNames e ++ localsNames locs+ ++ map varName vs -- | Create a fresh seed given any `Int`, a `String` seed, and a `Set` of -- `String`s that we do not want our new `String` to conflict with. The sole@@ -168,8 +162,7 @@ -- prime number to "orbit" an index around a fixed list of acceptable `Char`s. freshString :: Int -> String -> S.Set String -> String freshString rand seed confs = if S.member seed confs- then freshString (rand + 1) (seed ++ [pick]) confs- else seed+ then freshString (rand + 1) (seed ++ [pick]) confs else seed where pick = bank !! index index = raw_i `mod` (length bank) raw_i = (abs rand) * prime
src/SSTG/Core/Execution/Rules.hs view
@@ -5,7 +5,7 @@ , isStateValueForm ) where -import SSTG.Core.Syntax+import SSTG.Core.Language import SSTG.Core.Execution.Naming import SSTG.Core.Execution.Support @@ -88,7 +88,7 @@ where sname = freshSeededName (varName var) confs svar = Var sname (varType var) (heap', addr) = allocHeap (SymObj (Symbol svar Nothing)) heap- globals' = insertGlobals var (MemVal addr) globals+ globals' = insertGlobals (var, MemVal addr) globals confs' = sname : confs pass_out = LiftAct addr locals globals' heap' confs' @@ -185,8 +185,8 @@ hobjs = map (\s -> SymObj (Symbol s Nothing)) svars (heap', addrs) = allocHeapList hobjs heap mem_vals = map MemVal addrs- llist = (cvar, MemVal addr) : zip params mem_vals- locals' = insertLocalsList llist locals+ kvs = (cvar, MemVal addr) : zip params mem_vals+ locals' = insertLocalsList kvs locals mxpr = Atom (VarAtom mvar) conss = [Constraint (ac, params) mxpr locals' True] confs' = snames ++ confs@@ -341,7 +341,7 @@ -- Rule Case Lit | Evaluate (Case (Atom (LitAtom lit)) cvar alts) locals <- code , (Alt _ _ expr):_ <- matchLitAlts lit alts =- let locals' = insertLocals cvar (LitVal lit) locals+ let locals' = insertLocals (cvar, LitVal lit) locals in Just (RuleCaseLit ,[state { state_code = Evaluate expr locals' }]) @@ -351,8 +351,8 @@ , ConObj dcon vals <- hobj , (Alt _ params expr):_ <- matchDataAlts dcon alts , length params == length vals =- let llist = (cvar, MemVal addr) : zip params vals- locals' = insertLocalsList llist locals+ let kvs = (cvar, MemVal addr) : zip params vals+ locals' = insertLocalsList kvs locals in Just (RuleCaseConPtr ,[state { state_code = Evaluate expr locals' }]) @@ -360,7 +360,7 @@ | Evaluate (Case (Atom (LitAtom lit)) cvar alts) locals <- code , [] <- matchLitAlts lit alts , (Alt _ _ expr):_ <- defaultAlts alts =- let locals' = insertLocals cvar (LitVal lit) locals+ let locals' = insertLocals (cvar, LitVal lit) locals in Just (RuleCaseAnyLit ,[state { state_code = Evaluate expr locals' }]) @@ -370,7 +370,7 @@ , ConObj dcon _ <- hobj , [] <- matchDataAlts dcon alts , (Alt _ _ expr):_ <- defaultAlts alts =- let locals' = insertLocals cvar (MemVal addr) locals+ let locals' = insertLocals (cvar, MemVal addr) locals in Just (RuleCaseAnyConPtr ,[state { state_code = Evaluate expr locals' }]) @@ -405,7 +405,7 @@ let frame = UpdateFrame addr in Just (RuleUpdateCThunk ,[state { state_stack = pushStack frame stack- , state_heap = insertHeap addr Blackhole heap+ , state_heap = insertHeap (addr, Blackhole) heap , state_code = Evaluate expr fun_locs }]) -- Rule Update Frame Delete Lit@@ -413,7 +413,7 @@ , Return (LitVal lit) <- code = Just (RuleUpdateDLit ,[state { state_stack = stack'- , state_heap = insertHeap frm_addr (LitObj lit) heap+ , state_heap = insertHeap (frm_addr, LitObj lit) heap , state_code = Return (LitVal lit) }]) -- Rule Update Frame Delete Val Pointer@@ -423,7 +423,7 @@ , isHeapValueForm hobj = Just (RuleUpdateDValPtr ,[state { state_stack = stack'- , state_heap = insertHeap frm_addr (AddrObj addr) heap+ , state_heap = insertHeap (frm_addr, AddrObj addr) heap , state_code = Return (MemVal addr) }]) -- Rule Case Frame Create Case Non LitVal or MemVal@@ -450,7 +450,7 @@ let vname = freshSeededName (varName cvar) confs vvar = Var vname (varType cvar) mxpr = Atom (VarAtom vvar)- frm_locs' = insertLocals vvar (MemVal addr) frm_locs+ frm_locs' = insertLocals (vvar, MemVal addr) frm_locs in Just (RuleCaseDValPtr ,[state { state_stack = stack' , state_code = Evaluate (Case mxpr cvar alts) frm_locs'@@ -489,7 +489,7 @@ , Just ftype <- memAddrType addr heap = let fname = freshName VarNSpace confs fvar = Var fname ftype- frm_locs' = insertLocals fvar (MemVal addr) frm_locs+ frm_locs' = insertLocals (fvar, MemVal addr) frm_locs in Just (RuleApplyDReturnFun ,[state { state_stack = stack' , state_code = Evaluate (FunApp fvar args) frm_locs'@@ -502,7 +502,7 @@ , SymObj (Symbol sym _) <- hobj = let sname = freshSeededName (varName sym) confs svar = Var sname (varType sym)- frm_locs' = insertLocals svar (MemVal addr) frm_locs+ frm_locs' = insertLocals (svar, MemVal addr) frm_locs in Just (RuleApplyDReturnSym ,[state { state_stack = stack' , state_code = Evaluate (FunApp svar args) frm_locs'
src/SSTG/Core/Execution/Stepping.hs view
@@ -11,6 +11,17 @@ import SSTG.Core.Execution.Rules import SSTG.Core.Execution.Support +import qualified Data.Char as C+import qualified Data.List as L++-- | Custom hash function.+hash :: [Rule] -> Int+hash rules = L.foldl' (\acc c -> (acc + p2 * C.ord c)`mod` p3) p1 str+ where str = concatMap show rules+ p1 = 5381+ p2 = 1009+ p3 = 433494437+ -- | A `State` that is not in value form yet, capable of being evaluated. A -- list of `Rule`s is kept to denote reduction history. type LiveState = ([Rule], State)@@ -19,20 +30,25 @@ -- reduction history. type DeadState = ([Rule], State) --- | Increment the `steps` counter of a `Status`.-incStatus :: Status -> Status-incStatus status = status { steps = (steps status) + 1 }---- | Increment the `steps` counter inside the `state_status`.-incState :: State -> State-incState state = state { state_status = incStatus (state_status state) }+-- | Increment Status conditions, and shift the current / parent id as needed.+incStatus :: Maybe Int -> State -> State+incStatus mb_id state = state { state_status = status' }+ where status = state_status state+ status' = case mb_id of+ Nothing -> incStatusSteps status+ Just id' -> incStatusSteps (updateStatusId id' status) -- | Given a list of `State` along with its list of past `Rule` reductions, -- apply STG reduction. If reduction yields `Nothing`, simply return itself. step :: ([Rule], State) -> [([Rule], State)]-step (hist, state) = case reduce state of- Nothing -> [(hist, state)]- Just (rule, states) -> map (\s -> (hist ++ [rule], incState s)) states+step (hist, start) = case reduce start of+ Nothing -> [(hist, start)]+ Just (rule, results) ->+ let trace = hist ++ [rule]+ mb_id = if length results > 1+ then Just (hash trace)+ else Nothing+ in map (\s -> (trace, incStatus mb_id s)) results -- | This is what we use the `<*>` over. pass :: [LiveState] -> ([LiveState], [DeadState] -> [DeadState])
src/SSTG/Core/Execution/Support.hs view
@@ -21,7 +21,6 @@ , Code(..) , PathCons , Constraint(..)- , SymLinks , nameOccStr , nameUnique@@ -29,6 +28,10 @@ , null_addr , addrInt + , init_status+ , incStatusSteps+ , updateStatusId+ , empty_stack , popStack , pushStack@@ -59,16 +62,12 @@ , insertPathConsList , pathconsToList - , empty_symlinks- , insertSymLinks- , symlinksToList- , lookupValue , vlookupHeap , memAddrType ) where -import SSTG.Core.Syntax+import SSTG.Core.Language import qualified Data.Map as M @@ -102,7 +101,6 @@ , state_code :: Code , state_names :: [Name] , state_paths :: PathCons- , state_links :: SymLinks } deriving (Show, Eq, Read) -- | Symbolic variables. The @Maybe (Expr, Locals)@ can be used to trace the@@ -111,7 +109,9 @@ data Symbol = Symbol Var (Maybe (Expr, Locals)) deriving (Show, Eq, Read) -- | State status.-data Status = Status { steps :: Int+data Status = Status { status_id :: Int+ , status_parent_id :: Int+ , status_steps :: Int } deriving (Show, Eq, Read) -- | Execution stack used in graph reduction semnatics.@@ -168,9 +168,6 @@ data Constraint = Constraint (AltCon, [Var]) Expr Locals Bool deriving (Show, Eq, Read) --- | Symbolic link tables helps keep track of what names went to what, what?-newtype SymLinks = SymLinks (M.Map Name Name) deriving (Show, Eq, Read)- -- Simple functions that require only the immediate data structure. -- | A `Name`'s occurrence string.@@ -193,14 +190,29 @@ addrInt :: MemAddr -> Int addrInt (MemAddr int) = int +-- | Initial `Status`.+init_status :: Status+init_status = Status { status_id = 1+ , status_parent_id = 0+ , status_steps = 0 }++-- | Increment `Status` steps.+incStatusSteps :: Status -> Status+incStatusSteps status = status { status_steps = (status_steps status) + 1 }++-- | Update the `Status` id.+updateStatusId :: Int -> Status -> Status+updateStatusId new_id status = status { status_id = new_id+ , status_parent_id = status_id status }+ -- | Empty `Stack. empty_stack :: Stack empty_stack = Stack [] -- | `Stack` pop. popStack :: Stack -> Maybe (Frame, Stack)-popStack (Stack []) = Nothing-popStack (Stack (f:fs)) = Just (f, Stack fs)+popStack (Stack []) = Nothing+popStack (Stack (frame:frames)) = Just (frame, Stack frames) -- | `Stack` push. pushStack :: Frame -> Stack -> Stack@@ -219,15 +231,12 @@ lookupLocals var (Locals lmap) = M.lookup (varName var) lmap -- | `Locals` insertion.-insertLocals :: Var -> Value -> Locals -> Locals-insertLocals var val (Locals lmap) = Locals lmap'- where lmap' = M.insert (varName var) val lmap+insertLocals :: (Var, Value) -> Locals -> Locals+insertLocals (k, v) (Locals lmap) = Locals (M.insert (varName k) v lmap) -- | List insertion into `Locals`. insertLocalsList :: [(Var, Value)] -> Locals -> Locals-insertLocalsList [] locals = locals-insertLocalsList ((var, val):vvs) locals = insertLocalsList vvs locals'- where locals' = insertLocals var val locals+insertLocalsList kvs locals = foldr insertLocals locals kvs -- | `Locals` to key value pairs. localsToList :: Locals -> [(Name, Value)]@@ -258,15 +267,12 @@ (heapf, as) = allocHeapList hobjs heap' -- | `Heap` direct insertion at a specific `MemAddr`.-insertHeap :: MemAddr -> HeapObj -> Heap -> Heap-insertHeap addr hobj (Heap hmap prev) = Heap hmap' prev- where hmap' = M.insert addr hobj hmap+insertHeap :: (MemAddr, HeapObj) -> Heap -> Heap+insertHeap (k, v) (Heap hmap prev) = Heap (M.insert k v hmap) prev -- | Insert a list of `HeapObj` at specified `MemAddr` locations. insertHeapList :: [(MemAddr, HeapObj)] -> Heap -> Heap-insertHeapList [] heap = heap-insertHeapList ((addr, hobj):ahs) heap = insertHeapList ahs heap'- where heap' = insertHeap addr hobj heap+insertHeapList kvs heap = foldr insertHeap heap kvs -- | `Heap` to key value pairs. heapToList :: Heap -> [(MemAddr, HeapObj)]@@ -281,17 +287,14 @@ lookupGlobals var (Globals gmap) = M.lookup (varName var) gmap -- | `Globals` insertion.-insertGlobals :: Var -> Value -> Globals -> Globals-insertGlobals var val (Globals gmap) = Globals gmap'- where gmap' = M.insert (varName var) val gmap+insertGlobals :: (Var, Value) -> Globals -> Globals+insertGlobals (k, v) (Globals gmap) = Globals (M.insert (varName k) v gmap) -- | Insert a list of `Var` and `Value` pairs into `Globals`. This would -- typically occur for new symbolic variables created from uninterpreted / -- out-of-scope variables during runtime. insertGlobalsList :: [(Var, Value)] -> Globals -> Globals-insertGlobalsList [] globals = globals-insertGlobalsList ((var, val):vvs) globals = insertGlobalsList vvs globals'- where globals' = insertGlobals var val globals+insertGlobalsList kvs globals = foldr insertGlobals globals kvs -- | `Globals` to key value pairs. globalsToList :: Globals -> [(Name, Value)]@@ -303,7 +306,7 @@ -- | `PathCons` insertion. insertPathCons :: Constraint -> PathCons -> PathCons-insertPathCons cons (PathCons pcs) = PathCons (cons : pcs)+insertPathCons cons (PathCons conss) = PathCons (cons : conss) -- | Insert a list of `Constraint`s into a `PathCons`. insertPathConsList :: [Constraint] -> PathCons -> PathCons@@ -312,18 +315,6 @@ -- | `PathCons` to list of `Constraint`s. pathconsToList :: PathCons -> [Constraint] pathconsToList (PathCons conss) = conss---- | Empty `SymLinks`.-empty_symlinks :: SymLinks-empty_symlinks = SymLinks M.empty---- | `SymLinks` insertion.-insertSymLinks :: Name -> Name -> SymLinks -> SymLinks-insertSymLinks old new (SymLinks smap) = SymLinks (M.insert old new smap)---- | `SymLinks` to list of key value pairs.-symlinksToList :: SymLinks -> [(Name, Name)]-symlinksToList (SymLinks smap) = M.toList smap -- Complex functions that involve multiple data structures.
+ src/SSTG/Core/Language.hs view
@@ -0,0 +1,9 @@+-- | Export Module for SSTG.Syntax+module SSTG.Core.Language+ ( module SSTG.Core.Language.Syntax+ , module SSTG.Core.Language.Typing+ ) where++import SSTG.Core.Language.Syntax+import SSTG.Core.Language.Typing+
+ src/SSTG/Core/Language/Syntax.hs view
@@ -0,0 +1,153 @@+-- | SSTG Syntax Definitions+module SSTG.Core.Language.Syntax+ ( module SSTG.Core.Language.Syntax+ ) where++type Program = GenProgram Name Var++type Lit = GenLit Name Var+type Atom = GenAtom Name Var+type PrimFun = GenPrimFun Name Var+type Expr = GenExpr Name Var+type Alt = GenAlt Name Var+type AltCon = GenAltCon Name Var+type Binding = GenBinding Name Var+type BindRhs = GenBindRhs Name Var++type DataCon = GenDataCon Name+type Type = GenType Name+type TyBinder = GenTyBinder Name+type Coercion = GenCoercion Name+type TyCon = GenTyCon Name+type AlgTyRhs = GenAlgTyRhs Name++-- | A `Program` is defined as a list of bindings. The @bnd@ is an identifier+-- that determines a unique binder to the @var@. In practice, these are defined+-- to be `Name` and `Var` respectively.+newtype GenProgram bnd var = Program [GenBinding bnd var]+ deriving (Show, Eq, Read)++-- | Variables, data constructors, type variables, and type constructors.+data NameSpace = VarNSpace | DataNSpace | TvNSpace | TcClsNSpace+ deriving (Show, Eq, Read, Ord)++-- | 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\"@.+data Name = Name String (Maybe String) NameSpace Int+ deriving (Show, Eq, Read, Ord)++-- | Variables consist of a `Name` and a `Type`.+data Var = Var Name (GenType Name) deriving (Show, Eq, Read)++-- | Literals are largely augmented from the original GHC implementation, with+-- additional annotations to denote `BlankAddr` for lifting, `AddrLit` for+-- value deriviation, `SymLit` for symbolic literals, and `SymLitEval` to+-- represent symbolic literal evaluation, as literal manipulation functions+-- are defined in the Haskell Prelude, and thus outside of scope for us.+data GenLit bnd var = MachChar Char (GenType bnd)+ | MachStr String (GenType bnd)+ | MachInt Int (GenType bnd)+ | MachWord Int (GenType bnd)+ | MachFloat Rational (GenType bnd)+ | MachDouble Rational (GenType bnd)+ | MachNullAddr (GenType bnd)+ | MachLabel String (Maybe Int) (GenType bnd)+ | BlankAddr+ | AddrLit Int+ | SymLit var+ | SymLitEval (GenPrimFun bnd var) [GenLit bnd var]+ deriving (Show, Eq, Read)++-- | Atomic objects. `VarAtom` may be used for variable lookups, while+-- `LitAtom` is used to denote literals.+data GenAtom bnd var = LitAtom (GenLit bnd var)+ | VarAtom var+ deriving (Show, Eq, Read)++-- | Primitive functions.+data GenPrimFun bnd var = PrimFun bnd (GenType bnd) deriving (Show, Eq, Read)++-- | Expressions closely correspond to their representation in GHC.+data GenExpr bnd var = Atom (GenAtom bnd var)+ | PrimApp (GenPrimFun bnd var) [GenAtom bnd var]+ | ConApp (GenDataCon bnd) [GenAtom bnd var]+ | FunApp var [GenAtom bnd var]+ | Let (GenBinding bnd var) (GenExpr bnd var)+ | Case (GenExpr bnd var) var [GenAlt bnd var]+ deriving (Show, Eq, Read)++-- | Alternatives utilize an `AltCon`, a list of parameters of that match to+-- the appropriate `DataAlt` as applicable, and an expression for the result.+data GenAlt bnd var = Alt (GenAltCon bnd var) [var] (GenExpr bnd var)+ deriving (Show, Eq, Read)++-- | Alt Constructor+data GenAltCon bnd var = DataAlt (GenDataCon bnd)+ | LitAlt (GenLit bnd var)+ | Default+ deriving (Show, Eq, Read)++-- | Binding+data GenBinding bnd var = Binding RecForm [(var, GenBindRhs bnd var)]+ deriving (Show, Eq, Read)++-- | Recursive?+data RecForm = Rec | NonRec deriving (Show, Eq, Read)++-- | `BindRhs` taken straight from STG can be either in constructor form, or+-- function form. Empty parameter list denotes a thunk.+data GenBindRhs bnd var = ConForm (GenDataCon bnd) [GenAtom bnd var]+ | FunForm [var] (GenExpr bnd var)+ deriving (Show, Eq, Read)++-- | Data Constructor consists of its tag, the type that corresponds to its+-- ADT, and a list of paramters it takes.+data GenDataCon bnd = DataCon bnd (GenType bnd) [GenType bnd]+ deriving (Show, Eq, Read)++-- | 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 GenType bnd = TyVarTy bnd (GenType bnd)+ | AppTy (GenType bnd) (GenType bnd)+ | ForAllTy (GenTyBinder bnd) (GenType bnd)+ | CastTy (GenType bnd) (GenCoercion bnd)+ | TyConApp (GenTyCon bnd) [GenType bnd]+ | CoercionTy (GenCoercion bnd)+ | LitTy TyLit+ | FunTy (GenType bnd) (GenType bnd)+ | Bottom+ deriving (Show, Eq, Read)++-- | Type binder for `ForAllTy`.+data GenTyBinder bnd = NamedTyBndr bnd+ | AnonTyBndr+ deriving (Show, Eq, Read)++-- | `Type` literal.+data TyLit = NumTyLit Int+ | StrTyLit String+ deriving (Show, Eq, Read)++-- | Coercion. I have no idea what this does :)+data GenCoercion bnd = Coercion (GenType bnd) (GenType bnd)+ deriving (Show, Eq, Read)++-- | Type constructor.+data GenTyCon bnd = FunTyCon bnd [GenTyBinder bnd]+ | AlgTyCon bnd [bnd] (GenAlgTyRhs bnd)+ | SynonymTyCon bnd [bnd]+ | FamilyTyCon bnd [bnd]+ | PrimTyCon bnd [GenTyBinder bnd]+ | Promoted bnd [GenTyBinder bnd] (GenDataCon bnd)+ deriving (Show, Eq, Read)++-- | ADT RHS.+data GenAlgTyRhs bnd = AbstractTyCon Bool+ | DataTyCon [bnd]+ | NewTyCon bnd+ | TupleTyCon bnd+ deriving (Show, Eq, Read)+
+ src/SSTG/Core/Language/Typing.hs view
@@ -0,0 +1,53 @@+-- | Typing Module+module SSTG.Core.Language.Typing+ ( module SSTG.Core.Language.Typing+ ) where++import SSTG.Core.Language.Syntax++-- | Variable type.+varType :: Var -> Type+varType (Var _ ty) = ty++-- | Literal type.+litType :: Lit -> Type+litType (MachChar _ ty) = ty+litType (MachStr _ ty) = ty+litType (MachInt _ ty) = ty+litType (MachWord _ ty) = ty+litType (MachFloat _ ty) = ty+litType (MachDouble _ ty) = ty+litType (MachNullAddr ty) = ty+litType (MachLabel _ _ ty) = ty+litType (BlankAddr) = Bottom+litType (AddrLit _) = Bottom+litType (SymLit var) = varType var+litType (SymLitEval pf args) = foldl AppTy (primFunType pf) (map litType args)++-- | Atom type.+atomType :: Atom -> Type+atomType (VarAtom var) = varType var+atomType (LitAtom lit) = litType lit++-- | Primitive function type.+primFunType :: PrimFun -> Type+primFunType (PrimFun _ ty) = ty++-- | Data constructor type denoted as a function.+dataConType :: DataCon -> Type+dataConType (DataCon _ ty tys) = foldr FunTy ty tys++-- | Alt type+altType :: Alt -> Type+altType (Alt _ _ expr) = exprType expr++-- | I wonder what this could possibly be?+exprType :: Expr -> Type+exprType (Atom atom) = atomType atom+exprType (PrimApp pf args) = foldl AppTy (primFunType pf) (map atomType args)+exprType (ConApp dc args) = foldl AppTy (dataConType dc) (map atomType args)+exprType (FunApp fun args) = foldl AppTy (varType fun) (map atomType args)+exprType (Let _ expr) = exprType expr+exprType (Case _ _ (a:_)) = altType a+exprType _ = Bottom+
− src/SSTG/Core/Syntax.hs
@@ -1,9 +0,0 @@--- | Export Module for SSTG.Syntax-module SSTG.Core.Syntax- ( module SSTG.Core.Syntax.Language- , module SSTG.Core.Syntax.Typing- ) where--import SSTG.Core.Syntax.Language-import SSTG.Core.Syntax.Typing-
− src/SSTG/Core/Syntax/Language.hs
@@ -1,153 +0,0 @@--- | SSTG Syntax Definitions-module SSTG.Core.Syntax.Language- ( module SSTG.Core.Syntax.Language- ) where--type Program = GenProgram Name Var--type Lit = GenLit Name Var-type Atom = GenAtom Name Var-type PrimFun = GenPrimFun Name Var-type Expr = GenExpr Name Var-type Alt = GenAlt Name Var-type AltCon = GenAltCon Name Var-type Binding = GenBinding Name Var-type BindRhs = GenBindRhs Name Var--type DataCon = GenDataCon Name-type Type = GenType Name-type TyBinder = GenTyBinder Name-type Coercion = GenCoercion Name-type TyCon = GenTyCon Name-type AlgTyRhs = GenAlgTyRhs Name---- | A `Program` is defined as a list of bindings. The @bnd@ is an identifier--- that determines a unique binder to the @var@. In practice, these are defined--- to be `Name` and `Var` respectively.-newtype GenProgram bnd var = Program [GenBinding bnd var]- deriving (Show, Eq, Read)---- | Variables, data constructors, type variables, and type constructors.-data NameSpace = VarNSpace | DataNSpace | TvNSpace | TcClsNSpace- deriving (Show, Eq, Read, Ord)---- | 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\"@.-data Name = Name String (Maybe String) NameSpace Int- deriving (Show, Eq, Read, Ord)---- | Variables consist of a `Name` and a `Type`.-data Var = Var Name (GenType Name) deriving (Show, Eq, Read)---- | Literals are largely augmented from the original GHC implementation, with--- additional annotations to denote `BlankAddr` for lifting, `AddrLit` for--- value deriviation, `SymLit` for symbolic literals, and `SymLitEval` to--- represent symbolic literal evaluation, as literal manipulation functions--- are defined in the Haskell Prelude, and thus outside of scope for us.-data GenLit bnd var = MachChar Char (GenType bnd)- | MachStr String (GenType bnd)- | MachInt Int (GenType bnd)- | MachWord Int (GenType bnd)- | MachFloat Rational (GenType bnd)- | MachDouble Rational (GenType bnd)- | MachNullAddr (GenType bnd)- | MachLabel String (Maybe Int) (GenType bnd)- | BlankAddr- | AddrLit Int- | SymLit var- | SymLitEval (GenPrimFun bnd var) [GenLit bnd var]- deriving (Show, Eq, Read)---- | Atomic objects. `VarAtom` may be used for variable lookups, while--- `LitAtom` is used to denote literals.-data GenAtom bnd var = VarAtom var- | LitAtom (GenLit bnd var)- deriving (Show, Eq, Read)---- | Primitive functions.-data GenPrimFun bnd var = PrimFun bnd (GenType bnd) deriving (Show, Eq, Read)---- | Expressions closely correspond to their representation in GHC.-data GenExpr bnd var = Atom (GenAtom bnd var)- | PrimApp (GenPrimFun bnd var) [GenAtom bnd var]- | ConApp (GenDataCon bnd) [GenAtom bnd var]- | FunApp var [GenAtom bnd var]- | Let (GenBinding bnd var) (GenExpr bnd var)- | Case (GenExpr bnd var) var [GenAlt bnd var]- deriving (Show, Eq, Read)---- | Alternatives utilize an `AltCon`, a list of parameters of that match to--- the appropriate `DataAlt` as applicable, and an expression for the result.-data GenAlt bnd var = Alt (GenAltCon bnd var) [var] (GenExpr bnd var)- deriving (Show, Eq, Read)---- | Alt Constructor-data GenAltCon bnd var = DataAlt (GenDataCon bnd)- | LitAlt (GenLit bnd var)- | Default- deriving (Show, Eq, Read)---- | Binding-data GenBinding bnd var = Binding RecForm [(var, GenBindRhs bnd var)]- deriving (Show, Eq, Read)---- | Recursive?-data RecForm = Rec | NonRec deriving (Show, Eq, Read)---- | `BindRhs` taken straight from STG can be either in constructor form, or--- function form. Empty parameter list denotes a thunk.-data GenBindRhs bnd var = ConForm (GenDataCon bnd) [GenAtom bnd var]- | FunForm [var] (GenExpr bnd var)- deriving (Show, Eq, Read)---- | Data Constructor consists of its tag, the type that corresponds to its--- ADT, and a list of paramters it takes.-data GenDataCon bnd = DataCon bnd (GenType bnd) [GenType bnd]- deriving (Show, Eq, Read)---- | 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 GenType bnd = TyVarTy bnd (GenType bnd)- | AppTy (GenType bnd) (GenType bnd)- | ForAllTy (GenTyBinder bnd) (GenType bnd)- | CastTy (GenType bnd) (GenCoercion bnd)- | TyConApp (GenTyCon bnd) [GenType bnd]- | CoercionTy (GenCoercion bnd)- | LitTy TyLit- | FunTy (GenType bnd) (GenType bnd)- | Bottom- deriving (Show, Eq, Read)---- | Type binder for `ForAllTy`.-data GenTyBinder bnd = NamedTyBndr bnd- | AnonTyBndr- deriving (Show, Eq, Read)---- | `Type` literal.-data TyLit = NumTyLit Int- | StrTyLit String- deriving (Show, Eq, Read)---- | Coercion. I have no idea what this does :)-data GenCoercion bnd = Coercion (GenType bnd) (GenType bnd)- deriving (Show, Eq, Read)---- | Type constructor.-data GenTyCon bnd = FunTyCon bnd [GenTyBinder bnd]- | AlgTyCon bnd [bnd] (GenAlgTyRhs bnd)- | SynonymTyCon bnd [bnd]- | FamilyTyCon bnd [bnd]- | PrimTyCon bnd [GenTyBinder bnd]- | Promoted bnd [GenTyBinder bnd] (GenDataCon bnd)- deriving (Show, Eq, Read)---- | ADT RHS.-data GenAlgTyRhs bnd = AbstractTyCon Bool- | DataTyCon [bnd]- | NewTyCon bnd- | TupleTyCon bnd- deriving (Show, Eq, Read)-
− src/SSTG/Core/Syntax/Typing.hs
@@ -1,53 +0,0 @@--- | Typing Module-module SSTG.Core.Syntax.Typing- ( module SSTG.Core.Syntax.Typing- ) where--import SSTG.Core.Syntax.Language---- | Variable type.-varType :: Var -> Type-varType (Var _ ty) = ty---- | Literal type.-litType :: Lit -> Type-litType (MachChar _ ty) = ty-litType (MachStr _ ty) = ty-litType (MachInt _ ty) = ty-litType (MachWord _ ty) = ty-litType (MachFloat _ ty) = ty-litType (MachDouble _ ty) = ty-litType (MachNullAddr ty) = ty-litType (MachLabel _ _ ty) = ty-litType (BlankAddr) = Bottom-litType (AddrLit _) = Bottom-litType (SymLit var) = varType var-litType (SymLitEval pf args) = foldl AppTy (primFunType pf) (map litType args)---- | Atom type.-atomType :: Atom -> Type-atomType (VarAtom var) = varType var-atomType (LitAtom lit) = litType lit---- | Primitive function type.-primFunType :: PrimFun -> Type-primFunType (PrimFun _ ty) = ty---- | Data constructor type denoted as a function.-dataConType :: DataCon -> Type-dataConType (DataCon _ ty tys) = foldr FunTy ty tys---- | Alt type-altType :: Alt -> Type-altType (Alt _ _ expr) = exprType expr---- | I wonder what this could possibly be?-exprType :: Expr -> Type-exprType (Atom atom) = atomType atom-exprType (PrimApp pf args) = foldl AppTy (primFunType pf) (map atomType args)-exprType (ConApp dc args) = foldl AppTy (dataConType dc) (map atomType args)-exprType (FunApp fun args) = foldl AppTy (varType fun) (map atomType args)-exprType (Let _ expr) = exprType expr-exprType (Case _ _ (a:_)) = altType a-exprType _ = Bottom-
src/SSTG/Core/Translation/Haskell.hs view
@@ -5,7 +5,7 @@ , mkIOStr ) where -import qualified SSTG.Core.Syntax.Language as SL+import qualified SSTG.Core.Language as SL import Coercion import CorePrep
src/SSTG/Utils/Printing.hs view
@@ -50,7 +50,6 @@ expr_str = (pprCodeStr . state_code) state names_str = (pprNamesStr . state_names) state pcons_str = (pprPathConsStr . state_paths) state- links_str = (pprSymLinksStr . state_links) state acc_strs = [ ">>>>> [State] >>>>>>>>>>>>>>>" , status_str , "----- [Stack] ---------------"@@ -65,8 +64,6 @@ , fst ("", names_str) -- names_str , "----- [Path Constraint] -----" , pcons_str- , "----- [Symbolic Links] ------"- , links_str , "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" ] -- | Inject `String` into parantheses.@@ -367,10 +364,4 @@ locs_str = pprLocalsStr locals hold_str = case hold of { True -> "Positive"; False -> "Negative" } acc_strs = [acon_str, prms_str, expr_str, locs_str, hold_str]---- | Print `SymLinks`.-pprSymLinksStr :: SymLinks -> String-pprSymLinksStr symlinks = injNewLineSeps5 acc_strs- where slist = symlinksToList symlinks- acc_strs = map (\(k, v) -> pprNameStr k ++ ", " ++ pprNameStr v) slist