hdl.dsl: raise SyntaxError for mis-nested If/Elif/Else statements
This commit is contained in:
parent
d824795c2c
commit
7443f89200
|
@ -226,6 +226,7 @@ class Module(_ModuleBuilderRoot, Elaboratable):
|
|||
cond = self._check_signed_cond(cond)
|
||||
src_loc = tracer.get_src_loc(src_loc_at=1)
|
||||
if_data = self._set_ctrl("If", {
|
||||
"depth": self.domain._depth,
|
||||
"tests": [],
|
||||
"bodies": [],
|
||||
"src_loc": src_loc,
|
||||
|
@ -249,7 +250,7 @@ class Module(_ModuleBuilderRoot, Elaboratable):
|
|||
cond = self._check_signed_cond(cond)
|
||||
src_loc = tracer.get_src_loc(src_loc_at=1)
|
||||
if_data = self._get_ctrl("If")
|
||||
if if_data is None or len(if_data["tests"]) == 0:
|
||||
if if_data is None or if_data["depth"] != self.domain._depth:
|
||||
raise SyntaxError("Elif without preceding If")
|
||||
try:
|
||||
_outer_case, self._statements = self._statements, []
|
||||
|
@ -268,7 +269,7 @@ class Module(_ModuleBuilderRoot, Elaboratable):
|
|||
self._check_context("Else", context=None)
|
||||
src_loc = tracer.get_src_loc(src_loc_at=1)
|
||||
if_data = self._get_ctrl("If")
|
||||
if if_data is None:
|
||||
if if_data is None or if_data["depth"] != self.domain._depth:
|
||||
raise SyntaxError("Else without preceding If/Elif")
|
||||
try:
|
||||
_outer_case, self._statements = self._statements, []
|
||||
|
|
|
@ -281,6 +281,34 @@ class DSLTestCase(FHDLTestCase):
|
|||
with m.Else():
|
||||
pass
|
||||
|
||||
def test_Else_wrong_nested(self):
|
||||
m = Module()
|
||||
with m.If(self.s1):
|
||||
with self.assertRaisesRegex(SyntaxError,
|
||||
r"^Else without preceding If/Elif$"):
|
||||
with m.Else():
|
||||
pass
|
||||
|
||||
def test_Elif_Elif_wrong_nested(self):
|
||||
m = Module()
|
||||
with m.If(self.s1):
|
||||
pass
|
||||
with m.Elif(self.s2):
|
||||
with self.assertRaisesRegex(SyntaxError,
|
||||
r"^Elif without preceding If$"):
|
||||
with m.Elif(self.s3):
|
||||
pass
|
||||
|
||||
def test_Else_Else_wrong_nested(self):
|
||||
m = Module()
|
||||
with m.If(self.s1):
|
||||
pass
|
||||
with m.Else():
|
||||
with self.assertRaisesRegex(SyntaxError,
|
||||
r"^Else without preceding If/Elif$"):
|
||||
with m.Else():
|
||||
pass
|
||||
|
||||
def test_If_wide(self):
|
||||
m = Module()
|
||||
with m.If(self.w1):
|
||||
|
|
Loading…
Reference in a new issue