+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
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"
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"
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"
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)) {
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);
}
}
}
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);
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
m.set_cname (f.symbol);
bool first = true;
+ FormalParameter last_param = null;
foreach (IdlNodeParam param in f.parameters) {
weak IdlNode param_node = (IdlNode) param;
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) {