Tipragot
628be439b8
Cela permet de ne pas avoir de problèmes de compatibilité car python est dans le git.
57 lines
2.1 KiB
Python
57 lines
2.1 KiB
Python
"""Test runner for exception handling transform test cases.
|
|
|
|
The transform inserts exception handling branch operations to IR.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import os.path
|
|
|
|
from mypy.errors import CompileError
|
|
from mypy.test.config import test_temp_dir
|
|
from mypy.test.data import DataDrivenTestCase
|
|
from mypyc.analysis.blockfreq import frequently_executed_blocks
|
|
from mypyc.common import TOP_LEVEL_NAME
|
|
from mypyc.ir.pprint import format_func
|
|
from mypyc.test.testutil import (
|
|
ICODE_GEN_BUILTINS,
|
|
MypycDataSuite,
|
|
assert_test_output,
|
|
build_ir_for_single_file,
|
|
remove_comment_lines,
|
|
use_custom_builtins,
|
|
)
|
|
from mypyc.transform.exceptions import insert_exception_handling
|
|
from mypyc.transform.refcount import insert_ref_count_opcodes
|
|
from mypyc.transform.uninit import insert_uninit_checks
|
|
|
|
files = ["exceptions.test", "exceptions-freq.test"]
|
|
|
|
|
|
class TestExceptionTransform(MypycDataSuite):
|
|
files = files
|
|
base_path = test_temp_dir
|
|
|
|
def run_case(self, testcase: DataDrivenTestCase) -> None:
|
|
"""Perform a runtime checking transformation test case."""
|
|
with use_custom_builtins(os.path.join(self.data_prefix, ICODE_GEN_BUILTINS), testcase):
|
|
expected_output = remove_comment_lines(testcase.output)
|
|
try:
|
|
ir = build_ir_for_single_file(testcase.input)
|
|
except CompileError as e:
|
|
actual = e.messages
|
|
else:
|
|
actual = []
|
|
for fn in ir:
|
|
if fn.name == TOP_LEVEL_NAME and not testcase.name.endswith("_toplevel"):
|
|
continue
|
|
insert_uninit_checks(fn)
|
|
insert_exception_handling(fn)
|
|
insert_ref_count_opcodes(fn)
|
|
actual.extend(format_func(fn))
|
|
if testcase.name.endswith("_freq"):
|
|
common = frequently_executed_blocks(fn.blocks[0])
|
|
actual.append("hot blocks: %s" % sorted(b.label for b in common))
|
|
|
|
assert_test_output(testcase, actual, "Invalid source code output", expected_output)
|