+ -- special case to avoid getting "./foo.hs" all the time
+ Just "." -> mkHomeModuleLocn mod_name basename lhs;
+ Just path -> mkHomeModuleLocn mod_name
+ (path ++ '/':basename) (path ++ '/':lhs);
+ Nothing -> do
+
+ -- can't find a source file anywhere, check for a lone .hi file.
+ hisuf <- readIORef v_Hi_suf
+ let hi = basename ++ '.':hisuf
+ case lookupFM home_map hi of {
+ Just path -> mkHomeModuleLocn mod_name
+ (path ++ '/':basename) (path ++ '/':hs);
+ Nothing -> do
+
+ -- last chance: .hi-boot-<ver> and .hi-boot
+ let hi_boot = basename ++ ".hi-boot"
+ let hi_boot_ver = basename ++ ".hi-boot-" ++ cHscIfaceFileVersion
+ case lookupFM home_map hi_boot_ver of {
+ Just path -> mkHomeModuleLocn mod_name
+ (path ++ '/':basename) (path ++ '/':hs);
+ Nothing -> do
+ case lookupFM home_map hi_boot of {
+ Just path -> mkHomeModuleLocn mod_name
+ (path ++ '/':basename) (path ++ '/':hs);