]> granicus.if.org Git - clang/commitdiff
[bindings] allow null strings in Python 3
authorMasud Rahman <llvm@masudrahman.com>
Sat, 21 Oct 2017 16:13:41 +0000 (16:13 +0000)
committerMasud Rahman <llvm@masudrahman.com>
Sat, 21 Oct 2017 16:13:41 +0000 (16:13 +0000)
Some API calls accept 'NULL' instead of a char array (e.g. the second
argument to 'clang_ParseTranslationUnit').  For Python 3 compatibility,
all strings are passed through 'c_interop_string' which expects to
receive only 'bytes' or 'str' objects.  This change extends this
behavior to additionally allow 'None' to be supplied.

A test case was added which breaks in Python 3, and is fixed by this
change.  All the test cases pass in both, Python 2 and Python 3.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@316264 91177308-0d34-0410-b5e6-96231b3b80d8

bindings/python/clang/cindex.py
bindings/python/tests/cindex/test_index.py

index 1dc1760e4f8804a675543dea12716e000a463422..d72dd14ef9f30e9e115454f92c365f0e17fbc96f 100644 (file)
@@ -94,6 +94,9 @@ if sys.version_info[0] == 3:
                 return cls(param)
             if isinstance(param, bytes):
                 return cls(param)
+            if param is None:
+                # Support passing null to C functions expecting char arrays
+                return None
             raise TypeError("Cannot convert '{}' to '{}'".format(type(param).__name__, cls.__name__))
 
         @staticmethod
index dc173f04d21877c4ba9ee3c178f82ec26f29f1de..ef76692a526590bc47a2ab59abc032b87260ea1a 100644 (file)
@@ -13,3 +13,5 @@ def test_parse():
     assert isinstance(index, Index)
     tu = index.parse(os.path.join(kInputsDir, 'hello.cpp'))
     assert isinstance(tu, TranslationUnit)
+    tu = index.parse(None, ['-c', os.path.join(kInputsDir, 'hello.cpp')])
+    assert isinstance(tu, TranslationUnit)