[vala] codegen: Don't convert GValue/GVariant on non-null cast
- From: Luca Bruno <lucabru src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala] codegen: Don't convert GValue/GVariant on non-null cast
- Date: Sat, 22 Jun 2013 08:15:26 +0000 (UTC)
commit eeee60a8bb762206fe00c630b7669b38321cee35
Author: Luca Bruno <lucabru src gnome org>
Date: Sat Jun 22 09:17:46 2013 +0200
codegen: Don't convert GValue/GVariant on non-null cast
Fixes bug 702846
codegen/valaccodebasemodule.vala | 24 +++++++++++++-----------
tests/Makefile.am | 1 +
tests/objects/bug702846.vala | 6 ++++++
3 files changed, 20 insertions(+), 11 deletions(-)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index ec477cc..1a90ec0 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 5b16544..07c505e 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 0000000..e160ceb
--- /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");
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]