vala r1628 - in trunk: . gobject vala
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r1628 - in trunk: . gobject vala
- Date: Sun, 22 Jun 2008 19:04:49 +0000 (UTC)
Author: juergbi
Date: Sun Jun 22 19:04:49 2008
New Revision: 1628
URL: http://svn.gnome.org/viewvc/vala?rev=1628&view=rev
Log:
2008-06-22 JÃrg Billeter <j bitron ch>
* vala/valasemanticanalyzer.vala:
* gobject/valaccodeinvocationexpressionbinding.vala:
Fix pointer member access to value types, fixes bug 539337
Modified:
trunk/ChangeLog
trunk/gobject/valaccodeinvocationexpressionbinding.vala
trunk/vala/valasemanticanalyzer.vala
Modified: trunk/gobject/valaccodeinvocationexpressionbinding.vala
==============================================================================
--- trunk/gobject/valaccodeinvocationexpressionbinding.vala (original)
+++ trunk/gobject/valaccodeinvocationexpressionbinding.vala Sun Jun 22 19:04:49 2008
@@ -75,11 +75,10 @@
CCodeExpression instance;
if (m != null && m.binding == MemberBinding.INSTANCE) {
instance = (CCodeExpression) ma.inner.ccodenode;
- var instance_expression_type = ma.inner.value_type;
- if (instance_expression_type.data_type is Struct
- && !((Struct) instance_expression_type.data_type).is_simple_type ()
- && instance_expression_type.data_type != codegen.current_type_symbol) {
+ var st = m.parent_symbol as Struct;
+ if (st != null && !st.is_simple_type ()) {
+ // we need to pass struct instance by reference
var unary = instance as CCodeUnaryExpression;
if (unary != null && unary.operator == CCodeUnaryOperator.POINTER_INDIRECTION) {
// *expr => expr
@@ -91,7 +90,7 @@
// (tmp = expr, &tmp)
var ccomma = new CCodeCommaExpression ();
- var temp_var = codegen.get_temp_variable (instance_expression_type);
+ var temp_var = codegen.get_temp_variable (ma.inner.target_type);
codegen.temp_vars.insert (0, temp_var);
ccomma.append_expression (new CCodeAssignment (new CCodeIdentifier (temp_var.name), instance));
ccomma.append_expression (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier (temp_var.name)));
Modified: trunk/vala/valasemanticanalyzer.vala
==============================================================================
--- trunk/vala/valasemanticanalyzer.vala (original)
+++ trunk/vala/valasemanticanalyzer.vala Sun Jun 22 19:04:49 2008
@@ -1599,6 +1599,16 @@
return;
}
+ if (expr.pointer_member_access) {
+ var pointer_type = expr.inner.value_type as PointerType;
+ if (pointer_type != null && pointer_type.base_type is ValueType) {
+ // transform foo->bar to (*foo).bar
+ expr.inner = new PointerIndirection (expr.inner, expr.source_reference);
+ expr.inner.accept (this);
+ expr.pointer_member_access = false;
+ }
+ }
+
if (expr.inner is MemberAccess) {
var ma = (MemberAccess) expr.inner;
if (ma.prototype_access) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]