From 55b7f20fda27ad22d211e7b881194fc414687274 Mon Sep 17 00:00:00 2001 From: David Lamparter Date: Thu, 26 Jan 2017 22:19:32 +0100 Subject: [PATCH] lib: parser: fix allocation counting 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 --- lib/command_lex.l | 14 +++++++------- lib/command_parse.y | 19 ++++++++++++------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/lib/command_lex.l b/lib/command_lex.l index 2a241abbec..deec1757c2 100644 --- a/lib/command_lex.l +++ b/lib/command_lex.l @@ -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];} %% diff --git a/lib/command_parse.y b/lib/command_parse.y index e9d36ca41c..1c220b6b69 100644 --- a/lib/command_parse.y +++ b/lib/command_parse.y @@ -46,10 +46,13 @@ %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); } /* 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) { -- 2.39.5