|
38 | 38 | from vsc.visitors.is_const_expr_visitor import IsConstExprVisitor |
39 | 39 | from vsc.visitors.is_nonrand_expr_visitor import IsNonRandExprVisitor |
40 | 40 | from vsc.visitors.model_pretty_printer import ModelPrettyPrinter |
| 41 | +from vsc.visitors.expr2field_visitor import Expr2FieldVisitor |
41 | 42 |
|
42 | 43 |
|
43 | 44 | class VariableBoundVisitor(ModelVisitor): |
@@ -147,29 +148,19 @@ def visit_expr_bin(self, e:ExprBinModel): |
147 | 148 | isinstance(e.lhs, ExprArraySubscriptModel) or |
148 | 149 | isinstance(e.rhs, ExprArraySubscriptModel)): |
149 | 150 | return |
150 | | - |
| 151 | + |
| 152 | + lhs_fm = Expr2FieldVisitor().field(e.lhs, fail_on_failure=False) |
| 153 | + rhs_fm = Expr2FieldVisitor().field(e.rhs, fail_on_failure=False) |
| 154 | + |
| 155 | + # Check whether the expressions involve *any* random variables |
151 | 156 | lhs_is_nonrand = IsNonRandExprVisitor().is_nonrand(e.lhs) |
152 | 157 | rhs_is_nonrand = IsNonRandExprVisitor().is_nonrand(e.rhs) |
153 | 158 |
|
154 | | - if isinstance(e.lhs, ExprArraySubscriptModel): |
155 | | - lhs_fm = e.lhs.subscript() |
156 | | - elif isinstance(e.lhs, ExprFieldRefModel): |
157 | | - lhs_fm = e.lhs.fm |
158 | | - else: |
159 | | - lhs_fm = None |
160 | | - |
161 | 159 | if lhs_fm is not None and lhs_fm in self.bound_m.keys(): |
162 | 160 | lhs_bounds = self.bound_m[lhs_fm] |
163 | 161 | else: |
164 | 162 | lhs_bounds = None |
165 | 163 |
|
166 | | - if isinstance(e.rhs, ExprArraySubscriptModel): |
167 | | - rhs_fm = e.rhs.subscript() |
168 | | - elif isinstance(e.rhs, ExprFieldRefModel): |
169 | | - rhs_fm = e.rhs.fm |
170 | | - else: |
171 | | - rhs_fm = None |
172 | | - |
173 | 164 | if rhs_fm is not None and rhs_fm in self.bound_m.keys(): |
174 | 165 | rhs_bounds = self.bound_m[rhs_fm] |
175 | 166 | else: |
|
0 commit comments