diff options
Diffstat (limited to 'clang/test/ExtractAPI/objc_block.m')
-rw-r--r-- | clang/test/ExtractAPI/objc_block.m | 1567 |
1 files changed, 951 insertions, 616 deletions
diff --git a/clang/test/ExtractAPI/objc_block.m b/clang/test/ExtractAPI/objc_block.m index 4a4335e..a7a4f56 100644 --- a/clang/test/ExtractAPI/objc_block.m +++ b/clang/test/ExtractAPI/objc_block.m @@ -1,630 +1,965 @@ // 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 +// RUN: split-file %s %t +// RUN: sed -e "s@INPUT_DIR@%{/t:regex_replacement}@g" \ +// RUN: %t/reference.output.json.in >> %t/reference.output.json +// RUN: %clang_cc1 -extract-api -fblocks -triple arm64-apple-macosx \ +// RUN: -x objective-c-header %t/input.h -o %t/output.json -verify +// Generator version is not consistent across test runs, normalize it. +// RUN: sed -e "s@\"generator\": \".*\"@\"generator\": \"?\"@g" \ +// RUN: %t/output.json >> %t/output-normalized.json +// RUN: diff %t/reference.output.json %t/output-normalized.json + +//--- input.h @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": "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": "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": "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": "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": "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": "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": "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": "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 + +//--- reference.output.json.in +{ + "metadata": { + "formatVersion": { + "major": 0, + "minor": 5, + "patch": 3 + }, + "generator": "?" + }, + "module": { + "name": "", + "platform": { + "architecture": "arm64", + "operatingSystem": { + "minimumVersion": { + "major": 11, + "minor": 0, + "patch": 0 + }, + "name": "macosx" + }, + "vendor": "apple" + } + }, + "relationships": [ + { + "kind": "memberOf", + "source": "c:objc(cs)Foo(im)methodBlockNoParam:", + "target": "c:objc(cs)Foo", + "targetFallback": "Foo" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)Foo(im)methodBlockWithParam:", + "target": "c:objc(cs)Foo", + "targetFallback": "Foo" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)Foo(im)methodBlockWithMultipleParam:", + "target": "c:objc(cs)Foo", + "targetFallback": "Foo" + }, + { + "kind": "memberOf", + "source": "c:objc(cs)Foo(im)methodBlockVariadic:", + "target": "c:objc(cs)Foo", + "targetFallback": "Foo" + } + ], + "symbols": [ + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "identifier", + "spelling": "global" + }, + { + "kind": "text", + "spelling": ")(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "foo" + }, + { + "kind": "text", + "spelling": ");" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:@global" + }, + "kind": { + "displayName": "Global Variable", + "identifier": "objective-c.var" + }, + "location": { + "position": { + "character": 6, + "line": 9 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "global" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "global" + } + ], + "title": "global" + }, + "pathComponents": [ + "global" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "func" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "internalParam", + "spelling": "arg" + }, + { + "kind": "text", + "spelling": ")(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "foo" + }, + { + "kind": "text", + "spelling": "));" + } + ], + "functionSignature": { + "parameters": [ + { + "declarationFragments": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "internalParam", + "spelling": "arg" + }, + { + "kind": "text", + "spelling": ")(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "foo" + }, + { + "kind": "text", + "spelling": ")" + } + ], + "name": "arg" + } + ], + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:@F@func" + }, + "kind": { + "displayName": "Function", + "identifier": "objective-c.func" + }, + "location": { + "position": { + "character": 5, + "line": 7 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "func" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "func" + } + ], + "title": "func" + }, + "pathComponents": [ + "func" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "keyword", + "spelling": "@interface" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "identifier", + "spelling": "Foo" + } + ], + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Foo" + }, + "kind": { + "displayName": "Class", + "identifier": "objective-c.class" + }, + "location": { + "position": { + "character": 11, + "line": 0 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "Foo" + } + ], + "subHeading": [ + { + "kind": "identifier", + "spelling": "Foo" + } + ], + "title": "Foo" + }, + "pathComponents": [ + "Foo" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "text", + "spelling": "- (" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "identifier", + "spelling": "methodBlockNoParam:" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "text", + "spelling": ")()) " + }, + { + "kind": "internalParam", + "spelling": "block" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "parameters": [ + { + "declarationFragments": [ + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "text", + "spelling": ")()) " + }, + { + "kind": "internalParam", + "spelling": "block" + } + ], + "name": "block" + } + ], + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Foo(im)methodBlockNoParam:" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "objective-c.method" + }, + "location": { + "position": { + "character": 0, + "line": 1 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "methodBlockNoParam:" + } + ], + "subHeading": [ + { + "kind": "text", + "spelling": "- " + }, + { + "kind": "identifier", + "spelling": "methodBlockNoParam:" + } + ], + "title": "methodBlockNoParam:" + }, + "pathComponents": [ + "Foo", + "methodBlockNoParam:" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "text", + "spelling": "- (" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "identifier", + "spelling": "methodBlockWithParam:" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "text", + "spelling": ")(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "foo" + }, + { + "kind": "text", + "spelling": ")) " + }, + { + "kind": "internalParam", + "spelling": "block" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "parameters": [ + { + "declarationFragments": [ + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "text", + "spelling": ")(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "foo" + }, + { + "kind": "text", + "spelling": ")) " + }, + { + "kind": "internalParam", + "spelling": "block" + } + ], + "name": "block" + } + ], + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Foo(im)methodBlockWithParam:" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "objective-c.method" + }, + "location": { + "position": { + "character": 0, + "line": 2 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "methodBlockWithParam:" + } + ], + "subHeading": [ + { + "kind": "text", + "spelling": "- " + }, + { + "kind": "identifier", + "spelling": "methodBlockWithParam:" + } + ], + "title": "methodBlockWithParam:" + }, + "pathComponents": [ + "Foo", + "methodBlockWithParam:" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "text", + "spelling": "- (" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "identifier", + "spelling": "methodBlockWithMultipleParam:" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "text", + "spelling": ")(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "foo" + }, + { + "kind": "text", + "spelling": ", " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:i", + "spelling": "unsigned int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "baz" + }, + { + "kind": "text", + "spelling": ")) " + }, + { + "kind": "internalParam", + "spelling": "block" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "parameters": [ + { + "declarationFragments": [ + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "text", + "spelling": ")(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "foo" + }, + { + "kind": "text", + "spelling": ", " + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:i", + "spelling": "unsigned int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "baz" + }, + { + "kind": "text", + "spelling": ")) " + }, + { + "kind": "internalParam", + "spelling": "block" + } + ], + "name": "block" + } + ], + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Foo(im)methodBlockWithMultipleParam:" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "objective-c.method" + }, + "location": { + "position": { + "character": 0, + "line": 3 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "methodBlockWithMultipleParam:" + } + ], + "subHeading": [ + { + "kind": "text", + "spelling": "- " + }, + { + "kind": "identifier", + "spelling": "methodBlockWithMultipleParam:" + } + ], + "title": "methodBlockWithMultipleParam:" + }, + "pathComponents": [ + "Foo", + "methodBlockWithMultipleParam:" + ] + }, + { + "accessLevel": "public", + "declarationFragments": [ + { + "kind": "text", + "spelling": "- (" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + }, + { + "kind": "text", + "spelling": ") " + }, + { + "kind": "identifier", + "spelling": "methodBlockVariadic:" + }, + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "text", + "spelling": ")(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "foo" + }, + { + "kind": "text", + "spelling": ", ...)) " + }, + { + "kind": "internalParam", + "spelling": "block" + }, + { + "kind": "text", + "spelling": ";" + } + ], + "functionSignature": { + "parameters": [ + { + "declarationFragments": [ + { + "kind": "text", + "spelling": "(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " (^" + }, + { + "kind": "text", + "spelling": ")(" + }, + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:I", + "spelling": "int" + }, + { + "kind": "text", + "spelling": " " + }, + { + "kind": "internalParam", + "spelling": "foo" + }, + { + "kind": "text", + "spelling": ", ...)) " + }, + { + "kind": "internalParam", + "spelling": "block" + } + ], + "name": "block" + } + ], + "returns": [ + { + "kind": "typeIdentifier", + "preciseIdentifier": "c:v", + "spelling": "void" + } + ] + }, + "identifier": { + "interfaceLanguage": "objective-c", + "precise": "c:objc(cs)Foo(im)methodBlockVariadic:" + }, + "kind": { + "displayName": "Instance Method", + "identifier": "objective-c.method" + }, + "location": { + "position": { + "character": 0, + "line": 4 + }, + "uri": "file://INPUT_DIR/input.h" + }, + "names": { + "navigator": [ + { + "kind": "identifier", + "spelling": "methodBlockVariadic:" + } + ], + "subHeading": [ + { + "kind": "text", + "spelling": "- " + }, + { + "kind": "identifier", + "spelling": "methodBlockVariadic:" + } + ], + "title": "methodBlockVariadic:" + }, + "pathComponents": [ + "Foo", + "methodBlockVariadic:" + ] + } + ] +} |