diff Python/ceval.c @ 1273:69a066b6b1ff legacy-trunk

(I suggest a recompile after getting this, the ceval.c bugfix may be crucial!) * 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.
author Guido van Rossum <guido@python.org>
date Thu, 15 Apr 1993 15:33:52 +0000
parents 2919b448e385
children e0464e7115ca
line wrap: on
line diff
--- a/Python/ceval.c	Thu Apr 08 12:56:19 1993 +0000
+++ b/Python/ceval.c	Thu Apr 15 15:33:52 1993 +0000
@@ -37,16 +37,18 @@
 #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 @@
 	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 @@
 			locals = globals;
 	}
 
+#ifdef LLTRACE
+	lltrace = dictlookup(globals, "__lltrace__") != NULL;
+#endif
+
 	f = newframeobject(
 			current_frame,		/*back*/
 			co,			/*code*/
@@ -1523,6 +1529,7 @@
 {
 	/* 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 @@
 	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 @@
 			if (setlistitem(fast, j, value) != 0)
 				err_clear();
 	}
+	err_setval(error_type, error_value);
 }
 
 void