From: Luca Bruno Date: Sat, 22 Jun 2013 07:17:46 +0000 (+0200) Subject: codegen: Don't convert GValue/GVariant on non-null cast X-Git-Tag: 0.21.1~31 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eeee60a8bb762206fe00c630b7669b38321cee35;p=thirdparty%2Fvala.git codegen: Don't convert GValue/GVariant on non-null cast Fixes bug 702846 --- 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; diff --git a/tests/Makefile.am b/tests/Makefile.am index 5b16544af..07c505e52 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -137,6 +137,7 @@ TESTS = \ objects/bug695671.vala \ objects/bug701978.vala \ objects/bug702736.vala \ + objects/bug702846.vala \ errors/errors.vala \ errors/bug567181.vala \ errors/bug579101.vala \ diff --git a/tests/objects/bug702846.vala b/tests/objects/bug702846.vala new file mode 100644 index 000000000..e160ceb36 --- /dev/null +++ b/tests/objects/bug702846.vala @@ -0,0 +1,6 @@ +void main () { + Variant? foo = "baz"; + Variant bar = (!) foo; + string baz = (string) bar; + assert (baz == "baz"); +}