================== generic_arguments ================== program() type File = record fd: Int end Pair#[K, V] = record key: ^K; value: ^V end var entry: Pair#[File, Word8] proc allocate#[T](size: Word) -> ^T extern proc first#[K, V](entry_ptr: ^Pair#[K, V]) -> ^K return entry_ptr^.key begin entry.key := allocate#[File](#size(File)); assert(#size(Pair#[File, Word8]) = #size(Pointer) * 2u); assert(#offset(Pair#[File, Word8], value) = #size(Pointer)); assert(first#[File, Word8](@entry) = entry.key) 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) (identifier)) (record_type (field_declaration (identifier_definition (identifier)) (pointer_type (identifier))) (field_declaration (identifier_definition (identifier)) (pointer_type (identifier)))))) (var_section (variable_declaration (identifier_definition (identifier)) (generic_type (identifier) (type_arguments (identifier) (identifier))))) (procedure_declaration (identifier_definition (identifier)) (type_parameters (identifier)) (parameter_list (field_declaration (identifier_definition (identifier)) (identifier))) (pointer_type (identifier))) (procedure_declaration (identifier_definition (identifier)) (type_parameters (identifier) (identifier)) (parameter_list (field_declaration (identifier_definition (identifier)) (pointer_type (generic_type (identifier) (type_arguments (identifier) (identifier)))))) (pointer_type (identifier)) (procedure_body (return_clause (field_expression (dereference_expression (identifier)) (identifier))))) (assignment_statement (field_expression (identifier) (identifier)) (call_expression (generic_type (identifier) (type_arguments (identifier))) (argument_list (traits_expression (trait) (identifier))))) (call_expression (identifier) (argument_list (binary_expression (traits_expression (trait) (generic_type (identifier) (type_arguments (identifier) (identifier)))) (binary_expression (traits_expression (trait) (identifier)) (literal (integer)))))) (call_expression (identifier) (argument_list (binary_expression (traits_expression (trait) (generic_type (identifier) (type_arguments (identifier) (identifier))) (identifier)) (traits_expression (trait) (identifier))))) (call_expression (identifier) (argument_list (binary_expression (call_expression (generic_type (identifier) (type_arguments (identifier) (identifier))) (argument_list (unary_expression (identifier)))) (field_expression (identifier) (identifier)))))))