mirror of
https://github.com/python/cpython.git
synced 2025-09-11 11:17:16 +00:00
* bltinmodule.c: added built-in function cmp(a, b)
* flmodule.c: added {do,check}_only_forms to fl's list of functions; and don't print a message when an unknown object is returned. * pythonrun.c: catch SIGHUP and SIGTERM to do essential cleanup. * Made jpegmodule.c smaller by using getargs() and mkvalue() consistently. * Increased parser stack size to 500 in parser.h. * Implemented custom allocation of stack frames to frameobject.c and added dynamic stack overflow checks (value stack only) to ceval.c. (There seems to be a bug left: sometimes stack traces don't make sense.)
This commit is contained in:
parent
2db91358de
commit
a9e7dc1081
7 changed files with 150 additions and 19 deletions
|
@ -204,6 +204,9 @@ eval_code(co, globals, locals, arg)
|
|||
#define BASIC_PUSH(v) (*stack_pointer++ = (v))
|
||||
#define BASIC_POP() (*--stack_pointer)
|
||||
|
||||
#define CHECK_STACK(n) (STACK_LEVEL() + (n) < f->f_nvalues || \
|
||||
(stack_pointer = extend_stack(f, STACK_LEVEL(), n)))
|
||||
|
||||
#ifdef LLTRACE
|
||||
#define PUSH(v) (BASIC_PUSH(v), lltrace && prtrace(TOP(), "push"))
|
||||
#define POP() (lltrace && prtrace(TOP(), "pop"), BASIC_POP())
|
||||
|
@ -324,6 +327,11 @@ eval_code(co, globals, locals, arg)
|
|||
}
|
||||
#endif
|
||||
|
||||
if (!CHECK_STACK(3)) {
|
||||
x = NULL;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Main switch on opcode */
|
||||
|
||||
switch (opcode) {
|
||||
|
@ -763,6 +771,10 @@ eval_code(co, globals, locals, arg)
|
|||
x = gettupleslice(v, oparg, gettuplesize(v));
|
||||
if (x != NULL) {
|
||||
PUSH(x);
|
||||
if (!CHECK_STACK(oparg)) {
|
||||
x = NULL;
|
||||
break;
|
||||
}
|
||||
for (; --oparg >= 0; ) {
|
||||
w = gettupleitem(v, oparg);
|
||||
INCREF(w);
|
||||
|
@ -858,6 +870,10 @@ eval_code(co, globals, locals, arg)
|
|||
why = WHY_EXCEPTION;
|
||||
}
|
||||
else {
|
||||
if (!CHECK_STACK(oparg)) {
|
||||
x = NULL;
|
||||
break;
|
||||
}
|
||||
for (; --oparg >= 0; ) {
|
||||
w = gettupleitem(v, oparg);
|
||||
INCREF(w);
|
||||
|
@ -879,6 +895,10 @@ eval_code(co, globals, locals, arg)
|
|||
why = WHY_EXCEPTION;
|
||||
}
|
||||
else {
|
||||
if (!CHECK_STACK(oparg)) {
|
||||
x = NULL;
|
||||
break;
|
||||
}
|
||||
for (; --oparg >= 0; ) {
|
||||
w = getlistitem(v, oparg);
|
||||
INCREF(w);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue