bool FIRCLSDwarfExpressionMachineExecuteNextOpcode()

in Crashlytics/Crashlytics/Unwind/Dwarf/FIRCLSDwarfExpressionMachine.c [191:299]


bool FIRCLSDwarfExpressionMachineExecuteNextOpcode(FIRCLSDwarfExpressionMachine *machine) {
  if (!FIRCLSIsValidPointer(machine)) {
    return false;
  }

  const uint8_t opcode = FIRCLSParseUint8AndAdvance(&machine->dataCursor);

  bool success = false;

  switch (opcode) {
    case DW_OP_deref:
      success = FIRCLSDwarfExpressionMachineExecute_deref(machine);
      break;
    case DW_OP_dup:
      success = FIRCLSDwarfExpressionMachineExecute_dup(machine);
      break;
    case DW_OP_and:
      success = FIRCLSDwarfExpressionMachineExecute_and(machine);
      break;
    case DW_OP_plus:
      success = FIRCLSDwarfExpressionMachineExecute_plus(machine);
      break;
    case DW_OP_swap:
      success = FIRCLSDwarfExpressionMachineExecute_swap(machine);
      break;
    case DW_OP_plus_uconst:
      success = FIRCLSDwarfExpressionMachineExecute_plus_uconst(machine);
      break;
    case DW_OP_ne:
      success = FIRCLSDwarfExpressionMachineExecute_ne(machine);
      break;
    case DW_OP_lit0:
    case DW_OP_lit1:
    case DW_OP_lit2:
    case DW_OP_lit3:
    case DW_OP_lit4:
    case DW_OP_lit5:
    case DW_OP_lit6:
    case DW_OP_lit7:
    case DW_OP_lit8:
    case DW_OP_lit9:
    case DW_OP_lit10:
    case DW_OP_lit11:
    case DW_OP_lit12:
    case DW_OP_lit13:
    case DW_OP_lit14:
    case DW_OP_lit15:
    case DW_OP_lit16:
    case DW_OP_lit17:
    case DW_OP_lit18:
    case DW_OP_lit19:
    case DW_OP_lit20:
    case DW_OP_lit21:
    case DW_OP_lit22:
    case DW_OP_lit23:
    case DW_OP_lit24:
    case DW_OP_lit25:
    case DW_OP_lit26:
    case DW_OP_lit27:
    case DW_OP_lit28:
    case DW_OP_lit29:
    case DW_OP_lit30:
    case DW_OP_lit31:
      success = FIRCLSDwarfExpressionMachineExecute_litN(machine, opcode);
      break;
    case DW_OP_breg0:
    case DW_OP_breg1:
    case DW_OP_breg2:
    case DW_OP_breg3:
    case DW_OP_breg4:
    case DW_OP_breg5:
    case DW_OP_breg6:
    case DW_OP_breg7:
    case DW_OP_breg8:
    case DW_OP_breg9:
    case DW_OP_breg10:
    case DW_OP_breg11:
    case DW_OP_breg12:
    case DW_OP_breg13:
    case DW_OP_breg14:
    case DW_OP_breg15:
    case DW_OP_breg16:
    case DW_OP_breg17:
    case DW_OP_breg18:
    case DW_OP_breg19:
    case DW_OP_breg20:
    case DW_OP_breg21:
    case DW_OP_breg22:
    case DW_OP_breg23:
    case DW_OP_breg24:
    case DW_OP_breg25:
    case DW_OP_breg26:
    case DW_OP_breg27:
    case DW_OP_breg28:
    case DW_OP_breg29:
    case DW_OP_breg30:
    case DW_OP_breg31:
      success = FIRCLSDwarfExpressionMachineExecute_bregN(machine, opcode);
      break;
    case DW_OP_deref_size:
      success = FIRCLSDwarfExpressionMachineExecute_deref_size(machine);
      break;
    default:
      FIRCLSSDKLog("Error: Unrecognized DWARF expression opcode 0x%x\n", opcode);
      return false;
  }

  return success;
}