Skip to content

Commit

Permalink
Move labels into tier 1 generator
Browse files Browse the repository at this point in the history
  • Loading branch information
Fidget-Spinner committed Jan 21, 2025
1 parent af4bf1a commit b911bb1
Show file tree
Hide file tree
Showing 9 changed files with 205 additions and 162 deletions.
1 change: 0 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,6 @@ Programs/test_frozenmain.h generated
Python/Python-ast.c generated
Python/executor_cases.c.h generated
Python/generated_cases.c.h generated
Python/generated_labels.c.h generated
Python/optimizer_cases.c.h generated
Python/opcode_targets.h generated
Python/stdlib_module_names.h generated
Expand Down
51 changes: 0 additions & 51 deletions Lib/test/test_generated_cases.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ def skip_if_different_mount_drives():
import parser
from stack import Local, Stack
import tier1_generator
import labels_generator
import opcode_metadata_generator
import optimizer_generator

Expand Down Expand Up @@ -1757,55 +1756,6 @@ def test_kill_in_wrong_order(self):
with self.assertRaises(SyntaxError):
self.run_cases_test(input, "")


class TestGeneratedLabels(unittest.TestCase):
def setUp(self) -> None:
super().setUp()
self.maxDiff = None

self.temp_dir = tempfile.gettempdir()
self.temp_input_filename = os.path.join(self.temp_dir, "input.txt")
self.temp_output_filename = os.path.join(self.temp_dir, "output.txt")
self.temp_metadata_filename = os.path.join(self.temp_dir, "metadata.txt")
self.temp_pymetadata_filename = os.path.join(self.temp_dir, "pymetadata.txt")
self.temp_executor_filename = os.path.join(self.temp_dir, "executor.txt")

def tearDown(self) -> None:
for filename in [
self.temp_input_filename,
self.temp_output_filename,
self.temp_metadata_filename,
self.temp_pymetadata_filename,
self.temp_executor_filename,
]:
try:
os.remove(filename)
except Exception:
pass
super().tearDown()

def run_cases_test(self, input: str, expected: str):
with open(self.temp_input_filename, "w+") as temp_input:
temp_input.write(parser.BEGIN_MARKER)
temp_input.write(input)
temp_input.write(parser.END_MARKER)
temp_input.flush()

with handle_stderr():
labels_generator.generate_labels_from_files(
[self.temp_input_filename], self.temp_output_filename
)

with open(self.temp_output_filename) as temp_output:
lines = temp_output.readlines()
while lines and lines[0].startswith(("// ", "#", " #", "\n")):
lines.pop(0)
while lines and lines[-1].startswith(("#", "\n")):
lines.pop(-1)
actual = "".join(lines)

self.assertEqual(actual.strip(), expected.strip())

def test_complex_label(self):
input = """
label(my_label) {
Expand Down Expand Up @@ -1861,7 +1811,6 @@ def test_multiple_labels(self):
goto my_label_3;
}
"""
self.run_cases_test(input, output)

class TestGeneratedAbstractCases(unittest.TestCase):
def setUp(self) -> None:
Expand Down
9 changes: 1 addition & 8 deletions Makefile.pre.in
Original file line number Diff line number Diff line change
Expand Up @@ -1985,7 +1985,7 @@ Objects/mimalloc/page.o: $(srcdir)/Objects/mimalloc/page-queue.c
.PHONY: regen-cases
regen-cases: \
regen-opcode-ids regen-opcode-targets regen-uop-ids regen-opcode-metadata-py \
regen-generated-cases regen-generated-labels regen-executor-cases regen-optimizer-cases \
regen-generated-cases regen-executor-cases regen-optimizer-cases \
regen-opcode-metadata regen-uop-metadata

.PHONY: regen-opcode-ids
Expand Down Expand Up @@ -2018,13 +2018,6 @@ regen-generated-cases:
-o $(srcdir)/Python/generated_cases.c.h.new $(srcdir)/Python/bytecodes.c
$(UPDATE_FILE) $(srcdir)/Python/generated_cases.c.h $(srcdir)/Python/generated_cases.c.h.new

.PHONY: regen-generated-labels
regen-generated-labels:
$(PYTHON_FOR_REGEN) $(srcdir)/Tools/cases_generator/labels_generator.py \
-o $(srcdir)/Python/generated_labels.c.h.new $(srcdir)/Python/bytecodes.c
$(UPDATE_FILE) $(srcdir)/Python/generated_labels.c.h $(srcdir)/Python/generated_labels.c.h.new


.PHONY: regen-executor-cases
regen-executor-cases:
$(PYTHON_FOR_REGEN) $(srcdir)/Tools/cases_generator/tier2_generator.py \
Expand Down
2 changes: 0 additions & 2 deletions PCbuild/regen.targets
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,6 @@
WorkingDirectory="$(PySourcePath)" />
<Exec Command="$(PythonForBuild) Tools\cases_generator\tier1_generator.py Python\bytecodes.c"
WorkingDirectory="$(PySourcePath)" />
<Exec Command="$(PythonForBuild) Tools\cases_generator\labels_generator.py Python\bytecodes.c"
WorkingDirectory="$(PySourcePath)" />
<Exec Command="$(PythonForBuild) Tools\cases_generator\tier2_generator.py Python\bytecodes.c"
WorkingDirectory="$(PySourcePath)" />
<Exec Command="$(PythonForBuild) Tools\cases_generator\optimizer_generator.py Python\optimizer_bytecodes.c Python\bytecodes.c"
Expand Down
30 changes: 0 additions & 30 deletions Python/ceval.c
Original file line number Diff line number Diff line change
Expand Up @@ -895,39 +895,9 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int

DISPATCH();

/* Start instructions */
#if !USE_COMPUTED_GOTOS
dispatch_opcode:
switch (opcode)
#endif
{

#include "generated_cases.c.h"


#if USE_COMPUTED_GOTOS
_unknown_opcode:
#else
EXTRA_CASES // From pycore_opcode_metadata.h, a 'case' for each unused opcode
#endif
/* Tell C compilers not to hold the opcode variable in the loop.
next_instr points the current instruction without TARGET(). */
opcode = next_instr->op.code;
_PyErr_Format(tstate, PyExc_SystemError,
"%U:%d: unknown opcode %d",
_PyFrame_GetCode(frame)->co_filename,
PyUnstable_InterpreterFrame_GetLine(frame),
opcode);
goto error;

} /* End instructions */

/* This should never be reached. Every opcode should end with DISPATCH()
or goto error. */
Py_UNREACHABLE();

#include "generated_labels.c.h"

#ifdef _Py_TIER2

// Tier 2 is also here!
Expand Down
153 changes: 153 additions & 0 deletions Python/generated_cases.c.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion Tools/c-analyzer/cpython/_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@ def clean_lines(text):
Python/deepfreeze/*.c
Python/frozen_modules/*.h
Python/generated_cases.c.h
Python/generated_labels.c.h
Python/executor_cases.c.h
Python/optimizer_cases.c.h
Expand Down
67 changes: 0 additions & 67 deletions Tools/cases_generator/labels_generator.py

This file was deleted.

Loading

0 comments on commit b911bb1

Please sign in to comment.