From 07e212ad05a2a99cb69a2231ddc02187ef2f24c6 Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Mon, 8 Feb 2010 04:29:05 -0500 Subject: [PATCH] Stop parsing if the parser panics. --HG-- branch : calculator-experiment --- calculator.c | 2 +- calculator.lemon | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/calculator.c b/calculator.c index a6a1e8f7..38430e27 100644 --- a/calculator.c +++ b/calculator.c @@ -526,7 +526,7 @@ static void MOJOSHADER_compile(const char *filename, // !!! FIXME: when a rule reduces down later. TokenData token = { ctx.token, ctx.tokenlen }; ParseCalculator(pParser, convert_to_lemon_token(&ctx), token, &ctx); - } while (ctx.tokenval != TOKEN_EOI); + } while ((!ctx.isfail) && (ctx.tokenval != TOKEN_EOI)); ParseCalculatorFree(pParser, f, d); } diff --git a/calculator.lemon b/calculator.lemon index ad5467ec..2d8a154c 100644 --- a/calculator.lemon +++ b/calculator.lemon @@ -36,11 +36,14 @@ } %parse_failure { - fprintf(stderr,"Giving up. Parser is hopelessly lost...\n"); + ctx->isfail = 1; + fprintf(stderr, "Giving up. Parser is hopelessly lost...\n"); + } %stack_overflow { - fprintf(stderr,"Giving up. Parser stack overflow\n"); + ctx->isfail = 1; + fprintf(stderr, "Giving up. Parser stack overflow\n"); } // operator precedence (matches C spec)...