[Python-checkins] CVS: python/dist/src/Python exceptions.c,1.6,1.7 pythonrun.c,2.101,2.102
Fred L. Drake
python-dev@python.org
Tue, 11 Jul 2000 10:53:03 -0700
Update of /cvsroot/python/python/dist/src/Python
In directory slayer.i.sourceforge.net:/tmp/cvs-serv7915/Python
Modified Files:
exceptions.c pythonrun.c
Log Message:
Create two new exceptions: IndentationError and TabError. These are
used for indentation related errors. This patch includes Ping's
improvements for indentation-related error messages.
Closes SourceForge patches #100734 and #100856.
Index: exceptions.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/exceptions.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -r1.6 -r1.7
*** exceptions.c 2000/07/09 22:27:10 1.6
--- exceptions.c 2000/07/11 17:52:59 1.7
***************
*** 69,72 ****
--- 69,77 ----
+-- AttributeError\n\
+-- SyntaxError\n\
+ | |\n\
+ | +-- IndentationError\n\
+ | |\n\
+ | +-- TabError\n\
+ |\n\
+-- TypeError\n\
+-- AssertionError\n\
***************
*** 784,787 ****
--- 789,798 ----
MemoryError__doc__[] = "Out of memory.";
+ static char
+ IndentationError__doc__[] = "Improper indentation.";
+
+ static char
+ TabError__doc__[] = "Improper mixture of spaces and tabs.";
+
***************
*** 818,821 ****
--- 829,834 ----
PyObject *PyExc_NotImplementedError;
PyObject *PyExc_SyntaxError;
+ PyObject *PyExc_IndentationError;
+ PyObject *PyExc_TabError;
PyObject *PyExc_SystemError;
PyObject *PyExc_SystemExit;
***************
*** 879,882 ****
--- 892,899 ----
{"SyntaxError", &PyExc_SyntaxError, 0, SyntaxError__doc__,
SyntaxError_methods, SyntaxError__classinit__},
+ {"IndentationError", &PyExc_IndentationError, &PyExc_SyntaxError,
+ IndentationError__doc__},
+ {"TabError", &PyExc_TabError, &PyExc_IndentationError,
+ TabError__doc__},
{"AssertionError", &PyExc_AssertionError, 0, AssertionError__doc__},
{"LookupError", &PyExc_LookupError, 0, LookupError__doc__},
Index: pythonrun.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/pythonrun.c,v
retrieving revision 2.101
retrieving revision 2.102
diff -C2 -r2.101 -r2.102
*** pythonrun.c 2000/07/09 03:09:56 2.101
--- pythonrun.c 2000/07/11 17:53:00 2.102
***************
*** 15,18 ****
--- 15,19 ----
#include "grammar.h"
#include "node.h"
+ #include "token.h"
#include "parsetok.h"
#include "errcode.h"
***************
*** 984,989 ****
perrdetail *err;
{
! PyObject *v, *w;
char *msg = NULL;
v = Py_BuildValue("(ziiz)", err->filename,
err->lineno, err->offset, err->text);
--- 985,991 ----
perrdetail *err;
{
! PyObject *v, *w, *errtype;
char *msg = NULL;
+ errtype = PyExc_SyntaxError;
v = Py_BuildValue("(ziiz)", err->filename,
err->lineno, err->offset, err->text);
***************
*** 994,998 ****
switch (err->error) {
case E_SYNTAX:
! msg = "invalid syntax";
break;
case E_TOKEN:
--- 996,1010 ----
switch (err->error) {
case E_SYNTAX:
! errtype = PyExc_IndentationError;
! if (err->expected == INDENT)
! msg = "expected an indented block";
! else if (err->token == INDENT)
! msg = "unexpected indent";
! else if (err->token == DEDENT)
! msg = "unexpected unindent";
! else {
! errtype = PyExc_SyntaxError;
! msg = "invalid syntax";
! }
break;
case E_TOKEN:
***************
*** 1010,1014 ****
msg = "unexpected EOF while parsing";
break;
! case E_INDENT:
msg = "inconsistent use of tabs and spaces in indentation";
break;
--- 1022,1027 ----
msg = "unexpected EOF while parsing";
break;
! case E_TABSPACE:
! errtype = PyExc_TabError;
msg = "inconsistent use of tabs and spaces in indentation";
break;
***************
*** 1016,1019 ****
--- 1029,1040 ----
msg = "expression too long";
break;
+ case E_DEDENT:
+ errtype = PyExc_IndentationError;
+ msg = "unindent does not match any outer indentation level";
+ break;
+ case E_TOODEEP:
+ errtype = PyExc_IndentationError;
+ msg = "too many levels of indentation";
+ break;
default:
fprintf(stderr, "error=%d\n", err->error);
***************
*** 1023,1027 ****
w = Py_BuildValue("(sO)", msg, v);
Py_XDECREF(v);
! PyErr_SetObject(PyExc_SyntaxError, w);
Py_XDECREF(w);
}
--- 1044,1048 ----
w = Py_BuildValue("(sO)", msg, v);
Py_XDECREF(v);
! PyErr_SetObject(errtype, w);
Py_XDECREF(w);
}