const struct ec_parsed *var)
{
const struct ec_strvec *vec;
- struct my_eval_result *eval;
+ const struct ec_node *node;
+ struct my_eval_result *eval = NULL;
+ int64_t val;
(void)userctx;
if (ec_strvec_len(vec) != 1)
return -EINVAL;
+ node = ec_parsed_get_node(var);
+ if (ec_node_int_getval(node, ec_strvec_val(vec, 0), &val) < 0)
+ return -EINVAL;
+
eval = ec_malloc(sizeof(*eval));
if (eval == NULL)
return -ENOMEM;
- eval->val = atoi(ec_strvec_val(vec, 0)); // XXX use strtol
- printf("eval var %d\n", eval->val);
+ eval->val = val;
+ EC_LOG(EC_LOG_DEBUG, "eval var %d\n", eval->val);
*result = eval;
return 0;
else
return -EINVAL;
- printf("eval pre_op %d\n", eval->val);
+ EC_LOG(EC_LOG_DEBUG, "eval pre_op %d\n", eval->val);
*result = eval;
return 0;
else
return -EINVAL;
- printf("eval post_op %d\n", eval->val);
+ EC_LOG(EC_LOG_DEBUG, "eval post_op %d\n", eval->val);
*result = eval;
return 0;
else
return -EINVAL;
- printf("eval bin_op %d\n", eval1->val);
+ EC_LOG(EC_LOG_DEBUG, "eval bin_op %d\n", eval1->val);
ec_free(eval2);
*result = eval1;
(void)open_paren;
(void)close_paren;
- printf("eval paren\n");
+ EC_LOG(EC_LOG_DEBUG, "eval paren\n");
*result = value;
return 0;
struct my_eval_result *eval;
int ret;
- /* XXX check node type (again and again) */
-
p = ec_node_parse(lex_node, str);
if (p == NULL)
return -1;
eval = result;
assert(eval != NULL);
- printf("result: %d (expected %d)\n", eval->val, val);
+ EC_LOG(EC_LOG_DEBUG, "result: %d (expected %d)\n", eval->val, val);
if (eval->val == val)
ret = 0;
else
if (node == NULL)
return -1;
- ec_node_expr_set_val_node(node, ec_node_int(NULL, 0, UCHAR_MAX, 0));
- ec_node_expr_add_bin_op(node, ec_node_str(NULL, "+"));
- ec_node_expr_add_bin_op(node, ec_node_str(NULL, "*"));
- ec_node_expr_add_pre_op(node, ec_node_str(NULL, "!")); /* not */
- ec_node_expr_add_post_op(node, ec_node_str(NULL, "^")); /* square */
- ec_node_expr_add_parenthesis(node, ec_node_str(NULL, "("),
- ec_node_str(NULL, ")"));
+ ec_node_expr_set_val_node(node, ec_node_int(EC_NO_ID, 0, UCHAR_MAX, 0));
+ ec_node_expr_add_bin_op(node, ec_node_str(EC_NO_ID, "+"));
+ ec_node_expr_add_bin_op(node, ec_node_str(EC_NO_ID, "*"));
+ ec_node_expr_add_pre_op(node, ec_node_str(EC_NO_ID, "!")); /* not */
+ ec_node_expr_add_post_op(node, ec_node_str(EC_NO_ID, "^")); /* square */
+ ec_node_expr_add_parenthesis(node, ec_node_str(EC_NO_ID, "("),
+ ec_node_str(EC_NO_ID, ")"));
ret |= EC_TEST_CHECK_PARSE(node, 1, "1");
ret |= EC_TEST_CHECK_PARSE(node, 1, "1", "1");
ret |= EC_TEST_CHECK_PARSE(node, 1, "1", "*");
ret |= EC_TEST_CHECK_PARSE(node, 5, "1", "+", "!", "1", "^");
/* prepend a lexer to the expression node */
- lex_node = ec_node_re_lex(NULL, ec_node_clone(node));
+ lex_node = ec_node_re_lex(EC_NO_ID, ec_node_clone(node));
if (lex_node == NULL)
goto fail;