diff options
author | Guido van Rossum <guido@python.org> | 1995-01-09 17:53:26 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1995-01-09 17:53:26 (GMT) |
commit | 6135a87f2b1474be6caf1bf776024d0c6d10a6d1 (patch) | |
tree | e0b23d5b7b9587a76917894a601f311514c80a8b /Python/ceval.c | |
parent | 2565bff40a6d7d06c29b7d7a7a580f78b1d4f169 (diff) | |
download | cpython-6135a87f2b1474be6caf1bf776024d0c6d10a6d1.zip cpython-6135a87f2b1474be6caf1bf776024d0c6d10a6d1.tar.gz cpython-6135a87f2b1474be6caf1bf776024d0c6d10a6d1.tar.bz2 |
__builtins__ mods (and sys_checkinterval for ceval.c)
Diffstat (limited to 'Python/ceval.c')
-rw-r--r-- | Python/ceval.c | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/Python/ceval.c b/Python/ceval.c index 410384e..79874ef 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -33,7 +33,6 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include "eval.h" #include "ceval.h" #include "opcode.h" -#include "bltinmodule.h" #include "traceback.h" #include "graminit.h" #include "pythonrun.h" @@ -285,7 +284,6 @@ eval_code(co, globals, locals, owner, arg) char *name; /* Name used by some instructions */ int needmerge = 0; /* Set if need to merge locals back at end */ int defmode = 0; /* Default access mode for new variables */ - int ticker_count = 10; /* Check for intr every Nth instruction */ #ifdef LLTRACE int lltrace; #endif @@ -325,16 +323,9 @@ eval_code(co, globals, locals, owner, arg) #define POP() BASIC_POP() #endif - if (globals == NULL) { - globals = getglobals(); - if (locals == NULL) { - locals = getlocals(); - needmerge = 1; - } - } - else { - if (locals == NULL) - locals = globals; + if (globals == NULL || locals == NULL) { + err_setstr(SystemError, "eval_code: NULL globals or locals"); + return NULL; } #ifdef LLTRACE @@ -385,10 +376,6 @@ eval_code(co, globals, locals, owner, arg) } } - x = sysget("check_interval"); - if (x != NULL && is_intobject(x)) - ticker_count = getintvalue(x); - next_instr = GETUSTRINGVALUE(f->f_code->co_code); stack_pointer = f->f_valuestack; @@ -417,7 +404,7 @@ eval_code(co, globals, locals, owner, arg) } if (--ticker < 0) { - ticker = ticker_count; + ticker = sys_checkinterval; if (sigcheck()) { why = WHY_EXCEPTION; goto on_error; @@ -745,7 +732,7 @@ eval_code(co, globals, locals, owner, arg) /* Print value except if procedure result */ /* Before printing, also assign to '_' */ if (v != None && - (err = setbuiltin("_", v)) == 0 && + (err = dictinsert(f->f_builtins, "_", v)) == 0 && !suppress_print) { flushline(); x = sysget("stdout"); @@ -1157,7 +1144,7 @@ eval_code(co, globals, locals, owner, arg) x = dict2lookup(f->f_globals, w); if (x == NULL) { err_clear(); - x = getbuiltin(w); + x = dict2lookup(f->f_builtins, w); if (x == NULL) { err_setval(NameError, w); break; @@ -1179,7 +1166,7 @@ eval_code(co, globals, locals, owner, arg) x = dict2lookup(f->f_globals, w); if (x == NULL) { err_clear(); - x = getbuiltin(w); + x = dict2lookup(f->f_builtins, w); if (x == NULL) { err_setval(NameError, w); break; @@ -1324,7 +1311,7 @@ eval_code(co, globals, locals, owner, arg) case IMPORT_NAME: w = GETNAMEV(oparg); - x = getbuiltins("__import__"); + x = dictlookup(f->f_builtins, "__import__"); if (x == NULL) { err_setstr(ImportError, "__import__ not found"); @@ -1701,6 +1688,15 @@ call_trace(p_trace, p_newtrace, f, msg, arg) } object * +getbuiltins() +{ + if (current_frame == NULL) + return NULL; + else + return current_frame->f_builtins; +} + +object * getlocals() { if (current_frame == NULL) @@ -1733,6 +1729,12 @@ getframe() return (object *)current_frame; } +int +getrestricted() +{ + return current_frame == NULL ? 0 : current_frame->f_restricted; +} + void flushline() { @@ -2660,6 +2662,8 @@ exec_statement(prog, globals, locals) "exec 2nd/3rd args must be dict or None"); return -1; } + if (dictlookup(globals, "__builtins__") == NULL) + dictinsert(globals, "__builtins__", current_frame->f_builtins); if (is_codeobject(prog)) { if (eval_code((codeobject *) prog, globals, locals, (object *)NULL, (object *)NULL) == NULL) |