mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
revert unintended changes
This commit is contained in:
parent
013783c529
commit
20f9c3c50f
7 changed files with 11 additions and 31 deletions
|
@ -123,7 +123,6 @@ extern "C" {
|
||||||
#define LOAD_CLOSURE 135 /* Load free variable from closure */
|
#define LOAD_CLOSURE 135 /* Load free variable from closure */
|
||||||
#define LOAD_DEREF 136 /* Load and dereference from closure cell */
|
#define LOAD_DEREF 136 /* Load and dereference from closure cell */
|
||||||
#define STORE_DEREF 137 /* Store into cell */
|
#define STORE_DEREF 137 /* Store into cell */
|
||||||
#define LOAD_NAME_LOCAL_ONLY 138
|
|
||||||
|
|
||||||
/* The next 3 opcodes must be contiguous and satisfy
|
/* The next 3 opcodes must be contiguous and satisfy
|
||||||
(CALL_FUNCTION_VAR - CALL_FUNCTION) & 3 == 1 */
|
(CALL_FUNCTION_VAR - CALL_FUNCTION) & 3 == 1 */
|
||||||
|
|
|
@ -88,7 +88,6 @@ PyAPI_FUNC(void) PySymtable_Free(struct symtable *);
|
||||||
#define GLOBAL_IMPLICIT 3
|
#define GLOBAL_IMPLICIT 3
|
||||||
#define FREE 4
|
#define FREE 4
|
||||||
#define CELL 5
|
#define CELL 5
|
||||||
#define LOCAL_ONLY 6
|
|
||||||
|
|
||||||
/* The following two names are used for the ste_unoptimized bit field */
|
/* The following two names are used for the ste_unoptimized bit field */
|
||||||
#define OPT_IMPORT_STAR 1
|
#define OPT_IMPORT_STAR 1
|
||||||
|
|
|
@ -690,14 +690,6 @@ result2 = h()
|
||||||
h = g()
|
h = g()
|
||||||
self.assertEqual(h(), 3)
|
self.assertEqual(h(), 3)
|
||||||
|
|
||||||
def testLocalClosureShadowing(self):
|
|
||||||
exec("""
|
|
||||||
x = 4
|
|
||||||
def f(x):
|
|
||||||
class C:
|
|
||||||
x = x
|
|
||||||
raises(NameError, f, 3)""", {"raises" : self.assertRaises})
|
|
||||||
|
|
||||||
|
|
||||||
def test_main():
|
def test_main():
|
||||||
run_unittest(ScopeTests)
|
run_unittest(ScopeTests)
|
||||||
|
|
|
@ -6094,7 +6094,6 @@ supercheck(PyTypeObject *type, PyObject *obj)
|
||||||
PyErr_SetString(PyExc_TypeError,
|
PyErr_SetString(PyExc_TypeError,
|
||||||
"super(type, obj): "
|
"super(type, obj): "
|
||||||
"obj must be an instance or subtype of type");
|
"obj must be an instance or subtype of type");
|
||||||
printf("%s\n", type->tp_name);
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2052,7 +2052,6 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
TARGET(LOAD_NAME)
|
TARGET(LOAD_NAME)
|
||||||
TARGET(LOAD_NAME_LOCAL_ONLY)
|
|
||||||
w = GETITEM(names, oparg);
|
w = GETITEM(names, oparg);
|
||||||
if ((v = f->f_locals) == NULL) {
|
if ((v = f->f_locals) == NULL) {
|
||||||
PyErr_Format(PyExc_SystemError,
|
PyErr_Format(PyExc_SystemError,
|
||||||
|
@ -2074,14 +2073,15 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (x == NULL) {
|
if (x == NULL) {
|
||||||
if (opcode != LOAD_NAME_LOCAL_ONLY) {
|
x = PyDict_GetItem(f->f_globals, w);
|
||||||
x = PyDict_GetItem(f->f_globals, w);
|
|
||||||
if (x == NULL)
|
|
||||||
x = PyDict_GetItem(f->f_builtins, w);
|
|
||||||
}
|
|
||||||
if (x == NULL) {
|
if (x == NULL) {
|
||||||
format_exc_check_arg(PyExc_NameError, NAME_ERROR_MSG, w);
|
x = PyDict_GetItem(f->f_builtins, w);
|
||||||
break;
|
if (x == NULL) {
|
||||||
|
format_exc_check_arg(
|
||||||
|
PyExc_NameError,
|
||||||
|
NAME_ERROR_MSG, w);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Py_INCREF(x);
|
Py_INCREF(x);
|
||||||
}
|
}
|
||||||
|
|
|
@ -787,7 +787,6 @@ opcode_stack_effect(int opcode, int oparg)
|
||||||
case LOAD_CONST:
|
case LOAD_CONST:
|
||||||
return 1;
|
return 1;
|
||||||
case LOAD_NAME:
|
case LOAD_NAME:
|
||||||
case LOAD_NAME_LOCAL_ONLY:
|
|
||||||
return 1;
|
return 1;
|
||||||
case BUILD_TUPLE:
|
case BUILD_TUPLE:
|
||||||
case BUILD_LIST:
|
case BUILD_LIST:
|
||||||
|
@ -2482,7 +2481,6 @@ compiler_nameop(struct compiler *c, identifier name, expr_context_ty ctx)
|
||||||
optype = OP_DEREF;
|
optype = OP_DEREF;
|
||||||
break;
|
break;
|
||||||
case LOCAL:
|
case LOCAL:
|
||||||
case LOCAL_ONLY:
|
|
||||||
if (c->u->u_ste->ste_type == FunctionBlock)
|
if (c->u->u_ste->ste_type == FunctionBlock)
|
||||||
optype = OP_FAST;
|
optype = OP_FAST;
|
||||||
break;
|
break;
|
||||||
|
@ -2558,7 +2556,7 @@ compiler_nameop(struct compiler *c, identifier name, expr_context_ty ctx)
|
||||||
break;
|
break;
|
||||||
case OP_NAME:
|
case OP_NAME:
|
||||||
switch (ctx) {
|
switch (ctx) {
|
||||||
case Load: op = (scope == LOCAL_ONLY) ? LOAD_NAME_LOCAL_ONLY : LOAD_NAME; break;
|
case Load: op = LOAD_NAME; break;
|
||||||
case Store: op = STORE_NAME; break;
|
case Store: op = STORE_NAME; break;
|
||||||
case Del: op = DELETE_NAME; break;
|
case Del: op = DELETE_NAME; break;
|
||||||
case AugLoad:
|
case AugLoad:
|
||||||
|
|
|
@ -432,14 +432,7 @@ analyze_name(PySTEntryObject *ste, PyObject *scopes, PyObject *name, long flags,
|
||||||
return PySet_Add(free, name) >= 0;
|
return PySet_Add(free, name) >= 0;
|
||||||
}
|
}
|
||||||
if (flags & DEF_BOUND) {
|
if (flags & DEF_BOUND) {
|
||||||
if (ste->ste_type == ClassBlock &&
|
SET_SCOPE(scopes, name, LOCAL);
|
||||||
!(flags & DEF_PARAM) &&
|
|
||||||
bound && PySet_Contains(bound, name)) {
|
|
||||||
SET_SCOPE(scopes, name, LOCAL_ONLY);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
SET_SCOPE(scopes, name, LOCAL);
|
|
||||||
}
|
|
||||||
if (PySet_Add(local, name) < 0)
|
if (PySet_Add(local, name) < 0)
|
||||||
return 0;
|
return 0;
|
||||||
if (PySet_Discard(global, name) < 0)
|
if (PySet_Discard(global, name) < 0)
|
||||||
|
@ -496,7 +489,7 @@ analyze_cells(PyObject *scopes, PyObject *free, const char *restricted)
|
||||||
long scope;
|
long scope;
|
||||||
assert(PyLong_Check(v));
|
assert(PyLong_Check(v));
|
||||||
scope = PyLong_AS_LONG(v);
|
scope = PyLong_AS_LONG(v);
|
||||||
if (scope != LOCAL && scope != LOCAL_ONLY)
|
if (scope != LOCAL)
|
||||||
continue;
|
continue;
|
||||||
if (!PySet_Contains(free, name))
|
if (!PySet_Contains(free, name))
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue