From 8c834e5a0a0881093d0a8c212cde27b318e7b11d Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Sat, 30 Mar 2013 10:07:11 -0400 Subject: [PATCH] Show line numbers in CTF parser errors Suggested-by: Etienne Bergeron Signed-off-by: Mathieu Desnoyers --- formats/ctf/metadata/ctf-lexer.l | 4 ++-- formats/ctf/metadata/ctf-parser.y | 6 +++++- formats/ctf/metadata/ctf-scanner.h | 1 + 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/formats/ctf/metadata/ctf-lexer.l b/formats/ctf/metadata/ctf-lexer.l index a7793974..905da991 100644 --- a/formats/ctf/metadata/ctf-lexer.l +++ b/formats/ctf/metadata/ctf-lexer.l @@ -64,11 +64,11 @@ ESCSEQ \\(\'|\"|\?|\\|a|b|f|n|r|t|v|{OCTALDIGIT}{1,3}|u{HEXDIGIT}{4}|U{HEXDIG "/*" BEGIN(comment_ml); [^*\n]* /* eat anything that's not a '*' */ "*"+[^*/\n]* /* eat up '*'s not followed by '/'s */ -\n ++yylineno; +\n "*"+"/" BEGIN(INITIAL); "//" BEGIN(comment_sl); -[^\n]*\n ++yylineno; BEGIN(INITIAL); +[^\n]*\n BEGIN(INITIAL); L\' BEGIN(char_const); return CHARACTER_CONSTANT_START; \' BEGIN(char_const); return CHARACTER_CONSTANT_START; diff --git a/formats/ctf/metadata/ctf-parser.y b/formats/ctf/metadata/ctf-parser.y index 72b0978e..912f1212 100644 --- a/formats/ctf/metadata/ctf-parser.y +++ b/formats/ctf/metadata/ctf-parser.y @@ -65,6 +65,8 @@ BT_HIDDEN int yylex_destroy(yyscan_t yyscanner); BT_HIDDEN void yyrestart(FILE * in_str, yyscan_t scanner); +BT_HIDDEN +int yyget_lineno(yyscan_t yyscanner); struct gc_string { struct bt_list_head gc; @@ -818,7 +820,8 @@ static int set_parent_node(struct ctf_node *node, BT_HIDDEN void yyerror(struct ctf_scanner *scanner, const char *str) { - fprintf(stderr, "error %s\n", str); + fprintf(stderr, "error at line %d: %s\n", + yyget_lineno(scanner->scanner), str); } BT_HIDDEN @@ -936,6 +939,7 @@ void ctf_scanner_free(struct ctf_scanner *scanner) %define api.pure /* %locations */ +%error-verbose %parse-param {struct ctf_scanner *scanner} %lex-param {struct ctf_scanner *scanner} /* diff --git a/formats/ctf/metadata/ctf-scanner.h b/formats/ctf/metadata/ctf-scanner.h index 21010fd4..262092f7 100644 --- a/formats/ctf/metadata/ctf-scanner.h +++ b/formats/ctf/metadata/ctf-scanner.h @@ -37,6 +37,7 @@ struct ctf_scanner { struct ctf_scanner_scope root_scope; struct ctf_scanner_scope *cs; struct bt_list_head allocated_strings; + size_t lineno; }; struct ctf_scanner *ctf_scanner_alloc(FILE *input); -- 2.34.1