vala r945 - in trunk: . vala



Author: juergbi
Date: Fri Feb  1 17:52:32 2008
New Revision: 945
URL: http://svn.gnome.org/viewvc/vala?rev=945&view=rev

Log:
2008-02-01  Juerg Billeter  <j bitron ch>

	* vala/valacatchclause.vala, vala/valacfgbuilder.vala,
	  vala/valasemanticanalyzer.vala: fix crash when using general
	  catch clause, fixes bug 513680


Modified:
   trunk/ChangeLog
   trunk/vala/valacatchclause.vala
   trunk/vala/valacfgbuilder.vala
   trunk/vala/valasemanticanalyzer.vala

Modified: trunk/vala/valacatchclause.vala
==============================================================================
--- trunk/vala/valacatchclause.vala	(original)
+++ trunk/vala/valacatchclause.vala	Fri Feb  1 17:52:32 2008
@@ -1,6 +1,6 @@
 /* valacatchclause.vala
  *
- * Copyright (C) 2007  JÃrg Billeter
+ * Copyright (C) 2007-2008  JÃrg Billeter
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -29,11 +29,13 @@
 	/**
 	 * Specifies the error type.
 	 */
-	public DataType type_reference {
+	public DataType? type_reference {
 		get { return _data_type; }
 		set {
 			_data_type = value;
-			_data_type.parent_node = this;
+			if (_data_type != null) {
+				_data_type.parent_node = this;
+			}
 		}
 	}
 	
@@ -63,7 +65,7 @@
 	 * @param source_reference reference to source code
 	 * @return                 newly created catch clause
 	 */
-	public CatchClause (construct DataType type_reference, construct string variable_name, construct Block body, construct SourceReference source_reference = null) {
+	public CatchClause (construct DataType? type_reference, construct string variable_name, construct Block body, construct SourceReference source_reference = null) {
 	}
 
 	public override void accept (CodeVisitor! visitor) {
@@ -71,7 +73,10 @@
 	}
 
 	public override void accept_children (CodeVisitor! visitor) {
-		type_reference.accept (visitor);
+		if (type_reference != null) {
+			type_reference.accept (visitor);
+		}
+
 		body.accept (visitor);
 	}
 

Modified: trunk/vala/valacfgbuilder.vala
==============================================================================
--- trunk/vala/valacfgbuilder.vala	(original)
+++ trunk/vala/valacfgbuilder.vala	Fri Feb  1 17:52:32 2008
@@ -585,7 +585,11 @@
 		var catch_clauses = stmt.get_catch_clauses ();
 		for (int i = catch_clauses.size - 1; i >= 0; i--) {
 			var catch_clause = catch_clauses[i];
-			jump_stack.add (new JumpTarget.error_target (new BasicBlock (), catch_clause, catch_clause.type_reference.data_type as Enum, null));
+			if (catch_clause.type_reference != null) {
+				jump_stack.add (new JumpTarget.error_target (new BasicBlock (), catch_clause, catch_clause.type_reference.data_type as Enum, null));
+			} else {
+				jump_stack.add (new JumpTarget.error_target (new BasicBlock (), catch_clause, null, null));
+			}
 		}
 
 		stmt.body.accept (this);

Modified: trunk/vala/valasemanticanalyzer.vala
==============================================================================
--- trunk/vala/valasemanticanalyzer.vala	(original)
+++ trunk/vala/valasemanticanalyzer.vala	Fri Feb  1 17:52:32 2008
@@ -1069,12 +1069,14 @@
 	}
 
 	public override void visit_catch_clause (CatchClause! clause) {
-		current_source_file.add_type_dependency (clause.type_reference, SourceFileDependencyType.SOURCE);
+		if (clause.type_reference != null) {
+			current_source_file.add_type_dependency (clause.type_reference, SourceFileDependencyType.SOURCE);
 
-		clause.variable_declarator = new VariableDeclarator (clause.variable_name);
-		clause.variable_declarator.type_reference = new ClassType (gerror_type);
+			clause.variable_declarator = new VariableDeclarator (clause.variable_name);
+			clause.variable_declarator.type_reference = new ClassType (gerror_type);
 
-		clause.body.scope.add (clause.variable_name, clause.variable_declarator);
+			clause.body.scope.add (clause.variable_name, clause.variable_declarator);
+		}
 
 		clause.accept_children (this);
 	}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]