xref: /llvm-project/cross-project-tests/debuginfo-tests/dexter/dex/command/commands/DexUnreachable.py (revision f98ee40f4b5d7474fc67e82824bf6abbaedb7b1c)
11364750dSJames Henderson# DExTer : Debugging Experience Tester
21364750dSJames Henderson# ~~~~~~   ~         ~~         ~   ~~
31364750dSJames Henderson#
41364750dSJames Henderson# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
51364750dSJames Henderson# See https://llvm.org/LICENSE.txt for license information.
61364750dSJames Henderson# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
71364750dSJames Henderson
81364750dSJames Henderson
91364750dSJames Hendersonfrom dex.command.CommandBase import CommandBase
101364750dSJames Hendersonfrom dex.dextIR import ValueIR
111364750dSJames Henderson
121364750dSJames Henderson
131364750dSJames Hendersonclass DexUnreachable(CommandBase):
141364750dSJames Henderson    """Expect the source line this is found on will never be stepped on to.
151364750dSJames Henderson
161364750dSJames Henderson    DexUnreachable()
171364750dSJames Henderson
181364750dSJames Henderson    See Commands.md for more info.
191364750dSJames Henderson    """
201364750dSJames Henderson
210f92c113SJeremy Morse    def __init__(self, *args, **kwargs):
220f92c113SJeremy Morse        if len(args) != 0:
230f92c113SJeremy Morse            raise TypeError("DexUnreachable takes no positional arguments")
24*f98ee40fSTobias Hieta        if "on_line" in kwargs:
25*f98ee40fSTobias Hieta            on_line = kwargs.pop("on_line")
260f92c113SJeremy Morse            self._from_line = on_line
270f92c113SJeremy Morse            self._to_line = on_line
28*f98ee40fSTobias Hieta        elif "from_line" in kwargs and "to_line" in kwargs:
29*f98ee40fSTobias Hieta            self._from_line = kwargs.pop("from_line")
30*f98ee40fSTobias Hieta            self._to_line = kwargs.pop("to_line")
31*f98ee40fSTobias Hieta        elif "from_line" in kwargs or "to_line" in kwargs:
320f92c113SJeremy Morse            raise TypeError("Must provide both from_line and to_line to DexUnreachable")
330f92c113SJeremy Morse
340f92c113SJeremy Morse        if len(kwargs) > 0:
350f92c113SJeremy Morse            raise TypeError("Unexpected kwargs {}".format(kwargs.keys()))
361364750dSJames Henderson        super(DexUnreachable, self).__init__()
371364750dSJames Henderson        pass
381364750dSJames Henderson
391364750dSJames Henderson    @staticmethod
401364750dSJames Henderson    def get_name():
411364750dSJames Henderson        return __class__.__name__
421364750dSJames Henderson
431364750dSJames Henderson    def eval(self, step_info):
441364750dSJames Henderson        # If we're ever called, at all, then we're evaluating a line that has
451364750dSJames Henderson        # been marked as unreachable. Which means a failure.
46*f98ee40fSTobias Hieta        vir = ValueIR(
47*f98ee40fSTobias Hieta            expression="Unreachable",
48*f98ee40fSTobias Hieta            value="True",
49*f98ee40fSTobias Hieta            type_name=None,
501364750dSJames Henderson            error_string=None,
511364750dSJames Henderson            could_evaluate=True,
521364750dSJames Henderson            is_optimized_away=True,
53*f98ee40fSTobias Hieta            is_irretrievable=False,
54*f98ee40fSTobias Hieta        )
55*f98ee40fSTobias Hieta        return {"DexUnreachable": vir}
56