# 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


from dex.command.CommandBase import CommandBase
from dex.dextIR import ValueIR


class DexUnreachable(CommandBase):
    """Expect the source line this is found on will never be stepped on to.

    DexUnreachable()

    See Commands.md for more info.
    """

    def __init(self):
        super(DexUnreachable, self).__init__()
        pass

    @staticmethod
    def get_name():
        return __class__.__name__

    def eval(self, step_info):
        # If we're ever called, at all, then we're evaluating a line that has
        # been marked as unreachable. Which means a failure.
        vir = ValueIR(expression="Unreachable",
                      value="True", type_name=None,
                      error_string=None,
                      could_evaluate=True,
                      is_optimized_away=True,
                      is_irretrievable=False)
        return {'DexUnreachable' : vir}
