From: Rico Tzschichholz Date: Mon, 16 Apr 2018 08:06:23 +0000 (+0200) Subject: Revert "codegen: Handle property initializers of non-gobject classes" X-Git-Tag: 0.41.90~176 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3b8c0ba8dacbc6d6de0cd10eda949f4a1823b478;p=thirdparty%2Fvala.git Revert "codegen: Handle property initializers of non-gobject classes" This reverts commit 9b3eedbe81718a7a0bd9e5a97e4796e0eaa65e7f. --- diff --git a/codegen/valagobjectmodule.vala b/codegen/valagobjectmodule.vala index 11aa6e686..82eba0774 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 c227ac1e7..daad49cd1 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 aa809c182..22fcfafdd 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); }