From 2bba6a8e13d12caefdbbaa0e201be21ebe4a8d7e Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Thu, 23 Jul 2026 09:26:09 -0700 Subject: [PATCH 1/3] Plumb error values through generator --- edg/core/Generator.py | 11 ++++++++++- edg/core/test_generator_error.py | 23 +++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/edg/core/Generator.py b/edg/core/Generator.py index 42a7135ef..336c3bd6c 100644 --- a/edg/core/Generator.py +++ b/edg/core/Generator.py @@ -142,7 +142,16 @@ def _generated_def_to_proto( self._generator_param_values[param] = param._from_lit( generate_values_map[ref_map[param].SerializeToString()] ) - self.generate() + try: + self.generate() + except Exception as e: + params_list_str = ", ".join( + f"{self._name_of_child(param, self, allow_unknown=True)}={self._generator_param_values[param]}" + for param in self._generator_params_list + ) + raise RuntimeError( + f"Generator {self.__class__.__name__} with parameters {{{params_list_str}}} raised exception" + ) from e elif self._generator is not None: # legacy generator style fn_args = [ arg_param._from_lit(generate_values_map[ref_map[arg_param].SerializeToString()]) diff --git a/edg/core/test_generator_error.py b/edg/core/test_generator_error.py index da5f5d4c3..622a9d82c 100644 --- a/edg/core/test_generator_error.py +++ b/edg/core/test_generator_error.py @@ -6,6 +6,25 @@ from .HdlUserExceptions import BlockDefinitionError +class GeneratorErrorTop(DesignTop): + def contents(self) -> None: + super().contents() + self.generator = self.Block(GeneratorRaises(42, "bad")) + + +class GeneratorRaises(GeneratorBlock): + def __init__(self, param: IntLike, str_param: StringLike) -> None: + super().__init__() + self.param = self.ArgParameter(param) + self.str_param = self.ArgParameter(str_param) + self.generator_param(self.param, self.str_param) + + @override + def generate(self) -> None: + super().generate() + raise ValueError + + class BadGeneratorTestCase(unittest.TestCase): # These are internal classes to avoid this error case being auto-discovered in a library @@ -29,3 +48,7 @@ def generate(self) -> None: def test_non_arg_generator(self) -> None: with self.assertRaises(BlockDefinitionError): self.InvalidNonArgGeneratorBlock()._elaborated_def_to_proto() + + def test_generator_raises(self) -> None: + with self.assertRaises(CompilerCheckError): + ScalaCompiler.compile(GeneratorErrorTop) From 30eb0f2887046cb3ec77927db705558016453bed Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Thu, 23 Jul 2026 09:28:29 -0700 Subject: [PATCH 2/3] Update test_generator_error.py --- edg/core/test_generator_error.py | 1 + 1 file changed, 1 insertion(+) diff --git a/edg/core/test_generator_error.py b/edg/core/test_generator_error.py index 622a9d82c..f22d66b7f 100644 --- a/edg/core/test_generator_error.py +++ b/edg/core/test_generator_error.py @@ -7,6 +7,7 @@ class GeneratorErrorTop(DesignTop): + @override def contents(self) -> None: super().contents() self.generator = self.Block(GeneratorRaises(42, "bad")) From 9af8e0c4091782339ccafb6c5962348cc5c1a962 Mon Sep 17 00:00:00 2001 From: Richard Lin Date: Thu, 23 Jul 2026 09:35:25 -0700 Subject: [PATCH 3/3] improve --- edg/core/Generator.py | 4 ++-- edg/core/test_generator_error.py | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/edg/core/Generator.py b/edg/core/Generator.py index 336c3bd6c..b1a0d6bf2 100644 --- a/edg/core/Generator.py +++ b/edg/core/Generator.py @@ -146,11 +146,11 @@ def _generated_def_to_proto( self.generate() except Exception as e: params_list_str = ", ".join( - f"{self._name_of_child(param, self, allow_unknown=True)}={self._generator_param_values[param]}" + f"{self._name_of_child(param, self, allow_unknown=True)}={self._generator_param_values[param]!r}" for param in self._generator_params_list ) raise RuntimeError( - f"Generator {self.__class__.__name__} with parameters {{{params_list_str}}} raised exception" + f"Generator {self.__class__.__name__} with parameters {{{params_list_str}}} raised exception: {e!r}" ) from e elif self._generator is not None: # legacy generator style fn_args = [ diff --git a/edg/core/test_generator_error.py b/edg/core/test_generator_error.py index f22d66b7f..6bba73595 100644 --- a/edg/core/test_generator_error.py +++ b/edg/core/test_generator_error.py @@ -53,3 +53,5 @@ def test_non_arg_generator(self) -> None: def test_generator_raises(self) -> None: with self.assertRaises(CompilerCheckError): ScalaCompiler.compile(GeneratorErrorTop) + # TODO: inspect the exception, note that it is consumed by the Scala compiler + # and not summarized in the CompilerCheckError