#include "command_match.h"
#include "memory.h"
-
-DEFINE_MTYPE_STATIC(LIB, CMD_TOKENS, "Command Tokens")
+#ifdef TRACE_MATCHER
+#define TM 1
+#else
+#define TM 0
+#endif
+
+#define trace_matcher(...) \
+ do { if (TM) fprintf (stderr, __VA_ARGS__); } while (0);
- DEFINE_MTYPE_STATIC(LIB, CMD_TOKENS, "Command Tokens")
-
/* matcher helper prototypes */
static int
add_nexthops (struct list *, struct graph_node *);
assert (*el);
}
++<<<<<<< HEAD
+ if (!*el) {
+ trace_matcher ("No match\n");
+ }
+ else {
+ trace_matcher ("Matched command\n->string %s\n->desc %s\n", (*el)->string, (*el)->doc);
+ }
++||||||| merged common ancestors
++ if (!*el) {
++ trace_matcher ("No match");
++ }
++ else {
++ trace_matcher ("Matched command\n->string %s\n->desc %s\n", (*el)->string, (*el)->doc);
++ }
++=======
+ #ifdef TRACE_MATCHER
+ if (!*el)
+ fprintf (stdout, "No match\n");
+ else
+ fprintf (stdout, "Matched command\n->string %s\n->desc %s\n", (*el)->string, (*el)->doc);
+ #endif
++>>>>>>> osr/master
// free the leader token we alloc'd
XFREE (MTYPE_TMP, vector_slot (vvline, 0));
continue;
enum match_type minmatch = min_match_level (token->type);
++<<<<<<< HEAD
+ trace_matcher ("\"%s\" matches \"%s\" (%d) ? ",
+ input_token, token->text, token->type);
++||||||| merged common ancestors
++ trace_matcher ("\"%s\" matches \"%s\" (%d) ? ", input_token, token->text, token->type);
++=======
+ #ifdef TRACE_MATCHER
+ fprintf (stdout, "\"%s\" matches \"%s\" (%d) ? ", input_token, token->text, token->type);
+ #endif
++>>>>>>> osr/master
- switch (match_token (token, input_token))
+ unsigned int last_token = (vector_active (vline) - 1 == idx);
+ enum match_type matchtype = match_token (token, input_token);
+ switch (matchtype)
{
+ // occurs when last token is whitespace
case trivial_match:
++<<<<<<< HEAD
+ trace_matcher ("trivial_match\n");
+ assert(last_token);
+ listnode_add (next, gn);
+ break;
++||||||| merged common ancestors
++ trace_matcher ("trivial_match\n");
++ assert(idx == vector_active (vline) - 1);
++ listnode_add (next, gn);
++ break;
++=======
+ #ifdef TRACE_MATCHER
+ fprintf (stdout, "trivial_match\n");
+ #endif
++>>>>>>> osr/master
case partly_match:
++<<<<<<< HEAD
+ trace_matcher ("trivial_match\n");
+ if (exact_match_exists && !last_token)
+ break;
++||||||| merged common ancestors
++ trace_matcher ("partly_match\n");
++ // last token on line is partial and
++ // not a space
++ if (idx == vector_active (vline) - 1)
++ {
++ listnode_add (next, gn);
++ break;
++ }
++ if (minmatch <= partly_match)
++ add_nexthops (next, gn);
++
++ break;
++=======
+ #ifdef TRACE_MATCHER
+ fprintf (stdout, "partly_match\n");
+ #endif
+ if (idx == vector_active (vline) - 1)
+ {
+ listnode_add (next, gn);
+ break;
+ }
+ if (minmatch > partly_match)
+ break;
++>>>>>>> osr/master
case exact_match:
++<<<<<<< HEAD
+ trace_matcher ("exact_match\n");
+ if (last_token)
+ listnode_add (next, gn);
+ else if (matchtype >= minmatch)
+ add_nexthops (next, gn);
++||||||| merged common ancestors
++ trace_matcher ("exact_match\n");
++ add_nexthops (next, gn);
++ listnode_add (next, gn);
++=======
+ #ifdef TRACE_MATCHER
+ fprintf (stdout, "exact_match\n");
+ #endif
+ add_nexthops (next, gn);
++>>>>>>> osr/master
break;
default:
- trace_matcher ("no_match\n");
+ #ifdef TRACE_MATCHER
+ fprintf (stdout, "no_match\n");
+ #endif
break;
}
}