Skip to content

Commit

Permalink
[libclang] Fix clang_Cursor_getNumArguments and clang_Cursor_getArgum…
Browse files Browse the repository at this point in the history
…ent for CXXConstructExpr

Constructors have the same methods for arguments as call expressions.
Let's provide a way to get their arguments the same way.

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

llvm-svn: 347654
  • Loading branch information
Ivan Donchevskii committed Nov 27, 2018
1 parent 81bff5e commit 60b7103
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 0 deletions.
3 changes: 3 additions & 0 deletions clang/test/Index/print-type.cpp
Expand Up @@ -77,6 +77,8 @@ using baz = C<A<void>>;

auto autoTemplPointer = &autoTemplRefParam;

outer::Foo<bool> parameter;
outer::inner::Bar construct(&parameter);
// RUN: c-index-test -test-print-type %s -std=c++14 | FileCheck %s
// CHECK: Namespace=outer:1:11 (Definition) [type=] [typekind=Invalid] [isPOD=0]
// CHECK: ClassTemplate=Foo:4:8 (Definition) [type=] [typekind=Invalid] [isPOD=0]
Expand Down Expand Up @@ -185,3 +187,4 @@ auto autoTemplPointer = &autoTemplRefParam;
// CHECK: DeclRefExpr=templRefParam:71:40 [type=Specialization<Specialization<bool> &>] [typekind=Unexposed] [templateargs/1= [type=Specialization<bool> &] [typekind=LValueReference]] [canonicaltype=Specialization<Specialization<bool> &>] [canonicaltypekind=Record] [canonicaltemplateargs/1= [type=Specialization<bool> &] [typekind=LValueReference]] [isPOD=1]
// CHECK: TypeAliasDecl=baz:76:7 (Definition) [type=baz] [typekind=Typedef] [templateargs/1= [type=A<void>] [typekind=Unexposed]] [canonicaltype=A<void>] [canonicaltypekind=Record] [canonicaltemplateargs/1= [type=void] [typekind=Void]] [isPOD=0]
// CHECK: VarDecl=autoTemplPointer:78:6 (Definition) [type=Specialization<Specialization<bool> &> *] [typekind=Auto] [canonicaltype=Specialization<Specialization<bool> &> *] [canonicaltypekind=Pointer] [isPOD=1] [pointeetype=Specialization<Specialization<bool> &>] [pointeekind=Record]
// CHECK: CallExpr=Bar:17:3 [type=outer::inner::Bar] [typekind=Elaborated] [canonicaltype=outer::inner::Bar] [canonicaltypekind=Record] [args= [outer::Foo<bool> *] [Pointer]] [isPOD=0] [nbFields=3]
10 changes: 10 additions & 0 deletions clang/tools/libclang/CXCursor.cpp
Expand Up @@ -1164,6 +1164,9 @@ int clang_Cursor_getNumArguments(CXCursor C) {
if (const CallExpr *CE = dyn_cast<CallExpr>(E)) {
return CE->getNumArgs();
}
if (const CXXConstructExpr *CE = dyn_cast<CXXConstructExpr>(E)) {
return CE->getNumArgs();
}
}

return -1;
Expand Down Expand Up @@ -1192,6 +1195,13 @@ CXCursor clang_Cursor_getArgument(CXCursor C, unsigned i) {
cxcursor::getCursorTU(C));
}
}
if (const CXXConstructExpr *CE = dyn_cast<CXXConstructExpr>(E)) {
if (i < CE->getNumArgs()) {
return cxcursor::MakeCXCursor(CE->getArg(i),
getCursorDecl(C),
cxcursor::getCursorTU(C));
}
}
}

return clang_getNullCursor();
Expand Down

0 comments on commit 60b7103

Please sign in to comment.