Files
codeql/swift/ql/lib/swift.dbscheme
Paolo Tranquilli a131966066 Swift: make SuccessfullyExtractedFiles.ql more precise
This is done by adding a `isSuccessfullyExtracted` predicate that is
filled for primary files at the very end of the extractor invocation if
the frontend was performed successfully. If for example the extractor
crashes this will therefore not be filled.

The upgrade script is written so that `SuccessfullyExtractedFiles.ql`
on an upgraded script will give exactly the same results as before it.
2023-03-20 08:34:34 +01:00

2602 lines
49 KiB
Plaintext

// generated by codegen/codegen.py
// from prefix.dbscheme
/**
* The source location of the snapshot.
*/
sourceLocationPrefix(
string prefix: string ref
);
// from schema.py
@element =
@callable
| @file
| @generic_context
| @locatable
| @location
| @type
;
#keyset[id]
element_is_unknown(
int id: @element ref
);
@callable =
@abstract_closure_expr
| @abstract_function_decl
;
#keyset[id]
callable_names(
int id: @callable ref,
string name: string ref
);
#keyset[id]
callable_self_params(
int id: @callable ref,
int self_param: @param_decl_or_none ref
);
#keyset[id, index]
callable_params(
int id: @callable ref,
int index: int ref,
int param: @param_decl_or_none ref
);
#keyset[id]
callable_bodies(
int id: @callable ref,
int body: @brace_stmt_or_none ref
);
#keyset[id, index]
callable_captures(
int id: @callable ref,
int index: int ref,
int capture: @captured_decl_or_none ref
);
@file =
@db_file
;
#keyset[id]
files(
int id: @file ref,
string name: string ref
);
#keyset[id]
file_is_successfully_extracted(
int id: @file ref
);
@locatable =
@argument
| @ast_node
| @comment
| @diagnostics
| @error_element
;
#keyset[id]
locatable_locations(
int id: @locatable ref,
int location: @location_or_none ref
);
@location =
@db_location
;
#keyset[id]
locations(
int id: @location ref,
int file: @file_or_none ref,
int start_line: int ref,
int start_column: int ref,
int end_line: int ref,
int end_column: int ref
);
@ast_node =
@availability_info
| @availability_spec
| @case_label_item
| @condition_element
| @decl
| @expr
| @pattern
| @stmt
| @stmt_condition
| @type_repr
;
comments(
unique int id: @comment,
string text: string ref
);
db_files(
unique int id: @db_file
);
db_locations(
unique int id: @db_location
);
diagnostics(
unique int id: @diagnostics,
string text: string ref,
int kind: int ref
);
@error_element =
@error_expr
| @error_type
| @overloaded_decl_ref_expr
| @unresolved_decl_ref_expr
| @unresolved_dot_expr
| @unresolved_member_chain_result_expr
| @unresolved_member_expr
| @unresolved_pattern_expr
| @unresolved_specialize_expr
| @unresolved_type
| @unresolved_type_conversion_expr
| @unspecified_element
;
availability_infos(
unique int id: @availability_info
);
#keyset[id]
availability_info_is_unavailable(
int id: @availability_info ref
);
#keyset[id, index]
availability_info_specs(
int id: @availability_info ref,
int index: int ref,
int spec: @availability_spec_or_none ref
);
@availability_spec =
@other_availability_spec
| @platform_version_availability_spec
;
unspecified_elements(
unique int id: @unspecified_element,
string property: string ref,
string error: string ref
);
#keyset[id]
unspecified_element_parents(
int id: @unspecified_element ref,
int parent: @element ref
);
#keyset[id]
unspecified_element_indices(
int id: @unspecified_element ref,
int index: int ref
);
other_availability_specs(
unique int id: @other_availability_spec
);
platform_version_availability_specs(
unique int id: @platform_version_availability_spec,
string platform: string ref,
string version: string ref
);
@decl =
@captured_decl
| @enum_case_decl
| @extension_decl
| @if_config_decl
| @import_decl
| @missing_member_decl
| @operator_decl
| @pattern_binding_decl
| @pound_diagnostic_decl
| @precedence_group_decl
| @top_level_code_decl
| @value_decl
;
#keyset[id]
decls( //dir=decl
int id: @decl ref,
int module: @module_decl_or_none ref
);
#keyset[id, index]
decl_members( //dir=decl
int id: @decl ref,
int index: int ref,
int member: @decl_or_none ref
);
@generic_context =
@abstract_function_decl
| @extension_decl
| @generic_type_decl
| @subscript_decl
;
#keyset[id, index]
generic_context_generic_type_params( //dir=decl
int id: @generic_context ref,
int index: int ref,
int generic_type_param: @generic_type_param_decl_or_none ref
);
captured_decls( //dir=decl
unique int id: @captured_decl,
int decl: @value_decl_or_none ref
);
#keyset[id]
captured_decl_is_direct( //dir=decl
int id: @captured_decl ref
);
#keyset[id]
captured_decl_is_escaping( //dir=decl
int id: @captured_decl ref
);
enum_case_decls( //dir=decl
unique int id: @enum_case_decl
);
#keyset[id, index]
enum_case_decl_elements( //dir=decl
int id: @enum_case_decl ref,
int index: int ref,
int element: @enum_element_decl_or_none ref
);
extension_decls( //dir=decl
unique int id: @extension_decl,
int extended_type_decl: @nominal_type_decl_or_none ref
);
#keyset[id, index]
extension_decl_protocols( //dir=decl
int id: @extension_decl ref,
int index: int ref,
int protocol: @protocol_decl_or_none ref
);
if_config_decls( //dir=decl
unique int id: @if_config_decl
);
#keyset[id, index]
if_config_decl_active_elements( //dir=decl
int id: @if_config_decl ref,
int index: int ref,
int active_element: @ast_node_or_none ref
);
import_decls( //dir=decl
unique int id: @import_decl
);
#keyset[id]
import_decl_is_exported( //dir=decl
int id: @import_decl ref
);
#keyset[id]
import_decl_imported_modules( //dir=decl
int id: @import_decl ref,
int imported_module: @module_decl_or_none ref
);
#keyset[id, index]
import_decl_declarations( //dir=decl
int id: @import_decl ref,
int index: int ref,
int declaration: @value_decl_or_none ref
);
missing_member_decls( //dir=decl
unique int id: @missing_member_decl,
string name: string ref
);
@operator_decl =
@infix_operator_decl
| @postfix_operator_decl
| @prefix_operator_decl
;
#keyset[id]
operator_decls( //dir=decl
int id: @operator_decl ref,
string name: string ref
);
pattern_binding_decls( //dir=decl
unique int id: @pattern_binding_decl
);
#keyset[id, index]
pattern_binding_decl_inits( //dir=decl
int id: @pattern_binding_decl ref,
int index: int ref,
int init: @expr_or_none ref
);
#keyset[id, index]
pattern_binding_decl_patterns( //dir=decl
int id: @pattern_binding_decl ref,
int index: int ref,
int pattern: @pattern_or_none ref
);
pound_diagnostic_decls( //dir=decl
unique int id: @pound_diagnostic_decl,
int kind: int ref,
int message: @string_literal_expr_or_none ref
);
precedence_group_decls( //dir=decl
unique int id: @precedence_group_decl
);
top_level_code_decls( //dir=decl
unique int id: @top_level_code_decl,
int body: @brace_stmt_or_none ref
);
@value_decl =
@abstract_function_decl
| @abstract_storage_decl
| @enum_element_decl
| @type_decl
;
#keyset[id]
value_decls( //dir=decl
int id: @value_decl ref,
int interface_type: @type_or_none ref
);
@abstract_function_decl =
@constructor_decl
| @destructor_decl
| @func_decl
;
@abstract_storage_decl =
@subscript_decl
| @var_decl
;
#keyset[id, index]
abstract_storage_decl_accessor_decls( //dir=decl
int id: @abstract_storage_decl ref,
int index: int ref,
int accessor_decl: @accessor_decl_or_none ref
);
enum_element_decls( //dir=decl
unique int id: @enum_element_decl,
string name: string ref
);
#keyset[id, index]
enum_element_decl_params( //dir=decl
int id: @enum_element_decl ref,
int index: int ref,
int param: @param_decl_or_none ref
);
infix_operator_decls( //dir=decl
unique int id: @infix_operator_decl
);
#keyset[id]
infix_operator_decl_precedence_groups( //dir=decl
int id: @infix_operator_decl ref,
int precedence_group: @precedence_group_decl_or_none ref
);
postfix_operator_decls( //dir=decl
unique int id: @postfix_operator_decl
);
prefix_operator_decls( //dir=decl
unique int id: @prefix_operator_decl
);
@type_decl =
@abstract_type_param_decl
| @generic_type_decl
| @module_decl
;
#keyset[id]
type_decls( //dir=decl
int id: @type_decl ref,
string name: string ref
);
#keyset[id, index]
type_decl_base_types( //dir=decl
int id: @type_decl ref,
int index: int ref,
int base_type: @type_or_none ref
);
@abstract_type_param_decl =
@associated_type_decl
| @generic_type_param_decl
;
constructor_decls( //dir=decl
unique int id: @constructor_decl
);
destructor_decls( //dir=decl
unique int id: @destructor_decl
);
@func_decl =
@accessor_decl
| @concrete_func_decl
;
@generic_type_decl =
@nominal_type_decl
| @opaque_type_decl
| @type_alias_decl
;
module_decls( //dir=decl
unique int id: @module_decl
);
#keyset[id]
module_decl_is_builtin_module( //dir=decl
int id: @module_decl ref
);
#keyset[id]
module_decl_is_system_module( //dir=decl
int id: @module_decl ref
);
#keyset[id, index]
module_decl_imported_modules( //dir=decl
int id: @module_decl ref,
int index: int ref,
int imported_module: @module_decl_or_none ref
);
#keyset[id, index]
module_decl_exported_modules( //dir=decl
int id: @module_decl ref,
int index: int ref,
int exported_module: @module_decl_or_none ref
);
subscript_decls( //dir=decl
unique int id: @subscript_decl,
int element_type: @type_or_none ref
);
#keyset[id, index]
subscript_decl_params( //dir=decl
int id: @subscript_decl ref,
int index: int ref,
int param: @param_decl_or_none ref
);
@var_decl =
@concrete_var_decl
| @param_decl
;
#keyset[id]
var_decls( //dir=decl
int id: @var_decl ref,
string name: string ref,
int type_: @type_or_none ref
);
#keyset[id]
var_decl_attached_property_wrapper_types( //dir=decl
int id: @var_decl ref,
int attached_property_wrapper_type: @type_or_none ref
);
#keyset[id]
var_decl_parent_patterns( //dir=decl
int id: @var_decl ref,
int parent_pattern: @pattern_or_none ref
);
#keyset[id]
var_decl_parent_initializers( //dir=decl
int id: @var_decl ref,
int parent_initializer: @expr_or_none ref
);
#keyset[id]
var_decl_property_wrapper_backing_var_bindings( //dir=decl
int id: @var_decl ref,
int property_wrapper_backing_var_binding: @pattern_binding_decl_or_none ref
);
#keyset[id]
var_decl_property_wrapper_backing_vars( //dir=decl
int id: @var_decl ref,
int property_wrapper_backing_var: @var_decl_or_none ref
);
#keyset[id]
var_decl_property_wrapper_projection_var_bindings( //dir=decl
int id: @var_decl ref,
int property_wrapper_projection_var_binding: @pattern_binding_decl_or_none ref
);
#keyset[id]
var_decl_property_wrapper_projection_vars( //dir=decl
int id: @var_decl ref,
int property_wrapper_projection_var: @var_decl_or_none ref
);
accessor_decls( //dir=decl
unique int id: @accessor_decl
);
#keyset[id]
accessor_decl_is_getter( //dir=decl
int id: @accessor_decl ref
);
#keyset[id]
accessor_decl_is_setter( //dir=decl
int id: @accessor_decl ref
);
#keyset[id]
accessor_decl_is_will_set( //dir=decl
int id: @accessor_decl ref
);
#keyset[id]
accessor_decl_is_did_set( //dir=decl
int id: @accessor_decl ref
);
#keyset[id]
accessor_decl_is_read( //dir=decl
int id: @accessor_decl ref
);
#keyset[id]
accessor_decl_is_modify( //dir=decl
int id: @accessor_decl ref
);
#keyset[id]
accessor_decl_is_unsafe_address( //dir=decl
int id: @accessor_decl ref
);
#keyset[id]
accessor_decl_is_unsafe_mutable_address( //dir=decl
int id: @accessor_decl ref
);
associated_type_decls( //dir=decl
unique int id: @associated_type_decl
);
concrete_func_decls( //dir=decl
unique int id: @concrete_func_decl
);
concrete_var_decls( //dir=decl
unique int id: @concrete_var_decl,
int introducer_int: int ref
);
generic_type_param_decls( //dir=decl
unique int id: @generic_type_param_decl
);
@nominal_type_decl =
@class_decl
| @enum_decl
| @protocol_decl
| @struct_decl
;
#keyset[id]
nominal_type_decls( //dir=decl
int id: @nominal_type_decl ref,
int type_: @type_or_none ref
);
opaque_type_decls( //dir=decl
unique int id: @opaque_type_decl,
int naming_declaration: @value_decl_or_none ref
);
#keyset[id, index]
opaque_type_decl_opaque_generic_params( //dir=decl
int id: @opaque_type_decl ref,
int index: int ref,
int opaque_generic_param: @generic_type_param_type_or_none ref
);
param_decls( //dir=decl
unique int id: @param_decl
);
#keyset[id]
param_decl_is_inout( //dir=decl
int id: @param_decl ref
);
#keyset[id]
param_decl_property_wrapper_local_wrapped_var_bindings( //dir=decl
int id: @param_decl ref,
int property_wrapper_local_wrapped_var_binding: @pattern_binding_decl_or_none ref
);
#keyset[id]
param_decl_property_wrapper_local_wrapped_vars( //dir=decl
int id: @param_decl ref,
int property_wrapper_local_wrapped_var: @var_decl_or_none ref
);
type_alias_decls( //dir=decl
unique int id: @type_alias_decl
);
class_decls( //dir=decl
unique int id: @class_decl
);
enum_decls( //dir=decl
unique int id: @enum_decl
);
protocol_decls( //dir=decl
unique int id: @protocol_decl
);
struct_decls( //dir=decl
unique int id: @struct_decl
);
arguments( //dir=expr
unique int id: @argument,
string label: string ref,
int expr: @expr_or_none ref
);
@expr =
@abstract_closure_expr
| @any_try_expr
| @applied_property_wrapper_expr
| @apply_expr
| @assign_expr
| @bind_optional_expr
| @capture_list_expr
| @collection_expr
| @decl_ref_expr
| @default_argument_expr
| @discard_assignment_expr
| @dot_syntax_base_ignored_expr
| @dynamic_type_expr
| @enum_is_case_expr
| @error_expr
| @explicit_cast_expr
| @force_value_expr
| @identity_expr
| @if_expr
| @implicit_conversion_expr
| @in_out_expr
| @key_path_application_expr
| @key_path_dot_expr
| @key_path_expr
| @lazy_initializer_expr
| @literal_expr
| @lookup_expr
| @make_temporarily_escapable_expr
| @obj_c_selector_expr
| @one_way_expr
| @opaque_value_expr
| @open_existential_expr
| @optional_evaluation_expr
| @other_constructor_decl_ref_expr
| @overloaded_decl_ref_expr
| @property_wrapper_value_placeholder_expr
| @rebind_self_in_constructor_expr
| @sequence_expr
| @super_ref_expr
| @tap_expr
| @tuple_element_expr
| @tuple_expr
| @type_expr
| @unresolved_decl_ref_expr
| @unresolved_dot_expr
| @unresolved_member_expr
| @unresolved_pattern_expr
| @unresolved_specialize_expr
| @vararg_expansion_expr
;
#keyset[id]
expr_types( //dir=expr
int id: @expr ref,
int type_: @type_or_none ref
);
@abstract_closure_expr =
@auto_closure_expr
| @closure_expr
;
@any_try_expr =
@force_try_expr
| @optional_try_expr
| @try_expr
;
#keyset[id]
any_try_exprs( //dir=expr
int id: @any_try_expr ref,
int sub_expr: @expr_or_none ref
);
applied_property_wrapper_exprs( //dir=expr
unique int id: @applied_property_wrapper_expr,
int kind: int ref,
int value: @expr_or_none ref,
int param: @param_decl_or_none ref
);
@apply_expr =
@binary_expr
| @call_expr
| @postfix_unary_expr
| @prefix_unary_expr
| @self_apply_expr
;
#keyset[id]
apply_exprs( //dir=expr
int id: @apply_expr ref,
int function: @expr_or_none ref
);
#keyset[id, index]
apply_expr_arguments( //dir=expr
int id: @apply_expr ref,
int index: int ref,
int argument: @argument_or_none ref
);
assign_exprs( //dir=expr
unique int id: @assign_expr,
int dest: @expr_or_none ref,
int source: @expr_or_none ref
);
bind_optional_exprs( //dir=expr
unique int id: @bind_optional_expr,
int sub_expr: @expr_or_none ref
);
capture_list_exprs( //dir=expr
unique int id: @capture_list_expr,
int closure_body: @closure_expr_or_none ref
);
#keyset[id, index]
capture_list_expr_binding_decls( //dir=expr
int id: @capture_list_expr ref,
int index: int ref,
int binding_decl: @pattern_binding_decl_or_none ref
);
@collection_expr =
@array_expr
| @dictionary_expr
;
decl_ref_exprs( //dir=expr
unique int id: @decl_ref_expr,
int decl: @decl_or_none ref
);
#keyset[id, index]
decl_ref_expr_replacement_types( //dir=expr
int id: @decl_ref_expr ref,
int index: int ref,
int replacement_type: @type_or_none ref
);
#keyset[id]
decl_ref_expr_has_direct_to_storage_semantics( //dir=expr
int id: @decl_ref_expr ref
);
#keyset[id]
decl_ref_expr_has_direct_to_implementation_semantics( //dir=expr
int id: @decl_ref_expr ref
);
#keyset[id]
decl_ref_expr_has_ordinary_semantics( //dir=expr
int id: @decl_ref_expr ref
);
#keyset[id]
decl_ref_expr_has_distributed_thunk_semantics( //dir=expr
int id: @decl_ref_expr ref
);
default_argument_exprs( //dir=expr
unique int id: @default_argument_expr,
int param_decl: @param_decl_or_none ref,
int param_index: int ref
);
#keyset[id]
default_argument_expr_caller_side_defaults( //dir=expr
int id: @default_argument_expr ref,
int caller_side_default: @expr_or_none ref
);
discard_assignment_exprs( //dir=expr
unique int id: @discard_assignment_expr
);
dot_syntax_base_ignored_exprs( //dir=expr
unique int id: @dot_syntax_base_ignored_expr,
int qualifier: @expr_or_none ref,
int sub_expr: @expr_or_none ref
);
dynamic_type_exprs( //dir=expr
unique int id: @dynamic_type_expr,
int base: @expr_or_none ref
);
enum_is_case_exprs( //dir=expr
unique int id: @enum_is_case_expr,
int sub_expr: @expr_or_none ref,
int element: @enum_element_decl_or_none ref
);
error_exprs( //dir=expr
unique int id: @error_expr
);
@explicit_cast_expr =
@checked_cast_expr
| @coerce_expr
;
#keyset[id]
explicit_cast_exprs( //dir=expr
int id: @explicit_cast_expr ref,
int sub_expr: @expr_or_none ref
);
force_value_exprs( //dir=expr
unique int id: @force_value_expr,
int sub_expr: @expr_or_none ref
);
@identity_expr =
@await_expr
| @dot_self_expr
| @paren_expr
| @unresolved_member_chain_result_expr
;
#keyset[id]
identity_exprs( //dir=expr
int id: @identity_expr ref,
int sub_expr: @expr_or_none ref
);
if_exprs( //dir=expr
unique int id: @if_expr,
int condition: @expr_or_none ref,
int then_expr: @expr_or_none ref,
int else_expr: @expr_or_none ref
);
@implicit_conversion_expr =
@abi_safe_conversion_expr
| @any_hashable_erasure_expr
| @archetype_to_super_expr
| @array_to_pointer_expr
| @bridge_from_obj_c_expr
| @bridge_to_obj_c_expr
| @class_metatype_to_object_expr
| @collection_upcast_conversion_expr
| @conditional_bridge_from_obj_c_expr
| @covariant_function_conversion_expr
| @covariant_return_conversion_expr
| @derived_to_base_expr
| @destructure_tuple_expr
| @differentiable_function_expr
| @differentiable_function_extract_original_expr
| @erasure_expr
| @existential_metatype_to_object_expr
| @foreign_object_conversion_expr
| @function_conversion_expr
| @in_out_to_pointer_expr
| @inject_into_optional_expr
| @linear_function_expr
| @linear_function_extract_original_expr
| @linear_to_differentiable_function_expr
| @load_expr
| @metatype_conversion_expr
| @pointer_to_pointer_expr
| @protocol_metatype_to_object_expr
| @string_to_pointer_expr
| @underlying_to_opaque_expr
| @unevaluated_instance_expr
| @unresolved_type_conversion_expr
;
#keyset[id]
implicit_conversion_exprs( //dir=expr
int id: @implicit_conversion_expr ref,
int sub_expr: @expr_or_none ref
);
in_out_exprs( //dir=expr
unique int id: @in_out_expr,
int sub_expr: @expr_or_none ref
);
key_path_application_exprs( //dir=expr
unique int id: @key_path_application_expr,
int base: @expr_or_none ref,
int key_path: @expr_or_none ref
);
key_path_dot_exprs( //dir=expr
unique int id: @key_path_dot_expr
);
key_path_exprs( //dir=expr
unique int id: @key_path_expr
);
#keyset[id]
key_path_expr_roots( //dir=expr
int id: @key_path_expr ref,
int root: @type_repr_or_none ref
);
#keyset[id]
key_path_expr_parsed_paths( //dir=expr
int id: @key_path_expr ref,
int parsed_path: @expr_or_none ref
);
lazy_initializer_exprs( //dir=expr
unique int id: @lazy_initializer_expr,
int sub_expr: @expr_or_none ref
);
@literal_expr =
@builtin_literal_expr
| @interpolated_string_literal_expr
| @nil_literal_expr
| @object_literal_expr
| @regex_literal_expr
;
@lookup_expr =
@dynamic_lookup_expr
| @member_ref_expr
| @subscript_expr
;
#keyset[id]
lookup_exprs( //dir=expr
int id: @lookup_expr ref,
int base: @expr_or_none ref
);
#keyset[id]
lookup_expr_members( //dir=expr
int id: @lookup_expr ref,
int member: @decl_or_none ref
);
make_temporarily_escapable_exprs( //dir=expr
unique int id: @make_temporarily_escapable_expr,
int escaping_closure: @opaque_value_expr_or_none ref,
int nonescaping_closure: @expr_or_none ref,
int sub_expr: @expr_or_none ref
);
obj_c_selector_exprs( //dir=expr
unique int id: @obj_c_selector_expr,
int sub_expr: @expr_or_none ref,
int method: @abstract_function_decl_or_none ref
);
one_way_exprs( //dir=expr
unique int id: @one_way_expr,
int sub_expr: @expr_or_none ref
);
opaque_value_exprs( //dir=expr
unique int id: @opaque_value_expr
);
open_existential_exprs( //dir=expr
unique int id: @open_existential_expr,
int sub_expr: @expr_or_none ref,
int existential: @expr_or_none ref,
int opaque_expr: @opaque_value_expr_or_none ref
);
optional_evaluation_exprs( //dir=expr
unique int id: @optional_evaluation_expr,
int sub_expr: @expr_or_none ref
);
other_constructor_decl_ref_exprs( //dir=expr
unique int id: @other_constructor_decl_ref_expr,
int constructor_decl: @constructor_decl_or_none ref
);
overloaded_decl_ref_exprs( //dir=expr
unique int id: @overloaded_decl_ref_expr
);
#keyset[id, index]
overloaded_decl_ref_expr_possible_declarations( //dir=expr
int id: @overloaded_decl_ref_expr ref,
int index: int ref,
int possible_declaration: @value_decl_or_none ref
);
property_wrapper_value_placeholder_exprs( //dir=expr
unique int id: @property_wrapper_value_placeholder_expr,
int placeholder: @opaque_value_expr_or_none ref
);
#keyset[id]
property_wrapper_value_placeholder_expr_wrapped_values( //dir=expr
int id: @property_wrapper_value_placeholder_expr ref,
int wrapped_value: @expr_or_none ref
);
rebind_self_in_constructor_exprs( //dir=expr
unique int id: @rebind_self_in_constructor_expr,
int sub_expr: @expr_or_none ref,
int self: @var_decl_or_none ref
);
sequence_exprs( //dir=expr
unique int id: @sequence_expr
);
#keyset[id, index]
sequence_expr_elements( //dir=expr
int id: @sequence_expr ref,
int index: int ref,
int element: @expr_or_none ref
);
super_ref_exprs( //dir=expr
unique int id: @super_ref_expr,
int self: @var_decl_or_none ref
);
tap_exprs( //dir=expr
unique int id: @tap_expr,
int body: @brace_stmt_or_none ref,
int var: @var_decl_or_none ref
);
#keyset[id]
tap_expr_sub_exprs( //dir=expr
int id: @tap_expr ref,
int sub_expr: @expr_or_none ref
);
tuple_element_exprs( //dir=expr
unique int id: @tuple_element_expr,
int sub_expr: @expr_or_none ref,
int index: int ref
);
tuple_exprs( //dir=expr
unique int id: @tuple_expr
);
#keyset[id, index]
tuple_expr_elements( //dir=expr
int id: @tuple_expr ref,
int index: int ref,
int element: @expr_or_none ref
);
type_exprs( //dir=expr
unique int id: @type_expr
);
#keyset[id]
type_expr_type_reprs( //dir=expr
int id: @type_expr ref,
int type_repr: @type_repr_or_none ref
);
unresolved_decl_ref_exprs( //dir=expr
unique int id: @unresolved_decl_ref_expr
);
#keyset[id]
unresolved_decl_ref_expr_names( //dir=expr
int id: @unresolved_decl_ref_expr ref,
string name: string ref
);
unresolved_dot_exprs( //dir=expr
unique int id: @unresolved_dot_expr,
int base: @expr_or_none ref,
string name: string ref
);
unresolved_member_exprs( //dir=expr
unique int id: @unresolved_member_expr,
string name: string ref
);
unresolved_pattern_exprs( //dir=expr
unique int id: @unresolved_pattern_expr,
int sub_pattern: @pattern_or_none ref
);
unresolved_specialize_exprs( //dir=expr
unique int id: @unresolved_specialize_expr,
int sub_expr: @expr_or_none ref
);
vararg_expansion_exprs( //dir=expr
unique int id: @vararg_expansion_expr,
int sub_expr: @expr_or_none ref
);
abi_safe_conversion_exprs( //dir=expr
unique int id: @abi_safe_conversion_expr
);
any_hashable_erasure_exprs( //dir=expr
unique int id: @any_hashable_erasure_expr
);
archetype_to_super_exprs( //dir=expr
unique int id: @archetype_to_super_expr
);
array_exprs( //dir=expr
unique int id: @array_expr
);
#keyset[id, index]
array_expr_elements( //dir=expr
int id: @array_expr ref,
int index: int ref,
int element: @expr_or_none ref
);
array_to_pointer_exprs( //dir=expr
unique int id: @array_to_pointer_expr
);
auto_closure_exprs( //dir=expr
unique int id: @auto_closure_expr
);
await_exprs( //dir=expr
unique int id: @await_expr
);
binary_exprs( //dir=expr
unique int id: @binary_expr
);
bridge_from_obj_c_exprs( //dir=expr
unique int id: @bridge_from_obj_c_expr
);
bridge_to_obj_c_exprs( //dir=expr
unique int id: @bridge_to_obj_c_expr
);
@builtin_literal_expr =
@boolean_literal_expr
| @magic_identifier_literal_expr
| @number_literal_expr
| @string_literal_expr
;
call_exprs( //dir=expr
unique int id: @call_expr
);
@checked_cast_expr =
@conditional_checked_cast_expr
| @forced_checked_cast_expr
| @is_expr
;
class_metatype_to_object_exprs( //dir=expr
unique int id: @class_metatype_to_object_expr
);
closure_exprs( //dir=expr
unique int id: @closure_expr
);
coerce_exprs( //dir=expr
unique int id: @coerce_expr
);
collection_upcast_conversion_exprs( //dir=expr
unique int id: @collection_upcast_conversion_expr
);
conditional_bridge_from_obj_c_exprs( //dir=expr
unique int id: @conditional_bridge_from_obj_c_expr
);
covariant_function_conversion_exprs( //dir=expr
unique int id: @covariant_function_conversion_expr
);
covariant_return_conversion_exprs( //dir=expr
unique int id: @covariant_return_conversion_expr
);
derived_to_base_exprs( //dir=expr
unique int id: @derived_to_base_expr
);
destructure_tuple_exprs( //dir=expr
unique int id: @destructure_tuple_expr
);
dictionary_exprs( //dir=expr
unique int id: @dictionary_expr
);
#keyset[id, index]
dictionary_expr_elements( //dir=expr
int id: @dictionary_expr ref,
int index: int ref,
int element: @expr_or_none ref
);
differentiable_function_exprs( //dir=expr
unique int id: @differentiable_function_expr
);
differentiable_function_extract_original_exprs( //dir=expr
unique int id: @differentiable_function_extract_original_expr
);
dot_self_exprs( //dir=expr
unique int id: @dot_self_expr
);
@dynamic_lookup_expr =
@dynamic_member_ref_expr
| @dynamic_subscript_expr
;
erasure_exprs( //dir=expr
unique int id: @erasure_expr
);
existential_metatype_to_object_exprs( //dir=expr
unique int id: @existential_metatype_to_object_expr
);
force_try_exprs( //dir=expr
unique int id: @force_try_expr
);
foreign_object_conversion_exprs( //dir=expr
unique int id: @foreign_object_conversion_expr
);
function_conversion_exprs( //dir=expr
unique int id: @function_conversion_expr
);
in_out_to_pointer_exprs( //dir=expr
unique int id: @in_out_to_pointer_expr
);
inject_into_optional_exprs( //dir=expr
unique int id: @inject_into_optional_expr
);
interpolated_string_literal_exprs( //dir=expr
unique int id: @interpolated_string_literal_expr
);
#keyset[id]
interpolated_string_literal_expr_interpolation_exprs( //dir=expr
int id: @interpolated_string_literal_expr ref,
int interpolation_expr: @opaque_value_expr_or_none ref
);
#keyset[id]
interpolated_string_literal_expr_interpolation_count_exprs( //dir=expr
int id: @interpolated_string_literal_expr ref,
int interpolation_count_expr: @expr_or_none ref
);
#keyset[id]
interpolated_string_literal_expr_literal_capacity_exprs( //dir=expr
int id: @interpolated_string_literal_expr ref,
int literal_capacity_expr: @expr_or_none ref
);
#keyset[id]
interpolated_string_literal_expr_appending_exprs( //dir=expr
int id: @interpolated_string_literal_expr ref,
int appending_expr: @tap_expr_or_none ref
);
linear_function_exprs( //dir=expr
unique int id: @linear_function_expr
);
linear_function_extract_original_exprs( //dir=expr
unique int id: @linear_function_extract_original_expr
);
linear_to_differentiable_function_exprs( //dir=expr
unique int id: @linear_to_differentiable_function_expr
);
load_exprs( //dir=expr
unique int id: @load_expr
);
member_ref_exprs( //dir=expr
unique int id: @member_ref_expr
);
#keyset[id]
member_ref_expr_has_direct_to_storage_semantics( //dir=expr
int id: @member_ref_expr ref
);
#keyset[id]
member_ref_expr_has_direct_to_implementation_semantics( //dir=expr
int id: @member_ref_expr ref
);
#keyset[id]
member_ref_expr_has_ordinary_semantics( //dir=expr
int id: @member_ref_expr ref
);
#keyset[id]
member_ref_expr_has_distributed_thunk_semantics( //dir=expr
int id: @member_ref_expr ref
);
metatype_conversion_exprs( //dir=expr
unique int id: @metatype_conversion_expr
);
nil_literal_exprs( //dir=expr
unique int id: @nil_literal_expr
);
object_literal_exprs( //dir=expr
unique int id: @object_literal_expr,
int kind: int ref
);
#keyset[id, index]
object_literal_expr_arguments( //dir=expr
int id: @object_literal_expr ref,
int index: int ref,
int argument: @argument_or_none ref
);
optional_try_exprs( //dir=expr
unique int id: @optional_try_expr
);
paren_exprs( //dir=expr
unique int id: @paren_expr
);
pointer_to_pointer_exprs( //dir=expr
unique int id: @pointer_to_pointer_expr
);
postfix_unary_exprs( //dir=expr
unique int id: @postfix_unary_expr
);
prefix_unary_exprs( //dir=expr
unique int id: @prefix_unary_expr
);
protocol_metatype_to_object_exprs( //dir=expr
unique int id: @protocol_metatype_to_object_expr
);
regex_literal_exprs( //dir=expr
unique int id: @regex_literal_expr,
string pattern: string ref,
int version: int ref
);
@self_apply_expr =
@constructor_ref_call_expr
| @dot_syntax_call_expr
;
#keyset[id]
self_apply_exprs( //dir=expr
int id: @self_apply_expr ref,
int base: @expr_or_none ref
);
string_to_pointer_exprs( //dir=expr
unique int id: @string_to_pointer_expr
);
subscript_exprs( //dir=expr
unique int id: @subscript_expr
);
#keyset[id, index]
subscript_expr_arguments( //dir=expr
int id: @subscript_expr ref,
int index: int ref,
int argument: @argument_or_none ref
);
#keyset[id]
subscript_expr_has_direct_to_storage_semantics( //dir=expr
int id: @subscript_expr ref
);
#keyset[id]
subscript_expr_has_direct_to_implementation_semantics( //dir=expr
int id: @subscript_expr ref
);
#keyset[id]
subscript_expr_has_ordinary_semantics( //dir=expr
int id: @subscript_expr ref
);
#keyset[id]
subscript_expr_has_distributed_thunk_semantics( //dir=expr
int id: @subscript_expr ref
);
try_exprs( //dir=expr
unique int id: @try_expr
);
underlying_to_opaque_exprs( //dir=expr
unique int id: @underlying_to_opaque_expr
);
unevaluated_instance_exprs( //dir=expr
unique int id: @unevaluated_instance_expr
);
unresolved_member_chain_result_exprs( //dir=expr
unique int id: @unresolved_member_chain_result_expr
);
unresolved_type_conversion_exprs( //dir=expr
unique int id: @unresolved_type_conversion_expr
);
boolean_literal_exprs( //dir=expr
unique int id: @boolean_literal_expr,
boolean value: boolean ref
);
conditional_checked_cast_exprs( //dir=expr
unique int id: @conditional_checked_cast_expr
);
constructor_ref_call_exprs( //dir=expr
unique int id: @constructor_ref_call_expr
);
dot_syntax_call_exprs( //dir=expr
unique int id: @dot_syntax_call_expr
);
dynamic_member_ref_exprs( //dir=expr
unique int id: @dynamic_member_ref_expr
);
dynamic_subscript_exprs( //dir=expr
unique int id: @dynamic_subscript_expr
);
forced_checked_cast_exprs( //dir=expr
unique int id: @forced_checked_cast_expr
);
is_exprs( //dir=expr
unique int id: @is_expr
);
magic_identifier_literal_exprs( //dir=expr
unique int id: @magic_identifier_literal_expr,
string kind: string ref
);
@number_literal_expr =
@float_literal_expr
| @integer_literal_expr
;
string_literal_exprs( //dir=expr
unique int id: @string_literal_expr,
string value: string ref
);
float_literal_exprs( //dir=expr
unique int id: @float_literal_expr,
string string_value: string ref
);
integer_literal_exprs( //dir=expr
unique int id: @integer_literal_expr,
string string_value: string ref
);
@pattern =
@any_pattern
| @binding_pattern
| @bool_pattern
| @enum_element_pattern
| @expr_pattern
| @is_pattern
| @named_pattern
| @optional_some_pattern
| @paren_pattern
| @tuple_pattern
| @typed_pattern
;
any_patterns( //dir=pattern
unique int id: @any_pattern
);
binding_patterns( //dir=pattern
unique int id: @binding_pattern,
int sub_pattern: @pattern_or_none ref
);
bool_patterns( //dir=pattern
unique int id: @bool_pattern,
boolean value: boolean ref
);
enum_element_patterns( //dir=pattern
unique int id: @enum_element_pattern,
int element: @enum_element_decl_or_none ref
);
#keyset[id]
enum_element_pattern_sub_patterns( //dir=pattern
int id: @enum_element_pattern ref,
int sub_pattern: @pattern_or_none ref
);
expr_patterns( //dir=pattern
unique int id: @expr_pattern,
int sub_expr: @expr_or_none ref
);
is_patterns( //dir=pattern
unique int id: @is_pattern
);
#keyset[id]
is_pattern_cast_type_reprs( //dir=pattern
int id: @is_pattern ref,
int cast_type_repr: @type_repr_or_none ref
);
#keyset[id]
is_pattern_sub_patterns( //dir=pattern
int id: @is_pattern ref,
int sub_pattern: @pattern_or_none ref
);
named_patterns( //dir=pattern
unique int id: @named_pattern,
string name: string ref
);
optional_some_patterns( //dir=pattern
unique int id: @optional_some_pattern,
int sub_pattern: @pattern_or_none ref
);
paren_patterns( //dir=pattern
unique int id: @paren_pattern,
int sub_pattern: @pattern_or_none ref
);
tuple_patterns( //dir=pattern
unique int id: @tuple_pattern
);
#keyset[id, index]
tuple_pattern_elements( //dir=pattern
int id: @tuple_pattern ref,
int index: int ref,
int element: @pattern_or_none ref
);
typed_patterns( //dir=pattern
unique int id: @typed_pattern,
int sub_pattern: @pattern_or_none ref
);
#keyset[id]
typed_pattern_type_reprs( //dir=pattern
int id: @typed_pattern ref,
int type_repr: @type_repr_or_none ref
);
case_label_items( //dir=stmt
unique int id: @case_label_item,
int pattern: @pattern_or_none ref
);
#keyset[id]
case_label_item_guards( //dir=stmt
int id: @case_label_item ref,
int guard: @expr_or_none ref
);
condition_elements( //dir=stmt
unique int id: @condition_element
);
#keyset[id]
condition_element_booleans( //dir=stmt
int id: @condition_element ref,
int boolean_: @expr_or_none ref
);
#keyset[id]
condition_element_patterns( //dir=stmt
int id: @condition_element ref,
int pattern: @pattern_or_none ref
);
#keyset[id]
condition_element_initializers( //dir=stmt
int id: @condition_element ref,
int initializer: @expr_or_none ref
);
#keyset[id]
condition_element_availabilities( //dir=stmt
int id: @condition_element ref,
int availability: @availability_info_or_none ref
);
@stmt =
@brace_stmt
| @break_stmt
| @case_stmt
| @continue_stmt
| @defer_stmt
| @fail_stmt
| @fallthrough_stmt
| @labeled_stmt
| @pound_assert_stmt
| @return_stmt
| @throw_stmt
| @yield_stmt
;
stmt_conditions( //dir=stmt
unique int id: @stmt_condition
);
#keyset[id, index]
stmt_condition_elements( //dir=stmt
int id: @stmt_condition ref,
int index: int ref,
int element: @condition_element_or_none ref
);
brace_stmts( //dir=stmt
unique int id: @brace_stmt
);
#keyset[id, index]
brace_stmt_elements( //dir=stmt
int id: @brace_stmt ref,
int index: int ref,
int element: @ast_node_or_none ref
);
break_stmts( //dir=stmt
unique int id: @break_stmt
);
#keyset[id]
break_stmt_target_names( //dir=stmt
int id: @break_stmt ref,
string target_name: string ref
);
#keyset[id]
break_stmt_targets( //dir=stmt
int id: @break_stmt ref,
int target: @stmt_or_none ref
);
case_stmts( //dir=stmt
unique int id: @case_stmt,
int body: @stmt_or_none ref
);
#keyset[id, index]
case_stmt_labels( //dir=stmt
int id: @case_stmt ref,
int index: int ref,
int label: @case_label_item_or_none ref
);
#keyset[id, index]
case_stmt_variables( //dir=stmt
int id: @case_stmt ref,
int index: int ref,
int variable: @var_decl_or_none ref
);
continue_stmts( //dir=stmt
unique int id: @continue_stmt
);
#keyset[id]
continue_stmt_target_names( //dir=stmt
int id: @continue_stmt ref,
string target_name: string ref
);
#keyset[id]
continue_stmt_targets( //dir=stmt
int id: @continue_stmt ref,
int target: @stmt_or_none ref
);
defer_stmts( //dir=stmt
unique int id: @defer_stmt,
int body: @brace_stmt_or_none ref
);
fail_stmts( //dir=stmt
unique int id: @fail_stmt
);
fallthrough_stmts( //dir=stmt
unique int id: @fallthrough_stmt,
int fallthrough_source: @case_stmt_or_none ref,
int fallthrough_dest: @case_stmt_or_none ref
);
@labeled_stmt =
@do_catch_stmt
| @do_stmt
| @for_each_stmt
| @labeled_conditional_stmt
| @repeat_while_stmt
| @switch_stmt
;
#keyset[id]
labeled_stmt_labels( //dir=stmt
int id: @labeled_stmt ref,
string label: string ref
);
pound_assert_stmts( //dir=stmt
unique int id: @pound_assert_stmt,
int condition: @expr_or_none ref,
string message: string ref
);
return_stmts( //dir=stmt
unique int id: @return_stmt
);
#keyset[id]
return_stmt_results( //dir=stmt
int id: @return_stmt ref,
int result: @expr_or_none ref
);
throw_stmts( //dir=stmt
unique int id: @throw_stmt,
int sub_expr: @expr_or_none ref
);
yield_stmts( //dir=stmt
unique int id: @yield_stmt
);
#keyset[id, index]
yield_stmt_results( //dir=stmt
int id: @yield_stmt ref,
int index: int ref,
int result: @expr_or_none ref
);
do_catch_stmts( //dir=stmt
unique int id: @do_catch_stmt,
int body: @stmt_or_none ref
);
#keyset[id, index]
do_catch_stmt_catches( //dir=stmt
int id: @do_catch_stmt ref,
int index: int ref,
int catch: @case_stmt_or_none ref
);
do_stmts( //dir=stmt
unique int id: @do_stmt,
int body: @brace_stmt_or_none ref
);
for_each_stmts( //dir=stmt
unique int id: @for_each_stmt,
int pattern: @pattern_or_none ref,
int sequence: @expr_or_none ref,
int body: @brace_stmt_or_none ref
);
#keyset[id]
for_each_stmt_wheres( //dir=stmt
int id: @for_each_stmt ref,
int where: @expr_or_none ref
);
@labeled_conditional_stmt =
@guard_stmt
| @if_stmt
| @while_stmt
;
#keyset[id]
labeled_conditional_stmts( //dir=stmt
int id: @labeled_conditional_stmt ref,
int condition: @stmt_condition_or_none ref
);
repeat_while_stmts( //dir=stmt
unique int id: @repeat_while_stmt,
int condition: @expr_or_none ref,
int body: @stmt_or_none ref
);
switch_stmts( //dir=stmt
unique int id: @switch_stmt,
int expr: @expr_or_none ref
);
#keyset[id, index]
switch_stmt_cases( //dir=stmt
int id: @switch_stmt ref,
int index: int ref,
int case_: @case_stmt_or_none ref
);
guard_stmts( //dir=stmt
unique int id: @guard_stmt,
int body: @brace_stmt_or_none ref
);
if_stmts( //dir=stmt
unique int id: @if_stmt,
int then: @stmt_or_none ref
);
#keyset[id]
if_stmt_elses( //dir=stmt
int id: @if_stmt ref,
int else: @stmt_or_none ref
);
while_stmts( //dir=stmt
unique int id: @while_stmt,
int body: @stmt_or_none ref
);
@type =
@any_function_type
| @any_generic_type
| @any_metatype_type
| @builtin_type
| @dependent_member_type
| @dynamic_self_type
| @error_type
| @existential_type
| @in_out_type
| @l_value_type
| @module_type
| @parameterized_protocol_type
| @protocol_composition_type
| @reference_storage_type
| @substitutable_type
| @sugar_type
| @tuple_type
| @unresolved_type
;
#keyset[id]
types( //dir=type
int id: @type ref,
string name: string ref,
int canonical_type: @type_or_none ref
);
type_reprs( //dir=type
unique int id: @type_repr,
int type_: @type_or_none ref
);
@any_function_type =
@function_type
| @generic_function_type
;
#keyset[id]
any_function_types( //dir=type
int id: @any_function_type ref,
int result: @type_or_none ref
);
#keyset[id, index]
any_function_type_param_types( //dir=type
int id: @any_function_type ref,
int index: int ref,
int param_type: @type_or_none ref
);
#keyset[id]
any_function_type_is_throwing( //dir=type
int id: @any_function_type ref
);
#keyset[id]
any_function_type_is_async( //dir=type
int id: @any_function_type ref
);
@any_generic_type =
@nominal_or_bound_generic_nominal_type
| @unbound_generic_type
;
#keyset[id]
any_generic_types( //dir=type
int id: @any_generic_type ref,
int declaration: @generic_type_decl_or_none ref
);
#keyset[id]
any_generic_type_parents( //dir=type
int id: @any_generic_type ref,
int parent: @type_or_none ref
);
@any_metatype_type =
@existential_metatype_type
| @metatype_type
;
@builtin_type =
@any_builtin_integer_type
| @builtin_bridge_object_type
| @builtin_default_actor_storage_type
| @builtin_executor_type
| @builtin_float_type
| @builtin_job_type
| @builtin_native_object_type
| @builtin_raw_pointer_type
| @builtin_raw_unsafe_continuation_type
| @builtin_unsafe_value_buffer_type
| @builtin_vector_type
;
dependent_member_types( //dir=type
unique int id: @dependent_member_type,
int base_type: @type_or_none ref,
int associated_type_decl: @associated_type_decl_or_none ref
);
dynamic_self_types( //dir=type
unique int id: @dynamic_self_type,
int static_self_type: @type_or_none ref
);
error_types( //dir=type
unique int id: @error_type
);
existential_types( //dir=type
unique int id: @existential_type,
int constraint: @type_or_none ref
);
in_out_types( //dir=type
unique int id: @in_out_type,
int object_type: @type_or_none ref
);
l_value_types( //dir=type
unique int id: @l_value_type,
int object_type: @type_or_none ref
);
module_types( //dir=type
unique int id: @module_type,
int module: @module_decl_or_none ref
);
parameterized_protocol_types( //dir=type
unique int id: @parameterized_protocol_type,
int base: @protocol_type_or_none ref
);
#keyset[id, index]
parameterized_protocol_type_args( //dir=type
int id: @parameterized_protocol_type ref,
int index: int ref,
int arg: @type_or_none ref
);
protocol_composition_types( //dir=type
unique int id: @protocol_composition_type
);
#keyset[id, index]
protocol_composition_type_members( //dir=type
int id: @protocol_composition_type ref,
int index: int ref,
int member: @type_or_none ref
);
@reference_storage_type =
@unmanaged_storage_type
| @unowned_storage_type
| @weak_storage_type
;
#keyset[id]
reference_storage_types( //dir=type
int id: @reference_storage_type ref,
int referent_type: @type_or_none ref
);
@substitutable_type =
@archetype_type
| @generic_type_param_type
;
@sugar_type =
@paren_type
| @syntax_sugar_type
| @type_alias_type
;
tuple_types( //dir=type
unique int id: @tuple_type
);
#keyset[id, index]
tuple_type_types( //dir=type
int id: @tuple_type ref,
int index: int ref,
int type_: @type_or_none ref
);
#keyset[id, index]
tuple_type_names( //dir=type
int id: @tuple_type ref,
int index: int ref,
string name: string ref
);
unresolved_types( //dir=type
unique int id: @unresolved_type
);
@any_builtin_integer_type =
@builtin_integer_literal_type
| @builtin_integer_type
;
@archetype_type =
@opaque_type_archetype_type
| @opened_archetype_type
| @primary_archetype_type
;
#keyset[id]
archetype_types( //dir=type
int id: @archetype_type ref,
int interface_type: @type_or_none ref
);
#keyset[id]
archetype_type_superclasses( //dir=type
int id: @archetype_type ref,
int superclass: @type_or_none ref
);
#keyset[id, index]
archetype_type_protocols( //dir=type
int id: @archetype_type ref,
int index: int ref,
int protocol: @protocol_decl_or_none ref
);
builtin_bridge_object_types( //dir=type
unique int id: @builtin_bridge_object_type
);
builtin_default_actor_storage_types( //dir=type
unique int id: @builtin_default_actor_storage_type
);
builtin_executor_types( //dir=type
unique int id: @builtin_executor_type
);
builtin_float_types( //dir=type
unique int id: @builtin_float_type
);
builtin_job_types( //dir=type
unique int id: @builtin_job_type
);
builtin_native_object_types( //dir=type
unique int id: @builtin_native_object_type
);
builtin_raw_pointer_types( //dir=type
unique int id: @builtin_raw_pointer_type
);
builtin_raw_unsafe_continuation_types( //dir=type
unique int id: @builtin_raw_unsafe_continuation_type
);
builtin_unsafe_value_buffer_types( //dir=type
unique int id: @builtin_unsafe_value_buffer_type
);
builtin_vector_types( //dir=type
unique int id: @builtin_vector_type
);
existential_metatype_types( //dir=type
unique int id: @existential_metatype_type
);
function_types( //dir=type
unique int id: @function_type
);
generic_function_types( //dir=type
unique int id: @generic_function_type
);
#keyset[id, index]
generic_function_type_generic_params( //dir=type
int id: @generic_function_type ref,
int index: int ref,
int generic_param: @generic_type_param_type_or_none ref
);
generic_type_param_types( //dir=type
unique int id: @generic_type_param_type
);
metatype_types( //dir=type
unique int id: @metatype_type
);
@nominal_or_bound_generic_nominal_type =
@bound_generic_type
| @nominal_type
;
paren_types( //dir=type
unique int id: @paren_type,
int type_: @type_or_none ref
);
@syntax_sugar_type =
@dictionary_type
| @unary_syntax_sugar_type
;
type_alias_types( //dir=type
unique int id: @type_alias_type,
int decl: @type_alias_decl_or_none ref
);
unbound_generic_types( //dir=type
unique int id: @unbound_generic_type
);
unmanaged_storage_types( //dir=type
unique int id: @unmanaged_storage_type
);
unowned_storage_types( //dir=type
unique int id: @unowned_storage_type
);
weak_storage_types( //dir=type
unique int id: @weak_storage_type
);
@bound_generic_type =
@bound_generic_class_type
| @bound_generic_enum_type
| @bound_generic_struct_type
;
#keyset[id, index]
bound_generic_type_arg_types( //dir=type
int id: @bound_generic_type ref,
int index: int ref,
int arg_type: @type_or_none ref
);
builtin_integer_literal_types( //dir=type
unique int id: @builtin_integer_literal_type
);
builtin_integer_types( //dir=type
unique int id: @builtin_integer_type
);
#keyset[id]
builtin_integer_type_widths( //dir=type
int id: @builtin_integer_type ref,
int width: int ref
);
dictionary_types( //dir=type
unique int id: @dictionary_type,
int key_type: @type_or_none ref,
int value_type: @type_or_none ref
);
@nominal_type =
@class_type
| @enum_type
| @protocol_type
| @struct_type
;
opaque_type_archetype_types( //dir=type
unique int id: @opaque_type_archetype_type,
int declaration: @opaque_type_decl_or_none ref
);
opened_archetype_types( //dir=type
unique int id: @opened_archetype_type
);
primary_archetype_types( //dir=type
unique int id: @primary_archetype_type
);
@unary_syntax_sugar_type =
@array_slice_type
| @optional_type
| @variadic_sequence_type
;
#keyset[id]
unary_syntax_sugar_types( //dir=type
int id: @unary_syntax_sugar_type ref,
int base_type: @type_or_none ref
);
array_slice_types( //dir=type
unique int id: @array_slice_type
);
bound_generic_class_types( //dir=type
unique int id: @bound_generic_class_type
);
bound_generic_enum_types( //dir=type
unique int id: @bound_generic_enum_type
);
bound_generic_struct_types( //dir=type
unique int id: @bound_generic_struct_type
);
class_types( //dir=type
unique int id: @class_type
);
enum_types( //dir=type
unique int id: @enum_type
);
optional_types( //dir=type
unique int id: @optional_type
);
protocol_types( //dir=type
unique int id: @protocol_type
);
struct_types( //dir=type
unique int id: @struct_type
);
variadic_sequence_types( //dir=type
unique int id: @variadic_sequence_type
);
@abstract_function_decl_or_none =
@abstract_function_decl
| @unspecified_element
;
@accessor_decl_or_none =
@accessor_decl
| @unspecified_element
;
@argument_or_none =
@argument
| @unspecified_element
;
@associated_type_decl_or_none =
@associated_type_decl
| @unspecified_element
;
@ast_node_or_none =
@ast_node
| @unspecified_element
;
@availability_info_or_none =
@availability_info
| @unspecified_element
;
@availability_spec_or_none =
@availability_spec
| @unspecified_element
;
@brace_stmt_or_none =
@brace_stmt
| @unspecified_element
;
@captured_decl_or_none =
@captured_decl
| @unspecified_element
;
@case_label_item_or_none =
@case_label_item
| @unspecified_element
;
@case_stmt_or_none =
@case_stmt
| @unspecified_element
;
@closure_expr_or_none =
@closure_expr
| @unspecified_element
;
@condition_element_or_none =
@condition_element
| @unspecified_element
;
@constructor_decl_or_none =
@constructor_decl
| @unspecified_element
;
@decl_or_none =
@decl
| @unspecified_element
;
@enum_element_decl_or_none =
@enum_element_decl
| @unspecified_element
;
@expr_or_none =
@expr
| @unspecified_element
;
@file_or_none =
@file
| @unspecified_element
;
@generic_type_decl_or_none =
@generic_type_decl
| @unspecified_element
;
@generic_type_param_decl_or_none =
@generic_type_param_decl
| @unspecified_element
;
@generic_type_param_type_or_none =
@generic_type_param_type
| @unspecified_element
;
@location_or_none =
@location
| @unspecified_element
;
@module_decl_or_none =
@module_decl
| @unspecified_element
;
@nominal_type_decl_or_none =
@nominal_type_decl
| @unspecified_element
;
@opaque_type_decl_or_none =
@opaque_type_decl
| @unspecified_element
;
@opaque_value_expr_or_none =
@opaque_value_expr
| @unspecified_element
;
@param_decl_or_none =
@param_decl
| @unspecified_element
;
@pattern_or_none =
@pattern
| @unspecified_element
;
@pattern_binding_decl_or_none =
@pattern_binding_decl
| @unspecified_element
;
@precedence_group_decl_or_none =
@precedence_group_decl
| @unspecified_element
;
@protocol_decl_or_none =
@protocol_decl
| @unspecified_element
;
@protocol_type_or_none =
@protocol_type
| @unspecified_element
;
@stmt_or_none =
@stmt
| @unspecified_element
;
@stmt_condition_or_none =
@stmt_condition
| @unspecified_element
;
@string_literal_expr_or_none =
@string_literal_expr
| @unspecified_element
;
@tap_expr_or_none =
@tap_expr
| @unspecified_element
;
@type_or_none =
@type
| @unspecified_element
;
@type_alias_decl_or_none =
@type_alias_decl
| @unspecified_element
;
@type_repr_or_none =
@type_repr
| @unspecified_element
;
@value_decl_or_none =
@unspecified_element
| @value_decl
;
@var_decl_or_none =
@unspecified_element
| @var_decl
;