Skip to content

Commit

Permalink
[libclang] Keep track of TranslationUnit instance when annotating tokens
Browse files Browse the repository at this point in the history
Summary:
Previously the `_tu` was not propagated to the returned cursor, leading to errors when calling any
method on that cursor (e.g. `cursor.referenced`).

Reviewers: jbcoe, rsmith

Reviewed By: jbcoe

Subscribers: cfe-commits

Tags: #clang

Patch by jklaehn (Johann Klähn)

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

llvm-svn: 313913
  • Loading branch information
jbcoe committed Sep 21, 2017
1 parent b63355e commit 1a28f2a
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 0 deletions.
1 change: 1 addition & 0 deletions clang/bindings/python/clang/cindex.py
Expand Up @@ -3216,6 +3216,7 @@ def extent(self):
def cursor(self):
"""The Cursor this Token corresponds to."""
cursor = Cursor()
cursor._tu = self._tu

conf.lib.clang_annotateTokens(self._tu, byref(self), 1, byref(cursor))

Expand Down
22 changes: 22 additions & 0 deletions clang/bindings/python/tests/cindex/test_cursor.py
Expand Up @@ -395,6 +395,28 @@ def test_get_tokens():
assert tokens[0].spelling == 'int'
assert tokens[1].spelling == 'foo'

def test_get_token_cursor():
"""Ensure we can map tokens to cursors."""
tu = get_tu('class A {}; int foo(A var = A());', lang='cpp')
foo = get_cursor(tu, 'foo')

for cursor in foo.walk_preorder():
if cursor.kind.is_expression() and not cursor.kind.is_statement():
break
else:
assert False, "Could not find default value expression"

tokens = list(cursor.get_tokens())
assert len(tokens) == 4, [t.spelling for t in tokens]
assert tokens[0].spelling == '='
assert tokens[1].spelling == 'A'
assert tokens[2].spelling == '('
assert tokens[3].spelling == ')'
t_cursor = tokens[1].cursor
assert t_cursor.kind == CursorKind.TYPE_REF
r_cursor = t_cursor.referenced # should not raise an exception
assert r_cursor.kind == CursorKind.CLASS_DECL

def test_get_arguments():
tu = get_tu('void foo(int i, int j);')
foo = get_cursor(tu, 'foo')
Expand Down

0 comments on commit 1a28f2a

Please sign in to comment.