From: Luca Bruno Date: Sun, 6 Mar 2011 15:38:32 +0000 (+0100) Subject: codegen: Use TargetValue instead of Expression for field instance X-Git-Tag: 0.11.7~21 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=863ff269d959ff0a8b97701814119376f39a26d3;p=thirdparty%2Fvala.git codegen: Use TargetValue instead of Expression for field instance --- diff --git a/codegen/valaccodeassignmentmodule.vala b/codegen/valaccodeassignmentmodule.vala index 83552a6f9..b22cbafb0 100644 --- a/codegen/valaccodeassignmentmodule.vala +++ b/codegen/valaccodeassignmentmodule.vala @@ -233,7 +233,7 @@ public class Vala.CCodeAssignmentModule : CCodeMemberAccessModule { store_variable (param, get_parameter_cvalue (param), value, false); } - public override void store_field (Field field, Expression? instance, TargetValue value) { + public override void store_field (Field field, TargetValue? instance, TargetValue value) { if (requires_destroy (field.variable_type)) { /* unref old value */ ccode.add_expression (destroy_field (field, instance)); diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 0522c03e4..3a464c43d 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -1012,7 +1012,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { set_cvalue (this_access, new CCodeIdentifier ("self")); } - ccode.add_expression (destroy_field (f, this_access)); + ccode.add_expression (destroy_field (f, this_access.target_value)); pop_context (); } @@ -2981,7 +2981,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { return destroy_variable (param, get_parameter_cvalue (param)); } - public CCodeExpression destroy_field (Field field, Expression? instance) { + public CCodeExpression destroy_field (Field field, TargetValue? instance) { return destroy_variable (field, get_field_cvalue (field, instance)); } @@ -3719,7 +3719,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { public abstract TargetValue get_parameter_cvalue (Parameter param); - public abstract TargetValue get_field_cvalue (Field field, Expression? instance); + public abstract TargetValue get_field_cvalue (Field field, TargetValue? instance); public virtual string get_delegate_target_cname (string delegate_cname) { assert_not_reached (); @@ -5760,7 +5760,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { this_access.value_type = get_data_type_for_symbol ((TypeSymbol) f.parent_symbol); set_cvalue (this_access, new CCodeIdentifier ("(*self)")); - ccode.add_expression (destroy_field (f, this_access)); + ccode.add_expression (destroy_field (f, this_access.target_value)); } } } diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala index 7ddad75bd..991319dc9 100644 --- a/codegen/valaccodememberaccessmodule.vala +++ b/codegen/valaccodememberaccessmodule.vala @@ -121,7 +121,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule { set_cvalue (expr, get_array_length_cexpression (expr.inner, 1)); } else if (expr.symbol_reference is Field) { var field = (Field) expr.symbol_reference; - expr.target_value = load_field (field, expr.inner); + expr.target_value = load_field (field, expr.inner != null ? expr.inner.target_value : null); } else if (expr.symbol_reference is EnumValue) { var ev = (EnumValue) expr.symbol_reference; @@ -492,7 +492,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule { } /* Returns lvalue access to the given field */ - public override TargetValue get_field_cvalue (Field field, Expression? instance) { + public override TargetValue get_field_cvalue (Field field, TargetValue? instance) { var result = new GLibValue (field.variable_type.copy ()); var array_type = field.variable_type as ArrayType; @@ -501,7 +501,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule { CCodeExpression pub_inst = null; if (instance != null) { - pub_inst = get_cvalue (instance); + pub_inst = get_cvalue_ (instance); } var instance_target_type = get_data_type_for_symbol ((TypeSymbol) field.parent_symbol); @@ -586,7 +586,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule { } else { // Accessing the field of an instance var k = new CCodeFunctionCall (new CCodeIdentifier ("G_OBJECT_GET_CLASS")); - k.add_argument (get_cvalue (instance)); + k.add_argument (get_cvalue_ (instance)); klass = k; } cast.add_argument (klass); @@ -679,7 +679,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule { } /* Returns unowned access to the given field */ - public override TargetValue load_field (Field field, Expression? instance) { + public override TargetValue load_field (Field field, TargetValue? instance) { return load_variable (field, get_field_cvalue (field, instance)); } } diff --git a/codegen/valadovaassignmentmodule.vala b/codegen/valadovaassignmentmodule.vala index e2123144a..831baa683 100644 --- a/codegen/valadovaassignmentmodule.vala +++ b/codegen/valadovaassignmentmodule.vala @@ -149,7 +149,7 @@ public class Vala.DovaAssignmentModule : DovaMemberAccessModule { store_variable (param, get_parameter_cvalue (param), value, false); } - public override void store_field (Field field, Expression? instance, TargetValue value) { + public override void store_field (Field field, TargetValue? instance, TargetValue value) { store_variable (field, get_field_cvalue (field, instance), value, false); } } diff --git a/codegen/valadovamemberaccessmodule.vala b/codegen/valadovamemberaccessmodule.vala index 8538db037..20629fb88 100644 --- a/codegen/valadovamemberaccessmodule.vala +++ b/codegen/valadovamemberaccessmodule.vala @@ -98,7 +98,7 @@ public abstract class Vala.DovaMemberAccessModule : DovaControlFlowModule { set_cvalue (expr, ccall); } else if (expr.symbol_reference is Field) { var f = (Field) expr.symbol_reference; - expr.target_value = load_field (f, expr.inner); + expr.target_value = load_field (f, expr.inner != null ? expr.inner.target_value : null); } else if (expr.symbol_reference is EnumValue) { var ev = (EnumValue) expr.symbol_reference; @@ -243,14 +243,14 @@ public abstract class Vala.DovaMemberAccessModule : DovaControlFlowModule { return result; } - public TargetValue get_field_cvalue (Field f, Expression? instance) { + public TargetValue get_field_cvalue (Field f, TargetValue? instance) { var result = new DovaValue (f.variable_type); if (f.binding == MemberBinding.INSTANCE) { CCodeExpression pub_inst = null; if (instance != null) { - pub_inst = get_cvalue (instance); + pub_inst = get_cvalue_ (instance); } var instance_target_type = get_data_type_for_symbol ((TypeSymbol) f.parent_symbol); @@ -295,7 +295,7 @@ public abstract class Vala.DovaMemberAccessModule : DovaControlFlowModule { return load_variable (param, get_parameter_cvalue (param)); } - public override TargetValue load_field (Field field, Expression? instance) { + public override TargetValue load_field (Field field, TargetValue? instance) { return load_variable (field, get_field_cvalue (field, instance)); } } diff --git a/vala/valaassignment.vala b/vala/valaassignment.vala index 7d34ce501..342dbb43a 100644 --- a/vala/valaassignment.vala +++ b/vala/valaassignment.vala @@ -486,7 +486,7 @@ public class Vala.Assignment : Expression { } else if (param != null) { codegen.store_parameter (param, new_value); } else if (field != null) { - codegen.store_field (field, instance ? ma.inner : null, new_value); + codegen.store_field (field, instance && ma.inner != null ? ma.inner.target_value : null, new_value); } // when load_variable is changed to use temporary @@ -497,7 +497,7 @@ public class Vala.Assignment : Expression { } else if (param != null) { target_value = codegen.load_parameter (param); } else if (field != null) { - target_value = codegen.load_field (field, instance ? ma.inner : null); + target_value = codegen.load_field (field, instance && ma.inner != null ? ma.inner.target_value : null); } codegen.visit_expression (this); diff --git a/vala/valacodegenerator.vala b/vala/valacodegenerator.vala index a7680324c..f76ea2013 100644 --- a/vala/valacodegenerator.vala +++ b/vala/valacodegenerator.vala @@ -42,7 +42,7 @@ public abstract class Vala.CodeGenerator : CodeVisitor { public abstract void store_parameter (Parameter param, TargetValue value); - public abstract TargetValue load_field (Field field, Expression? instance); + public abstract TargetValue load_field (Field field, TargetValue? instance); - public abstract void store_field (Field field, Expression? instance, TargetValue value); + public abstract void store_field (Field field, TargetValue? instance, TargetValue value); }