================== generic_alias ================== program() type File = record fd: Int end Node#[T] = record next: ^Node#[T]; value: ^T end Ref#[T] = ^T Boxed#[V] = record inner: ^Node#[V] end var chain: Node#[File] aliased: Ref#[File] raw: ^File boxed: Boxed#[File] begin chain.next := nil; aliased := raw; raw := aliased; boxed.inner := @chain end. --- (source_file (program_declaration (type_section (type_declaration (identifier_definition (identifier)) (record_type (field_declaration (identifier_definition (identifier)) (identifier)))) (type_declaration (identifier_definition (identifier)) (type_parameters (identifier)) (record_type (field_declaration (identifier_definition (identifier)) (pointer_type (generic_type (identifier) (type_arguments (identifier))))) (field_declaration (identifier_definition (identifier)) (pointer_type (identifier))))) (type_declaration (identifier_definition (identifier)) (type_parameters (identifier)) (pointer_type (identifier))) (type_declaration (identifier_definition (identifier)) (type_parameters (identifier)) (record_type (field_declaration (identifier_definition (identifier)) (pointer_type (generic_type (identifier) (type_arguments (identifier)))))))) (var_section (variable_declaration (identifier_definition (identifier)) (generic_type (identifier) (type_arguments (identifier)))) (variable_declaration (identifier_definition (identifier)) (generic_type (identifier) (type_arguments (identifier)))) (variable_declaration (identifier_definition (identifier)) (pointer_type (identifier))) (variable_declaration (identifier_definition (identifier)) (generic_type (identifier) (type_arguments (identifier))))) (assignment_statement (field_expression (identifier) (identifier)) (literal (nil))) (assignment_statement (identifier) (identifier)) (assignment_statement (identifier) (identifier)) (assignment_statement (field_expression (identifier) (identifier)) (unary_expression (identifier)))))