mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 01:36:07 +00:00

This changes the handling of anonymous TagDecls to the following rules: - If the TagDecl is embedded in the declaration for some VarDecl (this is the only possibility for RecordDecls), then pretend the child decls belong to the VarDecl - If it's an EnumDecl proceed as we did previously, i.e., embed it in the enclosing DeclContext. Additionally this fixes a few issues with declaration fragments not consistently including "{ ... }" for anonymous TagDecls. To make testing these additions easier this patch fixes some text declaration fragments merging issues and updates tests accordingly. rdar://121436298
599 lines
20 KiB
Objective-C
599 lines
20 KiB
Objective-C
// RUN: rm -rf %t
|
|
// RUN: %clang_cc1 -extract-api --pretty-sgf --emit-sgf-symbol-labels-for-testing \
|
|
// RUN: -fblocks -triple arm64-apple-macosx -x objective-c-header %s -o %t/output.symbols.json -verify
|
|
|
|
@interface Foo
|
|
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix NOPARAM
|
|
-(void)methodBlockNoParam:(void (^)())block;
|
|
// NOPARAM-LABEL: "!testLabel": "c:objc(cs)Foo(im)methodBlockNoParam:"
|
|
// NOPARAM: "declarationFragments": [
|
|
// NOPARAM-NEXT: {
|
|
// NOPARAM-NEXT: "kind": "text",
|
|
// NOPARAM-NEXT: "spelling": "- ("
|
|
// NOPARAM-NEXT: },
|
|
// NOPARAM-NEXT: {
|
|
// NOPARAM-NEXT: "kind": "typeIdentifier",
|
|
// NOPARAM-NEXT: "preciseIdentifier": "c:v",
|
|
// NOPARAM-NEXT: "spelling": "void"
|
|
// NOPARAM-NEXT: },
|
|
// NOPARAM-NEXT: {
|
|
// NOPARAM-NEXT: "kind": "text",
|
|
// NOPARAM-NEXT: "spelling": ") "
|
|
// NOPARAM-NEXT: },
|
|
// NOPARAM-NEXT: {
|
|
// NOPARAM-NEXT: "kind": "identifier",
|
|
// NOPARAM-NEXT: "spelling": "methodBlockNoParam:"
|
|
// NOPARAM-NEXT: },
|
|
// NOPARAM-NEXT: {
|
|
// NOPARAM-NEXT: "kind": "text",
|
|
// NOPARAM-NEXT: "spelling": "("
|
|
// NOPARAM-NEXT: },
|
|
// NOPARAM-NEXT: {
|
|
// NOPARAM-NEXT: "kind": "typeIdentifier",
|
|
// NOPARAM-NEXT: "preciseIdentifier": "c:v",
|
|
// NOPARAM-NEXT: "spelling": "void"
|
|
// NOPARAM-NEXT: },
|
|
// NOPARAM-NEXT: {
|
|
// NOPARAM-NEXT: "kind": "text",
|
|
// NOPARAM-NEXT: "spelling": " (^)()) "
|
|
// NOPARAM-NEXT: },
|
|
// NOPARAM-NEXT: {
|
|
// NOPARAM-NEXT: "kind": "internalParam",
|
|
// NOPARAM-NEXT: "spelling": "block"
|
|
// NOPARAM-NEXT: },
|
|
// NOPARAM-NEXT: {
|
|
// NOPARAM-NEXT: "kind": "text",
|
|
// NOPARAM-NEXT: "spelling": ";"
|
|
// NOPARAM-NEXT: }
|
|
// NOPARAM-NEXT: ],
|
|
// NOPARAM: "functionSignature": {
|
|
// NOPARAM-NEXT: "parameters": [
|
|
// NOPARAM-NEXT: {
|
|
// NOPARAM-NEXT: "declarationFragments": [
|
|
// NOPARAM-NEXT: {
|
|
// NOPARAM-NEXT: "kind": "text",
|
|
// NOPARAM-NEXT: "spelling": "("
|
|
// NOPARAM-NEXT: },
|
|
// NOPARAM-NEXT: {
|
|
// NOPARAM-NEXT: "kind": "typeIdentifier",
|
|
// NOPARAM-NEXT: "preciseIdentifier": "c:v",
|
|
// NOPARAM-NEXT: "spelling": "void"
|
|
// NOPARAM-NEXT: },
|
|
// NOPARAM-NEXT: {
|
|
// NOPARAM-NEXT: "kind": "text",
|
|
// NOPARAM-NEXT: "spelling": " (^)()) "
|
|
// NOPARAM-NEXT: },
|
|
// NOPARAM-NEXT: {
|
|
// NOPARAM-NEXT: "kind": "internalParam",
|
|
// NOPARAM-NEXT: "spelling": "block"
|
|
// NOPARAM-NEXT: }
|
|
// NOPARAM-NEXT: ],
|
|
// NOPARAM-NEXT: "name": "block"
|
|
// NOPARAM-NEXT: }
|
|
// NOPARAM-NEXT: ],
|
|
// NOPARAM-NEXT: "returns": [
|
|
// NOPARAM-NEXT: {
|
|
// NOPARAM-NEXT: "kind": "typeIdentifier",
|
|
// NOPARAM-NEXT: "preciseIdentifier": "c:v",
|
|
// NOPARAM-NEXT: "spelling": "void"
|
|
// NOPARAM-NEXT: }
|
|
// NOPARAM-NEXT: ]
|
|
// NOPARAM-NEXT: }
|
|
|
|
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix PARAM
|
|
-(void)methodBlockWithParam:(int (^)(int foo))block;
|
|
// PARAM-LABEL: "!testLabel": "c:objc(cs)Foo(im)methodBlockWithParam:"
|
|
// PARAM: "declarationFragments": [
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "text",
|
|
// PARAM-NEXT: "spelling": "- ("
|
|
// PARAM-NEXT: },
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "typeIdentifier",
|
|
// PARAM-NEXT: "preciseIdentifier": "c:v",
|
|
// PARAM-NEXT: "spelling": "void"
|
|
// PARAM-NEXT: },
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "text",
|
|
// PARAM-NEXT: "spelling": ") "
|
|
// PARAM-NEXT: },
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "identifier",
|
|
// PARAM-NEXT: "spelling": "methodBlockWithParam:"
|
|
// PARAM-NEXT: },
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "text",
|
|
// PARAM-NEXT: "spelling": "("
|
|
// PARAM-NEXT: },
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "typeIdentifier",
|
|
// PARAM-NEXT: "preciseIdentifier": "c:I",
|
|
// PARAM-NEXT: "spelling": "int"
|
|
// PARAM-NEXT: },
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "text",
|
|
// PARAM-NEXT: "spelling": " (^)("
|
|
// PARAM-NEXT: },
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "typeIdentifier",
|
|
// PARAM-NEXT: "preciseIdentifier": "c:I",
|
|
// PARAM-NEXT: "spelling": "int"
|
|
// PARAM-NEXT: },
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "text",
|
|
// PARAM-NEXT: "spelling": " "
|
|
// PARAM-NEXT: },
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "internalParam",
|
|
// PARAM-NEXT: "spelling": "foo"
|
|
// PARAM-NEXT: },
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "text",
|
|
// PARAM-NEXT: "spelling": ")) "
|
|
// PARAM-NEXT: },
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "internalParam",
|
|
// PARAM-NEXT: "spelling": "block"
|
|
// PARAM-NEXT: },
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "text",
|
|
// PARAM-NEXT: "spelling": ";"
|
|
// PARAM-NEXT: }
|
|
// PARAM-NEXT: ],
|
|
// PARAM: "functionSignature": {
|
|
// PARAM-NEXT: "parameters": [
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "declarationFragments": [
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "text",
|
|
// PARAM-NEXT: "spelling": "("
|
|
// PARAM-NEXT: },
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "typeIdentifier",
|
|
// PARAM-NEXT: "preciseIdentifier": "c:I",
|
|
// PARAM-NEXT: "spelling": "int"
|
|
// PARAM-NEXT: },
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "text",
|
|
// PARAM-NEXT: "spelling": " (^)("
|
|
// PARAM-NEXT: },
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "typeIdentifier",
|
|
// PARAM-NEXT: "preciseIdentifier": "c:I",
|
|
// PARAM-NEXT: "spelling": "int"
|
|
// PARAM-NEXT: },
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "text",
|
|
// PARAM-NEXT: "spelling": " "
|
|
// PARAM-NEXT: },
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "internalParam",
|
|
// PARAM-NEXT: "spelling": "foo"
|
|
// PARAM-NEXT: },
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "text",
|
|
// PARAM-NEXT: "spelling": ")) "
|
|
// PARAM-NEXT: },
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "internalParam",
|
|
// PARAM-NEXT: "spelling": "block"
|
|
// PARAM-NEXT: }
|
|
// PARAM-NEXT: ],
|
|
// PARAM-NEXT: "name": "block"
|
|
// PARAM-NEXT: }
|
|
// PARAM-NEXT: ],
|
|
// PARAM-NEXT: "returns": [
|
|
// PARAM-NEXT: {
|
|
// PARAM-NEXT: "kind": "typeIdentifier",
|
|
// PARAM-NEXT: "preciseIdentifier": "c:v",
|
|
// PARAM-NEXT: "spelling": "void"
|
|
// PARAM-NEXT: }
|
|
// PARAM-NEXT: ]
|
|
// PARAM-NEXT: }
|
|
|
|
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix MULTIPARAM
|
|
-(void)methodBlockWithMultipleParam:(int (^)(int foo, unsigned baz))block;
|
|
// MULTIPARAM-LABEL: "!testLabel": "c:objc(cs)Foo(im)methodBlockWithMultipleParam:"
|
|
// MULTIPARAM: "declarationFragments": [
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "text",
|
|
// MULTIPARAM-NEXT: "spelling": "- ("
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "typeIdentifier",
|
|
// MULTIPARAM-NEXT: "preciseIdentifier": "c:v",
|
|
// MULTIPARAM-NEXT: "spelling": "void"
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "text",
|
|
// MULTIPARAM-NEXT: "spelling": ") "
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "identifier",
|
|
// MULTIPARAM-NEXT: "spelling": "methodBlockWithMultipleParam:"
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "text",
|
|
// MULTIPARAM-NEXT: "spelling": "("
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "typeIdentifier",
|
|
// MULTIPARAM-NEXT: "preciseIdentifier": "c:I",
|
|
// MULTIPARAM-NEXT: "spelling": "int"
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "text",
|
|
// MULTIPARAM-NEXT: "spelling": " (^)("
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "typeIdentifier",
|
|
// MULTIPARAM-NEXT: "preciseIdentifier": "c:I",
|
|
// MULTIPARAM-NEXT: "spelling": "int"
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "text",
|
|
// MULTIPARAM-NEXT: "spelling": " "
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "internalParam",
|
|
// MULTIPARAM-NEXT: "spelling": "foo"
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "text",
|
|
// MULTIPARAM-NEXT: "spelling": ", "
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "typeIdentifier",
|
|
// MULTIPARAM-NEXT: "preciseIdentifier": "c:i",
|
|
// MULTIPARAM-NEXT: "spelling": "unsigned int"
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "text",
|
|
// MULTIPARAM-NEXT: "spelling": " "
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "internalParam",
|
|
// MULTIPARAM-NEXT: "spelling": "baz"
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "text",
|
|
// MULTIPARAM-NEXT: "spelling": ")) "
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "internalParam",
|
|
// MULTIPARAM-NEXT: "spelling": "block"
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "text",
|
|
// MULTIPARAM-NEXT: "spelling": ";"
|
|
// MULTIPARAM-NEXT: }
|
|
// MULTIPARAM-NEXT: ],
|
|
// MULTIPARAM: "functionSignature": {
|
|
// MULTIPARAM-NEXT: "parameters": [
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "declarationFragments": [
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "text",
|
|
// MULTIPARAM-NEXT: "spelling": "("
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "typeIdentifier",
|
|
// MULTIPARAM-NEXT: "preciseIdentifier": "c:I",
|
|
// MULTIPARAM-NEXT: "spelling": "int"
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "text",
|
|
// MULTIPARAM-NEXT: "spelling": " (^)("
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "typeIdentifier",
|
|
// MULTIPARAM-NEXT: "preciseIdentifier": "c:I",
|
|
// MULTIPARAM-NEXT: "spelling": "int"
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "text",
|
|
// MULTIPARAM-NEXT: "spelling": " "
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "internalParam",
|
|
// MULTIPARAM-NEXT: "spelling": "foo"
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "text",
|
|
// MULTIPARAM-NEXT: "spelling": ", "
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "typeIdentifier",
|
|
// MULTIPARAM-NEXT: "preciseIdentifier": "c:i",
|
|
// MULTIPARAM-NEXT: "spelling": "unsigned int"
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "text",
|
|
// MULTIPARAM-NEXT: "spelling": " "
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "internalParam",
|
|
// MULTIPARAM-NEXT: "spelling": "baz"
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "text",
|
|
// MULTIPARAM-NEXT: "spelling": ")) "
|
|
// MULTIPARAM-NEXT: },
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "internalParam",
|
|
// MULTIPARAM-NEXT: "spelling": "block"
|
|
// MULTIPARAM-NEXT: }
|
|
// MULTIPARAM-NEXT: ],
|
|
// MULTIPARAM-NEXT: "name": "block"
|
|
// MULTIPARAM-NEXT: }
|
|
// MULTIPARAM-NEXT: ],
|
|
// MULTIPARAM-NEXT: "returns": [
|
|
// MULTIPARAM-NEXT: {
|
|
// MULTIPARAM-NEXT: "kind": "typeIdentifier",
|
|
// MULTIPARAM-NEXT: "preciseIdentifier": "c:v",
|
|
// MULTIPARAM-NEXT: "spelling": "void"
|
|
// MULTIPARAM-NEXT: }
|
|
// MULTIPARAM-NEXT: ]
|
|
// MULTIPARAM-NEXT: },
|
|
|
|
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix VARIADIC
|
|
-(void)methodBlockVariadic:(int (^)(int foo, ...))block;
|
|
// VARIADIC-LABEL: "!testLabel": "c:objc(cs)Foo(im)methodBlockVariadic:"
|
|
// VARIADIC: "declarationFragments": [
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "text",
|
|
// VARIADIC-NEXT: "spelling": "- ("
|
|
// VARIADIC-NEXT: },
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "typeIdentifier",
|
|
// VARIADIC-NEXT: "preciseIdentifier": "c:v",
|
|
// VARIADIC-NEXT: "spelling": "void"
|
|
// VARIADIC-NEXT: },
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "text",
|
|
// VARIADIC-NEXT: "spelling": ") "
|
|
// VARIADIC-NEXT: },
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "identifier",
|
|
// VARIADIC-NEXT: "spelling": "methodBlockVariadic:"
|
|
// VARIADIC-NEXT: },
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "text",
|
|
// VARIADIC-NEXT: "spelling": "("
|
|
// VARIADIC-NEXT: },
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "typeIdentifier",
|
|
// VARIADIC-NEXT: "preciseIdentifier": "c:I",
|
|
// VARIADIC-NEXT: "spelling": "int"
|
|
// VARIADIC-NEXT: },
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "text",
|
|
// VARIADIC-NEXT: "spelling": " (^)("
|
|
// VARIADIC-NEXT: },
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "typeIdentifier",
|
|
// VARIADIC-NEXT: "preciseIdentifier": "c:I",
|
|
// VARIADIC-NEXT: "spelling": "int"
|
|
// VARIADIC-NEXT: },
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "text",
|
|
// VARIADIC-NEXT: "spelling": " "
|
|
// VARIADIC-NEXT: },
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "internalParam",
|
|
// VARIADIC-NEXT: "spelling": "foo"
|
|
// VARIADIC-NEXT: },
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "text",
|
|
// VARIADIC-NEXT: "spelling": ", ...)) "
|
|
// VARIADIC-NEXT: },
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "internalParam",
|
|
// VARIADIC-NEXT: "spelling": "block"
|
|
// VARIADIC-NEXT: },
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "text",
|
|
// VARIADIC-NEXT: "spelling": ";"
|
|
// VARIADIC-NEXT: }
|
|
// VARIADIC-NEXT: ],
|
|
// VARIADIC: "functionSignature": {
|
|
// VARIADIC-NEXT: "parameters": [
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "declarationFragments": [
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "text",
|
|
// VARIADIC-NEXT: "spelling": "("
|
|
// VARIADIC-NEXT: },
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "typeIdentifier",
|
|
// VARIADIC-NEXT: "preciseIdentifier": "c:I",
|
|
// VARIADIC-NEXT: "spelling": "int"
|
|
// VARIADIC-NEXT: },
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "text",
|
|
// VARIADIC-NEXT: "spelling": " (^)("
|
|
// VARIADIC-NEXT: },
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "typeIdentifier",
|
|
// VARIADIC-NEXT: "preciseIdentifier": "c:I",
|
|
// VARIADIC-NEXT: "spelling": "int"
|
|
// VARIADIC-NEXT: },
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "text",
|
|
// VARIADIC-NEXT: "spelling": " "
|
|
// VARIADIC-NEXT: },
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "internalParam",
|
|
// VARIADIC-NEXT: "spelling": "foo"
|
|
// VARIADIC-NEXT: },
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "text",
|
|
// VARIADIC-NEXT: "spelling": ", ...)) "
|
|
// VARIADIC-NEXT: },
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "internalParam",
|
|
// VARIADIC-NEXT: "spelling": "block"
|
|
// VARIADIC-NEXT: }
|
|
// VARIADIC-NEXT: ],
|
|
// VARIADIC-NEXT: "name": "block"
|
|
// VARIADIC-NEXT: }
|
|
// VARIADIC-NEXT: ],
|
|
// VARIADIC-NEXT: "returns": [
|
|
// VARIADIC-NEXT: {
|
|
// VARIADIC-NEXT: "kind": "typeIdentifier",
|
|
// VARIADIC-NEXT: "preciseIdentifier": "c:v",
|
|
// VARIADIC-NEXT: "spelling": "void"
|
|
// VARIADIC-NEXT: }
|
|
// VARIADIC-NEXT: ]
|
|
// VARIADIC-NEXT: },
|
|
@end
|
|
|
|
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix FUNC
|
|
void func(int (^arg)(int foo));
|
|
// FUNC-LABEL: "!testLabel": "c:@F@func"
|
|
// FUNC: "declarationFragments": [
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "typeIdentifier",
|
|
// FUNC-NEXT: "preciseIdentifier": "c:v",
|
|
// FUNC-NEXT: "spelling": "void"
|
|
// FUNC-NEXT: },
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "text",
|
|
// FUNC-NEXT: "spelling": " "
|
|
// FUNC-NEXT: },
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "identifier",
|
|
// FUNC-NEXT: "spelling": "func"
|
|
// FUNC-NEXT: },
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "text",
|
|
// FUNC-NEXT: "spelling": "("
|
|
// FUNC-NEXT: },
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "typeIdentifier",
|
|
// FUNC-NEXT: "preciseIdentifier": "c:I",
|
|
// FUNC-NEXT: "spelling": "int"
|
|
// FUNC-NEXT: },
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "text",
|
|
// FUNC-NEXT: "spelling": " (^"
|
|
// FUNC-NEXT: },
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "internalParam",
|
|
// FUNC-NEXT: "spelling": "arg"
|
|
// FUNC-NEXT: },
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "text",
|
|
// FUNC-NEXT: "spelling": ")("
|
|
// FUNC-NEXT: },
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "typeIdentifier",
|
|
// FUNC-NEXT: "preciseIdentifier": "c:I",
|
|
// FUNC-NEXT: "spelling": "int"
|
|
// FUNC-NEXT: },
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "text",
|
|
// FUNC-NEXT: "spelling": " "
|
|
// FUNC-NEXT: },
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "internalParam",
|
|
// FUNC-NEXT: "spelling": "foo"
|
|
// FUNC-NEXT: },
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "text",
|
|
// FUNC-NEXT: "spelling": "));"
|
|
// FUNC-NEXT: }
|
|
// FUNC-NEXT: ],
|
|
// FUNC: "functionSignature": {
|
|
// FUNC-NEXT: "parameters": [
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "declarationFragments": [
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "typeIdentifier",
|
|
// FUNC-NEXT: "preciseIdentifier": "c:I",
|
|
// FUNC-NEXT: "spelling": "int"
|
|
// FUNC-NEXT: },
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "text",
|
|
// FUNC-NEXT: "spelling": " (^"
|
|
// FUNC-NEXT: },
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "internalParam",
|
|
// FUNC-NEXT: "spelling": "arg"
|
|
// FUNC-NEXT: },
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "text",
|
|
// FUNC-NEXT: "spelling": ")("
|
|
// FUNC-NEXT: },
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "typeIdentifier",
|
|
// FUNC-NEXT: "preciseIdentifier": "c:I",
|
|
// FUNC-NEXT: "spelling": "int"
|
|
// FUNC-NEXT: },
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "text",
|
|
// FUNC-NEXT: "spelling": " "
|
|
// FUNC-NEXT: },
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "internalParam",
|
|
// FUNC-NEXT: "spelling": "foo"
|
|
// FUNC-NEXT: },
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "text",
|
|
// FUNC-NEXT: "spelling": ")"
|
|
// FUNC-NEXT: }
|
|
// FUNC-NEXT: ],
|
|
// FUNC-NEXT: "name": "arg"
|
|
// FUNC-NEXT: }
|
|
// FUNC-NEXT: ],
|
|
// FUNC-NEXT: "returns": [
|
|
// FUNC-NEXT: {
|
|
// FUNC-NEXT: "kind": "typeIdentifier",
|
|
// FUNC-NEXT: "preciseIdentifier": "c:v",
|
|
// FUNC-NEXT: "spelling": "void"
|
|
// FUNC-NEXT: }
|
|
// FUNC-NEXT: ]
|
|
// FUNC-NEXT: },
|
|
|
|
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix GLOBAL
|
|
int (^global)(int foo);
|
|
// GLOBAL-LABEL: "!testLabel": "c:@global"
|
|
// GLOBAL: "declarationFragments": [
|
|
// GLOBAL-NEXT: {
|
|
// GLOBAL-NEXT: "kind": "typeIdentifier",
|
|
// GLOBAL-NEXT: "preciseIdentifier": "c:I",
|
|
// GLOBAL-NEXT: "spelling": "int"
|
|
// GLOBAL-NEXT: },
|
|
// GLOBAL-NEXT: {
|
|
// GLOBAL-NEXT: "kind": "text",
|
|
// GLOBAL-NEXT: "spelling": " (^"
|
|
// GLOBAL-NEXT: },
|
|
// GLOBAL-NEXT: {
|
|
// GLOBAL-NEXT: "kind": "identifier",
|
|
// GLOBAL-NEXT: "spelling": "global"
|
|
// GLOBAL-NEXT: },
|
|
// GLOBAL-NEXT: {
|
|
// GLOBAL-NEXT: "kind": "text",
|
|
// GLOBAL-NEXT: "spelling": ")("
|
|
// GLOBAL-NEXT: },
|
|
// GLOBAL-NEXT: {
|
|
// GLOBAL-NEXT: "kind": "typeIdentifier",
|
|
// GLOBAL-NEXT: "preciseIdentifier": "c:I",
|
|
// GLOBAL-NEXT: "spelling": "int"
|
|
// GLOBAL-NEXT: },
|
|
// GLOBAL-NEXT: {
|
|
// GLOBAL-NEXT: "kind": "text",
|
|
// GLOBAL-NEXT: "spelling": " "
|
|
// GLOBAL-NEXT: },
|
|
// GLOBAL-NEXT: {
|
|
// GLOBAL-NEXT: "kind": "internalParam",
|
|
// GLOBAL-NEXT: "spelling": "foo"
|
|
// GLOBAL-NEXT: },
|
|
// GLOBAL-NEXT: {
|
|
// GLOBAL-NEXT: "kind": "text",
|
|
// GLOBAL-NEXT: "spelling": ");"
|
|
// GLOBAL-NEXT: }
|
|
// GLOBAL-NEXT: ],
|
|
|
|
///expected-no-diagnostics
|