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