Mercurial > cpython-lru_cache-weakref
view Python/thread.c @ 16831:27f04d714ecb legacy-trunk
Print the offending line of code in the traceback for SyntaxErrors
raised by the compiler.
XXX For now, text entered into the interactive intepreter is not
printed in the traceback.
Inspired by a patch from Roman Sulzhyk
compile.c:
Add helper fetch_program_text() that opens a file and reads until it
finds the specified line number. The code is a near duplicate of
similar code in traceback.c.
Modify com_error() to pass two arguments to SyntaxError constructor,
where the second argument contains the offending text when possible.
Modify set_error_location(), now used only by the symtable pass, to
set the text attribute on existing exceptions.
pythonrun.c:
Change parse_syntax_error() to continue of the offset attribute of a
SyntaxError is None. In this case, it sets offset to -1.
Move code from PyErr_PrintEx() into helper function
print_error_text(). In the helper, only print the caret for a
SyntaxError if offset > 0.
| author | Jeremy Hylton <jeremy@alum.mit.edu> |
|---|---|
| date | Wed, 28 Feb 2001 07:07:43 +0000 |
| parents | 457f0df46dd9 |
| children | 2dea40e40d9d |
line wrap: on
line source
/* Thread package. This is intended to be usable independently from Python. The implementation for system foobar is in a file thread_foobar.h which is included by this file dependent on config settings. Stuff shared by all thread_*.h files is collected here. */ #include "config.h" /* config.h may or may not define DL_IMPORT */ #ifndef DL_IMPORT /* declarations for DLL import/export */ #define DL_IMPORT(RTYPE) RTYPE #endif #ifndef DONT_HAVE_STDIO_H #include <stdio.h> #endif #ifdef HAVE_STDLIB_H #include <stdlib.h> #else #ifdef Py_DEBUG extern char *getenv(const char *); #endif #endif #ifdef HAVE_UNISTD_H #include <unistd.h> #endif #ifdef __DGUX #define _USING_POSIX4A_DRAFT6 #endif #ifdef __sgi #ifndef HAVE_PTHREAD_H /* XXX Need to check in configure.in */ #undef _POSIX_THREADS #endif #endif #include "pythread.h" #ifdef __ksr__ #define _POSIX_THREADS #endif #ifndef _POSIX_THREADS #ifdef __sgi #define SGI_THREADS #endif #ifdef HAVE_THREAD_H #define SOLARIS_THREADS #endif #if defined(sun) && !defined(SOLARIS_THREADS) #define SUN_LWP #endif #if defined(__MWERKS__) && !defined(__BEOS__) #define _POSIX_THREADS #endif #endif /* _POSIX_THREADS */ #ifdef Py_DEBUG static int thread_debug = 0; #define dprintf(args) ((thread_debug & 1) && printf args) #define d2printf(args) ((thread_debug & 8) && printf args) #else #define dprintf(args) #define d2printf(args) #endif static int initialized; static void PyThread__init_thread(void); /* Forward */ void PyThread_init_thread(void) { #ifdef Py_DEBUG char *p = getenv("THREADDEBUG"); if (p) { if (*p) thread_debug = atoi(p); else thread_debug = 1; } #endif /* Py_DEBUG */ if (initialized) return; initialized = 1; dprintf(("PyThread_init_thread called\n")); PyThread__init_thread(); } #ifdef SGI_THREADS #include "thread_sgi.h" #endif #ifdef SOLARIS_THREADS #include "thread_solaris.h" #endif #ifdef SUN_LWP #include "thread_lwp.h" #endif #ifdef HAVE_PTH #include "thread_pth.h" #undef _POSIX_THREADS #endif #ifdef _POSIX_THREADS #include "thread_pthread.h" #endif #ifdef C_THREADS #include "thread_cthread.h" #endif #ifdef NT_THREADS #include "thread_nt.h" #endif #ifdef OS2_THREADS #include "thread_os2.h" #endif #ifdef BEOS_THREADS #include "thread_beos.h" #endif #ifdef WINCE_THREADS #include "thread_wince.h" #endif /* #ifdef FOOBAR_THREADS #include "thread_foobar.h" #endif */
