Home
About
Blog
Products
Forum
Support
Contact
Sunbelt Computer Software
PL/B Language Development and Support
Home
About
Blog
Products
Forum
Support
Contact
cpython/Include/cpython/abstract.h at main · python/cpython · GitHub
Skip to content
Navigation Menu
Sign in
Appearance settings
Platform
AI CODE CREATION
GitHub Copilot
Write better code with AI
GitHub Copilot app
Direct agents from issue to merge
MCP Registry
Integrate external tools
DEVELOPER WORKFLOWS
Actions
Automate any workflow
Codespaces
Instant dev environments
Issues
Plan and track work
Code Review
Manage code changes
Code Quality
Enforce quality at merge
APPLICATION SECURITY
GitHub Advanced Security
Find and fix vulnerabilities
Code security
Secure your code as you build
Secret protection
Stop leaks before they start
EXPLORE
Why GitHub
Documentation
Blog
Changelog
Marketplace
View all features
Solutions
BY COMPANY SIZE
Enterprises
Small and medium teams
Startups
Nonprofits
BY USE CASE
App Modernization
DevSecOps
DevOps
CI/CD
View all use cases
BY INDUSTRY
Healthcare
Financial services
Manufacturing
Government
View all industries
View all solutions
Resources
EXPLORE BY TOPIC
AI
Software Development
DevOps
Security
View all topics
EXPLORE BY TYPE
Customer stories
Events & webinars
Ebooks & reports
Business insights
GitHub Skills
SUPPORT & SERVICES
Documentation
Customer support
Community forum
Trust center
Partners
View all resources
Open Source
COMMUNITY
GitHub Sponsors
Fund open source developers
PROGRAMS
Security Lab
Maintainer Community
GitHub Stars
Archive Program
REPOSITORIES
Topics
Trending
Collections
Enterprise
ENTERPRISE SOLUTIONS
Enterprise platform
AI-powered developer platform
AVAILABLE ADD-ONS
GitHub Advanced Security
Enterprise-grade security features
Copilot for Business
Enterprise-grade AI features
Premium Support
Enterprise-grade 24/7 support
Pricing
Search
/
Sign in
Sign up
Appearance settings
You signed in with another tab or window.
Reload
to refresh your session.
You signed out in another tab or window.
Reload
to refresh your session.
You switched accounts on another tab or window.
Reload
to refresh your session.
Dismiss alert
{{ message }}
Uh oh!
There was an error while loading.
Please reload this page
.
python
/
cpython
Public
Uh oh!
There was an error while loading.
Please reload this page
.
Notifications
You must be signed in to change notification settings
Fork
35.4k
Star
77.1k
Code
Issues
5k+
Pull requests
2.6k
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Security and quality
Insights
Files
Expand file tree
main
Breadcrumbs
cpython
/
Include
/
cpython
/
abstract.h
Copy path
Blame
More file actions
Blame
More file actions
Latest commit
History
History
History
104 lines (83 loc) · 4.04 KB
main
Breadcrumbs
cpython
/
Include
/
cpython
/
abstract.h
Copy path
Top
File metadata and controls
Code
Blame
104 lines (83 loc) · 4.04 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#ifndef
Py_CPYTHON_ABSTRACTOBJECT_H
# error
"this header file must not be included directly"
#endif
/* === Object Protocol ================================================== */
/* Like PyObject_CallMethod(), but expect a _Py_Identifier*
as the method name. */
Py_DEPRECATED
(
3.15
)
PyAPI_FUNC
(
PyObject
*
)
_PyObject_CallMethodId
(
PyObject
*
obj
,
_Py_Identifier
*
name
,
const
char
*
format
, ...);
/* Convert keyword arguments from the FASTCALL (stack: C array, kwnames: tuple)
format to a Python dictionary ("kwargs" dict).
The type of kwnames keys is not checked. The final function getting
arguments is responsible to check if all keys are strings, for example using
PyArg_ParseTupleAndKeywords() or PyArg_ValidateKeywordArguments().
Duplicate keys are merged using the last value. If duplicate keys must raise
an exception, the caller is responsible to implement an explicit keys on
kwnames. */
PyAPI_FUNC
(
PyObject
*
)
_PyStack_AsDict
(
PyObject
*
const
*
values
,
PyObject
*
kwnames
);
/* === Vectorcall protocol (PEP 590) ============================= */
// PyVectorcall_NARGS() is exported as a function for the stable ABI.
// Here (when we are not using the stable ABI), the name is overridden to
// call a static inline function for best performance.
static
inline
Py_ssize_t
_PyVectorcall_NARGS
(
size_t
n
)
{
return
n
&
~
PY_VECTORCALL_ARGUMENTS_OFFSET
;
}
#define
PyVectorcall_NARGS
(
n
) _PyVectorcall_NARGS(n)
PyAPI_FUNC
(
vectorcallfunc
)
PyVectorcall_Function
(
PyObject
*
callable
);
// Backwards compatibility aliases (PEP 590) for API that was provisional
// in Python 3.8
#define
_PyObject_Vectorcall
PyObject_Vectorcall
#define
_PyObject_VectorcallMethod
PyObject_VectorcallMethod
#define
_PyObject_FastCallDict
PyObject_VectorcallDict
#define
_PyVectorcall_Function
PyVectorcall_Function
#define
_PyObject_CallOneArg
PyObject_CallOneArg
#define
_PyObject_CallMethodNoArgs
PyObject_CallMethodNoArgs
#define
_PyObject_CallMethodOneArg
PyObject_CallMethodOneArg
/* Same as PyObject_Vectorcall except that keyword arguments are passed as
dict, which may be NULL if there are no keyword arguments. */
PyAPI_FUNC
(
PyObject
*
)
PyObject_VectorcallDict
(
PyObject
*
callable
,
PyObject
*
const
*
args
,
size_t
nargsf
,
PyObject
*
kwargs
);
PyAPI_FUNC
(
PyObject
*
)
PyObject_CallOneArg
(
PyObject
*
func
,
PyObject
*
arg
);
static
inline
PyObject
*
PyObject_CallMethodNoArgs
(
PyObject
*
self
,
PyObject
*
name
)
{
size_t
nargsf
=
1
|
PY_VECTORCALL_ARGUMENTS_OFFSET
;
return
PyObject_VectorcallMethod
(
name
,
&
self
,
nargsf
,
_Py_NULL
);
}
static
inline
PyObject
*
PyObject_CallMethodOneArg
(
PyObject
*
self
,
PyObject
*
name
,
PyObject
*
arg
)
{
PyObject
*
args
[
2
]
=
{
self
,
arg
};
size_t
nargsf
=
2
|
PY_VECTORCALL_ARGUMENTS_OFFSET
;
assert
(
arg
!=
NULL
);
return
PyObject_VectorcallMethod
(
name
,
args
,
nargsf
,
_Py_NULL
);
}
/* Guess the size of object 'o' using len(o) or o.__length_hint__().
If neither of those return a non-negative value, then return the default
value. If one of the calls fails, this function returns -1. */
PyAPI_FUNC
(
Py_ssize_t
)
PyObject_LengthHint
(
PyObject
*
o
,
Py_ssize_t
);
/* === Sequence protocol ================================================ */
/* Assume tp_as_sequence and sq_item exist and that 'i' does not
need to be corrected for a negative index. */
#define
PySequence_ITEM
(
o
,
i
)\
( Py_TYPE(o)->tp_as_sequence->sq_item((o), (i)) )
/* Return the size of the sequence 'o', assuming that 'o' was returned by
PySequence_Fast and is not NULL. */
#define
PySequence_Fast_GET_SIZE
(
o
) \
(PyList_Check(o) ? PyList_GET_SIZE(o) : PyTuple_GET_SIZE(o))
/* Return the 'i'-th element of the sequence 'o', assuming that o was returned
by PySequence_Fast, and that i is within bounds. */
#define
PySequence_Fast_GET_ITEM
(
o
,
i
)\
(PyList_Check(o) ? PyList_GET_ITEM((o), (i)) : PyTuple_GET_ITEM((o), (i)))
/* Return a pointer to the underlying item array for
an object returned by PySequence_Fast */
#define
PySequence_Fast_ITEMS
(
sf
) \
(PyList_Check(sf) ? ((PyListObject *)(sf))->ob_item \
: ((PyTupleObject *)(sf))->ob_item)
You can’t perform that action at this time.