X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=formats%2Fctf%2Fmetadata%2Fctf-parser.y;h=821f0f7469b351cff47707e8be85d7fd3d165b12;hp=61292c91f29c380ff77e52dc91352bf811d6e5d1;hb=3f4bae2a85a43606999ca7e701dcc9a493352ed3;hpb=ccde9b25397f3e74c60bfbcb9f77008299a44cc9 diff --git a/formats/ctf/metadata/ctf-parser.y b/formats/ctf/metadata/ctf-parser.y index 61292c91..821f0f74 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); @@ -1252,6 +1251,15 @@ postfix_expression: bt_list_splice(&($1)->tmp_head, &($$)->tmp_head); bt_list_add_tail(&($$)->siblings, &($$)->tmp_head); } + | postfix_expression DOT keywords + { + $$ = make_node(scanner, NODE_UNARY_EXPRESSION); + $$->u.unary_expression.type = UNARY_STRING; + $$->u.unary_expression.u.string = yylval.s; + $$->u.unary_expression.link = UNARY_DOTLINK; + bt_list_splice(&($1)->tmp_head, &($$)->tmp_head); + bt_list_add_tail(&($$)->siblings, &($$)->tmp_head); + } | postfix_expression RARROW IDENTIFIER { $$ = make_node(scanner, NODE_UNARY_EXPRESSION);