r341930 - [python bindings] Expose getNumTemplateArguments

Jonathan Coe via cfe-commits cfe-commits at lists.llvm.org
Tue Sep 11 05:44:52 PDT 2018


Author: jbcoe
Date: Tue Sep 11 05:44:52 2018
New Revision: 341930

URL: http://llvm.org/viewvc/llvm-project?rev=341930&view=rev
Log:
[python bindings] Expose getNumTemplateArguments

Expose the C bindings for clang_Type_getNumTemplateArguments() and
clang_Type_getTemplateArgumentAsType() in the python API.

Patch by kjteske (Kyle Teske).

Reviewed By: jbcoe

Subscribers: cfe-commits

Differential Revision: https://reviews.llvm.org/D51299

Modified:
    cfe/trunk/bindings/python/clang/cindex.py
    cfe/trunk/bindings/python/tests/cindex/test_type.py

Modified: cfe/trunk/bindings/python/clang/cindex.py
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/bindings/python/clang/cindex.py?rev=341930&r1=341929&r2=341930&view=diff
==============================================================================
--- cfe/trunk/bindings/python/clang/cindex.py (original)
+++ cfe/trunk/bindings/python/clang/cindex.py Tue Sep 11 05:44:52 2018
@@ -2254,6 +2254,12 @@ class Type(Structure):
 
         return res
 
+    def get_num_template_arguments(self):
+        return conf.lib.clang_Type_getNumTemplateArguments(self)
+
+    def get_template_argument_type(self, num):
+        return conf.lib.clang_Type_getTemplateArgumentAsType(self, num)
+
     def get_canonical(self):
         """
         Return the canonical type for a Type.
@@ -3999,6 +4005,15 @@ functionList = [
    Type,
    Type.from_result),
 
+  ("clang_Type_getNumTemplateArguments",
+   [Type],
+   c_int),
+
+  ("clang_Type_getTemplateArgumentAsType",
+   [Type, c_uint],
+   Type,
+   Type.from_result),
+
   ("clang_Type_getOffsetOf",
    [Type, c_interop_string],
    c_longlong),

Modified: cfe/trunk/bindings/python/tests/cindex/test_type.py
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/bindings/python/tests/cindex/test_type.py?rev=341930&r1=341929&r2=341930&view=diff
==============================================================================
--- cfe/trunk/bindings/python/tests/cindex/test_type.py (original)
+++ cfe/trunk/bindings/python/tests/cindex/test_type.py Tue Sep 11 05:44:52 2018
@@ -436,3 +436,28 @@ class TestType(unittest.TestCase):
 
         self.assertIsNotNone(testInteger, "Could not find testInteger.")
         self.assertEqual(testInteger.type.get_address_space(), 2)
+
+    def test_template_arguments(self):
+        source = """
+        class Foo {
+        };
+        template <typename T>
+        class Template {
+        };
+        Template<Foo> instance;
+        int bar;
+        """
+        tu = get_tu(source, lang='cpp')
+
+        # Varible with a template argument.
+        cursor = get_cursor(tu, 'instance')
+        cursor_type = cursor.type
+        self.assertEqual(cursor.kind, CursorKind.VAR_DECL)
+        self.assertEqual(cursor_type.spelling, 'Template<Foo>')
+        self.assertEqual(cursor_type.get_num_template_arguments(), 1)
+        template_type = cursor_type.get_template_argument_type(0)
+        self.assertEqual(template_type.spelling, 'Foo')
+
+        # Variable without a template argument.
+        cursor = get_cursor(tu, 'bar')
+        self.assertEqual(cursor.get_num_template_arguments(), -1)




More information about the cfe-commits mailing list