Cleanup:
- fix bug in Py_MakePendingCalls() with threading - fix return type of do_raise - remove build_slice (same as PySlice_New) - remove code inside #if 0 - remove code inside #ifdef CHECK_STACK - remove code inside #ifdef SUPPORT_OBSOLETE_ACCESS - comment about newimp.py should refer to ni.py
This commit is contained in:
parent
554fa49500
commit
1aa14838d2
232
Python/ceval.c
232
Python/ceval.c
|
@ -33,7 +33,6 @@ PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
/* XXX TO DO:
|
/* XXX TO DO:
|
||||||
XXX how to pass arguments to call_trace?
|
XXX how to pass arguments to call_trace?
|
||||||
XXX totally get rid of access stuff
|
|
||||||
XXX speed up searching for keywords by using a dictionary
|
XXX speed up searching for keywords by using a dictionary
|
||||||
XXX document it!
|
XXX document it!
|
||||||
*/
|
*/
|
||||||
|
@ -66,7 +65,6 @@ static object *eval_code2 PROTO((codeobject *,
|
||||||
object **, int,
|
object **, int,
|
||||||
object **, int,
|
object **, int,
|
||||||
object *));
|
object *));
|
||||||
static int do_raise PROTO((object *, object *, object *));
|
|
||||||
#ifdef LLTRACE
|
#ifdef LLTRACE
|
||||||
static int prtrace PROTO((object *, char *));
|
static int prtrace PROTO((object *, char *));
|
||||||
#endif
|
#endif
|
||||||
|
@ -102,9 +100,6 @@ static int cmp_member PROTO((object *, object *));
|
||||||
static object *cmp_outcome PROTO((int, object *, object *));
|
static object *cmp_outcome PROTO((int, object *, object *));
|
||||||
static int import_from PROTO((object *, object *, object *));
|
static int import_from PROTO((object *, object *, object *));
|
||||||
static object *build_class PROTO((object *, object *, object *));
|
static object *build_class PROTO((object *, object *, object *));
|
||||||
#ifdef SUPPORT_OBSOLETE_ACCESS
|
|
||||||
static int access_statement PROTO((object *, object *, frameobject *));
|
|
||||||
#endif
|
|
||||||
static int exec_statement PROTO((object *, object *, object *));
|
static int exec_statement PROTO((object *, object *, object *));
|
||||||
static object *find_from_args PROTO((frameobject *, int));
|
static object *find_from_args PROTO((frameobject *, int));
|
||||||
|
|
||||||
|
@ -238,7 +233,7 @@ Py_MakePendingCalls()
|
||||||
{
|
{
|
||||||
static int busy = 0;
|
static int busy = 0;
|
||||||
#ifdef WITH_THREAD
|
#ifdef WITH_THREAD
|
||||||
if (get_thread_ident() != main_thread) {
|
if (main_thread && get_thread_ident() != main_thread) {
|
||||||
ticker = 0; /* We're not done yet */
|
ticker = 0; /* We're not done yet */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -279,6 +274,8 @@ enum why_code {
|
||||||
WHY_BREAK /* 'break' statement */
|
WHY_BREAK /* 'break' statement */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static enum why_code do_raise PROTO((object *, object *, object *));
|
||||||
|
|
||||||
|
|
||||||
/* Backward compatible interface */
|
/* Backward compatible interface */
|
||||||
|
|
||||||
|
@ -333,9 +330,6 @@ eval_code2(co, globals, locals,
|
||||||
register frameobject *f; /* Current frame */
|
register frameobject *f; /* Current frame */
|
||||||
register object **fastlocals = NULL;
|
register object **fastlocals = NULL;
|
||||||
object *retval = NULL; /* Return value */
|
object *retval = NULL; /* Return value */
|
||||||
#ifdef SUPPORT_OBSOLETE_ACCESS
|
|
||||||
int defmode = 0; /* Default access mode for new variables */
|
|
||||||
#endif
|
|
||||||
#ifdef LLTRACE
|
#ifdef LLTRACE
|
||||||
int lltrace;
|
int lltrace;
|
||||||
#endif
|
#endif
|
||||||
|
@ -364,11 +358,6 @@ eval_code2(co, globals, locals,
|
||||||
#define BASIC_PUSH(v) (*stack_pointer++ = (v))
|
#define BASIC_PUSH(v) (*stack_pointer++ = (v))
|
||||||
#define BASIC_POP() (*--stack_pointer)
|
#define BASIC_POP() (*--stack_pointer)
|
||||||
|
|
||||||
#if 0
|
|
||||||
#define CHECK_STACK(n) (STACK_LEVEL() + (n) < f->f_nvalues || \
|
|
||||||
(stack_pointer = extend_stack(f, STACK_LEVEL(), n)))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef LLTRACE
|
#ifdef LLTRACE
|
||||||
#define PUSH(v) (BASIC_PUSH(v), lltrace && prtrace(TOP(), "push"))
|
#define PUSH(v) (BASIC_PUSH(v), lltrace && prtrace(TOP(), "push"))
|
||||||
#define POP() (lltrace && prtrace(TOP(), "pop"), BASIC_POP())
|
#define POP() (lltrace && prtrace(TOP(), "pop"), BASIC_POP())
|
||||||
|
@ -625,13 +614,6 @@ eval_code2(co, globals, locals,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CHECK_STACK
|
|
||||||
if (!CHECK_STACK(3)) {
|
|
||||||
x = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Main switch on opcode */
|
/* Main switch on opcode */
|
||||||
|
|
||||||
switch (opcode) {
|
switch (opcode) {
|
||||||
|
@ -1060,29 +1042,6 @@ eval_code2(co, globals, locals,
|
||||||
err_setstr(SystemError, "no locals");
|
err_setstr(SystemError, "no locals");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#ifdef SUPPORT_OBSOLETE_ACCESS
|
|
||||||
u = dict2lookup(x, w);
|
|
||||||
if (u == NULL) {
|
|
||||||
if (defmode != 0) {
|
|
||||||
if (v != None)
|
|
||||||
u = (object *)v->ob_type;
|
|
||||||
else
|
|
||||||
u = NULL;
|
|
||||||
x = newaccessobject(v, x,
|
|
||||||
(typeobject *)u,
|
|
||||||
defmode);
|
|
||||||
DECREF(v);
|
|
||||||
if (x == NULL)
|
|
||||||
break;
|
|
||||||
v = x;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (is_accessobject(u)) {
|
|
||||||
err = setaccessvalue(u, x, v);
|
|
||||||
DECREF(v);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
err = dict2insert(x, w, v);
|
err = dict2insert(x, w, v);
|
||||||
DECREF(v);
|
DECREF(v);
|
||||||
break;
|
break;
|
||||||
|
@ -1093,14 +1052,6 @@ eval_code2(co, globals, locals,
|
||||||
err_setstr(SystemError, "no locals");
|
err_setstr(SystemError, "no locals");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#ifdef SUPPORT_OBSOLETE_ACCESS
|
|
||||||
u = dict2lookup(x, w);
|
|
||||||
if (u != NULL && is_accessobject(u)) {
|
|
||||||
err = setaccessvalue(u, x,
|
|
||||||
(object *)NULL);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if ((err = dict2remove(x, w)) != 0)
|
if ((err = dict2remove(x, w)) != 0)
|
||||||
err_setval(NameError, w);
|
err_setval(NameError, w);
|
||||||
break;
|
break;
|
||||||
|
@ -1121,12 +1072,6 @@ eval_code2(co, globals, locals,
|
||||||
why = WHY_EXCEPTION;
|
why = WHY_EXCEPTION;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
#ifdef CHECK_STACK
|
|
||||||
if (!CHECK_STACK(oparg)) {
|
|
||||||
x = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
for (; --oparg >= 0; ) {
|
for (; --oparg >= 0; ) {
|
||||||
w = GETTUPLEITEM(v, oparg);
|
w = GETTUPLEITEM(v, oparg);
|
||||||
INCREF(w);
|
INCREF(w);
|
||||||
|
@ -1148,12 +1093,6 @@ eval_code2(co, globals, locals,
|
||||||
why = WHY_EXCEPTION;
|
why = WHY_EXCEPTION;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
#ifdef CHECK_STACK
|
|
||||||
if (!CHECK_STACK(oparg)) {
|
|
||||||
x = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
for (; --oparg >= 0; ) {
|
for (; --oparg >= 0; ) {
|
||||||
w = getlistitem(v, oparg);
|
w = getlistitem(v, oparg);
|
||||||
INCREF(w);
|
INCREF(w);
|
||||||
|
@ -1182,33 +1121,12 @@ eval_code2(co, globals, locals,
|
||||||
case STORE_GLOBAL:
|
case STORE_GLOBAL:
|
||||||
w = GETNAMEV(oparg);
|
w = GETNAMEV(oparg);
|
||||||
v = POP();
|
v = POP();
|
||||||
#ifdef SUPPORT_OBSOLETE_ACCESS
|
|
||||||
if (f->f_locals != NULL) {
|
|
||||||
u = dict2lookup(f->f_locals, w);
|
|
||||||
if (u != NULL && is_accessobject(u)) {
|
|
||||||
err = setaccessvalue(u, f->f_globals,
|
|
||||||
v);
|
|
||||||
DECREF(v);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
err = dict2insert(f->f_globals, w, v);
|
err = dict2insert(f->f_globals, w, v);
|
||||||
DECREF(v);
|
DECREF(v);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DELETE_GLOBAL:
|
case DELETE_GLOBAL:
|
||||||
w = GETNAMEV(oparg);
|
w = GETNAMEV(oparg);
|
||||||
#ifdef SUPPORT_OBSOLETE_ACCESS
|
|
||||||
if (f->f_locals != NULL) {
|
|
||||||
u = dict2lookup(f->f_locals, w);
|
|
||||||
if (u != NULL && is_accessobject(u)) {
|
|
||||||
err = setaccessvalue(u, f->f_globals,
|
|
||||||
(object *)NULL);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if ((err = dict2remove(f->f_globals, w)) != 0)
|
if ((err = dict2remove(f->f_globals, w)) != 0)
|
||||||
err_setval(NameError, w);
|
err_setval(NameError, w);
|
||||||
break;
|
break;
|
||||||
|
@ -1238,15 +1156,7 @@ eval_code2(co, globals, locals,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef SUPPORT_OBSOLETE_ACCESS
|
INCREF(x);
|
||||||
if (is_accessobject(x)) {
|
|
||||||
x = getaccessvalue(x, f->f_globals /* XXX */);
|
|
||||||
if (x == NULL)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
INCREF(x);
|
|
||||||
PUSH(x);
|
PUSH(x);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1261,41 +1171,10 @@ eval_code2(co, globals, locals,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef SUPPORT_OBSOLETE_ACCESS
|
INCREF(x);
|
||||||
if (is_accessobject(x)) {
|
|
||||||
x = getaccessvalue(x, f->f_globals);
|
|
||||||
if (x == NULL)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
INCREF(x);
|
|
||||||
PUSH(x);
|
PUSH(x);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if 0
|
|
||||||
case LOAD_LOCAL:
|
|
||||||
w = GETNAMEV(oparg);
|
|
||||||
if ((x = f->f_locals) == NULL) {
|
|
||||||
err_setstr(SystemError, "no locals");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
x = dict2lookup(x, w);
|
|
||||||
if (x == NULL) {
|
|
||||||
err_setval(NameError, w);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (is_accessobject(x)) {
|
|
||||||
x = getaccessvalue(x, f->f_locals);
|
|
||||||
if (x == NULL)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
INCREF(x);
|
|
||||||
PUSH(x);
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
case LOAD_FAST:
|
case LOAD_FAST:
|
||||||
x = GETLOCAL(oparg);
|
x = GETLOCAL(oparg);
|
||||||
if (x == NULL) {
|
if (x == NULL) {
|
||||||
|
@ -1304,47 +1183,17 @@ eval_code2(co, globals, locals,
|
||||||
oparg));
|
oparg));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#ifdef SUPPORT_OBSOLETE_ACCESS
|
INCREF(x);
|
||||||
if (is_accessobject(x)) {
|
|
||||||
x = getaccessvalue(x, f->f_locals);
|
|
||||||
if (x == NULL)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
INCREF(x);
|
|
||||||
PUSH(x);
|
PUSH(x);
|
||||||
if (x != NULL) continue;
|
if (x != NULL) continue;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case STORE_FAST:
|
case STORE_FAST:
|
||||||
v = POP();
|
v = POP();
|
||||||
#ifdef SUPPORT_OBSOLETE_ACCESS
|
|
||||||
w = GETLOCAL(oparg);
|
|
||||||
if (w != NULL && is_accessobject(w)) {
|
|
||||||
err = setaccessvalue(w, f->f_locals, v);
|
|
||||||
DECREF(v);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
SETLOCAL(oparg, v);
|
SETLOCAL(oparg, v);
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
case DELETE_FAST:
|
case DELETE_FAST:
|
||||||
#ifdef SUPPORT_OBSOLETE_ACCESS
|
|
||||||
x = GETLOCAL(oparg);
|
|
||||||
if (x == NULL) {
|
|
||||||
err_setval(NameError,
|
|
||||||
gettupleitem(co->co_varnames,
|
|
||||||
oparg));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (is_accessobject(x)) {
|
|
||||||
err = setaccessvalue(x, f->f_locals,
|
|
||||||
(object *)NULL);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
SETLOCAL(oparg, NULL);
|
SETLOCAL(oparg, NULL);
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -1447,18 +1296,6 @@ eval_code2(co, globals, locals,
|
||||||
if (err == 0) continue;
|
if (err == 0) continue;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef SUPPORT_OBSOLETE_ACCESS
|
|
||||||
case ACCESS_MODE:
|
|
||||||
v = POP();
|
|
||||||
w = GETNAMEV(oparg);
|
|
||||||
if (getstringvalue(w)[0] == '*')
|
|
||||||
defmode = getintvalue(v);
|
|
||||||
else
|
|
||||||
err = access_statement(w, v, f);
|
|
||||||
DECREF(v);
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
case JUMP_FORWARD:
|
case JUMP_FORWARD:
|
||||||
JUMPBY(oparg);
|
JUMPBY(oparg);
|
||||||
continue;
|
continue;
|
||||||
|
@ -1689,7 +1526,7 @@ eval_code2(co, globals, locals,
|
||||||
w = NULL;
|
w = NULL;
|
||||||
v = POP();
|
v = POP();
|
||||||
u = POP();
|
u = POP();
|
||||||
x = build_slice(u,v,w);
|
x = PySlice_New(u, v, w);
|
||||||
DECREF(u);
|
DECREF(u);
|
||||||
DECREF(v);
|
DECREF(v);
|
||||||
XDECREF(w);
|
XDECREF(w);
|
||||||
|
@ -1867,7 +1704,7 @@ eval_code2(co, globals, locals,
|
||||||
|
|
||||||
/* Logic for the raise statement (too complicated for inlining).
|
/* Logic for the raise statement (too complicated for inlining).
|
||||||
This *consumes* a reference count to each of its arguments. */
|
This *consumes* a reference count to each of its arguments. */
|
||||||
static int
|
static enum why_code
|
||||||
do_raise(type, value, tb)
|
do_raise(type, value, tb)
|
||||||
object *type, *value, *tb;
|
object *type, *value, *tb;
|
||||||
{
|
{
|
||||||
|
@ -2729,13 +2566,6 @@ slice_index(v, isize, pi)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static object *
|
|
||||||
build_slice(u, v, w) /* u:v:w */
|
|
||||||
object *u, *v, *w;
|
|
||||||
{
|
|
||||||
return PySlice_New(u,v,w);
|
|
||||||
}
|
|
||||||
|
|
||||||
static object *
|
static object *
|
||||||
apply_slice(u, v, w) /* return u[v:w] */
|
apply_slice(u, v, w) /* return u[v:w] */
|
||||||
object *u, *v, *w;
|
object *u, *v, *w;
|
||||||
|
@ -2952,17 +2782,7 @@ import_from(locals, v, name)
|
||||||
if (!is_stringobject(name) ||
|
if (!is_stringobject(name) ||
|
||||||
getstringvalue(name)[0] == '_')
|
getstringvalue(name)[0] == '_')
|
||||||
continue;
|
continue;
|
||||||
#ifdef SUPPORT_OBSOLETE_ACCESS
|
INCREF(value);
|
||||||
if (is_accessobject(value)) {
|
|
||||||
value = getaccessvalue(value, (object *)NULL);
|
|
||||||
if (value == NULL) {
|
|
||||||
err_clear();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
INCREF(value);
|
|
||||||
err = dict2insert(locals, name, value);
|
err = dict2insert(locals, name, value);
|
||||||
DECREF(value);
|
DECREF(value);
|
||||||
if (err != 0)
|
if (err != 0)
|
||||||
|
@ -3028,38 +2848,6 @@ build_class(methods, bases, name)
|
||||||
return newclassobject(bases, methods, name);
|
return newclassobject(bases, methods, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SUPPORT_OBSOLETE_ACCESS
|
|
||||||
static int
|
|
||||||
access_statement(name, vmode, f)
|
|
||||||
object *name;
|
|
||||||
object *vmode;
|
|
||||||
frameobject *f;
|
|
||||||
{
|
|
||||||
int mode = getintvalue(vmode);
|
|
||||||
object *value, *ac;
|
|
||||||
typeobject *type;
|
|
||||||
int ret;
|
|
||||||
fast_2_locals(f);
|
|
||||||
value = dict2lookup(f->f_locals, name);
|
|
||||||
if (value && is_accessobject(value)) {
|
|
||||||
err_setstr(AccessError, "can't override access");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
err_clear();
|
|
||||||
if (value != NULL && value != None)
|
|
||||||
type = value->ob_type;
|
|
||||||
else
|
|
||||||
type = NULL;
|
|
||||||
ac = newaccessobject(value, f->f_locals, type, mode);
|
|
||||||
if (ac == NULL)
|
|
||||||
return -1;
|
|
||||||
ret = mappinginsert(f->f_locals, name, ac);
|
|
||||||
DECREF(ac);
|
|
||||||
locals_2_fast(f, 0);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
exec_statement(prog, globals, locals)
|
exec_statement(prog, globals, locals)
|
||||||
object *prog;
|
object *prog;
|
||||||
|
@ -3128,7 +2916,7 @@ exec_statement(prog, globals, locals)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hack for newimp.py */
|
/* Hack for ni.py */
|
||||||
static object *
|
static object *
|
||||||
find_from_args(f, nexti)
|
find_from_args(f, nexti)
|
||||||
frameobject *f;
|
frameobject *f;
|
||||||
|
|
Loading…
Reference in New Issue