vala r2179 - in trunk: . gobject vala



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]