From: Rico Tzschichholz Date: Wed, 4 Sep 2019 14:12:21 +0000 (+0200) Subject: vala: Reject unary operations on nullable integer/floating and boolean type X-Git-Tag: 0.46.0~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5779d7f03e3db802e544d3b4c3b93d9142af6c7a;p=thirdparty%2Fvala.git vala: Reject unary operations on nullable integer/floating and boolean type Prefer to report a semantic error rather than creating invalid c-code. Fixes https://gitlab.gnome.org/GNOME/vala/issues/772 --- diff --git a/vala/valaunaryexpression.vala b/vala/valaunaryexpression.vala index d371d39d9..c2ef3ab08 100644 --- a/vala/valaunaryexpression.vala +++ b/vala/valaunaryexpression.vala @@ -111,7 +111,7 @@ public class Vala.UnaryExpression : Expression { } bool is_numeric_type (DataType type) { - if (!(type.data_type is Struct)) { + if (type.nullable || !(type.data_type is Struct)) { return false; } @@ -120,7 +120,7 @@ public class Vala.UnaryExpression : Expression { } bool is_integer_type (DataType type) { - if (!(type.data_type is Struct)) { + if (type.nullable || !(type.data_type is Struct)) { return false; } @@ -177,7 +177,7 @@ public class Vala.UnaryExpression : Expression { value_type = inner.value_type; } else if (operator == UnaryOperator.LOGICAL_NEGATION) { // boolean type - if (!inner.value_type.compatible (context.analyzer.bool_type)) { + if (inner.value_type.nullable || !inner.value_type.compatible (context.analyzer.bool_type)) { error = true; Report.error (source_reference, "Operator not supported for `%s'".printf (inner.value_type.to_string ())); return false;