CTF parser: prepare for incremental metadata parsing
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 18 Feb 2014 22:44:37 +0000 (17:44 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Tue, 18 Feb 2014 22:44:37 +0000 (17:44 -0500)
Associate the file pointer to ctf_scanner_append_ast() rather than to
ctf_scanner_alloc().

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
formats/ctf/ctf.c
formats/ctf/metadata/ctf-parser-test.c
formats/ctf/metadata/ctf-parser.y
formats/ctf/metadata/ctf-scanner.h

index 6d21b876dad422628f0884ea7e9e21be7c2db063..521d7ad0643f31fcc2a72d46ebd1414dc25e8bcc 100644 (file)
@@ -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;
index 45dbe6818da4cb72ccc42194fb44b3617844103a..d53e0cfef19f1949ae7291a74cff1d0bbfa37cfd 100644 (file)
@@ -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;
index 61292c91f29c380ff77e52dc91352bf811d6e5d1..61ab4f588ca25c31df5cf31ff9b2a7c896ff504e 100644 (file)
@@ -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:
index 012a4f3b9a6cb5d2a074a9f127c124c463643298..51484a1d8252bac74bc94190b04f3f6c63a8c4b5 100644 (file)
@@ -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)
This page took 0.028053 seconds and 4 git commands to generate.