on master help sign in
Use strings for code generators
93f407dEdwin Brady
src/IRTS/Compiler.hs+5−5
@@ -116,11 +116,11 @@ compile codegen f tm
116
116
117generate :: Codegen -> CodegenInfo -> IO ()
117generate :: Codegen -> CodegenInfo -> IO ()
118generate codegen ir = case codegen of
118generate codegen ir = case codegen of
119− ViaC -> codegenC ir
119+ Via "c" -> codegenC ir
120− ViaJava -> codegenJava ir
120+ Via "java" -> codegenJava ir
121− ViaJavaScript -> codegenJavaScript ir
121+ Via "javascript" -> codegenJavaScript ir
122− ViaNode -> codegenNode ir
122+ Via "node" -> codegenNode ir
123− ViaLLVM -> codegenLLVM ir
123+ Via "llvm" -> codegenLLVM ir
124 Bytecode -> dumpBC (simpleDecls ir) (outputFile ir)
124 Bytecode -> dumpBC (simpleDecls ir) (outputFile ir)
125
125
126irMain :: TT Name -> Idris LDecl
126irMain :: TT Name -> Idris LDecl
src/Idris/AbsSyntaxTree.hs+7−6
@@ -91,7 +91,7 @@ defaultOpts = IOption { opt_logLevel = 0
91 , opt_verbose = True
91 , opt_verbose = True
92 , opt_nobanner = False
92 , opt_nobanner = False
93 , opt_quiet = False
93 , opt_quiet = False
94− , opt_codegen = ViaC
94+ , opt_codegen = Via "c"
95 , opt_outputTy = Executable
95 , opt_outputTy = Executable
96 , opt_ibcsubdir = ""
96 , opt_ibcsubdir = ""
97 , opt_importdirs = []
97 , opt_importdirs = []
@@ -293,11 +293,12 @@ type Idris = StateT IState (ErrorT Err IO)
293
293
294-- Commands in the REPL
294-- Commands in the REPL
295
295
296−data Codegen = ViaC
296+data Codegen = Via String
297+-- | ViaC
297− | ViaJava
298+-- | ViaJava
298− | ViaNode
299+-- | ViaNode
299− | ViaJavaScript
300+-- | ViaJavaScript
300− | ViaLLVM
301+-- | ViaLLVM
301 | Bytecode
302 | Bytecode
302 deriving (Show, Eq)
303 deriving (Show, Eq)
303
304
src/Idris/CmdOptions.hs+3−6
@@ -8,6 +8,7 @@ import IRTS.CodegenCommon
8
8
9import Options.Applicative
9import Options.Applicative
10import Options.Applicative.Arrows
10import Options.Applicative.Arrows
11+import Data.Char
11import Data.Maybe
12import Data.Maybe
12
13
13import qualified Text.PrettyPrint.ANSI.Leijen as PP
14import qualified Text.PrettyPrint.ANSI.Leijen as PP
@@ -141,10 +142,6 @@ preProcOpts (BCAsm s:xs) ys = BCAsm s : NoREPL : preProcOpts xs ys
141preProcOpts (x:xs) ys = preProcOpts xs (x:ys)
142preProcOpts (x:xs) ys = preProcOpts xs (x:ys)
142
143
143parseCodegen :: String -> Codegen
144parseCodegen :: String -> Codegen
144−parseCodegen "C" = ViaC
145−parseCodegen "Java" = ViaJava
146parseCodegen "bytecode" = Bytecode
145parseCodegen "bytecode" = Bytecode
147−parseCodegen "javascript" = ViaJavaScript
146+parseCodegen cg = Via (map toLower cg)
148−parseCodegen "node" = ViaNode
147+
149−parseCodegen "llvm" = ViaLLVM
150−parseCodegen _ = error "unknown codegen" -- FIXME: partial function
src/Idris/IBC.hs+7−11
@@ -31,7 +31,7 @@ import Codec.Compression.Zlib (compress)
31import Util.Zlib (decompressEither)
31import Util.Zlib (decompressEither)
32
32
33ibcVersion :: Word8
33ibcVersion :: Word8
34−ibcVersion = 76
34+ibcVersion = 77
35
35
36data IBCFile = IBCFile { ver :: Word8,
36data IBCFile = IBCFile { ver :: Word8,
37 sourcefile :: FilePath,
37 sourcefile :: FilePath,
@@ -1924,18 +1924,14 @@ instance Binary SSymbol where
1924instance Binary Codegen where
1924instance Binary Codegen where
1925 put x
1925 put x
1926 = case x of
1926 = case x of
1927− ViaC -> putWord8 0
1927+ Via str -> do putWord8 0
1928− ViaJava -> putWord8 1
1928+ put str
1929− ViaNode -> putWord8 2
1930− ViaJavaScript -> putWord8 3
1931− Bytecode -> putWord8 4
1929+ Bytecode -> putWord8 1
1932 get
1930 get
1933 = do i <- getWord8
1931 = do i <- getWord8
1934 case i of
1932 case i of
1933+ 0 -> do x1 <- get
1935− 0 -> return ViaC
1934+ return (Via x1)
1936− 1 -> return ViaJava
1937− 2 -> return ViaNode
1938− 3 -> return ViaJavaScript
1939− 4 -> return Bytecode
1935+ 1 -> return Bytecode
1940 _ -> error "Corrupted binary data for Codegen"
1936 _ -> error "Corrupted binary data for Codegen"
1941
1937
src/Idris/Parser.hs+1−5
@@ -941,11 +941,7 @@ Codegen ::= 'C'
941@
941@
942-}
942-}
943codegen_ :: IdrisParser Codegen
943codegen_ :: IdrisParser Codegen
944−codegen_ = do reserved "C"; return ViaC
944+codegen_ = do n <- identifier; return (Via (map toLower n))
945− <|> do reserved "Java"; return ViaJava
946− <|> do reserved "JavaScript"; return ViaJavaScript
947− <|> do reserved "Node"; return ViaNode
948− <|> do reserved "LLVM"; return ViaLLVM
949 <|> do reserved "Bytecode"; return Bytecode
945 <|> do reserved "Bytecode"; return Bytecode
950 <?> "code generation language"
946 <?> "code generation language"
951
947
src/Idris/REPL.hs+1−1
@@ -1354,7 +1354,7 @@ idrisMain opts =
1354 [] -> Executable
1354 [] -> Executable
1355 xs -> last xs
1355 xs -> last xs
1356 let cgn = case opt getCodegen opts of
1356 let cgn = case opt getCodegen opts of
1357− [] -> ViaC
1357+ [] -> Via "c"
1358 xs -> last xs
1358 xs -> last xs
1359 script <- case opt getExecScript opts of
1359 script <- case opt getExecScript opts of
1360 [] -> return Nothing
1360 [] -> return Nothing
src/Idris/REPLParser.hs+3−6
@@ -142,12 +142,9 @@ pOption = do discard (P.symbol "errorcontext"); return ErrContext
142 <|> do discard (P.symbol "warnreach"); return WarnReach
142 <|> do discard (P.symbol "warnreach"); return WarnReach
143
143
144codegenOption :: P.IdrisParser Codegen
144codegenOption :: P.IdrisParser Codegen
145−codegenOption = do discard (P.symbol "javascript"); return ViaJavaScript
145+codegenOption = do discard (P.symbol "bytecode"); return Bytecode
146− <|> do discard (P.symbol "node"); return ViaNode
146+ <|> do x <- P.identifier
147− <|> do discard (P.symbol "Java"); return ViaJava
147+ return (Via (map toLower x))
148− <|> do discard (P.symbol "llvm"); return ViaLLVM
149− <|> do discard (P.symbol "bytecode"); return Bytecode
150− <|> do discard (P.symbol "C"); return ViaC
151
148
152pConsoleWidth :: P.IdrisParser ConsoleWidth
149pConsoleWidth :: P.IdrisParser ConsoleWidth
153pConsoleWidth = do discard (P.symbol "auto"); return AutomaticWidth
150pConsoleWidth = do discard (P.symbol "auto"); return AutomaticWidth