-ddump-ast
This commit is contained in:
14
app/CoreDriver.hs
Normal file
14
app/CoreDriver.hs
Normal file
@@ -0,0 +1,14 @@
|
||||
module CoreDriver
|
||||
( driver
|
||||
)
|
||||
where
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
driver :: RLPCIO ()
|
||||
driver = undefined
|
||||
|
||||
parseProg :: RLPCOptions
|
||||
-> Text
|
||||
-> (Maybe Program', [MsgEnvelope RlpcError])
|
||||
parseProg o = lexCoreR >=> parseCoreProgR
|
||||
|
||||
70
app/Main.hs
70
app/Main.hs
@@ -10,12 +10,16 @@ import Data.HashSet qualified as S
|
||||
import Data.Text (Text)
|
||||
import Data.Text qualified as T
|
||||
import Data.Text.IO qualified as TIO
|
||||
import Data.List
|
||||
import System.IO
|
||||
import System.Exit (exitSuccess)
|
||||
import Core
|
||||
import TI
|
||||
import GM
|
||||
import Lens.Micro.Mtl
|
||||
|
||||
import CoreDriver qualified
|
||||
import RlpDriver qualified
|
||||
----------------------------------------------------------------------------------
|
||||
|
||||
optParser :: ParserInfo RLPCOptions
|
||||
@@ -37,9 +41,15 @@ options = RLPCOptions
|
||||
{- -d -}
|
||||
<*> fmap S.fromList # many # option debugFlagReader
|
||||
( short 'd'
|
||||
<> help "dump evaluation logs"
|
||||
<> help "pass debug flags"
|
||||
<> metavar "DEBUG FLAG"
|
||||
)
|
||||
{- -f -}
|
||||
<*> fmap S.fromList # many # option compilerFlagReader
|
||||
( short 'f'
|
||||
<> help "pass compilation flags"
|
||||
<> metavar "COMPILATION FLAG"
|
||||
)
|
||||
{- --evaluator, -e -}
|
||||
<*> option evaluatorReader
|
||||
( long "evaluator"
|
||||
@@ -57,6 +67,7 @@ options = RLPCOptions
|
||||
)
|
||||
<*> option languageReader
|
||||
( long "language"
|
||||
<> short 'x'
|
||||
)
|
||||
<*> some (argument str $ metavar "FILES...")
|
||||
where
|
||||
@@ -67,9 +78,13 @@ languageReader :: ReadM Language
|
||||
languageReader = maybeReader $ \case
|
||||
"rlp" -> Just LanguageRlp
|
||||
"core" -> Just LanguageCore
|
||||
_ -> Nothing
|
||||
|
||||
debugFlagReader :: ReadM DebugFlag
|
||||
debugFlagReader = maybeReader $ Just
|
||||
debugFlagReader = str
|
||||
|
||||
compilerFlagReader :: ReadM CompilerFlag
|
||||
compilerFlagReader = str
|
||||
|
||||
evaluatorReader :: ReadM Evaluator
|
||||
evaluatorReader = maybeReader $ \case
|
||||
@@ -88,54 +103,9 @@ main = do
|
||||
void $ evalRLPCIO opts driver
|
||||
|
||||
driver :: RLPCIO ()
|
||||
driver = sequence_
|
||||
[ dshowFlags
|
||||
, ddumpAST
|
||||
, ddumpEval
|
||||
]
|
||||
|
||||
dshowFlags :: RLPCIO ()
|
||||
dshowFlags = whenDFlag "dump-flags" do
|
||||
ask >>= liftIO . print
|
||||
|
||||
ddumpAST :: RLPCIO ()
|
||||
ddumpAST = whenDFlag "dump-ast" $ forFiles_ \o f -> do
|
||||
liftIO $ withFile f ReadMode $ \h -> do
|
||||
s <- TIO.hGetContents h
|
||||
case parseProg o s of
|
||||
Right (a,_) -> hPutStrLn stderr $ show a
|
||||
Left e -> error "todo errors lol"
|
||||
|
||||
ddumpEval :: RLPCIO ()
|
||||
ddumpEval = whenDFlag "dump-eval" do
|
||||
fs <- view rlpcInputFiles
|
||||
forM_ fs $ \f -> liftIO (TIO.readFile f) >>= doProg
|
||||
|
||||
where
|
||||
doProg :: Text -> RLPCIO ()
|
||||
doProg = undefined
|
||||
-- doProg s = ask >>= \o -> case parseProg o s of
|
||||
-- -- TODO: error handling
|
||||
-- Left e -> addFatal . CompilerError $ show e
|
||||
-- Right (a,_) -> do
|
||||
-- log <- view rlpcLogFile
|
||||
-- dumpEval <- chooseEval
|
||||
-- case log of
|
||||
-- Just f -> liftIO $ withFile f WriteMode $ dumpEval a
|
||||
-- Nothing -> liftIO $ dumpEval a stderr
|
||||
|
||||
-- choose the appropriate model based on the compiler opts
|
||||
-- chooseEval = do
|
||||
-- ev <- view rlpcEvaluator
|
||||
-- pure $ case ev of
|
||||
-- EvaluatorGM -> v GM.hdbgProg
|
||||
-- EvaluatorTI -> v TI.hdbgProg
|
||||
-- where v f p h = f p h *> pure ()
|
||||
|
||||
parseProg :: RLPCOptions
|
||||
-> Text
|
||||
-> (Maybe Program', [MsgEnvelope RlpcError])
|
||||
parseProg o = evalRLPC o . (lexCore >=> parseCoreProg)
|
||||
driver = view rlpcLanguage >>= \case
|
||||
LanguageCore -> CoreDriver.driver
|
||||
LanguageRlp -> RlpDriver.driver
|
||||
|
||||
forFiles_ :: (Monad m)
|
||||
=> (RLPCOptions -> FilePath -> RLPCT m a)
|
||||
|
||||
0
app/RlpDriver.hs
Normal file
0
app/RlpDriver.hs
Normal file
Reference in New Issue
Block a user