diff --git a/sbysrc/sby.py b/sbysrc/sby.py index 0e966e7..82c35e8 100644 --- a/sbysrc/sby.py +++ b/sbysrc/sby.py @@ -388,6 +388,7 @@ if dump_taskinfo: "mode": cfg.options.get("mode"), "engines": cfg.engines, "script": cfg.script, + "cancelledby": cfg.cancelledby, } print(json.dumps(taskinfo, indent=2)) sys.exit(0) diff --git a/sbysrc/sby_core.py b/sbysrc/sby_core.py index 956ae0b..3980db5 100644 --- a/sbysrc/sby_core.py +++ b/sbysrc/sby_core.py @@ -177,7 +177,7 @@ class SbyProc: return for task in self.task.taskloop.tasks_done: - if task.name == "killer": + if task.name in self.task.cancelledby: if not self.silent: self.task.log(f"Cancelled by {task.name!r} task") self.task.cancel() @@ -290,6 +290,7 @@ class SbyConfig: self.autotune_config = None self.files = dict() self.verbatim_files = dict() + self.cancelledby = list() pass def parse_config(self, f): @@ -410,6 +411,12 @@ class SbyConfig: import sby_autotune self.autotune_config = sby_autotune.SbyAutotuneConfig() continue + + if section == "cancelledby": + mode = "cancelledby" + if args is not None: + self.error(f"sby file syntax error: '[cancelledby]' section does not accept any arguments. got {args}") + continue if section == "file": mode = "file" @@ -444,6 +451,12 @@ class SbyConfig: if mode == "autotune": self.autotune_config.config_line(self, line) continue + + if mode == "cancelledby": + taskname = line.strip() + if taskname: + self.cancelledby.append(taskname) + continue if mode == "engines": args = line.strip().split() diff --git a/tests/intertask/killer.sby b/tests/intertask/killer.sby index 4c3e527..8092c8c 100644 --- a/tests/intertask/killer.sby +++ b/tests/intertask/killer.sby @@ -1,6 +1,12 @@ [tasks] -killer -aborted +c +b +a + +[cancelledby] +a: b +b: c +c: a [options] mode bmc @@ -8,12 +14,12 @@ depth 100 expect fail,cancelled [engines] -killer: btor btormc -aborted: smtbmc boolector +btor btormc [script] -killer: read -define MAX=7 -aborted: read -define MAX=14 +a: read -define MAX=7 +b: read -define MAX=14 +c: read -define MAX=3 read -formal demo.sv prep -top demo