oplang-0.4.0.0: src/Opts.hs
{-# LANGUAGE StrictData #-}
module Opts(Opts(..), getOpts) where
import Data.Version(showVersion)
import Options.Applicative
import Paths_oplang(version)
data Opts =
Opts
{ stackSize :: Word
, tapeSize :: Word
, noWarn :: Bool
, noCC :: Bool
, dumpAST :: Bool
, dumpIR :: Bool
, outPath :: Maybe FilePath
, path :: FilePath
}
optsParser :: ParserInfo Opts
optsParser =
info
(infoOption ("oplang v" <> ver) (short 'v' <> long "version" <> help "Shows version information.")
<*> helper
<*> programOptions)
(fullDesc
<> progDesc "Compiles an OpLang source file to a native executable."
<> header "oplang - The OpLang Compiler")
where
ver = showVersion version
programOptions :: Parser Opts
programOptions =
Opts
<$> option auto (long "stack-size" <> value 4096 <> metavar "SIZE" <> help "Size of the stack.")
<*> option auto (long "tape-size" <> value 65536 <> metavar "SIZE" <> help "Size of the memory tape.")
<*> switch (long "no-warn" <> help "Don't report warnings.")
<*> switch (long "no-cc" <> help "Output a C file without compiling it.")
<*> switch (long "dump-ast" <> help "Print the AST after parsing.")
<*> switch (long "dump-ir" <> help "Print the IR after optimization.")
<*> optional (strOption (short 'o' <> long "out-path" <> metavar "PATH" <> help "Path of the resulting executable (or C file if --no-cc is passed)."))
<*> strArgument (metavar "PATH" <> help "The source file to compile.")
getOpts :: IO Opts
getOpts = execParser optsParser