Rather than just aborting, report an intelligent error if the comma operator
is missing one of its operands in a value expression. This kind of reporting still needs to be done for all the other operators as well.
This commit is contained in:
parent
6815aac361
commit
78813fc616
1 changed files with 10 additions and 4 deletions
14
valexpr.cc
14
valexpr.cc
|
|
@ -578,8 +578,12 @@ void value_expr_t::compute(value_t& result, const details_t& details,
|
||||||
}
|
}
|
||||||
|
|
||||||
case O_COM:
|
case O_COM:
|
||||||
assert(left);
|
if (! left)
|
||||||
assert(right);
|
throw new compute_error("Comma operator missing left operand",
|
||||||
|
new valexpr_context(this));
|
||||||
|
if (! right)
|
||||||
|
throw new compute_error("Comma operator missing right operand",
|
||||||
|
new valexpr_context(this));
|
||||||
left->compute(result, details, context);
|
left->compute(result, details, context);
|
||||||
right->compute(result, details, context);
|
right->compute(result, details, context);
|
||||||
break;
|
break;
|
||||||
|
|
@ -1731,10 +1735,12 @@ bool write_value_expr(std::ostream& out,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case value_expr_t::O_COM:
|
case value_expr_t::O_COM:
|
||||||
if (write_value_expr(out, node->left, relaxed, node_to_find, start_pos, end_pos))
|
if (node->left &&
|
||||||
|
write_value_expr(out, node->left, relaxed, node_to_find, start_pos, end_pos))
|
||||||
found = true;
|
found = true;
|
||||||
out << ", ";
|
out << ", ";
|
||||||
if (write_value_expr(out, node->right, relaxed, node_to_find, start_pos, end_pos))
|
if (node->right &&
|
||||||
|
write_value_expr(out, node->right, relaxed, node_to_find, start_pos, end_pos))
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
case value_expr_t::O_QUES:
|
case value_expr_t::O_QUES:
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue