]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
default to reference type for boxed types, improve array and value-type
authorJürg Billeter <j@bitron.ch>
Wed, 21 Mar 2007 20:38:20 +0000 (20:38 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Wed, 21 Mar 2007 20:38:20 +0000 (20:38 +0000)
2007-03-21  Jürg Billeter  <j@bitron.ch>

* vapigen/valagidlparser.vala: default to reference type for boxed
  types, improve array and value-type handling
* packages/atk/atk.metadata, packages/gdk-2.0/gdk-2.0.metadata,
  packages/gtk+-2.0/gtk+-2.0.metadata, packages/pango/pango.metadata:
  add more value-types

svn path=/trunk/; revision=257

vapigen/ChangeLog
vapigen/packages/atk/atk.metadata
vapigen/packages/gdk-2.0/gdk-2.0.metadata
vapigen/packages/gtk+-2.0/gtk+-2.0.metadata
vapigen/packages/pango/pango.metadata
vapigen/vapigen/valagidlparser.vala

index 1e78dbff35a13cbc5e9bc8532350a5c484057990..c634752f7e50fb606da8b1d28e80436e5e203088 100644 (file)
@@ -1,3 +1,11 @@
+2007-03-21  Jürg Billeter  <j@bitron.ch>
+
+       * vapigen/valagidlparser.vala: default to reference type for boxed
+         types, improve array and value-type handling
+       * packages/atk/atk.metadata, packages/gdk-2.0/gdk-2.0.metadata,
+         packages/gtk+-2.0/gtk+-2.0.metadata, packages/pango/pango.metadata:
+         add more value-types
+
 2007-03-21  Jürg Billeter  <j@bitron.ch>
 
        * vapigen/valagidlparser.vala: adapt to current Vala SVN by using weak
index eb28f14bc97ba23a509ce1eb17f6a222e0a1a287..19fa8679fe09629e940a14c88ee8f828c977f3d7 100644 (file)
@@ -1,2 +1,3 @@
 Atk cheader_filename="atk/atk.h"
+AtkRectangle is_value_type="1"
 
index fcf1c2e1445fd8621cfdf873d8e52a2a20921cf4..2457f273aaa1f09b3a00d87646a108192be3979b 100644 (file)
@@ -2,5 +2,6 @@ Gdk cheader_filename="gdk/gdk.h"
 GdkAtom is_value_type="1"
 GdkColor is_value_type="1"
 GdkCursor is_value_type="0"
+GdkRectangle is_value_type="1"
 GdkWindowAttr is_value_type="1"
 
index 4959c9d6e3af82080eeffdcd0c59be852fc862ee..e009afec96b9737c6233c29cb51f117ccfe06279 100644 (file)
@@ -3,6 +3,8 @@ GtkAction::activate has_emitter="1"
 GtkActionEntry is_value_type="1"
 GtkAdjustment::changed has_emitter="1"
 GtkAdjustment::value_changed has_emitter="1"
+GtkAllocation is_value_type="1"
+GtkBorder is_value_type="1"
 GtkButton::clicked has_emitter="1"
 GtkButton::enter has_emitter="1"
 GtkButton::leave has_emitter="1"
@@ -41,6 +43,7 @@ gtk_printer_accepts_ps hidden="1" experimental="1"
 gtk_printer_is_virtual hidden="1" experimental="1"
 gtk_quit_add_full hidden="1"
 GtkRadioActionEntry is_value_type="1"
+GtkRequisition is_value_type="1"
 gtk_show_about_dialog ellipsis="1"
 GtkTextBuffer::apply_tag has_emitter="1"
 GtkTextBuffer::begin_user_action has_emitter="1"
@@ -48,11 +51,13 @@ GtkTextBuffer::end_user_action has_emitter="1"
 GtkTextBuffer::insert_child_anchor has_emitter="1"
 GtkTextBuffer::insert_pixbuf has_emitter="1"
 GtkTextBuffer::remove_tag has_emitter="1"
+GtkTextIter is_value_type="1"
 GtkTextTag::event has_emitter="1"
 GtkToggleAction::toggled has_emitter="1"
 GtkToggleActionEntry is_value_type="1"
 GtkToggleButton::toggled has_emitter="1"
 GtkToolItem::set_tooltip has_emitter="1"
+GtkTreeIter is_value_type="1"
 GtkTreeModel::row_changed has_emitter="1"
 GtkTreeModel::row_deleted has_emitter="1"
 GtkTreeModel::row_has_child_toggled has_emitter="1"
index 1d1800df1a941f8db44be178188e1f84dabf8c41..955446632db5d40a847e8182393166b654aa92e5 100644 (file)
@@ -1,2 +1,6 @@
 Pango cheader_filename="pango/pango.h"
 pango_attr_size_new_absolute hidden="1"
+PangoColor is_value_type="1"
+PangoMatrix is_value_type="1"
+PangoRectangle is_value_type="1"
+
index f8229ba0f12f87fc7185e4c82e2fef059dc3c985..d4e7fbe55ce53e8b69ac117cbcb50fd6cc42f10a 100644 (file)
@@ -121,6 +121,7 @@ public class Vala.GIdlParser : CodeVisitor {
                                        st.name = st.name.offset (module.name.len ());
                                }
                                ns.add_struct (st);
+                               st.set_type_id (st.get_upper_case_cname ("TYPE_"));
                        } else if (node.type == IdlNodeTypeId.ENUM) {
                                var en = parse_enum ((IdlNodeEnum) node);
                                if (en.name.has_prefix (module.name)) {
@@ -233,13 +234,15 @@ public class Vala.GIdlParser : CodeVisitor {
        
                var st = new Struct (node.name, current_source_reference);
                st.access = MemberAccessibility.PUBLIC;
-               
+
+               st.set_is_reference_type (true);
+
                var st_attributes = get_attributes (node.name);
                if (st_attributes != null) {
                        foreach (string attr in st_attributes) {
                                var nv = attr.split ("=", 2);
-                               if (nv[0] == "is_value_type" && eval (nv[1]) == "0") {
-                                       st.set_is_reference_type (true);
+                               if (nv[0] == "is_value_type" && eval (nv[1]) == "1") {
+                                       st.set_is_reference_type (false);
                                }
                        }
                }
@@ -516,6 +519,9 @@ public class Vala.GIdlParser : CodeVisitor {
                                type.type_name = "File";
                        } else {
                                parse_type_string (type, n);
+                               if (type_node.is_pointer && is_value_type (n)) {
+                                       type.reference_to_value_type = true;
+                               }
                        }
                } else {
                        stdout.printf ("%d\n", type_node.tag);
@@ -523,6 +529,21 @@ public class Vala.GIdlParser : CodeVisitor {
                return type;
        }
        
+       private bool is_value_type (string! type_name) {
+               // FIXME only works if both types are in current package, e.g. doesn't work when Gtk uses GdkRectangle
+               var type_attributes = get_attributes (type_name);
+               if (type_attributes != null) {
+                       foreach (string attr in type_attributes) {
+                               var nv = attr.split ("=", 2);
+                               if (nv[0] == "is_value_type" && eval (nv[1]) == "1") {
+                                       return true;
+                               }
+                       }
+               }
+
+               return false;
+       }
+       
        private void parse_type_string (TypeReference! type, string! n) {
                // Generated GIDL misses explicit namespace specifier,
                // so try to guess namespace
@@ -665,6 +686,7 @@ public class Vala.GIdlParser : CodeVisitor {
                m.set_cname (f.symbol);
                
                bool first = true;
+               FormalParameter last_param = null;
                foreach (IdlNodeParam param in f.parameters) {
                        weak IdlNode param_node = (IdlNode) param;
                        
@@ -690,6 +712,14 @@ public class Vala.GIdlParser : CodeVisitor {
                        
                        var p = new FormalParameter (param_node.name, parse_param (param));
                        m.add_parameter (p);
+
+                       if (last_param != null && p.name == "n_" + last_param.name) {
+                               // last_param is array, p is array length
+                               last_param.type_reference.array_rank = 1;
+                               last_param.type_reference.reference_to_value_type = false;
+                       }
+
+                       last_param = p;
                }
                
                if (first) {