diff --git a/mima-run/Main.hs b/mima-run/Main.hs index f009b0d..9a7952d 100644 --- a/mima-run/Main.hs +++ b/mima-run/Main.hs @@ -1,27 +1,38 @@ module Main where import Control.Monad.IO.Class +import qualified Data.Text as T import qualified Data.Text.IO as T import Options.Applicative import Mima.Format import Mima.MimaRun.Options import Mima.Run +import Mima.Vm.Flags +import Mima.Vm.Metadata import Mima.Vm.State 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 = runOrExit 2 $ do opts <- liftIO $ execParser parserInfo initialState <- loadMimaState $ inputFile opts + metadata <- loadMetadataOrEmpty $ metadataFile opts + let flags = flagsFromMetadata metadata + finalState <- liftIO $ case steps opts of Nothing -> do - let (finalState, abortReason, stepsMade) = execute mempty initialState + let (finalState, abortReason, stepsMade) = execute flags initialState putStrLn $ "Stopped after " ++ show stepsMade ++ " steps, reason:" T.putStrLn $ toText abortReason pure finalState 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:" case mAbortReason of Nothing -> putStrLn "Ran out of steps"