[PATCH] [cindex.py] A NULL pointer shouldn't be compared to None.

Xavier Deguillard deguilx at gmail.com
Mon Mar 18 23:30:32 PDT 2013


Hi,

The code inside cindex.py was comparing NULL pointer returned by
clang_parseTranslationUnit and clang_createTranslationUnit with None.
However, as illustrated by the two tests I've added, those conditions
were ineffective which resulted in assert triggering later on.

Instead, pointer should be treated as boolean value, a NULL pointer
being False.

Thanks
Xavier
-------------- next part --------------
diff --git a/bindings/python/clang/cindex.py b/bindings/python/clang/cindex.py
index e683f5b..70f4f36 100644
--- a/bindings/python/clang/cindex.py
+++ b/bindings/python/clang/cindex.py
@@ -2015,7 +2015,7 @@ class TranslationUnit(ClangObject):
                                     len(args), unsaved_array,
                                     len(unsaved_files), options)
 
-        if ptr is None:
+        if not ptr:
             raise TranslationUnitLoadError("Error parsing translation unit.")
 
         return cls(ptr, index=index)
@@ -2037,7 +2037,7 @@ class TranslationUnit(ClangObject):
             index = Index.create()
 
         ptr = conf.lib.clang_createTranslationUnit(index, filename)
-        if ptr is None:
+        if not ptr:
             raise TranslationUnitLoadError(filename)
 
         return cls(ptr=ptr, index=index)
diff --git a/bindings/python/tests/cindex/test_translation_unit.py b/bindings/python/tests/cindex/test_translation_unit.py
index c91f126..f77998e 100644
--- a/bindings/python/tests/cindex/test_translation_unit.py
+++ b/bindings/python/tests/cindex/test_translation_unit.py
@@ -8,6 +8,7 @@ from clang.cindex import Index
 from clang.cindex import SourceLocation
 from clang.cindex import SourceRange
 from clang.cindex import TranslationUnitSaveError
+from clang.cindex import TranslationUnitLoadError
 from clang.cindex import TranslationUnit
 from .util import get_cursor
 from .util import get_tu
@@ -239,3 +240,19 @@ def test_get_tokens_gc():
     del tokens
     gc.collect()
     gc.collect() # Just in case.
+
+def test_fail_from_source():
+    path = os.path.join(kInputsDir, 'non-existent.cpp')
+    try:
+        tu = TranslationUnit.from_source(path)
+    except TranslationUnitLoadError:
+        tu = None
+    assert tu == None
+
+def test_fail_from_ast_file():
+    path = os.path.join(kInputsDir, 'non-existent.ast')
+    try:
+        tu = TranslationUnit.from_ast_file(path)
+    except TranslationUnitLoadError:
+        tu = None
+    assert tu == None


More information about the cfe-commits mailing list