swift_demangler/
outlined.rs1use crate::helpers::NodeExt;
8use crate::raw::{Node, NodeKind};
9
10#[derive(Clone, Copy)]
12pub struct Outlined<'ctx> {
13 raw: Node<'ctx>,
14}
15
16impl<'ctx> Outlined<'ctx> {
17 pub fn new(raw: Node<'ctx>) -> Self {
19 Self { raw }
20 }
21
22 pub fn raw(&self) -> Node<'ctx> {
24 self.raw
25 }
26
27 pub fn kind(&self) -> OutlinedKind {
29 match self.raw.kind() {
30 NodeKind::OutlinedBridgedMethod => OutlinedKind::BridgedMethod,
31 NodeKind::OutlinedVariable => OutlinedKind::Variable,
32 NodeKind::OutlinedCopy => OutlinedKind::Copy,
33 NodeKind::OutlinedConsume => OutlinedKind::Consume,
34 NodeKind::OutlinedRetain => OutlinedKind::Retain,
35 NodeKind::OutlinedRelease => OutlinedKind::Release,
36 NodeKind::OutlinedInitializeWithTake => OutlinedKind::InitializeWithTake,
37 NodeKind::OutlinedInitializeWithCopy => OutlinedKind::InitializeWithCopy,
38 NodeKind::OutlinedAssignWithTake => OutlinedKind::AssignWithTake,
39 NodeKind::OutlinedAssignWithCopy => OutlinedKind::AssignWithCopy,
40 NodeKind::OutlinedDestroy => OutlinedKind::Destroy,
41 NodeKind::OutlinedInitializeWithCopyNoValueWitness => {
42 OutlinedKind::InitializeWithCopyNoValueWitness
43 }
44 NodeKind::OutlinedInitializeWithTakeNoValueWitness => {
45 OutlinedKind::InitializeWithTakeNoValueWitness
46 }
47 NodeKind::OutlinedAssignWithCopyNoValueWitness => {
48 OutlinedKind::AssignWithCopyNoValueWitness
49 }
50 NodeKind::OutlinedAssignWithTakeNoValueWitness => {
51 OutlinedKind::AssignWithTakeNoValueWitness
52 }
53 NodeKind::OutlinedDestroyNoValueWitness => OutlinedKind::DestroyNoValueWitness,
54 NodeKind::OutlinedReadOnlyObject => OutlinedKind::ReadOnlyObject,
55 _ => OutlinedKind::Other,
56 }
57 }
58
59 pub fn index(&self) -> Option<u64> {
61 self.raw.index()
63 }
64
65 pub fn module(&self) -> Option<&'ctx str> {
67 self.raw.find_module_in_descendants()
68 }
69}
70
71impl std::fmt::Debug for Outlined<'_> {
72 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
73 f.debug_struct("Outlined")
74 .field("kind", &self.kind())
75 .field("index", &self.index())
76 .field("module", &self.module())
77 .finish()
78 }
79}
80
81impl std::fmt::Display for Outlined<'_> {
82 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
83 write!(f, "{}", self.raw)
84 }
85}
86
87#[derive(Debug, Clone, Copy, PartialEq, Eq)]
89pub enum OutlinedKind {
90 BridgedMethod,
92 Variable,
94 Copy,
96 Consume,
98 Retain,
100 Release,
102 InitializeWithTake,
104 InitializeWithCopy,
106 AssignWithTake,
108 AssignWithCopy,
110 Destroy,
112 InitializeWithCopyNoValueWitness,
114 InitializeWithTakeNoValueWitness,
116 AssignWithCopyNoValueWitness,
118 AssignWithTakeNoValueWitness,
120 DestroyNoValueWitness,
122 ReadOnlyObject,
124 Other,
126}
127
128impl OutlinedKind {
129 pub fn name(&self) -> &'static str {
131 match self {
132 OutlinedKind::BridgedMethod => "outlined bridged method",
133 OutlinedKind::Variable => "outlined variable",
134 OutlinedKind::Copy => "outlined copy",
135 OutlinedKind::Consume => "outlined consume",
136 OutlinedKind::Retain => "outlined retain",
137 OutlinedKind::Release => "outlined release",
138 OutlinedKind::InitializeWithTake => "outlined initializeWithTake",
139 OutlinedKind::InitializeWithCopy => "outlined initializeWithCopy",
140 OutlinedKind::AssignWithTake => "outlined assignWithTake",
141 OutlinedKind::AssignWithCopy => "outlined assignWithCopy",
142 OutlinedKind::Destroy => "outlined destroy",
143 OutlinedKind::InitializeWithCopyNoValueWitness => {
144 "outlined initializeWithCopy (no value witness)"
145 }
146 OutlinedKind::InitializeWithTakeNoValueWitness => {
147 "outlined initializeWithTake (no value witness)"
148 }
149 OutlinedKind::AssignWithCopyNoValueWitness => {
150 "outlined assignWithCopy (no value witness)"
151 }
152 OutlinedKind::AssignWithTakeNoValueWitness => {
153 "outlined assignWithTake (no value witness)"
154 }
155 OutlinedKind::DestroyNoValueWitness => "outlined destroy (no value witness)",
156 OutlinedKind::ReadOnlyObject => "outlined read-only object",
157 OutlinedKind::Other => "outlined operation",
158 }
159 }
160}