curry-frontend-0.2.3: src/CurryCompilerOpts.hs
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------
--
-- CurryCompilerOpts - Defines data structures containing options for
-- compiling Curry programs (see module "CurryCompiler")
--
-- September 2005,
-- Martin Engelke (men@informatik.uni-kiel.de)
-- March 2007, extensions by Sebastian Fischer (sebf@informatik.uni-kiel.de)
--
module CurryCompilerOpts where
import GetOpt
--import Options (Dump(..))
-------------------------------------------------------------------------------
-- Data type for recording compiler options
data Options
= Options{ force :: Bool, -- force compilation
html :: Bool, -- generate Html code
importPaths :: [FilePath], -- directories for searching imports
output :: Maybe FilePath, -- name of output file
noInterface :: Bool, -- do not create an interface file
noVerb :: Bool, -- verbosity on/off
noWarn :: Bool, -- warnings on/off
noOverlapWarn :: Bool, -- "overlap" warnings on/off
flat :: Bool, -- generate FlatCurry code
extendedFlat :: Bool, -- generate FlatCurry code with extensions
flatXml :: Bool, -- generate flat XML code
abstract :: Bool, -- generate typed AbstracCurry code
untypedAbstract :: Bool, -- generate untyped AbstractCurry code
parseOnly :: Bool, -- generate source representation
withExtensions :: Bool, -- enable extended functionalities
dump :: [Dump] -- dumps
} deriving Show
-- Default compiler options
defaultOpts = Options{ force = False,
html = False,
importPaths = [],
output = Nothing,
noInterface = False,
noVerb = False,
noWarn = False,
noOverlapWarn = False,
extendedFlat = False,
flat = False,
flatXml = False,
abstract = False,
untypedAbstract = False,
parseOnly = False,
withExtensions = False,
dump = []
}
-- Data type for representing all available options (needed to read and parse
-- the options from the command line; see module "GetOpt")
data Option = Help | Force | Html
| ImportPath FilePath | Output FilePath
| NoInterface | NoVerb | NoWarn | NoOverlapWarn
| FlatXML | Flat | ExtFlat
| Abstract | UntypedAbstract | ParseOnly
| WithExtensions
| Dump [Dump]
deriving Eq
-- All available compiler options
options = [Option "f" ["force"] (NoArg Force)
"force compilation of dependent files",
Option "" ["html"] (NoArg Html)
"generate html code",
Option "i" ["import-dir"] (ReqArg ImportPath "DIR")
"search for imports in DIR",
Option "o" ["output"] (ReqArg Output "FILE")
"write code to FILE",
Option "" ["no-intf"] (NoArg NoInterface)
"do not create an interface file",
Option "" ["no-verb"] (NoArg NoVerb)
"do not print compiler messages",
Option "" ["no-warn"] (NoArg NoWarn)
"do not print warnings",
Option "" ["no-overlap-warn"] (NoArg NoOverlapWarn)
"do not print warnings for overlapping rules",
Option "" ["flat"] (NoArg Flat)
"generate FlatCurry code",
Option "" ["extended-flat"] (NoArg ExtFlat)
"generate FlatCurry code with source references",
Option "" ["xml"] (NoArg FlatXML)
"generate flat xml code",
Option "" ["acy"] (NoArg Abstract)
"generate (type infered) AbstractCurry code",
Option "" ["uacy"] (NoArg UntypedAbstract)
"generate untyped AbstractCurry code",
Option "" ["parse-only"] (NoArg ParseOnly)
"generate source representation",
Option "e" ["extended"] (NoArg WithExtensions)
"enable extended Curry functionalities",
Option "" ["dump-all"] (NoArg (Dump [minBound..maxBound]))
"dump everything",
Option "" ["dump-renamed"] (NoArg (Dump [DumpRenamed]))
"dump source code after renaming",
Option "" ["dump-types"] (NoArg (Dump [DumpTypes]))
"dump types after type-checking",
Option "" ["dump-desugared"] (NoArg (Dump [DumpDesugared]))
"dump source code after desugaring",
Option "" ["dump-simplified"] (NoArg (Dump [DumpSimplified]))
"dump source code after simplification",
Option "" ["dump-lifted"] (NoArg (Dump [DumpLifted]))
"dump source code after lambda-lifting",
Option "" ["dump-il"] (NoArg (Dump [DumpIL]))
"dump intermediate language before lifting",
Option "" ["dump-case"] (NoArg (Dump [DumpCase]))
"dump intermediate language after case simplification",
Option "?h" ["help"] (NoArg Help)
"display this help and exit"
]
-- Inserts an option (type 'Option') into the options record (type 'Options')
selectOption :: Option -> Options -> Options
selectOption Force opts = opts{ force = True }
selectOption (ImportPath dir) opts
= opts{ importPaths = dir:(importPaths opts) }
selectOption (Output file) opts = opts{ output = Just file }
selectOption NoInterface opts = opts{ noInterface = True }
selectOption NoVerb opts = opts{ noVerb = True }
selectOption NoWarn opts = opts{ noWarn = True }
selectOption NoOverlapWarn opts = opts{ noOverlapWarn = True }
selectOption Flat opts = opts{ flat = True }
selectOption ExtFlat opts = opts{ extendedFlat = True }
selectOption Html opts = opts{ html = True }
selectOption FlatXML opts = opts{ flatXml = True }
selectOption Abstract opts = opts{ abstract = True }
selectOption UntypedAbstract opts = opts{ untypedAbstract = True }
selectOption ParseOnly opts = opts{ parseOnly = True }
selectOption WithExtensions opts = opts{ withExtensions = True }
selectOption (Dump ds) opts = opts{ dump = ds ++ dump opts }
-------------------------------------------------------------------------------
-- Data type for representing code dumps
-- TODO: dump FlatCurry code, dump AbstractCurry code, dump after 'case'
-- expansion
data Dump = DumpRenamed -- dump source after renaming
| DumpTypes -- dump types after typechecking
| DumpDesugared -- dump source after desugaring
| DumpSimplified -- dump source after simplification
| DumpLifted -- dump source after lambda-lifting
| DumpIL -- dump IL code after translation
| DumpCase -- dump IL code after case elimination
deriving (Eq,Bounded,Enum,Show)
-------------------------------------------------------------------------------
-------------------------------------------------------------------------------