From 118ec70ea27000db428ba3e3a757f4b423670db6 Mon Sep 17 00:00:00 2001 From: Skip Montanaro Date: Thu, 15 Aug 2002 01:20:16 +0000 Subject: [PATCH] provide less mysterious error messages when seeing end-of-line in single-quoted strings or end-of-file in triple-quoted strings. closes patch 586561. --- Include/errcode.h | 2 ++ Parser/tokenizer.c | 9 ++++++--- Python/pythonrun.c | 6 ++++++ 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/Include/errcode.h b/Include/errcode.h index a8b1aaab6f7..985911eea4f 100644 --- a/Include/errcode.h +++ b/Include/errcode.h @@ -26,6 +26,8 @@ extern "C" { #define E_TOODEEP 20 /* Too many indentation levels */ #define E_DEDENT 21 /* No matching outer block for dedent */ #define E_DECODE 22 /* Error in decoding into Unicode */ +#define E_EOFS 23 /* EOF in triple-quoted string */ +#define E_EOLS 24 /* EOL in single-quoted string */ #ifdef __cplusplus } diff --git a/Parser/tokenizer.c b/Parser/tokenizer.c index 64ff320d65f..7e7a37025ca 100644 --- a/Parser/tokenizer.c +++ b/Parser/tokenizer.c @@ -1276,14 +1276,17 @@ tok_get(register struct tok_state *tok, char **p_start, char **p_end) c = tok_nextc(tok); if (c == '\n') { if (!triple) { - tok->done = E_TOKEN; + tok->done = E_EOLS; tok_backup(tok, c); return ERRORTOKEN; } tripcount = 0; } else if (c == EOF) { - tok->done = E_TOKEN; + if (triple) + tok->done = E_EOFS; + else + tok->done = E_EOLS; tok->cur = tok->inp; return ERRORTOKEN; } @@ -1305,7 +1308,7 @@ tok_get(register struct tok_state *tok, char **p_start, char **p_end) tripcount = 0; c = tok_nextc(tok); if (c == EOF) { - tok->done = E_TOKEN; + tok->done = E_EOLS; tok->cur = tok->inp; return ERRORTOKEN; } diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 006ff083d25..28a8e28e118 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -1247,6 +1247,12 @@ err_input(perrdetail *err) case E_TOKEN: msg = "invalid token"; break; + case E_EOFS: + msg = "EOF while scanning triple-quoted string"; + break; + case E_EOLS: + msg = "EOL while scanning single-quoted string"; + break; case E_INTR: PyErr_SetNone(PyExc_KeyboardInterrupt); Py_XDECREF(v);