[Python-checkins] GH-98831: Elaborate some cases_generator tests (#101299)

gvanrossum webhook-mailer at python.org
Wed Jan 25 11:55:53 EST 2023


https://github.com/python/cpython/commit/395871e511d6d9634399598cae8f0c35fe72d79b
commit: 395871e511d6d9634399598cae8f0c35fe72d79b
branch: main
author: Guido van Rossum <guido at python.org>
committer: gvanrossum <gvanrossum at gmail.com>
date: 2023-01-25T08:55:46-08:00
summary:

GH-98831: Elaborate some cases_generator tests (#101299)

* Make macro test more elaborate
* Add test for 'register inst()'

files:
M Tools/cases_generator/test_generator.py

diff --git a/Tools/cases_generator/test_generator.py b/Tools/cases_generator/test_generator.py
index c59aae878cfa..cf58e6aaf2b3 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)



More information about the Python-checkins mailing list