vala r1063 - in trunk: . gobject
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r1063 - in trunk: . gobject
- Date: Thu, 28 Feb 2008 21:56:33 +0000 (GMT)
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]