|
22 | 22 | #include <util/range.h>
|
23 | 23 |
|
24 | 24 | #include "smt_array_theory.h"
|
| 25 | +#include "smt_to_smt2_string.h" |
25 | 26 |
|
26 | 27 | #include <regex>
|
27 | 28 |
|
@@ -288,12 +289,27 @@ validate_valuation_pair(
|
288 | 289 | const irept &pair_parse_tree,
|
289 | 290 | const std::unordered_map<irep_idt, smt_identifier_termt> &identifier_table)
|
290 | 291 | {
|
| 292 | + using resultt = response_or_errort<smt_get_value_responset::valuation_pairt>; |
291 | 293 | PRECONDITION(pair_parse_tree.get_sub().size() == 2);
|
292 |
| - const auto &descriptor = pair_parse_tree.get_sub()[0]; |
293 |
| - const auto &value = pair_parse_tree.get_sub()[1]; |
294 |
| - return validation_propagating<smt_get_value_responset::valuation_pairt>( |
295 |
| - validate_term(descriptor, identifier_table), |
296 |
| - validate_term(value, identifier_table)); |
| 294 | + const auto descriptor_validation = |
| 295 | + validate_term(pair_parse_tree.get_sub()[0], identifier_table); |
| 296 | + const auto value_validation = |
| 297 | + validate_term(pair_parse_tree.get_sub()[1], identifier_table); |
| 298 | + const auto messages = |
| 299 | + collect_messages(descriptor_validation, value_validation); |
| 300 | + if(!messages.empty()) |
| 301 | + return resultt{messages}; |
| 302 | + const auto &valid_descriptor = *descriptor_validation.get_if_valid(); |
| 303 | + const auto &valid_value = *value_validation.get_if_valid(); |
| 304 | + if(valid_descriptor.get_sort() != valid_value.get_sort()) |
| 305 | + { |
| 306 | + return resultt{ |
| 307 | + "Mismatched descriptor and value sorts in - " + |
| 308 | + print_parse_tree(pair_parse_tree) + "\nDescriptor has sort " + |
| 309 | + smt_to_smt2_string(valid_descriptor.get_sort()) + "\nValue has sort " + |
| 310 | + smt_to_smt2_string(valid_value.get_sort())}; |
| 311 | + } |
| 312 | + return resultt{{valid_descriptor, valid_value}}; |
297 | 313 | }
|
298 | 314 |
|
299 | 315 | /// \returns: A response or error in the case where the parse tree appears to be
|
|
0 commit comments