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
f3e3949d
Commit
f3e3949d
authored
Jul 02, 2008
by
Amaury Forgeot d'Arc
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Oops, forgot that there are modules outside the win32 world.
parent
a68ce21d
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
47 additions
and
0 deletions
+47
-0
Include/methodobject.h
Include/methodobject.h
+10
-0
Objects/methodobject.c
Objects/methodobject.c
+37
-0
No files found.
Include/methodobject.h
View file @
f3e3949d
...
...
@@ -43,6 +43,8 @@ struct PyMethodDef {
};
typedef
struct
PyMethodDef
PyMethodDef
;
PyAPI_FUNC
(
PyObject
*
)
Py_FindMethod
(
PyMethodDef
[],
PyObject
*
,
const
char
*
);
#define PyCFunction_New(ML, SELF) PyCFunction_NewEx((ML), (SELF), NULL)
PyAPI_FUNC
(
PyObject
*
)
PyCFunction_NewEx
(
PyMethodDef
*
,
PyObject
*
,
PyObject
*
);
...
...
@@ -68,6 +70,14 @@ PyAPI_FUNC(PyObject *) PyCFunction_NewEx(PyMethodDef *, PyObject *,
#define METH_COEXIST 0x0040
typedef
struct
PyMethodChain
{
PyMethodDef
*
methods
;
/* Methods of this type */
struct
PyMethodChain
*
link
;
/* NULL or base type */
}
PyMethodChain
;
PyAPI_FUNC
(
PyObject
*
)
Py_FindMethodInChain
(
PyMethodChain
*
,
PyObject
*
,
const
char
*
);
typedef
struct
{
PyObject_HEAD
PyMethodDef
*
m_ml
;
/* Description of the C function to call */
...
...
Objects/methodobject.c
View file @
f3e3949d
...
...
@@ -280,6 +280,43 @@ PyTypeObject PyCFunction_Type = {
0
,
/* tp_dict */
};
/* Find a method in a method chain */
PyObject
*
Py_FindMethodInChain
(
PyMethodChain
*
chain
,
PyObject
*
self
,
const
char
*
name
)
{
if
(
name
[
0
]
==
'_'
&&
name
[
1
]
==
'_'
)
{
if
(
strcmp
(
name
,
"__doc__"
)
==
0
)
{
const
char
*
doc
=
self
->
ob_type
->
tp_doc
;
if
(
doc
!=
NULL
)
return
PyUnicode_FromString
(
doc
);
}
}
while
(
chain
!=
NULL
)
{
PyMethodDef
*
ml
=
chain
->
methods
;
for
(;
ml
->
ml_name
!=
NULL
;
ml
++
)
{
if
(
name
[
0
]
==
ml
->
ml_name
[
0
]
&&
strcmp
(
name
+
1
,
ml
->
ml_name
+
1
)
==
0
)
/* XXX */
return
PyCFunction_New
(
ml
,
self
);
}
chain
=
chain
->
link
;
}
PyErr_SetString
(
PyExc_AttributeError
,
name
);
return
NULL
;
}
/* Find a method in a single method list */
PyObject
*
Py_FindMethod
(
PyMethodDef
*
methods
,
PyObject
*
self
,
const
char
*
name
)
{
PyMethodChain
chain
;
chain
.
methods
=
methods
;
chain
.
link
=
NULL
;
return
Py_FindMethodInChain
(
&
chain
,
self
,
name
);
}
/* Clear out the free list */
int
...
...
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