From: Juerg Billeter Date: Fri, 18 Apr 2008 22:06:11 +0000 (+0000) Subject: fix casts to GTypeInstance X-Git-Tag: VALA_0_3_1~44 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=de625c6f6b7e193c4a2a0a35158e7347e1ad12ec;p=platform%2Fupstream%2Fvala.git fix casts to GTypeInstance 2008-04-19 Juerg Billeter * gobject/valaccodegenerator.vala: fix casts to GTypeInstance * vapi/glib-2.0.vapi: add get_type method to GLib.TypeInstance svn path=/trunk/; revision=1258 --- diff --git a/ChangeLog b/ChangeLog index 61926a2..50e6d54 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-04-19 Jürg Billeter + + * 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 * vala/valasemanticanalyzer.vala: check accessiblity of base types diff --git a/gobject/valaccodegenerator.vala b/gobject/valaccodegenerator.vala index f9da4d4..f554cf8 100644 --- a/gobject/valaccodegenerator.vala +++ b/gobject/valaccodegenerator.vala @@ -3034,8 +3034,10 @@ public class Vala.CCodeGenerator : CodeGenerator { } 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); @@ -3272,7 +3274,10 @@ public class Vala.CCodeGenerator : CodeGenerator { 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; diff --git a/vapi/glib-2.0.vapi b/vapi/glib-2.0.vapi index eaa36e0..d2d7b34 100644 --- a/vapi/glib-2.0.vapi +++ b/vapi/glib-2.0.vapi @@ -656,6 +656,8 @@ namespace GLib { [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")]