save state in completed objects
[protos/libecoli.git] / lib / ecoli_node_expr.c
index 5aa8a2e..129163e 100644 (file)
@@ -47,6 +47,8 @@
 #include <ecoli_node_weakref.h>
 #include <ecoli_node_expr.h>
 
+EC_LOG_TYPE_REGISTER(node_expr);
+
 struct ec_node_expr {
        struct ec_node gen;
 
@@ -75,12 +77,14 @@ static int ec_node_expr_parse(const struct ec_node *gen_node,
        return ec_node_parse_child(node->child, state, strvec);
 }
 
-static struct ec_completed *ec_node_expr_complete(const struct ec_node *gen_node,
-       const struct ec_strvec *strvec)
+static int
+ec_node_expr_complete(const struct ec_node *gen_node,
+               struct ec_completed *completed,
+               const struct ec_strvec *strvec)
 {
        struct ec_node_expr *node = (struct ec_node_expr *)gen_node;
 
-       return ec_node_complete_strvec(node->child, strvec);
+       return ec_node_complete_child(node->child, completed, strvec);
 }
 
 static void ec_node_expr_free_priv(struct ec_node *gen_node)
@@ -88,7 +92,7 @@ static void ec_node_expr_free_priv(struct ec_node *gen_node)
        struct ec_node_expr *node = (struct ec_node_expr *)gen_node;
        unsigned int i;
 
-       ec_log(EC_LOG_DEBUG, "free %p %p %p\n", node, node->child, node->val_node);
+       EC_LOG(EC_LOG_DEBUG, "free %p %p %p\n", node, node->child, node->val_node);
        ec_node_free(node->val_node);
 
        for (i = 0; i < node->bin_ops_len; i++)
@@ -208,6 +212,7 @@ static int ec_node_expr_build(struct ec_node *gen_node)
        weak = NULL;
 
        node->child = expr;
+       //ec_node_dump(stdout, node->child); //XXX
 
        return 0;
 
@@ -521,7 +526,7 @@ static int eval_expression(struct result *result,
        memset(result, 0, sizeof(*result));
        memset(&child_result, 0, sizeof(child_result));
 
-       type = get_node_type(expr_gen_node, parsed->node);
+       type = get_node_type(expr_gen_node, ec_parsed_get_node(parsed));
        if (type == VAL) {
                ret = ops->eval_var(&result->val, userctx, parsed);
                if (ret < 0)
@@ -532,9 +537,9 @@ static int eval_expression(struct result *result,
                result->op_type = type;
        }
 
-       TAILQ_FOREACH(child, &parsed->children, next) {
+       EC_PARSED_FOREACH_CHILD(child, parsed) {
 
-               type = get_node_type(expr_gen_node, child->node);
+               type = get_node_type(expr_gen_node, ec_parsed_get_node(child));
                if (type == PAREN_OPEN) {
                        open = child;
                        continue;
@@ -589,7 +594,7 @@ int ec_node_expr_eval(void **user_result, const struct ec_node *node,
        if (!ec_parsed_matches(parsed))
                return -EINVAL;
 
-       ec_parsed_dump(stdout, parsed); //XXX
+       //ec_parsed_dump(stdout, parsed); //XXX
        ret = eval_expression(&result, userctx, ops, node, parsed);
        if (ret < 0)
                return ret;