AttributeValue.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. /*
  2. * Copyright (c) 2021, Daniel Bertalan <dani@danielbertalan.dev>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "AttributeValue.h"
  7. #include "CompilationUnit.h"
  8. namespace Debug::Dwarf {
  9. ErrorOr<FlatPtr> AttributeValue::as_addr() const
  10. {
  11. switch (m_form) {
  12. case AttributeDataForm::Addr:
  13. return m_data.as_addr;
  14. case AttributeDataForm::AddrX:
  15. case AttributeDataForm::AddrX1:
  16. case AttributeDataForm::AddrX2:
  17. case AttributeDataForm::AddrX3:
  18. case AttributeDataForm::AddrX4: {
  19. auto index = m_data.as_unsigned;
  20. return m_compilation_unit->get_address(index);
  21. }
  22. default:
  23. VERIFY_NOT_REACHED();
  24. }
  25. }
  26. ErrorOr<char const*> AttributeValue::as_string() const
  27. {
  28. switch (m_form) {
  29. case AttributeDataForm::String:
  30. case AttributeDataForm::StringPointer:
  31. case AttributeDataForm::LineStrP:
  32. return m_data.as_string;
  33. case AttributeDataForm::StrX:
  34. case AttributeDataForm::StrX1:
  35. case AttributeDataForm::StrX2:
  36. case AttributeDataForm::StrX3:
  37. case AttributeDataForm::StrX4: {
  38. auto index = m_data.as_unsigned;
  39. return m_compilation_unit->get_string(index);
  40. }
  41. default:
  42. VERIFY_NOT_REACHED();
  43. }
  44. }
  45. }