]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Add CCodeDynamicPropertyModule
authorJürg Billeter <j@bitron.ch>
Fri, 24 Oct 2008 13:59:42 +0000 (13:59 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Fri, 24 Oct 2008 13:59:42 +0000 (13:59 +0000)
2008-10-24  Jürg Billeter  <j@bitron.ch>

* vala/valacodegenerator.vala:
* vala/valadynamicproperty.vala:
* gobject/Makefile.am:
* gobject/valaccodedynamicpropertymodule.vala:
* gobject/valaccodegenerator.vala:
* gobject/valaccodememberaccessmodule.vala:
* gobject/valaccodemodule.vala:

Add CCodeDynamicPropertyModule

svn path=/trunk/; revision=1895

ChangeLog
gobject/Makefile.am
gobject/valaccodedynamicpropertymodule.vala [moved from gobject/valaccodedynamicpropertybinding.vala with 86% similarity]
gobject/valaccodegenerator.vala
gobject/valaccodememberaccessmodule.vala
gobject/valaccodemodule.vala
vala/valacodegenerator.vala
vala/valadynamicproperty.vala

index 78f7ce86d9d1f930b6fdf0c2db0e88946721bf4a..a9779379e3cca9d39a0899db63d3266469dff2e5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2008-10-24  Jürg Billeter  <j@bitron.ch>
+
+       * vala/valacodegenerator.vala:
+       * vala/valadynamicproperty.vala:
+       * gobject/Makefile.am:
+       * gobject/valaccodedynamicpropertymodule.vala:
+       * gobject/valaccodegenerator.vala:
+       * gobject/valaccodememberaccessmodule.vala:
+       * gobject/valaccodemodule.vala:
+
+       Add CCodeDynamicPropertyModule
+
 2008-10-24  Jürg Billeter  <j@bitron.ch>
 
        * gobject/Makefile.am:
index bb77233b5772ffb0f6f53ae7506507a17296d45c..cb50fe68fac21248d4a5d5e595b480fe416a808d 100644 (file)
@@ -17,7 +17,7 @@ libvala_la_VALASOURCES = \
        valaccodebasemodule.vala \
        valaccodebinding.vala \
        valaccodecompiler.vala \
-       valaccodedynamicpropertybinding.vala \
+       valaccodedynamicpropertymodule.vala \
        valaccodedynamicsignalbinding.vala \
        valaccodeelementaccessmodule.vala \
        valaccodegenerator.vala \
similarity index 86%
rename from gobject/valaccodedynamicpropertybinding.vala
rename to gobject/valaccodedynamicpropertymodule.vala
index c6170eae424946cde9d0d45b61ecbd0db1e96e1d..9490c68c90fb65376b95a9348b5525a6c517f35f 100644 (file)
@@ -1,4 +1,4 @@
-/* valaccodedynamicpropertybinding.vala
+/* valaccodedynamicpropertymodule.vala
  *
  * Copyright (C) 2008  Jürg Billeter
  *
@@ -26,25 +26,15 @@ using Gee;
 /**
  * The link between a dynamic property and generated code.
  */
-public class Vala.CCodeDynamicPropertyBinding : CCodeBinding {
-       public Property node { get; set; }
+public class Vala.CCodeDynamicPropertyModule : CCodeModule {
+       int dynamic_property_id;
 
-       string? getter_cname;
-       string? setter_cname;
-
-       static int dynamic_property_id;
-
-       public CCodeDynamicPropertyBinding (CCodeGenerator codegen, DynamicProperty property) {
-               this.node = property;
-               this.codegen = codegen;
+       public CCodeDynamicPropertyModule (CCodeGenerator codegen, CCodeModule? next) {
+               base (codegen, next);
        }
 
-       public string get_getter_cname () {
-               if (getter_cname != null) {
-                       return getter_cname;
-               }
-
-               getter_cname = "_dynamic_get_%s%d".printf (node.name, dynamic_property_id++);
+       public override string get_dynamic_property_getter_cname (DynamicProperty node) {
+               string getter_cname = "_dynamic_get_%s%d".printf (node.name, dynamic_property_id++);
 
                var dynamic_property = (DynamicProperty) node;
 
@@ -55,10 +45,10 @@ public class Vala.CCodeDynamicPropertyBinding : CCodeBinding {
 
                var block = new CCodeBlock ();
                if (dynamic_property.dynamic_type.data_type == codegen.dbus_object_type) {
-                       generate_dbus_property_getter_wrapper (block);
+                       generate_dbus_property_getter_wrapper (node, block);
                } else if (dynamic_property.dynamic_type.data_type != null
                           && dynamic_property.dynamic_type.data_type.is_subtype_of (codegen.gobject_type)) {
-                       generate_gobject_property_getter_wrapper (block);
+                       generate_gobject_property_getter_wrapper (node, block);
                } else {
                        Report.error (node.source_reference, "dynamic properties are not supported for `%s'".printf (dynamic_property.dynamic_type.to_string ()));
                }
@@ -72,16 +62,12 @@ public class Vala.CCodeDynamicPropertyBinding : CCodeBinding {
                return getter_cname;
        }
 
-       public string get_setter_cname () {
-               if (setter_cname != null) {
-                       return setter_cname;
-               }
-
-               getter_cname = "_dynamic_set_%s%d".printf (node.name, dynamic_property_id++);
+       public override string get_dynamic_property_setter_cname (DynamicProperty node) {
+               string setter_cname = "_dynamic_set_%s%d".printf (node.name, dynamic_property_id++);
 
                var dynamic_property = (DynamicProperty) node;
 
-               var func = new CCodeFunction (getter_cname, "void");
+               var func = new CCodeFunction (setter_cname, "void");
                func.modifiers |= CCodeModifiers.STATIC | CCodeModifiers.INLINE;
 
                func.add_parameter (new CCodeFormalParameter ("obj", dynamic_property.dynamic_type.get_cname ()));
@@ -89,10 +75,10 @@ public class Vala.CCodeDynamicPropertyBinding : CCodeBinding {
 
                var block = new CCodeBlock ();
                if (dynamic_property.dynamic_type.data_type == codegen.dbus_object_type) {
-                       generate_dbus_property_setter_wrapper (block);
+                       generate_dbus_property_setter_wrapper (node, block);
                } else if (dynamic_property.dynamic_type.data_type != null
                           && dynamic_property.dynamic_type.data_type.is_subtype_of (codegen.gobject_type)) {
-                       generate_gobject_property_setter_wrapper (block);
+                       generate_gobject_property_setter_wrapper (node, block);
                } else {
                        Report.error (node.source_reference, "dynamic properties are not supported for `%s'".printf (dynamic_property.dynamic_type.to_string ()));
                }
@@ -103,10 +89,10 @@ public class Vala.CCodeDynamicPropertyBinding : CCodeBinding {
                func.block = block;
                codegen.source_type_member_definition.append (func);
 
-               return getter_cname;
+               return setter_cname;
        }
 
-       void generate_gobject_property_getter_wrapper (CCodeBlock block) {
+       void generate_gobject_property_getter_wrapper (DynamicProperty node, CCodeBlock block) {
                var cdecl = new CCodeDeclaration (node.property_type.get_cname ());
                cdecl.add_declarator (new CCodeVariableDeclarator ("result"));
                block.add_statement (cdecl);
@@ -122,7 +108,7 @@ public class Vala.CCodeDynamicPropertyBinding : CCodeBinding {
                block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("result")));
        }
 
-       void generate_gobject_property_setter_wrapper (CCodeBlock block) {
+       void generate_gobject_property_setter_wrapper (DynamicProperty node, CCodeBlock block) {
                var call = new CCodeFunctionCall (new CCodeIdentifier ("g_object_set"));
                call.add_argument (new CCodeIdentifier ("obj"));
                call.add_argument (node.get_canonical_cconstant ());
@@ -132,7 +118,7 @@ public class Vala.CCodeDynamicPropertyBinding : CCodeBinding {
                block.add_statement (new CCodeExpressionStatement (call));
        }
 
-       void create_dbus_property_proxy (CCodeBlock block) {
+       void create_dbus_property_proxy (DynamicProperty node, CCodeBlock block) {
                var prop_proxy_call = new CCodeFunctionCall (new CCodeIdentifier ("dbus_g_proxy_new_from_proxy"));
                prop_proxy_call.add_argument (new CCodeIdentifier ("obj"));
                prop_proxy_call.add_argument (new CCodeConstant ("DBUS_INTERFACE_PROPERTIES"));
@@ -143,8 +129,8 @@ public class Vala.CCodeDynamicPropertyBinding : CCodeBinding {
                block.add_statement (prop_proxy_decl);
        }
 
-       void generate_dbus_property_getter_wrapper (CCodeBlock block) {
-               create_dbus_property_proxy (block);
+       void generate_dbus_property_getter_wrapper (DynamicProperty node, CCodeBlock block) {
+               create_dbus_property_proxy (node, block);
 
                // initialize GValue
                var cvalinit = new CCodeInitializerList ();
@@ -198,8 +184,8 @@ public class Vala.CCodeDynamicPropertyBinding : CCodeBinding {
                block.add_statement (new CCodeReturnStatement (new CCodeIdentifier ("result")));
        }
 
-       void generate_dbus_property_setter_wrapper (CCodeBlock block) {
-               create_dbus_property_proxy (block);
+       void generate_dbus_property_setter_wrapper (DynamicProperty node, CCodeBlock block) {
+               create_dbus_property_proxy (node, block);
 
                // initialize GValue
                var cvalinit = new CCodeInitializerList ();
index ff7ad29257548bfbae800ad714e81e603e18930c..b1d50317e4550ef6c94b72b28922be420bf49bea 100644 (file)
@@ -148,6 +148,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
                head = new CCodeAssignmentModule (this, head);
                head = new CCodeInvocationExpressionModule (this, head);
                head = new CCodeArrayModule (this, head);
+               head = new CCodeDynamicPropertyModule (this, head);
                head = new GObjectModule (this, head);
                head = new GObjectClassModule (this, head);
                head = new GObjectInterfaceModule (this, head);
@@ -4162,7 +4163,7 @@ public class Vala.CCodeGenerator : CodeGenerator {
                        var base_property_type = (TypeSymbol) base_property.parent_symbol;
                        set_func = "%s_set_%s".printf (base_property_type.get_lower_case_cname (null), base_property.name);
                        if (prop is DynamicProperty) {
-                               set_func = dynamic_property_binding ((DynamicProperty) prop).get_setter_cname ();
+                               set_func = head.get_dynamic_property_setter_cname ((DynamicProperty) prop);
                        }
                }
                
@@ -4367,10 +4368,6 @@ public class Vala.CCodeGenerator : CodeGenerator {
                return node.ccodenode;
        }
 
-       public override CodeBinding? create_dynamic_property_binding (DynamicProperty node) {
-               return new CCodeDynamicPropertyBinding (this, node);
-       }
-
        public override CodeBinding? create_dynamic_signal_binding (DynamicSignal node) {
                return new CCodeDynamicSignalBinding (this, node);
        }
@@ -4379,10 +4376,6 @@ public class Vala.CCodeGenerator : CodeGenerator {
                return (CCodeBinding) node.get_code_binding (this);
        }
 
-       public CCodeDynamicPropertyBinding dynamic_property_binding (DynamicProperty node) {
-               return (CCodeDynamicPropertyBinding) node.get_code_binding (this);
-       }
-
        public CCodeDynamicSignalBinding dynamic_signal_binding (DynamicSignal node) {
                return (CCodeDynamicSignalBinding) node.get_code_binding (this);
        }
index 37ba1929a473a2caf2ca739899f0e3e7c1a471d5..91e8366df22a2a634cd59e0270c6c4142b502be8 100644 (file)
@@ -168,7 +168,7 @@ public class Vala.CCodeMemberAccessModule : CCodeModule {
                                }
                                string getter_cname;
                                if (prop is DynamicProperty) {
-                                       getter_cname = codegen.dynamic_property_binding ((DynamicProperty) prop).get_getter_cname ();
+                                       getter_cname = head.get_dynamic_property_getter_cname ((DynamicProperty) prop);
                                } else {
                                        getter_cname = base_property.get_accessor.get_cname ();
                                }
index c3a911d501eb544c156e1daa7e439f67998631b4..2a33c978bf71dffec55e9c7a41ac611f94f5f2fc 100644 (file)
@@ -123,4 +123,12 @@ public abstract class Vala.CCodeModule {
        public virtual CCodeFragment register_dbus_info (ObjectTypeSymbol bindable) {
                return next.register_dbus_info (bindable);
        }
+
+       public virtual string get_dynamic_property_getter_cname (DynamicProperty node) {
+               return next.get_dynamic_property_getter_cname (node);
+       }
+
+       public virtual string get_dynamic_property_setter_cname (DynamicProperty node) {
+               return next.get_dynamic_property_setter_cname (node);
+       }
 }
index 8d6545ae267419429648694babd17ad0e354df7a..d587e6f543085f9fa478be81bebce744db891e24 100644 (file)
@@ -34,10 +34,6 @@ public class Vala.CodeGenerator : CodeVisitor {
        public virtual void emit (CodeContext context) {
        }
 
-       public virtual CodeBinding? create_dynamic_property_binding (DynamicProperty node) {
-               return null;
-       }
-
        public virtual CodeBinding? create_dynamic_signal_binding (DynamicSignal node) {
                return null;
        }
index c90ddbc952e896da0ec42046614c1a330f0656c2..17c6aae412680a7c15e72e29fc15d185c30f5d91 100644 (file)
@@ -42,7 +42,4 @@ public class Vala.DynamicProperty : Property {
                return new ArrayList<string> ();
        }
 
-       public override CodeBinding? create_code_binding (CodeGenerator codegen) {
-               return codegen.create_dynamic_property_binding (this);
-       }
 }