From 395871e511d6d9634399598cae8f0c35fe72d79b Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 25 Jan 2023 08:55:46 -0800 Subject: GH-98831: Elaborate some cases_generator tests (#101299) * Make macro test more elaborate * Add test for 'register inst()' --- Tools/cases_generator/test_generator.py | 54 +++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 13 deletions(-) diff --git a/Tools/cases_generator/test_generator.py b/Tools/cases_generator/test_generator.py index c59aae8..cf58e6a 100644 --- a/Tools/cases_generator/test_generator.py +++ b/Tools/cases_generator/test_generator.py @@ -333,20 +333,21 @@ def test_super_instruction(): def test_macro_instruction(): input = """ - inst(OP1, (counter/1, arg --)) { - op1(); + inst(OP1, (counter/1, arg1 -- interim)) { + interim = op1(arg1); } - op(OP2, (extra/2, arg --)) { - op2(); + op(OP2, (extra/2, arg2, interim -- res)) { + res = op2(arg2, interim); } macro(OP) = OP1 + cache/2 + OP2; """ output = """ TARGET(OP1) { - PyObject *arg = PEEK(1); + PyObject *arg1 = PEEK(1); + PyObject *interim; uint16_t counter = read_u16(&next_instr[0].cache); - op1(); - STACK_SHRINK(1); + interim = op1(arg1); + POKE(1, interim); JUMPBY(1); DISPATCH(); } @@ -355,17 +356,24 @@ def test_macro_instruction(): PyObject *_tmp_1 = PEEK(1); PyObject *_tmp_2 = PEEK(2); { - PyObject *arg = _tmp_1; - uint16_t counter = read_u16(&next_instr[0].cache); - op1(); + PyObject *arg1 = _tmp_1; + PyObject *interim; + uint16_t counter = re + ad_u16(&next_instr[0].cache); + interim = op1(arg1); + _tmp_1 = interim; } { - PyObject *arg = _tmp_2; + PyObject *interim = _tmp_1; + PyObject *arg2 = _tmp_2; + PyObject *res; uint32_t extra = read_u32(&next_instr[3].cache); - op2(); + res = op2(arg2, interim); + _tmp_2 = res; } JUMPBY(5); - STACK_SHRINK(2); + STACK_SHRINK(1); + POKE(1, _tmp_2); DISPATCH(); } """ @@ -448,3 +456,23 @@ def test_array_error_if(): } """ run_cases_test(input, output) + +def test_register(): + input = """ + register inst(OP, (counter/1, left, right -- result)) { + result = op(left, right); + } + """ + output = """ + TARGET(OP) { + PyObject *left = REG(oparg1); + PyObject *right = REG(oparg2); + PyObject *result; + uint16_t counter = read_u16(&next_instr[0].cache); + result = op(left, right); + Py_XSETREF(REG(oparg3), result); + JUMPBY(1); + DISPATCH(); + } + """ + run_cases_test(input, output) -- cgit v0.12