Commit de625c6f authored by Jürg Billeter's avatar Jürg Billeter Committed by Jürg Billeter

fix casts to GTypeInstance

2008-04-19  Juerg Billeter  <j@bitron.ch>

	* gobject/valaccodegenerator.vala: fix casts to GTypeInstance

	* vapi/glib-2.0.vapi: add get_type method to GLib.TypeInstance

svn path=/trunk/; revision=1258
parent 8f629e66
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
......
......@@ -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;
......
......@@ -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")]
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment