xref: /llvm-project/cross-project-tests/debuginfo-tests/dexter/dex/command/commands/DexLabel.py (revision 45a40c163932d12b72b33bd1d8a84519392b5d39)
1# DExTer : Debugging Experience Tester
2# ~~~~~~   ~         ~~         ~   ~~
3#
4# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5# See https://llvm.org/LICENSE.txt for license information.
6# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7"""Command used to give a line in a test a named psuedonym. Every DexLabel has
8   a line number and Label string component.
9"""
10
11from dex.command.CommandBase import CommandBase
12
13
14class DexLabel(CommandBase):
15    def __init__(self, label, **kwargs):
16        if not isinstance(label, str):
17            raise TypeError("invalid argument type")
18
19        try:
20            self.on_line = kwargs.pop("on_line")
21        except KeyError:
22            # We cannot use self.lineno because it hasn't been set yet.
23            pass
24        if kwargs:
25            raise TypeError(f'unexpected named args: {", ".join(kwargs)}')
26
27        self._label = label
28        super(DexLabel, self).__init__()
29
30    def get_line(self):
31        return getattr(self, "on_line", self.lineno)
32
33    def get_as_pair(self):
34        return (self._label, self.get_line())
35
36    @staticmethod
37    def get_name():
38        return __class__.__name__
39
40    def eval(self):
41        return self._label
42