X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=formats%2Fctf%2Fmetadata%2Fctf-parser.y;h=68fde931ebec5457b30ca66ace9822608048ad60;hb=3730724040e3a09c58c15f387bd8fff47dc12eb4;hp=61292c91f29c380ff77e52dc91352bf811d6e5d1;hpb=ccde9b25397f3e74c60bfbcb9f77008299a44cc9;p=babeltrace.git diff --git a/formats/ctf/metadata/ctf-parser.y b/formats/ctf/metadata/ctf-parser.y index 61292c91..68fde931 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: @@ -1028,6 +1025,8 @@ void ctf_scanner_free(struct ctf_scanner *scanner) { int ret; + if (!scanner) + return; finalize_scope(&scanner->root_scope); objstack_destroy(scanner->objstack); ret = yylex_destroy(scanner->scanner);