summaryrefslogtreecommitdiff
path: root/vala
diff options
context:
space:
mode:
Diffstat (limited to 'vala')
-rw-r--r--vala/valacfgbuilder.vala8
-rw-r--r--vala/valaforstatement.vala14
-rw-r--r--vala/valasemanticanalyzer.vala4
3 files changed, 17 insertions, 9 deletions
diff --git a/vala/valacfgbuilder.vala b/vala/valacfgbuilder.vala
index 184b84714..165b1c99b 100644
--- a/vala/valacfgbuilder.vala
+++ b/vala/valacfgbuilder.vala
@@ -356,9 +356,13 @@ public class Vala.CFGBuilder : CodeVisitor {
var condition_block = new BasicBlock ();
current_block.connect (condition_block);
current_block = condition_block;
- current_block.add_node (stmt.condition);
+ if (stmt.condition != null) {
+ current_block.add_node (stmt.condition);
+ }
- handle_errors (stmt.condition);
+ if (stmt.condition != null) {
+ handle_errors (stmt.condition);
+ }
// loop block
current_block = new BasicBlock ();
diff --git a/vala/valaforstatement.vala b/vala/valaforstatement.vala
index 68676e0d1..245b5140f 100644
--- a/vala/valaforstatement.vala
+++ b/vala/valaforstatement.vala
@@ -30,13 +30,15 @@ public class Vala.ForStatement : CodeNode, Statement {
/**
* Specifies the loop condition.
*/
- public Expression! condition {
+ public Expression? condition {
get {
return _condition;
}
set construct {
_condition = value;
- _condition.parent_node = this;
+ if (_condition != null) {
+ _condition.parent_node = this;
+ }
}
}
@@ -118,9 +120,11 @@ public class Vala.ForStatement : CodeNode, Statement {
visitor.visit_end_full_expression (init_expr);
}
- condition.accept (visitor);
-
- visitor.visit_end_full_expression (condition);
+ if (condition != null) {
+ condition.accept (visitor);
+
+ visitor.visit_end_full_expression (condition);
+ }
foreach (Expression it_expr in iterator) {
it_expr.accept (visitor);
diff --git a/vala/valasemanticanalyzer.vala b/vala/valasemanticanalyzer.vala
index fbb6f0fa6..78001c5b2 100644
--- a/vala/valasemanticanalyzer.vala
+++ b/vala/valasemanticanalyzer.vala
@@ -915,13 +915,13 @@ public class Vala.SemanticAnalyzer : CodeVisitor {
public override void visit_for_statement (ForStatement! stmt) {
stmt.accept_children (this);
- if (stmt.condition.error) {
+ if (stmt.condition != null && stmt.condition.error) {
/* if there was an error in the condition, skip this check */
stmt.error = true;
return;
}
- if (!stmt.condition.static_type.compatible (bool_type)) {
+ if (stmt.condition != null && !stmt.condition.static_type.compatible (bool_type)) {
stmt.error = true;
Report.error (stmt.condition.source_reference, "Condition must be boolean");
return;