+2007-07-23 Jürg Billeter <j@bitron.ch>
+
+ * vala/valainterface.vala, vala/valainterfacewriter.vala,
+ vala/valasemanticanalyzer.vala: fix cheader filenames and default to
+ GObject prerequisite for interfaces, fixes bug 459039
+
2007-07-23 Jürg Billeter <j@bitron.ch>
* vala/valainterfacewriter.vala: write interface prerequisites
prerequisites.append (type);
}
+ /**
+ * Prepends the specified interface or class to the list of
+ * prerequisites of this interface.
+ *
+ * @param type an interface or class reference
+ */
+ public void prepend_prerequisite (TypeReference! type) {
+ prerequisites.prepend (type);
+ }
+
/**
* Returns a copy of the base type list.
*
if (a.has_argument ("type_cname")) {
set_type_cname (a.get_string ("type_cname"));
}
+ if (a.has_argument ("cheader_filename")) {
+ var val = a.get_string ("cheader_filename");
+ foreach (string filename in val.split (",")) {
+ add_cheader_filename (filename);
+ }
+ }
}
/**
cheaders = cheader;
first = false;
} else {
- cheaders = "%s, %s".printf (cheaders, cheader);
+ cheaders = "%s,%s".printf (cheaders, cheader);
}
}
write_string ("[CCode (cheader_filename = \"%s\")]".printf (cheaders));
cheaders = cheader;
first = false;
} else {
- cheaders = "%s, %s".printf (cheaders, cheader);
+ cheaders = "%s,%s".printf (cheaders, cheader);
}
}
write_string ("[CCode (cheader_filename = \"%s\")]".printf (cheaders));
cheaders = cheader;
first = false;
} else {
- cheaders = "%s, %s".printf (cheaders, cheader);
+ cheaders = "%s,%s".printf (cheaders, cheader);
}
}
write_string ("[CCode (cheader_filename = \"%s\")]".printf (cheaders));
cheaders = cheader;
first = false;
} else {
- cheaders = "%s, %s".printf (cheaders, cheader);
+ cheaders = "%s,%s".printf (cheaders, cheader);
}
}
write_string ("[CCode (cprefix = \"%s\", cheader_filename = \"%s\")]".printf (en.get_cprefix (), cheaders));
TypeReference unichar_type;
TypeReference type_type;
DataType pointer_type;
+ DataType object_type;
DataType initially_unowned_type;
DataType glist_type;
DataType gslist_type;
// TODO: don't require GLib namespace in semantic analyzer
var glib_ns = root_symbol.scope.lookup ("GLib");
if (glib_ns != null) {
+ object_type = (DataType) glib_ns.scope.lookup ("Object");
initially_unowned_type = (DataType) glib_ns.scope.lookup ("InitiallyUnowned");
type_type = new TypeReference ();
current_source_file.add_symbol_dependency (prerequisite_reference.data_type, SourceFileDependencyType.HEADER_FULL);
}
- iface.accept_children (this);
-
/* check prerequisites */
Class prereq_class;
foreach (TypeReference prereq in iface.get_prerequisites ()) {
return;
}
- prereq_class = (Class)class_or_interface;
+ prereq_class = (Class) class_or_interface;
}
}
+ if (prereq_class == null) {
+ /* default to GObject */
+ var obj_type = new TypeReference ();
+ obj_type.data_type = object_type;
+ iface.prepend_prerequisite (obj_type);
+ }
+
+ iface.accept_children (this);
+
current_symbol = current_symbol.parent_symbol;
}