+2008-04-19 Jürg Billeter <j@bitron.ch>
+
+ * gobject/valaccodegenerator.vala: fix casts to GTypeInstance
+
+ * vapi/glib-2.0.vapi: add get_type method to GLib.TypeInstance
+
2008-04-18 Jürg Billeter <j@bitron.ch>
* vala/valasemanticanalyzer.vala: check accessiblity of base types
}
public override void visit_cast_expression (CastExpression expr) {
- if (expr.type_reference.data_type != null && expr.type_reference.data_type.is_subtype_of (gtypeinstance_type)) {
- // GObject cast
+ if (expr.type_reference.data_type != null
+ && expr.type_reference.data_type.is_subtype_of (gtypeinstance_type)
+ && expr.type_reference.data_type != gtypeinstance_type) {
+ // checked cast for strict subtypes of GTypeInstance
if (expr.is_silent_cast) {
var ccomma = new CCodeCommaExpression ();
var temp_decl = get_temp_variable (expr.inner.static_type, true, expr);
return cexpr;
}
- if (context.checking && target_type.data_type != null && target_type.data_type.is_subtype_of (gtypeinstance_type)) {
+ if (context.checking && target_type.data_type != null
+ && target_type.data_type.is_subtype_of (gtypeinstance_type)
+ && target_type.data_type != gtypeinstance_type) {
+ // checked cast for strict subtypes of GTypeInstance
return new InstanceCast (cexpr, target_type.data_type);
} else if (target_type.data_type != null && expression_type.get_cname () != target_type.get_cname ()) {
var st = target_type.data_type as Struct;
[CCode (has_type_id = true)]
public class TypeInstance {
+ [CCode (cname = "G_TYPE_FROM_INSTANCE")]
+ public Type get_type ();
}
[CCode (ref_function = "g_type_class_ref", unref_function = "g_type_class_unref")]