on master help sign in
Add %include directive
commit925648a666ddac09b1665ad2b5928442f64a22c7 authorEdwin Brady <eb@cs.st-andrews.ac.uk> dateThu 17 Nov 2011, 22:33 (15 years ago) parent663c464
4 files changed+14−2
lib/prelude.idr+1 src/Idris/AbsSyntax.hs+8−1 src/Idris/Compiler.hs+3−1 src/Idris/Parser.hs+2
lib/prelude.idr+1
@@ -92,6 +92,7 @@ instance MonadPlus Maybe where {
9292
9393---- some mathematical operations
9494
95+%include "math.h"
9596%lib "m"
9697
9798exp : Float -> Float;
src/Idris/AbsSyntax.hs+8−1
@@ -42,11 +42,12 @@ data IState = IState { tt_ctxt :: Context,
4242 idris_prims :: [(Name, ([E.Name], E.Term))],
4343 idris_objs :: [FilePath],
4444 idris_libs :: [String],
45+ idris_hdrs :: [String],
4546 errLine :: Maybe Int
4647 }
4748
4849idrisInit = IState emptyContext [] emptyContext emptyContext emptyContext
49− "" defaultOpts 6 [] [] [] [] [] [] [] Nothing
50+ "" defaultOpts 6 [] [] [] [] [] [] [] [] Nothing
5051
5152-- The monad for the main REPL - reading and processing files and updating
5253-- global state (hence the IO inner monad).
@@ -67,6 +68,12 @@ getLibs = do i <- get; return (idris_libs i)
6768addLib :: String -> Idris ()
6869addLib f = do i <- get; put (i { idris_libs = f : idris_libs i })
6970
71+addHdr :: String -> Idris ()
72+addHdr f = do i <- get; put (i { idris_hdrs = f : idris_hdrs i })
73+
74+getHdrs :: Idris [String]
75+getHdrs = do i <- get; return (idris_hdrs i)
76+
7077setErrLine :: Int -> Idris ()
7178setErrLine x = do i <- get;
7279 case (errLine i) of
src/Idris/Compiler.hs+3−1
@@ -19,7 +19,9 @@ compile :: FilePath -> Idris ()
1919compile f = do ds <- mkDecls
2020 objs <- getObjectFiles
2121 libs <- getLibs
22− lift $ compileObjWith [Debug] (mkProgram ds) (f ++ ".o")
22+ hdrs <- getHdrs
23+ let incs = map Include hdrs
24+ lift $ compileObjWith [Debug] (mkProgram (incs ++ ds)) (f ++ ".o")
2325 lift $ link ((f ++ ".o") : objs ++ (map ("-l"++) libs)) f
2426
2527mkDecls :: Idris [EpicDecl]
src/Idris/Parser.hs+2
@@ -738,6 +738,8 @@ pDirective = try (do lchar '%'; reserved "lib"; lib <- strlit;
738738 return [PDirective (do datadir <- lift $ getDataDir
739739 o <- lift $ findInPath [".", datadir] obj
740740 addObjectFile o)])
741+ <|> try (do lchar '%'; reserved "include"; hdr <- strlit;
742+ return [PDirective (addHdr hdr)])
741743 <|> do lchar '%'; reserved "logging"; i <- natural;
742744 return [PDirective (setLogLevel (fromInteger i))]
743745