vala r2179 - in trunk: . gobject vala
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r2179 - in trunk: . gobject vala
- Date: Tue, 16 Dec 2008 09:27:27 +0000 (UTC)
Author: juergbi
Date: Tue Dec 16 09:27:27 2008
New Revision: 2179
URL: http://svn.gnome.org/viewvc/vala?rev=2179&view=rev
Log:
2008-12-16 JÃrg Billeter <j bitron ch>
* vala/valadelegate.vala:
* vala/valamethodcall.vala:
* vala/valaparser.vala:
* gobject/valaccodedelegatemodule.vala:
Support delegates throwing errors, fixes bug 557332
Modified:
trunk/ChangeLog
trunk/gobject/valaccodedelegatemodule.vala
trunk/vala/valadelegate.vala
trunk/vala/valamethodcall.vala
trunk/vala/valaparser.vala
Modified: trunk/gobject/valaccodedelegatemodule.vala
==============================================================================
--- trunk/gobject/valaccodedelegatemodule.vala (original)
+++ trunk/gobject/valaccodedelegatemodule.vala Tue Dec 16 09:27:27 2008
@@ -57,6 +57,10 @@
var cparam = new CCodeFormalParameter ("user_data", "void*");
cfundecl.add_parameter (cparam);
}
+ if (d.get_error_types ().size > 0) {
+ var cparam = new CCodeFormalParameter ("error", "GError**");
+ cfundecl.add_parameter (cparam);
+ }
var ctypedef = new CCodeTypeDefinition (d.return_type.get_cname (), cfundecl);
Modified: trunk/vala/valadelegate.vala
==============================================================================
--- trunk/vala/valadelegate.vala (original)
+++ trunk/vala/valadelegate.vala Tue Dec 16 09:27:27 2008
@@ -277,6 +277,14 @@
public override void replace_type (DataType old_type, DataType new_type) {
if (return_type == old_type) {
return_type = new_type;
+ return;
+ }
+ var error_types = get_error_types ();
+ for (int i = 0; i < error_types.size; i++) {
+ if (error_types[i] == old_type) {
+ error_types[i] = new_type;
+ return;
+ }
}
}
@@ -353,6 +361,10 @@
param.check (analyzer);
}
+ foreach (DataType error_type in get_error_types ()) {
+ error_type.check (analyzer);
+ }
+
analyzer.current_source_file = old_source_file;
return !error;
Modified: trunk/vala/valamethodcall.vala
==============================================================================
--- trunk/vala/valamethodcall.vala (original)
+++ trunk/vala/valamethodcall.vala Tue Dec 16 09:27:27 2008
@@ -414,6 +414,17 @@
add_error_type (call_error_type);
}
+ } else if (mtype is DelegateType) {
+ var d = ((DelegateType) mtype).delegate_symbol;
+ foreach (DataType error_type in d.get_error_types ()) {
+ may_throw = true;
+
+ // ensure we can trace back which expression may throw errors of this type
+ var call_error_type = error_type.copy ();
+ call_error_type.source_reference = source_reference;
+
+ add_error_type (call_error_type);
+ }
}
analyzer.check_arguments (this, mtype, params, get_argument_list ());
Modified: trunk/vala/valaparser.vala
==============================================================================
--- trunk/vala/valaparser.vala (original)
+++ trunk/vala/valaparser.vala Tue Dec 16 09:27:27 2008
@@ -2754,7 +2754,7 @@
expect (TokenType.CLOSE_PARENS);
if (accept (TokenType.THROWS)) {
do {
- parse_type ();
+ d.add_error_type (parse_type ());
} while (accept (TokenType.COMMA));
}
expect (TokenType.SEMICOLON);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]