[Python-checkins] gh-98831: Fix two bugs in case generator (#101349)

gvanrossum webhook-mailer at python.org
Thu Jan 26 12:15:39 EST 2023


https://github.com/python/cpython/commit/9f2c479eaf7d922746ef2f3c85b5c781757686b1
commit: 9f2c479eaf7d922746ef2f3c85b5c781757686b1
branch: main
author: Guido van Rossum <guido at python.org>
committer: gvanrossum <gvanrossum at gmail.com>
date: 2023-01-26T09:15:05-08:00
summary:

gh-98831: Fix two bugs in case generator (#101349)

Fix two bugs in case generator

- UndefinedLocalError when generating metadata for an 'op'
- Accidental newline inserted in test_generator.py

files:
M Tools/cases_generator/generate_cases.py
M Tools/cases_generator/test_generator.py

diff --git a/Tools/cases_generator/generate_cases.py b/Tools/cases_generator/generate_cases.py
index b7942410c82f..9d894d2ff574 100644
--- a/Tools/cases_generator/generate_cases.py
+++ b/Tools/cases_generator/generate_cases.py
@@ -736,7 +736,7 @@ def stack_analysis(
 
     def get_stack_effect_info(
         self, thing: parser.InstDef | parser.Super | parser.Macro
-    ) -> tuple[Instruction, str, str]:
+    ) -> tuple[Instruction|None, str, str]:
 
         def effect_str(effect: list[StackEffect]) -> str:
             if getattr(thing, 'kind', None) == 'legacy':
@@ -752,6 +752,9 @@ def effect_str(effect: list[StackEffect]) -> str:
                     instr = self.instrs[thing.name]
                     popped = effect_str(instr.input_effects)
                     pushed = effect_str(instr.output_effects)
+                else:
+                    instr = None
+                    popped = pushed = "", ""
             case parser.Super():
                 instr = self.super_instrs[thing.name]
                 popped = '+'.join(effect_str(comp.instr.input_effects) for comp in instr.parts)
@@ -770,8 +773,9 @@ def write_stack_effect_functions(self) -> None:
         pushed_data = []
         for thing in self.everything:
             instr, popped, pushed = self.get_stack_effect_info(thing)
-            popped_data.append( (instr, popped) )
-            pushed_data.append( (instr, pushed) )
+            if instr is not None:
+                popped_data.append( (instr, popped) )
+                pushed_data.append( (instr, pushed) )
 
         def write_function(direction: str, data: list[tuple[Instruction, str]]) -> None:
             self.out.emit("\n#ifndef NDEBUG");
diff --git a/Tools/cases_generator/test_generator.py b/Tools/cases_generator/test_generator.py
index cf58e6aaf2b3..bd1b974399ab 100644
--- a/Tools/cases_generator/test_generator.py
+++ b/Tools/cases_generator/test_generator.py
@@ -358,8 +358,7 @@ def test_macro_instruction():
             {
                 PyObject *arg1 = _tmp_1;
                 PyObject *interim;
-                uint16_t counter = re
-                ad_u16(&next_instr[0].cache);
+                uint16_t counter = read_u16(&next_instr[0].cache);
                 interim = op1(arg1);
                 _tmp_1 = interim;
             }



More information about the Python-checkins mailing list