packages feed

LibClang 0.0.7 → 0.0.8

raw patch · 10 files changed

+185/−2 lines, 10 files

Files

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