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)
|
cond = self._check_signed_cond(cond)
|
||||||
src_loc = tracer.get_src_loc(src_loc_at=1)
|
src_loc = tracer.get_src_loc(src_loc_at=1)
|
||||||
if_data = self._set_ctrl("If", {
|
if_data = self._set_ctrl("If", {
|
||||||
|
"depth": self.domain._depth,
|
||||||
"tests": [],
|
"tests": [],
|
||||||
"bodies": [],
|
"bodies": [],
|
||||||
"src_loc": src_loc,
|
"src_loc": src_loc,
|
||||||
|
@ -249,7 +250,7 @@ class Module(_ModuleBuilderRoot, Elaboratable):
|
||||||
cond = self._check_signed_cond(cond)
|
cond = self._check_signed_cond(cond)
|
||||||
src_loc = tracer.get_src_loc(src_loc_at=1)
|
src_loc = tracer.get_src_loc(src_loc_at=1)
|
||||||
if_data = self._get_ctrl("If")
|
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")
|
raise SyntaxError("Elif without preceding If")
|
||||||
try:
|
try:
|
||||||
_outer_case, self._statements = self._statements, []
|
_outer_case, self._statements = self._statements, []
|
||||||
|
@ -268,7 +269,7 @@ class Module(_ModuleBuilderRoot, Elaboratable):
|
||||||
self._check_context("Else", context=None)
|
self._check_context("Else", context=None)
|
||||||
src_loc = tracer.get_src_loc(src_loc_at=1)
|
src_loc = tracer.get_src_loc(src_loc_at=1)
|
||||||
if_data = self._get_ctrl("If")
|
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")
|
raise SyntaxError("Else without preceding If/Elif")
|
||||||
try:
|
try:
|
||||||
_outer_case, self._statements = self._statements, []
|
_outer_case, self._statements = self._statements, []
|
||||||
|
|
|
@ -281,6 +281,34 @@ class DSLTestCase(FHDLTestCase):
|
||||||
with m.Else():
|
with m.Else():
|
||||||
pass
|
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):
|
def test_If_wide(self):
|
||||||
m = Module()
|
m = Module()
|
||||||
with m.If(self.w1):
|
with m.If(self.w1):
|
||||||
|
|
Loading…
Reference in a new issue