]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
(I suggest a recompile after getting this, the ceval.c bugfix may be crucial!)
authorGuido van Rossum <guido@python.org>
Thu, 15 Apr 1993 15:33:52 +0000 (15:33 +0000)
committerGuido van Rossum <guido@python.org>
Thu, 15 Apr 1993 15:33:52 +0000 (15:33 +0000)
* Makefile: removed superfluous AR=ar, fixed misleading comment.
* ceval.c: fixed debugging code; save/restore errors in locals_2_fast.
* intrcheck.c: for SunOS etc., turn off syscall resumption.
* regexpr.h: bump number of registers to 100.

Modules/regexpr.h
Parser/intrcheck.c
Python/ceval.c

index c0276ae67bbcccb536834c106bec1b2c23e33523..ef4655447dde64352f1fc370e3823156472f7005 100644 (file)
@@ -24,7 +24,7 @@ Last modified: Mon Nov  4 15:49:46 1991 ylo
 #define HAVE_PROTOTYPES
 #endif
 
-#define RE_NREGS       10  /* number of registers available */
+#define RE_NREGS       100  /* number of registers available */
 
 typedef struct re_pattern_buffer
 {
index feab7668fc4a5cb9ce9205ae93df28164a9c3b4f..4636b3f7c2fe7428dc2fd1fc6d6017a79399aa9a 100644 (file)
@@ -140,6 +140,15 @@ initintr()
 {
        if (signal(SIGINT, SIG_IGN) != SIG_IGN)
                signal(SIGINT, intcatcher);
+#ifdef SV_INTERRUPT
+       /* This is for SunOS and other modern BSD derivatives.
+          It means that system calls (like read()) are not restarted
+          after an interrupt.  This is necessary so interrupting a
+          read() or readline() call works as expected.
+          XXX On old BSD (pure 4.2 or older) you may have to do this
+          differently! */
+       siginterrupt(SIGINT, 1);
+#endif
 }
 
 int
index 12065703c882efd1e2f6a170103f01032c027fb6..935ce527b148da476bcc18b9e23c0fd35c874bed 100644 (file)
@@ -37,16 +37,18 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "traceback.h"
 
 /* Turn this on if your compiler chokes on the big switch: */
-/* #define CASE_TOO_BIG 1 /**/
+/* #define CASE_TOO_BIG 1      /**/
 
-#ifndef NDEBUG
+/* Turn this on if you want to debug the interpreter: */
+/* (This can be on even if NDEBUG is defined) */
+/* #define DEBUG 1             /**/
+
+#if defined(DEBUG) || !defined(NDEBUG)
 /* For debugging the interpreter: */
 #define LLTRACE  1     /* Low-level trace feature */
 #define CHECKEXC 1     /* Double-check exception checking */
 #endif
 
-#define DEBUG
-
 
 /* Forward declarations */
 
@@ -183,7 +185,7 @@ eval_code(co, globals, locals, arg)
        char *name;             /* Name used by some instructions */
        int needmerge = 0;
 #ifdef LLTRACE
-       int lltrace = dictlookup(globals, "__lltrace__") != NULL;
+       int lltrace;
 #endif
 #ifdef DEBUG
        /* Make it easier to find out where we are with dbx */
@@ -233,6 +235,10 @@ eval_code(co, globals, locals, arg)
                        locals = globals;
        }
 
+#ifdef LLTRACE
+       lltrace = dictlookup(globals, "__lltrace__") != NULL;
+#endif
+
        f = newframeobject(
                        current_frame,          /*back*/
                        co,                     /*code*/
@@ -1523,6 +1529,7 @@ locals_2_fast(f, clear)
 {
        /* Merge f->f_locals into f->f_fastlocals */
        object *locals, *fast, *map;
+       object *error_type, *error_value;
        int i;
        if (f == NULL)
                return;
@@ -1534,6 +1541,7 @@ locals_2_fast(f, clear)
        if (!is_dictobject(locals) || !is_listobject(fast) ||
            !is_dictobject(map))
                return;
+       err_get(&error_type, &error_value);
        i = getdictsize(map);
        while (--i >= 0) {
                object *key;
@@ -1555,6 +1563,7 @@ locals_2_fast(f, clear)
                        if (setlistitem(fast, j, value) != 0)
                                err_clear();
        }
+       err_setval(error_type, error_value);
 }
 
 void