diff options
Diffstat (limited to 'libraries/base/GHC/InfoProv.hsc')
-rw-r--r-- | libraries/base/GHC/InfoProv.hsc | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/libraries/base/GHC/InfoProv.hsc b/libraries/base/GHC/InfoProv.hsc index 4f23322a60..86e2ae8a14 100644 --- a/libraries/base/GHC/InfoProv.hsc +++ b/libraries/base/GHC/InfoProv.hsc @@ -20,6 +20,7 @@ module GHC.InfoProv ( InfoProv(..) + , ipLoc , ipeProv , whereFrom -- * Internals @@ -42,10 +43,15 @@ data InfoProv = InfoProv { ipTyDesc :: String, ipLabel :: String, ipMod :: String, - ipLoc :: String + ipSrcFile :: String, + ipSrcSpan :: String } deriving (Eq, Show) + data InfoProvEnt +ipLoc :: InfoProv -> String +ipLoc ipe = ipSrcFile ipe ++ ":" ++ ipSrcSpan ipe + getIPE :: a -> IO (Ptr InfoProvEnt) getIPE obj = IO $ \s -> case whereFrom## obj s of @@ -54,13 +60,14 @@ getIPE obj = IO $ \s -> ipeProv :: Ptr InfoProvEnt -> Ptr InfoProv ipeProv p = (#ptr InfoProvEnt, prov) p -peekIpName, peekIpDesc, peekIpLabel, peekIpModule, peekIpSrcLoc, peekIpTyDesc :: Ptr InfoProv -> IO CString -peekIpName p = (# peek InfoProv, table_name) p -peekIpDesc p = (# peek InfoProv, closure_desc) p -peekIpLabel p = (# peek InfoProv, label) p -peekIpModule p = (# peek InfoProv, module) p -peekIpSrcLoc p = (# peek InfoProv, srcloc) p -peekIpTyDesc p = (# peek InfoProv, ty_desc) p +peekIpName, peekIpDesc, peekIpLabel, peekIpModule, peekIpSrcFile, peekIpSrcSpan, peekIpTyDesc :: Ptr InfoProv -> IO CString +peekIpName p = (# peek InfoProv, table_name) p +peekIpDesc p = (# peek InfoProv, closure_desc) p +peekIpLabel p = (# peek InfoProv, label) p +peekIpModule p = (# peek InfoProv, module) p +peekIpSrcFile p = (# peek InfoProv, src_file) p +peekIpSrcSpan p = (# peek InfoProv, src_span) p +peekIpTyDesc p = (# peek InfoProv, ty_desc) p peekInfoProv :: Ptr InfoProv -> IO InfoProv peekInfoProv infop = do @@ -69,14 +76,16 @@ peekInfoProv infop = do tyDesc <- peekCString utf8 =<< peekIpTyDesc infop label <- peekCString utf8 =<< peekIpLabel infop mod <- peekCString utf8 =<< peekIpModule infop - loc <- peekCString utf8 =<< peekIpSrcLoc infop + file <- peekCString utf8 =<< peekIpSrcFile infop + span <- peekCString utf8 =<< peekIpSrcSpan infop return InfoProv { ipName = name, ipDesc = desc, ipTyDesc = tyDesc, ipLabel = label, ipMod = mod, - ipLoc = loc + ipSrcFile = file, + ipSrcSpan = span } -- | Get information about where a value originated from. |