summaryrefslogtreecommitdiffstats
path: root/Include
diff options
context:
space:
mode:
authorKen Jin <kenjin@python.org>2022-06-17 15:13:17 (GMT)
committerGitHub <noreply@github.com>2022-06-17 15:13:17 (GMT)
commita51742ab82ad2a57841058fc9a16dac82d8337cf (patch)
tree7a1afc2f8255b25cf6da99e6af39d2eccf2acab6 /Include
parent0ff626f210c69643d0d5afad1e6ec6511272b3ce (diff)
downloadcpython-a51742ab82ad2a57841058fc9a16dac82d8337cf.zip
cpython-a51742ab82ad2a57841058fc9a16dac82d8337cf.tar.gz
cpython-a51742ab82ad2a57841058fc9a16dac82d8337cf.tar.bz2
gh-93911: Specialize `LOAD_ATTR_PROPERTY` (GH-93912)
Diffstat (limited to 'Include')
-rw-r--r--Include/internal/pycore_descrobject.h26
-rw-r--r--Include/internal/pycore_opcode.h27
-rw-r--r--Include/opcode.h53
3 files changed, 67 insertions, 39 deletions
diff --git a/Include/internal/pycore_descrobject.h b/Include/internal/pycore_descrobject.h
new file mode 100644
index 0000000..7637856
--- /dev/null
+++ b/Include/internal/pycore_descrobject.h
@@ -0,0 +1,26 @@
+#ifndef Py_INTERNAL_DESCROBJECT_H
+#define Py_INTERNAL_DESCROBJECT_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef Py_BUILD_CORE
+# error "this header requires Py_BUILD_CORE define"
+#endif
+
+typedef struct {
+ PyObject_HEAD
+ PyObject *prop_get;
+ PyObject *prop_set;
+ PyObject *prop_del;
+ PyObject *prop_doc;
+ PyObject *prop_name;
+ int getter_doc;
+} propertyobject;
+
+typedef propertyobject _PyPropertyObject;
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* !Py_INTERNAL_DESCROBJECT_H */
diff --git a/Include/internal/pycore_opcode.h b/Include/internal/pycore_opcode.h
index 62db22f..f0edbc7 100644
--- a/Include/internal/pycore_opcode.h
+++ b/Include/internal/pycore_opcode.h
@@ -153,6 +153,7 @@ const uint8_t _PyOpcode_Deopt[256] = {
[LOAD_ATTR_METHOD_WITH_DICT] = LOAD_ATTR,
[LOAD_ATTR_METHOD_WITH_VALUES] = LOAD_ATTR,
[LOAD_ATTR_MODULE] = LOAD_ATTR,
+ [LOAD_ATTR_PROPERTY] = LOAD_ATTR,
[LOAD_ATTR_SLOT] = LOAD_ATTR,
[LOAD_ATTR_WITH_HINT] = LOAD_ATTR,
[LOAD_BUILD_CLASS] = LOAD_BUILD_CLASS,
@@ -333,6 +334,7 @@ const uint8_t _PyOpcode_Original[256] = {
[LOAD_ATTR_METHOD_WITH_DICT] = LOAD_ATTR,
[LOAD_ATTR_METHOD_WITH_VALUES] = LOAD_ATTR,
[LOAD_ATTR_MODULE] = LOAD_ATTR,
+ [LOAD_ATTR_PROPERTY] = LOAD_ATTR,
[LOAD_ATTR_SLOT] = LOAD_ATTR,
[LOAD_ATTR_WITH_HINT] = LOAD_ATTR,
[LOAD_BUILD_CLASS] = LOAD_BUILD_CLASS,
@@ -481,27 +483,27 @@ static const char *const _PyOpcode_OpName[256] = {
[LOAD_ATTR_CLASS] = "LOAD_ATTR_CLASS",
[LOAD_ATTR_INSTANCE_VALUE] = "LOAD_ATTR_INSTANCE_VALUE",
[LOAD_ATTR_MODULE] = "LOAD_ATTR_MODULE",
+ [LOAD_ATTR_PROPERTY] = "LOAD_ATTR_PROPERTY",
[LOAD_ATTR_SLOT] = "LOAD_ATTR_SLOT",
- [LOAD_ATTR_WITH_HINT] = "LOAD_ATTR_WITH_HINT",
[GET_ITER] = "GET_ITER",
[GET_YIELD_FROM_ITER] = "GET_YIELD_FROM_ITER",
[PRINT_EXPR] = "PRINT_EXPR",
[LOAD_BUILD_CLASS] = "LOAD_BUILD_CLASS",
+ [LOAD_ATTR_WITH_HINT] = "LOAD_ATTR_WITH_HINT",
[LOAD_ATTR_METHOD_LAZY_DICT] = "LOAD_ATTR_METHOD_LAZY_DICT",
- [LOAD_ATTR_METHOD_NO_DICT] = "LOAD_ATTR_METHOD_NO_DICT",
[LOAD_ASSERTION_ERROR] = "LOAD_ASSERTION_ERROR",
[RETURN_GENERATOR] = "RETURN_GENERATOR",
+ [LOAD_ATTR_METHOD_NO_DICT] = "LOAD_ATTR_METHOD_NO_DICT",
[LOAD_ATTR_METHOD_WITH_DICT] = "LOAD_ATTR_METHOD_WITH_DICT",
[LOAD_ATTR_METHOD_WITH_VALUES] = "LOAD_ATTR_METHOD_WITH_VALUES",
[LOAD_CONST__LOAD_FAST] = "LOAD_CONST__LOAD_FAST",
[LOAD_FAST__LOAD_CONST] = "LOAD_FAST__LOAD_CONST",
[LOAD_FAST__LOAD_FAST] = "LOAD_FAST__LOAD_FAST",
- [LOAD_GLOBAL_ADAPTIVE] = "LOAD_GLOBAL_ADAPTIVE",
[LIST_TO_TUPLE] = "LIST_TO_TUPLE",
[RETURN_VALUE] = "RETURN_VALUE",
[IMPORT_STAR] = "IMPORT_STAR",
[SETUP_ANNOTATIONS] = "SETUP_ANNOTATIONS",
- [LOAD_GLOBAL_BUILTIN] = "LOAD_GLOBAL_BUILTIN",
+ [LOAD_GLOBAL_ADAPTIVE] = "LOAD_GLOBAL_ADAPTIVE",
[ASYNC_GEN_WRAP] = "ASYNC_GEN_WRAP",
[PREP_RERAISE_STAR] = "PREP_RERAISE_STAR",
[POP_EXCEPT] = "POP_EXCEPT",
@@ -528,7 +530,7 @@ static const char *const _PyOpcode_OpName[256] = {
[JUMP_FORWARD] = "JUMP_FORWARD",
[JUMP_IF_FALSE_OR_POP] = "JUMP_IF_FALSE_OR_POP",
[JUMP_IF_TRUE_OR_POP] = "JUMP_IF_TRUE_OR_POP",
- [LOAD_GLOBAL_MODULE] = "LOAD_GLOBAL_MODULE",
+ [LOAD_GLOBAL_BUILTIN] = "LOAD_GLOBAL_BUILTIN",
[POP_JUMP_FORWARD_IF_FALSE] = "POP_JUMP_FORWARD_IF_FALSE",
[POP_JUMP_FORWARD_IF_TRUE] = "POP_JUMP_FORWARD_IF_TRUE",
[LOAD_GLOBAL] = "LOAD_GLOBAL",
@@ -536,7 +538,7 @@ static const char *const _PyOpcode_OpName[256] = {
[CONTAINS_OP] = "CONTAINS_OP",
[RERAISE] = "RERAISE",
[COPY] = "COPY",
- [RESUME_QUICK] = "RESUME_QUICK",
+ [LOAD_GLOBAL_MODULE] = "LOAD_GLOBAL_MODULE",
[BINARY_OP] = "BINARY_OP",
[SEND] = "SEND",
[LOAD_FAST] = "LOAD_FAST",
@@ -556,9 +558,9 @@ static const char *const _PyOpcode_OpName[256] = {
[STORE_DEREF] = "STORE_DEREF",
[DELETE_DEREF] = "DELETE_DEREF",
[JUMP_BACKWARD] = "JUMP_BACKWARD",
- [STORE_ATTR_ADAPTIVE] = "STORE_ATTR_ADAPTIVE",
+ [RESUME_QUICK] = "RESUME_QUICK",
[CALL_FUNCTION_EX] = "CALL_FUNCTION_EX",
- [STORE_ATTR_INSTANCE_VALUE] = "STORE_ATTR_INSTANCE_VALUE",
+ [STORE_ATTR_ADAPTIVE] = "STORE_ATTR_ADAPTIVE",
[EXTENDED_ARG] = "EXTENDED_ARG",
[LIST_APPEND] = "LIST_APPEND",
[SET_ADD] = "SET_ADD",
@@ -568,31 +570,31 @@ static const char *const _PyOpcode_OpName[256] = {
[YIELD_VALUE] = "YIELD_VALUE",
[RESUME] = "RESUME",
[MATCH_CLASS] = "MATCH_CLASS",
+ [STORE_ATTR_INSTANCE_VALUE] = "STORE_ATTR_INSTANCE_VALUE",
[STORE_ATTR_SLOT] = "STORE_ATTR_SLOT",
- [STORE_ATTR_WITH_HINT] = "STORE_ATTR_WITH_HINT",
[FORMAT_VALUE] = "FORMAT_VALUE",
[BUILD_CONST_KEY_MAP] = "BUILD_CONST_KEY_MAP",
[BUILD_STRING] = "BUILD_STRING",
+ [STORE_ATTR_WITH_HINT] = "STORE_ATTR_WITH_HINT",
[STORE_FAST__LOAD_FAST] = "STORE_FAST__LOAD_FAST",
[STORE_FAST__STORE_FAST] = "STORE_FAST__STORE_FAST",
[STORE_SUBSCR_ADAPTIVE] = "STORE_SUBSCR_ADAPTIVE",
- [STORE_SUBSCR_DICT] = "STORE_SUBSCR_DICT",
[LIST_EXTEND] = "LIST_EXTEND",
[SET_UPDATE] = "SET_UPDATE",
[DICT_MERGE] = "DICT_MERGE",
[DICT_UPDATE] = "DICT_UPDATE",
+ [STORE_SUBSCR_DICT] = "STORE_SUBSCR_DICT",
[STORE_SUBSCR_LIST_INT] = "STORE_SUBSCR_LIST_INT",
[UNPACK_SEQUENCE_ADAPTIVE] = "UNPACK_SEQUENCE_ADAPTIVE",
[UNPACK_SEQUENCE_LIST] = "UNPACK_SEQUENCE_LIST",
[UNPACK_SEQUENCE_TUPLE] = "UNPACK_SEQUENCE_TUPLE",
- [UNPACK_SEQUENCE_TWO_TUPLE] = "UNPACK_SEQUENCE_TWO_TUPLE",
[CALL] = "CALL",
[KW_NAMES] = "KW_NAMES",
[POP_JUMP_BACKWARD_IF_NOT_NONE] = "POP_JUMP_BACKWARD_IF_NOT_NONE",
[POP_JUMP_BACKWARD_IF_NONE] = "POP_JUMP_BACKWARD_IF_NONE",
[POP_JUMP_BACKWARD_IF_FALSE] = "POP_JUMP_BACKWARD_IF_FALSE",
[POP_JUMP_BACKWARD_IF_TRUE] = "POP_JUMP_BACKWARD_IF_TRUE",
- [177] = "<177>",
+ [UNPACK_SEQUENCE_TWO_TUPLE] = "UNPACK_SEQUENCE_TWO_TUPLE",
[178] = "<178>",
[179] = "<179>",
[180] = "<180>",
@@ -675,7 +677,6 @@ static const char *const _PyOpcode_OpName[256] = {
#endif
#define EXTRA_CASES \
- case 177: \
case 178: \
case 179: \
case 180: \
diff --git a/Include/opcode.h b/Include/opcode.h
index 04e5bc8..b58b498 100644
--- a/Include/opcode.h
+++ b/Include/opcode.h
@@ -160,32 +160,33 @@ extern "C" {
#define LOAD_ATTR_CLASS 63
#define LOAD_ATTR_INSTANCE_VALUE 64
#define LOAD_ATTR_MODULE 65
-#define LOAD_ATTR_SLOT 66
-#define LOAD_ATTR_WITH_HINT 67
-#define LOAD_ATTR_METHOD_LAZY_DICT 72
-#define LOAD_ATTR_METHOD_NO_DICT 73
-#define LOAD_ATTR_METHOD_WITH_DICT 76
-#define LOAD_ATTR_METHOD_WITH_VALUES 77
-#define LOAD_CONST__LOAD_FAST 78
-#define LOAD_FAST__LOAD_CONST 79
-#define LOAD_FAST__LOAD_FAST 80
-#define LOAD_GLOBAL_ADAPTIVE 81
-#define LOAD_GLOBAL_BUILTIN 86
-#define LOAD_GLOBAL_MODULE 113
-#define RESUME_QUICK 121
-#define STORE_ATTR_ADAPTIVE 141
-#define STORE_ATTR_INSTANCE_VALUE 143
-#define STORE_ATTR_SLOT 153
-#define STORE_ATTR_WITH_HINT 154
-#define STORE_FAST__LOAD_FAST 158
-#define STORE_FAST__STORE_FAST 159
-#define STORE_SUBSCR_ADAPTIVE 160
-#define STORE_SUBSCR_DICT 161
-#define STORE_SUBSCR_LIST_INT 166
-#define UNPACK_SEQUENCE_ADAPTIVE 167
-#define UNPACK_SEQUENCE_LIST 168
-#define UNPACK_SEQUENCE_TUPLE 169
-#define UNPACK_SEQUENCE_TWO_TUPLE 170
+#define LOAD_ATTR_PROPERTY 66
+#define LOAD_ATTR_SLOT 67
+#define LOAD_ATTR_WITH_HINT 72
+#define LOAD_ATTR_METHOD_LAZY_DICT 73
+#define LOAD_ATTR_METHOD_NO_DICT 76
+#define LOAD_ATTR_METHOD_WITH_DICT 77
+#define LOAD_ATTR_METHOD_WITH_VALUES 78
+#define LOAD_CONST__LOAD_FAST 79
+#define LOAD_FAST__LOAD_CONST 80
+#define LOAD_FAST__LOAD_FAST 81
+#define LOAD_GLOBAL_ADAPTIVE 86
+#define LOAD_GLOBAL_BUILTIN 113
+#define LOAD_GLOBAL_MODULE 121
+#define RESUME_QUICK 141
+#define STORE_ATTR_ADAPTIVE 143
+#define STORE_ATTR_INSTANCE_VALUE 153
+#define STORE_ATTR_SLOT 154
+#define STORE_ATTR_WITH_HINT 158
+#define STORE_FAST__LOAD_FAST 159
+#define STORE_FAST__STORE_FAST 160
+#define STORE_SUBSCR_ADAPTIVE 161
+#define STORE_SUBSCR_DICT 166
+#define STORE_SUBSCR_LIST_INT 167
+#define UNPACK_SEQUENCE_ADAPTIVE 168
+#define UNPACK_SEQUENCE_LIST 169
+#define UNPACK_SEQUENCE_TUPLE 170
+#define UNPACK_SEQUENCE_TWO_TUPLE 177
#define DO_TRACING 255
#define HAS_CONST(op) (false\