mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-24 14:20:17 +00:00
implementing Cursor.get_included_file in python bindings
Summary: adding function: `Cursor.get_included_file` , so the C API's `clang_getIncludedFile` function is available on the python binding interface also adding test to unittests related ticket: https://bugs.llvm.org/show_bug.cgi?id=15223 Reviewers: mgorny, arphaman, jbcoe Reviewed By: jbcoe Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D46383 Patch by jlaz (József Láz) llvm-svn: 332045
This commit is contained in:
parent
86e6742c17
commit
e7e1d9349b
@ -1511,6 +1511,12 @@ class Cursor(Structure):
|
||||
another translation unit."""
|
||||
return conf.lib.clang_getCursorUSR(self)
|
||||
|
||||
def get_included_file(self):
|
||||
"""Returns the File that is included by the current inclusion cursor."""
|
||||
assert self.kind == CursorKind.INCLUSION_DIRECTIVE
|
||||
|
||||
return conf.lib.clang_getIncludedFile(self)
|
||||
|
||||
@property
|
||||
def kind(self):
|
||||
"""Return the kind of this cursor."""
|
||||
@ -3085,8 +3091,9 @@ class File(ClangObject):
|
||||
return "<File: %s>" % (self.name)
|
||||
|
||||
@staticmethod
|
||||
def from_cursor_result(res, fn, args):
|
||||
assert isinstance(res, File)
|
||||
def from_result(res, fn, args):
|
||||
assert isinstance(res, c_object_p)
|
||||
res = File(res)
|
||||
|
||||
# Copy a reference to the TranslationUnit to prevent premature GC.
|
||||
res._tu = args[0]._tu
|
||||
@ -3701,8 +3708,8 @@ functionList = [
|
||||
|
||||
("clang_getIncludedFile",
|
||||
[Cursor],
|
||||
File,
|
||||
File.from_cursor_result),
|
||||
c_object_p,
|
||||
File.from_result),
|
||||
|
||||
("clang_getInclusions",
|
||||
[TranslationUnit, callbacks['translation_unit_includes'], py_object]),
|
||||
|
@ -108,6 +108,18 @@ int SOME_DEFINE;
|
||||
for i in zip(inc, tu.get_includes()):
|
||||
eq(i[0], i[1])
|
||||
|
||||
def test_inclusion_directive(self):
|
||||
src = os.path.join(kInputsDir, 'include.cpp')
|
||||
h1 = os.path.join(kInputsDir, "header1.h")
|
||||
h2 = os.path.join(kInputsDir, "header2.h")
|
||||
h3 = os.path.join(kInputsDir, "header3.h")
|
||||
inc = [h1, h3, h2, h3, h1]
|
||||
|
||||
tu = TranslationUnit.from_source(src, options=TranslationUnit.PARSE_DETAILED_PROCESSING_RECORD)
|
||||
inclusion_directive_files = [c.get_included_file().name for c in tu.cursor.get_children() if c.kind == CursorKind.INCLUSION_DIRECTIVE]
|
||||
for i in zip(inc, inclusion_directive_files):
|
||||
self.assert_normpaths_equal(i[0], i[1])
|
||||
|
||||
def test_save(self):
|
||||
"""Ensure TranslationUnit.save() works."""
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user