summaryrefslogtreecommitdiff
path: root/codegen
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2022-02-06 08:57:35 +0100
committerRico Tzschichholz <ricotz@ubuntu.com>2022-02-06 12:27:54 +0100
commit406b3a6de4bdd22f6495f85cae44914a3c6d2027 (patch)
tree27bde598f62b716ad60881c1b55bc7ee8dd6c3a3 /codegen
parenteb7aac385b168cc7b6bc06c387b7f3ac7942490a (diff)
downloadvala-406b3a6de4bdd22f6495f85cae44914a3c6d2027.tar.gz
codegen: Stop generating wrappers for dynamic property access
Diffstat (limited to 'codegen')
-rw-r--r--codegen/valaccodebasemodule.vala36
-rw-r--r--codegen/valaccodememberaccessmodule.vala10
-rw-r--r--codegen/valagobjectmodule.vala69
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++);
}