@@ -49,7 +49,7 @@ import Codec.Archive.Zip
49import Debug.Trace
49import Debug.Trace
51ibcVersion :: Word16
51ibcVersion :: Word16
52−ibcVersion = 146
52+ibcVersion = 147
54-- | When IBC is being loaded - we'll load different things (and omit
54-- | When IBC is being loaded - we'll load different things (and omit
55-- different structures/definitions) depending on which phase we're in.
55-- different structures/definitions) depending on which phase we're in.
@@ -63,6 +63,7 @@ data IBCFile = IBCFile {
63 , ibc_reachablenames :: ![Name]
63 , ibc_reachablenames :: ![Name]
64 , ibc_imports :: ![(Bool, FilePath)]
64 , ibc_imports :: ![(Bool, FilePath)]
65 , ibc_importdirs :: ![FilePath]
65 , ibc_importdirs :: ![FilePath]
66+ , ibc_sourcedirs :: ![FilePath]
66 , ibc_implicits :: ![(Name, [PArg])]
67 , ibc_implicits :: ![(Name, [PArg])]
67 , ibc_fixes :: ![FixDecl]
68 , ibc_fixes :: ![FixDecl]
68 , ibc_statics :: ![(Name, [Bool])]
69 , ibc_statics :: ![(Name, [Bool])]
@@ -115,7 +116,7 @@ deriving instance Binary IBCFile
117initIBC :: IBCFile
118initIBC :: IBCFile
118−initIBC = IBCFile ibcVersion "" [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] Nothing [] [] [] [] [] [] [] [] [] []
119+initIBC = IBCFile ibcVersion "" [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] Nothing [] [] [] [] [] [] [] [] [] []
120hasValidIBCVersion :: FilePath -> Idris Bool
121hasValidIBCVersion :: FilePath -> Idris Bool
121hasValidIBCVersion fp = do
122hasValidIBCVersion fp = do
@@ -167,6 +168,7 @@ entries i = catMaybes [Just $ toEntry "ver" 0 (encode $ ver i),
167 makeEntry "sourcefile" (sourcefile i),
168 makeEntry "sourcefile" (sourcefile i),
168 makeEntry "ibc_imports" (ibc_imports i),
169 makeEntry "ibc_imports" (ibc_imports i),
169 makeEntry "ibc_importdirs" (ibc_importdirs i),
170 makeEntry "ibc_importdirs" (ibc_importdirs i),
171+ makeEntry "ibc_sourcedirs" (ibc_sourcedirs i),
170 makeEntry "ibc_implicits" (ibc_implicits i),
172 makeEntry "ibc_implicits" (ibc_implicits i),
171 makeEntry "ibc_fixes" (ibc_fixes i),
173 makeEntry "ibc_fixes" (ibc_fixes i),
172 makeEntry "ibc_statics" (ibc_statics i),
174 makeEntry "ibc_statics" (ibc_statics i),
@@ -291,6 +293,7 @@ ibc i (IBCSyntax n) f = return f { ibc_syntax = n : ibc_syntax f }
291ibc i (IBCKeyword n) f = return f { ibc_keywords = n : ibc_keywords f }
293ibc i (IBCKeyword n) f = return f { ibc_keywords = n : ibc_keywords f }
292ibc i (IBCImport n) f = return f { ibc_imports = n : ibc_imports f }
294ibc i (IBCImport n) f = return f { ibc_imports = n : ibc_imports f }
293ibc i (IBCImportDir n) f = return f { ibc_importdirs = n : ibc_importdirs f }
295ibc i (IBCImportDir n) f = return f { ibc_importdirs = n : ibc_importdirs f }
296+ibc i (IBCSourceDir n) f = return f { ibc_sourcedirs = n : ibc_sourcedirs f }
294ibc i (IBCObj tgt n) f = return f { ibc_objs = (tgt, n) : ibc_objs f }
297ibc i (IBCObj tgt n) f = return f { ibc_objs = (tgt, n) : ibc_objs f }
295ibc i (IBCLib tgt n) f = return f { ibc_libs = (tgt, n) : ibc_libs f }
298ibc i (IBCLib tgt n) f = return f { ibc_libs = (tgt, n) : ibc_libs f }
296ibc i (IBCCGFlag tgt n) f = return f { ibc_cgflags = (tgt, n) : ibc_cgflags f }
299ibc i (IBCCGFlag tgt n) f = return f { ibc_cgflags = (tgt, n) : ibc_cgflags f }
@@ -382,6 +385,7 @@ process reexp phase archive fn = do
382 srcok <- runIO $ doesFileExist source
385 srcok <- runIO $ doesFileExist source
383 when srcok $ timestampOlder source fn
386 when srcok $ timestampOlder source fn
384 processImportDirs archive
387 processImportDirs archive
388+ processSourceDirs archive
385 processImports reexp phase archive
389 processImports reexp phase archive
386 processImplicits archive
390 processImplicits archive
387 processInfix archive
391 processInfix archive
@@ -492,6 +496,11 @@ processImportDirs ar = do
492 fs <- getEntry [] "ibc_importdirs" ar
496 fs <- getEntry [] "ibc_importdirs" ar
493 mapM_ addImportDir fs
497 mapM_ addImportDir fs
499+processSourceDirs :: Archive -> Idris ()
500+processSourceDirs ar = do
501+ fs <- getEntry [] "ibc_sourcedirs" ar
502+ mapM_ addSourceDir fs
495processImports :: Bool -> IBCPhase -> Archive -> Idris ()
504processImports :: Bool -> IBCPhase -> Archive -> Idris ()
496processImports reexp phase ar = do
505processImports reexp phase ar = do
497 fs <- getEntry [] "ibc_imports" ar
506 fs <- getEntry [] "ibc_imports" ar