File: CommandBase.py

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (58 lines) | stat: -rw-r--r-- 1,749 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 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