diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/include/clang/AST/Decl.h | 2 | ||||
-rw-r--r-- | clang/lib/AST/Decl.cpp | 10 | ||||
-rw-r--r-- | clang/test/Index/annotate-tokens-with-default-args.cpp | 16 | ||||
-rw-r--r-- | clang/test/Index/annotate-tokens-with-default-args.h | 3 |
4 files changed, 31 insertions, 0 deletions
diff --git a/clang/include/clang/AST/Decl.h b/clang/include/clang/AST/Decl.h index 938de814e28..1ff9e55cf46 100644 --- a/clang/include/clang/AST/Decl.h +++ b/clang/include/clang/AST/Decl.h @@ -1198,6 +1198,8 @@ public: StorageClass S, StorageClass SCAsWritten, Expr *DefArg); + virtual SourceRange getSourceRange() const; + void setObjCMethodScopeInfo(unsigned parameterIndex) { ParmVarDeclBits.IsObjCMethodParam = true; diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index ed8171d3ef1..64fd355446a 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/lib/AST/Decl.cpp @@ -1388,6 +1388,16 @@ ParmVarDecl *ParmVarDecl::Create(ASTContext &C, DeclContext *DC, S, SCAsWritten, DefArg); } +SourceRange ParmVarDecl::getSourceRange() const { + if (!hasInheritedDefaultArg()) { + SourceRange ArgRange = getDefaultArgRange(); + if (ArgRange.isValid()) + return SourceRange(getOuterLocStart(), ArgRange.getEnd()); + } + + return DeclaratorDecl::getSourceRange(); +} + Expr *ParmVarDecl::getDefaultArg() { assert(!hasUnparsedDefaultArg() && "Default argument is not yet parsed!"); assert(!hasUninstantiatedDefaultArg() && diff --git a/clang/test/Index/annotate-tokens-with-default-args.cpp b/clang/test/Index/annotate-tokens-with-default-args.cpp new file mode 100644 index 00000000000..2c8844156ff --- /dev/null +++ b/clang/test/Index/annotate-tokens-with-default-args.cpp @@ -0,0 +1,16 @@ +#include "annotate-tokens-with-default-args.h" + +void Foo::m(Foo *f) {} + +// RUN: c-index-test -test-annotate-tokens=%s:3:1:4:1 %s | FileCheck %s +// CHECK: Keyword: "void" [3:1 - 3:5] CXXMethod=m:3:11 (Definition) +// CHECK: Identifier: "Foo" [3:6 - 3:9] TypeRef=struct Foo:1:8 +// CHECK: Punctuation: "::" [3:9 - 3:11] CXXMethod=m:3:11 (Definition) +// CHECK: Identifier: "m" [3:11 - 3:12] CXXMethod=m:3:11 (Definition) +// CHECK: Punctuation: "(" [3:12 - 3:13] CXXMethod=m:3:11 (Definition) +// CHECK: Identifier: "Foo" [3:13 - 3:16] TypeRef=struct Foo:1:8 +// CHECK: Punctuation: "*" [3:17 - 3:18] ParmDecl=f:3:18 (Definition) +// CHECK: Identifier: "f" [3:18 - 3:19] ParmDecl=f:3:18 (Definition) +// CHECK: Punctuation: ")" [3:19 - 3:20] CXXMethod=m:3:11 (Definition) +// CHECK: Punctuation: "{" [3:21 - 3:22] UnexposedStmt= +// CHECK: Punctuation: "}" [3:22 - 3:23] UnexposedStmt= diff --git a/clang/test/Index/annotate-tokens-with-default-args.h b/clang/test/Index/annotate-tokens-with-default-args.h new file mode 100644 index 00000000000..323c519351f --- /dev/null +++ b/clang/test/Index/annotate-tokens-with-default-args.h @@ -0,0 +1,3 @@ +struct Foo { + void m(Foo *f = 0); +}; |