Kaydet (Commit) 62f7d15d authored tarafından Guido van Rossum's avatar Guido van Rossum

Use the stack size from the code object and the CO_MAXBLOCKS constant

from compile.h.  Remove all eval stack overflow checks.
üst 8b993a98
...@@ -364,8 +364,10 @@ eval_code2(co, globals, locals, ...@@ -364,8 +364,10 @@ 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 || \ #define CHECK_STACK(n) (STACK_LEVEL() + (n) < f->f_nvalues || \
(stack_pointer = extend_stack(f, STACK_LEVEL(), n))) (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"))
...@@ -403,8 +405,8 @@ eval_code2(co, globals, locals, ...@@ -403,8 +405,8 @@ eval_code2(co, globals, locals,
globals, /*globals*/ globals, /*globals*/
locals, /*locals*/ locals, /*locals*/
owner, /*owner*/ owner, /*owner*/
50, /*nvalues*/ co->co_stacksize, /*nvalues*/
20); /*nblocks*/ CO_MAXBLOCKS); /*nblocks*/
if (f == NULL) if (f == NULL)
return NULL; return NULL;
...@@ -626,10 +628,12 @@ eval_code2(co, globals, locals, ...@@ -626,10 +628,12 @@ eval_code2(co, globals, locals,
} }
#endif #endif
#ifdef CHECK_STACK
if (!CHECK_STACK(3)) { if (!CHECK_STACK(3)) {
x = NULL; x = NULL;
break; break;
} }
#endif
/* Main switch on opcode */ /* Main switch on opcode */
...@@ -1097,10 +1101,12 @@ eval_code2(co, globals, locals, ...@@ -1097,10 +1101,12 @@ eval_code2(co, globals, locals,
why = WHY_EXCEPTION; why = WHY_EXCEPTION;
} }
else { else {
#ifdef CHECK_STACK
if (!CHECK_STACK(oparg)) { if (!CHECK_STACK(oparg)) {
x = NULL; x = NULL;
break; break;
} }
#endif
for (; --oparg >= 0; ) { for (; --oparg >= 0; ) {
w = GETTUPLEITEM(v, oparg); w = GETTUPLEITEM(v, oparg);
INCREF(w); INCREF(w);
...@@ -1122,10 +1128,12 @@ eval_code2(co, globals, locals, ...@@ -1122,10 +1128,12 @@ eval_code2(co, globals, locals,
why = WHY_EXCEPTION; why = WHY_EXCEPTION;
} }
else { else {
#ifdef CHECK_STACK
if (!CHECK_STACK(oparg)) { if (!CHECK_STACK(oparg)) {
x = NULL; x = NULL;
break; break;
} }
#endif
for (; --oparg >= 0; ) { for (; --oparg >= 0; ) {
w = getlistitem(v, oparg); w = getlistitem(v, oparg);
INCREF(w); INCREF(w);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment