Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
e8122f19
Commit
e8122f19
authored
May 05, 1991
by
Guido van Rossum
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Renamed class methods to instance methods (which they are)
parent
d4905454
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
64 additions
and
64 deletions
+64
-64
Objects/classobject.c
Objects/classobject.c
+59
-59
Python/ceval.c
Python/ceval.c
+5
-5
No files found.
Objects/classobject.c
View file @
e8122f19
...
...
@@ -111,59 +111,59 @@ typeobject Classtype = {
typedef
struct
{
OB_HEAD
classobject
*
cm
_class
;
/* The class object */
object
*
cm
_attr
;
/* A dictionary */
classobject
*
in
_class
;
/* The class object */
object
*
in
_attr
;
/* A dictionary */
}
instanceobject
;
object
*
newinstanceobject
(
class
)
register
object
*
class
;
{
register
instanceobject
*
cm
;
register
instanceobject
*
inst
;
if
(
!
is_classobject
(
class
))
{
err_badcall
();
return
NULL
;
}
cm
=
NEWOBJ
(
instanceobject
,
&
Instancetype
);
if
(
cm
==
NULL
)
inst
=
NEWOBJ
(
instanceobject
,
&
Instancetype
);
if
(
inst
==
NULL
)
return
NULL
;
INCREF
(
class
);
cm
->
cm
_class
=
(
classobject
*
)
class
;
cm
->
cm
_attr
=
newdictobject
();
if
(
cm
->
cm
_attr
==
NULL
)
{
DECREF
(
cm
);
inst
->
in
_class
=
(
classobject
*
)
class
;
inst
->
in
_attr
=
newdictobject
();
if
(
inst
->
in
_attr
==
NULL
)
{
DECREF
(
inst
);
return
NULL
;
}
return
(
object
*
)
cm
;
return
(
object
*
)
inst
;
}
/* Instance methods */
static
void
instance_dealloc
(
cm
)
register
instanceobject
*
cm
;
instance_dealloc
(
inst
)
register
instanceobject
*
inst
;
{
DECREF
(
cm
->
cm
_class
);
if
(
cm
->
cm
_attr
!=
NULL
)
DECREF
(
cm
->
cm
_attr
);
free
((
ANY
*
)
cm
);
DECREF
(
inst
->
in
_class
);
if
(
inst
->
in
_attr
!=
NULL
)
DECREF
(
inst
->
in
_attr
);
free
((
ANY
*
)
inst
);
}
static
object
*
instance_getattr
(
cm
,
name
)
register
instanceobject
*
cm
;
instance_getattr
(
inst
,
name
)
register
instanceobject
*
inst
;
register
char
*
name
;
{
register
object
*
v
=
dictlookup
(
cm
->
cm
_attr
,
name
);
register
object
*
v
=
dictlookup
(
inst
->
in
_attr
,
name
);
if
(
v
!=
NULL
)
{
INCREF
(
v
);
return
v
;
}
v
=
class_getattr
(
cm
->
cm
_class
,
name
);
v
=
class_getattr
(
inst
->
in
_class
,
name
);
if
(
v
==
NULL
)
return
v
;
/* class_getattr() has set the error */
if
(
is_funcobject
(
v
))
{
object
*
w
=
new
classmethodobject
(
v
,
(
object
*
)
cm
);
object
*
w
=
new
instancemethodobject
(
v
,
(
object
*
)
inst
);
DECREF
(
v
);
return
w
;
}
...
...
@@ -173,15 +173,15 @@ instance_getattr(cm, name)
}
static
int
instance_setattr
(
cm
,
name
,
v
)
instanceobject
*
cm
;
instance_setattr
(
inst
,
name
,
v
)
instanceobject
*
inst
;
char
*
name
;
object
*
v
;
{
if
(
v
==
NULL
)
return
dictremove
(
cm
->
cm
_attr
,
name
);
return
dictremove
(
inst
->
in
_attr
,
name
);
else
return
dictinsert
(
cm
->
cm
_attr
,
name
,
v
);
return
dictinsert
(
inst
->
in
_attr
,
name
,
v
);
}
typeobject
Instancetype
=
{
...
...
@@ -207,88 +207,88 @@ typeobject Instancetype = {
typedef
struct
{
OB_HEAD
object
*
c
m_func
;
/* The method function */
object
*
c
m_self
;
/* The object to which this applies */
}
class
methodobject
;
object
*
i
m_func
;
/* The method function */
object
*
i
m_self
;
/* The object to which this applies */
}
instance
methodobject
;
object
*
new
class
methodobject
(
func
,
self
)
new
instance
methodobject
(
func
,
self
)
object
*
func
;
object
*
self
;
{
register
classmethodobject
*
c
m
;
register
instancemethodobject
*
i
m
;
if
(
!
is_funcobject
(
func
))
{
err_badcall
();
return
NULL
;
}
cm
=
NEWOBJ
(
classmethodobject
,
&
Class
methodtype
);
if
(
c
m
==
NULL
)
im
=
NEWOBJ
(
instancemethodobject
,
&
Instance
methodtype
);
if
(
i
m
==
NULL
)
return
NULL
;
INCREF
(
func
);
cm
->
c
m_func
=
func
;
im
->
i
m_func
=
func
;
INCREF
(
self
);
cm
->
c
m_self
=
self
;
return
(
object
*
)
c
m
;
im
->
i
m_self
=
self
;
return
(
object
*
)
i
m
;
}
object
*
classmethodgetfunc
(
c
m
)
register
object
*
c
m
;
instancemethodgetfunc
(
i
m
)
register
object
*
i
m
;
{
if
(
!
is_
classmethodobject
(
c
m
))
{
if
(
!
is_
instancemethodobject
(
i
m
))
{
err_badcall
();
return
NULL
;
}
return
((
classmethodobject
*
)
cm
)
->
c
m_func
;
return
((
instancemethodobject
*
)
im
)
->
i
m_func
;
}
object
*
classmethodgetself
(
c
m
)
register
object
*
c
m
;
instancemethodgetself
(
i
m
)
register
object
*
i
m
;
{
if
(
!
is_
classmethodobject
(
c
m
))
{
if
(
!
is_
instancemethodobject
(
i
m
))
{
err_badcall
();
return
NULL
;
}
return
((
classmethodobject
*
)
cm
)
->
c
m_self
;
return
((
instancemethodobject
*
)
im
)
->
i
m_self
;
}
/* Class method methods */
#define OFF(x) offsetof(
class
methodobject, x)
#define OFF(x) offsetof(
instance
methodobject, x)
static
struct
memberlist
class
method_memberlist
[]
=
{
{
"
cm_func"
,
T_OBJECT
,
OFF
(
c
m_func
)},
{
"
cm_self"
,
T_OBJECT
,
OFF
(
c
m_self
)},
static
struct
memberlist
instance
method_memberlist
[]
=
{
{
"
im_func"
,
T_OBJECT
,
OFF
(
i
m_func
)},
{
"
im_self"
,
T_OBJECT
,
OFF
(
i
m_self
)},
{
NULL
}
/* Sentinel */
};
static
object
*
classmethod_getattr
(
c
m
,
name
)
register
classmethodobject
*
c
m
;
instancemethod_getattr
(
i
m
,
name
)
register
instancemethodobject
*
i
m
;
char
*
name
;
{
return
getmember
((
char
*
)
cm
,
class
method_memberlist
,
name
);
return
getmember
((
char
*
)
im
,
instance
method_memberlist
,
name
);
}
static
void
classmethod_dealloc
(
c
m
)
register
classmethodobject
*
c
m
;
instancemethod_dealloc
(
i
m
)
register
instancemethodobject
*
i
m
;
{
DECREF
(
cm
->
c
m_func
);
DECREF
(
cm
->
c
m_self
);
free
((
ANY
*
)
c
m
);
DECREF
(
im
->
i
m_func
);
DECREF
(
im
->
i
m_self
);
free
((
ANY
*
)
i
m
);
}
typeobject
Class
methodtype
=
{
typeobject
Instance
methodtype
=
{
OB_HEAD_INIT
(
&
Typetype
)
0
,
"instance method"
,
sizeof
(
class
methodobject
),
sizeof
(
instance
methodobject
),
0
,
class
method_dealloc
,
/*tp_dealloc*/
instance
method_dealloc
,
/*tp_dealloc*/
0
,
/*tp_print*/
class
method_getattr
,
/*tp_getattr*/
instance
method_getattr
,
/*tp_getattr*/
0
,
/*tp_setattr*/
0
,
/*tp_compare*/
0
,
/*tp_repr*/
...
...
Python/ceval.c
View file @
e8122f19
...
...
@@ -266,7 +266,7 @@ eval_code(co, globals, locals, arg)
case
UNARY_CALL
:
v
=
POP
();
if
(
is_
class
methodobject
(
v
)
||
is_funcobject
(
v
))
if
(
is_
instance
methodobject
(
v
)
||
is_funcobject
(
v
))
x
=
call_function
(
v
,
(
object
*
)
NULL
);
else
x
=
call_builtin
(
v
,
(
object
*
)
NULL
);
...
...
@@ -331,7 +331,7 @@ eval_code(co, globals, locals, arg)
case
BINARY_CALL
:
w
=
POP
();
v
=
POP
();
if
(
is_
class
methodobject
(
v
)
||
is_funcobject
(
v
))
if
(
is_
instance
methodobject
(
v
)
||
is_funcobject
(
v
))
x
=
call_function
(
v
,
w
);
else
x
=
call_builtin
(
v
,
w
);
...
...
@@ -1134,9 +1134,9 @@ call_function(func, arg)
object
*
newlocals
,
*
newglobals
;
object
*
co
,
*
v
;
if
(
is_
class
methodobject
(
func
))
{
object
*
self
=
class
methodgetself
(
func
);
func
=
class
methodgetfunc
(
func
);
if
(
is_
instance
methodobject
(
func
))
{
object
*
self
=
instance
methodgetself
(
func
);
func
=
instance
methodgetfunc
(
func
);
if
(
arg
==
NULL
)
{
arg
=
self
;
}
...
...
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