Files
clang-p2996/cross-project-tests/debuginfo-tests/dexter/dex/command/CommandBase.py
Tobias Hieta f98ee40f4b [NFC][Py Reformat] Reformat python files in the rest of the dirs
This is an ongoing series of commits that are reformatting our
Python code. This catches the last of the python files to
reformat. Since they where so few I bunched them together.

Reformatting is done with `black`.

If you end up having problems merging this commit because you
have made changes to a python file, the best way to handle that
is to run git checkout --ours <yourfile> and then reformat it
with black.

If you run into any problems, post to discourse about it and
we will try to help.

RFC Thread below:

https://discourse.llvm.org/t/rfc-document-and-standardize-python-code-style

Reviewed By: jhenderson, #libc, Mordante, sivachandra

Differential Revision: https://reviews.llvm.org/D150784
2023-05-25 11:17:05 +02:00

59 lines
1.7 KiB
Python

# 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 collections import namedtuple
from typing import List
StepExpectInfo = namedtuple("StepExpectInfo", "expression, path, frame_idx, line_range")
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