]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegenerator: Add source_reference parameter to CodeGenerator.store_*()
authorRico Tzschichholz <ricotz@ubuntu.com>
Mon, 19 Jun 2017 12:43:14 +0000 (14:43 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Mon, 19 Jun 2017 18:34:44 +0000 (20:34 +0200)
codegen/valaccodeassignmentmodule.vala
codegen/valaccodebasemodule.vala
codegen/valaccodemethodcallmodule.vala
vala/valaassignment.vala
vala/valacodegenerator.vala

index 76004f7856d52963585377e4b6e1b84c410d114a..718cd71a1d3ebe1b1dbf17a72897d2ef09de7f3b 100644 (file)
@@ -37,7 +37,7 @@ public class Vala.CCodeAssignmentModule : CCodeMemberAccessModule {
                }
 
                if (assignment.operator == AssignmentOperator.SIMPLE) {
-                       store_value (assignment.left.target_value, assignment.right.target_value);
+                       store_value (assignment.left.target_value, assignment.right.target_value, assignment.source_reference);
                } else {
                        CCodeAssignmentOperator cop;
                        if (assignment.operator == AssignmentOperator.BITWISE_OR) {
@@ -94,7 +94,7 @@ public class Vala.CCodeAssignmentModule : CCodeMemberAccessModule {
                }
        }
 
-       public override void store_value (TargetValue lvalue, TargetValue value) {
+       public override void store_value (TargetValue lvalue, TargetValue value, SourceReference? source_reference = null) {
                var array_type = lvalue.value_type as ArrayType;
 
                if (array_type != null && array_type.fixed_length) {
@@ -162,16 +162,16 @@ public class Vala.CCodeAssignmentModule : CCodeMemberAccessModule {
                }
        }
 
-       public override void store_local (LocalVariable local, TargetValue value, bool initializer) {
+       public override void store_local (LocalVariable local, TargetValue value, bool initializer, SourceReference? source_reference = null) {
                if (!initializer && requires_destroy (local.variable_type)) {
                        /* unref old value */
                        ccode.add_expression (destroy_local (local));
                }
 
-               store_value (get_local_cvalue (local), value);
+               store_value (get_local_cvalue (local), value, source_reference);
        }
 
-       public override void store_parameter (Parameter param, TargetValue _value, bool capturing_parameter = false) {
+       public override void store_parameter (Parameter param, TargetValue _value, bool capturing_parameter = false, SourceReference? source_reference = null) {
                var value = _value;
 
                bool capturing_parameter_in_coroutine = capturing_parameter && is_in_coroutine ();
@@ -205,10 +205,10 @@ public class Vala.CCodeAssignmentModule : CCodeMemberAccessModule {
                        ccode.add_expression (destroy_parameter (param));
                }
 
-               store_value (get_parameter_cvalue (param), value);
+               store_value (get_parameter_cvalue (param), value, source_reference);
        }
 
-       public override void store_field (Field field, TargetValue? instance, TargetValue value) {
+       public override void store_field (Field field, TargetValue? instance, TargetValue value, SourceReference? source_reference = null) {
                var lvalue = get_field_cvalue (field, instance);
                var type = lvalue.value_type;
                if (lvalue.actual_value_type != null) {
@@ -219,6 +219,6 @@ public class Vala.CCodeAssignmentModule : CCodeMemberAccessModule {
                        ccode.add_expression (destroy_field (field, instance));
                }
 
-               store_value (lvalue, value);
+               store_value (lvalue, value, source_reference);
        }
 }
index 1c3bdee1d8fcc02f3e0c27b8d6f719395c12dc2e..8d3469ebe467306b5b59dfd375bcd1c73c2e2226 100644 (file)
@@ -2504,7 +2504,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
         */
        public TargetValue store_temp_value (TargetValue initializer, CodeNode node_reference, bool? value_owned = null) {
                var lvalue = create_temp_value (initializer.value_type, false, node_reference, value_owned);
-               store_value (lvalue, initializer);
+               store_value (lvalue, initializer, node_reference.source_reference);
                return load_temp_value (lvalue);
        }
 
@@ -4023,7 +4023,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
        public abstract TargetValue load_this_parameter (TypeSymbol sym);
 
-       public abstract void store_value (TargetValue lvalue, TargetValue value);
+       public abstract void store_value (TargetValue lvalue, TargetValue value, SourceReference? source_reference = null);
 
        public virtual string get_delegate_target_cname (string delegate_cname) {
                assert_not_reached ();
@@ -4223,7 +4223,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                                ccode.add_else ();
 
                                // g_value_init/copy must not be called for uninitialized values
-                               store_value (temp_value, value);
+                               store_value (temp_value, value, node.source_reference);
                                ccode.close ();
                        } else {
                                ccode.add_expression (copy_call);
@@ -5707,7 +5707,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                                } else {
                                        var temp_value = create_temp_value (type, false, node);
                                        temp_ref_values.insert (0, ((GLibValue) temp_value).copy ());
-                                       store_value (temp_value, result);
+                                       store_value (temp_value, result, node.source_reference);
                                        result.cvalue = get_cvalue_ (temp_value);
                                }
                        }
index 69d68026f6acee6c3d34155a261149b1442d303f..67a54c92b10cfebe68bfd633e4053a0ae82c09ce 100644 (file)
@@ -839,7 +839,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
                        }
 
                        // assign new value
-                       store_value (unary.inner.target_value, transform_value (unary.target_value, unary.inner.value_type, arg));
+                       store_value (unary.inner.target_value, transform_value (unary.target_value, unary.inner.value_type, arg), expr.source_reference);
 
                        // handle out null terminated arrays
                        if (param != null && get_ccode_array_null_terminated (param)) {
index 88e45ffda896b4ebcb8fb4f2b37cd95297b7c1f0..64b2395a3dad9e23af16300eea5324ea72fc7d6b 100644 (file)
@@ -495,11 +495,11 @@ public class Vala.Assignment : Expression {
                                var new_value = right.target_value;
 
                                if (local != null) {
-                                       codegen.store_local (local, new_value, false);
+                                       codegen.store_local (local, new_value, false, source_reference);
                                } else if (param != null) {
-                                       codegen.store_parameter (param, new_value);
+                                       codegen.store_parameter (param, new_value, false, source_reference);
                                } else if (field != null) {
-                                       codegen.store_field (field, instance && ma.inner != null ? ma.inner.target_value : null, new_value);
+                                       codegen.store_field (field, instance && ma.inner != null ? ma.inner.target_value : null, new_value, source_reference);
                                }
 
                                if (!(parent_node is ExpressionStatement)) {
index 9887a4962db20540429383afc408e4fafea1da85..cea0db8f68bb4e90e7e72e5406d12e9520bfc58e 100644 (file)
@@ -34,13 +34,13 @@ public abstract class Vala.CodeGenerator : CodeVisitor {
 
        public abstract TargetValue load_local (LocalVariable local);
 
-       public abstract void store_local (LocalVariable local, TargetValue value, bool initializer);
+       public abstract void store_local (LocalVariable local, TargetValue value, bool initializer, SourceReference? source_reference = null);
 
        public abstract TargetValue load_parameter (Parameter param);
 
-       public abstract void store_parameter (Parameter param, TargetValue value, bool capturing_parameter = false);
+       public abstract void store_parameter (Parameter param, TargetValue value, bool capturing_parameter = false, SourceReference? source_reference = null);
 
        public abstract TargetValue load_field (Field field, TargetValue? instance);
 
-       public abstract void store_field (Field field, TargetValue? instance, TargetValue value);
+       public abstract void store_field (Field field, TargetValue? instance, TargetValue value, SourceReference? source_reference = null);
 }