[vala] Revert "codegen: Handle property initializers of non-gobject classes"



commit 3b8c0ba8dacbc6d6de0cd10eda949f4a1823b478
Author: Rico Tzschichholz <ricotz ubuntu com>
Date:   Mon Apr 16 10:06:23 2018 +0200

    Revert "codegen: Handle property initializers of non-gobject classes"
    
    This reverts commit 9b3eedbe81718a7a0bd9e5a97e4796e0eaa65e7f.

 codegen/valagobjectmodule.vala |   21 +++++++++++++++++++++
 codegen/valagtypemodule.vala   |   34 ----------------------------------
 tests/objects/bug701978.vala   |   13 -------------
 3 files changed, 21 insertions(+), 47 deletions(-)
---
diff --git a/codegen/valagobjectmodule.vala b/codegen/valagobjectmodule.vala
index 11aa6e6..82eba07 100644
--- a/codegen/valagobjectmodule.vala
+++ b/codegen/valagobjectmodule.vala
@@ -688,6 +688,27 @@ public class Vala.GObjectModule : GTypeModule {
 
                if (is_gobject_property (prop) && prop.parent_symbol is Class) {
                        prop_enum.add_value (new CCodeEnumValue ("%s_PROPERTY".printf 
(get_ccode_upper_case_name (prop))));
+
+                       if (prop.initializer != null && prop.set_accessor != null && 
!prop.set_accessor.automatic_body) {
+                               // generate a custom initializer if it couldn't be done at class_init time
+                               bool has_spec_initializer = prop.property_type.data_type is Enum;
+                               if (!has_spec_initializer && prop.property_type.data_type is Struct) {
+                                       var param_spec_func = get_ccode_param_spec_function 
(prop.property_type.data_type);
+                                       has_spec_initializer = param_spec_func != "g_param_spec_boxed";
+                               }
+                               if (!has_spec_initializer) {
+                                       push_context (instance_init_context);
+
+                                       prop.initializer.emit (this);
+
+                                       var inst_ma = new MemberAccess.simple ("this");
+                                       inst_ma.target_value = new GLibValue (get_data_type_for_symbol 
((Class) prop.parent_symbol), new CCodeIdentifier ("self"), true);
+                                       store_property (prop, inst_ma, prop.initializer.target_value);
+
+                                       temp_ref_values.clear ();
+                                       pop_context ();
+                               }
+                       }
                }
        }
 
diff --git a/codegen/valagtypemodule.vala b/codegen/valagtypemodule.vala
index c227ac1..daad49c 100644
--- a/codegen/valagtypemodule.vala
+++ b/codegen/valagtypemodule.vala
@@ -2392,40 +2392,6 @@ public class Vala.GTypeModule : GErrorModule {
                        Report.error (prop.source_reference, "Property 'type' not allowed");
                        return;
                }
-
-               if (prop.initializer != null) {
-                       if (cl == null || cl.is_compact) {
-                               Report.warning (prop.source_reference, "Only properties in non-compact 
classes are allowed to have initializers");
-                       } else if (prop.set_accessor != null && !prop.set_accessor.automatic_body) {
-                               // generate a custom initializer if it couldn't be done at class_init time
-                               bool has_spec_initializer = prop.property_type.data_type is Enum;
-                               if (!has_spec_initializer && prop.property_type.data_type is Struct) {
-                                       var param_spec_func = get_ccode_param_spec_function 
(prop.property_type.data_type);
-                                       has_spec_initializer = param_spec_func != "g_param_spec_boxed";
-                               }
-                               if (!has_spec_initializer) {
-                                       push_context (instance_init_context);
-
-                                       prop.initializer.emit (this);
-
-                                       var inst_ma = new MemberAccess.simple ("this");
-                                       inst_ma.target_value = new GLibValue (get_data_type_for_symbol (cl), 
new CCodeIdentifier ("self"), true);
-
-                                       var prop_init_value = (GLibValue) prop.initializer.target_value;
-                                       if (prop_init_value.delegate_target_cvalue == null) {
-                                               prop_init_value.delegate_target_cvalue = new CCodeConstant 
("NULL");
-                                       }
-                                       if (prop_init_value.delegate_target_destroy_notify_cvalue == null) {
-                                               prop_init_value.delegate_target_destroy_notify_cvalue = new 
CCodeConstant ("NULL");
-                                       }
-                                       store_property (prop, inst_ma, prop_init_value);
-
-                                       temp_ref_values.clear ();
-                                       pop_context ();
-                               }
-                       }
-               }
-
                base.visit_property (prop);
        }
 
diff --git a/tests/objects/bug701978.vala b/tests/objects/bug701978.vala
index aa809c1..22fcfaf 100644
--- a/tests/objects/bug701978.vala
+++ b/tests/objects/bug701978.vala
@@ -16,20 +16,7 @@ public class Bar : Object {
        }
 }
 
-public class Baz {
-       private Foo _foo;
-
-       public Foo foo {
-               get { return _foo; }
-               set { _foo = value; }
-               default = Foo ();
-       }
-}
-
 void main () {
        var bar = new Bar();
        assert (bar.foo.val == 55);
-
-       var baz = new Baz();
-       assert (baz.foo.val == 55);
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]