Mercurial > cpython-lru_cache-weakref
annotate Python/dynload_next.c @ 87690:66c1c9f32567 default tip
Add use_weakref option to functools.lru_cache
The use_weakref option makes lru_cache create weak references to the function
arguments when creating the cache key, which prevents them from staying in the
memory forever even after all other references to them are gone.
This is a proof of concept for http://bugs.python.org/issue19859
| author | Radomir Dopieralski <devel@sheep.art.pl> |
|---|---|
| date | Tue, 03 Dec 2013 16:02:48 +0100 |
| parents | 257cbd2fac38 |
| children |
| rev | line source |
|---|---|
|
11599
78fe87ce0ded
The old platform-specific contents of importdl.c, broken down into one
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
1 |
|
21860
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
2 /* Support for dynamic loading of extension modules on Mac OS X |
|
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
3 ** All references to "NeXT" are for historical reasons. |
|
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
4 */ |
|
11599
78fe87ce0ded
The old platform-specific contents of importdl.c, broken down into one
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
5 |
|
78fe87ce0ded
The old platform-specific contents of importdl.c, broken down into one
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
6 #include "Python.h" |
|
78fe87ce0ded
The old platform-specific contents of importdl.c, broken down into one
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
7 #include "importdl.h" |
|
78fe87ce0ded
The old platform-specific contents of importdl.c, broken down into one
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
8 |
|
78fe87ce0ded
The old platform-specific contents of importdl.c, broken down into one
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
9 #include <mach-o/dyld.h> |
|
78fe87ce0ded
The old platform-specific contents of importdl.c, broken down into one
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
10 |
|
76754
257cbd2fac38
Issue #13959: Re-implement imp.get_suffixes() in Lib/imp.py.
Brett Cannon <brett@python.org>
parents:
75059
diff
changeset
|
11 const char *_PyImport_DynLoadFiletab[] = {".so", NULL}; |
|
11599
78fe87ce0ded
The old platform-specific contents of importdl.c, broken down into one
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
12 |
|
21860
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
13 /* |
|
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
14 ** Python modules are Mach-O MH_BUNDLE files. The best way to load these |
|
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
15 ** is each in a private namespace, so you can load, say, a module bar and a |
|
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
16 ** module foo.bar. If we load everything in the global namespace the two |
|
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
17 ** initbar() symbols will conflict. |
|
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
18 ** However, it seems some extension packages depend upon being able to access |
|
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
19 ** each others' global symbols. There seems to be no way to eat our cake and |
|
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
20 ** have it, so the USE_DYLD_GLOBAL_NAMESPACE define determines which behaviour |
|
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
21 ** you get. |
|
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
22 */ |
|
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
23 |
|
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
24 #ifdef USE_DYLD_GLOBAL_NAMESPACE |
|
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
25 #define LINKOPTIONS NSLINKMODULE_OPTION_BINDNOW|NSLINKMODULE_OPTION_RETURN_ON_ERROR |
|
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
26 #else |
|
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
27 #define LINKOPTIONS NSLINKMODULE_OPTION_BINDNOW| \ |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
28 NSLINKMODULE_OPTION_RETURN_ON_ERROR|NSLINKMODULE_OPTION_PRIVATE |
|
21860
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
29 #endif |
|
68108
0874698b1201
Issue #3080: Remove unused argument of _PyImport_GetDynLoadFunc()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61466
diff
changeset
|
30 dl_funcptr _PyImport_GetDynLoadFunc(const char *shortname, |
|
0874698b1201
Issue #3080: Remove unused argument of _PyImport_GetDynLoadFunc()
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61466
diff
changeset
|
31 const char *pathname, FILE *fp) |
|
11599
78fe87ce0ded
The old platform-specific contents of importdl.c, broken down into one
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
32 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
33 dl_funcptr p = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
34 char funcname[258]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
35 NSObjectFileImageReturnCode rc; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
36 NSObjectFileImage image; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
37 NSModule newModule; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
38 NSSymbol theSym; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
39 const char *errString; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
40 char errBuf[512]; |
|
11618
528559a0b2f2
Cleanup patches from Greg Stein:
Guido van Rossum <guido@python.org>
parents:
11599
diff
changeset
|
41 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
42 PyOS_snprintf(funcname, sizeof(funcname), "_PyInit_%.200s", shortname); |
|
11599
78fe87ce0ded
The old platform-specific contents of importdl.c, broken down into one
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
43 |
|
21860
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
44 #ifdef USE_DYLD_GLOBAL_NAMESPACE |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
45 if (NSIsSymbolNameDefined(funcname)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
46 theSym = NSLookupAndBindSymbol(funcname); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
47 p = (dl_funcptr)NSAddressOfSymbol(theSym); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
48 return p; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
49 } |
|
21860
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
50 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
51 rc = NSCreateObjectFileImageFromFile(pathname, &image); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
52 switch(rc) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
53 default: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
54 case NSObjectFileImageFailure: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
55 case NSObjectFileImageFormat: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
56 /* for these a message is printed on stderr by dyld */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
57 errString = "Can't create object file image"; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
58 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
59 case NSObjectFileImageSuccess: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
60 errString = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
61 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
62 case NSObjectFileImageInappropriateFile: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
63 errString = "Inappropriate file type for dynamic loading"; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
64 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
65 case NSObjectFileImageArch: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
66 errString = "Wrong CPU type in object file"; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
67 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
68 case NSObjectFileImageAccess: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
69 errString = "Can't read object file (no access)"; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
70 break; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
71 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
72 if (errString == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
73 newModule = NSLinkModule(image, pathname, LINKOPTIONS); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
74 if (newModule == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
75 int errNo; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
76 const char *fileName, *moreErrorStr; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
77 NSLinkEditErrors c; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
78 NSLinkEditError( &c, &errNo, &fileName, &moreErrorStr ); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
79 PyOS_snprintf(errBuf, 512, "Failure linking new module: %s: %s", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
80 fileName, moreErrorStr); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
81 errString = errBuf; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
82 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
83 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
84 if (errString != NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
85 PyErr_SetString(PyExc_ImportError, errString); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
86 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
87 } |
|
21860
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
88 #ifdef USE_DYLD_GLOBAL_NAMESPACE |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
89 if (!NSIsSymbolNameDefined(funcname)) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
90 /* UnlinkModule() isn't implemented in current versions, but calling it does no harm */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
91 /* NSUnLinkModule(newModule, FALSE); removed: causes problems for ObjC code */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
92 PyErr_Format(PyExc_ImportError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
93 "Loaded module does not contain symbol %.200s", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
94 funcname); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
95 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
96 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
97 theSym = NSLookupAndBindSymbol(funcname); |
|
21860
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
98 #else |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
99 theSym = NSLookupSymbolInModule(newModule, funcname); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
100 if ( theSym == NULL ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
101 /* NSUnLinkModule(newModule, FALSE); removed: causes problems for ObjC code */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
102 PyErr_Format(PyExc_ImportError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
103 "Loaded module does not contain symbol %.200s", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
104 funcname); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
105 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
106 } |
|
21860
20bc4ff1215c
A new dynload_next, which actually only works on OSX but isn't renamed yet.
Jack Jansen <jack.jansen@cwi.nl>
parents:
21276
diff
changeset
|
107 #endif |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
108 p = (dl_funcptr)NSAddressOfSymbol(theSym); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
47580
diff
changeset
|
109 return p; |
|
11599
78fe87ce0ded
The old platform-specific contents of importdl.c, broken down into one
Guido van Rossum <guido@python.org>
parents:
diff
changeset
|
110 } |
