summaryrefslogtreecommitdiffstats
path: root/debuginfo-tests/dexter/dex/command/CommandBase.py
diff options
context:
space:
mode:
Diffstat (limited to 'debuginfo-tests/dexter/dex/command/CommandBase.py')
-rw-r--r--debuginfo-tests/dexter/dex/command/CommandBase.py54
1 files changed, 54 insertions, 0 deletions
diff --git a/debuginfo-tests/dexter/dex/command/CommandBase.py b/debuginfo-tests/dexter/dex/command/CommandBase.py
new file mode 100644
index 00000000000..49e908623df
--- /dev/null
+++ b/debuginfo-tests/dexter/dex/command/CommandBase.py
@@ -0,0 +1,54 @@
+# DExTer : Debugging Experience Tester
+# ~~~~~~ ~ ~~ ~ ~~
+#
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+"""Base class for all DExTer commands, where a command is a specific Python
+function that can be embedded into a comment in the source code under test
+which will then be executed by DExTer during debugging.
+"""
+
+import abc
+from typing import List
+
+class CommandBase(object, metaclass=abc.ABCMeta):
+ def __init__(self):
+ self.path = None
+ self.lineno = None
+ self.raw_text = ''
+
+ def get_label_args(self):
+ return list()
+
+ def has_labels(self):
+ return False
+
+ @abc.abstractstaticmethod
+ def get_name():
+ """This abstract method is usually implemented in subclasses as:
+ return __class__.__name__
+ """
+
+ def get_watches(self) -> List[str]:
+ return []
+
+ @abc.abstractmethod
+ def eval(self):
+ """Evaluate the command.
+
+ This will be called when constructing a Heuristic object to determine
+ the debug score.
+
+ Returns:
+ The logic for handling the result of CommandBase.eval() must be
+ defined in Heuristic.__init__() so a consitent return type between
+ commands is not enforced.
+ """
+
+ @staticmethod
+ def get_subcommands() -> dict:
+ """Returns a dictionary of subcommands in the form {name: command} or
+ None if no subcommands are required.
+ """
+ return None
OpenPOWER on IntegriCloud