Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
e2d81cd4
Kaydet (Commit)
e2d81cd4
authored
Agu 08, 1998
tarafından
Guido van Rossum
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Jim Fulton's patches to get rid of the class_map().
üst
1a87be14
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
27 additions
and
73 deletions
+27
-73
cPickle.c
Modules/cPickle.c
+27
-73
No files found.
Modules/cPickle.c
Dosyayı görüntüle @
e2d81cd4
/*
/*
cPickle.c,v 1.
48 1997/12/07 14:37:39
jim Exp
cPickle.c,v 1.
53 1998/05/05 15:41:31
jim Exp
Copyright
Copyright
Copyright 1996
Digital Creations, L.C., 910 Princess Anne
Copyright 1996
, 1997, 1998 Digital Creations, Inc., 910
Street, Suite 300, Fredericksburg, Virginia 22401 U.S.A. All
Princess Anne Street, Suite 300, Fredericksburg, Virginia 22401
rights reserved. Copyright in this software is owned by DCLC,
U.S.A. All rights reserved. Copyright in this software is
unless otherwise indicated. Permission to use, copy and
owned by DCLC, unless otherwise indicated. Permission to use,
distribute this software is hereby granted, provided that the
copy and distribute this software is hereby granted, provided
above copyright notice appear in all copies and that both
that
that the above copyright notice appear in all copies and
that
copyright notice and this permission notice appear. Note that
both that copyright notice and this permission notice
a
ny product, process or technology described in this software
a
ppear. Note that any product, process or technology described
may be the subject of other Intellectual Property rights
in this software may be the subject of other Intellectual
reserved by Digital Creations, L.C. and are not licensed
Property rights reserved by Digital Creations, L.C. and are not
hereunder.
licensed
hereunder.
Trademarks
Trademarks
...
@@ -55,7 +55,7 @@
...
@@ -55,7 +55,7 @@
static
char
cPickle_module_documentation
[]
=
static
char
cPickle_module_documentation
[]
=
"C implementation and optimization of the Python pickle module
\n
"
"C implementation and optimization of the Python pickle module
\n
"
"
\n
"
"
\n
"
"cPickle.c,v 1.
48 1997/12/07 14:37:39
jim Exp
\n
"
"cPickle.c,v 1.
53 1998/05/05 15:41:31
jim Exp
\n
"
;
;
#include "Python.h"
#include "Python.h"
...
@@ -126,7 +126,6 @@ static PyObject *UnpicklingError;
...
@@ -126,7 +126,6 @@ static PyObject *UnpicklingError;
static
PyObject
*
dispatch_table
;
static
PyObject
*
dispatch_table
;
static
PyObject
*
safe_constructors
;
static
PyObject
*
safe_constructors
;
static
PyObject
*
class_map
;
static
PyObject
*
empty_tuple
;
static
PyObject
*
empty_tuple
;
static
PyObject
*
__class___str
,
*
__getinitargs___str
,
*
__dict___str
,
static
PyObject
*
__class___str
,
*
__getinitargs___str
,
*
__dict___str
,
...
@@ -152,7 +151,6 @@ typedef struct {
...
@@ -152,7 +151,6 @@ typedef struct {
char
*
write_buf
;
char
*
write_buf
;
int
buf_size
;
int
buf_size
;
PyObject
*
dispatch_table
;
PyObject
*
dispatch_table
;
PyObject
*
class_map
;
}
Picklerobject
;
}
Picklerobject
;
staticforward
PyTypeObject
Picklertype
;
staticforward
PyTypeObject
Picklertype
;
...
@@ -177,7 +175,6 @@ typedef struct {
...
@@ -177,7 +175,6 @@ typedef struct {
int
buf_size
;
int
buf_size
;
char
*
buf
;
char
*
buf
;
PyObject
*
safe_constructors
;
PyObject
*
safe_constructors
;
PyObject
*
class_map
;
}
Unpicklerobject
;
}
Unpicklerobject
;
staticforward
PyTypeObject
Unpicklertype
;
staticforward
PyTypeObject
Unpicklertype
;
...
@@ -669,7 +666,7 @@ err:
...
@@ -669,7 +666,7 @@ err:
}
}
static
PyObject
*
static
PyObject
*
whichmodule
(
PyObject
*
class_map
,
PyObject
*
global
,
PyObject
*
global_name
)
{
whichmodule
(
PyObject
*
global
,
PyObject
*
global_name
)
{
int
i
,
j
;
int
i
,
j
;
PyObject
*
module
=
0
,
*
modules_dict
=
0
,
PyObject
*
module
=
0
,
*
modules_dict
=
0
,
*
global_name_attr
=
0
,
*
name
=
0
;
*
global_name_attr
=
0
,
*
name
=
0
;
...
@@ -678,11 +675,6 @@ whichmodule(PyObject *class_map, PyObject *global, PyObject *global_name) {
...
@@ -678,11 +675,6 @@ whichmodule(PyObject *class_map, PyObject *global, PyObject *global_name) {
if
(
module
)
return
module
;
if
(
module
)
return
module
;
PyErr_Clear
();
PyErr_Clear
();
if
((
module
=
PyDict_GetItem
(
class_map
,
global
)))
{
Py_INCREF
(
module
);
return
module
;
}
UNLESS
(
modules_dict
=
PySys_GetObject
(
"modules"
))
{
UNLESS
(
modules_dict
=
PySys_GetObject
(
"modules"
))
{
PyErr_SetString
(
PyExc_SystemError
,
"lost sys.modules"
);
PyErr_SetString
(
PyExc_SystemError
,
"lost sys.modules"
);
return
NULL
;
return
NULL
;
...
@@ -716,16 +708,6 @@ whichmodule(PyObject *class_map, PyObject *global, PyObject *global_name) {
...
@@ -716,16 +708,6 @@ whichmodule(PyObject *class_map, PyObject *global, PyObject *global_name) {
j
=
1
;
j
=
1
;
name
=
__main___str
;
name
=
__main___str
;
}
}
/*
if (!j) {
cPickle_ErrFormat(PicklingError, "Could not find module for %s.",
"O", global_name);
return NULL;
}
*/
PyDict_SetItem
(
class_map
,
global
,
name
);
Py_INCREF
(
name
);
Py_INCREF
(
name
);
return
name
;
return
name
;
...
@@ -1249,7 +1231,7 @@ save_inst(Picklerobject *self, PyObject *args) {
...
@@ -1249,7 +1231,7 @@ save_inst(Picklerobject *self, PyObject *args) {
goto
finally
;
goto
finally
;
}
}
UNLESS
(
module
=
whichmodule
(
self
->
class_map
,
class
,
name
))
UNLESS
(
module
=
whichmodule
(
class
,
name
))
goto
finally
;
goto
finally
;
module_str
=
PyString_AS_STRING
((
PyStringObject
*
)
module
);
module_str
=
PyString_AS_STRING
((
PyStringObject
*
)
module
);
...
@@ -1336,7 +1318,7 @@ save_global(Picklerobject *self, PyObject *args, PyObject *name) {
...
@@ -1336,7 +1318,7 @@ save_global(Picklerobject *self, PyObject *args, PyObject *name) {
goto
finally
;
goto
finally
;
}
}
UNLESS
(
module
=
whichmodule
(
self
->
class_map
,
args
,
global_name
))
UNLESS
(
module
=
whichmodule
(
args
,
global_name
))
goto
finally
;
goto
finally
;
module_str
=
PyString_AS_STRING
((
PyStringObject
*
)
module
);
module_str
=
PyString_AS_STRING
((
PyStringObject
*
)
module
);
...
@@ -1781,7 +1763,6 @@ newPicklerobject(PyObject *file, int bin) {
...
@@ -1781,7 +1763,6 @@ newPicklerobject(PyObject *file, int bin) {
self
->
write_buf
=
NULL
;
self
->
write_buf
=
NULL
;
self
->
bin
=
bin
;
self
->
bin
=
bin
;
self
->
buf_size
=
0
;
self
->
buf_size
=
0
;
self
->
class_map
=
NULL
;
self
->
dispatch_table
=
NULL
;
self
->
dispatch_table
=
NULL
;
Py_INCREF
(
file
);
Py_INCREF
(
file
);
...
@@ -1823,15 +1804,12 @@ newPicklerobject(PyObject *file, int bin) {
...
@@ -1823,15 +1804,12 @@ newPicklerobject(PyObject *file, int bin) {
/* Restricted execution, get private tables */
/* Restricted execution, get private tables */
PyObject
*
m
;
PyObject
*
m
;
UNLESS
(
self
->
class_map
=
PyDict_New
())
goto
err
;
UNLESS
(
m
=
PyImport_Import
(
copy_reg_str
))
goto
err
;
UNLESS
(
m
=
PyImport_Import
(
copy_reg_str
))
goto
err
;
self
->
dispatch_table
=
PyObject_GetAttr
(
m
,
dispatch_table_str
);
self
->
dispatch_table
=
PyObject_GetAttr
(
m
,
dispatch_table_str
);
Py_DECREF
(
m
);
Py_DECREF
(
m
);
UNLESS
(
self
->
dispatch_table
)
goto
err
;
UNLESS
(
self
->
dispatch_table
)
goto
err
;
}
}
else
{
else
{
self
->
class_map
=
class_map
;
Py_INCREF
(
class_map
);
self
->
dispatch_table
=
dispatch_table
;
self
->
dispatch_table
=
dispatch_table
;
Py_INCREF
(
dispatch_table
);
Py_INCREF
(
dispatch_table
);
}
}
...
@@ -1862,7 +1840,6 @@ Pickler_dealloc(Picklerobject *self) {
...
@@ -1862,7 +1840,6 @@ Pickler_dealloc(Picklerobject *self) {
Py_XDECREF
(
self
->
file
);
Py_XDECREF
(
self
->
file
);
Py_XDECREF
(
self
->
pers_func
);
Py_XDECREF
(
self
->
pers_func
);
Py_XDECREF
(
self
->
inst_pers_func
);
Py_XDECREF
(
self
->
inst_pers_func
);
Py_XDECREF
(
self
->
class_map
);
Py_XDECREF
(
self
->
dispatch_table
);
Py_XDECREF
(
self
->
dispatch_table
);
if
(
self
->
write_buf
)
{
if
(
self
->
write_buf
)
{
...
@@ -1955,34 +1932,17 @@ static PyTypeObject Picklertype = {
...
@@ -1955,34 +1932,17 @@ static PyTypeObject Picklertype = {
};
};
static
PyObject
*
static
PyObject
*
find_class
(
PyObject
*
class_map
,
find_class
(
PyObject
*
py_module_name
,
PyObject
*
py_global_name
)
{
PyObject
*
py_module_name
,
PyObject
*
py_global_name
)
{
PyObject
*
global
=
0
,
*
module
;
PyObject
*
global
=
0
,
*
t
=
0
,
*
module
;
UNLESS
(
t
=
PyTuple_New
(
2
))
return
NULL
;
UNLESS
(
module
=
PySys_GetObject
(
"modules"
))
return
NULL
;
UNLESS
(
module
=
PyDict_GetItem
(
module
,
py_module_name
))
{
PyTuple_SET_ITEM
((
PyTupleObject
*
)
t
,
0
,
py_module_name
);
PyErr_Clear
();
Py_INCREF
(
py_module_name
);
UNLESS
(
module
=
PyImport_Import
(
py_module_name
))
return
NULL
;
PyTuple_SET_ITEM
((
PyTupleObject
*
)
t
,
1
,
py_global_name
);
Py_INCREF
(
py_global_name
);
global
=
PyDict_GetItem
(
class_map
,
t
);
if
(
global
)
{
Py_DECREF
(
t
);
Py_INCREF
(
global
);
return
global
;
}
}
PyErr_Clear
();
UNLESS
(
module
=
PyImport_Import
(
py_module_name
))
return
NULL
;
global
=
PyObject_GetAttr
(
module
,
py_global_name
);
global
=
PyObject_GetAttr
(
module
,
py_global_name
);
Py_DECREF
(
module
);
Py_DECREF
(
module
);
UNLESS
(
global
)
return
NULL
;
if
(
PyDict_SetItem
(
class_map
,
t
,
global
)
<
0
)
global
=
NULL
;
Py_DECREF
(
t
);
return
global
;
return
global
;
}
}
...
@@ -2566,7 +2526,8 @@ Instance_New(PyObject *cls, PyObject *args) {
...
@@ -2566,7 +2526,8 @@ Instance_New(PyObject *cls, PyObject *args) {
if
(
!
has_key
)
if
(
!
has_key
)
if
(
!
(
safe
=
PyObject_GetAttr
(
cls
,
__safe_for_unpickling___str
))
||
if
(
!
(
safe
=
PyObject_GetAttr
(
cls
,
__safe_for_unpickling___str
))
||
!
PyObject_IsTrue
(
safe
))
{
!
PyObject_IsTrue
(
safe
))
{
cPickle_ErrFormat
(
UnpicklingError
,
"%s is not safe for unpickling"
,
"O"
,
cls
);
cPickle_ErrFormat
(
UnpicklingError
,
"%s is not safe for unpickling"
,
"O"
,
cls
);
Py_XDECREF
(
safe
);
Py_XDECREF
(
safe
);
return
NULL
;
return
NULL
;
}
}
...
@@ -2666,7 +2627,7 @@ load_inst(Unpicklerobject *self) {
...
@@ -2666,7 +2627,7 @@ load_inst(Unpicklerobject *self) {
UNLESS
(
class_name
=
PyString_FromStringAndSize
(
s
,
len
-
1
))
goto
finally
;
UNLESS
(
class_name
=
PyString_FromStringAndSize
(
s
,
len
-
1
))
goto
finally
;
UNLESS
(
class
=
find_class
(
self
->
class_map
,
module_name
,
class_name
))
UNLESS
(
class
=
find_class
(
module_name
,
class_name
))
goto
finally
;
goto
finally
;
UNLESS
(
obj
=
Instance_New
(
class
,
arg_tup
))
goto
finally
;
UNLESS
(
obj
=
Instance_New
(
class
,
arg_tup
))
goto
finally
;
...
@@ -2705,7 +2666,7 @@ load_global(Unpicklerobject *self) {
...
@@ -2705,7 +2666,7 @@ load_global(Unpicklerobject *self) {
UNLESS
(
class_name
=
PyString_FromStringAndSize
(
s
,
len
-
1
))
UNLESS
(
class_name
=
PyString_FromStringAndSize
(
s
,
len
-
1
))
goto
finally
;
goto
finally
;
UNLESS
(
class
=
find_class
(
self
->
class_map
,
module_name
,
class_name
))
UNLESS
(
class
=
find_class
(
module_name
,
class_name
))
goto
finally
;
goto
finally
;
if
(
PyList_Append
(
self
->
stack
,
class
)
<
0
)
if
(
PyList_Append
(
self
->
stack
,
class
)
<
0
)
...
@@ -3908,7 +3869,6 @@ newUnpicklerobject(PyObject *f) {
...
@@ -3908,7 +3869,6 @@ newUnpicklerobject(PyObject *f) {
self
->
buf_size
=
0
;
self
->
buf_size
=
0
;
self
->
read
=
NULL
;
self
->
read
=
NULL
;
self
->
readline
=
NULL
;
self
->
readline
=
NULL
;
self
->
class_map
=
NULL
;
UNLESS
(
self
->
memo
=
PyDict_New
())
{
UNLESS
(
self
->
memo
=
PyDict_New
())
{
Py_XDECREF
((
PyObject
*
)
self
);
Py_XDECREF
((
PyObject
*
)
self
);
...
@@ -3948,15 +3908,12 @@ newUnpicklerobject(PyObject *f) {
...
@@ -3948,15 +3908,12 @@ newUnpicklerobject(PyObject *f) {
/* Restricted execution, get private tables */
/* Restricted execution, get private tables */
PyObject
*
m
;
PyObject
*
m
;
UNLESS
(
self
->
class_map
=
PyDict_New
())
goto
err
;
UNLESS
(
m
=
PyImport_Import
(
copy_reg_str
))
goto
err
;
UNLESS
(
m
=
PyImport_Import
(
copy_reg_str
))
goto
err
;
self
->
safe_constructors
=
PyObject_GetAttr
(
m
,
safe_constructors_str
);
self
->
safe_constructors
=
PyObject_GetAttr
(
m
,
safe_constructors_str
);
Py_DECREF
(
m
);
Py_DECREF
(
m
);
UNLESS
(
self
->
safe_constructors
)
goto
err
;
UNLESS
(
self
->
safe_constructors
)
goto
err
;
}
}
else
{
else
{
self
->
class_map
=
class_map
;
Py_INCREF
(
class_map
);
self
->
safe_constructors
=
safe_constructors
;
self
->
safe_constructors
=
safe_constructors
;
Py_INCREF
(
safe_constructors
);
Py_INCREF
(
safe_constructors
);
}
}
...
@@ -3989,7 +3946,6 @@ Unpickler_dealloc(Unpicklerobject *self) {
...
@@ -3989,7 +3946,6 @@ Unpickler_dealloc(Unpicklerobject *self) {
Py_XDECREF
(
self
->
pers_func
);
Py_XDECREF
(
self
->
pers_func
);
Py_XDECREF
(
self
->
arg
);
Py_XDECREF
(
self
->
arg
);
Py_XDECREF
(
self
->
last_string
);
Py_XDECREF
(
self
->
last_string
);
Py_XDECREF
(
self
->
class_map
);
Py_XDECREF
(
self
->
safe_constructors
);
Py_XDECREF
(
self
->
safe_constructors
);
if
(
self
->
marks
)
{
if
(
self
->
marks
)
{
...
@@ -4271,8 +4227,6 @@ init_stuff(PyObject *module, PyObject *module_dict) {
...
@@ -4271,8 +4227,6 @@ init_stuff(PyObject *module, PyObject *module_dict) {
Py_DECREF
(
copy_reg
);
Py_DECREF
(
copy_reg
);
UNLESS
(
class_map
=
PyDict_New
())
return
-
1
;
/* Down to here ********************************** */
/* Down to here ********************************** */
UNLESS
(
string
=
PyImport_ImportModule
(
"string"
))
UNLESS
(
string
=
PyImport_ImportModule
(
"string"
))
...
@@ -4308,7 +4262,7 @@ init_stuff(PyObject *module, PyObject *module_dict) {
...
@@ -4308,7 +4262,7 @@ init_stuff(PyObject *module, PyObject *module_dict) {
void
void
initcPickle
()
{
initcPickle
()
{
PyObject
*
m
,
*
d
,
*
v
;
PyObject
*
m
,
*
d
,
*
v
;
char
*
rev
=
"1.
48
"
;
char
*
rev
=
"1.
53
"
;
PyObject
*
format_version
;
PyObject
*
format_version
;
PyObject
*
compatible_formats
;
PyObject
*
compatible_formats
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment