Load metadata file if it exists
This commit is contained in:
parent
d0807d575a
commit
fdc755ecb0
1 changed files with 13 additions and 2 deletions
|
|
@ -1,27 +1,38 @@
|
||||||
module Main where
|
module Main where
|
||||||
|
|
||||||
import Control.Monad.IO.Class
|
import Control.Monad.IO.Class
|
||||||
|
import qualified Data.Text as T
|
||||||
import qualified Data.Text.IO as T
|
import qualified Data.Text.IO as T
|
||||||
import Options.Applicative
|
import Options.Applicative
|
||||||
|
|
||||||
import Mima.Format
|
import Mima.Format
|
||||||
import Mima.MimaRun.Options
|
import Mima.MimaRun.Options
|
||||||
import Mima.Run
|
import Mima.Run
|
||||||
|
import Mima.Vm.Flags
|
||||||
|
import Mima.Vm.Metadata
|
||||||
import Mima.Vm.State
|
import Mima.Vm.State
|
||||||
import Mima.Vm.Storage
|
import Mima.Vm.Storage
|
||||||
|
|
||||||
|
loadMetadataOrEmpty :: FilePath -> Run Metadata
|
||||||
|
loadMetadataOrEmpty path = catch (loadMetadata path) (\error -> do
|
||||||
|
liftIO $ putStrLn $ "Metafile could not be loaded. " ++ T.unpack error
|
||||||
|
pure mempty)
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = runOrExit 2 $ do
|
main = runOrExit 2 $ do
|
||||||
opts <- liftIO $ execParser parserInfo
|
opts <- liftIO $ execParser parserInfo
|
||||||
initialState <- loadMimaState $ inputFile opts
|
initialState <- loadMimaState $ inputFile opts
|
||||||
|
metadata <- loadMetadataOrEmpty $ metadataFile opts
|
||||||
|
let flags = flagsFromMetadata metadata
|
||||||
|
|
||||||
finalState <- liftIO $ case steps opts of
|
finalState <- liftIO $ case steps opts of
|
||||||
Nothing -> do
|
Nothing -> do
|
||||||
let (finalState, abortReason, stepsMade) = execute mempty initialState
|
let (finalState, abortReason, stepsMade) = execute flags initialState
|
||||||
putStrLn $ "Stopped after " ++ show stepsMade ++ " steps, reason:"
|
putStrLn $ "Stopped after " ++ show stepsMade ++ " steps, reason:"
|
||||||
T.putStrLn $ toText abortReason
|
T.putStrLn $ toText abortReason
|
||||||
pure finalState
|
pure finalState
|
||||||
Just n -> do
|
Just n -> do
|
||||||
let (finalState, mAbortReason, stepsMade) = executeN n mempty initialState
|
let (finalState, mAbortReason, stepsMade) = executeN n flags initialState
|
||||||
putStrLn $ "Stopped after " ++ show stepsMade ++ " steps, reason:"
|
putStrLn $ "Stopped after " ++ show stepsMade ++ " steps, reason:"
|
||||||
case mAbortReason of
|
case mAbortReason of
|
||||||
Nothing -> putStrLn "Ran out of steps"
|
Nothing -> putStrLn "Ran out of steps"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue