[vala] Revert "codegen: Handle property initializers of non-gobject classes"
- From: Rico Tzschichholz <ricotz src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala] Revert "codegen: Handle property initializers of non-gobject classes"
- Date: Mon, 16 Apr 2018 08:07:14 +0000 (UTC)
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]