================================================================================ Class interface ================================================================================ @interface ClassName @end -------------------------------------------------------------------------------- (translation_unit (class_interface name: (identifier))) ================================================================================ Class interface: inheritance ================================================================================ @interface ClassName: SuperclassName @end -------------------------------------------------------------------------------- (translation_unit (class_interface name: (identifier) (superclass_reference name: (identifier)))) ================================================================================ Class interface: protocol qualifier ================================================================================ @interface ClassName @end @interface ClassName : SuperclassName @end @interface ClassName @end -------------------------------------------------------------------------------- (translation_unit (class_interface name: (identifier) (protocol_qualifiers name: (identifier))) (class_interface name: (identifier) (superclass_reference name: (identifier)) (protocol_qualifiers name: (identifier))) (class_interface name: (identifier) (protocol_qualifiers name: (identifier) name: (identifier)))) ================================================================================ Class interface: ObjectType generic ================================================================================ @interface ViewController > : NSObject @property (nonatomic, strong) NSMutableArray *array; @end @interface SDMemoryCache () { } @end @interface SDMemoryCache : NSCache @end -------------------------------------------------------------------------------- (translation_unit (class_interface name: (identifier) (parameterized_class_type_arguments type: (identifier) (type_descriptor type: (generic_type_specifier class_name: (id) type_reference: (protocol_qualifiers name: (identifier) name: (identifier))))) (superclass_reference name: (identifier)) (protocol_qualifiers name: (identifier)) (property_declaration (property_attributes (nonatomic) (strong)) type: (generic_type_specifier class_name: (type_identifier) type_reference: (protocol_qualifiers name: (identifier))) declarator: (pointer_declarator declarator: (identifier)))) (category_interface name: (identifier) (protocol_qualifiers name: (identifier) name: (identifier))) (class_interface name: (identifier) (parameterized_class_type_arguments type: (identifier) type: (identifier)) (superclass_reference name: (identifier) type_reference: (generic_type_references (type_descriptor type: (type_identifier)) (type_descriptor type: (type_identifier)))) (protocol_qualifiers name: (identifier)))) ================================================================================ Class interface: __GENERICS generic ================================================================================ @interface __GENERICS(NSArray, ObjectType) (BlocksKit) @end @interface __GENERICS(NSDictionary, KeyType, ObjectType) (BlocksKit) @end -------------------------------------------------------------------------------- (translation_unit (category_interface (generics_type_reference name: (identifier) (type_identifier)) category: (identifier)) (category_interface (generics_type_reference name: (identifier) (type_identifier) (type_identifier)) category: (identifier))) ================================================================================ Class interface: superclass type arguments ================================================================================ @interface ClassName : NSSet @end @interface ClassName : NSSet @end -------------------------------------------------------------------------------- (translation_unit (class_interface name: (identifier) (superclass_reference name: (identifier) type_reference: (generic_type_references (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator))))) (class_interface name: (identifier) (superclass_reference name: (identifier) type_reference: (generic_type_references (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)))) (protocol_qualifiers name: (identifier)))) ================================================================================ Class interface: parameterized classes ================================================================================ @interface PC1 : NSObject @end // Parse a type parameter with a bound that terminates in '>>'. @interface PC2> : NSObject @end @interface PC8 : NSObject @end -------------------------------------------------------------------------------- (translation_unit (class_interface name: (identifier) (parameterized_class_type_arguments type: (identifier) type: (identifier) (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator))) (superclass_reference name: (identifier))) (comment) (class_interface name: (identifier) (parameterized_class_type_arguments type: (identifier) (type_descriptor type: (generic_type_specifier class_name: (id) type_reference: (protocol_qualifiers name: (identifier))))) (superclass_reference name: (identifier))) (class_interface name: (identifier) (protocol_qualifiers name: (identifier)) (superclass_reference name: (identifier) type_reference: (generic_type_references (type_descriptor type: (type_identifier)))))) ================================================================================ Class interface: NS_ROOT_CLASS attribute ================================================================================ NS_ROOT_CLASS @interface ClassName @end -------------------------------------------------------------------------------- (translation_unit (class_interface (class_interface_attribute_sepcifier) name: (identifier))) ================================================================================ Class interface: IB_DESIGNABLE attribute ================================================================================ IB_DESIGNABLE @interface ClassName @end -------------------------------------------------------------------------------- (translation_unit (class_interface (class_interface_attribute_sepcifier) name: (identifier))) ================================================================================ Class interface: instance variables ================================================================================ @interface ClassName { type1 iv1; id iv2; NSObject *object; void (^blockName)(void); } @end @interface ClassName { @public NSObject *object; } @end -------------------------------------------------------------------------------- (translation_unit (class_interface name: (identifier) (field_declaration type: (type_identifier) declarator: (field_identifier)) (field_declaration type: (id) declarator: (field_identifier)) (field_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (field_identifier))) (field_declaration type: (primitive_type) declarator: (block_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type)))))) (class_interface name: (identifier) (public) (field_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (field_identifier))))) ================================================================================ Class interface: property primitive type ================================================================================ @interface ClassName @property (readwrite, copy) float number; @end -------------------------------------------------------------------------------- (translation_unit (class_interface name: (identifier) (property_declaration (property_attributes (readwrite) (copy)) type: (primitive_type) declarator: (identifier)))) ================================================================================ Class interface: property pointer type ================================================================================ @interface ClassName @property (readwrite, copy, nullable) NSObject *object; @end -------------------------------------------------------------------------------- (translation_unit (class_interface name: (identifier) (property_declaration (property_attributes (readwrite) (copy) (nullable)) type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))))) ================================================================================ Class interface: multiple properties declaration in one line ================================================================================ @interface ClassName @property (readwrite, copy, nullable) NSObject *object, *object2; @end -------------------------------------------------------------------------------- (translation_unit (class_interface name: (identifier) (property_declaration (property_attributes (readwrite) (copy) (nullable)) type: (type_identifier) declarator: (pointer_declarator declarator: (identifier)) declarator: (pointer_declarator declarator: (identifier))))) ================================================================================ Class interface: property generic type ================================================================================ @interface ClassName @property (nonatomic, readonly) NSArray *array; @property (nonatomic, readonly) NSArray > *array; @property (readwrite, copy) NSMapTable *map; @property (nonatomic) NSDictionary *> *URLOperations; @property (nonatomic, copy) NSArray *array; @end -------------------------------------------------------------------------------- (translation_unit (class_interface name: (identifier) (property_declaration (property_attributes (nonatomic) (readonly)) type: (generic_type_specifier class_name: (type_identifier) type_reference: (protocol_qualifiers name: (identifier))) declarator: (pointer_declarator declarator: (identifier))) (property_declaration (property_attributes (nonatomic) (readonly)) type: (generic_type_specifier class_name: (type_identifier) type_reference: (generic_type_references (type_descriptor type: (generic_type_specifier class_name: (id) type_reference: (protocol_qualifiers name: (identifier)))))) declarator: (pointer_declarator declarator: (identifier))) (property_declaration (property_attributes (readwrite) (copy)) type: (generic_type_specifier class_name: (type_identifier) type_reference: (generic_type_references (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)))) declarator: (pointer_declarator declarator: (identifier))) (property_declaration (property_attributes (nonatomic)) type: (generic_type_specifier class_name: (type_identifier) type_reference: (generic_type_references (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) (type_descriptor type: (generic_type_specifier class_name: (type_identifier) type_reference: (protocol_qualifiers name: (identifier))) declarator: (abstract_pointer_declarator)))) declarator: (pointer_declarator declarator: (identifier))) (property_declaration (property_attributes (nonatomic) (copy)) type: (generic_type_specifier class_name: (type_identifier) type_reference: (generic_type_references (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator))) type_reference: (protocol_qualifiers name: (identifier) name: (identifier))) declarator: (pointer_declarator declarator: (identifier))))) ================================================================================ Method declaration: keyword selector ================================================================================ @interface ClassName + (void)method:(int)a1 : (int)a2 k2: a3; // - (void)method:(id)one, id two; // FIXME, WON'T FIX @end -------------------------------------------------------------------------------- (translation_unit (class_interface name: (identifier) (method_declaration scope: (class_scope) type: (primitive_type) selector: (keyword_selector (keyword_declarator keyword: (identifier) type: (primitive_type) name: (identifier)) (keyword_declarator type: (primitive_type) name: (identifier)) (keyword_declarator keyword: (identifier) name: (identifier)))) (comment))) ================================================================================ Method declaration: unary selector ================================================================================ @interface ClassName - (void)method; - (nullable id)method; - (nullable id) sel; @end -------------------------------------------------------------------------------- (translation_unit (class_interface name: (identifier) (method_declaration scope: (instance_scope) type: (primitive_type) selector: (identifier)) (method_declaration scope: (instance_scope) return_type: (nullable) type: (id) selector: (identifier)) (method_declaration scope: (instance_scope) return_type: (nullable) type: (generic_type_specifier class_name: (id) type_reference: (protocol_qualifiers name: (identifier))) selector: (identifier)))) ================================================================================ Method declaration: nullable/nonnull attribute selector ================================================================================ @interface ClassName - (nullable id)objectForKey:(nonnull id)key; @end -------------------------------------------------------------------------------- (translation_unit (class_interface name: (identifier) (method_declaration scope: (instance_scope) return_type: (nullable) type: (id) selector: (keyword_selector (keyword_declarator keyword: (identifier) type: (nonnull) type: (id) name: (identifier)))))) ================================================================================ Class implementation ================================================================================ @implementation ClassName @end -------------------------------------------------------------------------------- (translation_unit (class_implementation name: (identifier))) ================================================================================ Class implementation: inheritance ================================================================================ @implementation ClassName: SuperclassName @end -------------------------------------------------------------------------------- (translation_unit (class_implementation name: (identifier) (superclass_reference name: (identifier)))) ================================================================================ Class implementation: synthesize properties ================================================================================ @implementation ClassName @synthesize p1, p2=v2; @end -------------------------------------------------------------------------------- (translation_unit (class_implementation name: (identifier) (synthesize_definition (synthesize_property property: (identifier)) (synthesize_property property: (identifier) instance_variable: (identifier))))) ================================================================================ Class implementation: dynamic properties ================================================================================ @implementation ClassName @dynamic p1, p2; @end -------------------------------------------------------------------------------- (translation_unit (class_implementation name: (identifier) (dynamic_definition property: (identifier) property: (identifier)))) ================================================================================ Class implementation: instance variables ================================================================================ @implementation SDImageIOAnimatedCoder { size_t _width, _height; NSArray *_frames; } @end -------------------------------------------------------------------------------- (translation_unit (class_implementation name: (identifier) (field_declaration type: (primitive_type) declarator: (field_identifier) declarator: (field_identifier)) (field_declaration type: (generic_type_specifier class_name: (type_identifier) type_reference: (generic_type_references (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)))) declarator: (pointer_declarator declarator: (field_identifier))))) ================================================================================ Class implementation: method definition ending with semicolon ================================================================================ @protocol P4 -im1; @end @interface I0 @end @implementation I0 -im1 { return 0; }; @end -------------------------------------------------------------------------------- (translation_unit (protocol_declaration name: (identifier) (method_declaration scope: (instance_scope) selector: (identifier))) (class_interface name: (identifier) (protocol_qualifiers name: (identifier))) (class_implementation name: (identifier) (method_definition scope: (instance_scope) selector: (identifier) body: (compound_statement (return_statement (number_literal)))))) ================================================================================ Instance variables: instance variables visibility specification ================================================================================ @implementation ClassName { @private type1 iv2; @public type2 iv2; @protected type3 iv3; } @end -------------------------------------------------------------------------------- (translation_unit (class_implementation name: (identifier) (private) (field_declaration type: (type_identifier) declarator: (field_identifier)) (public) (field_declaration type: (type_identifier) declarator: (field_identifier)) (protected) (field_declaration type: (type_identifier) declarator: (field_identifier)))) ================================================================================ Method definition: unary selector ================================================================================ @implementation ClassName - (void)sel { return; } @end -------------------------------------------------------------------------------- (translation_unit (class_implementation name: (identifier) (method_definition scope: (instance_scope) type: (primitive_type) selector: (identifier) body: (compound_statement (return_statement))))) ================================================================================ Method definition: keyword selector ================================================================================ @implementation ClassName - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 joiningArgument3:( argumentType3 )argumentName3 { } @end -------------------------------------------------------------------------------- (translation_unit (class_implementation name: (identifier) (method_definition scope: (instance_scope) type: (type_identifier) selector: (keyword_selector (keyword_declarator keyword: (identifier) type: (type_identifier) name: (identifier)) (keyword_declarator keyword: (identifier) type: (type_identifier) name: (identifier)) (keyword_declarator keyword: (identifier) type: (type_identifier) name: (identifier))) body: (compound_statement)))) ================================================================================ Method definition: method without return type and parameter, and self ================================================================================ @implementation ClassName - sel { self; } @end -------------------------------------------------------------------------------- (translation_unit (class_implementation name: (identifier) (method_definition scope: (instance_scope) selector: (identifier) body: (compound_statement (expression_statement (self)))))) ================================================================================ Method definition: compatibility with semicolon ================================================================================ @implementation ClassName - (void)method; { } - (nullable id)method; { } @end -------------------------------------------------------------------------------- (translation_unit (class_implementation name: (identifier) (method_definition scope: (instance_scope) type: (primitive_type) selector: (identifier) body: (compound_statement)) (method_definition scope: (instance_scope) return_type: (nullable) type: (id) selector: (identifier) body: (compound_statement)))) ================================================================================ Category interface ================================================================================ @interface ClassName(Category) @end -------------------------------------------------------------------------------- (translation_unit (category_interface name: (identifier) category: (identifier))) ================================================================================ Category interface: anonymous ================================================================================ @interface ClassName() @end -------------------------------------------------------------------------------- (translation_unit (category_interface name: (identifier))) ================================================================================ Category interface: protocol qualifier ================================================================================ @interface ClassName(Category) @end -------------------------------------------------------------------------------- (translation_unit (category_interface name: (identifier) category: (identifier) (protocol_qualifiers name: (identifier) name: (identifier)))) ================================================================================ Category implementation ================================================================================ @implementation ClassName(Category) @end -------------------------------------------------------------------------------- (translation_unit (category_implementation name: (identifier) category: (identifier))) ================================================================================ Protocol declaration: inheritance ================================================================================ @protocol Protocol @end -------------------------------------------------------------------------------- (translation_unit (protocol_declaration name: (identifier) (protocol_qualifiers name: (identifier) name: (identifier)))) ================================================================================ Protocol forward declaration ================================================================================ @protocol ProtocolName1; @protocol ProtocolName1, ProtocolName2; @protocol ProtocolName @end -------------------------------------------------------------------------------- (translation_unit (protocol_forward_declaration name: (identifier)) (protocol_forward_declaration name: (identifier) name: (identifier)) (protocol_declaration name: (identifier))) ================================================================================ Class forward declaration ================================================================================ @class Class1, Class2; @class RACSubject; @class RACSignal<__covariant ValueType>; @class RLMObject, RLMResults; -------------------------------------------------------------------------------- (translation_unit (class_forward_declaration name: (identifier) name: (identifier)) (class_forward_declaration name: (identifier) (protocol_qualifiers name: (identifier))) (class_forward_declaration name: (identifier) (parameterized_class_type_arguments type: (identifier))) (class_forward_declaration name: (identifier) name: (identifier) (protocol_qualifiers name: (identifier)))) ================================================================================ FOUNDATION_EXPORT global declaration ================================================================================ FOUNDATION_EXPORT void func(tr); FOUNDATION_EXPORT SDWebImageContextOption _Nonnull const SDWebImageContextCustomManager; FOUNDATION_EXPORT CGContextRef __nullable SDGraphicsGetCurrentContext(void) CF_RETURNS_NOT_RETAINED; UIKIT_EXTERN NSNotificationName const Notification; CG_EXTERN CGFloat const FSCalendarStandardHeaderHeight; -------------------------------------------------------------------------------- (translation_unit (declaration (storage_class_specifier) type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier))))) (declaration (storage_class_specifier) type: (type_identifier) (type_qualifier) (type_qualifier) declarator: (identifier)) (declaration (storage_class_specifier) type: (type_identifier) (type_qualifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type))) (attribute_specifier (method_attribute_specifier)))) (declaration (storage_class_specifier) type: (type_identifier) (type_qualifier) declarator: (identifier)) (declaration (storage_class_specifier) type: (type_identifier) (type_qualifier) declarator: (identifier)))