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'