errdefer and try/defer fix

This commit is contained in:
2026-07-13 19:20:22 +02:00
parent 9e75549d02
commit 6de4d9f9f3
23 changed files with 113190 additions and 105482 deletions
@@ -95,3 +95,62 @@ sum func(a, b i32) i32 ! Status {
(expression
(enum_literal
(identifier))))))))))))
==================
Errdefer
==================
Failure :: enum { bad }
work func() i32 ! Failure {
errdefer cleanup()
errdefer |err| {
_ = err
}
return 1
}
---
(source_file
(type_declaration
(identifier)
(enum_type
(enum_body
(enum_member
(identifier)))))
(function_declaration
(identifier)
(parameter_list)
(type
(builtin_type))
(type
(named_type
(qualified_identifier
(identifier))))
(block
(statement
(defer_statement
(statement
(expression_statement
(expression
(call_expression
(expression
(identifier))
(argument_list)))))))
(statement
(defer_statement
(error_capture
(identifier))
(statement
(block
(statement
(assignment_statement
(expression
(sink))
(expression
(identifier))))))))
(statement
(return_statement
(expression
(integer)))))))