diff options
Diffstat (limited to 'debuginfo-tests/dexter/dex/command/CommandBase.py')
-rw-r--r-- | debuginfo-tests/dexter/dex/command/CommandBase.py | 54 |
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 |