on master help sign in
Use strings for code generators

Makes it easy to add third party CGs without requiring them in the repo

commit93f407d65ee03c521f474436bf5b02da0d758e2f authorEdwin Brady <ecb10@st-andrews.ac.uk> dateThu 7 Aug 2014, 14:49 (12 years ago) parent3d1a728
7 files changed+27−40
src/IRTS/Compiler.hs+5−5 src/Idris/AbsSyntaxTree.hs+7−6 src/Idris/CmdOptions.hs+3−6 src/Idris/IBC.hs+7−11 src/Idris/Parser.hs+1−5 src/Idris/REPL.hs+1−1 src/Idris/REPLParser.hs+3−6
src/IRTS/Compiler.hs+5−5
@@ -116,11 +116,11 @@ compile codegen f tm
116116
117117generate :: Codegen -> CodegenInfo -> IO ()
118118generate codegen ir = case codegen of
119− ViaC -> codegenC ir
120− ViaJava -> codegenJava ir
121− ViaJavaScript -> codegenJavaScript ir
122− ViaNode -> codegenNode ir
123− ViaLLVM -> codegenLLVM ir
119+ Via "c" -> codegenC ir
120+ Via "java" -> codegenJava ir
121+ Via "javascript" -> codegenJavaScript ir
122+ Via "node" -> codegenNode ir
123+ Via "llvm" -> codegenLLVM ir
124124 Bytecode -> dumpBC (simpleDecls ir) (outputFile ir)
125125
126126irMain :: TT Name -> Idris LDecl
src/Idris/AbsSyntaxTree.hs+7−6
@@ -91,7 +91,7 @@ defaultOpts = IOption { opt_logLevel = 0
9191 , opt_verbose = True
9292 , opt_nobanner = False
9393 , opt_quiet = False
94− , opt_codegen = ViaC
94+ , opt_codegen = Via "c"
9595 , opt_outputTy = Executable
9696 , opt_ibcsubdir = ""
9797 , opt_importdirs = []
@@ -293,11 +293,12 @@ type Idris = StateT IState (ErrorT Err IO)
293293
294294-- Commands in the REPL
295295
296−data Codegen = ViaC
297− | ViaJava
298− | ViaNode
299− | ViaJavaScript
300− | ViaLLVM
296+data Codegen = Via String
297+-- | ViaC
298+-- | ViaJava
299+-- | ViaNode
300+-- | ViaJavaScript
301+-- | ViaLLVM
301302 | Bytecode
302303 deriving (Show, Eq)
303304
src/Idris/CmdOptions.hs+3−6
@@ -8,6 +8,7 @@ import IRTS.CodegenCommon
88
99import Options.Applicative
1010import Options.Applicative.Arrows
11+import Data.Char
1112import Data.Maybe
1213
1314import qualified Text.PrettyPrint.ANSI.Leijen as PP
@@ -141,10 +142,6 @@ preProcOpts (BCAsm s:xs) ys = BCAsm s : NoREPL : preProcOpts xs ys
141142preProcOpts (x:xs) ys = preProcOpts xs (x:ys)
142143
143144parseCodegen :: String -> Codegen
144−parseCodegen "C" = ViaC
145−parseCodegen "Java" = ViaJava
146145parseCodegen "bytecode" = Bytecode
147−parseCodegen "javascript" = ViaJavaScript
148−parseCodegen "node" = ViaNode
149−parseCodegen "llvm" = ViaLLVM
150−parseCodegen _ = error "unknown codegen" -- FIXME: partial function
146+parseCodegen cg = Via (map toLower cg)
147+
src/Idris/IBC.hs+7−11
@@ -31,7 +31,7 @@ import Codec.Compression.Zlib (compress)
3131import Util.Zlib (decompressEither)
3232
3333ibcVersion :: Word8
34−ibcVersion = 76
34+ibcVersion = 77
3535
3636data IBCFile = IBCFile { ver :: Word8,
3737 sourcefile :: FilePath,
@@ -1924,18 +1924,14 @@ instance Binary SSymbol where
19241924instance Binary Codegen where
19251925 put x
19261926 = case x of
1927− ViaC -> putWord8 0
1928− ViaJava -> putWord8 1
1929− ViaNode -> putWord8 2
1930− ViaJavaScript -> putWord8 3
1931− Bytecode -> putWord8 4
1927+ Via str -> do putWord8 0
1928+ put str
1929+ Bytecode -> putWord8 1
19321930 get
19331931 = do i <- getWord8
19341932 case i of
1935− 0 -> return ViaC
1936− 1 -> return ViaJava
1937− 2 -> return ViaNode
1938− 3 -> return ViaJavaScript
1939− 4 -> return Bytecode
1933+ 0 -> do x1 <- get
1934+ return (Via x1)
1935+ 1 -> return Bytecode
19401936 _ -> error "Corrupted binary data for Codegen"
19411937
src/Idris/Parser.hs+1−5
@@ -941,11 +941,7 @@ Codegen ::= 'C'
941941@
942942-}
943943codegen_ :: IdrisParser Codegen
944−codegen_ = do reserved "C"; return ViaC
945− <|> do reserved "Java"; return ViaJava
946− <|> do reserved "JavaScript"; return ViaJavaScript
947− <|> do reserved "Node"; return ViaNode
948− <|> do reserved "LLVM"; return ViaLLVM
944+codegen_ = do n <- identifier; return (Via (map toLower n))
949945 <|> do reserved "Bytecode"; return Bytecode
950946 <?> "code generation language"
951947
src/Idris/REPL.hs+1−1
@@ -1354,7 +1354,7 @@ idrisMain opts =
13541354 [] -> Executable
13551355 xs -> last xs
13561356 let cgn = case opt getCodegen opts of
1357− [] -> ViaC
1357+ [] -> Via "c"
13581358 xs -> last xs
13591359 script <- case opt getExecScript opts of
13601360 [] -> return Nothing
src/Idris/REPLParser.hs+3−6
@@ -142,12 +142,9 @@ pOption = do discard (P.symbol "errorcontext"); return ErrContext
142142 <|> do discard (P.symbol "warnreach"); return WarnReach
143143
144144codegenOption :: P.IdrisParser Codegen
145−codegenOption = do discard (P.symbol "javascript"); return ViaJavaScript
146− <|> do discard (P.symbol "node"); return ViaNode
147− <|> do discard (P.symbol "Java"); return ViaJava
148− <|> do discard (P.symbol "llvm"); return ViaLLVM
149− <|> do discard (P.symbol "bytecode"); return Bytecode
150− <|> do discard (P.symbol "C"); return ViaC
145+codegenOption = do discard (P.symbol "bytecode"); return Bytecode
146+ <|> do x <- P.identifier
147+ return (Via (map toLower x))
151148
152149pConsoleWidth :: P.IdrisParser ConsoleWidth
153150pConsoleWidth = do discard (P.symbol "auto"); return AutomaticWidth