LibClang 0.0.7 → 0.0.8
raw patch · 10 files changed
+185/−2 lines, 10 files
Files
- LibClang.cabal +2/−2
- test/Makefile.in +22/−0
- test/Test_ChildVisitor.c +23/−0
- test/Test_ChildVisitor.hs +24/−0
- test/Test_Diagnostics.c +21/−0
- test/Test_Diagnostics.hs +17/−0
- test/Test_Diagnostics_FFI.hs +20/−0
- test/Test_InclusionVisitor.c +20/−0
- test/Test_InclusionVisitor.hs +18/−0
- test/runTest.sh +18/−0
LibClang.cabal view
@@ -1,6 +1,6 @@ Name: LibClang Cabal-version: >= 1.6-Version: 0.0.7+Version: 0.0.8 Author: Chetan Taralekar <chetant@gmail.com> Maintainer: Chetan Taralekar <chetant@gmail.com> Homepage: https://github.com/chetant/LibClang/issues@@ -26,7 +26,7 @@ Category: Language Build-type: Configure-Extra-Source-Files: configure, LibClang.buildinfo.in+Extra-Source-Files: configure, LibClang.buildinfo.in, test/Makefile.in, test/*.hs, test/*.c, test/runTest.sh Source-Repository head type: git location: git://github.com/chetant/LibClang.git
+ test/Makefile.in view
@@ -0,0 +1,22 @@+CC=@CC@+CFLAGS=-std=gnu99 @CFLAGS@+LDFLAGS=@LDFLAGS@++all: Test_Diagnostics_c Test_Diagnostics_hs Test_InclusionVisitor_c Test_InclusionVisitor_hs Test_ChildVisitor_c Test_ChildVisitor_hs++test: all+ @echo "########### TESTING ##############"+ @./runTest.sh Test_Diagnostics $(CFLAGS) Test_Diagnostics.c+ @./runTest.sh Test_InclusionVisitor $(CFLAGS) Test_InclusionVisitor.c+ @./runTest.sh Test_ChildVisitor $(CFLAGS) Test_ChildVisitor.c++%_c : %.c+ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $<++%_hs : %.hs+ ghc -o $@ $<++clean:+ rm *_c *_hs *.o *.hi++.PHONY = all clean test
+ test/Test_ChildVisitor.c view
@@ -0,0 +1,23 @@+#include <clang-c/Index.h>++enum CXChildVisitResult visitor(CXCursor cursor, CXCursor parent, CXClientData data)+{+ CXType type = clang_getCursorType(cursor);+ CXString str = clang_getTypeKindSpelling(type.kind);+ printf("Type:%s\n", clang_getCString(str));+ clang_disposeString(str);+ return CXChildVisit_Continue;+}++int main(int argc, char * argv[])+{+ CXIndex index = clang_createIndex(0, 0);+ CXTranslationUnit txUnit = clang_parseTranslationUnit(index, 0, argv, argc, 0, 0, CXTranslationUnit_None);++ CXCursor cur = clang_getTranslationUnitCursor(txUnit);+ clang_visitChildren(cur, visitor, NULL);++ clang_disposeTranslationUnit(txUnit);+ clang_disposeIndex(index);+ return 0;+}
+ test/Test_ChildVisitor.hs view
@@ -0,0 +1,24 @@+import System(getArgs)+import Data.Maybe(maybe)+import Control.Monad((<=<))+import Control.Applicative((<$>))+import Clang.TranslationUnit(withCreateIndex, withParse, TranslationUnitFlags(..))+import Clang.Traversal(visitChildren, ChildVisitResult(..))+import Clang.Cursor(getTranslationUnitCursor)+import Clang.Traversal(ChildVisitor, ChildVisitResult(..))+import qualified Clang.FFI as FFI+import Foreign.Ptr(nullPtr)++visitor :: ChildVisitor+visitor c p d = do+ tk <- FFI.getTypeKind <$> FFI.getCursorType c+ str <- (FFI.getCString <=< FFI.getTypeKindSpelling) tk+ putStrLn $ "Type:" ++ str+ return ChildVisit_Continue++test tu = visitChildren (getTranslationUnitCursor tu) visitor nullPtr++main = do+ (arg:args) <- getArgs+ withCreateIndex False False $ \index -> + withParse index (Just arg) args [] [TranslationUnit_None] test (error "No TXUnit!")
+ test/Test_Diagnostics.c view
@@ -0,0 +1,21 @@+#include <clang-c/Index.h>++int main(int argc, char * argv[])+{+ CXIndex index = clang_createIndex(0, 0);+ CXTranslationUnit txUnit = clang_parseTranslationUnit(index, 0, argv, argc, 0, 0, CXTranslationUnit_None);++ unsigned n = clang_getNumDiagnostics(txUnit);+ /* printf("numDiags:%d\n", n); */+ for(unsigned i = 0, n = clang_getNumDiagnostics(txUnit); i != n; ++i)+ {+ CXDiagnostic diag = clang_getDiagnostic(txUnit, i);+ CXString str = clang_formatDiagnostic(diag, clang_defaultDiagnosticDisplayOptions());+ printf("Diag:%s\n", clang_getCString(str));+ clang_disposeString(str);+ }++ clang_disposeTranslationUnit(txUnit);+ clang_disposeIndex(index);+ return 0;+}
+ test/Test_Diagnostics.hs view
@@ -0,0 +1,17 @@+import System(getArgs)+import Control.Monad(when)+import Data.Maybe(fromJust, isNothing)+import qualified Clang.TranslationUnit as Clang+import qualified Clang.Diagnostic as Diagnostic++test tu = do+ let diags = Diagnostic.getDiagnostics tu+ printDiag d = Diagnostic.formatDiagnostic Diagnostic.getDefaultDisplayOptions d >>=+ putStrLn . ("Diag:" ++)+ -- putStrLn $ "numDiags:" ++ show (length diags)+ mapM_ printDiag diags++main = do+ (arg:args) <- getArgs+ Clang.withCreateIndex False False $ \index -> + Clang.withParse index (Just arg) args [] [Clang.TranslationUnit_None] test (error "No TXUnit!")
+ test/Test_Diagnostics_FFI.hs view
@@ -0,0 +1,20 @@+import System(getArgs)+import Data.Maybe(fromJust, isJust)+import qualified Clang.FFI as Clang+-- import qualified Clang.TranslationUnit as Clang+-- import qualified Clang.Diagnostic as Diagnostic++main = do+ args <- getArgs+ index <- Clang.createIndex False False+ mtu <- Clang.parseTranslationUnit index Nothing args [] 0+ let tu = if isJust mtu then fromJust mtu else error "No TXUnit!"+ defDisplayOpts <- Clang.defaultDiagnosticDisplayOptions+ let printDiag i = do+ diag <- Clang.getDiagnostic tu i+ clstr <- Clang.formatDiagnostic diag defDisplayOpts+ str <- Clang.getCString clstr+ putStrLn $ "Diag:" ++ str+ numDiags <- Clang.getNumDiagnostics tu+ putStrLn $ "numDiags:" ++ show numDiags+ mapM_ printDiag [0..numDiags]
+ test/Test_InclusionVisitor.c view
@@ -0,0 +1,20 @@+#include <clang-c/Index.h>++void inclusionVisitor(CXFile file, CXSourceLocation * srcLocs, unsigned numSrcLocs, CXClientData data)+{+ CXString fname = clang_getFileName(file);+ printf("Included:%s\n",clang_getCString(fname));+ clang_disposeString(fname);+}++int main(int argc, char * argv[])+{+ CXIndex index = clang_createIndex(0, 0);+ CXTranslationUnit txUnit = clang_parseTranslationUnit(index, 0, argv, argc, 0, 0, CXTranslationUnit_None);++ clang_getInclusions(txUnit, inclusionVisitor, NULL);++ clang_disposeTranslationUnit(txUnit);+ clang_disposeIndex(index);+ return 0;+}
+ test/Test_InclusionVisitor.hs view
@@ -0,0 +1,18 @@+import System(getArgs)+import Control.Monad(when)+import Data.Maybe(fromJust, isNothing)+import qualified Clang.FFI as FFI+import qualified Clang.TranslationUnit as Clang+import qualified Clang.Source as Clang+import Foreign.Ptr(nullPtr)++printInclusions f sls p = do+ name <- FFI.getFileName f+ putStrLn $ "Included:" ++ show name++test tu = FFI.getInclusions tu printInclusions nullPtr++main = do+ (arg:args) <- getArgs+ Clang.withCreateIndex False False $ \index -> + Clang.withParse index (Just arg) args [] [Clang.TranslationUnit_None] test (error "No TXUnit!")
+ test/runTest.sh view
@@ -0,0 +1,18 @@+#!/bin/sh++TEST=$1+CTEST=${TEST}_c+HSTEST=${TEST}_hs+shift++TMPFILE_C=`mktemp`+TMPFILE_HS=`mktemp`+./$CTEST $* | grep -v "'linker' input unused" > $TMPFILE_C+./$HSTEST $* > $TMPFILE_HS+if [ -n "`diff $TMPFILE_C $TMPFILE_HS`" ]+then+ echo FAILED: $TEST refOutput:$TMPFILE_C testOutput:$TMPFILE_HS+else+ echo SUCCESS: $TEST+ rm $TMPFILE_HS $TMPFILE_C+fi