Initial PHP host implementation
This commit is contained in:
14
src/Main.hs
14
src/Main.hs
@@ -26,7 +26,7 @@ import qualified Data.Map as Map
|
||||
|
||||
data TricuArgs
|
||||
= Repl
|
||||
| Evaluate { file :: [FilePath], form :: EvaluatedForm }
|
||||
| Evaluate { file :: [FilePath], form :: EvaluatedForm, outFile :: FilePath }
|
||||
| TDecode { file :: [FilePath] }
|
||||
| Compile { inputFile :: FilePath, outFile :: FilePath, names :: [String] }
|
||||
| Export { hash :: String, exportNameOpt :: String, outFile :: FilePath, names :: [String] }
|
||||
@@ -49,6 +49,8 @@ evaluateMode = Evaluate
|
||||
&= help "Optional output form: (tree|fsl|ast|ternary|ascii|decode).\n \
|
||||
\ Defaults to tricu-compatible `t` tree form."
|
||||
&= name "t"
|
||||
, outFile = def &= help "Optional output file path. Defaults to stdout."
|
||||
&= name "o" &= typ "FILE"
|
||||
}
|
||||
&= help "Evaluate tricu and return the result of the final expression."
|
||||
&= explicit
|
||||
@@ -123,7 +125,7 @@ main = do
|
||||
putStrLn "Welcome to the tricu REPL"
|
||||
putStrLn "You may exit with `CTRL+D` or the `!exit` command."
|
||||
repl
|
||||
Evaluate { file = filePaths, form = outputForm } -> do
|
||||
Evaluate { file = filePaths, form = outputForm, outFile = evalOutFile } -> do
|
||||
maybeDbPath <- lookupEnv "TRICU_DB_PATH"
|
||||
evalResult <- case filePaths of
|
||||
[] -> do
|
||||
@@ -136,7 +138,7 @@ main = do
|
||||
Nothing -> return Map.empty
|
||||
input <- getContents
|
||||
pure $ runTricuTEnv initialEnv input
|
||||
(_:restFilePaths) -> do
|
||||
filePaths@(_:_) -> do
|
||||
initialEnv <- case maybeDbPath of
|
||||
Just _ -> do
|
||||
conn <- initContentStore
|
||||
@@ -144,10 +146,12 @@ main = do
|
||||
close conn
|
||||
return env
|
||||
Nothing -> return Map.empty
|
||||
finalEnv <- foldM evaluateFileWithContext initialEnv restFilePaths
|
||||
finalEnv <- foldM evaluateFileWithContext initialEnv filePaths
|
||||
pure $ mainResult finalEnv
|
||||
let fRes = formatT outputForm evalResult
|
||||
putStr fRes
|
||||
if null evalOutFile
|
||||
then putStr fRes
|
||||
else writeFile evalOutFile fRes
|
||||
TDecode { file = filePaths } -> do
|
||||
value <- case filePaths of
|
||||
[] -> getContents
|
||||
|
||||
Reference in New Issue
Block a user