module Clang.TranslationUnit
(
FFI.Index
,FFI.TranslationUnitFlags(..)
,FFI.SaveTranslationUnitFlags(..)
,getSpelling
,withCreateIndex
,withCreate
,withCreateFromSourceFile
,withParse
,defaultSaveOptions
,save
,defaultReparseOptions
,reparse
,getCursor
) where
import System.IO.Unsafe(unsafePerformIO)
import Data.Bits((.&.))
import Data.Maybe(catMaybes)
import Control.Monad(mzero, (<=<))
import Foreign.ForeignPtr(withForeignPtr)
import Clang.Type
import Clang.Source
import qualified Clang.FFI as FFI
getSpelling = unsafePerformIO . FFI.getTranslationUnitSpelling
withCreate i s f = flip withForeignPtr f =<< FFI.createTranslationUnit i s
withCreateFromSourceFile :: FFI.Index
-> FilePath
-> [String]
-> [FFI.UnsavedFile]
-> (FFI.TranslationUnit -> IO a)
-> IO a
withCreateFromSourceFile i fn ss ufs f = flip withForeignPtr f =<< FFI.createTranslationUnitFromSourceFile i fn ss ufs
withParse :: FFI.Index
-> Maybe FilePath
-> [String]
-> [FFI.UnsavedFile]
-> [FFI.TranslationUnitFlags]
-> (FFI.TranslationUnit -> IO a)
-> IO a
-> IO a
withParse i ms ss ufs opts f nr = maybe nr (flip withForeignPtr f) =<<
FFI.parseTranslationUnit i ms ss ufs (FFI.getTranslationUnitFlagsSum opts)
defaultSaveOptions = [FFI.SaveTranslationUnit_None]
save :: FFI.TranslationUnit
-> FilePath
-> [FFI.SaveTranslationUnitFlags]
-> IO Bool
save t fname opts = FFI.saveTranslationUnit t fname (FFI.getSaveTranslationUnitFlagsSum opts)
defaultReparseOptions = [FFI.Reparse_None]
reparse :: FFI.TranslationUnit
-> [FFI.UnsavedFile]
-> [FFI.ReparseFlags]
-> IO Bool
reparse t ufs opts = FFI.reparseTranslationUnit t ufs (FFI.getReparseFlagsSum opts)
getCursor = unsafePerformIO . FFI.getTranslationUnitCursor
withCreateIndex i1 i2 f = flip withForeignPtr f =<< FFI.createIndex i1 i2