diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-01-25 09:16:41 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-01-25 09:16:41 +0000 |
commit | db59a7700e5e42e8b5f6f8e327067a969540ee14 (patch) | |
tree | 3bc069962a009cb65d2890d5e08dcc093446107e | |
parent | 326be568e2cb04285c84e6e26a3e6b3822607361 (diff) |
cindex/Python: Support file objects as unsaved_files, albeit inefficiently.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@94418 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | bindings/python/clang/cindex.py | 9 | ||||
-rw-r--r-- | bindings/python/tests/cindex/test_translation_unit.py | 8 |
2 files changed, 15 insertions, 2 deletions
diff --git a/bindings/python/clang/cindex.py b/bindings/python/clang/cindex.py index 7eab09cf39..bba7533785 100644 --- a/bindings/python/clang/cindex.py +++ b/bindings/python/clang/cindex.py @@ -553,7 +553,6 @@ class TranslationUnit(ClangObject): Construct a translation unit from the given source file, using the given command line argument. """ - # TODO: Support unsaved files. arg_array = 0 if len(args): arg_array = (c_char_p * len(args))(* args) @@ -561,7 +560,13 @@ class TranslationUnit(ClangObject): if len(unsaved_files): unsaved_files_array = (_CXUnsavedFile * len(unsaved_files))() for i,(name,value) in enumerate(unsaved_files): - # FIXME: Support file objects. + 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 = name unsaved_files_array[i].contents = value unsaved_files_array[i].length = len(value) diff --git a/bindings/python/tests/cindex/test_translation_unit.py b/bindings/python/tests/cindex/test_translation_unit.py index 9cf7aba3bb..ec12e689d9 100644 --- a/bindings/python/tests/cindex/test_translation_unit.py +++ b/bindings/python/tests/cindex/test_translation_unit.py @@ -41,3 +41,11 @@ int SOME_DEFINE; spellings = [c.spelling for c in tu.cursor.get_children()] assert spellings[-2] == 'x' assert spellings[-1] == 'y' + +def test_unsaved_files_2(): + import StringIO + index = Index.create() + tu = index.parse('fake.c', unsaved_files = [ + ('fake.c', StringIO.StringIO('int x;'))]) + spellings = [c.spelling for c in tu.cursor.get_children()] + assert spellings[-1] == 'x' |