]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
add imp.get_frozen_object()
authorGuido van Rossum <guido@python.org>
Fri, 4 Aug 1995 04:08:57 +0000 (04:08 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 4 Aug 1995 04:08:57 +0000 (04:08 +0000)
Python/import.c

index e258fd13dfc19941bcb914816de388309320f6c2..b0f46b0e87748a4ad23bf5f762dcc0f5704a8d0d 100644 (file)
@@ -411,13 +411,13 @@ find_module(name, path, buf, buflen, p_fp)
 {
        int i, npath, len, namelen;
        struct filedescr *fdp;
-       FILE *fp;
+       FILE *fp = NULL;
 
        if (path == NULL)
                path = sysget("path");
        if (path == NULL || !is_listobject(path)) {
                err_setstr(ImportError,
-                   "module search path must be list of directory names");
+                          "sys.path must be a list of directory names");
                return NULL;
        }
        npath = getlistsize(path);
@@ -528,7 +528,7 @@ init_builtin(name)
                if (strcmp(name, inittab[i].name) == 0) {
                        if (inittab[i].initfunc == NULL) {
                                err_setstr(ImportError,
-                                          "cannot re-init internal module");
+                                          "Cannot re-init internal module");
                                return -1;
                        }
                        if (verbose)
@@ -544,9 +544,7 @@ init_builtin(name)
 }
 
 
-/* Initialize a frozen module.
-   Return 1 for succes, 0 if the module is not found, and -1 with
-   an exception set if the initialization failed. */
+/* Frozen modules */
 
 extern struct frozen {
        char *name;
@@ -554,21 +552,50 @@ extern struct frozen {
        int size;
 } frozen_modules[];
 
-/* This function is also used from frozenmain.c */
-
-int
-init_frozen(name)
+static struct frozen *
+find_frozen(name)
        char *name;
 {
        struct frozen *p;
        object *co;
-       object *m;
+
        for (p = frozen_modules; ; p++) {
                if (p->name == NULL)
-                       return 0;
+                       return NULL;
                if (strcmp(p->name, name) == 0)
                        break;
        }
+       return p;
+}
+
+static object *
+get_frozen_object(name)
+       char *name;
+{
+       struct frozen *p = find_frozen(name);
+
+       if (p == NULL) {
+               err_setstr(ImportError, "No such frozen object");
+               return NULL;
+       }
+       return rds_object(p->code, p->size);
+}
+
+/* Initialize a frozen module.
+   Return 1 for succes, 0 if the module is not found, and -1 with
+   an exception set if the initialization failed.
+   This function is also used from frozenmain.c */
+
+int
+init_frozen(name)
+       char *name;
+{
+       struct frozen *p = find_frozen(name);
+       object *co;
+       object *m;
+
+       if (p == NULL)
+               return 0;
        if (verbose)
                fprintf(stderr, "import %s # frozen\n", name);
        co = rds_object(p->code, p->size);
@@ -576,7 +603,7 @@ init_frozen(name)
                return -1;
        if (!is_codeobject(co)) {
                DECREF(co);
-               err_setstr(SystemError, "frozen object is not a code object");
+               err_setstr(TypeError, "frozen object is not a code object");
                return -1;
        }
        m = exec_code_module(name, co);
@@ -785,6 +812,19 @@ imp_init_frozen(self, args)
        return m;
 }
 
+static object *
+imp_get_frozen_object(self, args)
+       object *self;
+       object *args;
+{
+       char *name;
+       int ret;
+       object *m;
+       if (!newgetargs(args, "s", &name))
+               return NULL;
+       return get_frozen_object(name);
+}
+
 static object *
 imp_is_builtin(self, args)
        object *self;
@@ -928,6 +968,7 @@ imp_new_module(self, args)
 }
 
 static struct methodlist imp_methods[] = {
+       {"get_frozen_object",   imp_get_frozen_object,  1},
        {"get_magic",           imp_get_magic,          1},
        {"get_suffixes",        imp_get_suffixes,       1},
        {"find_module",         imp_find_module,        1},