vala r1127 - in trunk: . gobject
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r1127 - in trunk: . gobject
- Date: Sat, 15 Mar 2008 02:48:42 +0000 (GMT)
Author: juergbi
Date: Sat Mar 15 02:48:42 2008
New Revision: 1127
URL: http://svn.gnome.org/viewvc/vala?rev=1127&view=rev
Log:
2008-03-15 Juerg Billeter <j bitron ch>
* gobject/valaccodegenerator.vala,
gobject/valaccodegeneratormemberaccess.vala,
gobject/valaccodegeneratormethod.vala: fix runtime crash when
using nullable struct parameters,
patch by Alberto Ruiz, fixes bug 514864
Modified:
trunk/ChangeLog
trunk/gobject/valaccodegenerator.vala
trunk/gobject/valaccodegeneratormemberaccess.vala
trunk/gobject/valaccodegeneratormethod.vala
Modified: trunk/gobject/valaccodegenerator.vala
==============================================================================
--- trunk/gobject/valaccodegenerator.vala (original)
+++ trunk/gobject/valaccodegenerator.vala Sat Mar 15 02:48:42 2008
@@ -600,7 +600,6 @@
var st = (Struct) p.type_reference.data_type;
if (!st.is_simple_type () && !p.type_reference.is_ref && !p.type_reference.is_out) {
ctypename += "*";
- cname = "_%s_p".printf (p.name);
}
}
@@ -3031,6 +3030,9 @@
if (expr.operator == BinaryOperator.EQUALITY ||
expr.operator == BinaryOperator.INEQUALITY) {
+ var left_type_as_struct = expr.left.static_type.data_type as Struct;
+ var right_type_as_struct = expr.right.static_type.data_type as Struct;
+
if (expr.left.static_type.data_type is Class && ((Class) expr.left.static_type.data_type).is_subtype_of (gobject_type) &&
expr.right.static_type.data_type is Class && ((Class) expr.right.static_type.data_type).is_subtype_of (gobject_type)) {
var left_cl = (Class) expr.left.static_type.data_type;
@@ -3043,6 +3045,10 @@
cright = new InstanceCast (cright, left_cl);
}
}
+ } else if (left_type_as_struct != null && expr.right.static_type is NullType) {
+ cleft = new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, cleft);
+ } else if (right_type_as_struct != null && expr.left.static_type is NullType) {
+ cright = new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, cright);
}
}
Modified: trunk/gobject/valaccodegeneratormemberaccess.vala
==============================================================================
--- trunk/gobject/valaccodegeneratormemberaccess.vala (original)
+++ trunk/gobject/valaccodegeneratormemberaccess.vala Sat Mar 15 02:48:42 2008
@@ -178,7 +178,10 @@
if (p.name == "this") {
expr.ccodenode = pub_inst;
} else {
- if (p.type_reference.is_out || p.type_reference.is_ref) {
+ var type_as_struct = p.type_reference.data_type as Struct;
+ if (p.type_reference.is_out
+ || p.type_reference.is_ref
+ || (type_as_struct != null && !type_as_struct.is_simple_type ())) {
expr.ccodenode = new CCodeIdentifier ("(*%s)".printf (p.name));
} else {
// Property setters of non simple structs shall replace all occurences
Modified: trunk/gobject/valaccodegeneratormethod.vala
==============================================================================
--- trunk/gobject/valaccodegeneratormethod.vala (original)
+++ trunk/gobject/valaccodegeneratormethod.vala Sat Mar 15 02:48:42 2008
@@ -312,13 +312,6 @@
var a = new CCodeAssignment (new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, new CCodeIdentifier (param.name)), new CCodeConstant ("NULL"));
cinit.append (new CCodeExpressionStatement (a));
}
- } else if (t is Struct) {
- var st = (Struct) t;
- if (!st.is_simple_type () && !param.type_reference.is_ref && !param.type_reference.is_out) {
- var cdecl = new CCodeDeclaration (param.type_reference.get_cname ());
- cdecl.add_declarator (new CCodeVariableDeclarator.with_initializer (param.name, new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, new CCodeIdentifier ("_%s_p".printf (param.name)))));
- cinit.append (cdecl);
- }
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]