summaryrefslogtreecommitdiff
path: root/codegen
diff options
context:
space:
mode:
authorLuca Bruno <lucabru@src.gnome.org>2013-06-22 09:17:46 +0200
committerLuca Bruno <lucabru@src.gnome.org>2013-06-22 09:18:32 +0200
commiteeee60a8bb762206fe00c630b7669b38321cee35 (patch)
tree7e07da6f363aa732caf6a56474ca30614ab909a8 /codegen
parentf6146eaea2793aadcb2ad597a67ac6c1f736282c (diff)
downloadvala-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.vala24
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;