1
1
#include "Python.h"
2
-
3
- #include "opcode.h"
4
- #include "pycore_atomic.h"
2
+ #include "pycore_abstract.h" // _PyIndex_Check()
3
+ #include "pycore_call.h" // _PyObject_FastCallDictTstate()
4
+ #include "pycore_ceval.h" // _PyEval_SignalAsyncExc()
5
+ #include "pycore_code.h"
6
+ #include "pycore_function.h"
7
+ #include "pycore_long.h" // _PyLong_GetZero()
8
+ #include "pycore_object.h" // _PyObject_GC_TRACK()
9
+ #include "pycore_moduleobject.h" // PyModuleObject
10
+ #include "pycore_opcode.h" // EXTRA_CASES
11
+ #include "pycore_pyerrors.h" // _PyErr_Fetch()
12
+ #include "pycore_pymem.h" // _PyMem_IsPtrFreed()
13
+ #include "pycore_pystate.h" // _PyInterpreterState_GET()
14
+ #include "pycore_range.h" // _PyRangeIterObject
15
+ #include "pycore_sliceobject.h" // _PyBuildSlice_ConsumeRefs
16
+ #include "pycore_sysmodule.h" // _PySys_Audit()
17
+ #include "pycore_tuple.h" // _PyTuple_ITEMS()
18
+ #include "pycore_emscripten_signal.h" // _Py_CHECK_EMSCRIPTEN_SIGNALS
19
+
20
+ #include "pycore_dict.h"
21
+ #include "dictobject.h"
5
22
#include "pycore_frame.h"
23
+ #include "opcode.h"
24
+ #include "pydtrace.h"
25
+ #include "setobject.h"
26
+ #include "structmember.h" // struct PyMemberDef, T_OFFSET_EX
6
27
7
28
void _PyFloat_ExactDealloc (PyObject * );
8
29
void _PyUnicode_ExactDealloc (PyObject * );
9
30
10
31
#define SET_TOP (v ) (stack_pointer[-1] = (v))
32
+ #define PEEK (n ) (stack_pointer[-(n)])
33
+
11
34
#define GETLOCAL (i ) (frame->localsplus[i])
12
35
13
- #define inst (name , stack_effect ) case name:
36
+ #define inst (name ) case name:
14
37
#define family (name ) static int family_##name
15
38
39
+ #define NAME_ERROR_MSG \
40
+ "name '%.200s' is not defined"
41
+
42
+ typedef struct {
43
+ PyObject * kwnames ;
44
+ } CallShape ;
45
+
16
46
static void
17
47
dummy_func (
18
48
PyThreadState * tstate ,
@@ -24,11 +54,19 @@ dummy_func(
24
54
PyObject * names ,
25
55
PyObject * consts ,
26
56
_Py_CODEUNIT * next_instr ,
27
- PyObject * * stack_pointer
57
+ PyObject * * stack_pointer ,
58
+ CallShape call_shape ,
59
+ _Py_CODEUNIT * first_instr ,
60
+ int throwflag ,
61
+ binaryfunc binary_ops []
28
62
)
29
63
{
30
64
switch (opcode ) {
31
65
66
+ /* BEWARE!
67
+ It is essential that any operation that fails must goto error
68
+ and that all operation that succeed call DISPATCH() ! */
69
+
32
70
// BEGIN BYTECODES //
33
71
// stack effect: ( -- )
34
72
inst (NOP ) {
@@ -3924,56 +3962,60 @@ dummy_func(
3924
3962
// END BYTECODES //
3925
3963
3926
3964
}
3965
+ error :;
3966
+ exception_unwind :;
3927
3967
handle_eval_breaker :;
3968
+ resume_frame :;
3969
+ resume_with_error :;
3970
+ start_frame :;
3928
3971
unbound_local_error :;
3929
- error :;
3930
3972
}
3931
3973
3932
3974
// Families go below this point //
3933
3975
3934
- family (binary_op ) =
3976
+ family (binary_op ) = {
3935
3977
BINARY_OP , BINARY_OP_ADAPTIVE , BINARY_OP_ADD_FLOAT ,
3936
3978
BINARY_OP_ADD_INT , BINARY_OP_ADD_UNICODE , BINARY_OP_INPLACE_ADD_UNICODE ,
3937
- BINARY_OP_MULTIPLY_FLOAT , BINARY_OP_MULTIPLY_INT , BINARY_OP_SUBTRACT_FLOAT ;
3938
- BINARY_OP_SUBTRACT_INT ;
3939
- family (binary_subscr ) =
3979
+ BINARY_OP_MULTIPLY_FLOAT , BINARY_OP_MULTIPLY_INT , BINARY_OP_SUBTRACT_FLOAT ,
3980
+ BINARY_OP_SUBTRACT_INT } ;
3981
+ family (binary_subscr ) = {
3940
3982
BINARY_SUBSCR , BINARY_SUBSCR_ADAPTIVE , BINARY_SUBSCR_DICT ,
3941
- BINARY_SUBSCR_GETITEM , BINARY_SUBSCR_LIST_INT , BINARY_SUBSCR_TUPLE_INT ;
3942
- family (call ) =
3983
+ BINARY_SUBSCR_GETITEM , BINARY_SUBSCR_LIST_INT , BINARY_SUBSCR_TUPLE_INT } ;
3984
+ family (call ) = {
3943
3985
CALL , CALL_ADAPTIVE , CALL_PY_EXACT_ARGS ,
3944
3986
CALL_PY_WITH_DEFAULTS , CALL_BOUND_METHOD_EXACT_ARGS , CALL_BUILTIN_CLASS ,
3945
3987
CALL_BUILTIN_FAST_WITH_KEYWORDS , CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS , CALL_NO_KW_BUILTIN_FAST ,
3946
3988
CALL_NO_KW_BUILTIN_O , CALL_NO_KW_ISINSTANCE , CALL_NO_KW_LEN ,
3947
3989
CALL_NO_KW_LIST_APPEND , CALL_NO_KW_METHOD_DESCRIPTOR_FAST , CALL_NO_KW_METHOD_DESCRIPTOR_NOARGS ,
3948
- CALL_NO_KW_METHOD_DESCRIPTOR_O , CALL_NO_KW_STR_1 , CALL_NO_KW_TUPLE_1 ;
3949
- CALL_NO_KW_TYPE_1 ;
3950
- family (compare_op ) =
3990
+ CALL_NO_KW_METHOD_DESCRIPTOR_O , CALL_NO_KW_STR_1 , CALL_NO_KW_TUPLE_1 ,
3991
+ CALL_NO_KW_TYPE_1 } ;
3992
+ family (compare_op ) = {
3951
3993
COMPARE_OP , COMPARE_OP_ADAPTIVE , COMPARE_OP_FLOAT_JUMP ,
3952
- COMPARE_OP_INT_JUMP , COMPARE_OP_STR_JUMP ;
3953
- family (extended_arg ) = EXTENDED_ARG , EXTENDED_ARG_QUICK ;
3954
- family (for_iter ) =
3955
- FOR_ITER , FOR_ITER_ADAPTIVE , FOR_ITER_LIST ;
3956
- FOR_ITER_RANGE ;
3957
- family (jump_backward ) = JUMP_BACKWARD , JUMP_BACKWARD_QUICK ;
3958
- family (load_attr ) =
3994
+ COMPARE_OP_INT_JUMP , COMPARE_OP_STR_JUMP } ;
3995
+ family (extended_arg ) = { EXTENDED_ARG , EXTENDED_ARG_QUICK } ;
3996
+ family (for_iter ) = {
3997
+ FOR_ITER , FOR_ITER_ADAPTIVE , FOR_ITER_LIST ,
3998
+ FOR_ITER_RANGE } ;
3999
+ family (jump_backward ) = { JUMP_BACKWARD , JUMP_BACKWARD_QUICK } ;
4000
+ family (load_attr ) = {
3959
4001
LOAD_ATTR , LOAD_ATTR_ADAPTIVE , LOAD_ATTR_CLASS ,
3960
4002
LOAD_ATTR_GETATTRIBUTE_OVERRIDDEN , LOAD_ATTR_INSTANCE_VALUE , LOAD_ATTR_MODULE ,
3961
4003
LOAD_ATTR_PROPERTY , LOAD_ATTR_SLOT , LOAD_ATTR_WITH_HINT ,
3962
- LOAD_ATTR_METHOD_LAZY_DICT , LOAD_ATTR_METHOD_NO_DICT , LOAD_ATTR_METHOD_WITH_DICT ;
3963
- LOAD_ATTR_METHOD_WITH_VALUES ;
3964
- family (load_const ) = LOAD_CONST , LOAD_CONST__LOAD_FAST ;
3965
- family (load_fast ) = LOAD_FAST , LOAD_FAST__LOAD_CONST , LOAD_FAST__LOAD_FAST ;
3966
- family (load_global ) =
3967
- LOAD_GLOBAL , LOAD_GLOBAL_ADAPTIVE , LOAD_GLOBAL_BUILTIN ;
3968
- LOAD_GLOBAL_MODULE ;
3969
- family (resume ) = RESUME , RESUME_QUICK ;
3970
- family (store_attr ) =
4004
+ LOAD_ATTR_METHOD_LAZY_DICT , LOAD_ATTR_METHOD_NO_DICT , LOAD_ATTR_METHOD_WITH_DICT ,
4005
+ LOAD_ATTR_METHOD_WITH_VALUES } ;
4006
+ family (load_const ) = { LOAD_CONST , LOAD_CONST__LOAD_FAST } ;
4007
+ family (load_fast ) = { LOAD_FAST , LOAD_FAST__LOAD_CONST , LOAD_FAST__LOAD_FAST } ;
4008
+ family (load_global ) = {
4009
+ LOAD_GLOBAL , LOAD_GLOBAL_ADAPTIVE , LOAD_GLOBAL_BUILTIN ,
4010
+ LOAD_GLOBAL_MODULE } ;
4011
+ family (resume ) = { RESUME , RESUME_QUICK } ;
4012
+ family (store_attr ) = {
3971
4013
STORE_ATTR , STORE_ATTR_ADAPTIVE , STORE_ATTR_INSTANCE_VALUE ,
3972
- STORE_ATTR_SLOT , STORE_ATTR_WITH_HINT ;
3973
- family (store_fast ) = STORE_FAST , STORE_FAST__LOAD_FAST , STORE_FAST__STORE_FAST ;
3974
- family (store_subscr ) =
3975
- STORE_SUBSCR , STORE_SUBSCR_ADAPTIVE , STORE_SUBSCR_DICT ;
3976
- STORE_SUBSCR_LIST_INT ;
3977
- family (unpack_sequence ) =
4014
+ STORE_ATTR_SLOT , STORE_ATTR_WITH_HINT } ;
4015
+ family (store_fast ) = { STORE_FAST , STORE_FAST__LOAD_FAST , STORE_FAST__STORE_FAST } ;
4016
+ family (store_subscr ) = {
4017
+ STORE_SUBSCR , STORE_SUBSCR_ADAPTIVE , STORE_SUBSCR_DICT ,
4018
+ STORE_SUBSCR_LIST_INT } ;
4019
+ family (unpack_sequence ) = {
3978
4020
UNPACK_SEQUENCE , UNPACK_SEQUENCE_ADAPTIVE , UNPACK_SEQUENCE_LIST ,
3979
- UNPACK_SEQUENCE_TUPLE , UNPACK_SEQUENCE_TWO_TUPLE ;
4021
+ UNPACK_SEQUENCE_TUPLE , UNPACK_SEQUENCE_TWO_TUPLE } ;
0 commit comments