module Options where
import System.Console.GetOpt
import Data.Set(Set)
import UU.Scanner.Position(Pos,noPos)
import Data.List(intercalate)
import qualified Data.Set as Set
import System.IO
import System.Exit
data Identifier = Ident { Identifier -> String
getName::String, Identifier -> Pos
getPos::Pos }
type NontermIdent = Identifier
identifier :: String -> Identifier
identifier :: String -> Identifier
identifier x :: String
x = String -> Pos -> Identifier
Ident String
x Pos
noPos
instance Eq Identifier where
Ident x :: String
x _ == :: Identifier -> Identifier -> Bool
== Ident y :: String
y _ = String
x String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
y
instance Ord Identifier where
compare :: Identifier -> Identifier -> Ordering
compare (Ident x :: String
x _) (Ident y :: String
y _) = String -> String -> Ordering
forall a. Ord a => a -> a -> Ordering
compare String
x String
y
instance Show Identifier where
show :: Identifier -> String
show ident :: Identifier
ident = Identifier -> String
getName Identifier
ident
data MyOptDescr = MyOpt [Char] [String] (ArgDescr (Options -> Options)) (Options -> String -> [String]) String
fromMyOpt :: MyOptDescr -> OptDescr (Options -> Options)
fromMyOpt :: MyOptDescr -> OptDescr (Options -> Options)
fromMyOpt (MyOpt sh :: String
sh ln :: [String]
ln desc :: ArgDescr (Options -> Options)
desc _ s :: String
s) = String
-> [String]
-> ArgDescr (Options -> Options)
-> String
-> OptDescr (Options -> Options)
forall a. String -> [String] -> ArgDescr a -> String -> OptDescr a
Option String
sh [String]
ln ArgDescr (Options -> Options)
desc String
s
noOpt :: Options -> String -> [String]
noOpt :: Options -> String -> [String]
noOpt _ _ = []
boolOpt :: (Options -> Bool) -> Options -> String -> [String]
boolOpt :: (Options -> Bool) -> Options -> String -> [String]
boolOpt get :: Options -> Bool
get opt :: Options
opt strArg :: String
strArg = let oldVal :: Bool
oldVal = Options -> Bool
get Options
noOptions
newVal :: Bool
newVal = Options -> Bool
get Options
opt
in if Bool
oldVal Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
/= Bool
newVal
then [String
strArg]
else []
stringOpt :: (Options -> String) -> Options -> String -> [String]
stringOpt :: (Options -> String) -> Options -> String -> [String]
stringOpt get :: Options -> String
get opt :: Options
opt strArg :: String
strArg = let oldVal :: String
oldVal = Options -> String
get Options
noOptions
newVal :: String
newVal = Options -> String
get Options
opt
in if String
oldVal String -> String -> Bool
forall a. Eq a => a -> a -> Bool
/= String
newVal
then [String
strArg, String
newVal]
else []
mbStringOpt :: (Options -> Maybe String) -> Options -> String -> [String]
mbStringOpt :: (Options -> Maybe String) -> Options -> String -> [String]
mbStringOpt get :: Options -> Maybe String
get opts :: Options
opts nm :: String
nm = [String] -> (String -> [String]) -> Maybe String -> [String]
forall b a. b -> (a -> b) -> Maybe a -> b
maybe [] (\s :: String
s -> [String
nmString -> ShowS
forall a. [a] -> [a] -> [a]
++"="String -> ShowS
forall a. [a] -> [a] -> [a]
++String
s]) (Options -> Maybe String
get Options
opts)
serializeOption :: Options -> MyOptDescr -> [String]
serializeOption :: Options -> MyOptDescr -> [String]
serializeOption opt :: Options
opt (MyOpt sh :: String
sh ln :: [String]
ln _ get :: Options -> String -> [String]
get _) = Options -> String -> [String]
get Options
opt String
strArg
where
strArg :: String
strArg = if String -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
sh
then '-' Char -> ShowS
forall a. a -> [a] -> [a]
: '-' Char -> ShowS
forall a. a -> [a] -> [a]
: [String] -> String
forall a. [a] -> a
head [String]
ln
else '-' Char -> ShowS
forall a. a -> [a] -> [a]
: String -> Char
forall a. [a] -> a
head String
sh Char -> ShowS
forall a. a -> [a] -> [a]
: []
allOptions :: [MyOptDescr]
allOptions :: [MyOptDescr]
allOptions =
[ String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt ['m'] [] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg (Maybe String -> Options -> Options
moduleOpt Maybe String
forall a. Maybe a
Nothing)) Options -> String -> [String]
noOpt "generate default module header"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["module"] ((Maybe String -> Options -> Options)
-> String -> ArgDescr (Options -> Options)
forall a. (Maybe String -> a) -> String -> ArgDescr a
OptArg Maybe String -> Options -> Options
moduleOpt "name") Options -> String -> [String]
moduleOptGet "generate module header, specify module name"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt ['d'] ["data"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
dataOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
dataTypes) "generate data type definition"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["datarecords"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
dataRecOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
dataRecords) "generate record data types"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["strictdata"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
strictDataOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
strictData) "generate strict data fields (when data is generated)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["strictwrap"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
strictWrapOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
strictWrap) "generate strict wrap fields for WRAPPER generated data"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt ['c'] ["catas"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
cataOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
folds) "generate catamorphisms"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt ['f'] ["semfuns"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
semfunsOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
semfuns) "generate semantic functions"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt ['s'] ["signatures"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
signaturesOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
typeSigs) "generate signatures for semantic functions"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["newtypes"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
newtypesOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
newtypes) "use newtypes instead of type synonyms"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt ['p'] ["pretty"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
prettyOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
attrInfo) "generate pretty printed list of attributes"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt ['w'] ["wrappers"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
wrappersOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
wrappers) "generate wappers for semantic domains"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt ['r'] ["rename"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
renameOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
rename) "rename data constructors"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["modcopy"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
modcopyOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
modcopy) "use modified copy rule"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["nest"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
nestOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
nest) "use nested tuples"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["syntaxmacro"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
smacroOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
smacro) "experimental: generate syntax macro code (using knit catas)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt ['o'] ["output"] ((String -> Options -> Options)
-> String -> ArgDescr (Options -> Options)
forall a. (String -> a) -> String -> ArgDescr a
ReqArg String -> Options -> Options
outputOpt "file") Options -> String -> [String]
outputOptGet "specify output file"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt ['v'] ["verbose"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
verboseOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
verbose) "verbose error message format"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt ['h','?'] ["help"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
helpOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
showHelp) "get (this) usage information"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt ['a'] ["all"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
allOpt) Options -> String -> [String]
noOpt ("do everything (-" String -> ShowS
forall a. [a] -> [a] -> [a]
++ String
allc String -> ShowS
forall a. [a] -> [a] -> [a]
++ ")")
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt ['P'] [""] ((String -> Options -> Options)
-> String -> ArgDescr (Options -> Options)
forall a. (String -> a) -> String -> ArgDescr a
ReqArg String -> Options -> Options
searchPathOpt "search path") Options -> String -> [String]
searchPathOptGet ("specify seach path")
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["prefix"] ((String -> Options -> Options)
-> String -> ArgDescr (Options -> Options)
forall a. (String -> a) -> String -> ArgDescr a
ReqArg String -> Options -> Options
prefixOpt "prefix") ((Options -> String) -> Options -> String -> [String]
stringOpt Options -> String
prefix) "set prefix for semantic functions"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["self"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
selfOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
withSelf) "generate self attribute"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["cycle"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
cycleOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
withCycle) "check for cyclic definitions"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["version"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
versionOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
showVersion) "get version information"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt ['O'] ["optimize"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
optimizeOpt) Options -> String -> [String]
noOpt "optimize generated code (--visit --case)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["visit"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
visitOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
visit) "try generating visit functions"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["loag"] ((Maybe String -> Options -> Options)
-> String -> ArgDescr (Options -> Options)
forall a. (Maybe String -> a) -> String -> ArgDescr a
OptArg Maybe String -> Options -> Options
loagOpt "Bool") ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
loag) "recognises all linear ordered attribute grammars by generting a SAT problem, uses --verbose to print out numbers of clauses and variables"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["aoag"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
aoagOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
aoag) "recognises all linear ordered attribute grammars by finding fake dependencies, uses --verbose to print out the selected fake dependencies"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["seq"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
seqOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
withSeq) "force evaluation using function seq (visit functions only)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["unbox"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
unboxOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
unbox) "use unboxed tuples"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["bangpats"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
bangpatsOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
bangpats) "use bang patterns (visit functions only)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["case"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
casesOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
cases) "Use nested cases instead of let (visit functions only)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["strictcase"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
strictCasesOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
strictCases) "Force evaluation of the scrutinee of cases (in generated code, visit functions only)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["strictercase"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
stricterCasesOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
stricterCases) "Force evaluation of all variables bound by a case statement (in generated code)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["strictsem"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
strictSemOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
strictSems) "Force evaluation of sem-function arguments (in generated code)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["localcps"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
localCpsOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
localCps) "Apply a local CPS transformation (in generated code, visit functions only)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["splitsems"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
splitSemsOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
splitSems) "Split semantic functions into smaller pieces"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["Werrors"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
werrorsOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
werrors) "Turn warnings into fatal errors"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["Wignore"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
wignoreOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
wignore) "Ignore warnings"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["Wmax"] ((String -> Options -> Options)
-> String -> ArgDescr (Options -> Options)
forall a. (String -> a) -> String -> ArgDescr a
ReqArg String -> Options -> Options
wmaxErrsOpt "<max errs reported>") Options -> String -> [String]
wmaxErrsOptGet "Sets the maximum number of errors that are reported"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["dumpgrammar"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
dumpgrammarOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
dumpgrammar) "Dump internal grammar representation (in generated code)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["dumpcgrammar"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
dumpcgrammarOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
dumpcgrammar)"Dump internal cgrammar representation (in generated code)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["gentraces"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
genTracesOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
genTraces) "Generate trace expressions (in generated code)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["genusetraces"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
genUseTracesOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
genUseTraces)"Generate trace expressions at attribute use sites (in generated code)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["gencostcentres"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
genCostCentresOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
genCostCentres) "Generate cost centre pragmas (in generated code)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["genlinepragmas"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
genLinePragmasOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
genLinePragmas) "Generate GHC LINE pragmas (in generated code)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["sepsemmods"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
sepSemModsOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
sepSemMods) "Generate separate modules for semantic functions (in generated code)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt ['M'] ["genfiledeps"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
genFileDepsOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
genFileDeps) "Generate a list of dependencies on the input AG files"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["genvisage"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
genVisageOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
genvisage) "Generate output for the AG visualizer Visage"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["aspectag"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
genAspectAGOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
genAspectAG) "Generate AspectAG file"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["nogroup"] ((String -> Options -> Options)
-> String -> ArgDescr (Options -> Options)
forall a. (String -> a) -> String -> ArgDescr a
ReqArg String -> Options -> Options
noGroupOpt "attributes") Options -> String -> [String]
noGroupOptGet "specify the attributes that won't be grouped in AspectAG"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["extends"] ((String -> Options -> Options)
-> String -> ArgDescr (Options -> Options)
forall a. (String -> a) -> String -> ArgDescr a
ReqArg String -> Options -> Options
extendsOpt "module") ((Options -> Maybe String) -> Options -> String -> [String]
mbStringOpt Options -> Maybe String
extends) "specify a module to be extended"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["genattrlist"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
genAttrListOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
genAttributeList) "Generate a list of all explicitly defined attributes (outside irrefutable patterns)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["forceirrefutable"] ((Maybe String -> Options -> Options)
-> String -> ArgDescr (Options -> Options)
forall a. (Maybe String -> a) -> String -> ArgDescr a
OptArg Maybe String -> Options -> Options
forceIrrefutableOpt "file") ((Options -> Maybe String) -> Options -> String -> [String]
mbStringOpt Options -> Maybe String
forceIrrefutables) "Force a set of explicitly defined attributes to be irrefutable, specify file containing the attribute set"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["uniquedispenser"] ((String -> Options -> Options)
-> String -> ArgDescr (Options -> Options)
forall a. (String -> a) -> String -> ArgDescr a
ReqArg String -> Options -> Options
uniqueDispenserOpt "name") ((Options -> String) -> Options -> String -> [String]
stringOpt Options -> String
uniqueDispenser) "The Haskell function to call in the generated code"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["lckeywords"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
lcKeywordsOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
lcKeywords) "Use lowercase keywords (sem, attr) instead of the uppercase ones (SEM, ATTR)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["doublecolons"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
doubleColonsOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
doubleColons)"Use double colons for type signatures instead of single colons"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt ['H'] ["haskellsyntax"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
haskellSyntaxOpt) Options -> String -> [String]
noOpt "Use Haskell like syntax (equivalent to --lckeywords and --doublecolons --genlinepragmas)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["reference"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
referenceOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
reference) "Use reference attributes"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["monadic"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
monadicOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
monadic) "Experimental: generate monadic code"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["ocaml"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
ocamlOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
ocaml) "Generate Ocaml code"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["cleanlang"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
cleanOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
clean) "Generate Clean code"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["breadthfirst"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
breadthfirstOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
breadthFirst)"Experimental: generate breadth-first code"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["breadthfirst-strict"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
breadthfirstStrictOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
breadthFirstStrict) "Experimental: outermost breadth-first evaluator is strict instead of lazy"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["visitcode"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
visitorsOutputOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
visitorsOutput) "Experimental: generate visitors code"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["kennedywarren"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
kennedyWarrenOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
kennedyWarren) "Use Kennedy-Warren's algorithm for ordering"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["statistics"] ((String -> Options -> Options)
-> String -> ArgDescr (Options -> Options)
forall a. (String -> a) -> String -> ArgDescr a
ReqArg String -> Options -> Options
statisticsOpt "FILE to append to") ((Options -> Maybe String) -> Options -> String -> [String]
mbStringOpt Options -> Maybe String
statsFile) "Append statistics to FILE"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["checkParseRhs"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
parseHsRhsOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
checkParseRhs) "Parse RHS of rules with Haskell parser"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["checkParseTys"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
parseHsTpOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
checkParseTy) "Parse types of attrs with Haskell parser"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["checkParseBlocks"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
parseHsBlockOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
checkParseBlock) "Parse blocks with Haskell parser"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["checkParseHaskell"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
parseHsOpt) Options -> String -> [String]
noOpt "Parse Haskell code (recognizer)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["nocatas"] ((String -> Options -> Options)
-> String -> ArgDescr (Options -> Options)
forall a. (String -> a) -> String -> ArgDescr a
ReqArg String -> Options -> Options
nocatasOpt "list of nonterms") Options -> String -> [String]
nocatasOptGet "Nonterminals not to generate catas for"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["nooptimize"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
noOptimizeOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
noOptimizations) "Disable optimizations"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["parallel"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
parallelOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
parallelInvoke) "Generate a parallel evaluator (if possible)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["monadicwrapper"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
monadicWrappersOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
monadicWrappers) "Generate monadic wrappers"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["helpinlining"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
helpInliningOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
helpInlining) "Generate inline directives for GHC"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["dummytokenvisit"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
dummyTokenVisitOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
dummyTokenVisit) "Add an additional dummy parameter to visit functions"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["tupleasdummytoken"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
tupleAsDummyTokenOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
tupleAsDummyToken) "Use conventional tuples as dummy parameter instead of a RealWorld state token"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["stateasdummytoken"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
stateAsDummyTokenOpt) Options -> String -> [String]
noOpt "Use RealWorld state token as dummy parameter instead of conventional tuples (default)"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["strictdummytoken"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
strictDummyTokenOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
strictDummyToken) "Strictify the dummy token that makes states and rules functions"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["noperruletypesigs"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
noPerRuleTypeSigsOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
noPerRuleTypeSigs) "Do not generate type sigs for attrs passed to rules"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["noperstatetypesigs"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
noPerStateTypeSigsOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
noPerStateTypeSigs) "Do not generate type sigs for attrs saved in node states"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["noeagerblackholing"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
noEagerBlackholingOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
noEagerBlackholing) "Do not automatically add the eager blackholing feature for parallel programs"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["noperrulecostcentres"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
noPerRuleCostCentresOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
noPerRuleCostCentres) "Do not generate cost centres for rules"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["nopervisitcostcentres"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
noPerVisitCostCentresOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
noPerVisitCostCentres) "Do not generate cost centres for visits"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["noinlinepragmas"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
noInlinePragmasOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
noInlinePragmas) "Definitely not generate inline directives"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["aggressiveinlinepragmas"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
aggressiveInlinePragmasOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
aggressiveInlinePragmas) "Generate more aggressive inline directives"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["latehigherorderbinding"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
lateHigherOrderBindingOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
lateHigherOrderBinding) "Generate an attribute and wrapper for late binding of higher-order attributes"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["noincludes"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
noIncludesOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
noIncludes) "Ignore include directives in .ag files"
, String
-> [String]
-> ArgDescr (Options -> Options)
-> (Options -> String -> [String])
-> String
-> MyOptDescr
MyOpt [] ["quiet"] ((Options -> Options) -> ArgDescr (Options -> Options)
forall a. a -> ArgDescr a
NoArg Options -> Options
beQuietOpt) ((Options -> Bool) -> Options -> String -> [String]
boolOpt Options -> Bool
beQuiet) "Dont print some compilation information"
]
options :: [OptDescr (Options -> Options)]
options :: [OptDescr (Options -> Options)]
options = (MyOptDescr -> OptDescr (Options -> Options))
-> [MyOptDescr] -> [OptDescr (Options -> Options)]
forall a b. (a -> b) -> [a] -> [b]
map MyOptDescr -> OptDescr (Options -> Options)
fromMyOpt [MyOptDescr]
allOptions
allc :: String
allc :: String
allc = "dcfsprm"
data = NoName
| Name String
| Default deriving (ModuleHeader -> ModuleHeader -> Bool
(ModuleHeader -> ModuleHeader -> Bool)
-> (ModuleHeader -> ModuleHeader -> Bool) -> Eq ModuleHeader
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ModuleHeader -> ModuleHeader -> Bool
$c/= :: ModuleHeader -> ModuleHeader -> Bool
== :: ModuleHeader -> ModuleHeader -> Bool
$c== :: ModuleHeader -> ModuleHeader -> Bool
Eq, Int -> ModuleHeader -> ShowS
[ModuleHeader] -> ShowS
ModuleHeader -> String
(Int -> ModuleHeader -> ShowS)
-> (ModuleHeader -> String)
-> ([ModuleHeader] -> ShowS)
-> Show ModuleHeader
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ModuleHeader] -> ShowS
$cshowList :: [ModuleHeader] -> ShowS
show :: ModuleHeader -> String
$cshow :: ModuleHeader -> String
showsPrec :: Int -> ModuleHeader -> ShowS
$cshowsPrec :: Int -> ModuleHeader -> ShowS
Show)
data Options = Options{ Options -> ModuleHeader
moduleName :: ModuleHeader
, Options -> Bool
dataTypes :: Bool
, Options -> Bool
dataRecords :: Bool
, Options -> Bool
strictData :: Bool
, Options -> Bool
strictWrap :: Bool
, Options -> Bool
folds :: Bool
, Options -> Bool
semfuns :: Bool
, Options -> Bool
typeSigs :: Bool
, Options -> Bool
attrInfo :: Bool
, Options -> Bool
rename :: Bool
, Options -> Bool
wrappers :: Bool
, Options -> Bool
modcopy :: Bool
, Options -> Bool
newtypes :: Bool
, Options -> Bool
nest :: Bool
, Options -> Bool
smacro :: Bool
, Options -> [String]
outputFiles :: [String]
, Options -> [String]
searchPath :: [String]
, Options -> Bool
verbose :: Bool
, Options -> String
prefix :: String
, Options -> Bool
withSelf :: Bool
, Options -> Bool
withCycle :: Bool
, Options -> Bool
showHelp :: Bool
, Options -> Bool
showVersion :: Bool
, Options -> Bool
visit :: Bool
, Options -> Bool
loag :: Bool
, Options -> Bool
minvisits :: Bool
, Options -> Bool
aoag :: Bool
, Options -> Bool
withSeq :: Bool
, Options -> Bool
unbox :: Bool
, Options -> Bool
bangpats :: Bool
, Options -> Bool
cases :: Bool
, Options -> Bool
strictCases :: Bool
, Options -> Bool
stricterCases :: Bool
, Options -> Bool
strictSems :: Bool
, Options -> Bool
localCps :: Bool
, Options -> Bool
splitSems :: Bool
, Options -> Bool
werrors :: Bool
, Options -> Bool
wignore :: Bool
, Options -> Int
wmaxerrs :: Int
, Options -> Bool
dumpgrammar :: Bool
, Options -> Bool
dumpcgrammar :: Bool
, Options -> Bool
sepSemMods :: Bool
, Options -> Bool
allowSepSemMods :: Bool
, Options -> Bool
genFileDeps :: Bool
, Options -> Bool
genLinePragmas :: Bool
, Options -> Bool
genvisage :: Bool
, Options -> Bool
genAspectAG :: Bool
, Options -> [String]
noGroup :: [String]
, Options -> Maybe String
extends :: Maybe String
, Options -> Bool
genAttributeList :: Bool
, Options -> Maybe String
forceIrrefutables :: Maybe String
, Options -> String
uniqueDispenser :: String
, Options -> Bool
lcKeywords :: Bool
, Options -> Bool
doubleColons :: Bool
, Options -> Bool
monadic :: Bool
, Options -> Bool
ocaml :: Bool
, Options -> Bool
clean :: Bool
, Options -> Bool
visitorsOutput :: Bool
, Options -> Maybe String
statsFile :: Maybe String
, Options -> Bool
breadthFirst :: Bool
, Options -> Bool
breadthFirstStrict :: Bool
, Options -> Bool
checkParseRhs :: Bool
, Options -> Bool
checkParseTy :: Bool
, Options -> Bool
checkParseBlock :: Bool
, Options -> Set Identifier
nocatas :: Set NontermIdent
, Options -> Bool
noOptimizations :: Bool
, Options -> Bool
reference :: Bool
, Options -> Bool
noIncludes :: Bool
, Options -> String -> IO ()
outputStr :: String -> IO ()
, Options -> Int -> IO ()
failWithCode :: Int -> IO ()
, Options -> Maybe String
mainFilename :: Maybe String
, Options -> Bool
beQuiet :: Bool
, Options -> Bool
kennedyWarren :: Bool
, Options -> Bool
parallelInvoke :: Bool
, Options -> Bool
tupleAsDummyToken :: Bool
, Options -> Bool
dummyTokenVisit :: Bool
, Options -> Bool
strictDummyToken :: Bool
, Options -> Bool
noPerRuleTypeSigs :: Bool
, Options -> Bool
noPerStateTypeSigs :: Bool
, Options -> Bool
noEagerBlackholing :: Bool
, Options -> Bool
lateHigherOrderBinding :: Bool
, Options -> Bool
monadicWrappers :: Bool
, Options -> Bool
genTraces :: Bool
, Options -> Bool
genUseTraces :: Bool
, Options -> Bool
genCostCentres :: Bool
, Options -> Bool
noPerRuleCostCentres :: Bool
, Options -> Bool
noPerVisitCostCentres :: Bool
, Options -> Bool
helpInlining :: Bool
, Options -> Bool
noInlinePragmas :: Bool
, Options -> Bool
aggressiveInlinePragmas :: Bool
}
noOptions :: Options
noOptions :: Options
noOptions = Options :: ModuleHeader
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> [String]
-> [String]
-> Bool
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Int
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> [String]
-> Maybe String
-> Bool
-> Maybe String
-> String
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Maybe String
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Set Identifier
-> Bool
-> Bool
-> Bool
-> (String -> IO ())
-> (Int -> IO ())
-> Maybe String
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Bool
-> Options
Options { moduleName :: ModuleHeader
moduleName = ModuleHeader
NoName
, dataTypes :: Bool
dataTypes = Bool
False
, dataRecords :: Bool
dataRecords = Bool
False
, strictData :: Bool
strictData = Bool
False
, strictWrap :: Bool
strictWrap = Bool
False
, folds :: Bool
folds = Bool
False
, semfuns :: Bool
semfuns = Bool
False
, typeSigs :: Bool
typeSigs = Bool
False
, attrInfo :: Bool
attrInfo = Bool
False
, rename :: Bool
rename = Bool
False
, wrappers :: Bool
wrappers = Bool
False
, modcopy :: Bool
modcopy = Bool
False
, newtypes :: Bool
newtypes = Bool
False
, nest :: Bool
nest = Bool
False
, smacro :: Bool
smacro = Bool
False
, outputFiles :: [String]
outputFiles = []
, searchPath :: [String]
searchPath = []
, verbose :: Bool
verbose = Bool
False
, showHelp :: Bool
showHelp = Bool
False
, showVersion :: Bool
showVersion = Bool
False
, prefix :: String
prefix = "sem_"
, withSelf :: Bool
withSelf = Bool
False
, withCycle :: Bool
withCycle = Bool
False
, visit :: Bool
visit = Bool
False
, loag :: Bool
loag = Bool
False
, minvisits :: Bool
minvisits = Bool
False
, aoag :: Bool
aoag = Bool
False
, withSeq :: Bool
withSeq = Bool
False
, unbox :: Bool
unbox = Bool
False
, bangpats :: Bool
bangpats = Bool
False
, cases :: Bool
cases = Bool
False
, strictCases :: Bool
strictCases = Bool
False
, stricterCases :: Bool
stricterCases = Bool
False
, strictSems :: Bool
strictSems = Bool
False
, localCps :: Bool
localCps = Bool
False
, splitSems :: Bool
splitSems = Bool
False
, werrors :: Bool
werrors = Bool
False
, wignore :: Bool
wignore = Bool
False
, wmaxerrs :: Int
wmaxerrs = 99999
, dumpgrammar :: Bool
dumpgrammar = Bool
False
, dumpcgrammar :: Bool
dumpcgrammar = Bool
False
, sepSemMods :: Bool
sepSemMods = Bool
False
, allowSepSemMods :: Bool
allowSepSemMods = Bool
True
, genFileDeps :: Bool
genFileDeps = Bool
False
, genLinePragmas :: Bool
genLinePragmas = Bool
False
, genvisage :: Bool
genvisage = Bool
False
, genAspectAG :: Bool
genAspectAG = Bool
False
, noGroup :: [String]
noGroup = []
, extends :: Maybe String
extends = Maybe String
forall a. Maybe a
Nothing
, genAttributeList :: Bool
genAttributeList = Bool
False
, forceIrrefutables :: Maybe String
forceIrrefutables = Maybe String
forall a. Maybe a
Nothing
, uniqueDispenser :: String
uniqueDispenser = "nextUnique"
, lcKeywords :: Bool
lcKeywords = Bool
False
, doubleColons :: Bool
doubleColons = Bool
False
, monadic :: Bool
monadic = Bool
False
, ocaml :: Bool
ocaml = Bool
False
, clean :: Bool
clean = Bool
False
, visitorsOutput :: Bool
visitorsOutput = Bool
False
, statsFile :: Maybe String
statsFile = Maybe String
forall a. Maybe a
Nothing
, breadthFirst :: Bool
breadthFirst = Bool
False
, breadthFirstStrict :: Bool
breadthFirstStrict = Bool
False
, checkParseRhs :: Bool
checkParseRhs = Bool
False
, checkParseTy :: Bool
checkParseTy = Bool
False
, checkParseBlock :: Bool
checkParseBlock = Bool
False
, nocatas :: Set Identifier
nocatas = Set Identifier
forall a. Set a
Set.empty
, noOptimizations :: Bool
noOptimizations = Bool
False
, reference :: Bool
reference = Bool
False
, noIncludes :: Bool
noIncludes = Bool
False
, outputStr :: String -> IO ()
outputStr = Handle -> String -> IO ()
hPutStr Handle
stderr
, failWithCode :: Int -> IO ()
failWithCode = ExitCode -> IO ()
forall a. ExitCode -> IO a
exitWith (ExitCode -> IO ()) -> (Int -> ExitCode) -> Int -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ExitCode
ExitFailure
, mainFilename :: Maybe String
mainFilename = Maybe String
forall a. Maybe a
Nothing
, beQuiet :: Bool
beQuiet = Bool
False
, kennedyWarren :: Bool
kennedyWarren = Bool
False
, parallelInvoke :: Bool
parallelInvoke = Bool
False
, tupleAsDummyToken :: Bool
tupleAsDummyToken = Bool
True
, dummyTokenVisit :: Bool
dummyTokenVisit = Bool
False
, strictDummyToken :: Bool
strictDummyToken = Bool
False
, noPerRuleTypeSigs :: Bool
noPerRuleTypeSigs = Bool
False
, noPerStateTypeSigs :: Bool
noPerStateTypeSigs = Bool
False
, noEagerBlackholing :: Bool
noEagerBlackholing = Bool
False
, lateHigherOrderBinding :: Bool
lateHigherOrderBinding = Bool
False
, monadicWrappers :: Bool
monadicWrappers = Bool
False
, genTraces :: Bool
genTraces = Bool
False
, genUseTraces :: Bool
genUseTraces = Bool
False
, genCostCentres :: Bool
genCostCentres = Bool
False
, noPerRuleCostCentres :: Bool
noPerRuleCostCentres = Bool
False
, noPerVisitCostCentres :: Bool
noPerVisitCostCentres = Bool
False
, helpInlining :: Bool
helpInlining = Bool
False
, noInlinePragmas :: Bool
noInlinePragmas = Bool
False
, aggressiveInlinePragmas :: Bool
aggressiveInlinePragmas = Bool
False
}
loagOpt :: (Maybe String) -> Options -> Options
loagOpt :: Maybe String -> Options -> Options
loagOpt mstr :: Maybe String
mstr opts :: Options
opts =
case Maybe String
mstr of
Nothing -> Options
opts'
Just "0" -> Options
opts'
Just _ -> Options
opts' {minvisits :: Bool
minvisits = Bool
True}
where opts' :: Options
opts'=Options
opts{loag :: Bool
loag = Bool
True, visit :: Bool
visit = Bool
True}
aoagOpt :: Options -> Options
aoagOpt :: Options -> Options
aoagOpt opts :: Options
opts =
Options
opts{loag :: Bool
loag = Bool
True, visit :: Bool
visit = Bool
True, aoag :: Bool
aoag = Bool
True}
moduleOpt :: Maybe String -> Options -> Options
moduleOpt :: Maybe String -> Options -> Options
moduleOpt nm :: Maybe String
nm opts :: Options
opts = Options
opts{moduleName :: ModuleHeader
moduleName = ModuleHeader
-> (String -> ModuleHeader) -> Maybe String -> ModuleHeader
forall b a. b -> (a -> b) -> Maybe a -> b
maybe ModuleHeader
Default String -> ModuleHeader
Name Maybe String
nm}
moduleOptGet :: Options -> String -> [String]
moduleOptGet :: Options -> String -> [String]
moduleOptGet opts :: Options
opts nm :: String
nm = case Options -> ModuleHeader
moduleName Options
opts of
NoName -> []
Name s :: String
s -> [String
nmString -> ShowS
forall a. [a] -> [a] -> [a]
++"="String -> ShowS
forall a. [a] -> [a] -> [a]
++String
s]
Default -> [String
nm]
dataOpt, dataRecOpt, strictDataOpt, strictWrapOpt, cataOpt, semfunsOpt, signaturesOpt, prettyOpt,renameOpt, wrappersOpt, modcopyOpt, newtypesOpt, nestOpt, smacroOpt, verboseOpt, helpOpt, versionOpt, selfOpt, cycleOpt, visitOpt, seqOpt, unboxOpt, bangpatsOpt, casesOpt, strictCasesOpt, stricterCasesOpt, strictSemOpt, localCpsOpt, splitSemsOpt, werrorsOpt, wignoreOpt, dumpgrammarOpt, dumpcgrammarOpt, genTracesOpt, genUseTracesOpt, genCostCentresOpt, sepSemModsOpt, genFileDepsOpt, genLinePragmasOpt, genVisageOpt, genAspectAGOpt, dummyTokenVisitOpt, tupleAsDummyTokenOpt, stateAsDummyTokenOpt, strictDummyTokenOpt, noPerRuleTypeSigsOpt, noPerStateTypeSigsOpt, noEagerBlackholingOpt, noPerRuleCostCentresOpt, noPerVisitCostCentresOpt, helpInliningOpt, noInlinePragmasOpt, aggressiveInlinePragmasOpt, lateHigherOrderBindingOpt, monadicWrappersOpt, referenceOpt, genAttrListOpt, lcKeywordsOpt, doubleColonsOpt, haskellSyntaxOpt, monadicOpt, parallelOpt, ocamlOpt, cleanOpt, visitorsOutputOpt, breadthfirstOpt, breadthfirstStrictOpt, parseHsRhsOpt, parseHsTpOpt, parseHsBlockOpt, parseHsOpt, kennedyWarrenOpt, noOptimizeOpt, allOpt, optimizeOpt, noIncludesOpt, beQuietOpt, condDisableOptimizations :: Options -> Options
dataOpt :: Options -> Options
dataOpt opts :: Options
opts = Options
opts{dataTypes :: Bool
dataTypes = Bool
True}
dataRecOpt :: Options -> Options
dataRecOpt opts :: Options
opts = Options
opts{dataRecords :: Bool
dataRecords = Bool
True}
strictDataOpt :: Options -> Options
strictDataOpt opts :: Options
opts = Options
opts{strictData :: Bool
strictData = Bool
True}
strictWrapOpt :: Options -> Options
strictWrapOpt opts :: Options
opts = Options
opts{strictWrap :: Bool
strictWrap = Bool
True}
cataOpt :: Options -> Options
cataOpt opts :: Options
opts = Options
opts{folds :: Bool
folds = Bool
True}
semfunsOpt :: Options -> Options
semfunsOpt opts :: Options
opts = Options
opts{semfuns :: Bool
semfuns = Bool
True}
signaturesOpt :: Options -> Options
signaturesOpt opts :: Options
opts = Options
opts{typeSigs :: Bool
typeSigs = Bool
True}
prettyOpt :: Options -> Options
prettyOpt opts :: Options
opts = Options
opts{attrInfo :: Bool
attrInfo = Bool
True}
renameOpt :: Options -> Options
renameOpt opts :: Options
opts = Options
opts{rename :: Bool
rename = Bool
True}
wrappersOpt :: Options -> Options
wrappersOpt opts :: Options
opts = Options
opts{wrappers :: Bool
wrappers = Bool
True}
modcopyOpt :: Options -> Options
modcopyOpt opts :: Options
opts = Options
opts{modcopy :: Bool
modcopy = Bool
True}
newtypesOpt :: Options -> Options
newtypesOpt opts :: Options
opts = Options
opts{newtypes :: Bool
newtypes = Bool
True}
nestOpt :: Options -> Options
nestOpt opts :: Options
opts = Options
opts{nest :: Bool
nest = Bool
True}
smacroOpt :: Options -> Options
smacroOpt opts :: Options
opts = Options
opts{smacro :: Bool
smacro = Bool
True}
verboseOpt :: Options -> Options
verboseOpt opts :: Options
opts = Options
opts{verbose :: Bool
verbose = Bool
True}
helpOpt :: Options -> Options
helpOpt opts :: Options
opts = Options
opts{showHelp :: Bool
showHelp = Bool
True}
versionOpt :: Options -> Options
versionOpt opts :: Options
opts = Options
opts{showVersion :: Bool
showVersion = Bool
True}
prefixOpt :: String -> Options -> Options
prefixOpt :: String -> Options -> Options
prefixOpt pre :: String
pre opts :: Options
opts = Options
opts{prefix :: String
prefix = String
pre }
selfOpt :: Options -> Options
selfOpt opts :: Options
opts = Options
opts{withSelf :: Bool
withSelf = Bool
True}
cycleOpt :: Options -> Options
cycleOpt opts :: Options
opts = Options
opts{withCycle :: Bool
withCycle = Bool
True}
visitOpt :: Options -> Options
visitOpt opts :: Options
opts = Options
opts{visit :: Bool
visit = Bool
True, withCycle :: Bool
withCycle = Bool
True}
seqOpt :: Options -> Options
seqOpt opts :: Options
opts = Options
opts{withSeq :: Bool
withSeq = Bool
True}
unboxOpt :: Options -> Options
unboxOpt opts :: Options
opts = Options
opts{unbox :: Bool
unbox = Bool
True}
bangpatsOpt :: Options -> Options
bangpatsOpt opts :: Options
opts = Options
opts{bangpats :: Bool
bangpats = Bool
True}
casesOpt :: Options -> Options
casesOpt opts :: Options
opts = Options
opts{cases :: Bool
cases = Bool
True}
strictCasesOpt :: Options -> Options
strictCasesOpt opts :: Options
opts = Options
opts{strictCases :: Bool
strictCases = Bool
True}
stricterCasesOpt :: Options -> Options
stricterCasesOpt opts :: Options
opts = Options
opts{strictCases :: Bool
strictCases = Bool
True, stricterCases :: Bool
stricterCases = Bool
True}
strictSemOpt :: Options -> Options
strictSemOpt opts :: Options
opts = Options
opts{strictSems :: Bool
strictSems = Bool
True}
localCpsOpt :: Options -> Options
localCpsOpt opts :: Options
opts = Options
opts{localCps :: Bool
localCps = Bool
True}
splitSemsOpt :: Options -> Options
splitSemsOpt opts :: Options
opts = Options
opts{splitSems :: Bool
splitSems = Bool
True}
werrorsOpt :: Options -> Options
werrorsOpt opts :: Options
opts = Options
opts{werrors :: Bool
werrors = Bool
True}
wignoreOpt :: Options -> Options
wignoreOpt opts :: Options
opts = Options
opts{wignore :: Bool
wignore = Bool
True}
wmaxErrsOpt :: String -> Options -> Options
wmaxErrsOpt :: String -> Options -> Options
wmaxErrsOpt n :: String
n opts :: Options
opts = Options
opts{wmaxerrs :: Int
wmaxerrs = String -> Int
forall a. Read a => String -> a
read String
n}
wmaxErrsOptGet :: Options -> String -> [String]
wmaxErrsOptGet :: Options -> String -> [String]
wmaxErrsOptGet opts :: Options
opts nm :: String
nm = if Options -> Int
wmaxerrs Options
opts Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Options -> Int
wmaxerrs Options
noOptions
then [String
nm,Int -> String
forall a. Show a => a -> String
show (Options -> Int
wmaxerrs Options
opts)]
else []
dumpgrammarOpt :: Options -> Options
dumpgrammarOpt opts :: Options
opts = Options
opts{dumpgrammar :: Bool
dumpgrammar = Bool
True}
dumpcgrammarOpt :: Options -> Options
dumpcgrammarOpt opts :: Options
opts = Options
opts{dumpcgrammar :: Bool
dumpcgrammar = Bool
True}
genTracesOpt :: Options -> Options
genTracesOpt opts :: Options
opts = Options
opts{genTraces :: Bool
genTraces = Bool
True}
genUseTracesOpt :: Options -> Options
genUseTracesOpt opts :: Options
opts = Options
opts{genUseTraces :: Bool
genUseTraces = Bool
True}
genCostCentresOpt :: Options -> Options
genCostCentresOpt opts :: Options
opts = Options
opts{genCostCentres :: Bool
genCostCentres = Bool
True}
sepSemModsOpt :: Options -> Options
sepSemModsOpt opts :: Options
opts = Options
opts{sepSemMods :: Bool
sepSemMods = Options -> Bool
allowSepSemMods Options
opts}
genFileDepsOpt :: Options -> Options
genFileDepsOpt opts :: Options
opts = Options
opts{genFileDeps :: Bool
genFileDeps = Bool
True}
genLinePragmasOpt :: Options -> Options
genLinePragmasOpt opts :: Options
opts = Options
opts{genLinePragmas :: Bool
genLinePragmas = Bool
True}
genVisageOpt :: Options -> Options
genVisageOpt opts :: Options
opts = Options
opts{genvisage :: Bool
genvisage = Bool
True }
genAspectAGOpt :: Options -> Options
genAspectAGOpt opts :: Options
opts = Options
opts{genAspectAG :: Bool
genAspectAG = Bool
True}
dummyTokenVisitOpt :: Options -> Options
dummyTokenVisitOpt opts :: Options
opts = Options
opts { dummyTokenVisit :: Bool
dummyTokenVisit = Bool
True }
tupleAsDummyTokenOpt :: Options -> Options
tupleAsDummyTokenOpt opts :: Options
opts = Options
opts { tupleAsDummyToken :: Bool
tupleAsDummyToken = Bool
True }
stateAsDummyTokenOpt :: Options -> Options
stateAsDummyTokenOpt opts :: Options
opts = Options
opts { tupleAsDummyToken :: Bool
tupleAsDummyToken = Bool
False }
strictDummyTokenOpt :: Options -> Options
strictDummyTokenOpt opts :: Options
opts = Options
opts { strictDummyToken :: Bool
strictDummyToken = Bool
True }
noPerRuleTypeSigsOpt :: Options -> Options
noPerRuleTypeSigsOpt opts :: Options
opts = Options
opts { noPerRuleTypeSigs :: Bool
noPerRuleTypeSigs = Bool
True }
noPerStateTypeSigsOpt :: Options -> Options
noPerStateTypeSigsOpt opts :: Options
opts = Options
opts { noPerStateTypeSigs :: Bool
noPerStateTypeSigs = Bool
True }
noEagerBlackholingOpt :: Options -> Options
noEagerBlackholingOpt opts :: Options
opts = Options
opts { noEagerBlackholing :: Bool
noEagerBlackholing = Bool
True }
noPerRuleCostCentresOpt :: Options -> Options
noPerRuleCostCentresOpt opts :: Options
opts = Options
opts { noPerRuleCostCentres :: Bool
noPerRuleCostCentres = Bool
True }
noPerVisitCostCentresOpt :: Options -> Options
noPerVisitCostCentresOpt opts :: Options
opts = Options
opts { noPerVisitCostCentres :: Bool
noPerVisitCostCentres = Bool
True }
helpInliningOpt :: Options -> Options
helpInliningOpt opts :: Options
opts = Options
opts { helpInlining :: Bool
helpInlining = Bool
True }
noInlinePragmasOpt :: Options -> Options
noInlinePragmasOpt opts :: Options
opts = Options
opts { noInlinePragmas :: Bool
noInlinePragmas = Bool
True }
aggressiveInlinePragmasOpt :: Options -> Options
aggressiveInlinePragmasOpt opts :: Options
opts = Options
opts { aggressiveInlinePragmas :: Bool
aggressiveInlinePragmas = Bool
True }
lateHigherOrderBindingOpt :: Options -> Options
lateHigherOrderBindingOpt opts :: Options
opts = Options
opts { lateHigherOrderBinding :: Bool
lateHigherOrderBinding = Bool
True }
monadicWrappersOpt :: Options -> Options
monadicWrappersOpt opts :: Options
opts = Options
opts { monadicWrappers :: Bool
monadicWrappers = Bool
True }
referenceOpt :: Options -> Options
referenceOpt opts :: Options
opts = Options
opts { reference :: Bool
reference = Bool
True }
noGroupOpt :: String -> Options -> Options
noGroupOpt :: String -> Options -> Options
noGroupOpt att :: String
att opts :: Options
opts = Options
opts{noGroup :: [String]
noGroup = (Char -> Bool) -> String -> [String]
wordsBy (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== ':') String
att [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ Options -> [String]
noGroup Options
opts}
noGroupOptGet :: Options -> String -> [String]
noGroupOptGet :: Options -> String -> [String]
noGroupOptGet opts :: Options
opts nm :: String
nm = if [String] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Options -> [String]
noGroup Options
opts)
then []
else [String
nm, String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate ":" (Options -> [String]
noGroup Options
opts)]
extendsOpt :: String -> Options -> Options
extendsOpt :: String -> Options -> Options
extendsOpt m :: String
m opts :: Options
opts = Options
opts{extends :: Maybe String
extends = String -> Maybe String
forall a. a -> Maybe a
Just String
m }
genAttrListOpt :: Options -> Options
genAttrListOpt opts :: Options
opts = Options
opts { genAttributeList :: Bool
genAttributeList = Bool
True }
forceIrrefutableOpt :: Maybe String -> Options -> Options
forceIrrefutableOpt :: Maybe String -> Options -> Options
forceIrrefutableOpt mbNm :: Maybe String
mbNm opts :: Options
opts = Options
opts { forceIrrefutables :: Maybe String
forceIrrefutables = Maybe String
mbNm }
uniqueDispenserOpt :: String -> Options -> Options
uniqueDispenserOpt :: String -> Options -> Options
uniqueDispenserOpt nm :: String
nm opts :: Options
opts = Options
opts { uniqueDispenser :: String
uniqueDispenser = String
nm }
lcKeywordsOpt :: Options -> Options
lcKeywordsOpt opts :: Options
opts = Options
opts { lcKeywords :: Bool
lcKeywords = Bool
True }
doubleColonsOpt :: Options -> Options
doubleColonsOpt opts :: Options
opts = Options
opts { doubleColons :: Bool
doubleColons = Bool
True }
haskellSyntaxOpt :: Options -> Options
haskellSyntaxOpt = Options -> Options
lcKeywordsOpt (Options -> Options) -> (Options -> Options) -> Options -> Options
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Options -> Options
doubleColonsOpt (Options -> Options) -> (Options -> Options) -> Options -> Options
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Options -> Options
genLinePragmasOpt
monadicOpt :: Options -> Options
monadicOpt opts :: Options
opts = Options
opts { monadic :: Bool
monadic = Bool
True }
parallelOpt :: Options -> Options
parallelOpt opts :: Options
opts = Options
opts { parallelInvoke :: Bool
parallelInvoke = Bool
True }
ocamlOpt :: Options -> Options
ocamlOpt opts :: Options
opts = Options
opts { ocaml :: Bool
ocaml = Bool
True, kennedyWarren :: Bool
kennedyWarren = Bool
True, withCycle :: Bool
withCycle = Bool
True, visit :: Bool
visit = Bool
True }
cleanOpt :: Options -> Options
cleanOpt opts :: Options
opts = Options
opts { clean :: Bool
clean = Bool
True }
visitorsOutputOpt :: Options -> Options
visitorsOutputOpt opts :: Options
opts = Options
opts { visitorsOutput :: Bool
visitorsOutput = Bool
True }
statisticsOpt :: String -> Options -> Options
statisticsOpt :: String -> Options -> Options
statisticsOpt nm :: String
nm opts :: Options
opts = Options
opts { statsFile :: Maybe String
statsFile = String -> Maybe String
forall a. a -> Maybe a
Just String
nm }
breadthfirstOpt :: Options -> Options
breadthfirstOpt opts :: Options
opts = Options
opts { breadthFirst :: Bool
breadthFirst = Bool
True }
breadthfirstStrictOpt :: Options -> Options
breadthfirstStrictOpt opts :: Options
opts = Options
opts { breadthFirstStrict :: Bool
breadthFirstStrict = Bool
True }
parseHsRhsOpt :: Options -> Options
parseHsRhsOpt opts :: Options
opts = Options
opts { checkParseRhs :: Bool
checkParseRhs = Bool
True }
parseHsTpOpt :: Options -> Options
parseHsTpOpt opts :: Options
opts = Options
opts { checkParseTy :: Bool
checkParseTy = Bool
True }
parseHsBlockOpt :: Options -> Options
parseHsBlockOpt opts :: Options
opts = Options
opts { checkParseBlock :: Bool
checkParseBlock = Bool
True }
parseHsOpt :: Options -> Options
parseHsOpt = Options -> Options
parseHsRhsOpt (Options -> Options) -> (Options -> Options) -> Options -> Options
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Options -> Options
parseHsTpOpt (Options -> Options) -> (Options -> Options) -> Options -> Options
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Options -> Options
parseHsBlockOpt
kennedyWarrenOpt :: Options -> Options
kennedyWarrenOpt opts :: Options
opts = Options
opts { kennedyWarren :: Bool
kennedyWarren = Bool
True }
noOptimizeOpt :: Options -> Options
noOptimizeOpt opts :: Options
opts = Options
opts { noOptimizations :: Bool
noOptimizations = Bool
True }
nocatasOpt :: String -> Options -> Options
nocatasOpt :: String -> Options -> Options
nocatasOpt str :: String
str opts :: Options
opts = Options
opts { nocatas :: Set Identifier
nocatas = Set Identifier
set Set Identifier -> Set Identifier -> Set Identifier
forall a. Ord a => Set a -> Set a -> Set a
`Set.union` Options -> Set Identifier
nocatas Options
opts } where
set :: Set Identifier
set = [Identifier] -> Set Identifier
forall a. Ord a => [a] -> Set a
Set.fromList [Identifier]
ids
ids :: [Identifier]
ids = (String -> Identifier) -> [String] -> [Identifier]
forall a b. (a -> b) -> [a] -> [b]
map String -> Identifier
identifier [String]
lst
lst :: [String]
lst = (Char -> Bool) -> String -> [String]
wordsBy (Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== ',') String
str
nocatasOptGet :: Options -> String -> [String]
nocatasOptGet :: Options -> String -> [String]
nocatasOptGet opts :: Options
opts nm :: String
nm = if Set Identifier -> Bool
forall a. Set a -> Bool
Set.null (Options -> Set Identifier
nocatas Options
opts)
then []
else [String
nm,String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate "," ([String] -> String) -> (Options -> [String]) -> Options -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Identifier -> String) -> [Identifier] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map Identifier -> String
getName ([Identifier] -> [String])
-> (Options -> [Identifier]) -> Options -> [String]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Set Identifier -> [Identifier]
forall a. Set a -> [a]
Set.toList (Set Identifier -> [Identifier])
-> (Options -> Set Identifier) -> Options -> [Identifier]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Options -> Set Identifier
nocatas (Options -> String) -> Options -> String
forall a b. (a -> b) -> a -> b
$ Options
opts]
outputOpt :: String -> Options -> Options
outputOpt :: String -> Options -> Options
outputOpt file :: String
file opts :: Options
opts = Options
opts{outputFiles :: [String]
outputFiles = String
file String -> [String] -> [String]
forall a. a -> [a] -> [a]
: Options -> [String]
outputFiles Options
opts}
outputOptGet :: Options -> String -> [String]
outputOptGet :: Options -> String -> [String]
outputOptGet opts :: Options
opts nm :: String
nm = [[String]] -> [String]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [ [String
nm, String
file] | String
file <- Options -> [String]
outputFiles Options
opts]
searchPathOpt :: String -> Options -> Options
searchPathOpt :: String -> Options -> Options
searchPathOpt path :: String
path opts :: Options
opts = Options
opts{searchPath :: [String]
searchPath = (Char -> Bool) -> String -> [String]
wordsBy (\x :: Char
x -> Char
x Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== ';' Bool -> Bool -> Bool
|| Char
x Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== ':') String
path [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ Options -> [String]
searchPath Options
opts}
searchPathOptGet :: Options -> String -> [String]
searchPathOptGet :: Options -> String -> [String]
searchPathOptGet opts :: Options
opts nm :: String
nm = if [String] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null (Options -> [String]
searchPath Options
opts)
then []
else [String
nm, String -> [String] -> String
forall a. [a] -> [[a]] -> [a]
intercalate ":" (Options -> [String]
searchPath Options
opts)]
allOpt :: Options -> Options
allOpt = Maybe String -> Options -> Options
moduleOpt Maybe String
forall a. Maybe a
Nothing (Options -> Options) -> (Options -> Options) -> Options -> Options
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Options -> Options
dataOpt (Options -> Options) -> (Options -> Options) -> Options -> Options
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Options -> Options
cataOpt (Options -> Options) -> (Options -> Options) -> Options -> Options
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Options -> Options
semfunsOpt (Options -> Options) -> (Options -> Options) -> Options -> Options
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Options -> Options
signaturesOpt (Options -> Options) -> (Options -> Options) -> Options -> Options
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Options -> Options
prettyOpt (Options -> Options) -> (Options -> Options) -> Options -> Options
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Options -> Options
renameOpt (Options -> Options) -> (Options -> Options) -> Options -> Options
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Options -> Options
dataRecOpt
optimizeOpt :: Options -> Options
optimizeOpt = Options -> Options
visitOpt (Options -> Options) -> (Options -> Options) -> Options -> Options
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Options -> Options
casesOpt
noIncludesOpt :: Options -> Options
noIncludesOpt opts :: Options
opts = Options
opts { noIncludes :: Bool
noIncludes = Bool
True }
beQuietOpt :: Options -> Options
beQuietOpt opts :: Options
opts = Options
opts { beQuiet :: Bool
beQuiet = Bool
True }
condDisableOptimizations :: Options -> Options
condDisableOptimizations opts :: Options
opts
| Options -> Bool
noOptimizations Options
opts =
Options
opts { strictData :: Bool
strictData = Bool
False
, strictWrap :: Bool
strictWrap = Bool
False
, withSeq :: Bool
withSeq = Bool
False
, unbox :: Bool
unbox = Bool
False
, bangpats :: Bool
bangpats = Bool
False
, cases :: Bool
cases = Bool
False
, strictCases :: Bool
strictCases = Bool
False
, stricterCases :: Bool
stricterCases = Bool
False
, strictSems :: Bool
strictSems = Bool
False
, localCps :: Bool
localCps = Bool
False
, splitSems :: Bool
splitSems = Bool
False
, breadthFirstStrict :: Bool
breadthFirstStrict = Bool
False
}
| Bool
otherwise = Options
opts
wordsBy :: (Char -> Bool) -> String -> [String]
wordsBy :: (Char -> Bool) -> String -> [String]
wordsBy p :: Char -> Bool
p = String -> [String]
f
where
f :: String -> [String]
f s :: String
s = let (x :: String
x,xs :: String
xs) = (Char -> Bool) -> String -> (String, String)
forall a. (a -> Bool) -> [a] -> ([a], [a])
break Char -> Bool
p String
s
in if String -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
x then [] else String
x String -> [String] -> [String]
forall a. a -> [a] -> [a]
: String -> [String]
f (Int -> ShowS
forall a. Int -> [a] -> [a]
drop 1 String
xs)
constructOptions :: [Options -> Options] -> Options
constructOptions :: [Options -> Options] -> Options
constructOptions = (Options -> (Options -> Options) -> Options)
-> Options -> [Options -> Options] -> Options
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl (((Options -> Options) -> Options -> Options)
-> Options -> (Options -> Options) -> Options
forall a b c. (a -> b -> c) -> b -> a -> c
flip (Options -> Options) -> Options -> Options
forall a b. (a -> b) -> a -> b
($)) Options
noOptions
getOptions :: [String] -> (Options,[String],[String])
getOptions :: [String] -> (Options, [String], [String])
getOptions args :: [String]
args = let (flags :: [Options -> Options]
flags,files :: [String]
files,errors :: [String]
errors) = ArgOrder (Options -> Options)
-> [OptDescr (Options -> Options)]
-> [String]
-> ([Options -> Options], [String], [String])
forall a.
ArgOrder a -> [OptDescr a] -> [String] -> ([a], [String], [String])
getOpt ArgOrder (Options -> Options)
forall a. ArgOrder a
Permute [OptDescr (Options -> Options)]
options [String]
args
appliedOpts :: Options
appliedOpts = [Options -> Options] -> Options
constructOptions [Options -> Options]
flags
finOpts :: Options
finOpts = Options -> Options
condDisableOptimizations Options
appliedOpts
in (Options
finOpts,[String]
files,[String]
errors)
optionsToString :: Options -> [String]
optionsToString :: Options -> [String]
optionsToString opt :: Options
opt = (MyOptDescr -> [String]) -> [MyOptDescr] -> [String]
forall (t :: * -> *) a b. Foldable t => (a -> [b]) -> t a -> [b]
concatMap (Options -> MyOptDescr -> [String]
serializeOption Options
opt) [MyOptDescr]
allOptions
combineOptions :: Options -> Options -> Options
combineOptions :: Options -> Options -> Options
combineOptions o1 :: Options
o1 o2 :: Options
o2 = let str1 :: [String]
str1 = Options -> [String]
optionsToString Options
o1
str2 :: [String]
str2 = Options -> [String]
optionsToString Options
o2
(opt :: Options
opt,_,_) = [String] -> (Options, [String], [String])
getOptions ([String]
str1 [String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++ [String]
str2)
in Options
opt