From 59a5b833216b62f28c816df7c9129bf0954993e0 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sun, 25 Mar 2012 14:21:47 +0200 Subject: Change parse to push API, fix some parser bugs --- src/config.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'src/config.c') diff --git a/src/config.c b/src/config.c index 12b92b3..d584264 100644 --- a/src/config.c +++ b/src/config.c @@ -90,6 +90,10 @@ static bool config_match(const char *opt, ...) { static void fastd_read_config(fastd_context *ctx, fastd_config *conf, const char *filename) { yyscan_t scanner; + fastd_config_pstate *ps; + int token; + YYSTYPE token_val; + FILE *file; bool use_stdin = !strcmp(filename, "-"); @@ -98,12 +102,20 @@ static void fastd_read_config(fastd_context *ctx, fastd_config *conf, const char else file = fopen(filename, "r"); - fastd_config_lex_init(&scanner); - fastd_config_set_in(file, scanner); + fastd_config_yylex_init(&scanner); + fastd_config_yyset_in(file, scanner); + + ps = fastd_config_pstate_new(); + + do { + token = fastd_config_yylex(&token_val, scanner); - fastd_config_parse(ctx, conf, scanner); + if (token < 0) + exit_error(ctx, "config error: %s", token_val.str); + } while(fastd_config_push_parse(ps, token, &token_val, ctx, conf) == YYPUSH_MORE); - fastd_config_lex_destroy(scanner); + fastd_config_pstate_delete(ps); + fastd_config_yylex_destroy(scanner); if (!use_stdin) fclose(file); -- cgit v1.2.3