@@ -23,7 +23,7 @@ import Debug.Trace
2323import Paths_idris
2424
2525ibcVersion :: Word8
26−ibcVersion = 29
26+ibcVersion = 30
2727
2828data IBCFile = IBCFile { ver :: Word8,
2929 sourcefile :: FilePath,
@@ -38,10 +38,10 @@ data IBCFile = IBCFile { ver :: Word8,
3838 ibc_optimise :: [(Name, OptInfo)],
3939 ibc_syntax :: [Syntax],
4040 ibc_keywords :: [String],
41− ibc_objs :: [FilePath],
42− ibc_libs :: [String],
41+ ibc_objs :: [(Target, FilePath)],
42+ ibc_libs :: [(Target, String)],
4343 ibc_dynamic_libs :: [String],
44− ibc_hdrs :: [String],
44+ ibc_hdrs :: [(Target, String)],
4545 ibc_access :: [(Name, Accessibility)],
4646 ibc_total :: [(Name, Totality)],
4747 ibc_flags :: [(Name, [FnOpt])],
@@ -112,10 +112,10 @@ ibc i (IBCOpt n) f = case lookupCtxt n (idris_optimisation i) of
112112ibc i (IBCSyntax n) f = return f { ibc_syntax = n : ibc_syntax f }
113113ibc i (IBCKeyword n) f = return f { ibc_keywords = n : ibc_keywords f }
114114ibc 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 }
116−ibc i (IBCLib n) f = return f { ibc_libs = n : ibc_libs f }
115+ibc i (IBCObj tgt n) f = return f { ibc_objs = (tgt, n) : ibc_objs f }
116+ibc i (IBCLib tgt n) f = return f { ibc_libs = (tgt, n) : ibc_libs f }
117117ibc 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 }
119119ibc i (IBCDef n) f = case lookupDef n (tt_ctxt i) of
120120 [v] -> return f { ibc_defs = (n,v) : ibc_defs f }
121121 _ -> fail "IBC write failed"
@@ -242,11 +242,11 @@ pKeywords :: [String] -> Idris ()
242242pKeywords k = do i <- getIState
243243 putIState (i { syntax_keywords = k ++ syntax_keywords i })
244244
245−pObjs :: [FilePath] -> Idris ()
246−pObjs os = mapM_ addObjectFile os
245+pObjs :: [(Target, FilePath)] -> Idris ()
246+pObjs os = mapM_ (uncurry addObjectFile) os
247247
248−pLibs :: [String] -> Idris ()
249−pLibs ls = mapM_ addLib ls
248+pLibs :: [(Target, String)] -> Idris ()
249+pLibs ls = mapM_ (uncurry addLib) ls
250250
251251pDyLibs :: [String] -> Idris ()
252252pDyLibs ls = do res <- mapM (addDyLib . return) ls
@@ -255,8 +255,8 @@ pDyLibs ls = do res <- mapM (addDyLib . return) ls
255255 where checkLoad (Left _) = return ()
256256 checkLoad (Right err) = fail err
257257
258−pHdrs :: [String] -> Idris ()
259−pHdrs hs = mapM_ addHdr hs
258+pHdrs :: [(Target, String)] -> Idris ()
259+pHdrs hs = mapM_ (uncurry addHdr) hs
260260
261261pDefs :: [(Name, Def)] -> Idris ()
262262pDefs ds = mapM_ (\ (n, d) ->
@@ -1676,3 +1676,22 @@ instance Binary SSymbol where
16761676 4 -> do x1 <- get
16771677 return (Binding x1)
16781678 _ -> error "Corrupted binary data for SSymbol"
1679+
1680+instance Binary Target where
1681+ put x
1682+ = case x of
1683+ ViaC -> putWord8 0
1684+ ViaJava -> putWord8 1
1685+ ViaNode -> putWord8 2
1686+ ViaJavaScript -> putWord8 3
1687+ Bytecode -> putWord8 4
1688+ get
1689+ = do i <- getWord8
1690+ case i of
1691+ 0 -> return ViaC
1692+ 1 -> return ViaJava
1693+ 2 -> return ViaNode
1694+ 3 -> return ViaJavaScript
1695+ 4 -> return Bytecode
1696+ _ -> error "Corrupted binary data for Target"
1697+