X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=formats%2Fctf%2Fmetadata%2Fctf-parser.y;h=69fed13abb2f5e098319437b95372b19fda82673;hb=8c572eba034b95716a4bbd019dfbe0827605ba90;hp=2e1846d91421a44acf461c0254234338d9d791ff;hpb=0fbb34a5699c1dcb43d8e2b870390e7041465466;p=babeltrace.git diff --git a/formats/ctf/metadata/ctf-parser.y b/formats/ctf/metadata/ctf-parser.y index 2e1846d9..69fed13a 100644 --- a/formats/ctf/metadata/ctf-parser.y +++ b/formats/ctf/metadata/ctf-parser.y @@ -52,8 +52,8 @@ _cds_list_splice_tail (struct cds_list_head *add, struct cds_list_head *head) int yyparse(struct ctf_scanner *scanner); int yylex(union YYSTYPE *yyval, struct ctf_scanner *scanner); int yylex_init_extra(struct ctf_scanner *scanner, yyscan_t * ptr_yy_globals); -int yylex_destroy(yyscan_t yyscanner) ; -void yyset_in(FILE * in_str, yyscan_t scanner); +int yylex_destroy(yyscan_t yyscanner); +void yyrestart(FILE * in_str, yyscan_t scanner); int yydebug; @@ -800,7 +800,8 @@ struct ctf_scanner *ctf_scanner_alloc(FILE *input) fprintf(stderr, "yylex_init error\n"); goto cleanup_scanner; } - yyset_in(input, scanner); + /* Start processing new stream */ + yyrestart(input, scanner->scanner); scanner->ast = ctf_ast_alloc(); if (!scanner->ast) @@ -809,6 +810,11 @@ struct ctf_scanner *ctf_scanner_alloc(FILE *input) scanner->cs = &scanner->root_scope; CDS_INIT_LIST_HEAD(&scanner->allocated_strings); + if (yydebug) + fprintf(stdout, "Scanner input is a%s.\n", + isatty(fileno(input)) ? "n interactive tty" : + " noninteractive file"); + return scanner; cleanup_lexer: @@ -1510,6 +1516,12 @@ type_specifier: if (set_parent_node($3, $$->u.type_specifier.node)) reparent_error(scanner, "integer reparent error"); } + | STRING + { + $$ = make_node(scanner, NODE_TYPE_SPECIFIER); + $$->u.type_specifier.type = TYPESPEC_STRING; + $$->u.type_specifier.node = make_node(scanner, NODE_STRING); + } | STRING LBRAC RBRAC { $$ = make_node(scanner, NODE_TYPE_SPECIFIER);