vala r1063 - in trunk: . gobject



Author: juergbi
Date: Thu Feb 28 21:56:33 2008
New Revision: 1063
URL: http://svn.gnome.org/viewvc/vala?rev=1063&view=rev

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

	* gobject/valaccodeassignmentbinding.vala,
	  gobject/valaccodegenerator.vala: support instance delegate fields,
	  fixes bug 519231


Modified:
   trunk/ChangeLog
   trunk/gobject/valaccodeassignmentbinding.vala
   trunk/gobject/valaccodegenerator.vala

Modified: trunk/gobject/valaccodeassignmentbinding.vala
==============================================================================
--- trunk/gobject/valaccodeassignmentbinding.vala	(original)
+++ trunk/gobject/valaccodeassignmentbinding.vala	Thu Feb 28 21:56:33 2008
@@ -452,11 +452,15 @@
 
 		bool unref_old = (assignment.left.static_type.takes_ownership);
 		bool array = false;
+		bool instance_delegate = false;
 		if (assignment.left.static_type is ArrayType) {
 			array = !(codegen.get_array_length_cexpression (assignment.left, 1) is CCodeConstant);
+		} else if (assignment.left.static_type is DelegateType) {
+			var delegate_type = (DelegateType) assignment.left.static_type;
+			instance_delegate = delegate_type.delegate_symbol.instance;
 		}
 		
-		if (unref_old || array) {
+		if (unref_old || array || instance_delegate) {
 			var ccomma = new CCodeCommaExpression ();
 			
 			var temp_decl = codegen.get_temp_variable_declarator (assignment.left.static_type);
@@ -474,6 +478,11 @@
 					var rhs_array_len = codegen.get_array_length_cexpression (assignment.right, dim);
 					ccomma.append_expression (new CCodeAssignment (lhs_array_len, rhs_array_len));
 				}
+			} else if (instance_delegate) {
+				var delegate_type = (DelegateType) assignment.left.static_type;
+				var lhs_delegate_target = codegen.get_delegate_target_cexpression (assignment.left);
+				var rhs_delegate_target = codegen.get_delegate_target_cexpression (assignment.right);
+				ccomma.append_expression (new CCodeAssignment (lhs_delegate_target, rhs_delegate_target));
 			}
 			
 			ccomma.append_expression (new CCodeIdentifier (temp_decl.name));

Modified: trunk/gobject/valaccodegenerator.vala
==============================================================================
--- trunk/gobject/valaccodegenerator.vala	(original)
+++ trunk/gobject/valaccodegenerator.vala	Thu Feb 28 21:56:33 2008
@@ -475,6 +475,12 @@
 
 					st.add_field (len_type.get_cname (), get_array_length_cname (f.name, dim));
 				}
+			} else if (f.type_reference is DelegateType) {
+				var delegate_type = (DelegateType) f.type_reference;
+				if (delegate_type.delegate_symbol.instance) {
+					// create field to store delegate target
+					st.add_field ("gpointer", get_delegate_target_cname (f.name));
+				}
 			}
 
 			if (f.initializer != null) {
@@ -521,6 +527,20 @@
 						source_type_member_declaration.append (cdecl);
 					}
 				}
+			} else if (f.type_reference is DelegateType) {
+				var delegate_type = (DelegateType) f.type_reference;
+				if (delegate_type.delegate_symbol.instance) {
+					// create field to store delegate target
+					var cdecl = new CCodeDeclaration ("gpointer");
+					cdecl.add_declarator (new CCodeVariableDeclarator (get_delegate_target_cname  (f.get_cname ())));
+					if (f.access != SymbolAccessibility.PRIVATE) {
+						cdecl.modifiers = CCodeModifiers.EXTERN;
+						header_type_member_declaration.append (cdecl);
+					} else {
+						cdecl.modifiers = CCodeModifiers.STATIC;
+						source_type_member_declaration.append (cdecl);
+					}
+				}
 			}
 
 			if (f.initializer != null) {



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