| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -309,26 +309,27 @@ _PyCode_Quicken(PyCodeObject *code) | |||
| 309 | 309 | #define SPEC_FAIL_OUT_OF_RANGE 4 | |
| 310 | 310 | #define SPEC_FAIL_EXPECTED_ERROR 5 | |
| 311 | 311 | #define SPEC_FAIL_WRONG_NUMBER_ARGUMENTS 6 | |
| 312 | - #define SPEC_FAIL_NOT_PY_FUNCTION 7 | ||
| 312 | + #define SPEC_FAIL_CODE_COMPLEX_PARAMETERS 7 | ||
| 313 | + #define SPEC_FAIL_CODE_NOT_OPTIMIZED 8 | ||
| 313 | 314 | ||
| 314 | 315 | ||
| 315 | 316 | #define SPEC_FAIL_LOAD_GLOBAL_NON_DICT 17 | |
| 316 | 317 | #define SPEC_FAIL_LOAD_GLOBAL_NON_STRING_OR_SPLIT 18 | |
| 317 | 318 | ||
| 318 | 319 | /* Attributes */ | |
| 319 | 320 | ||
| 320 | - #define SPEC_FAIL_ATTR_OVERRIDING_DESCRIPTOR 8 | ||
| 321 | - #define SPEC_FAIL_ATTR_NON_OVERRIDING_DESCRIPTOR 9 | ||
| 322 | - #define SPEC_FAIL_ATTR_NOT_DESCRIPTOR 10 | ||
| 323 | - #define SPEC_FAIL_ATTR_METHOD 11 | ||
| 324 | - #define SPEC_FAIL_ATTR_MUTABLE_CLASS 12 | ||
| 325 | - #define SPEC_FAIL_ATTR_PROPERTY 13 | ||
| 326 | - #define SPEC_FAIL_ATTR_NON_OBJECT_SLOT 14 | ||
| 327 | - #define SPEC_FAIL_ATTR_READ_ONLY 15 | ||
| 328 | - #define SPEC_FAIL_ATTR_AUDITED_SLOT 16 | ||
| 329 | - #define SPEC_FAIL_ATTR_NOT_MANAGED_DICT 17 | ||
| 330 | - #define SPEC_FAIL_ATTR_NON_STRING_OR_SPLIT 18 | ||
| 331 | - #define SPEC_FAIL_ATTR_MODULE_ATTR_NOT_FOUND 19 | ||
| 321 | + #define SPEC_FAIL_ATTR_OVERRIDING_DESCRIPTOR 9 | ||
| 322 | + #define SPEC_FAIL_ATTR_NON_OVERRIDING_DESCRIPTOR 10 | ||
| 323 | + #define SPEC_FAIL_ATTR_NOT_DESCRIPTOR 11 | ||
| 324 | + #define SPEC_FAIL_ATTR_METHOD 12 | ||
| 325 | + #define SPEC_FAIL_ATTR_MUTABLE_CLASS 13 | ||
| 326 | + #define SPEC_FAIL_ATTR_PROPERTY 14 | ||
| 327 | + #define SPEC_FAIL_ATTR_NON_OBJECT_SLOT 15 | ||
| 328 | + #define SPEC_FAIL_ATTR_READ_ONLY 16 | ||
| 329 | + #define SPEC_FAIL_ATTR_AUDITED_SLOT 17 | ||
| 330 | + #define SPEC_FAIL_ATTR_NOT_MANAGED_DICT 18 | ||
| 331 | + #define SPEC_FAIL_ATTR_NON_STRING_OR_SPLIT 19 | ||
| 332 | + #define SPEC_FAIL_ATTR_MODULE_ATTR_NOT_FOUND 20 | ||
| 332 | 333 | ||
| 333 | 334 | #define SPEC_FAIL_ATTR_SHADOWED 21 | |
| 334 | 335 | #define SPEC_FAIL_ATTR_BUILTIN_CLASS_METHOD 22 | |
@@ -346,12 +347,12 @@ _PyCode_Quicken(PyCodeObject *code) | |||
| 346 | 347 | ||
| 347 | 348 | /* Binary subscr and store subscr */ | |
| 348 | 349 | ||
| 349 | - #define SPEC_FAIL_SUBSCR_ARRAY_INT 8 | ||
| 350 | - #define SPEC_FAIL_SUBSCR_ARRAY_SLICE 9 | ||
| 351 | - #define SPEC_FAIL_SUBSCR_LIST_SLICE 10 | ||
| 352 | - #define SPEC_FAIL_SUBSCR_TUPLE_SLICE 11 | ||
| 353 | - #define SPEC_FAIL_SUBSCR_STRING_INT 12 | ||
| 354 | - #define SPEC_FAIL_SUBSCR_STRING_SLICE 13 | ||
| 350 | + #define SPEC_FAIL_SUBSCR_ARRAY_INT 9 | ||
| 351 | + #define SPEC_FAIL_SUBSCR_ARRAY_SLICE 10 | ||
| 352 | + #define SPEC_FAIL_SUBSCR_LIST_SLICE 11 | ||
| 353 | + #define SPEC_FAIL_SUBSCR_TUPLE_SLICE 12 | ||
| 354 | + #define SPEC_FAIL_SUBSCR_STRING_INT 13 | ||
| 355 | + #define SPEC_FAIL_SUBSCR_STRING_SLICE 14 | ||
| 355 | 356 | #define SPEC_FAIL_SUBSCR_BUFFER_INT 15 | |
| 356 | 357 | #define SPEC_FAIL_SUBSCR_BUFFER_SLICE 16 | |
| 357 | 358 | #define SPEC_FAIL_SUBSCR_SEQUENCE_INT 17 | |
@@ -366,49 +367,48 @@ _PyCode_Quicken(PyCodeObject *code) | |||
| 366 | 367 | ||
| 367 | 368 | /* Binary op */ | |
| 368 | 369 | ||
| 369 | - #define SPEC_FAIL_BINARY_OP_ADD_DIFFERENT_TYPES 8 | ||
| 370 | - #define SPEC_FAIL_BINARY_OP_ADD_OTHER 9 | ||
| 371 | - #define SPEC_FAIL_BINARY_OP_AND_DIFFERENT_TYPES 10 | ||
| 372 | - #define SPEC_FAIL_BINARY_OP_AND_INT 11 | ||
| 373 | - #define SPEC_FAIL_BINARY_OP_AND_OTHER 12 | ||
| 374 | - #define SPEC_FAIL_BINARY_OP_FLOOR_DIVIDE 13 | ||
| 375 | - #define SPEC_FAIL_BINARY_OP_LSHIFT 14 | ||
| 376 | - #define SPEC_FAIL_BINARY_OP_MATRIX_MULTIPLY 15 | ||
| 377 | - #define SPEC_FAIL_BINARY_OP_MULTIPLY_DIFFERENT_TYPES 16 | ||
| 378 | - #define SPEC_FAIL_BINARY_OP_MULTIPLY_OTHER 17 | ||
| 379 | - #define SPEC_FAIL_BINARY_OP_OR 18 | ||
| 380 | - #define SPEC_FAIL_BINARY_OP_POWER 19 | ||
| 381 | - #define SPEC_FAIL_BINARY_OP_REMAINDER 20 | ||
| 382 | - #define SPEC_FAIL_BINARY_OP_RSHIFT 21 | ||
| 383 | - #define SPEC_FAIL_BINARY_OP_SUBTRACT_DIFFERENT_TYPES 22 | ||
| 384 | - #define SPEC_FAIL_BINARY_OP_SUBTRACT_OTHER 23 | ||
| 385 | - #define SPEC_FAIL_BINARY_OP_TRUE_DIVIDE_DIFFERENT_TYPES 24 | ||
| 386 | - #define SPEC_FAIL_BINARY_OP_TRUE_DIVIDE_FLOAT 25 | ||
| 387 | - #define SPEC_FAIL_BINARY_OP_TRUE_DIVIDE_OTHER 26 | ||
| 388 | - #define SPEC_FAIL_BINARY_OP_XOR 27 | ||
| 370 | + #define SPEC_FAIL_BINARY_OP_ADD_DIFFERENT_TYPES 9 | ||
| 371 | + #define SPEC_FAIL_BINARY_OP_ADD_OTHER 10 | ||
| 372 | + #define SPEC_FAIL_BINARY_OP_AND_DIFFERENT_TYPES 11 | ||
| 373 | + #define SPEC_FAIL_BINARY_OP_AND_INT 12 | ||
| 374 | + #define SPEC_FAIL_BINARY_OP_AND_OTHER 13 | ||
| 375 | + #define SPEC_FAIL_BINARY_OP_FLOOR_DIVIDE 14 | ||
| 376 | + #define SPEC_FAIL_BINARY_OP_LSHIFT 15 | ||
| 377 | + #define SPEC_FAIL_BINARY_OP_MATRIX_MULTIPLY 16 | ||
| 378 | + #define SPEC_FAIL_BINARY_OP_MULTIPLY_DIFFERENT_TYPES 17 | ||
| 379 | + #define SPEC_FAIL_BINARY_OP_MULTIPLY_OTHER 18 | ||
| 380 | + #define SPEC_FAIL_BINARY_OP_OR 19 | ||
| 381 | + #define SPEC_FAIL_BINARY_OP_POWER 20 | ||
| 382 | + #define SPEC_FAIL_BINARY_OP_REMAINDER 21 | ||
| 383 | + #define SPEC_FAIL_BINARY_OP_RSHIFT 22 | ||
| 384 | + #define SPEC_FAIL_BINARY_OP_SUBTRACT_DIFFERENT_TYPES 23 | ||
| 385 | + #define SPEC_FAIL_BINARY_OP_SUBTRACT_OTHER 24 | ||
| 386 | + #define SPEC_FAIL_BINARY_OP_TRUE_DIVIDE_DIFFERENT_TYPES 25 | ||
| 387 | + #define SPEC_FAIL_BINARY_OP_TRUE_DIVIDE_FLOAT 26 | ||
| 388 | + #define SPEC_FAIL_BINARY_OP_TRUE_DIVIDE_OTHER 27 | ||
| 389 | + #define SPEC_FAIL_BINARY_OP_XOR 28 | ||
| 389 | 390 | ||
| 390 | 391 | /* Calls */ | |
| 391 | - #define SPEC_FAIL_CALL_COMPLEX_PARAMETERS 9 | ||
| 392 | - #define SPEC_FAIL_CALL_CO_NOT_OPTIMIZED 10 | ||
| 393 | - /* SPEC_FAIL_METHOD defined as 11 above */ | ||
| 394 | 392 | ||
| 395 | 393 | #define SPEC_FAIL_CALL_INSTANCE_METHOD 11 | |
| 396 | 394 | #define SPEC_FAIL_CALL_CMETHOD 12 | |
| 397 | 395 | #define SPEC_FAIL_CALL_CFUNC_VARARGS 13 | |
| 398 | 396 | #define SPEC_FAIL_CALL_CFUNC_VARARGS_KEYWORDS 14 | |
| 399 | - #define SPEC_FAIL_CALL_CFUNC_FASTCALL_KEYWORDS 15 | ||
| 400 | - #define SPEC_FAIL_CALL_CFUNC_NOARGS 16 | ||
| 401 | - #define SPEC_FAIL_CALL_BAD_CALL_FLAGS 17 | ||
| 402 | - #define SPEC_FAIL_CALL_CFUNC_METHOD_FASTCALL_KEYWORDS 18 | ||
| 403 | - #define SPEC_FAIL_CALL_PYTHON_CLASS 19 | ||
| 404 | - #define SPEC_FAIL_CALL_PEP_523 20 | ||
| 405 | - #define SPEC_FAIL_CALL_BOUND_METHOD 21 | ||
| 406 | - #define SPEC_FAIL_CALL_STR 22 | ||
| 407 | - #define SPEC_FAIL_CALL_CLASS_NO_VECTORCALL 23 | ||
| 408 | - #define SPEC_FAIL_CALL_CLASS_MUTABLE 24 | ||
| 409 | - #define SPEC_FAIL_CALL_KWNAMES 25 | ||
| 410 | - #define SPEC_FAIL_CALL_METHOD_WRAPPER 26 | ||
| 411 | - #define SPEC_FAIL_CALL_OPERATOR_WRAPPER 27 | ||
| 397 | + #define SPEC_FAIL_CALL_CFUNC_NOARGS 15 | ||
| 398 | + #define SPEC_FAIL_CALL_CFUNC_METHOD_FASTCALL_KEYWORDS 16 | ||
| 399 | + #define SPEC_FAIL_CALL_METH_DESCR_VARARGS 17 | ||
| 400 | + #define SPEC_FAIL_CALL_METH_DESCR_VARARGS_KEYWORDS 18 | ||
| 401 | + #define SPEC_FAIL_CALL_METH_DESCR_METHOD_FASTCALL_KEYWORDS 19 | ||
| 402 | + #define SPEC_FAIL_CALL_BAD_CALL_FLAGS 20 | ||
| 403 | + #define SPEC_FAIL_CALL_PYTHON_CLASS 21 | ||
| 404 | + #define SPEC_FAIL_CALL_PEP_523 22 | ||
| 405 | + #define SPEC_FAIL_CALL_BOUND_METHOD 23 | ||
| 406 | + #define SPEC_FAIL_CALL_STR 24 | ||
| 407 | + #define SPEC_FAIL_CALL_CLASS_NO_VECTORCALL 25 | ||
| 408 | + #define SPEC_FAIL_CALL_CLASS_MUTABLE 26 | ||
| 409 | + #define SPEC_FAIL_CALL_KWNAMES 27 | ||
| 410 | + #define SPEC_FAIL_CALL_METHOD_WRAPPER 28 | ||
| 411 | + #define SPEC_FAIL_CALL_OPERATOR_WRAPPER 29 | ||
| 412 | 412 | ||
| 413 | 413 | /* COMPARE_OP */ | |
| 414 | 414 | #define SPEC_FAIL_COMPARE_OP_DIFFERENT_TYPES 12 | |
@@ -449,8 +449,8 @@ _PyCode_Quicken(PyCodeObject *code) | |||
| 449 | 449 | ||
| 450 | 450 | // UNPACK_SEQUENCE | |
| 451 | 451 | ||
| 452 | - #define SPEC_FAIL_UNPACK_SEQUENCE_ITERATOR 8 | ||
| 453 | - #define SPEC_FAIL_UNPACK_SEQUENCE_SEQUENCE 9 | ||
| 452 | + #define SPEC_FAIL_UNPACK_SEQUENCE_ITERATOR 9 | ||
| 453 | + #define SPEC_FAIL_UNPACK_SEQUENCE_SEQUENCE 10 | ||
| 454 | 454 | ||
| 455 | 455 | static int function_kind(PyCodeObject *code); | |
| 456 | 456 | static bool function_check_args(PyObject *o, int expected_argcount, int opcode); | |
@@ -1251,10 +1251,10 @@ static int | |||
| 1251 | 1251 | function_kind(PyCodeObject *code) { | |
| 1252 | 1252 | int flags = code->co_flags; | |
| 1253 | 1253 | if ((flags & (CO_VARKEYWORDS | CO_VARARGS)) || code->co_kwonlyargcount) { | |
| 1254 | - return SPEC_FAIL_CALL_COMPLEX_PARAMETERS; | ||
| 1254 | + return SPEC_FAIL_CODE_COMPLEX_PARAMETERS; | ||
| 1255 | 1255 | } | |
| 1256 | 1256 | if ((flags & CO_OPTIMIZED) == 0) { | |
| 1257 | - return SPEC_FAIL_CALL_CO_NOT_OPTIMIZED; | ||
| 1257 | + return SPEC_FAIL_CODE_NOT_OPTIMIZED; | ||
| 1258 | 1258 | } | |
| 1259 | 1259 | return SIMPLE_FUNCTION; | |
| 1260 | 1260 | } | |
@@ -1526,15 +1526,36 @@ builtin_call_fail_kind(int ml_flags) | |||
| 1526 | 1526 | return SPEC_FAIL_CALL_CFUNC_VARARGS; | |
| 1527 | 1527 | case METH_VARARGS | METH_KEYWORDS: | |
| 1528 | 1528 | return SPEC_FAIL_CALL_CFUNC_VARARGS_KEYWORDS; | |
| 1529 | - case METH_FASTCALL | METH_KEYWORDS: | ||
| 1530 | - return SPEC_FAIL_CALL_CFUNC_FASTCALL_KEYWORDS; | ||
| 1531 | 1529 | case METH_NOARGS: | |
| 1532 | 1530 | return SPEC_FAIL_CALL_CFUNC_NOARGS; | |
| 1533 | 1531 | case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: | |
| 1534 | 1532 | return SPEC_FAIL_CALL_CFUNC_METHOD_FASTCALL_KEYWORDS; | |
| 1535 | 1533 | /* These cases should be optimized, but return "other" just in case */ | |
| 1536 | 1534 | case METH_O: | |
| 1537 | 1535 | case METH_FASTCALL: | |
| 1536 | + case METH_FASTCALL | METH_KEYWORDS: | ||
| 1537 | + return SPEC_FAIL_OTHER; | ||
| 1538 | + default: | ||
| 1539 | + return SPEC_FAIL_CALL_BAD_CALL_FLAGS; | ||
| 1540 | + } | ||
| 1541 | + } | ||
| 1542 | + | ||
| 1543 | + static int | ||
| 1544 | + meth_descr_call_fail_kind(int ml_flags) | ||
| 1545 | + { | ||
| 1546 | + switch (ml_flags & (METH_VARARGS | METH_FASTCALL | METH_NOARGS | METH_O | | ||
| 1547 | + METH_KEYWORDS | METH_METHOD)) { | ||
| 1548 | + case METH_VARARGS: | ||
| 1549 | + return SPEC_FAIL_CALL_METH_DESCR_VARARGS; | ||
| 1550 | + case METH_VARARGS | METH_KEYWORDS: | ||
| 1551 | + return SPEC_FAIL_CALL_METH_DESCR_VARARGS_KEYWORDS; | ||
| 1552 | + case METH_METHOD | METH_FASTCALL | METH_KEYWORDS: | ||
| 1553 | + return SPEC_FAIL_CALL_METH_DESCR_METHOD_FASTCALL_KEYWORDS; | ||
| 1554 | + /* These cases should be optimized, but return "other" just in case */ | ||
| 1555 | + case METH_NOARGS: | ||
| 1556 | + case METH_O: | ||
| 1557 | + case METH_FASTCALL: | ||
| 1558 | + case METH_FASTCALL | METH_KEYWORDS: | ||
| 1538 | 1559 | return SPEC_FAIL_OTHER; | |
| 1539 | 1560 | default: | |
| 1540 | 1561 | return SPEC_FAIL_CALL_BAD_CALL_FLAGS; | |
@@ -1583,12 +1604,12 @@ specialize_method_descriptor(PyMethodDescrObject *descr, _Py_CODEUNIT *instr, | |||
| 1583 | 1604 | _py_set_opcode(instr, CALL_NO_KW_METHOD_DESCRIPTOR_FAST); | |
| 1584 | 1605 | return 0; | |
| 1585 | 1606 | } | |
| 1586 | - case METH_FASTCALL|METH_KEYWORDS: { | ||
| 1607 | + case METH_FASTCALL | METH_KEYWORDS: { | ||
| 1587 | 1608 | _py_set_opcode(instr, CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS); | |
| 1588 | 1609 | return 0; | |
| 1589 | 1610 | } | |
| 1590 | 1611 | } | |
| 1591 | - SPECIALIZATION_FAIL(CALL, builtin_call_fail_kind(descr->d_method->ml_flags)); | ||
| 1612 | + SPECIALIZATION_FAIL(CALL, meth_descr_call_fail_kind(descr->d_method->ml_flags)); | ||
| 1592 | 1613 | return -1; | |
| 1593 | 1614 | } | |
| 1594 | 1615 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -224,7 +224,7 @@ def pretty(defname): | |||
| 224 | 224 | return defname.replace("_", " ").lower() | |
| 225 | 225 | ||
| 226 | 226 | def kind_to_text(kind, defines, opname): | |
| 227 | - if kind <= 7: | ||
| 227 | + if kind <= 8: | ||
| 228 | 228 | return pretty(defines[kind][0]) | |
| 229 | 229 | if opname.endswith("ATTR"): | |
| 230 | 230 | opname = "ATTR" | |
| Back | FazBrowse Home | New Git URL |
0 commit comments