diff options
author | Luca Bruno <lucabru@src.gnome.org> | 2013-06-22 09:17:46 +0200 |
---|---|---|
committer | Luca Bruno <lucabru@src.gnome.org> | 2013-06-22 09:18:32 +0200 |
commit | eeee60a8bb762206fe00c630b7669b38321cee35 (patch) | |
tree | 7e07da6f363aa732caf6a56474ca30614ab909a8 /codegen | |
parent | f6146eaea2793aadcb2ad597a67ac6c1f736282c (diff) | |
download | vala-eeee60a8bb762206fe00c630b7669b38321cee35.tar.gz |
codegen: Don't convert GValue/GVariant on non-null cast
Fixes bug 702846
Diffstat (limited to 'codegen')
-rw-r--r-- | codegen/valaccodebasemodule.vala | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index ec477ccc3..1a90ec095 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -5010,19 +5010,21 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { } public override void visit_cast_expression (CastExpression expr) { - var valuecast = try_cast_value_to_type (get_cvalue (expr.inner), expr.inner.value_type, expr.type_reference, expr); - if (valuecast != null) { - set_cvalue (expr, valuecast); - return; - } + generate_type_declaration (expr.type_reference, cfile); - var variantcast = try_cast_variant_to_type (expr.inner.target_value, expr.type_reference, expr); - if (variantcast != null) { - expr.target_value = variantcast; - return; - } + if (!expr.is_non_null_cast) { + var valuecast = try_cast_value_to_type (get_cvalue (expr.inner), expr.inner.value_type, expr.type_reference, expr); + if (valuecast != null) { + set_cvalue (expr, valuecast); + return; + } - generate_type_declaration (expr.type_reference, cfile); + var variantcast = try_cast_variant_to_type (expr.inner.target_value, expr.type_reference, expr); + if (variantcast != null) { + expr.target_value = variantcast; + return; + } + } var cl = expr.type_reference.data_type as Class; var iface = expr.type_reference.data_type as Interface; |