vala r2109 - in trunk: . vala
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r2109 - in trunk: . vala
- Date: Mon, 1 Dec 2008 11:28:37 +0000 (UTC)
Author: juergbi
Date: Mon Dec 1 11:28:37 2008
New Revision: 2109
URL: http://svn.gnome.org/viewvc/vala?rev=2109&view=rev
Log:
2008-12-01 JÃrg Billeter <j bitron ch>
* vala/valabinaryexpression.vala:
* vala/valaconditionalexpression.vala:
Fix critical when using conditional expressions in method contracts
Modified:
trunk/ChangeLog
trunk/vala/valabinaryexpression.vala
trunk/vala/valaconditionalexpression.vala
Modified: trunk/vala/valabinaryexpression.vala
==============================================================================
--- trunk/vala/valabinaryexpression.vala (original)
+++ trunk/vala/valabinaryexpression.vala Mon Dec 1 11:28:37 2008
@@ -147,7 +147,10 @@
checked = true;
- if (operator == BinaryOperator.AND || operator == BinaryOperator.OR) {
+ // some expressions are not in a block,
+ // for example, expressions in method contracts
+ if (analyzer.current_symbol is Block
+ && (operator == BinaryOperator.AND || operator == BinaryOperator.OR)) {
var old_insert_block = analyzer.insert_block;
analyzer.insert_block = prepare_condition_split (analyzer);
@@ -307,6 +310,14 @@
// integer type or flags type
value_type = left.value_type;
+ } else if (operator == BinaryOperator.AND
+ || operator == BinaryOperator.OR) {
+ if (!left.value_type.compatible (analyzer.bool_type) || !right.value_type.compatible (analyzer.bool_type)) {
+ error = true;
+ Report.error (source_reference, "Operands must be boolean");
+ }
+
+ value_type = analyzer.bool_type;
} else if (operator == BinaryOperator.IN) {
if (left.value_type.compatible (analyzer.int_type)
&& right.value_type.compatible (analyzer.int_type)) {
Modified: trunk/vala/valaconditionalexpression.vala
==============================================================================
--- trunk/vala/valaconditionalexpression.vala (original)
+++ trunk/vala/valaconditionalexpression.vala Mon Dec 1 11:28:37 2008
@@ -105,6 +105,12 @@
checked = true;
+ if (!(analyzer.current_symbol is Block)) {
+ Report.error (source_reference, "Conditional expressions may only be used in blocks");
+ error = true;
+ return false;
+ }
+
var old_insert_block = analyzer.insert_block;
analyzer.insert_block = prepare_condition_split (analyzer);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]