]> git.puffer.fish Git - matthieu/frr.git/commitdiff
lib: parser: fix allocation counting
authorDavid Lamparter <equinox@opensourcerouting.org>
Thu, 26 Jan 2017 21:19:32 +0000 (22:19 +0100)
committerDavid Lamparter <equinox@opensourcerouting.org>
Tue, 31 Jan 2017 14:28:19 +0000 (15:28 +0100)
command_lex.l was allocating as MTYPE_TMP, while command_parse.y would
just call free().  Make both use MTYPE_LEX.

Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
lib/command_lex.l
lib/command_parse.y

index 2a241abbec679966a6ae6b4652bd0a69073b0f68..deec1757c28cf84049ceca2468c969f864cb0093 100644 (file)
@@ -59,13 +59,13 @@ RANGE           \({NUMBER}[ ]?\-[ ]?{NUMBER}\)
 %}
 
 [ \t]+          LOC_STEP /* ignore whitespace */;
-{WORD}          {yylval->string = XSTRDUP(MTYPE_TMP, yytext); return WORD;}
-{IPV4}          {yylval->string = XSTRDUP(MTYPE_TMP, yytext); return IPV4;}
-{IPV4_PREFIX}   {yylval->string = XSTRDUP(MTYPE_TMP, yytext); return IPV4_PREFIX;}
-{IPV6}          {yylval->string = XSTRDUP(MTYPE_TMP, yytext); return IPV6;}
-{IPV6_PREFIX}   {yylval->string = XSTRDUP(MTYPE_TMP, yytext); return IPV6_PREFIX;}
-{VARIABLE}      {yylval->string = XSTRDUP(MTYPE_TMP, yytext); return VARIABLE;}
-{RANGE}         {yylval->string = XSTRDUP(MTYPE_TMP, yytext); return RANGE;}
+{WORD}          {yylval->string = XSTRDUP(MTYPE_LEX, yytext); return WORD;}
+{IPV4}          {yylval->string = XSTRDUP(MTYPE_LEX, yytext); return IPV4;}
+{IPV4_PREFIX}   {yylval->string = XSTRDUP(MTYPE_LEX, yytext); return IPV4_PREFIX;}
+{IPV6}          {yylval->string = XSTRDUP(MTYPE_LEX, yytext); return IPV6;}
+{IPV6_PREFIX}   {yylval->string = XSTRDUP(MTYPE_LEX, yytext); return IPV6_PREFIX;}
+{VARIABLE}      {yylval->string = XSTRDUP(MTYPE_LEX, yytext); return VARIABLE;}
+{RANGE}         {yylval->string = XSTRDUP(MTYPE_LEX, yytext); return RANGE;}
 .               {return yytext[0];}
 %%
 
index e9d36ca41cfa285e1192db42ce919dd43a1ddb36..1c220b6b69843e574e380bf10acf574a944be423 100644 (file)
 %code requires {
   #include "stdlib.h"
   #include "string.h"
+  #include "memory.h"
   #include "command.h"
   #include "log.h"
   #include "graph.h"
 
+  DECLARE_MTYPE(LEX)
+
   #define YYSTYPE CMD_YYSTYPE
   #define YYLTYPE CMD_YYLTYPE
   struct parser_ctx;
@@ -216,7 +219,7 @@ simple_token:
 literal_token: WORD
 {
   $$ = new_token_node (ctx, WORD_TKN, $1, doc_next(ctx));
-  free ($1);
+  XFREE (MTYPE_LEX, $1);
 }
 ;
 
@@ -224,27 +227,27 @@ placeholder_token:
   IPV4
 {
   $$ = new_token_node (ctx, IPV4_TKN, $1, doc_next(ctx));
-  free ($1);
+  XFREE (MTYPE_LEX, $1);
 }
 | IPV4_PREFIX
 {
   $$ = new_token_node (ctx, IPV4_PREFIX_TKN, $1, doc_next(ctx));
-  free ($1);
+  XFREE (MTYPE_LEX, $1);
 }
 | IPV6
 {
   $$ = new_token_node (ctx, IPV6_TKN, $1, doc_next(ctx));
-  free ($1);
+  XFREE (MTYPE_LEX, $1);
 }
 | IPV6_PREFIX
 {
   $$ = new_token_node (ctx, IPV6_PREFIX_TKN, $1, doc_next(ctx));
-  free ($1);
+  XFREE (MTYPE_LEX, $1);
 }
 | VARIABLE
 {
   $$ = new_token_node (ctx, VARIABLE_TKN, $1, doc_next(ctx));
-  free ($1);
+  XFREE (MTYPE_LEX, $1);
 }
 | RANGE
 {
@@ -260,7 +263,7 @@ placeholder_token:
   // validate range
   if (token->min > token->max) cmd_yyerror (&@1, ctx, "Invalid range.");
 
-  free ($1);
+  XFREE (MTYPE_LEX, $1);
 }
 
 /* <selector|set> productions */
@@ -332,6 +335,8 @@ selector: '[' selector_seq_seq ']'
 
 #undef scanner
 
+DEFINE_MTYPE(LIB, LEX, "Lexer token (temporary)")
+
 void
 command_parse_format (struct graph *graph, struct cmd_element *cmd)
 {