diff options
author | Quentin Young <qlyoung@cumulusnetworks.com> | 2016-12-02 19:26:47 +0100 |
---|---|---|
committer | Quentin Young <qlyoung@cumulusnetworks.com> | 2016-12-02 19:26:47 +0100 |
commit | 54c5dce6a5e46717ad52c80f2dc99fc36a372e28 (patch) | |
tree | 4d44f52b6461eb02d424a576f8093361730324f2 /lib/command_match.c | |
parent | lib: Add back prototypes for lexer helper funcs (diff) | |
download | frr-54c5dce6a5e46717ad52c80f2dc99fc36a372e28.tar.xz frr-54c5dce6a5e46717ad52c80f2dc99fc36a372e28.zip |
lib: Macroize CLI matcher tracing
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
Diffstat (limited to 'lib/command_match.c')
-rw-r--r-- | lib/command_match.c | 71 |
1 files changed, 38 insertions, 33 deletions
diff --git a/lib/command_match.c b/lib/command_match.c index d4996f634..25309654f 100644 --- a/lib/command_match.c +++ b/lib/command_match.c @@ -27,6 +27,15 @@ #include "command_match.h" #include "memory.h" +#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 */ @@ -115,12 +124,12 @@ command_match (struct graph *cmdgraph, assert (*el); } -#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 + if (!*el) { + trace_matcher ("No match"); + } + else { + trace_matcher ("Matched command\n->string %s\n->desc %s\n", (*el)->string, (*el)->doc); + } // free the leader token we alloc'd XFREE (MTYPE_TMP, vector_slot (vvline, 0)); @@ -193,28 +202,26 @@ command_match_r (struct graph_node *start, vector vline, unsigned int n) // get the current operating input token char *input_token = vector_slot (vline, n); -#ifdef TRACE_MATCHER - fprintf (stdout, "\"%-20s\" matches \"%-30s\" ? ", input_token, token->text); + trace_matcher ("\"%-20s\" matches \"%-30s\" ? ", input_token, token->text); enum match_type mt = match_token (token, input_token); - fprintf (stdout, "min: %d - ", minmatch); + trace_matcher ("min: %d - ", minmatch); switch (mt) { case trivial_match: - fprintf (stdout, "trivial_match "); + trace_matcher ("trivial_match "); break; case no_match: - fprintf (stdout, "no_match "); + trace_matcher ("no_match "); break; case partly_match: - fprintf (stdout, "partly_match "); + trace_matcher ("partly_match "); break; case exact_match: - fprintf (stdout, "exact_match "); + trace_matcher ("exact_match "); break; } - if (mt >= minmatch) fprintf (stdout, " MATCH"); - fprintf (stdout, "\n"); -#endif + if (mt >= minmatch) { trace_matcher (" MATCH") }; + trace_matcher ("\n"); // if we don't match this node, die if (match_token (token, input_token) < minmatch) @@ -344,37 +351,35 @@ command_complete (struct graph *graph, continue; enum match_type minmatch = min_match_level (token->type); -#ifdef TRACE_MATCHER - fprintf (stdout, "\"%s\" matches \"%s\" (%d) ? ", input_token, token->text, token->type); -#endif + trace_matcher ("\"%s\" matches \"%s\" (%d) ? ", input_token, token->text, token->type); switch (match_token (token, input_token)) { case trivial_match: -#ifdef TRACE_MATCHER - fprintf (stdout, "trivial_match\n"); -#endif + trace_matcher ("trivial_match\n"); + assert(idx == vector_active (vline) - 1); + listnode_add (next, gn); + break; case partly_match: -#ifdef TRACE_MATCHER - fprintf (stdout, "partly_match\n"); -#endif + 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) - break; + if (minmatch <= partly_match) + add_nexthops (next, gn); + + break; case exact_match: -#ifdef TRACE_MATCHER - fprintf (stdout, "exact_match\n"); -#endif + trace_matcher ("exact_match\n"); add_nexthops (next, gn); + listnode_add (next, gn); break; default: -#ifdef TRACE_MATCHER - fprintf (stdout, "no_match\n"); -#endif + trace_matcher ("no_match\n"); break; } } |