Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
28bc162
feat: update magic int from 3655 (CPython 3.15-dev) to 3666.
Quinntyx May 27, 2026
203fa1a
feat: added support for new opcodes from CPython 3.15.0b1
Quinntyx May 27, 2026
13f45d8
feat: implemented frozendict unmarshal for CPython 3.15+
Quinntyx May 27, 2026
5eea3e2
feat: added frozendict polyfill type to allow unmarshalling CPython 3…
Quinntyx May 27, 2026
7836e73
feat: implemented 3.15 lazy/eager import instruction decoding and offset
Quinntyx May 27, 2026
dd8d9b7
fix: updated test to skip 1: None requirement on 3.15+ due to movemen…
Quinntyx May 27, 2026
bb477df
fix: configurable lib_prefix via env variable
Quinntyx May 27, 2026
89bc9b0
chore: added 3.15 to version list
Quinntyx May 27, 2026
248cc13
feat: created frozendict unmarshalling test
Quinntyx May 27, 2026
7de2db2
fix: t_long now uses read_int32 instead of read_uint32
Quinntyx May 27, 2026
bbade08
fix: t_dict can no longer terminate on null values, only null keys
Quinntyx May 27, 2026
b9f70e9
fix: t_unicode now unmarshalls with surrogatepass enabled, as Python …
Quinntyx May 27, 2026
e8d33d0
chore: generated pyc test cases for CPython 3.15.0b1
Quinntyx May 27, 2026
7de2f0a
feat: updated opcodes to match new dis hastable behavior
Quinntyx May 28, 2026
4ca26a1
chore: added 3.15 tests to test infrastructure
Quinntyx May 28, 2026
b6f218b
feat: added 3.15 frozendict marshalling test.
Quinntyx May 28, 2026
af9fb41
fix: updated get_opcode_module() to use sys.version_info and PythonIm…
Quinntyx May 28, 2026
93a897f
chore: added verified 3.15 .right test data files
Quinntyx May 28, 2026
bc30431
fix: register Python 3.14.5 as canonical version in magics and op_imp…
Quinntyx May 28, 2026
2692140
chore: add Python 3.15 to cross-version tox environments
Quinntyx May 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion pytest/test_disasm.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,8 @@ def run_check_disasm(test_tuple, function_to_test):
("03_big_dict", "3.3", ["classic", "xasm"]),
("03_big_dict", "3.5", ["classic", "xasm"]),
("03_big_dict", "3.6", ["classic", "xasm"]),
("03_big_dict", "3.6", ["classic", "xasm"]),
("03_big_dict", "3.15", ["classic", "xasm"]),
("01_frozendict", "3.15", ["classic", "xasm"]),
("03_annotations", "3.7", ["classic", "xasm"]),
("test_nested_scopes", "2.1", ["extended-bytes"]),
# ("01_augmented_assign", "3.7", ["extended-bytes"]),
Expand Down
8 changes: 6 additions & 2 deletions pytest/test_std.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,12 @@
# First Line: 1
# Constants:
# 0: 10
# 1: None
# Names:
"""
+ ("# 1: None\n" if PYTHON_VERSION_TRIPLE < (3, 15) else "")
# In Python 3.15+, None is no longer in co_consts; it is loaded via
# LOAD_COMMON_CONSTANT(7) instead, so the implicit "return None" does
# not produce a constant entry.
+ """# Names:
# 0: a"""
).format(
flags="0x00000000 (0x0)"
Expand Down
26 changes: 26 additions & 0 deletions pytest/testdata/01_frozendict-3.15.right
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Source code size mod 2**32: 50 bytes
# Method Name: <module>
# Filename: dummy.py
# Argument count: 0
# Position-only argument count: 0
# Keyword-only arguments: 0
# Number of locals: 0
# Stack size: 3
# Flags: 0x00000000 (0x0)
# First Line: 1
# Constants:
# 0: 'Testing frozendict cross-version support!'
# 1: frozendict({'hello': 'cross-version-world'})
# Names:
# 0: print

0: 0 RESUME 0

1: 4 LOAD_NAME (print)
6 PUSH_NULL
8 LOAD_CONST ("Testing frozendict cross-version support!")
10 CALL (1 positional)
18 POP_TOP
20 LOAD_COMMON_CONSTANT (None)
22 RETURN_VALUE

29 changes: 29 additions & 0 deletions pytest/testdata/01_frozendict-xasm-3.15.right
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Source code size mod 2**32: 50 bytes

# Method Name: <module>
# Filename: dummy.py
# Argument count: 0
# Position-only argument count: 0
# Keyword-only arguments: 0
# Number of locals: 0
# Stack size: 3
# Flags: 0x00000000 (0x0)
# First Line: 1
# Constants:
# 0: 'Testing frozendict cross-version support!'
# 1: frozendict({'hello': 'cross-version-world'})
# Names:
# 0: print

0:
RESUME 0

1:
LOAD_NAME 0 (print)
PUSH_NULL
LOAD_CONST 0 ("Testing frozendict cross-version support!")
CALL 1 (1 positional)
POP_TOP
LOAD_COMMON_CONSTANT 7 (None)
RETURN_VALUE

Loading
Loading