+2008-02-29 Jürg Billeter <j@bitron.ch>
+
+ * gobject/valaccodegenerator.vala: support throw statements in try
+ statements
+
+ * tests/exceptions.vala: test throw statement in try statement with
+ generic catch clause
+
2008-02-28 Jürg Billeter <j@bitron.ch>
* gobject/valaccodeassignmentbinding.vala,
private bool requires_array_free;
private bool requires_array_move;
private bool requires_strcmp0;
- private bool inside_throws_statement;
private Set<string> wrappers;
}
public override void visit_throw_statement (ThrowStatement! stmt) {
- inside_throws_statement = true;
stmt.accept_children (this);
- inside_throws_statement = false;
var cfrag = new CCodeFragment ();
/* declare temporary objects */
append_temp_decl (cfrag, temp_vars);
- cfrag.append (new CCodeExpressionStatement ((CCodeExpression) stmt.error_expression.ccodenode));
+ // method will fail
+ current_method_inner_error = true;
+ var cassign = new CCodeAssignment (new CCodeIdentifier ("inner_error"), (CCodeExpression) stmt.error_expression.ccodenode);
+ cfrag.append (new CCodeExpressionStatement (cassign));
+
+ add_simple_check (stmt, cfrag);
/* free temporary objects */
foreach (VariableDeclarator decl in temp_ref_vars) {
var ecode = (ErrorCode) expr.symbol_reference;
var edomain = (ErrorDomain) ecode.parent_symbol;
- if (inside_throws_statement) {
- creation_call = new CCodeFunctionCall (new CCodeIdentifier ("g_set_error"));
- creation_call.add_argument (new CCodeIdentifier ("error"));
- } else {
- creation_call = new CCodeFunctionCall (new CCodeIdentifier ("g_error_new"));
- }
+ creation_call = new CCodeFunctionCall (new CCodeIdentifier ("g_error_new"));
creation_call.add_argument (new CCodeIdentifier (edomain.get_upper_case_cname ()));
creation_call.add_argument (new CCodeIdentifier (ecode.get_cname ()));