diff Python/ceval.c @ 14232:1f1a156ed5af legacy-trunk

Replace the run-time 'future-bytecode-stream-inspection' hack to find out how 'import' was called with a compiletime mechanism: create either a tuple of the import arguments, or None (in the case of a normal import), add it to the code-block constants, and load it onto the stack before calling IMPORT_NAME.
author Thomas Wouters <thomas@python.org>
date Sun, 27 Aug 2000 20:31:27 +0000
parents cbe9590d2344
children 74f7f237f739
line wrap: on
line diff
--- a/Python/ceval.c	Sun Aug 27 20:18:17 2000 +0000
+++ b/Python/ceval.c	Sun Aug 27 20:31:27 2000 +0000
@@ -71,7 +71,6 @@
 static PyObject *build_class(PyObject *, PyObject *, PyObject *);
 static int exec_statement(PyFrameObject *,
 			  PyObject *, PyObject *, PyObject *);
-static PyObject *find_from_args(PyFrameObject *, int);
 static void set_exc_info(PyThreadState *, PyObject *, PyObject *, PyObject *);
 static void reset_exc_info(PyThreadState *);
 
@@ -1627,11 +1626,7 @@
 						"__import__ not found");
 				break;
 			}
-			u = find_from_args(f, INSTR_OFFSET());
-			if (u == NULL) {
-				x = u;
-				break;
-			}
+			u = POP();
 			w = Py_BuildValue("(OOOO)",
 				    w,
 				    f->f_globals,
@@ -3068,55 +3063,6 @@
 	return 0;
 }
 
-/* Hack for ni.py */
-static PyObject *
-find_from_args(PyFrameObject *f, int nexti)
-{
-	int opcode;
-	int oparg;
-	PyObject *list, *name;
-	unsigned char *next_instr;
-	
-	_PyCode_GETCODEPTR(f->f_code, &next_instr);
-	next_instr += nexti;
-
-	opcode = (*next_instr++);
-	if (opcode != IMPORT_FROM && opcode != IMPORT_STAR) {
-		Py_INCREF(Py_None);
-		return Py_None;
-	}
-	
-	list = PyList_New(0);
-	if (list == NULL)
-		return NULL;
-
-	if (opcode == IMPORT_STAR) {
-		name = PyString_FromString("*");
-		if (!name)
-			Py_DECREF(list);
-		else {
-			if (PyList_Append(list, name) < 0) {
-				Py_DECREF(list);
-			}
-			Py_DECREF(name);
-		}
-	} else {
-		do {
-			oparg = (next_instr[1]<<8) + next_instr[0];
-			/* Jump over our own argument, the next instruction
-			   (which is a STORE), and its argument.*/
-			next_instr += 5;
-			name = Getnamev(f, oparg);
-			if (PyList_Append(list, name) < 0) {
-				Py_DECREF(list);
-				break;
-			}
-			opcode = (*next_instr++);
-		} while (opcode == IMPORT_FROM);
-	}
-	return list;
-}
-
 
 #ifdef DYNAMIC_EXECUTION_PROFILE