def parse_json_step()

in cbmc_viewer/tracet.py [0:0]


def parse_json_step(step, root=None):
    """Parse a step of a json trace."""

    if step['hidden']: # Skip most hidden steps, but...
        # ...don't skip a function call or return
        function_call_step = step['stepType'] in ['function-call', 'function-return']
        # ...don't skip static initialization (do skip internal assignments)
        visible_assignment_step = (
            step['stepType'] == 'assignment' and
            not step['lhs'].startswith('__CPROVER') and
            not step['lhs'].startswith('return_value_')
        )
        if not function_call_step and not visible_assignment_step:
            logging.debug('Skipping step type: %s', step['stepType'])
            return None

    kind = step['stepType']
    parser = (parse_json_failure if kind == 'failure' else
              parse_json_assignment if kind == 'assignment' else
              parse_json_function_call if kind == 'function-call' else
              parse_json_function_return if kind == 'function-return' else
              parse_json_location_only if kind == 'location-only' else None)
    if parser is None:
        # skip uninteresting kinds of steps
        if kind == 'loop-head':
            logging.debug('Skipping step type: %s', kind)
            return None

        # warn about skipping a potentially interesting kind of step
        logging.warning('Skipping step type: %s', kind)
        return None

    parsed_step = parser(step, root)
    if parsed_step:
        parsed_step['hidden'] = bool(step['hidden'])
    return parsed_step