Skip to content

Commit 182330f

Browse files
committed
hdl._dsl: forbid empty string as submodule name.
This is semantically ambiguous and breaks the RTLIL emitter. Fixes amaranth-lang#1209.
1 parent 7870eb3 commit 182330f

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-0
lines changed

amaranth/hdl/_dsl.py

+2
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,8 @@ def _add_submodule(self, submodule, name=None, src_loc=None):
654654
if name == None:
655655
self._anon_submodules.append((submodule, src_loc))
656656
else:
657+
if name == "":
658+
raise NameError("Submodule name must not be empty")
657659
if name in self._named_submodules:
658660
raise NameError(f"Submodule named '{name}' already exists")
659661
self._named_submodules[name] = (submodule, src_loc)

tests/test_hdl_dsl.py

+6
Original file line numberDiff line numberDiff line change
@@ -887,6 +887,12 @@ def test_submodule_named_conflict(self):
887887
with self.assertRaisesRegex(NameError, r"^Submodule named 'foo' already exists$"):
888888
m1.submodules.foo = m2
889889

890+
def test_submodule_named_empty(self):
891+
m1 = Module()
892+
m2 = Module()
893+
with self.assertRaisesRegex(NameError, r"^Submodule name must not be empty$"):
894+
m1.submodules[""] = m2
895+
890896
def test_submodule_get(self):
891897
m1 = Module()
892898
m2 = Module()

0 commit comments

Comments
 (0)