From ac630d930b77643416e3776b11801217bb40c1b3 Mon Sep 17 00:00:00 2001 From: Eli Bendersky Date: Tue, 5 Aug 2014 22:27:50 +0000 Subject: [PATCH] Expose the name mangling C API to Python bindings. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@214930 91177308-0d34-0410-b5e6-96231b3b80d8 --- bindings/python/clang/cindex.py | 13 +++++++++++++ bindings/python/tests/cindex/test_cursor.py | 14 ++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/bindings/python/clang/cindex.py b/bindings/python/clang/cindex.py index 34e08602b8..ebe28fb08a 100644 --- a/bindings/python/clang/cindex.py +++ b/bindings/python/clang/cindex.py @@ -1185,6 +1185,14 @@ class Cursor(Structure): return self._displayname + @property + def mangled_name(self): + """Return the mangled name for the entity referenced by this cursor.""" + if not hasattr(self, '_mangled_name'): + self._mangled_name = conf.lib.clang_Cursor_getMangling(self) + + return self._mangled_name + @property def location(self): """ @@ -2973,6 +2981,11 @@ functionList = [ _CXString, _CXString.from_result), + ("clang_Cursor_getMangling", + [Cursor], + _CXString, + _CXString.from_result), + # ("clang_getCXTUResourceUsage", # [TranslationUnit], # CXTUResourceUsage), diff --git a/bindings/python/tests/cindex/test_cursor.py b/bindings/python/tests/cindex/test_cursor.py index 4315045022..d4ee9daa96 100644 --- a/bindings/python/tests/cindex/test_cursor.py +++ b/bindings/python/tests/cindex/test_cursor.py @@ -252,3 +252,17 @@ def test_referenced(): if c.kind == CursorKind.CALL_EXPR: assert c.referenced.spelling == foo.spelling break + +def test_mangled_name(): + kInputForMangling = """\ + int foo(int, int); + """ + tu = get_tu(kInputForMangling, lang='cpp') + foo = get_cursor(tu, 'foo') + + # Since libclang does not link in targets, we cannot pass a triple to it + # and force the target. To enable this test to pass on all platforms, accept + # all valid manglings. + # [c-index-test handles this by running the source through clang, emitting + # an AST file and running libclang on that AST file] + assert foo.mangled_name in ('_Z3fooii', '__Z3fooii', '?foo@@YAHHH') -- 2.40.0