op1->operator = EVAL_OPERATOR_VALUE;
eval_node_set_value_to_constant(op1, 0, number);
}
- else if(*string)
+ else if(**string)
*error = EVAL_ERROR_UNKNOWN_OPERAND;
else
*error = EVAL_ERROR_MISSING_OPERAND;
return parse_rest_of_expression(string, error, op);
}
- else if(**string == EVAL_OPERATOR_EXPRESSION_CLOSE) {
+ else if(**string == ')') {
;
}
else if(**string) {
s = string;
EVAL_NODE *op = parse_full_expression(&s, &err);
+ if(*s) {
+ if(op) {
+ eval_node_free(op);
+ op = NULL;
+ }
+ err = EVAL_ERROR_REMAINING_GARBAGE;
+ }
+
if (failed_at) *failed_at = s;
if (error) *error = err;
case EVAL_ERROR_MISSING_OPERATOR:
return "expected operator";
+ case EVAL_ERROR_REMAINING_GARBAGE:
+ return "remaining characters after expression";
+
case EVAL_ERROR_INVALID_VALUE:
return "invalid value structure - internal error";