Irit Katriel
6751a4af95
gh-87092: fix a few cases of incorrect error handling in compiler ( #103456 )
...
gh-87092: fix a few cases of incorrect error handling
2023-04-24 19:30:49 +01:00
Mark Shannon
411b169281
GH-103082: Implementation of PEP 669: Low Impact Monitoring for CPython (GH-103083)
...
* The majority of the monitoring code is in instrumentation.c
* The new instrumentation bytecodes are in bytecodes.c
* legacy_tracing.c adapts the new API to the old sys.setrace and sys.setprofile APIs
2023-04-12 12:04:55 +01:00
Irit Katriel
9db2db4fa4
gh-87092: fix refleak in peepholer test harness ( #103448 )
2023-04-11 21:08:29 +01:00
Irit Katriel
33822d037a
gh-87092: move assembler related code from compile.c to assemble.c ( #103277 )
2023-04-11 11:15:09 +01:00
Irit Katriel
80163e17d3
gh-87092: move CFG related code from compile.c to flowgraph.c ( #103021 )
2023-03-31 18:17:59 +01:00
Brandt Bucher
0444ae2487
GH-100982: Break up COMPARE_AND_BRANCH (GH-102801)
2023-03-23 15:25:09 -07:00
Irit Katriel
3468c768ce
gh-102859: Remove JUMP_IF_FALSE_OR_POP and JUMP_IF_TRUE_OR_POP ( #102870 )
2023-03-22 18:10:48 +00:00
Irit Katriel
8d015fa000
gh-102860: improve performance of compiler's instr_sequence_to_cfg ( #102861 )
2023-03-21 19:13:49 +00:00
Irit Katriel
634cb61909
gh-87092: refactor assemble() to a number of separate functions, which do not need the compiler struct ( #102562 )
2023-03-13 15:59:20 +00:00
Irit Katriel
54060ae91d
gh-87092: compiler's CFG construction moved to after codegen stage ( #102320 )
2023-03-07 18:16:32 +00:00
Irit Katriel
71db5dbcd7
gh-102371: move _Py_Mangle from compile.c to symtable.c ( #102372 )
2023-03-02 18:38:22 +00:00
Irit Katriel
4c87537efb
gh-102192: Replace PyErr_Fetch/Restore etc by more efficient alternatives (in Python/) ( #102193 )
2023-02-28 11:50:52 +00:00
Irit Katriel
9f799ab020
gh-87092: Make jump target label equal to the offset of the target in the instructions sequence ( #102093 )
2023-02-28 11:29:32 +00:00
Steve Dower
a99eb5cd99
gh-101907: Stop using `_Py_OPCODE` and `_Py_OPARG` macros (GH-101912)
...
* gh-101907: Removes use of non-standard C++ extension from Include/cpython/code.h
* Make cases_generator correct on Windows
2023-02-20 14:56:48 +00:00
penguin_wwy
df7ccf6138
gh-101928: fix crash in compiler on multi-line lambda in function call ( #101933 )
2023-02-16 11:31:41 +00:00
Irit Katriel
81e3aa835c
gh-101799: implement PREP_RERAISE_STAR as an intrinsic function ( #101800 )
2023-02-14 11:54:13 +00:00
Mark Shannon
160f2fe2b9
GH-87849: Simplify stack effect of SEND and specialize it for generators and coroutines. (GH-101788)
2023-02-13 11:24:55 +00:00
Guido van Rossum
65b7b6bd23
gh-98831: Use opcode metadata for stack_effect() ( #101704 )
...
* Write output and metadata in a single run
This halves the time to run the cases generator
(most of the time goes into parsing the input).
* Declare or define opcode metadata based on NEED_OPCODE_TABLES
* Use generated metadata for stack_effect()
* compile.o depends on opcode_metadata.h
* Return -1 from _PyOpcode_num_popped/pushed for unknown opcode
2023-02-08 16:23:19 -08:00
penguin_wwy
753fc8a5d6
gh-101632: Add the new RETURN_CONST opcode ( #101633 )
2023-02-07 22:32:21 +00:00
Irit Katriel
b91b42d236
gh-98831: rewrite PUSH_EXC_INFO and conditional jumps in the instruction definition DSL ( #101481 )
2023-02-01 19:38:06 +00:00
Irit Katriel
af7b2db384
gh-99955: use SUCCESS/ERROR return values in optimizer and assembler. Use RETURN_IF_ERROR where appropriate. Fix a couple of bugs. ( #101412 )
2023-01-31 00:06:19 +00:00
Dong-hee Na
e867c1b753
gh-101400: Fix incorrect lineno in exception message on continue/break which are not in a loop ( #101413 )
2023-01-30 23:33:54 +00:00
Irit Katriel
19f90d6b97
gh-98831: add variable stack effect support to cases generator ( #101309 )
2023-01-25 20:41:03 +00:00
Mark Shannon
f02fa64bf2
GH-100762: Don't call `gen.throw()` in `gen.close()`, unless necessary. (GH-101013)
...
* Store exception stack depth in YIELD_VALUE's oparg and use it avoid expensive gen.throw() in gen.close() where possible.
2023-01-24 17:25:37 +00:00
Ikko Eltociear Ashimine
4510fbb216
Fix typo in comment in compile.c ( #101194 )
2023-01-20 18:34:36 +00:00
Irit Katriel
9ec9b203ea
gh-101169: reduce the implementation of except* by one bytecode instruction ( #101170 )
2023-01-19 23:30:49 +00:00
Mark Shannon
7b14c2ef19
GH-100982: Add `COMPARE_AND_BRANCH` instruction (GH-100983)
2023-01-16 12:35:21 +00:00
Mark Shannon
6e4e14d98f
GH-100923: Embed jump mask in `COMPARE_OP` oparg (GH-100924)
2023-01-11 20:40:43 +00:00
Carl Meyer
7116030a25
gh-88696: clean up dead argument to compiler_make_closure (GH-100806)
2023-01-07 12:20:48 +00:00
Mark Shannon
78068126a1
GH-99005: More intrinsics (GH-100774)
...
* Remove UNARY_POSITIVE, LIST_TO_TUPLE and ASYNC_GEN_WRAP, replacing them with intrinsics.
2023-01-06 14:47:57 +00:00
Guido van Rossum
14b7f00fdf
GH-98831: Update generate_cases.py: register inst, opcode_metadata.h ( #100735 )
...
(These aren't used yet, but may be coming soon,
and it's easier to keep this tool the same between branches.)
Added a sanity check for all this to compile.c.
Co-authored-by: Irit Katriel <iritkatriel@yahoo.com>
2023-01-05 13:01:07 -08:00
Mark Shannon
28187141cc
GH-99005: Add `CALL_INTRINSIC_1` instruction (GH-100771)
...
* Remove PRINT_EXPR instruction
* Remove STOPITERATION_ERROR instruction
* Remove IMPORT_STAR instruction
2023-01-05 16:05:51 +00:00
Irit Katriel
52017dbe16
gh-100747: some compiler macros use c instead of C to access the compiler ( #100748 )
2023-01-04 20:19:20 +00:00
Mark Shannon
15aecf8dd7
GH-100719: Remove the `co_nplaincellvars` field from code objects. (GH-100721)
2023-01-04 15:41:39 +00:00
Brandt Bucher
09edde95f4
GH-99554: Trim trailing whitespace (GH-100435)
...
Automerge-Triggered-By: GH:brandtbucher
2022-12-22 12:13:51 -08:00
Brandt Bucher
3c033a2e6f
GH-99554: Pack location tables more effectively (GH-99556)
2022-12-21 16:41:18 -08:00
Mark Shannon
6997e77bdf
GH-100222: Redefine _Py_CODEUNIT as a union to clarify structure of code unit. (GH-100223)
2022-12-14 11:12:53 +00:00
Irit Katriel
985a71032b
gh-99955: undef ERROR and SUCCESS before redefining (fixes sanitizer warning) ( #100215 )
2022-12-13 13:55:10 +00:00
Irit Katriel
e4ea33b178
gh-99955: standardize return values of functions in compiler's code-gen ( #100010 )
2022-12-12 14:22:15 +00:00
Irit Katriel
ab02262cd0
gh-99955: standardize return values of functions in assembler and optimizer. ( #99956 )
2022-12-02 17:43:10 +00:00
Irit Katriel
18a6967544
GH-99877)
2022-11-30 16:16:54 +00:00
Irit Katriel
ac12e3941f
gh-87092: move all localsplus preparation into separate function called from assembler stage (GH-99869)
2022-11-30 12:37:30 +00:00
Irit Katriel
ae185fdcca
gh-99708: fix bug where compiler crashes on if expression with an empty body block (GH-99732)
2022-11-24 10:59:07 +00:00
Victor Stinner
135ec7cefb
gh-99537: Use Py_SETREF() function in C code ( #99657 )
...
Fix potential race condition in code patterns:
* Replace "Py_DECREF(var); var = new;" with "Py_SETREF(var, new);"
* Replace "Py_XDECREF(var); var = new;" with "Py_XSETREF(var, new);"
* Replace "Py_CLEAR(var); var = new;" with "Py_XSETREF(var, new);"
Other changes:
* Replace "old = var; var = new; Py_DECREF(var)"
with "Py_SETREF(var, new);"
* Replace "old = var; var = new; Py_XDECREF(var)"
with "Py_XSETREF(var, new);"
* And remove the "old" variable.
2022-11-22 13:39:11 +01:00
Victor Stinner
8211cf5d28
gh-99300: Replace Py_INCREF() with Py_NewRef() ( #99530 )
...
Replace Py_INCREF() and Py_XINCREF() using a cast with Py_NewRef()
and Py_XNewRef().
2022-11-16 18:34:24 +01:00
Irit Katriel
a3ac9232f8
gh-87092: expose the compiler's codegen to python for unit tests (GH-99111)
2022-11-14 13:56:40 +00:00
Irit Katriel
fb844e1931
gh-98762: Fix locations of match sub-patterns (GH-98775)
2022-11-12 18:42:17 +00:00
Irit Katriel
3dd6ee2c00
gh-99254: remove all unused consts from code objects (GH-99255)
2022-11-11 10:53:43 +00:00
Mark Shannon
1e197e63e2
GH-96421: Insert shim frame on entry to interpreter (GH-96319)
...
* Adds EXIT_INTERPRETER instruction to exit PyEval_EvalDefault()
* Simplifies RETURN_VALUE, YIELD_VALUE and RETURN_GENERATOR instructions as they no longer need to check for entry frames.
2022-11-10 12:34:57 +00:00
Victor Stinner
231d83b724
gh-99300: Use Py_NewRef() in Python/ directory ( #99317 )
...
Replace Py_INCREF() and Py_XINCREF() with Py_NewRef() and
Py_XNewRef() in C files of the Python/ directory.
Update Parser/asdl_c.py to regenerate Python/Python-ast.c.
2022-11-10 11:23:36 +01:00
Brandt Bucher
c7f5708714
GH-98686: Get rid of "adaptive" and "quick" instructions (GH-99182)
2022-11-09 10:50:09 -08:00
Mark Shannon
f4adb97506
GH-96793: Implement PEP 479 in bytecode. (GH-99006)
...
* Handle converting StopIteration to RuntimeError in bytecode.
* Add custom instruction for converting StopIteration into RuntimeError.
2022-11-03 11:38:51 +00:00
Irit Katriel
df84b7b0bc
gh-87092: remove unused SET_LOC/UNSET_LOC macros (GH-98914)
2022-11-02 15:52:11 +00:00
Irit Katriel
6d683d8525
gh-87092: do not allocate PyFutureFeatures dynamically (GH-98913)
2022-11-02 15:13:07 +00:00
Irit Katriel
39448adc9d
gh-98811: use full source location to simplify __future__ imports error checking. This also fixes an incorrect error offset. (GH-98812)
2022-10-31 13:08:03 +00:00
Mark Shannon
22863df7ca
GH-96793: Change `FOR_ITER` to not pop the iterator on exhaustion. (GH-96801)
...
Change FOR_ITER to have the same stack effect regardless of whether it branches or not.
Performance is unchanged as FOR_ITER (and specialized forms jump over the cleanup code).
2022-10-27 11:55:03 +01:00
Irit Katriel
a1a8828e42
gh-98461: Fix location of RETURN_VALUE in async generator bytecode. compiler_jump_if no longer needs a pointer to the loc. (GH-98494)
2022-10-25 12:26:26 +01:00
Dennis Sweeney
39bc70e267
gh-97912: Avoid quadratic behavior when adding LOAD_FAST_CHECK (GH-97952)
...
* The compiler analyzes the usage of the first 64 local variables all at once using bit masks.
* Local variables beyond the first 64 are only partially analyzed, achieving linear time.
2022-10-20 18:27:41 -04:00
Irit Katriel
4ec9ed8fde
gh-98461: Fix source location in comprehensions bytecode (GH-98464)
2022-10-20 16:58:37 +01:00
Irit Katriel
9be05df399
gh-98398: Fix source locations for 'assert' bytecode (GH-98405)
2022-10-19 10:48:50 +01:00
Irit Katriel
c051d55ddb
gh-98390: Fix source locations of boolean sub-expressions (GH-98396)
2022-10-18 17:18:38 +01:00
Irit Katriel
6da1a2e993
gh-93691: Compiler's code-gen passes location around instead of holding it on the global compiler state (GH-98001)
2022-10-17 14:28:51 +01:00
Irit Katriel
c529b45122
gh-87092: bring compiler code closer to a preprocessing-opt-assembler organisation (GH-97644)
2022-10-05 08:52:35 +01:00
Brandt Bucher
dfc73b5724
GH-95921: Fix positions for some chained comparisons (GH-96968)
2022-09-20 12:22:24 -07:00
Irit Katriel
98e785d364
gh-87092: in compiler, move the detection of exception handlers before the CFG optimization stage (GH-96935)
2022-09-20 13:14:07 +01:00
Irit Katriel
6d7a0e0dd7
gh-87092: reduce redundancy and repetition in compiler's optimization stage (GH-96713)
2022-09-13 13:03:41 +01:00
Irit Katriel
0cd992c000
gh-88057: in compile.c, assertion that stackdepth is alway >=0 is missing in one place (GH-96513)
2022-09-07 14:01:57 +01:00
Irit Katriel
4c72517cad
gh-93554: Conditional jump opcodes only jump forward (GH-96318)
2022-09-01 21:36:47 +01:00
Irit Katriel
894cafd9a5
gh-93678: apply remove_redundant_jumps in optimize_cfg (GH-96274)
2022-09-01 11:03:52 +01:00
Irit Katriel
fba3b67af4
gh-87092: use basicblock_last_instr consistently in the compiler (GH-96243)
2022-08-24 16:58:42 +01:00
Irit Katriel
420f39f457
gh-93678: add _testinternalcapi.optimize_cfg() and test utils for compiler optimization unit tests (GH-96007)
2022-08-24 11:02:53 +01:00
Brandt Bucher
5bfb3c372b
GH-90997: Wrap yield from/await in a virtual try/except StopIteration (GH-96010)
2022-08-19 12:33:44 -07:00
Irit Katriel
41757bfabd
gh-95922: compiler's eliminate_empty_basic_blocks ignores the last block of the compilation unit (GH-95924)
2022-08-12 16:35:09 +01:00
Irit Katriel
9533b40cce
gh-87092: compiler's codegen stage uses int jump target labels, and the target pointer is only calculated just before optimization stage (GH-95655)
2022-08-11 17:40:49 +01:00
Irit Katriel
000c3874bf
gh-87092: create a 'jump target label' abstraction so that the compiler's codegen stage does not work directly with basic blocks (GH-95398)
2022-08-04 14:59:32 +01:00
Irit Katriel
75c0c1b993
gh-93678: extract 'struct cfg_builder' from the compiler so that the CFG can be manipulated directly (GH-95107)
2022-07-26 14:36:30 +01:00
Brandt Bucher
900bfc53cb
GH-94036: Fix more attribute location quirks (GH-95028)
2022-07-22 13:13:16 -07:00
Brandt Bucher
e402b26b7f
GH-95113: Don't use EXTENDED_ARG_QUICK in unquickened code (GH-95121)
2022-07-22 11:04:20 -07:00
Brandt Bucher
742d4614e1
GH-91409: Don't overwrite valid locations with NOP locations (GH-95067)
2022-07-20 14:27:31 -07:00
Kumar Aditya
7476154886
GH-94851: fix immortal objects refcounting in compiler (gh-95040)
2022-07-20 18:53:27 +09:00
Irit Katriel
ea11c17742
gh-93678: move normalize_basic_block and extend_block call into optimize_cfg (GH-95002)
2022-07-19 17:48:56 +01:00
Brandt Bucher
264b3ddfd5
GH-94694: Fix column offsets for multi-line method lookups (GH-94697)
2022-07-09 17:22:23 -07:00
Irit Katriel
bde06e1b83
gh-92228: disable the compiler's 'small exit block inlining' optimization for blocks that have a line number (GH-94592)
...
Inlining of code that corresponds to source code lines, can make it hard to distinguish later between code which is only reachable from except handlers, and that which is reachable in normal control flow. This caused problems with the debugger's jump feature.
This PR turns off the inlining optimisation for code which has line numbers. We still inline things like the implicit "return None".
2022-07-06 23:38:36 -07:00
Irit Katriel
324d01944d
gh-94485: Set line number of module's RESUME instruction to 0, as specified by PEP 626 (GH-94552)
...
Co-authored-by: Mark Shannon <mark@hotpy.org>
2022-07-05 14:38:44 +02:00
Irit Katriel
c57aad777a
gh-94216: add pseudo instructions to the dis/opcodes modules (GH-94241)
2022-07-01 15:33:35 +01:00
Mark Shannon
b152bf448b
GH-94329: Don't raise on excessive stack consumption (GH-94421)
2022-06-30 15:27:14 +01:00
Irit Katriel
be82d26570
gh-94332: make it safe to call assemble_free when assemble_init has not been called (GH-94389)
2022-06-30 12:26:29 +01:00
Mark Shannon
c0453a40fa
GH-94163: Add BINARY_SLICE and STORE_SLICE instructions. (GH-94168)
2022-06-27 12:24:23 +01:00
Irit Katriel
889772fb56
GH-93678: refactor compiler so that optimizer does not need the assembler and compiler structs (GH-93842)
2022-06-21 09:22:17 +01:00
Irit Katriel
af15cc534c
GH-93678: reduce boilerplate and code repetition in the compiler (GH-93682)
2022-06-14 13:40:09 +01:00
Ken Jin
b083450f88
GH-93429: Merge `LOAD_METHOD` back into `LOAD_ATTR` (GH-93430)
2022-06-14 11:36:22 +01:00
Mark Shannon
2bf74753c1
GH-93662: Make sure that column offsets are correct in multi-line method calls. (GH-93673)
2022-06-14 11:08:12 +01:00
Irit Katriel
cf730b595e
GH-93621: reorder code in with/async-with exception exit path to reduce the size of the exception table (GH-93622)
2022-06-10 17:53:34 +01:00
Irit Katriel
1713ff09d6
GH-93444: remove redundant fields from basicblock: b_nofallthrough, b_exit, b_return (GH-93445)
2022-06-03 22:43:22 +01:00
Irit Katriel
94b1586ca5
gh-93356: Lay out exception handling code at end of code unit (GH-92769)
2022-06-02 14:13:43 +01:00
Dennis Sweeney
f425f3bb27
gh-93143: Avoid NULL check in LOAD_FAST based on analysis in the compiler (GH-93144)
2022-05-31 16:32:30 -04:00
Irit Katriel
ace6607aa3
gh-93008: refactor compiler functions that add instructions to take only a basicblock* (not the whole compiler) (GH-93009)
2022-05-29 17:13:29 +01:00
Kumar Aditya
cb04a09d2d
GH-93207: Remove HAVE_STDARG_PROTOTYPES configure check for stdarg.h ( #93215 )
2022-05-27 13:30:45 +02:00
Dennis Sweeney
ddc4a782d3
gh-93223: More aggressive Jump-To-Jump elimination (GH-93229)
2022-05-27 11:17:59 +01:00
Dennis Sweeney
a458be3263
gh-93061: Mark as artificial: backwards jump after async for (GH-93062)
2022-05-23 13:58:41 +01:00