From cb2f43eea2515ca1d2d97e24cbb067f7804a651c Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Tue, 18 Feb 2014 17:44:37 -0500 Subject: [PATCH] CTF parser: prepare for incremental metadata parsing Associate the file pointer to ctf_scanner_append_ast() rather than to ctf_scanner_alloc(). Signed-off-by: Mathieu Desnoyers --- formats/ctf/ctf.c | 4 ++-- formats/ctf/metadata/ctf-parser-test.c | 4 ++-- formats/ctf/metadata/ctf-parser.y | 19 ++++++++----------- formats/ctf/metadata/ctf-scanner.h | 4 ++-- 4 files changed, 14 insertions(+), 17 deletions(-) diff --git a/formats/ctf/ctf.c b/formats/ctf/ctf.c index 6d21b876..521d7ad0 100644 --- a/formats/ctf/ctf.c +++ b/formats/ctf/ctf.c @@ -1271,13 +1271,13 @@ int ctf_open_trace_metadata_read(struct ctf_trace *td, rewind(fp); } - scanner = ctf_scanner_alloc(fp); + scanner = ctf_scanner_alloc(); if (!scanner) { fprintf(stderr, "[error] Error allocating scanner\n"); ret = -ENOMEM; goto end_scanner_alloc; } - ret = ctf_scanner_append_ast(scanner); + ret = ctf_scanner_append_ast(scanner, fp); if (ret) { fprintf(stderr, "[error] Error creating AST\n"); goto end; diff --git a/formats/ctf/metadata/ctf-parser-test.c b/formats/ctf/metadata/ctf-parser-test.c index 45dbe681..d53e0cfe 100644 --- a/formats/ctf/metadata/ctf-parser-test.c +++ b/formats/ctf/metadata/ctf-parser-test.c @@ -45,12 +45,12 @@ int main(int argc, char **argv) babeltrace_debug = 1; babeltrace_verbose = 1; - scanner = ctf_scanner_alloc(stdin); + scanner = ctf_scanner_alloc(); if (!scanner) { fprintf(stderr, "Error allocating scanner\n"); return -ENOMEM; } - ret = ctf_scanner_append_ast(scanner); + ret = ctf_scanner_append_ast(scanner, stdin); if (ret) { fprintf(stderr, "Error creating AST\n"); goto end; diff --git a/formats/ctf/metadata/ctf-parser.y b/formats/ctf/metadata/ctf-parser.y index 61292c91..61ab4f58 100644 --- a/formats/ctf/metadata/ctf-parser.y +++ b/formats/ctf/metadata/ctf-parser.y @@ -972,12 +972,18 @@ static struct ctf_ast *ctf_ast_alloc(struct ctf_scanner *scanner) return ast; } -int ctf_scanner_append_ast(struct ctf_scanner *scanner) +int ctf_scanner_append_ast(struct ctf_scanner *scanner, FILE *input) { + /* Start processing new stream */ + yyrestart(input, scanner->scanner); + if (yydebug) + fprintf(stdout, "Scanner input is a%s.\n", + isatty(fileno(input)) ? "n interactive tty" : + " noninteractive file"); return yyparse(scanner, scanner->scanner); } -struct ctf_scanner *ctf_scanner_alloc(FILE *input) +struct ctf_scanner *ctf_scanner_alloc(void) { struct ctf_scanner *scanner; int ret; @@ -988,15 +994,11 @@ struct ctf_scanner *ctf_scanner_alloc(FILE *input) if (!scanner) return NULL; memset(scanner, 0, sizeof(*scanner)); - ret = yylex_init_extra(scanner, &scanner->scanner); if (ret) { printf_fatal("yylex_init error"); goto cleanup_scanner; } - /* Start processing new stream */ - yyrestart(input, scanner->scanner); - scanner->objstack = objstack_create(); if (!scanner->objstack) goto cleanup_lexer; @@ -1006,11 +1008,6 @@ struct ctf_scanner *ctf_scanner_alloc(FILE *input) init_scope(&scanner->root_scope, NULL); scanner->cs = &scanner->root_scope; - if (yydebug) - fprintf(stdout, "Scanner input is a%s.\n", - isatty(fileno(input)) ? "n interactive tty" : - " noninteractive file"); - return scanner; cleanup_objstack: diff --git a/formats/ctf/metadata/ctf-scanner.h b/formats/ctf/metadata/ctf-scanner.h index 012a4f3b..51484a1d 100644 --- a/formats/ctf/metadata/ctf-scanner.h +++ b/formats/ctf/metadata/ctf-scanner.h @@ -39,9 +39,9 @@ struct ctf_scanner { struct objstack *objstack; }; -struct ctf_scanner *ctf_scanner_alloc(FILE *input); +struct ctf_scanner *ctf_scanner_alloc(void); void ctf_scanner_free(struct ctf_scanner *scanner); -int ctf_scanner_append_ast(struct ctf_scanner *scanner); +int ctf_scanner_append_ast(struct ctf_scanner *scanner, FILE *input); static inline struct ctf_ast *ctf_scanner_get_ast(struct ctf_scanner *scanner) -- 2.34.1