3
0
Fork 0
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:
Aki Van Ness 2022-08-04 06:56:11 -04:00
parent ad4f506d2a
commit 6c959577f3
No known key found for this signature in database
GPG key ID: C629E8EC06327BEE

View file

@ -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":