summaryrefslogtreecommitdiff
path: root/clang/bindings
diff options
context:
space:
mode:
authorSerge Guelton <sguelton@quarkslab.com>2019-01-24 10:34:44 +0000
committerSerge Guelton <sguelton@quarkslab.com>2019-01-24 10:34:44 +0000
commitfa2e927c44ea38f16aaf0a8db515acbb41152d02 (patch)
tree57b1437e5e0603e79292eb0b89f4ffdc6c92f422 /clang/bindings
parent79df859685de2a0ad00d03f2060fae760d66827b (diff)
downloadllvm-fa2e927c44ea38f16aaf0a8db515acbb41152d02.tar.gz
Fix python3 compability issue in clang binding
The file contents could be of str type. Should use byte length instead of str length, otherwise utf-8 encoded files may not get properly parsed for completion. Source issue: https://github.com/ncm2/ncm2-pyclang#2 Commited on behalf of `roxma' Differential Revision: https://reviews.llvm.org/D56429 llvm-svn: 352039
Diffstat (limited to 'clang/bindings')
-rw-r--r--clang/bindings/python/clang/cindex.py38
1 files changed, 15 insertions, 23 deletions
diff --git a/clang/bindings/python/clang/cindex.py b/clang/bindings/python/clang/cindex.py
index 0be83ec99863..2c97d01a104a 100644
--- a/clang/bindings/python/clang/cindex.py
+++ b/clang/bindings/python/clang/cindex.py
@@ -2814,9 +2814,9 @@ class TranslationUnit(ClangObject):
for i, (name, contents) in enumerate(unsaved_files):
if hasattr(contents, "read"):
contents = contents.read()
-
+ contents = b(contents)
unsaved_array[i].name = b(fspath(name))
- unsaved_array[i].contents = b(contents)
+ unsaved_array[i].contents = contents
unsaved_array[i].length = len(contents)
ptr = conf.lib.clang_parseTranslationUnit(index,
@@ -2993,17 +2993,13 @@ class TranslationUnit(ClangObject):
unsaved_files_array = 0
if len(unsaved_files):
unsaved_files_array = (_CXUnsavedFile * len(unsaved_files))()
- for i,(name,value) in enumerate(unsaved_files):
- if not isinstance(value, str):
- # FIXME: It would be great to support an efficient version
- # of this, one day.
- value = value.read()
- print(value)
- if not isinstance(value, str):
- raise TypeError('Unexpected unsaved file contents.')
- unsaved_files_array[i].name = fspath(name)
- unsaved_files_array[i].contents = value
- unsaved_files_array[i].length = len(value)
+ for i,(name,contents) in enumerate(unsaved_files):
+ if hasattr(contents, "read"):
+ contents = contents.read()
+ contents = b(contents)
+ unsaved_files_array[i].name = b(fspath(name))
+ unsaved_files_array[i].contents = contents
+ unsaved_files_array[i].length = len(contents)
ptr = conf.lib.clang_reparseTranslationUnit(self, len(unsaved_files),
unsaved_files_array, options)
@@ -3057,17 +3053,13 @@ class TranslationUnit(ClangObject):
unsaved_files_array = 0
if len(unsaved_files):
unsaved_files_array = (_CXUnsavedFile * len(unsaved_files))()
- for i,(name,value) in enumerate(unsaved_files):
- if not isinstance(value, str):
- # FIXME: It would be great to support an efficient version
- # of this, one day.
- value = value.read()
- print(value)
- if not isinstance(value, str):
- raise TypeError('Unexpected unsaved file contents.')
+ for i,(name,contents) in enumerate(unsaved_files):
+ if hasattr(contents, "read"):
+ contents = contents.read()
+ contents = b(contents)
unsaved_files_array[i].name = b(fspath(name))
- unsaved_files_array[i].contents = b(value)
- unsaved_files_array[i].length = len(value)
+ unsaved_files_array[i].contents = contents
+ unsaved_files_array[i].length = len(contents)
ptr = conf.lib.clang_codeCompleteAt(self, fspath(path), line, column,
unsaved_files_array, len(unsaved_files), options)
if ptr: