mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
[3.11] gh-94485: Set line number of module's RESUME instruction to 0 as specified by PEP 626 (GH-94552) (GH-94562)
Co-authored-by: Irit Katriel <1055913+iritkatriel@users.noreply.github.com>
Co-authored-by: Mark Shannon <mark@hotpy.org>
(cherry picked from commit 324d01944d
)
This commit is contained in:
parent
0615e7f9bb
commit
1bfe83a114
7 changed files with 32 additions and 25 deletions
|
@ -402,7 +402,8 @@ _code_type = type(_write_atomic.__code__)
|
|||
# add JUMP_BACKWARD_NO_INTERRUPT, make JUMP_NO_INTERRUPT virtual)
|
||||
# Python 3.11a7 3492 (make POP_JUMP_IF_NONE/NOT_NONE/TRUE/FALSE relative)
|
||||
# Python 3.11a7 3493 (Make JUMP_IF_TRUE_OR_POP/JUMP_IF_FALSE_OR_POP relative)
|
||||
# Python 3.11a7 3494 (New location info table)
|
||||
# Python 3.11a7 3494 (New location info table)
|
||||
# Python 3.11b4 3495 (Set line number of module's RESUME instr to 0 per PEP 626)
|
||||
# Python 3.12 will start with magic number 3500
|
||||
|
||||
|
||||
|
@ -416,7 +417,7 @@ _code_type = type(_write_atomic.__code__)
|
|||
# Whenever MAGIC_NUMBER is changed, the ranges in the magic_values array
|
||||
# in PC/launcher.c must also be updated.
|
||||
|
||||
MAGIC_NUMBER = (3494).to_bytes(2, 'little') + b'\r\n'
|
||||
MAGIC_NUMBER = (3495).to_bytes(2, 'little') + b'\r\n'
|
||||
|
||||
_RAW_MAGIC_NUMBER = int.from_bytes(MAGIC_NUMBER, 'little') # For import.c
|
||||
|
||||
|
|
|
@ -376,7 +376,6 @@ class CodeTest(unittest.TestCase):
|
|||
for instruction in artificial_instructions
|
||||
],
|
||||
[
|
||||
('RESUME', 0),
|
||||
("PUSH_EXC_INFO", None),
|
||||
("LOAD_CONST", None), # artificial 'None'
|
||||
("STORE_NAME", "e"), # XX: we know the location for this
|
||||
|
|
|
@ -161,7 +161,7 @@ if 1:
|
|||
co = compile(s256, 'fn', 'exec')
|
||||
self.assertEqual(co.co_firstlineno, 1)
|
||||
lines = list(co.co_lines())
|
||||
self.assertEqual(lines[0][2], None)
|
||||
self.assertEqual(lines[0][2], 0)
|
||||
self.assertEqual(lines[1][2], 257)
|
||||
|
||||
def test_literals_with_leading_zeroes(self):
|
||||
|
@ -1054,6 +1054,8 @@ class TestSourcePositions(unittest.TestCase):
|
|||
|
||||
# Check against the positions in the code object.
|
||||
for (line, end_line, col, end_col) in code.co_positions():
|
||||
if line == 0:
|
||||
continue # This is an artificial module-start line
|
||||
# If the offset is not None (indicating missing data), ensure that
|
||||
# it was part of one of the AST nodes.
|
||||
if line is not None:
|
||||
|
|
|
@ -272,7 +272,7 @@ Disassembly of g:
|
|||
expr_str = "x + 1"
|
||||
|
||||
dis_expr_str = """\
|
||||
RESUME 0
|
||||
0 RESUME 0
|
||||
|
||||
1 LOAD_NAME 0 (x)
|
||||
LOAD_CONST 0 (1)
|
||||
|
@ -283,7 +283,7 @@ dis_expr_str = """\
|
|||
simple_stmt_str = "x = x + 1"
|
||||
|
||||
dis_simple_stmt_str = """\
|
||||
RESUME 0
|
||||
0 RESUME 0
|
||||
|
||||
1 LOAD_NAME 0 (x)
|
||||
LOAD_CONST 0 (1)
|
||||
|
@ -302,7 +302,7 @@ lst[fun(0)]: int = 1
|
|||
# leading newline is for a reason (tests lineno)
|
||||
|
||||
dis_annot_stmt_str = """\
|
||||
RESUME 0
|
||||
0 RESUME 0
|
||||
|
||||
2 SETUP_ANNOTATIONS
|
||||
LOAD_CONST 0 (1)
|
||||
|
@ -342,7 +342,7 @@ while 1:
|
|||
# Trailing newline has been deliberately omitted
|
||||
|
||||
dis_compound_stmt_str = """\
|
||||
RESUME 0
|
||||
0 RESUME 0
|
||||
|
||||
1 LOAD_CONST 0 (0)
|
||||
STORE_NAME 0 (x)
|
||||
|
@ -954,7 +954,7 @@ class DisTests(DisTestBase):
|
|||
@cpython_only
|
||||
def test_binary_specialize(self):
|
||||
binary_op_quicken = """\
|
||||
0 RESUME_QUICK 0
|
||||
0 0 RESUME_QUICK 0
|
||||
|
||||
1 2 LOAD_NAME 0 (a)
|
||||
4 LOAD_NAME 1 (b)
|
||||
|
@ -972,7 +972,7 @@ class DisTests(DisTestBase):
|
|||
self.do_disassembly_compare(got, binary_op_quicken % "BINARY_OP_ADD_UNICODE 0 (+)", True)
|
||||
|
||||
binary_subscr_quicken = """\
|
||||
0 RESUME_QUICK 0
|
||||
0 0 RESUME_QUICK 0
|
||||
|
||||
1 2 LOAD_NAME 0 (a)
|
||||
4 LOAD_CONST 0 (0)
|
||||
|
@ -992,7 +992,7 @@ class DisTests(DisTestBase):
|
|||
@cpython_only
|
||||
def test_load_attr_specialize(self):
|
||||
load_attr_quicken = """\
|
||||
0 RESUME_QUICK 0
|
||||
0 0 RESUME_QUICK 0
|
||||
|
||||
1 2 LOAD_CONST 0 ('a')
|
||||
4 LOAD_ATTR_SLOT 0 (__class__)
|
||||
|
@ -1006,7 +1006,7 @@ class DisTests(DisTestBase):
|
|||
@cpython_only
|
||||
def test_call_specialize(self):
|
||||
call_quicken = """\
|
||||
0 RESUME_QUICK 0
|
||||
0 0 RESUME_QUICK 0
|
||||
|
||||
1 2 PUSH_NULL
|
||||
4 LOAD_NAME 0 (str)
|
||||
|
@ -1595,7 +1595,7 @@ class InstructionTests(InstructionTestCase):
|
|||
for instr in dis.get_instructions(code)
|
||||
]
|
||||
expected = [
|
||||
(None, None, None, None),
|
||||
(0, 1, 0, 0),
|
||||
(1, 1, 0, 1),
|
||||
(1, 1, 0, 1),
|
||||
(2, 2, 2, 3),
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
Line number of a module's ``RESUME`` instruction is set to 0 as specified in
|
||||
:pep:`626`.
|
22
Programs/test_frozenmain.h
generated
22
Programs/test_frozenmain.h
generated
|
@ -28,15 +28,15 @@ unsigned char M_test_frozenmain[] = {
|
|||
107,101,121,169,0,243,0,0,0,0,250,18,116,101,115,116,
|
||||
95,102,114,111,122,101,110,109,97,105,110,46,112,121,250,8,
|
||||
60,109,111,100,117,108,101,62,114,18,0,0,0,1,0,0,
|
||||
0,115,152,0,0,0,248,240,6,0,1,11,128,10,128,10,
|
||||
128,10,216,0,24,208,0,24,208,0,24,208,0,24,224,0,
|
||||
5,128,5,208,6,26,209,0,27,212,0,27,208,0,27,216,
|
||||
0,5,128,5,128,106,144,35,148,40,209,0,27,212,0,27,
|
||||
208,0,27,216,9,38,208,9,26,212,9,38,209,9,40,212,
|
||||
9,40,168,24,212,9,50,128,6,240,2,6,12,2,240,0,
|
||||
7,1,42,240,0,7,1,42,128,67,240,14,0,5,10,128,
|
||||
69,208,10,40,144,67,208,10,40,208,10,40,152,54,160,35,
|
||||
156,59,208,10,40,208,10,40,209,4,41,212,4,41,208,4,
|
||||
41,208,4,41,240,15,7,1,42,240,0,7,1,42,114,16,
|
||||
0,0,0,
|
||||
0,115,156,0,0,0,240,3,1,1,1,240,8,0,1,11,
|
||||
128,10,128,10,128,10,216,0,24,208,0,24,208,0,24,208,
|
||||
0,24,224,0,5,128,5,208,6,26,209,0,27,212,0,27,
|
||||
208,0,27,216,0,5,128,5,128,106,144,35,148,40,209,0,
|
||||
27,212,0,27,208,0,27,216,9,38,208,9,26,212,9,38,
|
||||
209,9,40,212,9,40,168,24,212,9,50,128,6,240,2,6,
|
||||
12,2,240,0,7,1,42,240,0,7,1,42,128,67,240,14,
|
||||
0,5,10,128,69,208,10,40,144,67,208,10,40,208,10,40,
|
||||
152,54,160,35,156,59,208,10,40,208,10,40,209,4,41,212,
|
||||
4,41,208,4,41,208,4,41,240,15,7,1,42,240,0,7,
|
||||
1,42,114,16,0,0,0,
|
||||
};
|
||||
|
|
|
@ -1803,7 +1803,7 @@ compiler_enter_scope(struct compiler *c, identifier name,
|
|||
c->u->u_curblock = block;
|
||||
|
||||
if (u->u_scope_type == COMPILER_SCOPE_MODULE) {
|
||||
c->u->u_lineno = -1;
|
||||
c->u->u_lineno = 0;
|
||||
}
|
||||
else {
|
||||
if (!compiler_set_qualname(c))
|
||||
|
@ -1811,6 +1811,9 @@ compiler_enter_scope(struct compiler *c, identifier name,
|
|||
}
|
||||
ADDOP_I(c, RESUME, 0);
|
||||
|
||||
if (u->u_scope_type == COMPILER_SCOPE_MODULE) {
|
||||
c->u->u_lineno = -1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue