mirror of
https://github.com/YosysHQ/sby.git
synced 2025-04-12 16:28:17 +00:00
sby: core: cleaned up the [stage]
section parsing
This commit is contained in:
parent
ad4f506d2a
commit
6c959577f3
|
@ -259,6 +259,7 @@ class SbyConfig:
|
||||||
def parse_config(self, f):
|
def parse_config(self, f):
|
||||||
mode = None
|
mode = None
|
||||||
engine_mode = None
|
engine_mode = None
|
||||||
|
stage_name = None
|
||||||
|
|
||||||
for line in f:
|
for line in f:
|
||||||
raw_line = line
|
raw_line = line
|
||||||
|
@ -326,7 +327,7 @@ class SbyConfig:
|
||||||
if args is None:
|
if args is None:
|
||||||
self.error(f"sby file syntax error: '[stage]' section expects arguments, got none")
|
self.error(f"sby file syntax error: '[stage]' section expects arguments, got none")
|
||||||
|
|
||||||
section_args = args.split(" ", maxsplit = 1)
|
section_args = args.strip().split(maxsplit = 1)
|
||||||
|
|
||||||
|
|
||||||
if len(section_args) == 1:
|
if len(section_args) == 1:
|
||||||
|
@ -424,31 +425,40 @@ class SbyConfig:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if mode == "stage":
|
if mode == "stage":
|
||||||
kvp = line.split()
|
_valid_options = (
|
||||||
if key is None or key == '':
|
"mode", "depth", "timeout", "expect", "engine",
|
||||||
self.error(f"sby file syntax error: in stage mode but unknown key")
|
"cutpoint", "enable", "disable", "assume", "skip",
|
||||||
|
"check", "prove", "abstract", "setsel"
|
||||||
|
)
|
||||||
|
|
||||||
if len(kvp) == 0:
|
args = line.strip().split(maxsplit = 1)
|
||||||
continue
|
|
||||||
|
|
||||||
if kvp[0] not in ("mode", "depth", "timeout", "expect", "engine",
|
if args is None:
|
||||||
"cutpoint", "enable", "disable", "assume", "skip",
|
self.error(f"sby file syntax error: unknown key in '[stage]' section")
|
||||||
"check", "prove", "abstract", "setsel") or len(kvp) < 2:
|
|
||||||
self.error(f"sby file syntax error: {line}")
|
if len(args) < 2:
|
||||||
|
self.error(f"sby file syntax error: entry in '[stage]' must have an argument, got {' '.join(args)}")
|
||||||
|
|
||||||
|
if args[0] not in _valid_options:
|
||||||
|
self.error(f"sby file syntax error: expected on of '{', '.join(_valid_options)}' in '[stage]' section, got '{args[0]}'")
|
||||||
else:
|
else:
|
||||||
stmt = kvp[0]
|
opt_key = args[0]
|
||||||
if stmt == 'setsel':
|
opt_args = args[1].strip().split()
|
||||||
if len(kvp[1:]) < 2:
|
if opt_key == 'setsel':
|
||||||
self.error(f"sby file syntax error: 'setsel' statement takes 2 arguments, got {len(kvp[1:])}")
|
|
||||||
elif kvp[1][0] != '@':
|
if len(opt_args) != 2:
|
||||||
self.error(f"sby file syntax error: 'setsel' statement expects an '@' prefixed name as the first parameter, got {line}")
|
self.error(f"sby file syntax error: 'setsel' statement in '[stage]' section takes exactly 2 arguments, got {len(opt_args)}")
|
||||||
else:
|
|
||||||
name = kvp[1][1:]
|
if opt_args[0][0] != '@':
|
||||||
self.stage[key][stmt] = {
|
self.error(f"sby file syntax error: 'setsel' statement in '[stage]' section expects an '@' prefixed name as the first parameter, got {opt_args[0]}")
|
||||||
'name': name, 'pattern': kvp[2:]
|
|
||||||
}
|
name = opt_args[0][1:]
|
||||||
|
self.stage[stage_name][opt_key] = {
|
||||||
|
'name': name, 'pattern': opt_args[2:]
|
||||||
|
}
|
||||||
|
|
||||||
else:
|
else:
|
||||||
self.stage[key][stmt] = kvp[1:]
|
self.stage[stage_name][opt_key] = opt_args[1:]
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if mode == "script":
|
if mode == "script":
|
||||||
|
|
Loading…
Reference in a new issue