vala r1334 - in trunk: . gobject vala
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r1334 - in trunk: . gobject vala
- Date: Fri, 2 May 2008 21:36:49 +0100 (BST)
Author: juergbi
Date: Fri May 2 20:36:49 2008
New Revision: 1334
URL: http://svn.gnome.org/viewvc/vala?rev=1334&view=rev
Log:
2008-05-02 Juerg Billeter <j bitron ch>
* vala/valacatchclause.vala:
* gobject/valaccodegenerator.vala:
Fix error handling in catch and finally clauses, fixes bug 530212
Modified:
trunk/ChangeLog
trunk/gobject/valaccodegenerator.vala
trunk/vala/valacatchclause.vala
Modified: trunk/gobject/valaccodegenerator.vala
==============================================================================
--- trunk/gobject/valaccodegenerator.vala (original)
+++ trunk/gobject/valaccodegenerator.vala Fri May 2 20:36:49 2008
@@ -1488,7 +1488,7 @@
var cerror_block = new CCodeBlock ();
foreach (CatchClause clause in current_try.get_catch_clauses ()) {
// go to catch clause if error domain matches
- var cgoto_stmt = new CCodeGotoStatement ("__catch%d_%s".printf (current_try_id, clause.error_type.get_lower_case_cname ()));
+ var cgoto_stmt = new CCodeGotoStatement (clause.clabel_name);
if (clause.error_type.equals (gerror_type)) {
// general catch clause
@@ -2278,23 +2278,44 @@
}
public override void visit_try_statement (TryStatement stmt) {
+ int this_try_id = next_try_id++;
+
var old_try = current_try;
var old_try_id = current_try_id;
current_try = stmt;
- current_try_id = next_try_id++;
+ current_try_id = this_try_id;
- stmt.accept_children (this);
+ foreach (CatchClause clause in stmt.get_catch_clauses ()) {
+ clause.clabel_name = "__catch%d_%s".printf (this_try_id, clause.error_type.get_lower_case_cname ());
+ }
+
+ if (stmt.finally_body != null) {
+ stmt.finally_body.accept (this);
+ }
+
+ stmt.body.accept (this);
+
+ current_try = old_try;
+ current_try_id = old_try_id;
+
+ foreach (CatchClause clause in stmt.get_catch_clauses ()) {
+ clause.accept (this);
+ }
+
+ if (stmt.finally_body != null) {
+ stmt.finally_body.accept (this);
+ }
var cfrag = new CCodeFragment ();
cfrag.append (stmt.body.ccodenode);
foreach (CatchClause clause in stmt.get_catch_clauses ()) {
- cfrag.append (new CCodeGotoStatement ("__finally%d".printf (current_try_id)));
+ cfrag.append (new CCodeGotoStatement ("__finally%d".printf (this_try_id)));
cfrag.append (clause.ccodenode);
}
- cfrag.append (new CCodeLabel ("__finally%d".printf (current_try_id)));
+ cfrag.append (new CCodeLabel ("__finally%d".printf (this_try_id)));
if (stmt.finally_body != null) {
cfrag.append (stmt.finally_body.ccodenode);
} else {
@@ -2303,9 +2324,6 @@
}
stmt.ccodenode = cfrag;
-
- current_try = old_try;
- current_try_id = old_try_id;
}
public override void visit_catch_clause (CatchClause clause) {
@@ -2314,7 +2332,7 @@
clause.accept_children (this);
var cfrag = new CCodeFragment ();
- cfrag.append (new CCodeLabel ("__catch%d_%s".printf (current_try_id, clause.error_type.get_lower_case_cname ())));
+ cfrag.append (new CCodeLabel (clause.clabel_name));
var cblock = new CCodeBlock ();
Modified: trunk/vala/valacatchclause.vala
==============================================================================
--- trunk/vala/valacatchclause.vala (original)
+++ trunk/vala/valacatchclause.vala Fri May 2 20:36:49 2008
@@ -54,6 +54,11 @@
*/
public LocalVariable error_variable { get; set; }
+ /**
+ * Specifies the label used for this catch clause in the C code.
+ */
+ public string? clabel_name { get; set; }
+
private DataType _data_type;
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]