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