module C (
Pos(posOf),
module CAST,
AttrC, getCHeader,
CObj(..), CTag(..), CDef(..), lookupDefObjC, lookupDefTagC,
getDefOfIdentC,
module CTrav,
module CPretty,
loadAttrC,
Ident, Attrs, Attr(..),
csuffix, hsuffix, isuffix)
where
import Position (Position(..), Pos(posOf))
import Idents (Ident, lexemeToIdent)
import Attributes (Attrs, Attr(..))
import C2HSState (CST, IOMode(..),
readCST, transCST, runCST, nop,
readFileCIO, writeFileCIO, openFileCIO, hCloseCIO,
fatal, errorsPresent, showErrors,
Traces(..), putTraceStr)
import CAST
import CParser (parseC)
import CPretty
import CAttrs (AttrC, attrC, getCHeader,
CObj(..), CTag(..), CDef(..), lookupDefObjC, lookupDefTagC,
getDefOfIdentC)
import CNames (nameAnalysis)
import CTrav
csuffix, hsuffix, isuffix :: String
csuffix :: String
csuffix = String
".c"
hsuffix :: String
hsuffix = String
".h"
isuffix :: String
isuffix = String
".i"
loadAttrC :: String -> CST s (AttrC, String)
loadAttrC :: forall s. String -> CST s (AttrC, String)
loadAttrC String
fname = do
forall {s}. String -> CST s ()
traceInfoRead String
fname
String
contents <- forall e s. String -> PreCST e s String
readFileCIO String
fname
forall {s}. CST s ()
traceInfoParse
CHeader
rawHeader <- forall s s'. String -> Position -> PreCST s s' CHeader
parseC String
contents (String -> Int -> Int -> Position
Position String
fname Int
1 Int
1)
let header :: AttrC
header = CHeader -> AttrC
attrC CHeader
rawHeader
forall {s}. CST s ()
traceInfoNA
AttrC
headerWithAttrs <- forall s. AttrC -> CST s AttrC
nameAnalysis AttrC
header
Bool
errs <- forall e s. PreCST e s Bool
errorsPresent
if Bool
errs
then do
forall {s}. CST s ()
traceInfoErr
String
errmsgs <- forall e s. PreCST e s String
showErrors
forall e s a. String -> PreCST e s a
fatal (String
"C header contains \
\errors:\n\n" forall a. [a] -> [a] -> [a]
++ String
errmsgs)
else do
forall {s}. CST s ()
traceInfoOK
String
warnmsgs <- forall e s. PreCST e s String
showErrors
forall (m :: * -> *) a. Monad m => a -> m a
return (AttrC
headerWithAttrs, String
warnmsgs)
where
traceInfoRead :: String -> CST s ()
traceInfoRead String
fname = forall s. (Traces -> Bool) -> String -> CST s ()
putTraceStr Traces -> Bool
tracePhasesSW
(String
"Attempting to read file `"
forall a. [a] -> [a] -> [a]
++ String
fname forall a. [a] -> [a] -> [a]
++ String
"'...\n")
traceInfoParse :: CST s ()
traceInfoParse = forall s. (Traces -> Bool) -> String -> CST s ()
putTraceStr Traces -> Bool
tracePhasesSW
(String
"...parsing `"
forall a. [a] -> [a] -> [a]
++ String
fname forall a. [a] -> [a] -> [a]
++ String
"'...\n")
traceInfoNA :: CST s ()
traceInfoNA = forall s. (Traces -> Bool) -> String -> CST s ()
putTraceStr Traces -> Bool
tracePhasesSW
(String
"...name analysis of `"
forall a. [a] -> [a] -> [a]
++ String
fname forall a. [a] -> [a] -> [a]
++ String
"'...\n")
traceInfoErr :: CST s ()
traceInfoErr = forall s. (Traces -> Bool) -> String -> CST s ()
putTraceStr Traces -> Bool
tracePhasesSW
(String
"...error(s) detected in `"
forall a. [a] -> [a] -> [a]
++ String
fname forall a. [a] -> [a] -> [a]
++ String
"'.\n")
traceInfoOK :: CST s ()
traceInfoOK = forall s. (Traces -> Bool) -> String -> CST s ()
putTraceStr Traces -> Bool
tracePhasesSW
(String
"...successfully loaded `"
forall a. [a] -> [a] -> [a]
++ String
fname forall a. [a] -> [a] -> [a]
++ String
"'.\n")