diff --git a/src/compiler/api/GF/Compile.hs b/src/compiler/api/GF/Compile.hs index 59524de8c..ca5b31666 100644 --- a/src/compiler/api/GF/Compile.hs +++ b/src/compiler/api/GF/Compile.hs @@ -111,11 +111,13 @@ type CompileEnv = (Grammar,ModEnv) emptyCompileEnv :: Maybe PGF -> IOE CompileEnv emptyCompileEnv mb_pgf = do case mb_pgf of - Just pgf -> do let fpath = pgfFilePath pgf - abs_name = abstractName pgf - t <- getModificationTime fpath + Just pgf -> do let abs_name = abstractName pgf + env <- case pgfFilePath pgf of + Just fpath -> do t <- getModificationTime fpath + return (Map.singleton abs_name (fpath,t,[])) + Nothing -> return Map.empty return ( prependModule emptyGrammar (moduleNameS abs_name, ModPGF pgf) - , Map.singleton abs_name (fpath,t,[]) + , env ) Nothing -> return (emptyGrammar,Map.empty) diff --git a/src/runtime/haskell/PGF2.hsc b/src/runtime/haskell/PGF2.hsc index f99c828d3..b33ccba64 100644 --- a/src/runtime/haskell/PGF2.hsc +++ b/src/runtime/haskell/PGF2.hsc @@ -279,8 +279,12 @@ cookie_write cookie buf size = do fmap fromIntegral $ (callback :: Ptr Word8 -> Int -> IO Int) buf (fromIntegral size) #endif -pgfFilePath :: PGF -> FilePath -pgfFilePath p = unsafePerformIO (pgf_file_path (a_db p) >>= peekCString) +pgfFilePath :: PGF -> Maybe FilePath +pgfFilePath p = unsafePerformIO $ do + c_fpath <- pgf_file_path (a_db p) + if c_fpath == nullPtr + then return Nothing + else fmap Just $ peekCString c_fpath showPGF :: PGF -> String showPGF p =