=======================================
Class field declarations
=======================================
class A {
public readonly int _B;
Int64 D_e_f, g;
Tuple<char, Nullable<int>> z;
}
---
(compilation_unit
(class_declaration
(identifier)
(declaration_list
(field_declaration
(modifier) (modifier)
(variable_declaration
(predefined_type)
(variable_declarator (identifier))))
(field_declaration
(variable_declaration
(identifier)
(variable_declarator (identifier))
(variable_declarator (identifier))))
(field_declaration
(variable_declaration
(generic_name (identifier) (type_argument_list
(predefined_type)
(generic_name (identifier) (type_argument_list (predefined_type)))))
(variable_declarator (identifier)))))))
=======================================
Struct field declarations
=======================================
struct A {
private readonly int c_;
}
---
(compilation_unit
(struct_declaration
(identifier)
(declaration_list
(field_declaration
(modifier) (modifier)
(variable_declaration
(predefined_type)
(variable_declarator (identifier)))))))
=======================================
Class field nullable type
=======================================
class A {
public readonly int? i;
private Byte? b;
}
---
(compilation_unit
(class_declaration
(identifier)
(declaration_list
(field_declaration
(modifier) (modifier)
(variable_declaration
(nullable_type (predefined_type))
(variable_declarator (identifier))))
(field_declaration
(modifier)
(variable_declaration
(nullable_type (identifier))
(variable_declarator (identifier)))))))
=======================================
Class field pointer type
=======================================
class A {
public readonly int* i;
private Byte* b;
}
---
(compilation_unit
(class_declaration
(identifier)
(declaration_list
(field_declaration
(modifier) (modifier)
(variable_declaration
(pointer_type (predefined_type))
(variable_declarator (identifier))))
(field_declaration
(modifier)
(variable_declaration
(pointer_type (identifier))
(variable_declarator (identifier)))))))
=======================================
Ref readonly
=======================================
class A {
ref readonly Point Origin => ref origin;
}
---
(compilation_unit
(class_declaration
(identifier)
(declaration_list
(property_declaration
(modifier)
(modifier)
(identifier)
(identifier)
(arrow_expression_clause (ref_expression (identifier)))))))
=======================================
Nullable reference types
=======================================
class A {
string? a;
A? a;
}
---
(compilation_unit
(class_declaration
(identifier)
(declaration_list
(field_declaration
(variable_declaration
(nullable_type (predefined_type))
(variable_declarator (identifier))))
(field_declaration
(variable_declaration
(nullable_type (identifier))
(variable_declarator (identifier)))))))
=======================================
Tuple types
=======================================
class A {
(int, string str) a;
(B b, C c, D d) a;
}
---
(compilation_unit
(class_declaration
(identifier)
(declaration_list
(field_declaration
(variable_declaration
(tuple_type
(tuple_element (predefined_type))
(tuple_element (predefined_type) (identifier)))
(variable_declarator (identifier))))
(field_declaration
(variable_declaration
(tuple_type
(tuple_element (identifier) (identifier))
(tuple_element (identifier) (identifier))
(tuple_element (identifier) (identifier)))
(variable_declarator (identifier)))))))