Mercurial > cpython-lru_cache-weakref
annotate Python/import.c @ 11177:5f5fc1031957 legacy-trunk
Vladimir Marangozov fixes an AIX-specific problem, writing:
"""
Following up Robin Dunn's troubles with freeze, here's a patch that
fixes an oddity regarding the import logic of shared modules on AIX.
Symbol resolution of shared modules is now handled properly for the cases
when the python library is linked to a binary with an arbitrary name.
This includes the standard python[version] executable, but also applications
that are embedding the python core (i.e. linked with libpython[version].a,
the latter being static or shared).
"""
| author | Guido van Rossum <guido@python.org> |
|---|---|
| date | Wed, 04 Aug 1999 18:00:12 +0000 |
| parents | d834ecdf8c26 |
| children | 5738ad737114 |
| rev | line source |
|---|---|
|
145
853b736a6a9e
Added copyright notice.
Guido van Rossum <guido@python.org>
parents:
141
diff
changeset
|
1 /*********************************************************** |
|
2062
d0d0a69b5ca3
Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents:
2052
diff
changeset
|
2 Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, |
|
d0d0a69b5ca3
Added 1995 to copyright message.
Guido van Rossum <guido@python.org>
parents:
2052
diff
changeset
|
3 The Netherlands. |
|
145
853b736a6a9e
Added copyright notice.
Guido van Rossum <guido@python.org>
parents:
141
diff
changeset
|
4 |
|
853b736a6a9e
Added copyright notice.
Guido van Rossum <guido@python.org>
parents:
141
diff
changeset
|
5 All Rights Reserved |
|
853b736a6a9e
Added copyright notice.
Guido van Rossum <guido@python.org>
parents:
141
diff
changeset
|
6 |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4111
diff
changeset
|
7 Permission to use, copy, modify, and distribute this software and its |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4111
diff
changeset
|
8 documentation for any purpose and without fee is hereby granted, |
|
145
853b736a6a9e
Added copyright notice.
Guido van Rossum <guido@python.org>
parents:
141
diff
changeset
|
9 provided that the above copyright notice appear in all copies and that |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4111
diff
changeset
|
10 both that copyright notice and this permission notice appear in |
|
145
853b736a6a9e
Added copyright notice.
Guido van Rossum <guido@python.org>
parents:
141
diff
changeset
|
11 supporting documentation, and that the names of Stichting Mathematisch |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4111
diff
changeset
|
12 Centrum or CWI or Corporation for National Research Initiatives or |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4111
diff
changeset
|
13 CNRI not be used in advertising or publicity pertaining to |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4111
diff
changeset
|
14 distribution of the software without specific, written prior |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4111
diff
changeset
|
15 permission. |
|
145
853b736a6a9e
Added copyright notice.
Guido van Rossum <guido@python.org>
parents:
141
diff
changeset
|
16 |
|
4503
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4111
diff
changeset
|
17 While CWI is the initial source for this software, a modified version |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4111
diff
changeset
|
18 is made available by the Corporation for National Research Initiatives |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4111
diff
changeset
|
19 (CNRI) at the Internet address ftp://ftp.python.org. |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4111
diff
changeset
|
20 |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4111
diff
changeset
|
21 STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4111
diff
changeset
|
22 REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4111
diff
changeset
|
23 MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4111
diff
changeset
|
24 CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4111
diff
changeset
|
25 DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4111
diff
changeset
|
26 PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4111
diff
changeset
|
27 TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
|
65d2d8e67da3
New permission notice, includes CNRI.
Guido van Rossum <guido@python.org>
parents:
4111
diff
changeset
|
28 PERFORMANCE OF THIS SOFTWARE. |
|
145
853b736a6a9e
Added copyright notice.
Guido van Rossum <guido@python.org>
parents:
141
diff
changeset
|
29 |
|
853b736a6a9e
Added copyright notice.
Guido van Rossum <guido@python.org>
parents:
141
diff
changeset
|
30 ******************************************************************/ |
|
853b736a6a9e
Added copyright notice.
Guido van Rossum <guido@python.org>
parents:
141
diff
changeset
|
31 |
| 6 | 32 /* Module definition and import implementation */ |
| 33 | |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
34 #include "Python.h" |
| 6 | 35 |
| 36 #include "node.h" | |
| 37 #include "token.h" | |
| 38 #include "errcode.h" | |
|
263
28f0ffd9facf
Support ".pyc" files: cached compilation results.
Guido van Rossum <guido@python.org>
parents:
228
diff
changeset
|
39 #include "marshal.h" |
|
28f0ffd9facf
Support ".pyc" files: cached compilation results.
Guido van Rossum <guido@python.org>
parents:
228
diff
changeset
|
40 #include "compile.h" |
| 926 | 41 #include "eval.h" |
|
675
5aff9f8fd299
Move SEP to osdefs.h. Use MAXPATHLEN from osdefs.h.
Guido van Rossum <guido@python.org>
parents:
630
diff
changeset
|
42 #include "osdefs.h" |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
43 #include "importdl.h" |
|
2349
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
44 #ifdef macintosh |
|
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
45 #include "macglue.h" |
|
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
46 #endif |
|
263
28f0ffd9facf
Support ".pyc" files: cached compilation results.
Guido van Rossum <guido@python.org>
parents:
228
diff
changeset
|
47 |
| 4596 | 48 #ifdef HAVE_UNISTD_H |
| 49 #include <unistd.h> | |
| 50 #endif | |
| 51 | |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
52 /* We expect that stat exists on most systems. |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
53 It's confirmed on Unix, Mac and Windows. |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
54 If you don't have it, add #define DONT_HAVE_STAT to your config.h. */ |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
55 #ifndef DONT_HAVE_STAT |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
56 #define HAVE_STAT |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
57 |
|
10530
d834ecdf8c26
Changes by Mark Hammond for Windows CE. Mostly of the form
Guido van Rossum <guido@python.org>
parents:
9971
diff
changeset
|
58 #ifndef DONT_HAVE_SYS_TYPES_H |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
59 #include <sys/types.h> |
|
10530
d834ecdf8c26
Changes by Mark Hammond for Windows CE. Mostly of the form
Guido van Rossum <guido@python.org>
parents:
9971
diff
changeset
|
60 #endif |
|
d834ecdf8c26
Changes by Mark Hammond for Windows CE. Mostly of the form
Guido van Rossum <guido@python.org>
parents:
9971
diff
changeset
|
61 #ifndef DONT_HAVE_SYS_STAT_H |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
62 #include <sys/stat.h> |
|
10530
d834ecdf8c26
Changes by Mark Hammond for Windows CE. Mostly of the form
Guido van Rossum <guido@python.org>
parents:
9971
diff
changeset
|
63 #endif |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
64 |
|
6762
0a3c7402d395
Jeff Rush: add definition for S_IFMT for VisualAge C/C++ under OS2.
Guido van Rossum <guido@python.org>
parents:
6542
diff
changeset
|
65 #if defined(PYCC_VACPP) |
|
0a3c7402d395
Jeff Rush: add definition for S_IFMT for VisualAge C/C++ under OS2.
Guido van Rossum <guido@python.org>
parents:
6542
diff
changeset
|
66 /* VisualAge C/C++ Failed to Define MountType Field in sys/stat.h */ |
|
0a3c7402d395
Jeff Rush: add definition for S_IFMT for VisualAge C/C++ under OS2.
Guido van Rossum <guido@python.org>
parents:
6542
diff
changeset
|
67 #define S_IFMT (S_IFDIR|S_IFCHR|S_IFREG) |
|
0a3c7402d395
Jeff Rush: add definition for S_IFMT for VisualAge C/C++ under OS2.
Guido van Rossum <guido@python.org>
parents:
6542
diff
changeset
|
68 #endif |
|
0a3c7402d395
Jeff Rush: add definition for S_IFMT for VisualAge C/C++ under OS2.
Guido van Rossum <guido@python.org>
parents:
6542
diff
changeset
|
69 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
70 #ifndef S_ISDIR |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
71 #define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
72 #endif |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
73 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
74 #endif |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
75 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
76 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
77 extern long PyOS_GetLastModificationTime(); /* In getmtime.c */ |
|
1351
e149c77d173c
Makefile, import.c: Lance's alternative module search (allow .pyc file
Guido van Rossum <guido@python.org>
parents:
1293
diff
changeset
|
78 |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
79 /* Magic word to reject .pyc files generated by other Python versions */ |
|
2812
fb3daf9b2456
new MAGIC; some changes to default files for imp.load_... functions
Guido van Rossum <guido@python.org>
parents:
2749
diff
changeset
|
80 /* Change for each incompatible change */ |
|
fb3daf9b2456
new MAGIC; some changes to default files for imp.load_... functions
Guido van Rossum <guido@python.org>
parents:
2749
diff
changeset
|
81 /* The value of CR and LF is incorporated so if you ever read or write |
|
fb3daf9b2456
new MAGIC; some changes to default files for imp.load_... functions
Guido van Rossum <guido@python.org>
parents:
2749
diff
changeset
|
82 a .pyc file in text mode the magic number will be wrong; also, the |
|
fb3daf9b2456
new MAGIC; some changes to default files for imp.load_... functions
Guido van Rossum <guido@python.org>
parents:
2749
diff
changeset
|
83 Apple MPW compiler swaps their values, botching string constants */ |
|
fb3daf9b2456
new MAGIC; some changes to default files for imp.load_... functions
Guido van Rossum <guido@python.org>
parents:
2749
diff
changeset
|
84 /* XXX Perhaps the magic number should be frozen and a version field |
|
fb3daf9b2456
new MAGIC; some changes to default files for imp.load_... functions
Guido van Rossum <guido@python.org>
parents:
2749
diff
changeset
|
85 added to the .pyc file header? */ |
|
4993
b82d847b3dcb
New MAGIC number (code objects have one more item when marshalled).
Guido van Rossum <guido@python.org>
parents:
4596
diff
changeset
|
86 /* New way to come up with the magic number: (YEAR-1995), MONTH, DAY */ |
|
5043
104a646fc7a6
New magin number (because of linenumber table).
Guido van Rossum <guido@python.org>
parents:
4993
diff
changeset
|
87 #define MAGIC (20121 | ((long)'\r'<<16) | ((long)'\n'<<24)) |
|
487
77b80a91d357
New magic word; and check it.
Guido van Rossum <guido@python.org>
parents:
340
diff
changeset
|
88 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
89 /* See _PyImport_FixupExtension() below */ |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
90 static PyObject *extensions = NULL; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
91 |
|
6541
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
92 /* This table is defined in config.c: */ |
|
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
93 extern struct _inittab _PyImport_Inittab[]; |
|
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
94 |
|
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
95 struct _inittab *PyImport_Inittab = _PyImport_Inittab; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
96 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
97 /* Initialize things */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
98 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
99 void |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
100 _PyImport_Init() |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
101 { |
|
5180
6bc56259cc4c
When -O is given, use ".pyo" instead of ".pyc".
Guido van Rossum <guido@python.org>
parents:
5043
diff
changeset
|
102 if (Py_OptimizeFlag) { |
|
6bc56259cc4c
When -O is given, use ".pyo" instead of ".pyc".
Guido van Rossum <guido@python.org>
parents:
5043
diff
changeset
|
103 /* Replace ".pyc" with ".pyo" in import_filetab */ |
|
6bc56259cc4c
When -O is given, use ".pyo" instead of ".pyc".
Guido van Rossum <guido@python.org>
parents:
5043
diff
changeset
|
104 struct filedescr *p; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
105 for (p = _PyImport_Filetab; p->suffix != NULL; p++) { |
|
5180
6bc56259cc4c
When -O is given, use ".pyo" instead of ".pyc".
Guido van Rossum <guido@python.org>
parents:
5043
diff
changeset
|
106 if (strcmp(p->suffix, ".pyc") == 0) |
|
6bc56259cc4c
When -O is given, use ".pyo" instead of ".pyc".
Guido van Rossum <guido@python.org>
parents:
5043
diff
changeset
|
107 p->suffix = ".pyo"; |
|
6bc56259cc4c
When -O is given, use ".pyo" instead of ".pyc".
Guido van Rossum <guido@python.org>
parents:
5043
diff
changeset
|
108 } |
|
6bc56259cc4c
When -O is given, use ".pyo" instead of ".pyc".
Guido van Rossum <guido@python.org>
parents:
5043
diff
changeset
|
109 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
110 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
111 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
112 void |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
113 _PyImport_Fini() |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
114 { |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
115 Py_XDECREF(extensions); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
116 extensions = NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
117 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
118 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
119 |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
120 /* Locking primitives to prevent parallel imports of the same module |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
121 in different threads to return with a partially loaded module. |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
122 These calls are serialized by the global interpreter lock. */ |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
123 |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
124 #ifdef WITH_THREAD |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
125 |
|
9203
07dae6fdae79
Renamed thread.h to pythread.h.
Guido van Rossum <guido@python.org>
parents:
9187
diff
changeset
|
126 #include "pythread.h" |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
127 |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9431
diff
changeset
|
128 static PyThread_type_lock import_lock = 0; |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
129 static long import_lock_thread = -1; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
130 static int import_lock_level = 0; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
131 |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
132 static void |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
133 lock_import() |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
134 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9431
diff
changeset
|
135 long me = PyThread_get_thread_ident(); |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
136 if (me == -1) |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
137 return; /* Too bad */ |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
138 if (import_lock == NULL) |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9431
diff
changeset
|
139 import_lock = PyThread_allocate_lock(); |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
140 if (import_lock_thread == me) { |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
141 import_lock_level++; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
142 return; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
143 } |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9431
diff
changeset
|
144 if (import_lock_thread != -1 || !PyThread_acquire_lock(import_lock, 0)) { |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
145 PyThreadState *tstate = PyEval_SaveThread(); |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9431
diff
changeset
|
146 PyThread_acquire_lock(import_lock, 1); |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
147 PyEval_RestoreThread(tstate); |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
148 } |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
149 import_lock_thread = me; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
150 import_lock_level = 1; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
151 } |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
152 |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
153 static void |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
154 unlock_import() |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
155 { |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9431
diff
changeset
|
156 long me = PyThread_get_thread_ident(); |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
157 if (me == -1) |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
158 return; /* Too bad */ |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
159 if (import_lock_thread != me) |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
160 Py_FatalError("unlock_import: not holding the import lock"); |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
161 import_lock_level--; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
162 if (import_lock_level == 0) { |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
163 import_lock_thread = -1; |
|
9679
877d23bd5bdc
Thanks to Chris Herborth, the thread primitives now have proper Py*
Guido van Rossum <guido@python.org>
parents:
9431
diff
changeset
|
164 PyThread_release_lock(import_lock); |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
165 } |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
166 } |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
167 |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
168 #else |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
169 |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
170 #define lock_import() |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
171 #define unlock_import() |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
172 |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
173 #endif |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
174 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
175 /* Helper for sys */ |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
176 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
177 PyObject * |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
178 PyImport_GetModuleDict() |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
179 { |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
180 PyInterpreterState *interp = PyThreadState_Get()->interp; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
181 if (interp->modules == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
182 Py_FatalError("PyImport_GetModuleDict: no module dictionary!"); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
183 return interp->modules; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
184 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
185 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
186 |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
187 /* List of names to clear in sys */ |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
188 static char* sys_deletes[] = { |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
189 "path", "argv", "ps1", "ps2", "exitfunc", |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
190 "exc_type", "exc_value", "exc_traceback", |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
191 "last_type", "last_value", "last_traceback", |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
192 NULL |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
193 }; |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
194 |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
195 static char* sys_files[] = { |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
196 "stdin", "__stdin__", |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
197 "stdout", "__stdout__", |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
198 "stderr", "__stderr__", |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
199 NULL |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
200 }; |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
201 |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
202 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
203 /* Un-initialize things, as good as we can */ |
| 86 | 204 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
205 void |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
206 PyImport_Cleanup() |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
207 { |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
208 int pos, ndone; |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
209 char *name; |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
210 PyObject *key, *value, *dict; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
211 PyInterpreterState *interp = PyThreadState_Get()->interp; |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
212 PyObject *modules = interp->modules; |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
213 |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
214 if (modules == NULL) |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
215 return; /* Already done */ |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
216 |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
217 /* Delete some special variables first. These are common |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
218 places where user values hide and people complain when their |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
219 destructors fail. Since the modules containing them are |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
220 deleted *last* of all, they would come too late in the normal |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
221 destruction order. Sigh. */ |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
222 |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
223 value = PyDict_GetItemString(modules, "__builtin__"); |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
224 if (value != NULL && PyModule_Check(value)) { |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
225 dict = PyModule_GetDict(value); |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
226 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
227 PySys_WriteStderr("# clear __builtin__._\n"); |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
228 PyDict_SetItemString(dict, "_", Py_None); |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
229 } |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
230 value = PyDict_GetItemString(modules, "sys"); |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
231 if (value != NULL && PyModule_Check(value)) { |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
232 char **p; |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
233 PyObject *v; |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
234 dict = PyModule_GetDict(value); |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
235 for (p = sys_deletes; *p != NULL; p++) { |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
236 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
237 PySys_WriteStderr("# clear sys.%s\n", *p); |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
238 PyDict_SetItemString(dict, *p, Py_None); |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
239 } |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
240 for (p = sys_files; *p != NULL; p+=2) { |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
241 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
242 PySys_WriteStderr("# restore sys.%s\n", *p); |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
243 v = PyDict_GetItemString(dict, *(p+1)); |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
244 if (v == NULL) |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
245 v = Py_None; |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
246 PyDict_SetItemString(dict, *p, v); |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
247 } |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
248 } |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
249 |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
250 /* First, delete __main__ */ |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
251 value = PyDict_GetItemString(modules, "__main__"); |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
252 if (value != NULL && PyModule_Check(value)) { |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
253 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
254 PySys_WriteStderr("# cleanup __main__\n"); |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
255 _PyModule_Clear(value); |
|
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
256 PyDict_SetItemString(modules, "__main__", Py_None); |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
257 } |
|
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
258 |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
259 /* The special treatment of __builtin__ here is because even |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
260 when it's not referenced as a module, its dictionary is |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
261 referenced by almost every module's __builtins__. Since |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
262 deleting a module clears its dictionary (even if there are |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
263 references left to it), we need to delete the __builtin__ |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
264 module last. Likewise, we don't delete sys until the very |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
265 end because it is implicitly referenced (e.g. by print). |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
266 |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
267 Also note that we 'delete' modules by replacing their entry |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
268 in the modules dict with None, rather than really deleting |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
269 them; this avoids a rehash of the modules dictionary and |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
270 also marks them as "non existent" so they won't be |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
271 re-imported. */ |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
272 |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
273 /* Next, repeatedly delete modules with a reference count of |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
274 one (skipping __builtin__ and sys) and delete them */ |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
275 do { |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
276 ndone = 0; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
277 pos = 0; |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
278 while (PyDict_Next(modules, &pos, &key, &value)) { |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
279 if (value->ob_refcnt != 1) |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
280 continue; |
|
9187
e21d0798c02a
While scalling sys.modules, skip entries that don't have string keys,
Guido van Rossum <guido@python.org>
parents:
9096
diff
changeset
|
281 if (PyString_Check(key) && PyModule_Check(value)) { |
|
e21d0798c02a
While scalling sys.modules, skip entries that don't have string keys,
Guido van Rossum <guido@python.org>
parents:
9096
diff
changeset
|
282 name = PyString_AS_STRING(key); |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
283 if (strcmp(name, "__builtin__") == 0) |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
284 continue; |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
285 if (strcmp(name, "sys") == 0) |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
286 continue; |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
287 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
288 PySys_WriteStderr( |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
289 "# cleanup[1] %s\n", name); |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
290 _PyModule_Clear(value); |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
291 PyDict_SetItem(modules, key, Py_None); |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
292 ndone++; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
293 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
294 } |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
295 } while (ndone > 0); |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
296 |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
297 /* Next, delete all modules (still skipping __builtin__ and sys) */ |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
298 pos = 0; |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
299 while (PyDict_Next(modules, &pos, &key, &value)) { |
|
9187
e21d0798c02a
While scalling sys.modules, skip entries that don't have string keys,
Guido van Rossum <guido@python.org>
parents:
9096
diff
changeset
|
300 if (PyString_Check(key) && PyModule_Check(value)) { |
|
e21d0798c02a
While scalling sys.modules, skip entries that don't have string keys,
Guido van Rossum <guido@python.org>
parents:
9096
diff
changeset
|
301 name = PyString_AS_STRING(key); |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
302 if (strcmp(name, "__builtin__") == 0) |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
303 continue; |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
304 if (strcmp(name, "sys") == 0) |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
305 continue; |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
306 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
307 PySys_WriteStderr("# cleanup[2] %s\n", name); |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
308 _PyModule_Clear(value); |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
309 PyDict_SetItem(modules, key, Py_None); |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
310 } |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
311 } |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
312 |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
313 /* Next, delete sys and __builtin__ (in that order) */ |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
314 value = PyDict_GetItemString(modules, "sys"); |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
315 if (value != NULL && PyModule_Check(value)) { |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
316 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
317 PySys_WriteStderr("# cleanup sys\n"); |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
318 _PyModule_Clear(value); |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
319 PyDict_SetItemString(modules, "sys", Py_None); |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
320 } |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
321 value = PyDict_GetItemString(modules, "__builtin__"); |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
322 if (value != NULL && PyModule_Check(value)) { |
|
7202
fed3d200fb56
Two more refinements of the cleanup process.
Guido van Rossum <guido@python.org>
parents:
7111
diff
changeset
|
323 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
324 PySys_WriteStderr("# cleanup __builtin__\n"); |
|
7403
185c1d47ce7a
Moved clear_carefully() to _PyModule_Clear() in moduleobject.c
Guido van Rossum <guido@python.org>
parents:
7367
diff
changeset
|
325 _PyModule_Clear(value); |
|
7111
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
326 PyDict_SetItemString(modules, "__builtin__", Py_None); |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
327 } |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
328 |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
329 /* Finally, clear and delete the modules directory */ |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
330 PyDict_Clear(modules); |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
331 interp->modules = NULL; |
|
f063f1eb2964
Rewritten PyImport_Cleanup() and its helper, clear_carefully(). They
Guido van Rossum <guido@python.org>
parents:
6907
diff
changeset
|
332 Py_DECREF(modules); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
333 } |
|
166
28923e44254c
Added forward declaration (to satisfy Standard C).
Guido van Rossum <guido@python.org>
parents:
145
diff
changeset
|
334 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
335 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
336 /* Helper for pythonrun.c -- return magic number */ |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1877
diff
changeset
|
337 |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1877
diff
changeset
|
338 long |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
339 PyImport_GetMagicNumber() |
|
1886
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1877
diff
changeset
|
340 { |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1877
diff
changeset
|
341 return MAGIC; |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1877
diff
changeset
|
342 } |
|
ac6a9f90f6fd
* Import/pythonrun.h, Python/{import,pythonrun}.c,
Guido van Rossum <guido@python.org>
parents:
1877
diff
changeset
|
343 |
| 6 | 344 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
345 /* Magic for extension modules (built-in as well as dynamically |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
346 loaded). To prevent initializing an extension module more than |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
347 once, we keep a static dictionary 'extensions' keyed by module name |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
348 (for built-in modules) or by filename (for dynamically loaded |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
349 modules), containing these modules. A copy od the module's |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
350 dictionary is stored by calling _PyImport_FixupExtension() |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
351 immediately after the module initialization function succeeds. A |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
352 copy can be retrieved from there by calling |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
353 _PyImport_FindExtension(). */ |
| 6 | 354 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
355 PyObject * |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
356 _PyImport_FixupExtension(name, filename) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
357 char *name; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
358 char *filename; |
| 6 | 359 { |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
360 PyObject *modules, *mod, *dict, *copy; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
361 if (extensions == NULL) { |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
362 extensions = PyDict_New(); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
363 if (extensions == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
364 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
365 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
366 modules = PyImport_GetModuleDict(); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
367 mod = PyDict_GetItemString(modules, name); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
368 if (mod == NULL || !PyModule_Check(mod)) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
369 PyErr_Format(PyExc_SystemError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
370 "_PyImport_FixupExtension: module %.200s not loaded", name); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
371 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
372 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
373 dict = PyModule_GetDict(mod); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
374 if (dict == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
375 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
376 copy = PyObject_CallMethod(dict, "copy", ""); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
377 if (copy == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
378 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
379 PyDict_SetItemString(extensions, filename, copy); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
380 Py_DECREF(copy); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
381 return copy; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
382 } |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
383 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
384 PyObject * |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
385 _PyImport_FindExtension(name, filename) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
386 char *name; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
387 char *filename; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
388 { |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
389 PyObject *dict, *mod, *mdict, *result; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
390 if (extensions == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
391 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
392 dict = PyDict_GetItemString(extensions, filename); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
393 if (dict == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
394 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
395 mod = PyImport_AddModule(name); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
396 if (mod == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
397 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
398 mdict = PyModule_GetDict(mod); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
399 if (mdict == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
400 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
401 result = PyObject_CallMethod(mdict, "update", "O", dict); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
402 if (result == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
403 return NULL; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
404 Py_DECREF(result); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
405 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
406 PySys_WriteStderr("import %s # previously loaded (%s)\n", |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
407 name, filename); |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
408 return mod; |
| 6 | 409 } |
| 410 | |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
411 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
412 /* Get the module object corresponding to a module name. |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
413 First check the modules dictionary if there's one there, |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
414 if not, create a new one and insert in in the modules dictionary. |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
415 Because the former action is most common, THIS DOES NOT RETURN A |
|
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
416 'NEW' REFERENCE! */ |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
417 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
418 PyObject * |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
419 PyImport_AddModule(name) |
|
40
f28ac7f621c7
Added reload() functionality.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
420 char *name; |
|
f28ac7f621c7
Added reload() functionality.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
421 { |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
422 PyObject *modules = PyImport_GetModuleDict(); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
423 PyObject *m; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
424 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
425 if ((m = PyDict_GetItemString(modules, name)) != NULL && |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
426 PyModule_Check(m)) |
| 86 | 427 return m; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
428 m = PyModule_New(name); |
| 86 | 429 if (m == NULL) |
| 6 | 430 return NULL; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
431 if (PyDict_SetItemString(modules, name, m) != 0) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
432 Py_DECREF(m); |
| 86 | 433 return NULL; |
| 6 | 434 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
435 Py_DECREF(m); /* Yes, it still exists, in modules! */ |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
436 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
437 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
438 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
439 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
440 |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
441 /* Execute a code object in a module and return the module object |
|
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
442 WITH INCREMENTED REFERENCE COUNT */ |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
443 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
444 PyObject * |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
445 PyImport_ExecCodeModule(name, co) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
446 char *name; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
447 PyObject *co; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
448 { |
|
7232
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
449 return PyImport_ExecCodeModuleEx(name, co, (char *)NULL); |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
450 } |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
451 |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
452 PyObject * |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
453 PyImport_ExecCodeModuleEx(name, co, pathname) |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
454 char *name; |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
455 PyObject *co; |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
456 char *pathname; |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
457 { |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
458 PyObject *modules = PyImport_GetModuleDict(); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
459 PyObject *m, *d, *v; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
460 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
461 m = PyImport_AddModule(name); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
462 if (m == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
463 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
464 d = PyModule_GetDict(m); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
465 if (PyDict_GetItemString(d, "__builtins__") == NULL) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
466 if (PyDict_SetItemString(d, "__builtins__", |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
467 PyEval_GetBuiltins()) != 0) |
|
2098
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
468 return NULL; |
|
b7be0382f9ee
__builtins__ mods (and sys_checkinterval for ceval.c)
Guido van Rossum <guido@python.org>
parents:
2062
diff
changeset
|
469 } |
|
3557
cee4a6d8415e
Remember source filename as <module>.__file__.
Guido van Rossum <guido@python.org>
parents:
3492
diff
changeset
|
470 /* Remember the filename as the __file__ attribute */ |
|
7232
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
471 v = NULL; |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
472 if (pathname != NULL) { |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
473 v = PyString_FromString(pathname); |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
474 if (v == NULL) |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
475 PyErr_Clear(); |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
476 } |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
477 if (v == NULL) { |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
478 v = ((PyCodeObject *)co)->co_filename; |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
479 Py_INCREF(v); |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
480 } |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
481 if (PyDict_SetItemString(d, "__file__", v) != 0) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
482 PyErr_Clear(); /* Not important enough to report */ |
|
7232
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
483 Py_DECREF(v); |
|
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
484 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
485 v = PyEval_EvalCode((PyCodeObject *)co, d, d); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
486 if (v == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
487 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
488 Py_DECREF(v); |
|
5758
bfe9ba74c19e
Fix problem discovered by Greg McFarlane: when an imported module
Guido van Rossum <guido@python.org>
parents:
5511
diff
changeset
|
489 |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
490 if ((m = PyDict_GetItemString(modules, name)) == NULL) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
491 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
492 "Loaded module %.200s not found in sys.modules", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
493 name); |
|
5758
bfe9ba74c19e
Fix problem discovered by Greg McFarlane: when an imported module
Guido van Rossum <guido@python.org>
parents:
5511
diff
changeset
|
494 return NULL; |
|
bfe9ba74c19e
Fix problem discovered by Greg McFarlane: when an imported module
Guido van Rossum <guido@python.org>
parents:
5511
diff
changeset
|
495 } |
|
bfe9ba74c19e
Fix problem discovered by Greg McFarlane: when an imported module
Guido van Rossum <guido@python.org>
parents:
5511
diff
changeset
|
496 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
497 Py_INCREF(m); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
498 |
| 86 | 499 return m; |
| 6 | 500 } |
| 501 | |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
502 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
503 /* Given a pathname for a Python source file, fill a buffer with the |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
504 pathname for the corresponding compiled file. Return the pathname |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
505 for the compiled file, or NULL if there's no space in the buffer. |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
506 Doesn't set an exception. */ |
|
609
0ad5b35e3ad8
Support for dynamic loading added.
Guido van Rossum <guido@python.org>
parents:
510
diff
changeset
|
507 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
508 static char * |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
509 make_compiled_pathname(pathname, buf, buflen) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
510 char *pathname; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
511 char *buf; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
512 int buflen; |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
513 { |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
514 int len; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
515 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
516 len = strlen(pathname); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
517 if (len+2 > buflen) |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
518 return NULL; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
519 strcpy(buf, pathname); |
|
5180
6bc56259cc4c
When -O is given, use ".pyo" instead of ".pyc".
Guido van Rossum <guido@python.org>
parents:
5043
diff
changeset
|
520 strcpy(buf+len, Py_OptimizeFlag ? "o" : "c"); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
521 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
522 return buf; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
523 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
524 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
525 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
526 /* Given a pathname for a Python source file, its time of last |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
527 modification, and a pathname for a compiled file, check whether the |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
528 compiled file represents the same version of the source. If so, |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
529 return a FILE pointer for the compiled file, positioned just after |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
530 the header; if not, return NULL. |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
531 Doesn't set an exception. */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
532 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
533 static FILE * |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
534 check_compiled_module(pathname, mtime, cpathname) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
535 char *pathname; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
536 long mtime; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
537 char *cpathname; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
538 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
539 FILE *fp; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
540 long magic; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
541 long pyc_mtime; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
542 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
543 fp = fopen(cpathname, "rb"); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
544 if (fp == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
545 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
546 magic = PyMarshal_ReadLongFromFile(fp); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
547 if (magic != MAGIC) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
548 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
549 PySys_WriteStderr("# %s has bad magic\n", cpathname); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
550 fclose(fp); |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
551 return NULL; |
|
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
552 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
553 pyc_mtime = PyMarshal_ReadLongFromFile(fp); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
554 if (pyc_mtime != mtime) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
555 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
556 PySys_WriteStderr("# %s has bad mtime\n", cpathname); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
557 fclose(fp); |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
558 return NULL; |
|
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
559 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
560 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
561 PySys_WriteStderr("# %s matches %s\n", cpathname, pathname); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
562 return fp; |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
563 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
564 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
565 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
566 /* Read a code object from a file and check it for validity */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
567 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
568 static PyCodeObject * |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
569 read_compiled_module(cpathname, fp) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
570 char *cpathname; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
571 FILE *fp; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
572 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
573 PyObject *co; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
574 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
575 co = PyMarshal_ReadObjectFromFile(fp); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
576 /* Ugly: rd_object() may return NULL with or without error */ |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
577 if (co == NULL || !PyCode_Check(co)) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
578 if (!PyErr_Occurred()) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
579 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
580 "Non-code object in %.200s", cpathname); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
581 Py_XDECREF(co); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
582 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
583 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
584 return (PyCodeObject *)co; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
585 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
586 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
587 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
588 /* Load a module from a compiled file, execute it, and return its |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
589 module object WITH INCREMENTED REFERENCE COUNT */ |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
590 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
591 static PyObject * |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
592 load_compiled_module(name, cpathname, fp) |
| 6 | 593 char *name; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
594 char *cpathname; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
595 FILE *fp; |
| 6 | 596 { |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
597 long magic; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
598 PyCodeObject *co; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
599 PyObject *m; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
600 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
601 magic = PyMarshal_ReadLongFromFile(fp); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
602 if (magic != MAGIC) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
603 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
604 "Bad magic number in %.200s", cpathname); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
605 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
606 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
607 (void) PyMarshal_ReadLongFromFile(fp); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
608 co = read_compiled_module(cpathname, fp); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
609 if (co == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
610 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
611 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
612 PySys_WriteStderr("import %s # precompiled from %s\n", |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
613 name, cpathname); |
|
7232
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
614 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, cpathname); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
615 Py_DECREF(co); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
616 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
617 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
618 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
619 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
620 /* Parse a source file and return the corresponding code object */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
621 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
622 static PyCodeObject * |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
623 parse_source_module(pathname, fp) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
624 char *pathname; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
625 FILE *fp; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
626 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
627 PyCodeObject *co; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
628 node *n; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
629 |
|
5438
e926c331ebbf
Instead of importing graminit.h whenever one of the three grammar 'root'
Guido van Rossum <guido@python.org>
parents:
5375
diff
changeset
|
630 n = PyParser_SimpleParseFile(fp, pathname, Py_file_input); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
631 if (n == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
632 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
633 co = PyNode_Compile(n, pathname); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
634 PyNode_Free(n); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
635 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
636 return co; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
637 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
638 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
639 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
640 /* Write a compiled module to a file, placing the time of last |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
641 modification of its source into the header. |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
642 Errors are ignored, if a write error occurs an attempt is made to |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
643 remove the file. */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
644 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
645 static void |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
646 write_compiled_module(co, cpathname, mtime) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
647 PyCodeObject *co; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
648 char *cpathname; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
649 long mtime; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
650 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
651 FILE *fp; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
652 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
653 fp = fopen(cpathname, "wb"); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
654 if (fp == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
655 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
656 PySys_WriteStderr( |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
657 "# can't create %s\n", cpathname); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
658 return; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
659 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
660 PyMarshal_WriteLongToFile(MAGIC, fp); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
661 /* First write a 0 for mtime */ |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
662 PyMarshal_WriteLongToFile(0L, fp); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
663 PyMarshal_WriteObjectToFile((PyObject *)co, fp); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
664 if (ferror(fp)) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
665 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
666 PySys_WriteStderr("# can't write %s\n", cpathname); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
667 /* Don't keep partial file */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
668 fclose(fp); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
669 (void) unlink(cpathname); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
670 return; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
671 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
672 /* Now write the true mtime */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
673 fseek(fp, 4L, 0); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
674 PyMarshal_WriteLongToFile(mtime, fp); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
675 fflush(fp); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
676 fclose(fp); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
677 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
678 PySys_WriteStderr("# wrote %s\n", cpathname); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
679 #ifdef macintosh |
|
3409
27406c36e8bd
Change Mac creator from 'PYTH' to 'Pyth' -- 'PYTH' was already taken
Guido van Rossum <guido@python.org>
parents:
3139
diff
changeset
|
680 setfiletype(cpathname, 'Pyth', 'PYC '); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
681 #endif |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
682 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
683 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
684 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
685 /* Load a source module from a given file and return its module |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
686 object WITH INCREMENTED REFERENCE COUNT. If there's a matching |
|
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
687 byte-compiled file, use that instead. */ |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
688 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
689 static PyObject * |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
690 load_source_module(name, pathname, fp) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
691 char *name; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
692 char *pathname; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
693 FILE *fp; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
694 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
695 long mtime; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
696 FILE *fpc; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
697 char buf[MAXPATHLEN+1]; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
698 char *cpathname; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
699 PyCodeObject *co; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
700 PyObject *m; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
701 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
702 mtime = PyOS_GetLastModificationTime(pathname, fp); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
703 cpathname = make_compiled_pathname(pathname, buf, MAXPATHLEN+1); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
704 if (cpathname != NULL && |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
705 (fpc = check_compiled_module(pathname, mtime, cpathname))) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
706 co = read_compiled_module(cpathname, fpc); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
707 fclose(fpc); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
708 if (co == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
709 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
710 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
711 PySys_WriteStderr("import %s # precompiled from %s\n", |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
712 name, cpathname); |
|
9050
f3ebdb2274e4
__file__ used to be always set to the .pyc (or .pyo) file, even if
Guido van Rossum <guido@python.org>
parents:
8934
diff
changeset
|
713 pathname = cpathname; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
714 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
715 else { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
716 co = parse_source_module(pathname, fp); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
717 if (co == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
718 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
719 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
720 PySys_WriteStderr("import %s # from %s\n", |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
721 name, pathname); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
722 write_compiled_module(co, cpathname, mtime); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
723 } |
|
9050
f3ebdb2274e4
__file__ used to be always set to the .pyc (or .pyo) file, even if
Guido van Rossum <guido@python.org>
parents:
8934
diff
changeset
|
724 m = PyImport_ExecCodeModuleEx(name, (PyObject *)co, pathname); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
725 Py_DECREF(co); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
726 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
727 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
728 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
729 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
730 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
731 /* Forward */ |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
732 static PyObject *load_module Py_PROTO((char *, FILE *, char *, int)); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
733 static struct filedescr *find_module Py_PROTO((char *, PyObject *, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
734 char *, int, FILE **)); |
|
6299
0054a3840a75
Crrected a flow control error that caused the wrong error message when
Guido van Rossum <guido@python.org>
parents:
6285
diff
changeset
|
735 static struct _frozen *find_frozen Py_PROTO((char *name)); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
736 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
737 /* Load a package and return its module object WITH INCREMENTED |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
738 REFERENCE COUNT */ |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
739 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
740 static PyObject * |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
741 load_package(name, pathname) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
742 char *name; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
743 char *pathname; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
744 { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
745 PyObject *m, *d, *file, *path; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
746 int err; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
747 char buf[MAXPATHLEN+1]; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
748 FILE *fp = NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
749 struct filedescr *fdp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
750 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
751 m = PyImport_AddModule(name); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
752 if (m == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
753 return NULL; |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
754 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
755 PySys_WriteStderr("import %s # directory %s\n", |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
756 name, pathname); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
757 d = PyModule_GetDict(m); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
758 file = PyString_FromString(pathname); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
759 if (file == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
760 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
761 path = Py_BuildValue("[O]", file); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
762 if (path == NULL) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
763 Py_DECREF(file); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
764 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
765 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
766 err = PyDict_SetItemString(d, "__file__", file); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
767 if (err == 0) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
768 err = PyDict_SetItemString(d, "__path__", path); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
769 if (err != 0) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
770 m = NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
771 goto cleanup; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
772 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
773 buf[0] = '\0'; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
774 fdp = find_module("__init__", path, buf, sizeof(buf), &fp); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
775 if (fdp == NULL) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
776 if (PyErr_ExceptionMatches(PyExc_ImportError)) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
777 PyErr_Clear(); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
778 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
779 else |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
780 m = NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
781 goto cleanup; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
782 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
783 m = load_module(name, fp, buf, fdp->type); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
784 if (fp != NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
785 fclose(fp); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
786 cleanup: |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
787 Py_XDECREF(path); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
788 Py_XDECREF(file); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
789 return m; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
790 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
791 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
792 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
793 /* Helper to test for built-in module */ |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
794 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
795 static int |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
796 is_builtin(name) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
797 char *name; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
798 { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
799 int i; |
|
6541
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
800 for (i = 0; PyImport_Inittab[i].name != NULL; i++) { |
|
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
801 if (strcmp(name, PyImport_Inittab[i].name) == 0) { |
|
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
802 if (PyImport_Inittab[i].initfunc == NULL) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
803 return -1; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
804 else |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
805 return 1; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
806 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
807 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
808 return 0; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
809 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
810 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
811 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
812 /* Search the path (default sys.path) for a module. Return the |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
813 corresponding filedescr struct, and (via return arguments) the |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
814 pathname and an open file. Return NULL if the module is not found. */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
815 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
816 #ifdef MS_COREDLL |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
817 extern FILE *PyWin_FindRegisteredModule(); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
818 #endif |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
819 |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
820 #ifdef CHECK_IMPORT_CASE |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
821 static int check_case(char *, int, int, char *); |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
822 #endif |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
823 |
|
6542
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
824 static int find_init_module Py_PROTO((char *)); /* Forward */ |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
825 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
826 static struct filedescr * |
|
8934
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
827 find_module(realname, path, buf, buflen, p_fp) |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
828 char *realname; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
829 PyObject *path; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
830 /* Output parameters: */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
831 char *buf; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
832 int buflen; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
833 FILE **p_fp; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
834 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
835 int i, npath, len, namelen; |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
836 struct _frozen *f; |
| 4596 | 837 struct filedescr *fdp = NULL; |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
838 FILE *fp = NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
839 struct stat statbuf; |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
840 static struct filedescr fd_frozen = {"", "", PY_FROZEN}; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
841 static struct filedescr fd_builtin = {"", "", C_BUILTIN}; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
842 static struct filedescr fd_package = {"", "", PKG_DIRECTORY}; |
|
8934
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
843 char name[MAXPATHLEN+1]; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
844 |
|
8934
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
845 strcpy(name, realname); |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
846 |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
847 if (path != NULL && PyString_Check(path)) { |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
848 /* Submodule of "frozen" package: |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
849 Set name to the fullname, path to NULL |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
850 and continue as "usual" */ |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
851 if (PyString_Size(path) + 1 + strlen(name) >= (size_t)buflen) { |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
852 PyErr_SetString(PyExc_ImportError, |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
853 "full frozen module name too long"); |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
854 return NULL; |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
855 } |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
856 strcpy(buf, PyString_AsString(path)); |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
857 strcat(buf, "."); |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
858 strcat(buf, name); |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
859 strcpy(name, buf); |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
860 path = NULL; |
|
20b83ca06ce8
Patch by Just van Rossum that changes how we search for submodules of
Guido van Rossum <guido@python.org>
parents:
8845
diff
changeset
|
861 } |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
862 if (path == NULL) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
863 if (is_builtin(name)) { |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
864 strcpy(buf, name); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
865 return &fd_builtin; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
866 } |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
867 if ((f = find_frozen(name)) != NULL) { |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
868 strcpy(buf, name); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
869 return &fd_frozen; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
870 } |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
871 |
|
4111
90216e907345
PYTHONWIN -> MS_COREDLL
Guido van Rossum <guido@python.org>
parents:
3964
diff
changeset
|
872 #ifdef MS_COREDLL |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
873 fp = PyWin_FindRegisteredModule(name, &fdp, buf, buflen); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
874 if (fp != NULL) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
875 *p_fp = fp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
876 return fdp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
877 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
878 #endif |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
879 path = PySys_GetObject("path"); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
880 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
881 if (path == NULL || !PyList_Check(path)) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
882 PyErr_SetString(PyExc_ImportError, |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
883 "sys.path must be a list of directory names"); |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
884 return NULL; |
|
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
885 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
886 npath = PyList_Size(path); |
|
1905
61c3c1a2fdb4
Fix various potential buffer overrun problems.
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
887 namelen = strlen(name); |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
888 for (i = 0; i < npath; i++) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
889 PyObject *v = PyList_GetItem(path, i); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
890 if (!PyString_Check(v)) |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
891 continue; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
892 len = PyString_Size(v); |
|
5894
e2df95b7be78
Removed some variables that are used to exchange data between import.c and
Guido van Rossum <guido@python.org>
parents:
5758
diff
changeset
|
893 if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) |
|
1905
61c3c1a2fdb4
Fix various potential buffer overrun problems.
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
894 continue; /* Too long */ |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
895 strcpy(buf, PyString_AsString(v)); |
|
5317
c72c7e1930b3
Keep gcc -Wall and Microsoft VC happy.
Guido van Rossum <guido@python.org>
parents:
5180
diff
changeset
|
896 if ((int)strlen(buf) != len) |
|
1905
61c3c1a2fdb4
Fix various potential buffer overrun problems.
Guido van Rossum <guido@python.org>
parents:
1886
diff
changeset
|
897 continue; /* v contains '\0' */ |
|
2349
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
898 #ifdef macintosh |
|
5980
2894bb49e2ee
Use string interning and caching to get speedups on the mac (Jack).
Guido van Rossum <guido@python.org>
parents:
5938
diff
changeset
|
899 #ifdef INTERN_STRINGS |
|
2894bb49e2ee
Use string interning and caching to get speedups on the mac (Jack).
Guido van Rossum <guido@python.org>
parents:
5938
diff
changeset
|
900 /* |
|
2894bb49e2ee
Use string interning and caching to get speedups on the mac (Jack).
Guido van Rossum <guido@python.org>
parents:
5938
diff
changeset
|
901 ** Speedup: each sys.path item is interned, and |
|
2894bb49e2ee
Use string interning and caching to get speedups on the mac (Jack).
Guido van Rossum <guido@python.org>
parents:
5938
diff
changeset
|
902 ** FindResourceModule remembers which items refer to |
|
2894bb49e2ee
Use string interning and caching to get speedups on the mac (Jack).
Guido van Rossum <guido@python.org>
parents:
5938
diff
changeset
|
903 ** folders (so we don't have to bother trying to look |
|
2894bb49e2ee
Use string interning and caching to get speedups on the mac (Jack).
Guido van Rossum <guido@python.org>
parents:
5938
diff
changeset
|
904 ** into them for resources). |
|
2894bb49e2ee
Use string interning and caching to get speedups on the mac (Jack).
Guido van Rossum <guido@python.org>
parents:
5938
diff
changeset
|
905 */ |
|
2894bb49e2ee
Use string interning and caching to get speedups on the mac (Jack).
Guido van Rossum <guido@python.org>
parents:
5938
diff
changeset
|
906 PyString_InternInPlace(&PyList_GET_ITEM(path, i)); |
|
2894bb49e2ee
Use string interning and caching to get speedups on the mac (Jack).
Guido van Rossum <guido@python.org>
parents:
5938
diff
changeset
|
907 v = PyList_GET_ITEM(path, i); |
|
2894bb49e2ee
Use string interning and caching to get speedups on the mac (Jack).
Guido van Rossum <guido@python.org>
parents:
5938
diff
changeset
|
908 #endif |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
909 if (PyMac_FindResourceModule((PyStringObject *)v, name, buf)) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
910 static struct filedescr resfiledescr = |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
911 {"", "", PY_RESOURCE}; |
|
2349
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
912 |
|
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
913 return &resfiledescr; |
|
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
914 } |
|
8845
b933f584a26d
Added handling for Mac code resource modules (Jack Jansen).
Guido van Rossum <guido@python.org>
parents:
8822
diff
changeset
|
915 if (PyMac_FindCodeResourceModule((PyStringObject *)v, name, buf)) { |
|
b933f584a26d
Added handling for Mac code resource modules (Jack Jansen).
Guido van Rossum <guido@python.org>
parents:
8822
diff
changeset
|
916 static struct filedescr resfiledescr = |
|
b933f584a26d
Added handling for Mac code resource modules (Jack Jansen).
Guido van Rossum <guido@python.org>
parents:
8822
diff
changeset
|
917 {"", "", PY_CODERESOURCE}; |
|
b933f584a26d
Added handling for Mac code resource modules (Jack Jansen).
Guido van Rossum <guido@python.org>
parents:
8822
diff
changeset
|
918 |
|
b933f584a26d
Added handling for Mac code resource modules (Jack Jansen).
Guido van Rossum <guido@python.org>
parents:
8822
diff
changeset
|
919 return &resfiledescr; |
|
b933f584a26d
Added handling for Mac code resource modules (Jack Jansen).
Guido van Rossum <guido@python.org>
parents:
8822
diff
changeset
|
920 } |
|
2349
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
921 #endif |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
922 if (len > 0 && buf[len-1] != SEP |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
923 #ifdef ALTSEP |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
924 && buf[len-1] != ALTSEP |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
925 #endif |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
926 ) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
927 buf[len++] = SEP; |
|
3590
73664ea2030e
moved verbose decl to pydebug.h; added dos_8x3 feature
Guido van Rossum <guido@python.org>
parents:
3557
diff
changeset
|
928 #ifdef IMPORT_8x3_NAMES |
|
6907
9ec6e0a8f353
Oops! Should've renamed dos_8x3 to dos-8x3 here, too.
Guido van Rossum <guido@python.org>
parents:
6762
diff
changeset
|
929 /* see if we are searching in directory dos-8x3 */ |
|
9ec6e0a8f353
Oops! Should've renamed dos_8x3 to dos-8x3 here, too.
Guido van Rossum <guido@python.org>
parents:
6762
diff
changeset
|
930 if (len > 7 && !strncmp(buf + len - 8, "dos-8x3", 7)){ |
|
3590
73664ea2030e
moved verbose decl to pydebug.h; added dos_8x3 feature
Guido van Rossum <guido@python.org>
parents:
3557
diff
changeset
|
931 int j; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
932 char ch; /* limit name to 8 lower-case characters */ |
|
3590
73664ea2030e
moved verbose decl to pydebug.h; added dos_8x3 feature
Guido van Rossum <guido@python.org>
parents:
3557
diff
changeset
|
933 for (j = 0; (ch = name[j]) && j < 8; j++) |
|
73664ea2030e
moved verbose decl to pydebug.h; added dos_8x3 feature
Guido van Rossum <guido@python.org>
parents:
3557
diff
changeset
|
934 if (isupper(ch)) |
|
73664ea2030e
moved verbose decl to pydebug.h; added dos_8x3 feature
Guido van Rossum <guido@python.org>
parents:
3557
diff
changeset
|
935 buf[len++] = tolower(ch); |
|
73664ea2030e
moved verbose decl to pydebug.h; added dos_8x3 feature
Guido van Rossum <guido@python.org>
parents:
3557
diff
changeset
|
936 else |
|
73664ea2030e
moved verbose decl to pydebug.h; added dos_8x3 feature
Guido van Rossum <guido@python.org>
parents:
3557
diff
changeset
|
937 buf[len++] = ch; |
|
73664ea2030e
moved verbose decl to pydebug.h; added dos_8x3 feature
Guido van Rossum <guido@python.org>
parents:
3557
diff
changeset
|
938 } |
|
6907
9ec6e0a8f353
Oops! Should've renamed dos_8x3 to dos-8x3 here, too.
Guido van Rossum <guido@python.org>
parents:
6762
diff
changeset
|
939 else /* Not in dos-8x3, use the full name */ |
|
3738
ce74bba8a6a6
Slightly different Windows ifdefs
Guido van Rossum <guido@python.org>
parents:
3696
diff
changeset
|
940 #endif |
|
3696
67390c1daebe
Cosmetic change to the dox_8x3 hack.
Guido van Rossum <guido@python.org>
parents:
3683
diff
changeset
|
941 { |
|
3590
73664ea2030e
moved verbose decl to pydebug.h; added dos_8x3 feature
Guido van Rossum <guido@python.org>
parents:
3557
diff
changeset
|
942 strcpy(buf+len, name); |
|
73664ea2030e
moved verbose decl to pydebug.h; added dos_8x3 feature
Guido van Rossum <guido@python.org>
parents:
3557
diff
changeset
|
943 len += namelen; |
|
73664ea2030e
moved verbose decl to pydebug.h; added dos_8x3 feature
Guido van Rossum <guido@python.org>
parents:
3557
diff
changeset
|
944 } |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
945 #ifdef HAVE_STAT |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
946 if (stat(buf, &statbuf) == 0) { |
|
6542
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
947 if (S_ISDIR(statbuf.st_mode)) { |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
948 if (find_init_module(buf)) { |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
949 #ifdef CHECK_IMPORT_CASE |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
950 if (!check_case(buf, len, namelen, |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
951 name)) |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
952 return NULL; |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
953 #endif |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
954 return &fd_package; |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
955 } |
|
6542
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
956 } |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
957 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
958 #else |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
959 /* XXX How are you going to test for directories? */ |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
960 #endif |
|
6454
b5b35a0cf1aa
Moved mac-specific speedup to a different place (Jack)
Guido van Rossum <guido@python.org>
parents:
6375
diff
changeset
|
961 #ifdef macintosh |
|
b5b35a0cf1aa
Moved mac-specific speedup to a different place (Jack)
Guido van Rossum <guido@python.org>
parents:
6375
diff
changeset
|
962 fdp = PyMac_FindModuleExtension(buf, &len, name); |
|
b5b35a0cf1aa
Moved mac-specific speedup to a different place (Jack)
Guido van Rossum <guido@python.org>
parents:
6375
diff
changeset
|
963 if (fdp) |
|
b5b35a0cf1aa
Moved mac-specific speedup to a different place (Jack)
Guido van Rossum <guido@python.org>
parents:
6375
diff
changeset
|
964 fp = fopen(buf, fdp->mode); |
|
b5b35a0cf1aa
Moved mac-specific speedup to a different place (Jack)
Guido van Rossum <guido@python.org>
parents:
6375
diff
changeset
|
965 #else |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
966 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) { |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
967 strcpy(buf+len, fdp->suffix); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
968 if (Py_VerboseFlag > 1) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
969 PySys_WriteStderr("# trying %s\n", buf); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
970 fp = fopen(buf, fdp->mode); |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
971 if (fp != NULL) |
|
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
972 break; |
|
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
973 } |
|
5980
2894bb49e2ee
Use string interning and caching to get speedups on the mac (Jack).
Guido van Rossum <guido@python.org>
parents:
5938
diff
changeset
|
974 #endif /* !macintosh */ |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
975 if (fp != NULL) |
|
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
976 break; |
|
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
977 } |
|
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
978 if (fp == NULL) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
979 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
980 "No module named %.200s", name); |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
981 return NULL; |
|
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
982 } |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
983 #ifdef CHECK_IMPORT_CASE |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
984 if (!check_case(buf, len, namelen, name)) { |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
985 fclose(fp); |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
986 return NULL; |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
987 } |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
988 #endif |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
989 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
990 *p_fp = fp; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
991 return fdp; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
992 } |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
993 |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
994 #ifdef CHECK_IMPORT_CASE |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
995 |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
996 #ifdef MS_WIN32 |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
997 #include <windows.h> |
|
8544
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
998 #include <ctype.h> |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
999 |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1000 static int |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1001 allcaps8x3(s) |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1002 char *s; |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1003 { |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1004 /* Return 1 if s is an 8.3 filename in ALLCAPS */ |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1005 char c; |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1006 char *dot = strchr(s, '.'); |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1007 char *end = strchr(s, '\0'); |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1008 if (dot != NULL) { |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1009 if (dot-s > 8) |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1010 return 1; /* More than 8 before '.' */ |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1011 if (end-dot > 4) |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1012 return 1; /* More than 3 after '.' */ |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1013 end = strchr(dot+1, '.'); |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1014 if (end != NULL) |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1015 return 1; /* More than one dot */ |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1016 } |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1017 else if (end-s > 8) |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1018 return 1; /* More than 8 and no dot */ |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1019 while ((c = *s++)) { |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1020 if (islower(c)) |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1021 return 0; |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1022 } |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1023 return 1; |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1024 } |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1025 |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1026 static int |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1027 check_case(char *buf, int len, int namelen, char *name) |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1028 { |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1029 WIN32_FIND_DATA data; |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1030 HANDLE h; |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1031 if (getenv("PYTHONCASEOK") != NULL) |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1032 return 1; |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1033 h = FindFirstFile(buf, &data); |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1034 if (h == INVALID_HANDLE_VALUE) { |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1035 PyErr_Format(PyExc_NameError, |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1036 "Can't find file for module %.100s\n(filename %.300s)", |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1037 name, buf); |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1038 return 0; |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1039 } |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1040 FindClose(h); |
|
8544
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1041 if (allcaps8x3(data.cFileName)) { |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1042 /* Skip the test if the filename is ALL.CAPS. This can |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1043 happen in certain circumstances beyond our control, |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1044 e.g. when software is installed under NT on a FAT |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1045 filesystem and then the same FAT filesystem is used |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1046 under Windows 95. */ |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1047 return 1; |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
1048 } |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1049 if (strncmp(data.cFileName, name, namelen) != 0) { |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1050 strcpy(buf+len-namelen, data.cFileName); |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1051 PyErr_Format(PyExc_NameError, |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1052 "Case mismatch for module name %.100s\n(filename %.300s)", |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1053 name, buf); |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1054 return 0; |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1055 } |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1056 return 1; |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1057 } |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1058 #endif /* MS_WIN32 */ |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1059 |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1060 #ifdef macintosh |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1061 #include <TextUtils.h> |
|
9096
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1062 #ifdef USE_GUSI |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1063 #include "TFileSpec.h" /* for Path2FSSpec() */ |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1064 #endif |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1065 static int |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1066 check_case(char *buf, int len, int namelen, char *name) |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1067 { |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1068 FSSpec fss; |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1069 OSErr err; |
|
9096
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1070 #ifndef USE_GUSI |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1071 err = FSMakeFSSpec(0, 0, Pstring(buf), &fss); |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1072 #else |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1073 /* GUSI's Path2FSSpec() resolves all possible aliases nicely on |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1074 the way, which is fine for all directories, but here we need |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1075 the original name of the alias file (say, Dlg.ppc.slb, not |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1076 toolboxmodules.ppc.slb). */ |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1077 char *colon; |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1078 err = Path2FSSpec(buf, &fss); |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1079 if (err == noErr) { |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1080 colon = strrchr(buf, ':'); /* find filename */ |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1081 if (colon != NULL) |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1082 err = FSMakeFSSpec(fss.vRefNum, fss.parID, |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1083 Pstring(colon+1), &fss); |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1084 else |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1085 err = FSMakeFSSpec(fss.vRefNum, fss.parID, |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1086 fss.name, &fss); |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1087 } |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1088 #endif |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1089 if (err) { |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1090 PyErr_Format(PyExc_NameError, |
|
9096
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1091 "Can't find file for module %.100s\n(filename %.300s)", |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1092 name, buf); |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1093 return 0; |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1094 } |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1095 p2cstr(fss.name); |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1096 if ( strncmp(name, (char *)fss.name, namelen) != 0 ) { |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1097 PyErr_Format(PyExc_NameError, |
|
9096
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1098 "Case mismatch for module name %.100s\n(filename %.300s)", |
|
2088f80253db
Mac-specific mod to enable aliases on import paths.
Guido van Rossum <guido@python.org>
parents:
9050
diff
changeset
|
1099 name, fss.name); |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1100 return 0; |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1101 } |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1102 return 1; |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1103 } |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1104 #endif /* macintosh */ |
|
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1105 |
|
7305
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1106 #ifdef DJGPP |
|
7367
0c79cafec4bc
Small patches to the DJGPP version of check_case().
Guido van Rossum <guido@python.org>
parents:
7305
diff
changeset
|
1107 #include <dir.h> |
|
0c79cafec4bc
Small patches to the DJGPP version of check_case().
Guido van Rossum <guido@python.org>
parents:
7305
diff
changeset
|
1108 |
|
7305
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1109 static int |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1110 check_case(char *buf, int len, int namelen, char *name) |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1111 { |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1112 struct ffblk ffblk; |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1113 int done; |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1114 |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1115 if (getenv("PYTHONCASEOK") != NULL) |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1116 return 1; |
|
7367
0c79cafec4bc
Small patches to the DJGPP version of check_case().
Guido van Rossum <guido@python.org>
parents:
7305
diff
changeset
|
1117 done = findfirst(buf, &ffblk, FA_ARCH|FA_RDONLY|FA_HIDDEN|FA_DIREC); |
|
7305
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1118 if (done) { |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1119 PyErr_Format(PyExc_NameError, |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1120 "Can't find file for module %.100s\n(filename %.300s)", |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1121 name, buf); |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1122 return 0; |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1123 } |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1124 |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1125 if (strncmp(ffblk.ff_name, name, namelen) != 0) { |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1126 strcpy(buf+len-namelen, ffblk.ff_name); |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1127 PyErr_Format(PyExc_NameError, |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1128 "Case mismatch for module name %.100s\n(filename %.300s)", |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1129 name, buf); |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1130 return 0; |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1131 } |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1132 return 1; |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1133 } |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1134 #endif |
|
067e4813c6d6
Added DJGPP version of check_case(), by Pit Scrorpion (Hans Nowak).
Guido van Rossum <guido@python.org>
parents:
7290
diff
changeset
|
1135 |
|
7987
697df93e5ddb
Comment out a label on an #endif.
Guido van Rossum <guido@python.org>
parents:
7979
diff
changeset
|
1136 #endif /* CHECK_IMPORT_CASE */ |
|
7290
72d531d54572
Add case checking feature on import.
Guido van Rossum <guido@python.org>
parents:
7232
diff
changeset
|
1137 |
|
6542
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1138 #ifdef HAVE_STAT |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1139 /* Helper to look for __init__.py or __init__.py[co] in potential package */ |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1140 static int |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1141 find_init_module(buf) |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1142 char *buf; |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1143 { |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1144 int save_len = strlen(buf); |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1145 int i = save_len; |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1146 struct stat statbuf; |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1147 |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1148 if (save_len + 13 >= MAXPATHLEN) |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1149 return 0; |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1150 buf[i++] = SEP; |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1151 strcpy(buf+i, "__init__.py"); |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1152 if (stat(buf, &statbuf) == 0) { |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1153 buf[save_len] = '\0'; |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1154 return 1; |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1155 } |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1156 i += strlen(buf+i); |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1157 if (Py_OptimizeFlag) |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1158 strcpy(buf+i, "o"); |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1159 else |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1160 strcpy(buf+i, "c"); |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1161 if (stat(buf, &statbuf) == 0) { |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1162 buf[save_len] = '\0'; |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1163 return 1; |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1164 } |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1165 buf[save_len] = '\0'; |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1166 return 0; |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1167 } |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1168 #endif /* HAVE_STAT */ |
|
62bdb1cbe0f5
New policy for package imports: only a directory containing
Guido van Rossum <guido@python.org>
parents:
6541
diff
changeset
|
1169 |
|
1410
315272ec4d5b
* import.c (get_module): total rewrite, to ensure proper search order: for
Guido van Rossum <guido@python.org>
parents:
1362
diff
changeset
|
1170 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1171 static int init_builtin Py_PROTO((char *)); /* Forward */ |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1172 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1173 /* Load an external module using the default search path and return |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
1174 its module object WITH INCREMENTED REFERENCE COUNT */ |
| 86 | 1175 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1176 static PyObject * |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1177 load_module(name, fp, buf, type) |
| 86 | 1178 char *name; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1179 FILE *fp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1180 char *buf; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1181 int type; |
| 86 | 1182 { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1183 PyObject *modules; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1184 PyObject *m; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1185 int err; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1186 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1187 /* First check that there's an open file (if we need one) */ |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1188 switch (type) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1189 case PY_SOURCE: |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1190 case PY_COMPILED: |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1191 if (fp == NULL) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1192 PyErr_Format(PyExc_ValueError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1193 "file object required for import (type code %d)", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1194 type); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1195 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1196 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1197 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1198 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1199 switch (type) { |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1200 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1201 case PY_SOURCE: |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1202 m = load_source_module(name, buf, fp); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1203 break; |
| 6 | 1204 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1205 case PY_COMPILED: |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1206 m = load_compiled_module(name, buf, fp); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1207 break; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1208 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1209 case C_EXTENSION: |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1210 m = _PyImport_LoadDynamicModule(name, buf, fp); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1211 break; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1212 |
|
2349
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
1213 #ifdef macintosh |
|
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
1214 case PY_RESOURCE: |
|
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
1215 m = PyMac_LoadResourceModule(name, buf); |
|
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
1216 break; |
|
8845
b933f584a26d
Added handling for Mac code resource modules (Jack Jansen).
Guido van Rossum <guido@python.org>
parents:
8822
diff
changeset
|
1217 case PY_CODERESOURCE: |
|
b933f584a26d
Added handling for Mac code resource modules (Jack Jansen).
Guido van Rossum <guido@python.org>
parents:
8822
diff
changeset
|
1218 m = PyMac_LoadCodeResourceModule(name, buf); |
|
b933f584a26d
Added handling for Mac code resource modules (Jack Jansen).
Guido van Rossum <guido@python.org>
parents:
8822
diff
changeset
|
1219 break; |
|
2349
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
1220 #endif |
|
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
1221 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1222 case PKG_DIRECTORY: |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1223 m = load_package(name, buf); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1224 break; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1225 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1226 case C_BUILTIN: |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1227 case PY_FROZEN: |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1228 if (buf != NULL && buf[0] != '\0') |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1229 name = buf; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1230 if (type == C_BUILTIN) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1231 err = init_builtin(name); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1232 else |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1233 err = PyImport_ImportFrozenModule(name); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1234 if (err < 0) |
|
6299
0054a3840a75
Crrected a flow control error that caused the wrong error message when
Guido van Rossum <guido@python.org>
parents:
6285
diff
changeset
|
1235 return NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1236 if (err == 0) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1237 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1238 "Purported %s module %.200s not found", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1239 type == C_BUILTIN ? |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1240 "builtin" : "frozen", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1241 name); |
|
6299
0054a3840a75
Crrected a flow control error that caused the wrong error message when
Guido van Rossum <guido@python.org>
parents:
6285
diff
changeset
|
1242 return NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1243 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1244 modules = PyImport_GetModuleDict(); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1245 m = PyDict_GetItemString(modules, name); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1246 if (m == NULL) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1247 PyErr_Format( |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1248 PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1249 "%s module %.200s not properly initialized", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1250 type == C_BUILTIN ? |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1251 "builtin" : "frozen", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1252 name); |
|
6299
0054a3840a75
Crrected a flow control error that caused the wrong error message when
Guido van Rossum <guido@python.org>
parents:
6285
diff
changeset
|
1253 return NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1254 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1255 Py_INCREF(m); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1256 break; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1257 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1258 default: |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1259 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1260 "Don't know how to import %.200s (type code %d)", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1261 name, type); |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
1262 m = NULL; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1263 |
|
141
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1264 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1265 |
| 6 | 1266 return m; |
| 1267 } | |
|
40
f28ac7f621c7
Added reload() functionality.
Guido van Rossum <guido@python.org>
parents:
6
diff
changeset
|
1268 |
| 86 | 1269 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1270 /* Initialize a built-in module. |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1271 Return 1 for succes, 0 if the module is not found, and -1 with |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1272 an exception set if the initialization failed. */ |
|
141
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1273 |
|
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1274 static int |
|
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1275 init_builtin(name) |
|
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1276 char *name; |
|
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1277 { |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1278 struct _inittab *p; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1279 PyObject *mod; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1280 |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1281 if ((mod = _PyImport_FindExtension(name, name)) != NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1282 return 1; |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1283 |
|
6541
b2dfff06789c
Instead of using _PyImport_Inittab[] directly, use the new "official"
Guido van Rossum <guido@python.org>
parents:
6454
diff
changeset
|
1284 for (p = PyImport_Inittab; p->name != NULL; p++) { |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1285 if (strcmp(name, p->name) == 0) { |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1286 if (p->initfunc == NULL) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1287 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1288 "Cannot re-init internal module %.200s", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1289 name); |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
1290 return -1; |
|
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
1291 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1292 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
1293 PySys_WriteStderr("import %s # builtin\n", name); |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1294 (*p->initfunc)(); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1295 if (PyErr_Occurred()) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1296 return -1; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1297 if (_PyImport_FixupExtension(name, name) == NULL) |
|
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1298 return -1; |
|
141
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1299 return 1; |
|
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1300 } |
|
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1301 } |
|
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1302 return 0; |
|
bf5a8539d8ba
Call the init function of a built-in module here.
Guido van Rossum <guido@python.org>
parents:
86
diff
changeset
|
1303 } |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
1304 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1305 |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1306 /* Frozen modules */ |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1307 |
|
3683
ec39264311ff
struct frozen is now struct _frozen and comes from import.h.
Guido van Rossum <guido@python.org>
parents:
3590
diff
changeset
|
1308 static struct _frozen * |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1309 find_frozen(name) |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1310 char *name; |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1311 { |
|
3683
ec39264311ff
struct frozen is now struct _frozen and comes from import.h.
Guido van Rossum <guido@python.org>
parents:
3590
diff
changeset
|
1312 struct _frozen *p; |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1313 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1314 for (p = PyImport_FrozenModules; ; p++) { |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1315 if (p->name == NULL) |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1316 return NULL; |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1317 if (strcmp(p->name, name) == 0) |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1318 break; |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1319 } |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1320 return p; |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1321 } |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1322 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1323 static PyObject * |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1324 get_frozen_object(name) |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1325 char *name; |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1326 { |
|
3683
ec39264311ff
struct frozen is now struct _frozen and comes from import.h.
Guido van Rossum <guido@python.org>
parents:
3590
diff
changeset
|
1327 struct _frozen *p = find_frozen(name); |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1328 int size; |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1329 |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1330 if (p == NULL) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1331 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1332 "No such frozen object named %.200s", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1333 name); |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1334 return NULL; |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1335 } |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1336 size = p->size; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1337 if (size < 0) |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1338 size = -size; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1339 return PyMarshal_ReadObjectFromString((char *)p->code, size); |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1340 } |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1341 |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1342 /* Initialize a frozen module. |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1343 Return 1 for succes, 0 if the module is not found, and -1 with |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1344 an exception set if the initialization failed. |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1345 This function is also used from frozenmain.c */ |
|
2294
6263e2fd9398
init_frozen non-static, frozenmain.c not in Makefile any more
Guido van Rossum <guido@python.org>
parents:
2270
diff
changeset
|
1346 |
|
6263e2fd9398
init_frozen non-static, frozenmain.c not in Makefile any more
Guido van Rossum <guido@python.org>
parents:
2270
diff
changeset
|
1347 int |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1348 PyImport_ImportFrozenModule(name) |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
1349 char *name; |
|
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
1350 { |
|
3683
ec39264311ff
struct frozen is now struct _frozen and comes from import.h.
Guido van Rossum <guido@python.org>
parents:
3590
diff
changeset
|
1351 struct _frozen *p = find_frozen(name); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1352 PyObject *co; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1353 PyObject *m; |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1354 int ispackage; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1355 int size; |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1356 |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1357 if (p == NULL) |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
1358 return 0; |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1359 size = p->size; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1360 ispackage = (size < 0); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1361 if (ispackage) |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1362 size = -size; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1363 if (Py_VerboseFlag) |
|
9329
7f242f29a45f
Replace fprintf(stderr, ...) with PySys_WriteStderr(...).
Guido van Rossum <guido@python.org>
parents:
9203
diff
changeset
|
1364 PySys_WriteStderr("import %s # frozen%s\n", |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1365 name, ispackage ? " package" : ""); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1366 co = PyMarshal_ReadObjectFromString((char *)p->code, size); |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
1367 if (co == NULL) |
|
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
1368 return -1; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1369 if (!PyCode_Check(co)) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1370 Py_DECREF(co); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1371 PyErr_Format(PyExc_TypeError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1372 "frozen object %.200s is not a code object", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1373 name); |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
1374 return -1; |
|
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
1375 } |
|
7552
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1376 if (ispackage) { |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1377 /* Set __path__ to the package name */ |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1378 PyObject *d, *s; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1379 int err; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1380 m = PyImport_AddModule(name); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1381 if (m == NULL) |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1382 return -1; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1383 d = PyModule_GetDict(m); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1384 s = PyString_InternFromString(name); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1385 if (s == NULL) |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1386 return -1; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1387 err = PyDict_SetItemString(d, "__path__", s); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1388 Py_DECREF(s); |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1389 if (err != 0) |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1390 return err; |
|
c8e5f704623d
Support for frozen packages, matching the revamped Tools/freeze.
Guido van Rossum <guido@python.org>
parents:
7535
diff
changeset
|
1391 } |
|
7232
74c57288a02b
Added PyImport_ExecCodeModuleEx(), which adds an extra parameter to
Guido van Rossum <guido@python.org>
parents:
7202
diff
changeset
|
1392 m = PyImport_ExecCodeModuleEx(name, co, "<frozen>"); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1393 Py_DECREF(co); |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
1394 if (m == NULL) |
|
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
1395 return -1; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1396 Py_DECREF(m); |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
1397 return 1; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1398 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1399 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1400 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1401 /* Import a module, either built-in, frozen, or external, and return |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
1402 its module object WITH INCREMENTED REFERENCE COUNT */ |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1403 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1404 PyObject * |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1405 PyImport_ImportModule(name) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1406 char *name; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1407 { |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1408 static PyObject *fromlist = NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1409 if (fromlist == NULL && strchr(name, '.') != NULL) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1410 fromlist = Py_BuildValue("[s]", "*"); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1411 if (fromlist == NULL) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1412 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1413 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1414 return PyImport_ImportModuleEx(name, NULL, NULL, fromlist); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1415 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1416 |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1417 /* Forward declarations for helper routines */ |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1418 static PyObject *get_parent Py_PROTO((PyObject *globals, |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1419 char *buf, int *p_buflen)); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1420 static PyObject *load_next Py_PROTO((PyObject *mod, PyObject *altmod, |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1421 char **p_name, char *buf, int *p_buflen)); |
|
6252
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
1422 static int mark_miss Py_PROTO((char *name)); |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1423 static int ensure_fromlist Py_PROTO((PyObject *mod, PyObject *fromlist, |
|
6285
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
1424 char *buf, int buflen, int recursive)); |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1425 static PyObject * import_submodule Py_PROTO((PyObject *mod, |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1426 char *name, char *fullname)); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1427 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1428 /* The Magnum Opus of dotted-name import :-) */ |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1429 |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
1430 static PyObject * |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
1431 import_module_ex(name, globals, locals, fromlist) |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1432 char *name; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1433 PyObject *globals; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1434 PyObject *locals; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1435 PyObject *fromlist; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1436 { |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1437 char buf[MAXPATHLEN+1]; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1438 int buflen = 0; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1439 PyObject *parent, *head, *next, *tail; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1440 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1441 parent = get_parent(globals, buf, &buflen); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1442 if (parent == NULL) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1443 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1444 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1445 head = load_next(parent, Py_None, &name, buf, &buflen); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1446 if (head == NULL) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1447 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1448 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1449 tail = head; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1450 Py_INCREF(tail); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1451 while (name) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1452 next = load_next(tail, tail, &name, buf, &buflen); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1453 Py_DECREF(tail); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1454 if (next == NULL) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1455 Py_DECREF(head); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1456 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1457 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1458 tail = next; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1459 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1460 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1461 if (fromlist != NULL) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1462 if (fromlist == Py_None || !PyObject_IsTrue(fromlist)) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1463 fromlist = NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1464 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1465 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1466 if (fromlist == NULL) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1467 Py_DECREF(tail); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1468 return head; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1469 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1470 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1471 Py_DECREF(head); |
|
6285
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
1472 if (!ensure_fromlist(tail, fromlist, buf, buflen, 0)) { |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1473 Py_DECREF(tail); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1474 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1475 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1476 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1477 return tail; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1478 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1479 |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
1480 PyObject * |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
1481 PyImport_ImportModuleEx(name, globals, locals, fromlist) |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
1482 char *name; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
1483 PyObject *globals; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
1484 PyObject *locals; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
1485 PyObject *fromlist; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
1486 { |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
1487 PyObject *result; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
1488 lock_import(); |
|
7535
13b60abdb70d
Oops -- overuse of dabbrev-expand introduced a strange bug, where
Guido van Rossum <guido@python.org>
parents:
7533
diff
changeset
|
1489 result = import_module_ex(name, globals, locals, fromlist); |
|
7533
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
1490 unlock_import(); |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
1491 return result; |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
1492 } |
|
ea8184bff12d
Add a single Python-wide (!) lock on import. Only one thread at a
Guido van Rossum <guido@python.org>
parents:
7403
diff
changeset
|
1493 |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1494 static PyObject * |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1495 get_parent(globals, buf, p_buflen) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1496 PyObject *globals; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1497 char *buf; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1498 int *p_buflen; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1499 { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1500 static PyObject *namestr = NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1501 static PyObject *pathstr = NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1502 PyObject *modname, *modpath, *modules, *parent; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1503 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1504 if (globals == NULL || !PyDict_Check(globals)) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1505 return Py_None; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1506 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1507 if (namestr == NULL) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1508 namestr = PyString_InternFromString("__name__"); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1509 if (namestr == NULL) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1510 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1511 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1512 if (pathstr == NULL) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1513 pathstr = PyString_InternFromString("__path__"); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1514 if (pathstr == NULL) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1515 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1516 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1517 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1518 *buf = '\0'; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1519 *p_buflen = 0; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1520 modname = PyDict_GetItem(globals, namestr); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1521 if (modname == NULL || !PyString_Check(modname)) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1522 return Py_None; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1523 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1524 modpath = PyDict_GetItem(globals, pathstr); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1525 if (modpath != NULL) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1526 int len = PyString_GET_SIZE(modname); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1527 if (len > MAXPATHLEN) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1528 PyErr_SetString(PyExc_ValueError, |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1529 "Module name too long"); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1530 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1531 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1532 strcpy(buf, PyString_AS_STRING(modname)); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1533 *p_buflen = len; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1534 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1535 else { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1536 char *start = PyString_AS_STRING(modname); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1537 char *lastdot = strrchr(start, '.'); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1538 int len; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1539 if (lastdot == NULL) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1540 return Py_None; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1541 len = lastdot - start; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1542 if (len >= MAXPATHLEN) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1543 PyErr_SetString(PyExc_ValueError, |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1544 "Module name too long"); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1545 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1546 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1547 strncpy(buf, start, len); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1548 buf[len] = '\0'; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1549 *p_buflen = len; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1550 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1551 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1552 modules = PyImport_GetModuleDict(); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1553 parent = PyDict_GetItemString(modules, buf); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1554 if (parent == NULL) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1555 parent = Py_None; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1556 return parent; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1557 /* We expect, but can't guarantee, if parent != None, that: |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1558 - parent.__name__ == buf |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1559 - parent.__dict__ is globals |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1560 If this is violated... Who cares? */ |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1561 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1562 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1563 static PyObject * |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1564 load_next(mod, altmod, p_name, buf, p_buflen) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1565 PyObject *mod; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1566 PyObject *altmod; /* Either None or same as mod */ |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1567 char **p_name; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1568 char *buf; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1569 int *p_buflen; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1570 { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1571 char *name = *p_name; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1572 char *dot = strchr(name, '.'); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1573 int len; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1574 char *p; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1575 PyObject *result; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1576 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1577 if (dot == NULL) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1578 *p_name = NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1579 len = strlen(name); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1580 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1581 else { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1582 *p_name = dot+1; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1583 len = dot-name; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1584 } |
|
8012
2b09a5d26368
Reject empty module names -- otherwise __import__("") does something
Guido van Rossum <guido@python.org>
parents:
7987
diff
changeset
|
1585 if (len == 0) { |
|
2b09a5d26368
Reject empty module names -- otherwise __import__("") does something
Guido van Rossum <guido@python.org>
parents:
7987
diff
changeset
|
1586 PyErr_SetString(PyExc_ValueError, |
|
2b09a5d26368
Reject empty module names -- otherwise __import__("") does something
Guido van Rossum <guido@python.org>
parents:
7987
diff
changeset
|
1587 "Empty module name"); |
|
2b09a5d26368
Reject empty module names -- otherwise __import__("") does something
Guido van Rossum <guido@python.org>
parents:
7987
diff
changeset
|
1588 return NULL; |
|
2b09a5d26368
Reject empty module names -- otherwise __import__("") does something
Guido van Rossum <guido@python.org>
parents:
7987
diff
changeset
|
1589 } |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1590 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1591 p = buf + *p_buflen; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1592 if (p != buf) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1593 *p++ = '.'; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1594 if (p+len-buf >= MAXPATHLEN) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1595 PyErr_SetString(PyExc_ValueError, |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1596 "Module name too long"); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1597 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1598 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1599 strncpy(p, name, len); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1600 p[len] = '\0'; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1601 *p_buflen = p+len-buf; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1602 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1603 result = import_submodule(mod, p, buf); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1604 if (result == Py_None && altmod != mod) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1605 Py_DECREF(result); |
|
6252
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
1606 /* Here, altmod must be None and mod must not be None */ |
|
6256
ce2092714484
Bugfix: import A.B from inside package was busted by mark_miss optimization.
Guido van Rossum <guido@python.org>
parents:
6252
diff
changeset
|
1607 result = import_submodule(altmod, p, p); |
|
6252
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
1608 if (result != NULL && result != Py_None) { |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
1609 if (mark_miss(buf) != 0) { |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
1610 Py_DECREF(result); |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
1611 return NULL; |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
1612 } |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
1613 strncpy(buf, name, len); |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
1614 buf[len] = '\0'; |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
1615 *p_buflen = len; |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
1616 } |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1617 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1618 if (result == NULL) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1619 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1620 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1621 if (result == Py_None) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1622 Py_DECREF(result); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1623 PyErr_Format(PyExc_ImportError, |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1624 "No module named %.200s", name); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1625 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1626 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1627 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1628 return result; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1629 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1630 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1631 static int |
|
6252
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
1632 mark_miss(name) |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
1633 char *name; |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
1634 { |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
1635 PyObject *modules = PyImport_GetModuleDict(); |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
1636 return PyDict_SetItemString(modules, name, Py_None); |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
1637 } |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
1638 |
|
6429db5d0af7
Significant speedup -- when a submodule imports a global module, add a
Guido van Rossum <guido@python.org>
parents:
6250
diff
changeset
|
1639 static int |
|
6285
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
1640 ensure_fromlist(mod, fromlist, buf, buflen, recursive) |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1641 PyObject *mod; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1642 PyObject *fromlist; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1643 char *buf; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1644 int buflen; |
|
6285
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
1645 int recursive; |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1646 { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1647 int i; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1648 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1649 if (!PyObject_HasAttrString(mod, "__path__")) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1650 return 1; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1651 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1652 for (i = 0; ; i++) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1653 PyObject *item = PySequence_GetItem(fromlist, i); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1654 int hasit; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1655 if (item == NULL) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1656 if (PyErr_ExceptionMatches(PyExc_IndexError)) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1657 PyErr_Clear(); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1658 return 1; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1659 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1660 return 0; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1661 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1662 if (!PyString_Check(item)) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1663 PyErr_SetString(PyExc_TypeError, |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1664 "Item in ``from list'' not a string"); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1665 Py_DECREF(item); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1666 return 0; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1667 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1668 if (PyString_AS_STRING(item)[0] == '*') { |
|
6285
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
1669 PyObject *all; |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1670 Py_DECREF(item); |
|
6285
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
1671 /* See if the package defines __all__ */ |
|
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
1672 if (recursive) |
|
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
1673 continue; /* Avoid endless recursion */ |
|
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
1674 all = PyObject_GetAttrString(mod, "__all__"); |
|
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
1675 if (all == NULL) |
|
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
1676 PyErr_Clear(); |
|
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
1677 else { |
|
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
1678 if (!ensure_fromlist(mod, all, buf, buflen, 1)) |
|
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
1679 return 0; |
|
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
1680 Py_DECREF(all); |
|
337054e9d4fa
Added support for __all__, which should be a list of modules to be
Guido van Rossum <guido@python.org>
parents:
6256
diff
changeset
|
1681 } |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1682 continue; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1683 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1684 hasit = PyObject_HasAttr(mod, item); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1685 if (!hasit) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1686 char *subname = PyString_AS_STRING(item); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1687 PyObject *submod; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1688 char *p; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1689 if (buflen + strlen(subname) >= MAXPATHLEN) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1690 PyErr_SetString(PyExc_ValueError, |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1691 "Module name too long"); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1692 Py_DECREF(item); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1693 return 0; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1694 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1695 p = buf + buflen; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1696 *p++ = '.'; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1697 strcpy(p, subname); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1698 submod = import_submodule(mod, subname, buf); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1699 Py_XDECREF(submod); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1700 if (submod == NULL) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1701 Py_DECREF(item); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1702 return 0; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1703 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1704 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1705 Py_DECREF(item); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1706 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1707 |
|
6375
b68185d94777
Remove unreachable "return 1" at end of ensure_fromlist().
Guido van Rossum <guido@python.org>
parents:
6305
diff
changeset
|
1708 /* NOTREACHED */ |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1709 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1710 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1711 static PyObject * |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1712 import_submodule(mod, subname, fullname) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1713 PyObject *mod; /* May be None */ |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1714 char *subname; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1715 char *fullname; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1716 { |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1717 PyObject *modules = PyImport_GetModuleDict(); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1718 PyObject *m; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1719 |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1720 /* Require: |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1721 if mod == None: subname == fullname |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1722 else: mod.__name__ + "." + subname == fullname |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1723 */ |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1724 |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1725 if ((m = PyDict_GetItemString(modules, fullname)) != NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1726 Py_INCREF(m); |
|
2198
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
1727 } |
|
27557e70a8f0
fix import related leaks
Guido van Rossum <guido@python.org>
parents:
2128
diff
changeset
|
1728 else { |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1729 PyObject *path; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1730 char buf[MAXPATHLEN+1]; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1731 struct filedescr *fdp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1732 FILE *fp = NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1733 |
|
8374
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
1734 if (mod == Py_None) |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
1735 path = NULL; |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
1736 else { |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
1737 path = PyObject_GetAttrString(mod, "__path__"); |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
1738 if (path == NULL) { |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
1739 PyErr_Clear(); |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
1740 Py_INCREF(Py_None); |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
1741 return Py_None; |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
1742 } |
|
a1bfe5bc6d8e
Fix a curious bug: statements like "import sys.time" would succeed,
Guido van Rossum <guido@python.org>
parents:
8330
diff
changeset
|
1743 } |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1744 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1745 buf[0] = '\0'; |
|
8613
e3d3bbbd93f3
Fix two smal memory leaks discovered by Vadim Chugunov.
Guido van Rossum <guido@python.org>
parents:
8544
diff
changeset
|
1746 fdp = find_module(subname, path, buf, MAXPATHLEN+1, &fp); |
|
e3d3bbbd93f3
Fix two smal memory leaks discovered by Vadim Chugunov.
Guido van Rossum <guido@python.org>
parents:
8544
diff
changeset
|
1747 Py_XDECREF(path); |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1748 if (fdp == NULL) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1749 if (!PyErr_ExceptionMatches(PyExc_ImportError)) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1750 return NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1751 PyErr_Clear(); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1752 Py_INCREF(Py_None); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1753 return Py_None; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1754 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1755 m = load_module(fullname, fp, buf, fdp->type); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1756 if (fp) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1757 fclose(fp); |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1758 if (m != NULL && mod != Py_None) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1759 if (PyObject_SetAttrString(mod, subname, m) < 0) { |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1760 Py_DECREF(m); |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1761 m = NULL; |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1762 } |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1763 } |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1764 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1765 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1766 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1767 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1768 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1769 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1770 /* Re-import a module of any kind and return its module object, WITH |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1771 INCREMENTED REFERENCE COUNT */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1772 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1773 PyObject * |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1774 PyImport_ReloadModule(m) |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1775 PyObject *m; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1776 { |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1777 PyObject *modules = PyImport_GetModuleDict(); |
|
6250
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1778 PyObject *path = NULL; |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1779 char *name, *subname; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1780 char buf[MAXPATHLEN+1]; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1781 struct filedescr *fdp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1782 FILE *fp = NULL; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1783 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1784 if (m == NULL || !PyModule_Check(m)) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1785 PyErr_SetString(PyExc_TypeError, |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1786 "reload() argument must be module"); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1787 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1788 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1789 name = PyModule_GetName(m); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1790 if (name == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1791 return NULL; |
|
5926
8d2194e22e67
The last of the mass checkins for separate (sub)interpreters.
Guido van Rossum <guido@python.org>
parents:
5894
diff
changeset
|
1792 if (m != PyDict_GetItemString(modules, name)) { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1793 PyErr_Format(PyExc_ImportError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1794 "reload(): module %.200s not in sys.modules", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1795 name); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1796 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1797 } |
|
6250
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1798 subname = strrchr(name, '.'); |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1799 if (subname == NULL) |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1800 subname = name; |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1801 else { |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1802 PyObject *parentname, *parent; |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1803 parentname = PyString_FromStringAndSize(name, (subname-name)); |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1804 if (parentname == NULL) |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1805 return NULL; |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1806 parent = PyDict_GetItem(modules, parentname); |
|
9971
0390af6acf7f
PyImport_ReloadModule(): Nailed a small memory leak. In the
Barry Warsaw <barry@python.org>
parents:
9680
diff
changeset
|
1807 Py_DECREF(parentname); |
|
6250
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1808 if (parent == NULL) { |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1809 PyErr_Format(PyExc_ImportError, |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1810 "reload(): parent %.200s not in sys.modules", |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1811 name); |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1812 return NULL; |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1813 } |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1814 subname++; |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1815 path = PyObject_GetAttrString(parent, "__path__"); |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1816 if (path == NULL) |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1817 PyErr_Clear(); |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1818 } |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1819 buf[0] = '\0'; |
|
6250
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1820 fdp = find_module(subname, path, buf, MAXPATHLEN+1, &fp); |
|
3fa4b7ae0e6b
Fix reload() for package submodules.
Guido van Rossum <guido@python.org>
parents:
6249
diff
changeset
|
1821 Py_XDECREF(path); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1822 if (fdp == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1823 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1824 m = load_module(name, fp, buf, fdp->type); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1825 if (fp) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1826 fclose(fp); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1827 return m; |
|
1270
14369a5e6167
Support for frozen scripts; added -i option.
Guido van Rossum <guido@python.org>
parents:
1262
diff
changeset
|
1828 } |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
1829 |
|
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
1830 |
|
6028
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1831 /* Higher-level import emulator which emulates the "import" statement |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1832 more accurately -- it invokes the __import__() function from the |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1833 builtins of the current globals. This means that the import is |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1834 done using whatever import hooks are installed in the current |
|
9680
8b61e1273b4b
Improve comment for PyImport_Import() as suggested by Bill Tutt.
Guido van Rossum <guido@python.org>
parents:
9679
diff
changeset
|
1835 environment, e.g. by "rexec". |
|
8b61e1273b4b
Improve comment for PyImport_Import() as suggested by Bill Tutt.
Guido van Rossum <guido@python.org>
parents:
9679
diff
changeset
|
1836 A dummy list ["__doc__"] is passed as the 4th argument so that |
|
8b61e1273b4b
Improve comment for PyImport_Import() as suggested by Bill Tutt.
Guido van Rossum <guido@python.org>
parents:
9679
diff
changeset
|
1837 e.g. PyImport_Import(PyString_FromString("win32com.client.gencache")) |
|
8b61e1273b4b
Improve comment for PyImport_Import() as suggested by Bill Tutt.
Guido van Rossum <guido@python.org>
parents:
9679
diff
changeset
|
1838 will return <module "gencache"> instead of <module "win32com">. */ |
|
6028
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1839 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1840 PyObject * |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1841 PyImport_Import(module_name) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1842 PyObject *module_name; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1843 { |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1844 static PyObject *silly_list = NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1845 static PyObject *builtins_str = NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1846 static PyObject *import_str = NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1847 static PyObject *standard_builtins = NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1848 PyObject *globals = NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1849 PyObject *import = NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1850 PyObject *builtins = NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1851 PyObject *r = NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1852 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1853 /* Initialize constant string objects */ |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1854 if (silly_list == NULL) { |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1855 import_str = PyString_InternFromString("__import__"); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1856 if (import_str == NULL) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1857 return NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1858 builtins_str = PyString_InternFromString("__builtins__"); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1859 if (builtins_str == NULL) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1860 return NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1861 silly_list = Py_BuildValue("[s]", "__doc__"); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1862 if (silly_list == NULL) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1863 return NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1864 } |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1865 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1866 /* Get the builtins from current globals */ |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1867 globals = PyEval_GetGlobals(); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1868 if(globals != NULL) { |
| 9431 | 1869 Py_INCREF(globals); |
|
6028
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1870 builtins = PyObject_GetItem(globals, builtins_str); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1871 if (builtins == NULL) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1872 goto err; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1873 } |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1874 else { |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1875 /* No globals -- use standard builtins, and fake globals */ |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1876 PyErr_Clear(); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1877 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1878 if (standard_builtins == NULL) { |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1879 standard_builtins = |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1880 PyImport_ImportModule("__builtin__"); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1881 if (standard_builtins == NULL) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1882 return NULL; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1883 } |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1884 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1885 builtins = standard_builtins; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1886 Py_INCREF(builtins); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1887 globals = Py_BuildValue("{OO}", builtins_str, builtins); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1888 if (globals == NULL) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1889 goto err; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1890 } |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1891 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1892 /* Get the __import__ function from the builtins */ |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1893 if (PyDict_Check(builtins)) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1894 import=PyObject_GetItem(builtins, import_str); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1895 else |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1896 import=PyObject_GetAttr(builtins, import_str); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1897 if (import == NULL) |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1898 goto err; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1899 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1900 /* Call the _import__ function with the proper argument list */ |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1901 r = PyObject_CallFunction(import, "OOOO", |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1902 module_name, globals, globals, silly_list); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1903 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1904 err: |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1905 Py_XDECREF(globals); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1906 Py_XDECREF(builtins); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1907 Py_XDECREF(import); |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1908 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1909 return r; |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1910 } |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1911 |
|
292193170da1
Added Jim Fulton's PyImport_Import(), which calls whatever
Guido van Rossum <guido@python.org>
parents:
5980
diff
changeset
|
1912 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1913 /* Module 'imp' provides Python access to the primitives used for |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1914 importing modules. |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1915 */ |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
1916 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1917 static PyObject * |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1918 imp_get_magic(self, args) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1919 PyObject *self; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1920 PyObject *args; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1921 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1922 char buf[4]; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1923 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1924 if (!PyArg_ParseTuple(args, "")) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1925 return NULL; |
|
5317
c72c7e1930b3
Keep gcc -Wall and Microsoft VC happy.
Guido van Rossum <guido@python.org>
parents:
5180
diff
changeset
|
1926 buf[0] = (char) ((MAGIC >> 0) & 0xff); |
|
c72c7e1930b3
Keep gcc -Wall and Microsoft VC happy.
Guido van Rossum <guido@python.org>
parents:
5180
diff
changeset
|
1927 buf[1] = (char) ((MAGIC >> 8) & 0xff); |
|
c72c7e1930b3
Keep gcc -Wall and Microsoft VC happy.
Guido van Rossum <guido@python.org>
parents:
5180
diff
changeset
|
1928 buf[2] = (char) ((MAGIC >> 16) & 0xff); |
|
c72c7e1930b3
Keep gcc -Wall and Microsoft VC happy.
Guido van Rossum <guido@python.org>
parents:
5180
diff
changeset
|
1929 buf[3] = (char) ((MAGIC >> 24) & 0xff); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1930 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1931 return PyString_FromStringAndSize(buf, 4); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1932 } |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
1933 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1934 static PyObject * |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1935 imp_get_suffixes(self, args) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1936 PyObject *self; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1937 PyObject *args; |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
1938 { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1939 PyObject *list; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1940 struct filedescr *fdp; |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
1941 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1942 if (!PyArg_ParseTuple(args, "")) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1943 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1944 list = PyList_New(0); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1945 if (list == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1946 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1947 for (fdp = _PyImport_Filetab; fdp->suffix != NULL; fdp++) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1948 PyObject *item = Py_BuildValue("ssi", |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1949 fdp->suffix, fdp->mode, fdp->type); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1950 if (item == NULL) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1951 Py_DECREF(list); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1952 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1953 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1954 if (PyList_Append(list, item) < 0) { |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1955 Py_DECREF(list); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1956 Py_DECREF(item); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1957 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1958 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1959 Py_DECREF(item); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1960 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1961 return list; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1962 } |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
1963 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
1964 static PyObject * |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1965 call_find_module(name, path) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1966 char *name; |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1967 PyObject *path; /* list or None or NULL */ |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1968 { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1969 extern int fclose Py_PROTO((FILE *)); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1970 PyObject *fob, *ret; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1971 struct filedescr *fdp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1972 char pathname[MAXPATHLEN+1]; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1973 FILE *fp = NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1974 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1975 pathname[0] = '\0'; |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1976 if (path == Py_None) |
|
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
1977 path = NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1978 fdp = find_module(name, path, pathname, MAXPATHLEN+1, &fp); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1979 if (fdp == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1980 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1981 if (fp != NULL) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1982 fob = PyFile_FromFile(fp, pathname, fdp->mode, fclose); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1983 if (fob == NULL) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1984 fclose(fp); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1985 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1986 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1987 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1988 else { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1989 fob = Py_None; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1990 Py_INCREF(fob); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1991 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1992 ret = Py_BuildValue("Os(ssi)", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1993 fob, pathname, fdp->suffix, fdp->mode, fdp->type); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1994 Py_DECREF(fob); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1995 return ret; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1996 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1997 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
1998 static PyObject * |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
1999 imp_find_module(self, args) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2000 PyObject *self; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2001 PyObject *args; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2002 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2003 char *name; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2004 PyObject *path = NULL; |
|
6249
f10aad73e029
Phase two of package import. "import a.b.c" and all variants now do the
Guido van Rossum <guido@python.org>
parents:
6243
diff
changeset
|
2005 if (!PyArg_ParseTuple(args, "s|O", &name, &path)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2006 return NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2007 return call_find_module(name, path); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2008 } |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2009 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2010 static PyObject * |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2011 imp_init_builtin(self, args) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2012 PyObject *self; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2013 PyObject *args; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2014 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2015 char *name; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2016 int ret; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2017 PyObject *m; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2018 if (!PyArg_ParseTuple(args, "s", &name)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2019 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2020 ret = init_builtin(name); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2021 if (ret < 0) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2022 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2023 if (ret == 0) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2024 Py_INCREF(Py_None); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2025 return Py_None; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2026 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2027 m = PyImport_AddModule(name); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2028 Py_XINCREF(m); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2029 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2030 } |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2031 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2032 static PyObject * |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2033 imp_init_frozen(self, args) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2034 PyObject *self; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2035 PyObject *args; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2036 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2037 char *name; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2038 int ret; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2039 PyObject *m; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2040 if (!PyArg_ParseTuple(args, "s", &name)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2041 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2042 ret = PyImport_ImportFrozenModule(name); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2043 if (ret < 0) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2044 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2045 if (ret == 0) { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2046 Py_INCREF(Py_None); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2047 return Py_None; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2048 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2049 m = PyImport_AddModule(name); |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2050 Py_XINCREF(m); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2051 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2052 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2053 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2054 static PyObject * |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
2055 imp_get_frozen_object(self, args) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2056 PyObject *self; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2057 PyObject *args; |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
2058 { |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
2059 char *name; |
| 3139 | 2060 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2061 if (!PyArg_ParseTuple(args, "s", &name)) |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
2062 return NULL; |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
2063 return get_frozen_object(name); |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
2064 } |
|
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
2065 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2066 static PyObject * |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2067 imp_is_builtin(self, args) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2068 PyObject *self; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2069 PyObject *args; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2070 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2071 char *name; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2072 if (!PyArg_ParseTuple(args, "s", &name)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2073 return NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2074 return PyInt_FromLong(is_builtin(name)); |
|
1844
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2075 } |
|
d1e6c9a64a56
* Python/import.c: support *.o/*.so as alternative for
Guido van Rossum <guido@python.org>
parents:
1415
diff
changeset
|
2076 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2077 static PyObject * |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2078 imp_is_frozen(self, args) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2079 PyObject *self; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2080 PyObject *args; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2081 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2082 char *name; |
|
8544
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
2083 struct _frozen *p; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2084 if (!PyArg_ParseTuple(args, "s", &name)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2085 return NULL; |
|
8544
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
2086 p = find_frozen(name); |
|
35a2151fb1c3
Ignore Windows case check for ALL CAPS 8.3 files
Guido van Rossum <guido@python.org>
parents:
8374
diff
changeset
|
2087 return PyInt_FromLong((long) (p == NULL ? 0 : p->size)); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2088 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2089 |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2090 static FILE * |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2091 get_file(pathname, fob, mode) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2092 char *pathname; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2093 PyObject *fob; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2094 char *mode; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2095 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2096 FILE *fp; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2097 if (fob == NULL) { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2098 fp = fopen(pathname, mode); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2099 if (fp == NULL) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2100 PyErr_SetFromErrno(PyExc_IOError); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2101 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2102 else { |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2103 fp = PyFile_AsFile(fob); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2104 if (fp == NULL) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2105 PyErr_SetString(PyExc_ValueError, |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2106 "bad/closed file object"); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2107 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2108 return fp; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2109 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2110 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2111 static PyObject * |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2112 imp_load_compiled(self, args) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2113 PyObject *self; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2114 PyObject *args; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2115 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2116 char *name; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2117 char *pathname; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2118 PyObject *fob = NULL; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2119 PyObject *m; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2120 FILE *fp; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2121 if (!PyArg_ParseTuple(args, "ss|O!", &name, &pathname, |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2122 &PyFile_Type, &fob)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2123 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2124 fp = get_file(pathname, fob, "rb"); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2125 if (fp == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2126 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2127 m = load_compiled_module(name, pathname, fp); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2128 if (fob == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2129 fclose(fp); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2130 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2131 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2132 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2133 static PyObject * |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2134 imp_load_dynamic(self, args) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2135 PyObject *self; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2136 PyObject *args; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2137 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2138 char *name; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2139 char *pathname; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2140 PyObject *fob = NULL; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2141 PyObject *m; |
|
2812
fb3daf9b2456
new MAGIC; some changes to default files for imp.load_... functions
Guido van Rossum <guido@python.org>
parents:
2749
diff
changeset
|
2142 FILE *fp = NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2143 if (!PyArg_ParseTuple(args, "ss|O!", &name, &pathname, |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2144 &PyFile_Type, &fob)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2145 return NULL; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2146 if (fob) { |
|
2812
fb3daf9b2456
new MAGIC; some changes to default files for imp.load_... functions
Guido van Rossum <guido@python.org>
parents:
2749
diff
changeset
|
2147 fp = get_file(pathname, fob, "r"); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2148 if (fp == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2149 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2150 } |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2151 m = _PyImport_LoadDynamicModule(name, pathname, fp); |
|
2812
fb3daf9b2456
new MAGIC; some changes to default files for imp.load_... functions
Guido van Rossum <guido@python.org>
parents:
2749
diff
changeset
|
2152 return m; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2153 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2154 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2155 static PyObject * |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2156 imp_load_source(self, args) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2157 PyObject *self; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2158 PyObject *args; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2159 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2160 char *name; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2161 char *pathname; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2162 PyObject *fob = NULL; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2163 PyObject *m; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2164 FILE *fp; |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2165 if (!PyArg_ParseTuple(args, "ss|O!", &name, &pathname, |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2166 &PyFile_Type, &fob)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2167 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2168 fp = get_file(pathname, fob, "r"); |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2169 if (fp == NULL) |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2170 return NULL; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2171 m = load_source_module(name, pathname, fp); |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2172 if (fob == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2173 fclose(fp); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2174 return m; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2175 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2176 |
|
2349
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
2177 #ifdef macintosh |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2178 static PyObject * |
|
2349
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
2179 imp_load_resource(self, args) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2180 PyObject *self; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2181 PyObject *args; |
|
2349
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
2182 { |
|
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
2183 char *name; |
|
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
2184 char *pathname; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2185 PyObject *m; |
|
2349
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
2186 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2187 if (!PyArg_ParseTuple(args, "ss", &name, &pathname)) |
|
2349
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
2188 return NULL; |
|
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
2189 m = PyMac_LoadResourceModule(name, pathname); |
|
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
2190 return m; |
|
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
2191 } |
|
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
2192 #endif /* macintosh */ |
|
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
2193 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2194 static PyObject * |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2195 imp_load_module(self, args) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2196 PyObject *self; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2197 PyObject *args; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2198 { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2199 char *name; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2200 PyObject *fob; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2201 char *pathname; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2202 char *suffix; /* Unused */ |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2203 char *mode; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2204 int type; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2205 FILE *fp; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2206 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2207 if (!PyArg_ParseTuple(args, "sOs(ssi)", |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2208 &name, &fob, &pathname, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2209 &suffix, &mode, &type)) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2210 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2211 if (*mode && (*mode != 'r' || strchr(mode, '+') != NULL)) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2212 PyErr_Format(PyExc_ValueError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2213 "invalid file open mode %.200s", mode); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2214 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2215 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2216 if (fob == Py_None) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2217 fp = NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2218 else { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2219 if (!PyFile_Check(fob)) { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2220 PyErr_SetString(PyExc_ValueError, |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2221 "load_module arg#2 should be a file or None"); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2222 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2223 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2224 fp = get_file(pathname, fob, mode); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2225 if (fp == NULL) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2226 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2227 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2228 return load_module(name, fp, pathname, type); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2229 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2230 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2231 static PyObject * |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2232 imp_load_package(self, args) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2233 PyObject *self; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2234 PyObject *args; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2235 { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2236 char *name; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2237 char *pathname; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2238 if (!PyArg_ParseTuple(args, "ss", &name, &pathname)) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2239 return NULL; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2240 return load_package(name, pathname); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2241 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2242 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2243 static PyObject * |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2244 imp_new_module(self, args) |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2245 PyObject *self; |
|
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2246 PyObject *args; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2247 { |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2248 char *name; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2249 if (!PyArg_ParseTuple(args, "s", &name)) |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2250 return NULL; |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2251 return PyModule_New(name); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2252 } |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2253 |
|
6305
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2254 /* Doc strings */ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2255 |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2256 static char doc_imp[] = "\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2257 This module provides the components needed to build your own\n\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2258 __import__ function. Undocumented functions are obsolete.\n\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2259 "; |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2260 |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2261 static char doc_find_module[] = "\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2262 find_module(name, [path]) -> (file, filename, (suffix, mode, type))\n\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2263 Search for a module. If path is omitted or None, search for a\n\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2264 built-in, frozen or special module and continue search in sys.path.\n\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2265 The module name cannot contain '.'; to search for a submodule of a\n\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2266 package, pass the submodule name and the package's __path__.\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2267 "; |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2268 |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2269 static char doc_load_module[] = "\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2270 load_module(name, file, filename, (suffix, mode, type)) -> module\n\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2271 Load a module, given information returned by find_module().\n\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2272 The module name must include the full package name, if any.\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2273 "; |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2274 |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2275 static char doc_get_magic[] = "\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2276 get_magic() -> string\n\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2277 Return the magic number for .pyc or .pyo files.\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2278 "; |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2279 |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2280 static char doc_get_suffixes[] = "\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2281 get_suffixes() -> [(suffix, mode, type), ...]\n\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2282 Return a list of (suffix, mode, type) tuples describing the files\n\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2283 that find_module() looks for.\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2284 "; |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2285 |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2286 static char doc_new_module[] = "\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2287 new_module(name) -> module\n\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2288 Create a new module. Do not enter it in sys.modules.\n\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2289 The module name must include the full package name, if any.\ |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2290 "; |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2291 |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2292 static PyMethodDef imp_methods[] = { |
|
6305
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2293 {"find_module", imp_find_module, 1, doc_find_module}, |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2294 {"get_magic", imp_get_magic, 1, doc_get_magic}, |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2295 {"get_suffixes", imp_get_suffixes, 1, doc_get_suffixes}, |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2296 {"load_module", imp_load_module, 1, doc_load_module}, |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2297 {"new_module", imp_new_module, 1, doc_new_module}, |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2298 /* The rest are obsolete */ |
|
2891
964d76f49a5e
add imp.get_frozen_object()
Guido van Rossum <guido@python.org>
parents:
2868
diff
changeset
|
2299 {"get_frozen_object", imp_get_frozen_object, 1}, |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2300 {"init_builtin", imp_init_builtin, 1}, |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2301 {"init_frozen", imp_init_frozen, 1}, |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2302 {"is_builtin", imp_is_builtin, 1}, |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2303 {"is_frozen", imp_is_frozen, 1}, |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2304 {"load_compiled", imp_load_compiled, 1}, |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2305 {"load_dynamic", imp_load_dynamic, 1}, |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2306 {"load_package", imp_load_package, 1}, |
|
2349
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
2307 #ifdef macintosh |
|
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
2308 {"load_resource", imp_load_resource, 1}, |
|
d65c485e0ad8
Added hooks to support importing pyc code from a resource on the mac.
Jack Jansen <jack.jansen@cwi.nl>
parents:
2294
diff
changeset
|
2309 #endif |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2310 {"load_source", imp_load_source, 1}, |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2311 {NULL, NULL} /* sentinel */ |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2312 }; |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2313 |
|
8822
bd47ee068b83
Changes for BeOS, QNX and long long, by Chris Herborth.
Guido van Rossum <guido@python.org>
parents:
8613
diff
changeset
|
2314 static int |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2315 setint(d, name, value) |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2316 PyObject *d; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2317 char *name; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2318 int value; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2319 { |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2320 PyObject *v; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2321 int err; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2322 |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2323 v = PyInt_FromLong((long)value); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2324 err = PyDict_SetItemString(d, name, v); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2325 Py_XDECREF(v); |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2326 return err; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2327 } |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2328 |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2329 void |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2330 initimp() |
|
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2331 { |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2332 PyObject *m, *d; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2333 |
|
6305
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2334 m = Py_InitModule4("imp", imp_methods, doc_imp, |
|
6e1fa76e7940
Added docstrings. Not for the obsolete functions though.
Guido van Rossum <guido@python.org>
parents:
6304
diff
changeset
|
2335 NULL, PYTHON_API_VERSION); |
|
5373
5880384d7c71
Quickly renamed the remaining files -- this directory is done.
Guido van Rossum <guido@python.org>
parents:
5317
diff
changeset
|
2336 d = PyModule_GetDict(m); |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2337 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2338 if (setint(d, "SEARCH_ERROR", SEARCH_ERROR) < 0) goto failure; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2339 if (setint(d, "PY_SOURCE", PY_SOURCE) < 0) goto failure; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2340 if (setint(d, "PY_COMPILED", PY_COMPILED) < 0) goto failure; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2341 if (setint(d, "C_EXTENSION", C_EXTENSION) < 0) goto failure; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2342 if (setint(d, "PY_RESOURCE", PY_RESOURCE) < 0) goto failure; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2343 if (setint(d, "PKG_DIRECTORY", PKG_DIRECTORY) < 0) goto failure; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2344 if (setint(d, "C_BUILTIN", C_BUILTIN) < 0) goto failure; |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2345 if (setint(d, "PY_FROZEN", PY_FROZEN) < 0) goto failure; |
|
8845
b933f584a26d
Added handling for Mac code resource modules (Jack Jansen).
Guido van Rossum <guido@python.org>
parents:
8822
diff
changeset
|
2346 if (setint(d, "PY_CODERESOURCE", PY_CODERESOURCE) < 0) goto failure; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2347 |
|
6243
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2348 failure: |
|
4279f4eb210a
First part of package support.
Guido van Rossum <guido@python.org>
parents:
6055
diff
changeset
|
2349 ; |
|
2052
d7e91437f0a2
Lots of changes, most minor (fatal() instead of abort(), use of
Guido van Rossum <guido@python.org>
parents:
2040
diff
changeset
|
2350 } |
|
8330
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2351 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2352 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2353 /* API for embedding applications that want to add their own entries to the |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2354 table of built-in modules. This should normally be called *before* |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2355 Py_Initialize(). When the malloc() or realloc() call fails, -1 is returned |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2356 and the existing table is unchanged. |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2357 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2358 After a similar function by Just van Rossum. */ |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2359 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2360 int |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2361 PyImport_ExtendInittab(newtab) |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2362 struct _inittab *newtab; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2363 { |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2364 static struct _inittab *our_copy = NULL; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2365 struct _inittab *p; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2366 int i, n; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2367 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2368 /* Count the number of entries in both tables */ |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2369 for (n = 0; newtab[n].name != NULL; n++) |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2370 ; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2371 if (n == 0) |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2372 return 0; /* Nothing to do */ |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2373 for (i = 0; PyImport_Inittab[i].name != NULL; i++) |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2374 ; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2375 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2376 /* Allocate new memory for the combined table */ |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2377 if (our_copy == NULL) |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2378 p = malloc((i+n+1) * sizeof(struct _inittab)); |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2379 else |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2380 p = realloc(our_copy, (i+n+1) * sizeof(struct _inittab)); |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2381 if (p == NULL) |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2382 return -1; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2383 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2384 /* Copy the tables into the new memory */ |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2385 if (our_copy != PyImport_Inittab) |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2386 memcpy(p, PyImport_Inittab, (i+1) * sizeof(struct _inittab)); |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2387 PyImport_Inittab = our_copy = p; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2388 memcpy(p+i, newtab, (n+1) * sizeof(struct _inittab)); |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2389 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2390 return 0; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2391 } |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2392 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2393 /* Shorthand to add a single entry given a name and a function */ |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2394 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2395 int |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2396 PyImport_AppendInittab(name, initfunc) |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2397 char *name; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2398 void (*initfunc)(); |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2399 { |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2400 struct _inittab newtab[2]; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2401 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2402 memset(newtab, '\0', sizeof newtab); |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2403 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2404 newtab[0].name = name; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2405 newtab[0].initfunc = initfunc; |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2406 |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2407 return PyImport_ExtendInittab(newtab); |
|
7a1e7da922f8
New APIs for embedding applications that want to add their own entries
Guido van Rossum <guido@python.org>
parents:
8012
diff
changeset
|
2408 } |
