@@ -23,7 +23,7 @@ import Debug.Trace
23import Paths_idris
23import Paths_idris
25ibcVersion :: Word8
25ibcVersion :: Word8
26−ibcVersion = 29
26+ibcVersion = 30
28data IBCFile = IBCFile { ver :: Word8,
28data IBCFile = IBCFile { ver :: Word8,
29 sourcefile :: FilePath,
29 sourcefile :: FilePath,
@@ -38,10 +38,10 @@ data IBCFile = IBCFile { ver :: Word8,
38 ibc_optimise :: [(Name, OptInfo)],
38 ibc_optimise :: [(Name, OptInfo)],
39 ibc_syntax :: [Syntax],
39 ibc_syntax :: [Syntax],
40 ibc_keywords :: [String],
40 ibc_keywords :: [String],
41− ibc_objs :: [FilePath],
41+ ibc_objs :: [(Target, FilePath)],
42− ibc_libs :: [String],
42+ ibc_libs :: [(Target, String)],
43 ibc_dynamic_libs :: [String],
43 ibc_dynamic_libs :: [String],
44− ibc_hdrs :: [String],
44+ ibc_hdrs :: [(Target, String)],
45 ibc_access :: [(Name, Accessibility)],
45 ibc_access :: [(Name, Accessibility)],
46 ibc_total :: [(Name, Totality)],
46 ibc_total :: [(Name, Totality)],
47 ibc_flags :: [(Name, [FnOpt])],
47 ibc_flags :: [(Name, [FnOpt])],
@@ -112,10 +112,10 @@ ibc i (IBCOpt n) f = case lookupCtxt n (idris_optimisation i) of
112ibc i (IBCSyntax n) f = return f { ibc_syntax = n : ibc_syntax f }
112ibc i (IBCSyntax n) f = return f { ibc_syntax = n : ibc_syntax f }
113ibc i (IBCKeyword n) f = return f { ibc_keywords = n : ibc_keywords f }
113ibc i (IBCKeyword n) f = return f { ibc_keywords = n : ibc_keywords f }
114ibc i (IBCImport n) f = return f { ibc_imports = n : ibc_imports f }
114ibc i (IBCImport n) f = return f { ibc_imports = n : ibc_imports f }
115−ibc i (IBCObj n) f = return f { ibc_objs = n : ibc_objs f }
115+ibc i (IBCObj tgt n) f = return f { ibc_objs = (tgt, n) : ibc_objs f }
116−ibc i (IBCLib n) f = return f { ibc_libs = n : ibc_libs f }
116+ibc i (IBCLib tgt n) f = return f { ibc_libs = (tgt, n) : ibc_libs f }
117ibc i (IBCDyLib n) f = return f {ibc_dynamic_libs = n : ibc_dynamic_libs f }
117ibc i (IBCDyLib n) f = return f {ibc_dynamic_libs = n : ibc_dynamic_libs f }
118−ibc i (IBCHeader n) f = return f { ibc_hdrs = n : ibc_hdrs f }
118+ibc i (IBCHeader tgt n) f = return f { ibc_hdrs = (tgt, n) : ibc_hdrs f }
119ibc i (IBCDef n) f = case lookupDef n (tt_ctxt i) of
119ibc i (IBCDef n) f = case lookupDef n (tt_ctxt i) of
120 [v] -> return f { ibc_defs = (n,v) : ibc_defs f }
120 [v] -> return f { ibc_defs = (n,v) : ibc_defs f }
121 _ -> fail "IBC write failed"
121 _ -> fail "IBC write failed"
@@ -242,11 +242,11 @@ pKeywords :: [String] -> Idris ()
242pKeywords k = do i <- getIState
242pKeywords k = do i <- getIState
243 putIState (i { syntax_keywords = k ++ syntax_keywords i })
243 putIState (i { syntax_keywords = k ++ syntax_keywords i })
245−pObjs :: [FilePath] -> Idris ()
245+pObjs :: [(Target, FilePath)] -> Idris ()
246−pObjs os = mapM_ addObjectFile os
246+pObjs os = mapM_ (uncurry addObjectFile) os
248−pLibs :: [String] -> Idris ()
248+pLibs :: [(Target, String)] -> Idris ()
249−pLibs ls = mapM_ addLib ls
249+pLibs ls = mapM_ (uncurry addLib) ls
251pDyLibs :: [String] -> Idris ()
251pDyLibs :: [String] -> Idris ()
252pDyLibs ls = do res <- mapM (addDyLib . return) ls
252pDyLibs ls = do res <- mapM (addDyLib . return) ls
@@ -255,8 +255,8 @@ pDyLibs ls = do res <- mapM (addDyLib . return) ls
255 where checkLoad (Left _) = return ()
255 where checkLoad (Left _) = return ()
256 checkLoad (Right err) = fail err
256 checkLoad (Right err) = fail err
258−pHdrs :: [String] -> Idris ()
258+pHdrs :: [(Target, String)] -> Idris ()
259−pHdrs hs = mapM_ addHdr hs
259+pHdrs hs = mapM_ (uncurry addHdr) hs
261pDefs :: [(Name, Def)] -> Idris ()
261pDefs :: [(Name, Def)] -> Idris ()
262pDefs ds = mapM_ (\ (n, d) ->
262pDefs ds = mapM_ (\ (n, d) ->
@@ -1676,3 +1676,22 @@ instance Binary SSymbol where
1676 4 -> do x1 <- get
1676 4 -> do x1 <- get
1677 return (Binding x1)
1677 return (Binding x1)
1678 _ -> error "Corrupted binary data for SSymbol"
1678 _ -> error "Corrupted binary data for SSymbol"
1680+instance Binary Target where
1684+ ViaJava -> putWord8 1
1685+ ViaNode -> putWord8 2
1686+ ViaJavaScript -> putWord8 3
1687+ Bytecode -> putWord8 4
1692+ 1 -> return ViaJava
1693+ 2 -> return ViaNode
1694+ 3 -> return ViaJavaScript
1695+ 4 -> return Bytecode
1696+ _ -> error "Corrupted binary data for Target"