From bbdd17885cbefeeb30cc6993b37d6e825c342e5a Mon Sep 17 00:00:00 2001 From: Přemysl Janouch Date: Sun, 21 May 2017 13:22:24 +0200 Subject: repl: slight refactoring --- repl.c | 48 ++++++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/repl.c b/repl.c index c2fbf02..b41f241 100644 --- a/repl.c +++ b/repl.c @@ -21,6 +21,27 @@ #include #include +static void +run (struct context *ctx, struct item *program) { + struct item *result = NULL; + (void) execute (ctx, program, &result); + item_free_list (program); + + const char *failure = ctx->error; + if (ctx->memory_failure) + failure = "memory allocation failure"; + if (failure) { + printf ("\x1b[31m%s: %s\x1b[0m\n", "runtime error", failure); + free (ctx->error); + ctx->error = NULL; + ctx->memory_failure = false; + } else { + print_tree (result, 0); + putchar ('\n'); + item_free_list (result); + } +} + int main (int argc, char *argv[]) { (void) argc; @@ -43,31 +64,14 @@ main (int argc, char *argv[]) { const char *e = NULL; struct item *program = parser_run (&parser, &e); free (line); - if (e) { + if (e) printf ("\x1b[31m%s: %s\x1b[0m\n", "parse error", e); - parser_free (&parser); - continue; - } + else + run (&ctx, program); parser_free (&parser); - - struct item *result = NULL; - (void) execute (&ctx, program, &result); - item_free_list (program); - - const char *failure = ctx.error; - if (ctx.memory_failure) - failure = "memory allocation failure"; - if (failure) { - printf ("\x1b[31m%s: %s\x1b[0m\n", "runtime error", failure); - free (ctx.error); - ctx.error = NULL; - ctx.memory_failure = false; - } else { - print_tree (result, 0); - putchar ('\n'); - item_free_list (result); - } } + + putchar ('\n'); context_free (&ctx); return 0; } -- cgit v1.2.3-70-g09d2