]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
__builtins__ mods (and sys_checkinterval for ceval.c)
authorGuido van Rossum <guido@python.org>
Mon, 9 Jan 1995 17:53:26 +0000 (17:53 +0000)
committerGuido van Rossum <guido@python.org>
Mon, 9 Jan 1995 17:53:26 +0000 (17:53 +0000)
Include/bltinmodule.h
Include/ceval.h
Include/frameobject.h
Include/rename1.h
Python/bltinmodule.c
Python/ceval.c
Python/import.c
Python/pythonrun.c

index c94cf636d74a1d624ed810bd2d07cee0bba5b502..2f4c12013dfc344ac0a22300c329471dc01aafbf 100644 (file)
@@ -30,9 +30,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 /* Built-in module interface */
 
-extern object *getbuiltin PROTO((object *));
-extern object *getbuiltins PROTO((char *));
-extern int setbuiltin PROTO((char *, object *));
+extern object *getbuiltindict PROTO(());
 
 #ifdef __cplusplus
 }
index 796b11aca2611a4cd8b82490678e18ca31c05a5f..d1020aaab031a05fb6eae817bee244d8498ff2be 100644 (file)
@@ -32,10 +32,12 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 object *call_object PROTO((object *, object *));
 
+object *getbuiltins PROTO((void));
 object *getglobals PROTO((void));
 object *getlocals PROTO((void));
 object *getowner PROTO((void));
 object *getframe PROTO((void));
+int getrestricted PROTO((void));
 
 void flushline PROTO((void));
 
index f8ad710918fa59f636ea0d5e59e075723f1541f5..2179de8d8f14a899481fe20ea2f3e7013921f6bf 100644 (file)
@@ -40,6 +40,7 @@ typedef struct _frame {
        OB_HEAD
        struct _frame *f_back;  /* previous frame, or NULL */
        codeobject *f_code;     /* code segment */
+       object *f_builtins;     /* builtin symbol table (dictobject) */
        object *f_globals;      /* global symbol table (dictobject) */
        object *f_locals;       /* local symbol table (dictobject) */
        object *f_owner;        /* owner (e.g. class or module) or NULL */
@@ -52,6 +53,7 @@ typedef struct _frame {
        int f_iblock;           /* index in f_blockstack */
        int f_lasti;            /* Last instruction if called */
        int f_lineno;           /* Current line number */
+       int f_restricted;       /* Flag set if restricted operations in this scope */
        object *f_trace;        /* Trace function */
 } frameobject;
 
index 2ae9326e9530582462011138612b01ae0509c6cb..90f129f1abf3d2be597aebc3e13a80554962934f 100755 (executable)
@@ -269,6 +269,7 @@ typedef struct methodlist PyMethodDef;
 #define PyEval_CallObject call_object
 #define PyEval_EvalCode eval_code
 #define Py_FlushLine flushline
+#define PyEval_GetBuiltins getbuiltins
 #define PyEval_GetGlobals getglobals
 #define PyEval_GetLocals getlocals
 #define PyEval_InitThreads init_save_thread
@@ -287,7 +288,7 @@ typedef struct methodlist PyMethodDef;
 #define PyImport_Init initimport
 #define PyImport_ReloadModule reload_module
 #define PyNumber_Coerce coerce
-#define PyBuiltin_GetObject getbuiltin
+#define PyBuiltin_GetDict getbuiltindict
 #define PyBuiltin_Init initbuiltin
 #define PyMarshal_Init initmarshal
 #define PyMarshal_ReadLongFromFile rd_long
@@ -317,7 +318,7 @@ typedef struct methodlist PyMethodDef;
 #define PyRun_InteractiveLoop run_tty_loop
 #define PyMember_Get getmember
 #define PyMember_Set setmember
-#define Py_InitModule initmodule
+#define Py_InitModule(name, methods) initmodule(name, methods)
 #define Py_BuildValue mkvalue
 #define Py_VaBuildValue vmkvalue
 #define PyArg_Parse getargs
index 59e15e1f4bd9f701ffe6c9e396847176eeb32211..5577f035c060a1871b70a46b9e8189fe4bc4be72 100644 (file)
@@ -392,6 +392,17 @@ builtin_eval(self, args)
                        &Mappingtype, &globals,
                        &Mappingtype, &locals))
                return NULL;
+       if (globals == NULL) {
+               globals = getglobals();
+               if (globals == NULL)
+                       return NULL;
+       }
+       if (locals == NULL)
+               locals = globals;
+       if (dictlookup(globals, "__builtins__") == NULL) {
+               if (dictinsert(globals, "__builtins__", getbuiltins()) != 0)
+                       return NULL;
+       }
        if (is_codeobject(cmd))
                return eval_code((codeobject *) cmd, globals, locals,
                                 (object *)NULL, (object *)NULL);
@@ -428,6 +439,17 @@ builtin_execfile(self, args)
                        &Mappingtype, &globals,
                        &Mappingtype, &locals))
                return NULL;
+       if (globals == NULL) {
+               globals = getglobals();
+               if (globals == NULL)
+                       return NULL;
+       }
+       if (locals == NULL)
+               locals = globals;
+       if (dictlookup(globals, "__builtins__") == NULL) {
+               if (dictinsert(globals, "__builtins__", getbuiltins()) != 0)
+                       return NULL;
+       }
        BGN_SAVE
        fp = fopen(filename, "r");
        END_SAVE
@@ -725,6 +747,7 @@ builtin_input(self, args)
        object *line;
        char *str;
        object *res;
+       object *globals, *locals;
 
        line = builtin_raw_input(self, args);
        if (line == NULL)
@@ -733,7 +756,13 @@ builtin_input(self, args)
                return NULL;
        while (*str == ' ' || *str == '\t')
                        str++;
-       res = run_string(str, eval_input, (object *)NULL, (object *)NULL);
+       globals = getglobals();
+       locals = getlocals();
+       if (dictlookup(globals, "__builtins__") == NULL) {
+               if (dictinsert(globals, "__builtins__", getbuiltins()) != 0)
+                       return NULL;
+       }
+       res = run_string(str, eval_input, globals, locals);
        DECREF(line);
        return res;
 }
@@ -1363,25 +1392,9 @@ static struct methodlist builtin_methods[] = {
 static object *builtin_dict;
 
 object *
-getbuiltin(name)
-       object *name;
-{
-       return mappinglookup(builtin_dict, name);
-}
-
-object *
-getbuiltins(name)
-       char *name;
-{
-       return dictlookup(builtin_dict, name);
-}
-
-int
-setbuiltin(cname, value)
-       char *cname;
-       object *value;
+getbuiltindict()
 {
-       return dictinsert(builtin_dict, cname, value);
+       return builtin_dict;
 }
 
 /* Predefined exceptions */
index 410384ee94fdf7bdae1ed61b9ca2d3f78bbab57d..79874ef4d3ade35fd7d116112d244d2ed8389cc4 100644 (file)
@@ -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");
@@ -1700,6 +1687,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()
 {
@@ -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)
index ef24883ac5edd34cc485545bedb8de1bcb328f7c..1d9ea35c5bfc5607ee4888c46c5a15e78bea3961 100644 (file)
@@ -32,6 +32,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "import.h"
 #include "errcode.h"
 #include "sysmodule.h"
+#include "bltinmodule.h"
 #include "pythonrun.h"
 #include "marshal.h"
 #include "compile.h"
@@ -147,6 +148,10 @@ exec_code_module(name, co)
        if (m == NULL)
                return NULL;
        d = getmoduledict(m);
+       if (dictlookup(d, "__builtins__") == NULL) {
+               if (dictinsert(d, "__builtins__", getbuiltindict()) != 0)
+                       return NULL;
+       }
        v = eval_code((codeobject *)co, d, d, d, (object *)NULL);
        if (v == NULL)
                return NULL;
index c706081c68d3e02d4b7bcb8f12b3bad7ccf170e6..a25cbba848f1064cd1be66c2bd4eba1a1c29c8ea 100644 (file)
@@ -32,6 +32,7 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include "graminit.h"
 #include "errcode.h"
 #include "sysmodule.h"
+#include "bltinmodule.h"
 #include "compile.h"
 #include "eval.h"
 #include "ceval.h"
@@ -48,6 +49,7 @@ extern char *getpythonpath();
 extern grammar gram; /* From graminit.c */
 
 /* Forward */
+static void initmain PROTO((void));
 static object *run_err_node PROTO((node *n, char *filename,
                                   object *globals, object *locals));
 static object *run_node PROTO((node *n, char *filename,
@@ -83,6 +85,24 @@ initall()
        setpythonpath(getpythonpath());
 
        initsigs(); /* Signal handling stuff, including initintr() */
+
+       initmain();
+}
+
+/* Create __main__ module */
+
+static void
+initmain()
+{
+       object *m, *d;
+       m = add_module("__main__");
+       if (m == NULL)
+               fatal("can't create __main__ module");
+       d = getmoduledict(m);
+       if (dictlookup(d, "__builtins__") == NULL) {
+               if (dictinsert(d, "__builtins__", getbuiltindict()))
+                       fatal("can't add __builtins__ to __main__");
+       }
 }
 
 /* Parse input from a file and execute it */