xref: /llvm-project/cross-project-tests/debuginfo-tests/dexter/dex/command/commands/DexExpectStepOrder.py (revision 1650f1b3d7f97ca95eb930984e74bdfd91b02b4e)
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 Hendersonfrom dex.command.CommandBase import CommandBase
91364750dSJames Hendersonfrom dex.dextIR import LocIR
101364750dSJames Hendersonfrom dex.dextIR import ValueIR
111364750dSJames Henderson
12f98ee40fSTobias Hieta
131364750dSJames Hendersonclass DexExpectStepOrder(CommandBase):
141364750dSJames Henderson    """Expect the line every `DexExpectStepOrder` is found on to be stepped on
15*1650f1b3SJay Foad    in `order`. Each instance must have a set of unique ascending indices.
161364750dSJames Henderson
171364750dSJames Henderson    DexExpectStepOrder(*order)
181364750dSJames Henderson
191364750dSJames Henderson    See Commands.md for more info.
201364750dSJames Henderson    """
211364750dSJames Henderson
2203c45f14SBen Mudd    def __init__(self, *args, **kwargs):
231364750dSJames Henderson        if not args:
24f98ee40fSTobias Hieta            raise TypeError("Need at least one order number")
251364750dSJames Henderson
26f98ee40fSTobias Hieta        if "on_line" in kwargs:
2703c45f14SBen Mudd            try:
28f98ee40fSTobias Hieta                on_line = kwargs.pop("on_line")
2903c45f14SBen Mudd                self.on_line = int(on_line)
3003c45f14SBen Mudd            except ValueError:
31f98ee40fSTobias Hieta                raise ValueError(
32f98ee40fSTobias Hieta                    "on_line value '{0}' cannot be parsed to an integer".format(on_line)
33f98ee40fSTobias Hieta                )
341364750dSJames Henderson        self.sequence = [int(x) for x in args]
351364750dSJames Henderson        super(DexExpectStepOrder, self).__init__()
361364750dSJames Henderson
371364750dSJames Henderson    @staticmethod
381364750dSJames Henderson    def get_name():
391364750dSJames Henderson        return __class__.__name__
401364750dSJames Henderson
4103c45f14SBen Mudd    def get_line(self):
42f98ee40fSTobias Hieta        return self.on_line if hasattr(self, "on_line") else self.lineno
4303c45f14SBen Mudd
441364750dSJames Henderson    def eval(self, step_info):
45f98ee40fSTobias Hieta        return {
46f98ee40fSTobias Hieta            "DexExpectStepOrder": ValueIR(
47f98ee40fSTobias Hieta                expression=str(step_info.current_location.lineno),
48f98ee40fSTobias Hieta                value=str(step_info.step_index),
49f98ee40fSTobias Hieta                type_name=None,
501364750dSJames Henderson                error_string=None,
511364750dSJames Henderson                could_evaluate=True,
521364750dSJames Henderson                is_optimized_away=True,
53f98ee40fSTobias Hieta                is_irretrievable=False,
54f98ee40fSTobias Hieta            )
55f98ee40fSTobias Hieta        }
56