Skip to content

Commit 493a79e

Browse files
committed
Check implicit boolean conditions
1 parent 8aeb721 commit 493a79e

File tree

3 files changed

+15
-21
lines changed

3 files changed

+15
-21
lines changed

vhdl_lang/src/analysis/assignment.rs

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ impl<'a> AnalyzeContext<'a> {
3636
for conditional in conditionals {
3737
let Conditional { condition, item } = conditional;
3838
self.analyze_expression_for_target(scope, ttyp, item, diagnostics)?;
39-
self.analyze_expression(scope, condition, diagnostics)?;
39+
self.boolean_expr(scope, condition, diagnostics)?;
4040
}
4141
if let Some(expr) = else_item {
4242
self.analyze_expression_for_target(scope, ttyp, expr, diagnostics)?;
@@ -78,7 +78,7 @@ impl<'a> AnalyzeContext<'a> {
7878
for conditional in conditionals {
7979
let Conditional { condition, item } = conditional;
8080
self.analyze_waveform(scope, ttyp, item, diagnostics)?;
81-
self.analyze_expression(scope, condition, diagnostics)?;
81+
self.boolean_expr(scope, condition, diagnostics)?;
8282
}
8383
if let Some(wavf) = else_item {
8484
self.analyze_waveform(scope, ttyp, wavf, diagnostics)?;
@@ -112,13 +112,7 @@ impl<'a> AnalyzeContext<'a> {
112112
let WaveformElement { value, after } = elem;
113113
self.analyze_expression_for_target(scope, ttyp, value, diagnostics)?;
114114
if let Some(expr) = after {
115-
self.expr_pos_with_ttyp(
116-
scope,
117-
self.time(),
118-
&expr.pos,
119-
&mut expr.item,
120-
diagnostics,
121-
)?;
115+
self.expr_with_ttyp(scope, self.time(), expr, diagnostics)?;
122116
}
123117
}
124118
}
@@ -135,7 +129,7 @@ impl<'a> AnalyzeContext<'a> {
135129
diagnostics: &mut dyn DiagnosticHandler,
136130
) -> FatalResult {
137131
if let Some(ttyp) = ttyp {
138-
self.expr_pos_with_ttyp(scope, ttyp, &expr.pos, &mut expr.item, diagnostics)?;
132+
self.expr_with_ttyp(scope, ttyp, expr, diagnostics)?;
139133
} else {
140134
self.analyze_expression_pos(scope, &expr.pos, &mut expr.item, diagnostics)?;
141135
}

vhdl_lang/src/analysis/concurrent.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ impl<'a> AnalyzeContext<'a> {
4343
match statement.statement {
4444
ConcurrentStatement::Block(ref mut block) => {
4545
if let Some(ref mut guard_condition) = block.guard_condition {
46-
self.analyze_expression(scope, guard_condition, diagnostics)?;
46+
self.boolean_expr(scope, guard_condition, diagnostics)?;
4747
}
4848
let nested = scope.nested();
4949
if let Some(ref mut list) = block.header.generic_clause {
@@ -106,7 +106,7 @@ impl<'a> AnalyzeContext<'a> {
106106
} = gen;
107107
for conditional in conditionals.iter_mut() {
108108
let Conditional { condition, item } = conditional;
109-
self.analyze_expression(scope, condition, diagnostics)?;
109+
self.boolean_expr(scope, condition, diagnostics)?;
110110
let nested = scope.nested();
111111
self.analyze_generate_body(&nested, item, diagnostics)?;
112112
}
@@ -149,12 +149,12 @@ impl<'a> AnalyzeContext<'a> {
149149
severity,
150150
},
151151
} = assert;
152-
self.analyze_expression(scope, condition, diagnostics)?;
152+
self.boolean_expr(scope, condition, diagnostics)?;
153153
if let Some(expr) = report {
154-
self.analyze_expression(scope, expr, diagnostics)?;
154+
self.expr_with_ttyp(scope, self.string(), expr, diagnostics)?;
155155
}
156156
if let Some(expr) = severity {
157-
self.analyze_expression(scope, expr, diagnostics)?;
157+
self.expr_with_ttyp(scope, self.severity_level(), expr, diagnostics)?;
158158
}
159159
}
160160
};

vhdl_lang/src/analysis/sequential.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,10 @@ impl<'a> AnalyzeContext<'a> {
6262
} = wait_stmt;
6363
self.sensitivity_list_check(scope, sensitivity_clause, diagnostics)?;
6464
if let Some(expr) = condition_clause {
65-
self.analyze_expression(scope, expr, diagnostics)?;
65+
self.boolean_expr(scope, expr, diagnostics)?;
6666
}
6767
if let Some(expr) = timeout_clause {
68-
self.analyze_expression(scope, expr, diagnostics)?;
68+
self.expr_with_ttyp(scope, self.time(), expr, diagnostics)?;
6969
}
7070
}
7171
SequentialStatement::Assert(ref mut assert_stmt) => {
@@ -97,7 +97,7 @@ impl<'a> AnalyzeContext<'a> {
9797
} = exit_stmt;
9898

9999
if let Some(expr) = condition {
100-
self.analyze_expression(scope, expr, diagnostics)?;
100+
self.boolean_expr(scope, expr, diagnostics)?;
101101
}
102102
}
103103
SequentialStatement::Next(ref mut next_stmt) => {
@@ -108,7 +108,7 @@ impl<'a> AnalyzeContext<'a> {
108108
} = next_stmt;
109109

110110
if let Some(expr) = condition {
111-
self.analyze_expression(scope, expr, diagnostics)?;
111+
self.boolean_expr(scope, expr, diagnostics)?;
112112
}
113113
}
114114
SequentialStatement::If(ref mut ifstmt) => {
@@ -120,8 +120,8 @@ impl<'a> AnalyzeContext<'a> {
120120
// @TODO write generic function for this
121121
for conditional in conditionals {
122122
let Conditional { condition, item } = conditional;
123+
self.boolean_expr(scope, condition, diagnostics)?;
123124
self.analyze_sequential_part(scope, sroot, item, diagnostics)?;
124-
self.analyze_expression(scope, condition, diagnostics)?;
125125
}
126126
if let Some(else_item) = else_item {
127127
self.analyze_sequential_part(scope, sroot, else_item, diagnostics)?;
@@ -156,7 +156,7 @@ impl<'a> AnalyzeContext<'a> {
156156
self.analyze_sequential_part(&region, sroot, statements, diagnostics)?;
157157
}
158158
Some(IterationScheme::While(ref mut expr)) => {
159-
self.analyze_expression(scope, expr, diagnostics)?;
159+
self.boolean_expr(scope, expr, diagnostics)?;
160160
self.analyze_sequential_part(scope, sroot, statements, diagnostics)?;
161161
}
162162
None => {

0 commit comments

Comments
 (0)