<div dir="ltr"><div>commit cc52d367ede0f3f306014d0418e18772e0c49dec</div><div>Author: Masud Rahman <<a href="mailto:mrahman15@bloomberg.net">mrahman15@bloomberg.net</a>></div><div>Date:   Thu Sep 7 11:39:19 2017 -0400</div><div><br></div><div>    [bindings] add Cursor.linkage</div><div>    </div><div>    Add Python bindings for the 'clang_getCursorLinkage', and tests to</div><div>    validate the functionality.</div><div><br></div><div>diff --git a/bindings/python/clang/cindex.py b/bindings/python/clang/cindex.py</div><div>index 4069ab8650..5713ab7f29 100644</div><div>--- a/bindings/python/clang/cindex.py</div><div>+++ b/bindings/python/clang/cindex.py</div><div>@@ -1548,6 +1548,13 @@ class Cursor(Structure):</div><div> </div><div>         return self._loc</div><div> </div><div>+    @property</div><div>+    def linkage(self):</div><div>+        if not hasattr(self, '_linkage'):</div><div>+            self._linkage = conf.lib.clang_getCursorLinkage(self)</div><div>+</div><div>+        return LinkageKind.from_id(self._linkage)</div><div>+</div><div>     @property</div><div>     def extent(self):</div><div>         """</div><div>@@ -2061,6 +2068,26 @@ RefQualifierKind.NONE = RefQualifierKind(0)</div><div> RefQualifierKind.LVALUE = RefQualifierKind(1)</div><div> RefQualifierKind.RVALUE = RefQualifierKind(2)</div><div> </div><div>+class LinkageKind(BaseEnumeration):</div><div>+    """</div><div>+    """</div><div>+</div><div>+    # The unique kind objects, indexed by id.</div><div>+    _kinds = []</div><div>+    _name_map = None</div><div>+</div><div>+    def from_param(self):</div><div>+        return self.value</div><div>+</div><div>+    def __repr__(self):</div><div>+        return 'LinkageKind.%s' % (<a href="http://self.name">self.name</a>,)</div><div>+</div><div>+LinkageKind.INVALID = LinkageKind(0)</div><div>+LinkageKind.NO_LINKAGE = LinkageKind(1)</div><div>+LinkageKind.INTERNAL = LinkageKind(2)</div><div>+LinkageKind.UNIQUE_EXTERNAL = LinkageKind(3)</div><div>+LinkageKind.EXTERNAL = LinkageKind(4)</div><div>+</div><div> class Type(Structure):</div><div>     """</div><div>     The type of an element in the abstract syntax tree.</div><div>diff --git a/bindings/python/tests/cindex/test_linkage.py b/bindings/python/tests/cindex/test_linkage.py</div><div>new file mode 100644</div><div>index 0000000000..392a0f156c</div><div>--- /dev/null</div><div>+++ b/bindings/python/tests/cindex/test_linkage.py</div><div>@@ -0,0 +1,31 @@</div><div>+</div><div>+from clang.cindex import LinkageKind</div><div>+from clang.cindex import Cursor</div><div>+from clang.cindex import TranslationUnit</div><div>+</div><div>+from .util import get_cursor</div><div>+from .util import get_tu</div><div>+</div><div>+def test_linkage():</div><div>+    """Ensure that linkage specifers are available on cursors"""</div><div>+</div><div>+    tu = get_tu("""</div><div>+void foo() { int no_linkage; }</div><div>+static int internal;</div><div>+namespace { extern int unique_external; }</div><div>+extern int external;</div><div>+""", lang = 'cpp')</div><div>+</div><div>+    no_linkage = get_cursor(tu.cursor, "no_linkage")</div><div>+    assert no_linkage.linkage == LinkageKind.NO_LINKAGE;</div><div>+</div><div>+    internal = get_cursor(tu.cursor, "internal")</div><div>+    assert internal.linkage == LinkageKind.INTERNAL</div><div>+</div><div>+    unique_external = get_cursor(tu.cursor, "unique_external")</div><div>+    assert unique_external.linkage == LinkageKind.UNIQUE_EXTERNAL</div><div>+</div><div>+    external = get_cursor(tu.cursor, "external")</div><div>+    assert external.linkage == LinkageKind.EXTERNAL</div><div>+</div><div>+</div><div><br></div></div>