diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2022-02-06 08:57:35 +0100 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2022-02-06 12:27:54 +0100 |
commit | 406b3a6de4bdd22f6495f85cae44914a3c6d2027 (patch) | |
tree | 27bde598f62b716ad60881c1b55bc7ee8dd6c3a3 /codegen | |
parent | eb7aac385b168cc7b6bc06c387b7f3ac7942490a (diff) | |
download | vala-406b3a6de4bdd22f6495f85cae44914a3c6d2027.tar.gz |
codegen: Stop generating wrappers for dynamic property access
Diffstat (limited to 'codegen')
-rw-r--r-- | codegen/valaccodebasemodule.vala | 36 | ||||
-rw-r--r-- | codegen/valaccodememberaccessmodule.vala | 10 | ||||
-rw-r--r-- | codegen/valagobjectmodule.vala | 69 |
3 files changed, 13 insertions, 102 deletions
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index edf72b5a6..65a6df560 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -6456,19 +6456,15 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { var set_func = "g_object_set"; - if (!get_ccode_no_accessor_method (prop)) { - if (prop is DynamicProperty) { - set_func = get_dynamic_property_setter_cname ((DynamicProperty) prop); - } else { - generate_property_accessor_declaration (base_prop.set_accessor, cfile); - set_func = get_ccode_name (base_prop.set_accessor); - - if (!prop.external && prop.external_package) { - // internal VAPI properties - // only add them once per source file - if (add_generated_external_symbol (prop)) { - visit_property (prop); - } + if (!get_ccode_no_accessor_method (prop) && !(prop is DynamicProperty)) { + generate_property_accessor_declaration (base_prop.set_accessor, cfile); + set_func = get_ccode_name (base_prop.set_accessor); + + if (!prop.external && prop.external_package) { + // internal VAPI properties + // only add them once per source file + if (add_generated_external_symbol (prop)) { + visit_property (prop); } } } @@ -6491,7 +6487,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { ccall.add_argument (cinstance); } - if (get_ccode_no_accessor_method (prop)) { + if (get_ccode_no_accessor_method (prop) || prop is DynamicProperty) { /* property name is second argument of g_object_set */ ccall.add_argument (get_property_canonical_cconstant (prop)); } @@ -6525,7 +6521,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { } } - if (get_ccode_no_accessor_method (prop)) { + if (get_ccode_no_accessor_method (prop) || prop is DynamicProperty) { ccall.add_argument (new CCodeConstant ("NULL")); } @@ -6821,16 +6817,6 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { public virtual void register_dbus_info (CCodeBlock block, ObjectTypeSymbol bindable) { } - public virtual string get_dynamic_property_getter_cname (DynamicProperty node) { - Report.error (node.source_reference, "dynamic properties are not supported for %s", node.dynamic_type.to_string ()); - return ""; - } - - public virtual string get_dynamic_property_setter_cname (DynamicProperty node) { - Report.error (node.source_reference, "dynamic properties are not supported for %s", node.dynamic_type.to_string ()); - return ""; - } - public virtual string get_dynamic_signal_cname (DynamicSignal node) { return ""; } diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala index 1603dff01..6f01e8a0b 100644 --- a/codegen/valaccodememberaccessmodule.vala +++ b/codegen/valaccodememberaccessmodule.vala @@ -246,14 +246,8 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule { inst = new CCodeMemberAccess.pointer (inst, "priv"); } set_cvalue (expr, new CCodeMemberAccess.pointer (inst, get_ccode_name (prop.field))); - } else if (!get_ccode_no_accessor_method (prop)) { - string getter_cname; - if (prop is DynamicProperty) { - getter_cname = get_dynamic_property_getter_cname ((DynamicProperty) prop); - } else { - getter_cname = get_ccode_name (prop.get_accessor); - } - var ccall = new CCodeFunctionCall (new CCodeIdentifier (getter_cname)); + } else if (!get_ccode_no_accessor_method (prop) && !(prop is DynamicProperty)) { + var ccall = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_name (prop.get_accessor))); if (prop.binding == MemberBinding.INSTANCE) { if (prop.parent_symbol is Struct && !((Struct) prop.parent_symbol).is_simple_type ()) { diff --git a/codegen/valagobjectmodule.vala b/codegen/valagobjectmodule.vala index 114692139..638aab367 100644 --- a/codegen/valagobjectmodule.vala +++ b/codegen/valagobjectmodule.vala @@ -24,7 +24,6 @@ public class Vala.GObjectModule : GTypeModule { - int dynamic_property_id; int signal_wrapper_id; public override void visit_class (Class cl) { @@ -654,74 +653,6 @@ public class Vala.GObjectModule : GTypeModule { pop_line (); } - public override string get_dynamic_property_getter_cname (DynamicProperty prop) { - if (prop.dynamic_type.type_symbol == null - || !prop.dynamic_type.type_symbol.is_subtype_of (gobject_type)) { - return base.get_dynamic_property_getter_cname (prop); - } - - string getter_cname = "_dynamic_get_%s%d".printf (prop.name, dynamic_property_id++); - - var func = new CCodeFunction (getter_cname, get_ccode_name (prop.property_type)); - func.modifiers |= CCodeModifiers.STATIC | CCodeModifiers.INLINE; - - func.add_parameter (new CCodeParameter ("obj", get_ccode_name (prop.dynamic_type))); - - push_function (func); - - ccode.add_declaration (get_ccode_name (prop.property_type), new CCodeVariableDeclarator ("result")); - - var call = new CCodeFunctionCall (new CCodeIdentifier ("g_object_get")); - call.add_argument (new CCodeIdentifier ("obj")); - call.add_argument (get_property_canonical_cconstant (prop)); - call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("result"))); - call.add_argument (new CCodeConstant ("NULL")); - - ccode.add_expression (call); - - ccode.add_return (new CCodeIdentifier ("result")); - - pop_function (); - - // append to C source file - cfile.add_function_declaration (func); - cfile.add_function (func); - - return getter_cname; - } - - public override string get_dynamic_property_setter_cname (DynamicProperty prop) { - if (prop.dynamic_type.type_symbol == null - || !prop.dynamic_type.type_symbol.is_subtype_of (gobject_type)) { - return base.get_dynamic_property_setter_cname (prop); - } - - string setter_cname = "_dynamic_set_%s%d".printf (prop.name, dynamic_property_id++); - - var func = new CCodeFunction (setter_cname, "void"); - func.modifiers |= CCodeModifiers.STATIC | CCodeModifiers.INLINE; - func.add_parameter (new CCodeParameter ("obj", get_ccode_name (prop.dynamic_type))); - func.add_parameter (new CCodeParameter ("value", get_ccode_name (prop.property_type))); - - push_function (func); - - var call = new CCodeFunctionCall (new CCodeIdentifier ("g_object_set")); - call.add_argument (new CCodeIdentifier ("obj")); - call.add_argument (get_property_canonical_cconstant (prop)); - call.add_argument (new CCodeIdentifier ("value")); - call.add_argument (new CCodeConstant ("NULL")); - - ccode.add_expression (call); - - pop_function (); - - // append to C source file - cfile.add_function_declaration (func); - cfile.add_function (func); - - return setter_cname; - } - public override string get_dynamic_signal_cname (DynamicSignal node) { return "dynamic_%s%d_".printf (node.name, signal_wrapper_id++); } |