Commit 0411f046 authored by Moses Nakamura's avatar Moses Nakamura

checks that the user wants c++

parent 9ebc3020
...@@ -36,22 +36,34 @@ import CxxGenerator ...@@ -36,22 +36,34 @@ import CxxGenerator
main::IO() main::IO()
main = do main = do
files <- getArgs args <- getArgs
mapM_ handleFile files let lang = head args
putStrLn lang
let files = tail args
handleFiles (generateCode lang) files
handleFile filename = do handleFiles codeGenerator files = case codeGenerator of
Right fn -> mapM_ (handleFile fn) files
Left str -> putStrLn str
handleFile codeGenerator filename = do
text <- readFile filename text <- readFile filename
case parseAndCompileFile filename text of case parseAndCompileFile filename text of
Active desc [] -> do Active desc [] -> do
print desc print desc
header <- generateCxxHeader desc codeGenerator desc filename
LZ.writeFile (filename ++ ".h") header
source <- generateCxxSource desc
LZ.writeFile (filename ++ ".c++") source
Active _ e -> mapM_ printError (List.sortBy compareErrors e) Active _ e -> mapM_ printError (List.sortBy compareErrors e)
Failed e -> mapM_ printError (List.sortBy compareErrors e) Failed e -> mapM_ printError (List.sortBy compareErrors e)
generateCode lang = case lang of
"c++" -> Right (\desc filename -> do
header <- generateCxxHeader desc
LZ.writeFile (filename ++ ".h") header
source <- generateCxxSource desc
LZ.writeFile (filename ++ ".c++") source)
_ -> Left "Only c++ is supported for now"
compareErrors a b = compare (errorPos a) (errorPos b) compareErrors a b = compare (errorPos a) (errorPos b)
-- TODO: This is a fairly hacky way to make showErrorMessages' output not suck. We could do better -- TODO: This is a fairly hacky way to make showErrorMessages' output not suck. We could do better
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment