//===-- DWARFDefines.cpp ----------------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#include "DWARFDefines.h"
#include "lldb/Utility/ConstString.h"
#include <cstdio>
#include <cstring>
#include <string>

namespace lldb_private {

const char *DW_TAG_value_to_name(uint32_t val) {
  static char invalid[100];

  if (val == 0)
    return "NULL";

  llvm::StringRef llvmstr = llvm::dwarf::TagString(val);
  if (llvmstr.empty()) {
    snprintf(invalid, sizeof(invalid), "Unknown DW_TAG constant: 0x%x", val);
    return invalid;
  }
  return llvmstr.data();
}

const char *DW_CHILDREN_value_to_name(uint8_t val) {
  static char invalid[100];
  llvm::StringRef llvmstr = llvm::dwarf::ChildrenString(val);
  if (llvmstr.empty()) {
    snprintf(invalid, sizeof(invalid), "Unknown DW_CHILDREN constant: 0x%x",
             val);
    return invalid;
  }
  return llvmstr.data();
}

const char *DW_AT_value_to_name(uint32_t val) {
  static char invalid[100];
  llvm::StringRef llvmstr = llvm::dwarf::AttributeString(val);
  if (llvmstr.empty()) {
    snprintf(invalid, sizeof(invalid), "Unknown DW_AT constant: 0x%x", val);
    return invalid;
  }
  return llvmstr.data();
}

const char *DW_FORM_value_to_name(uint32_t val) {
  static char invalid[100];
  llvm::StringRef llvmstr = llvm::dwarf::FormEncodingString(val);
  if (llvmstr.empty()) {
    snprintf(invalid, sizeof(invalid), "Unknown DW_FORM constant: 0x%x", val);
    return invalid;
  }
  return llvmstr.data();
}

const char *DW_OP_value_to_name(uint32_t val) {
  static char invalid[100];
  llvm::StringRef llvmstr = llvm::dwarf::OperationEncodingString(val);
  if (llvmstr.empty()) {
    snprintf(invalid, sizeof(invalid), "Unknown DW_OP constant: 0x%x", val);
    return invalid;
  }
  return llvmstr.data();
}

DRC_class DW_OP_value_to_class(uint32_t val) {
  switch (val) {
  case 0x03:
    return DRC_ONEOPERAND;
  case 0x06:
    return DRC_ZEROOPERANDS;
  case 0x08:
    return DRC_ONEOPERAND;
  case 0x09:
    return DRC_ONEOPERAND;
  case 0x0a:
    return DRC_ONEOPERAND;
  case 0x0b:
    return DRC_ONEOPERAND;
  case 0x0c:
    return DRC_ONEOPERAND;
  case 0x0d:
    return DRC_ONEOPERAND;
  case 0x0e:
    return DRC_ONEOPERAND;
  case 0x0f:
    return DRC_ONEOPERAND;
  case 0x10:
    return DRC_ONEOPERAND;
  case 0x11:
    return DRC_ONEOPERAND;
  case 0x12:
    return DRC_ZEROOPERANDS;
  case 0x13:
    return DRC_ZEROOPERANDS;
  case 0x14:
    return DRC_ZEROOPERANDS;
  case 0x15:
    return DRC_ONEOPERAND;
  case 0x16:
    return DRC_ZEROOPERANDS;
  case 0x17:
    return DRC_ZEROOPERANDS;
  case 0x18:
    return DRC_ZEROOPERANDS;
  case 0x19:
    return DRC_ZEROOPERANDS;
  case 0x1a:
    return DRC_ZEROOPERANDS;
  case 0x1b:
    return DRC_ZEROOPERANDS;
  case 0x1c:
    return DRC_ZEROOPERANDS;
  case 0x1d:
    return DRC_ZEROOPERANDS;
  case 0x1e:
    return DRC_ZEROOPERANDS;
  case 0x1f:
    return DRC_ZEROOPERANDS;
  case 0x20:
    return DRC_ZEROOPERANDS;
  case 0x21:
    return DRC_ZEROOPERANDS;
  case 0x22:
    return DRC_ZEROOPERANDS;
  case 0x23:
    return DRC_ONEOPERAND;
  case 0x24:
    return DRC_ZEROOPERANDS;
  case 0x25:
    return DRC_ZEROOPERANDS;
  case 0x26:
    return DRC_ZEROOPERANDS;
  case 0x27:
    return DRC_ZEROOPERANDS;
  case 0x2f:
    return DRC_ONEOPERAND;
  case 0x28:
    return DRC_ONEOPERAND;
  case 0x29:
    return DRC_ZEROOPERANDS;
  case 0x2a:
    return DRC_ZEROOPERANDS;
  case 0x2b:
    return DRC_ZEROOPERANDS;
  case 0x2c:
    return DRC_ZEROOPERANDS;
  case 0x2d:
    return DRC_ZEROOPERANDS;
  case 0x2e:
    return DRC_ZEROOPERANDS;
  case 0x30:
    return DRC_ZEROOPERANDS;
  case 0x31:
    return DRC_ZEROOPERANDS;
  case 0x32:
    return DRC_ZEROOPERANDS;
  case 0x33:
    return DRC_ZEROOPERANDS;
  case 0x34:
    return DRC_ZEROOPERANDS;
  case 0x35:
    return DRC_ZEROOPERANDS;
  case 0x36:
    return DRC_ZEROOPERANDS;
  case 0x37:
    return DRC_ZEROOPERANDS;
  case 0x38:
    return DRC_ZEROOPERANDS;
  case 0x39:
    return DRC_ZEROOPERANDS;
  case 0x3a:
    return DRC_ZEROOPERANDS;
  case 0x3b:
    return DRC_ZEROOPERANDS;
  case 0x3c:
    return DRC_ZEROOPERANDS;
  case 0x3d:
    return DRC_ZEROOPERANDS;
  case 0x3e:
    return DRC_ZEROOPERANDS;
  case 0x3f:
    return DRC_ZEROOPERANDS;
  case 0x40:
    return DRC_ZEROOPERANDS;
  case 0x41:
    return DRC_ZEROOPERANDS;
  case 0x42:
    return DRC_ZEROOPERANDS;
  case 0x43:
    return DRC_ZEROOPERANDS;
  case 0x44:
    return DRC_ZEROOPERANDS;
  case 0x45:
    return DRC_ZEROOPERANDS;
  case 0x46:
    return DRC_ZEROOPERANDS;
  case 0x47:
    return DRC_ZEROOPERANDS;
  case 0x48:
    return DRC_ZEROOPERANDS;
  case 0x49:
    return DRC_ZEROOPERANDS;
  case 0x4a:
    return DRC_ZEROOPERANDS;
  case 0x4b:
    return DRC_ZEROOPERANDS;
  case 0x4c:
    return DRC_ZEROOPERANDS;
  case 0x4d:
    return DRC_ZEROOPERANDS;
  case 0x4e:
    return DRC_ZEROOPERANDS;
  case 0x4f:
    return DRC_ZEROOPERANDS;
  case 0x50:
    return DRC_ZEROOPERANDS;
  case 0x51:
    return DRC_ZEROOPERANDS;
  case 0x52:
    return DRC_ZEROOPERANDS;
  case 0x53:
    return DRC_ZEROOPERANDS;
  case 0x54:
    return DRC_ZEROOPERANDS;
  case 0x55:
    return DRC_ZEROOPERANDS;
  case 0x56:
    return DRC_ZEROOPERANDS;
  case 0x57:
    return DRC_ZEROOPERANDS;
  case 0x58:
    return DRC_ZEROOPERANDS;
  case 0x59:
    return DRC_ZEROOPERANDS;
  case 0x5a:
    return DRC_ZEROOPERANDS;
  case 0x5b:
    return DRC_ZEROOPERANDS;
  case 0x5c:
    return DRC_ZEROOPERANDS;
  case 0x5d:
    return DRC_ZEROOPERANDS;
  case 0x5e:
    return DRC_ZEROOPERANDS;
  case 0x5f:
    return DRC_ZEROOPERANDS;
  case 0x60:
    return DRC_ZEROOPERANDS;
  case 0x61:
    return DRC_ZEROOPERANDS;
  case 0x62:
    return DRC_ZEROOPERANDS;
  case 0x63:
    return DRC_ZEROOPERANDS;
  case 0x64:
    return DRC_ZEROOPERANDS;
  case 0x65:
    return DRC_ZEROOPERANDS;
  case 0x66:
    return DRC_ZEROOPERANDS;
  case 0x67:
    return DRC_ZEROOPERANDS;
  case 0x68:
    return DRC_ZEROOPERANDS;
  case 0x69:
    return DRC_ZEROOPERANDS;
  case 0x6a:
    return DRC_ZEROOPERANDS;
  case 0x6b:
    return DRC_ZEROOPERANDS;
  case 0x6c:
    return DRC_ZEROOPERANDS;
  case 0x6d:
    return DRC_ZEROOPERANDS;
  case 0x6e:
    return DRC_ZEROOPERANDS;
  case 0x6f:
    return DRC_ZEROOPERANDS;
  case 0x70:
    return DRC_ONEOPERAND;
  case 0x71:
    return DRC_ONEOPERAND;
  case 0x72:
    return DRC_ONEOPERAND;
  case 0x73:
    return DRC_ONEOPERAND;
  case 0x74:
    return DRC_ONEOPERAND;
  case 0x75:
    return DRC_ONEOPERAND;
  case 0x76:
    return DRC_ONEOPERAND;
  case 0x77:
    return DRC_ONEOPERAND;
  case 0x78:
    return DRC_ONEOPERAND;
  case 0x79:
    return DRC_ONEOPERAND;
  case 0x7a:
    return DRC_ONEOPERAND;
  case 0x7b:
    return DRC_ONEOPERAND;
  case 0x7c:
    return DRC_ONEOPERAND;
  case 0x7d:
    return DRC_ONEOPERAND;
  case 0x7e:
    return DRC_ONEOPERAND;
  case 0x7f:
    return DRC_ONEOPERAND;
  case 0x80:
    return DRC_ONEOPERAND;
  case 0x81:
    return DRC_ONEOPERAND;
  case 0x82:
    return DRC_ONEOPERAND;
  case 0x83:
    return DRC_ONEOPERAND;
  case 0x84:
    return DRC_ONEOPERAND;
  case 0x85:
    return DRC_ONEOPERAND;
  case 0x86:
    return DRC_ONEOPERAND;
  case 0x87:
    return DRC_ONEOPERAND;
  case 0x88:
    return DRC_ONEOPERAND;
  case 0x89:
    return DRC_ONEOPERAND;
  case 0x8a:
    return DRC_ONEOPERAND;
  case 0x8b:
    return DRC_ONEOPERAND;
  case 0x8c:
    return DRC_ONEOPERAND;
  case 0x8d:
    return DRC_ONEOPERAND;
  case 0x8e:
    return DRC_ONEOPERAND;
  case 0x8f:
    return DRC_ONEOPERAND;
  case 0x90:
    return DRC_ONEOPERAND;
  case 0x91:
    return DRC_ONEOPERAND;
  case 0x92:
    return DRC_TWOOPERANDS;
  case 0x93:
    return DRC_ONEOPERAND;
  case 0x94:
    return DRC_ONEOPERAND;
  case 0x95:
    return DRC_ONEOPERAND;
  case 0x96:
    return DRC_ZEROOPERANDS;
  case 0x97:
    return DRC_DWARFv3 | DRC_ZEROOPERANDS;
  case 0x98:
    return DRC_DWARFv3 | DRC_ONEOPERAND;
  case 0x99:
    return DRC_DWARFv3 | DRC_ONEOPERAND;
  case 0x9a:
    return DRC_DWARFv3 | DRC_ONEOPERAND;
  case 0xf0:
    return DRC_ZEROOPERANDS; /* DW_OP_APPLE_uninit */
  case 0xe0:
    return 0;
  case 0xff:
    return 0;
  default:
    return 0;
  }
}

const char *DW_ATE_value_to_name(uint32_t val) {
  static char invalid[100];
  llvm::StringRef llvmstr = llvm::dwarf::AttributeEncodingString(val);
  if (llvmstr.empty()) {
    snprintf(invalid, sizeof(invalid), "Unknown DW_ATE constant: 0x%x", val);
    return invalid;
  }
  return llvmstr.data();
}

const char *DW_ACCESS_value_to_name(uint32_t val) {
  static char invalid[100];

  llvm::StringRef llvmstr = llvm::dwarf::AccessibilityString(val);
  if (llvmstr.empty()) {
    snprintf(invalid, sizeof(invalid), "Unknown DW_ACCESS constant: 0x%x", val);
    return invalid;
  }
  return llvmstr.data();
}

const char *DW_VIS_value_to_name(uint32_t val) {
  static char invalid[100];
  llvm::StringRef llvmstr = llvm::dwarf::VisibilityString(val);
  if (llvmstr.empty()) {
    snprintf(invalid, sizeof(invalid), "Unknown DW_VIS constant: 0x%x", val);
    return invalid;
  }
  return llvmstr.data();
}

const char *DW_VIRTUALITY_value_to_name(uint32_t val) {
  static char invalid[100];
  llvm::StringRef llvmstr = llvm::dwarf::VirtualityString(val);
  if (llvmstr.empty()) {
    snprintf(invalid, sizeof(invalid), "Unknown DW_VIRTUALITY constant: 0x%x",
             val);
    return invalid;
  }
  return llvmstr.data();
}

const char *DW_LANG_value_to_name(uint32_t val) {
  static char invalid[100];
  llvm::StringRef llvmstr = llvm::dwarf::LanguageString(val);
  if (llvmstr.empty()) {
    snprintf(invalid, sizeof(invalid), "Unknown DW_LANG constant: 0x%x", val);
    return invalid;
  }
  return llvmstr.data();
}

const char *DW_ID_value_to_name(uint32_t val) {
  static char invalid[100];
  llvm::StringRef llvmstr = llvm::dwarf::CaseString(val);
  if (llvmstr.empty()) {
    snprintf(invalid, sizeof(invalid), "Unknown DW_ID constant: 0x%x", val);
    return invalid;
  }
  return llvmstr.data();
}

const char *DW_CC_value_to_name(uint32_t val) {
  static char invalid[100];
  llvm::StringRef llvmstr = llvm::dwarf::ConventionString(val);
  if (llvmstr.empty()) {
    snprintf(invalid, sizeof(invalid), "Unknown DW_CC constant: 0x%x", val);
    return invalid;
  }
  return llvmstr.data();
}

const char *DW_INL_value_to_name(uint32_t val) {
  static char invalid[100];
  llvm::StringRef llvmstr = llvm::dwarf::InlineCodeString(val);
  if (llvmstr.empty()) {
    snprintf(invalid, sizeof(invalid), "Unknown DW_INL constant: 0x%x", val);
    return invalid;
  }
  return llvmstr.data();
}

const char *DW_ORD_value_to_name(uint32_t val) {
  static char invalid[100];
  llvm::StringRef llvmstr = llvm::dwarf::ArrayOrderString(val);
  if (llvmstr.empty()) {
    snprintf(invalid, sizeof(invalid), "Unknown DW_ORD constant: 0x%x", val);
    return invalid;
  }
  return llvmstr.data();
}

const char *DW_LNS_value_to_name(uint32_t val) {
  static char invalid[100];
  llvm::StringRef llvmstr = llvm::dwarf::LNStandardString(val);
  if (llvmstr.empty()) {
    snprintf(invalid, sizeof(invalid), "Unknown DW_LNS constant: 0x%x", val);
    return invalid;
  }
  return llvmstr.data();
}

const char *DW_LNE_value_to_name(uint32_t val) {
  static char invalid[100];
  llvm::StringRef llvmstr = llvm::dwarf::LNExtendedString(val);
  if (llvmstr.empty()) {
    snprintf(invalid, sizeof(invalid), "Unknown DW_LNE constant: 0x%x", val);
    return invalid;
  }
  return llvmstr.data();
}

const char *DW_MACINFO_value_to_name(uint32_t val) {
  static char invalid[100];
  llvm::StringRef llvmstr = llvm::dwarf::MacinfoString(val);
  if (llvmstr.empty()) {
    snprintf(invalid, sizeof(invalid), "Unknown DW_MACINFO constant: 0x%x",
             val);
    return invalid;
  }
  return llvmstr.data();
}

const char *DW_CFA_value_to_name(uint32_t val) {
  static char invalid[100];
  llvm::StringRef llvmstr = llvm::dwarf::CallFrameString(val);
  if (llvmstr.empty()) {
    snprintf(invalid, sizeof(invalid), "Unknown DW_CFA constant: 0x%x", val);
    return invalid;
  }
  return llvmstr.data();
}

DW_TAG_CategoryEnum get_tag_category(uint16_t tag) {
  switch (tag) {
  case DW_TAG_array_type:
    return TagCategoryType;
  case DW_TAG_class_type:
    return TagCategoryType;
  case DW_TAG_entry_point:
    return TagCategoryProgram;
  case DW_TAG_enumeration_type:
    return TagCategoryType;
  case DW_TAG_formal_parameter:
    return TagCategoryVariable;
  case DW_TAG_imported_declaration:
    return TagCategoryProgram;
  case DW_TAG_label:
    return TagCategoryProgram;
  case DW_TAG_lexical_block:
    return TagCategoryProgram;
  case DW_TAG_member:
    return TagCategoryType;
  case DW_TAG_pointer_type:
    return TagCategoryType;
  case DW_TAG_reference_type:
    return TagCategoryType;
  case DW_TAG_compile_unit:
    return TagCategoryProgram;
  case DW_TAG_string_type:
    return TagCategoryType;
  case DW_TAG_structure_type:
    return TagCategoryType;
  case DW_TAG_subroutine_type:
    return TagCategoryType;
  case DW_TAG_typedef:
    return TagCategoryType;
  case DW_TAG_union_type:
    return TagCategoryType;
  case DW_TAG_unspecified_parameters:
    return TagCategoryVariable;
  case DW_TAG_variant:
    return TagCategoryType;
  case DW_TAG_common_block:
    return TagCategoryProgram;
  case DW_TAG_common_inclusion:
    return TagCategoryProgram;
  case DW_TAG_inheritance:
    return TagCategoryType;
  case DW_TAG_inlined_subroutine:
    return TagCategoryProgram;
  case DW_TAG_module:
    return TagCategoryProgram;
  case DW_TAG_ptr_to_member_type:
    return TagCategoryType;
  case DW_TAG_set_type:
    return TagCategoryType;
  case DW_TAG_subrange_type:
    return TagCategoryType;
  case DW_TAG_with_stmt:
    return TagCategoryProgram;
  case DW_TAG_access_declaration:
    return TagCategoryProgram;
  case DW_TAG_base_type:
    return TagCategoryType;
  case DW_TAG_catch_block:
    return TagCategoryProgram;
  case DW_TAG_const_type:
    return TagCategoryType;
  case DW_TAG_constant:
    return TagCategoryVariable;
  case DW_TAG_enumerator:
    return TagCategoryType;
  case DW_TAG_file_type:
    return TagCategoryType;
  case DW_TAG_friend:
    return TagCategoryType;
  case DW_TAG_namelist:
    return TagCategoryVariable;
  case DW_TAG_namelist_item:
    return TagCategoryVariable;
  case DW_TAG_packed_type:
    return TagCategoryType;
  case DW_TAG_subprogram:
    return TagCategoryProgram;
  case DW_TAG_template_type_parameter:
    return TagCategoryType;
  case DW_TAG_template_value_parameter:
    return TagCategoryType;
  case DW_TAG_GNU_template_parameter_pack:
    return TagCategoryType;
  case DW_TAG_thrown_type:
    return TagCategoryType;
  case DW_TAG_try_block:
    return TagCategoryProgram;
  case DW_TAG_variant_part:
    return TagCategoryType;
  case DW_TAG_variable:
    return TagCategoryVariable;
  case DW_TAG_volatile_type:
    return TagCategoryType;
  case DW_TAG_dwarf_procedure:
    return TagCategoryProgram;
  case DW_TAG_restrict_type:
    return TagCategoryType;
  case DW_TAG_interface_type:
    return TagCategoryType;
  case DW_TAG_namespace:
    return TagCategoryProgram;
  case DW_TAG_imported_module:
    return TagCategoryProgram;
  case DW_TAG_unspecified_type:
    return TagCategoryType;
  case DW_TAG_partial_unit:
    return TagCategoryProgram;
  case DW_TAG_imported_unit:
    return TagCategoryProgram;
  case DW_TAG_shared_type:
    return TagCategoryType;
  default:
    break;
  }
  return TagCategoryProgram;
}

} // namespace lldb_private
