#include <ecoli_log.h>
#include <ecoli_strvec.h>
#include <ecoli_node.h>
+#include <ecoli_parsed.h>
+#include <ecoli_completed.h>
#include <ecoli_node_option.h>
#include <ecoli_node_str.h>
#include <ecoli_test.h>
struct ec_node *child;
};
-static struct ec_parsed *ec_node_option_parse(const struct ec_node *gen_node,
- const struct ec_strvec *strvec)
+static int
+ec_node_option_parse(const struct ec_node *gen_node,
+ struct ec_parsed *state,
+ const struct ec_strvec *strvec)
{
struct ec_node_option *node = (struct ec_node_option *)gen_node;
- struct ec_parsed *parsed = NULL, *child_parsed;
- struct ec_strvec *match_strvec;
-
- parsed = ec_parsed();
- if (parsed == NULL)
- goto fail;
-
- child_parsed = ec_node_parse_strvec(node->child, strvec);
- if (child_parsed == NULL)
- goto fail;
-
- if (ec_parsed_matches(child_parsed)) {
- ec_parsed_add_child(parsed, child_parsed);
- match_strvec = ec_strvec_dup(child_parsed->strvec);
- } else {
- ec_parsed_free(child_parsed);
- match_strvec = ec_strvec();
- }
-
- if (match_strvec == NULL)
- goto fail;
+ int ret;
- ec_parsed_set_match(parsed, gen_node, match_strvec);
+ ret = ec_node_parse_child(node->child, state, strvec);
+ if (ret == EC_PARSED_NOMATCH)
+ return 0;
+ else if (ret < 0)
+ return ret;
- return parsed;
-
- fail:
- ec_parsed_free(parsed);
- return NULL;
+ return ret;
}
-static struct ec_completed *ec_node_option_complete(const struct ec_node *gen_node,
- const struct ec_strvec *strvec)
+static int
+ec_node_option_complete(const struct ec_node *gen_node,
+ struct ec_completed *completed,
+ struct ec_parsed *parsed,
+ const struct ec_strvec *strvec)
{
struct ec_node_option *node = (struct ec_node_option *)gen_node;
- return ec_node_complete_strvec(node->child, strvec);
+ return ec_node_complete_child(node->child, completed, parsed, strvec);
}
static void ec_node_option_free_priv(struct ec_node *gen_node)
return &node->gen;
}
+/* LCOV_EXCL_START */
static int ec_node_option_testcase(void)
{
struct ec_node *node;
return ret;
}
+/* LCOV_EXCL_STOP */
static struct ec_test ec_node_option_test = {
.name = "node_option",