This module contains an implementation of a case lifter, i.e., an operation which lifts all nested cases (and also nested lets) in a FlatCurry program into new operations.
NOTE: the new operations contain nonsense types, i.e., this transformation should only be used if the actual function types are irrelevant!
Author: Michael Hanus
Version: November 2020
defaultLiftOpts
:: LiftOptions
Default options for lifting all nested case/let/free expressions. |
defaultNoLiftOpts
:: LiftOptions
Default options for lifting no nested case/let/free expression. |
getOpts
:: StateT LiftState Identity LiftOptions
|
genFuncName
:: String -> StateT LiftState Identity (String,String)
|
addFun2State
:: FuncDecl -> LiftState -> LiftState
|
liftProg
:: LiftOptions -> Prog -> Prog
Lift nested cases/lets/free in a FlatCurry program (w.r.t. |
liftTopFun
:: FuncDecl -> StateT LiftState Identity [FuncDecl]
|
liftNewFun
:: FuncDecl -> StateT LiftState Identity FuncDecl
|
liftRule
:: Rule -> StateT LiftState Identity Rule
|
liftExp
:: Bool -> Expr -> StateT LiftState Identity Expr
|
unboundVars
:: Expr -> [Int]
Find all variables which are not bound in an expression. |
unboundVarsInBranch
:: BranchExpr -> [Int]
|
unionMap
:: Eq a => (b -> [a]) -> [b] -> [a]
|
Options for case/let/free lifting.
Constructors:
LiftOptions
:: Bool -> Bool -> LiftOptions
Fields:
liftCase
:: Bool
liftCArg
:: Bool
Options for case/let/free lifting.
Constructors:
LiftState
:: LiftOptions -> String -> [String] -> [FuncDecl] -> String -> Int -> LiftState
Fields:
liftOpts
:: LiftOptions
currMod
:: String
topFuncs
:: [String]
liftFuncs
:: [FuncDecl]
currFunc
:: String
currIndex
:: Int
Type synonym: LiftingState a = State LiftState a
Default options for lifting all nested case/let/free expressions.
|
Default options for lifting no nested case/let/free expression.
|
|
|
Lift nested cases/lets/free in a FlatCurry program (w.r.t. options). |
Find all variables which are not bound in an expression. |
|
|