]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Don't convert GValue/GVariant on non-null cast
authorLuca Bruno <lucabru@src.gnome.org>
Sat, 22 Jun 2013 07:17:46 +0000 (09:17 +0200)
committerLuca Bruno <lucabru@src.gnome.org>
Sat, 22 Jun 2013 07:18:32 +0000 (09:18 +0200)
Fixes bug 702846

codegen/valaccodebasemodule.vala
tests/Makefile.am
tests/objects/bug702846.vala [new file with mode: 0644]

index ec477ccc35e8a30b6660c5b044ab85bf844b6deb..1a90ec095e7eab5cce5f019db04db7fd7c0a1d50 100644 (file)
@@ -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;
index 5b16544afb7ac2deed8b5f06f1c6304299e653a0..07c505e529796d26710f50ce2e0eb624e1fe897d 100644 (file)
@@ -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 (file)
index 0000000..e160ceb
--- /dev/null
@@ -0,0 +1,6 @@
+void main () {
+       Variant? foo = "baz";
+       Variant bar = (!) foo;
+       string baz = (string) bar;
+       assert (baz == "baz");
+}