1use super::{TreeDisplay, TreeFormatter};
4use crate::r#type::module::*;
5
6impl TreeDisplay for Module {
7 fn tree_display(&self, f: &mut TreeFormatter, source: &str) -> std::fmt::Result {
8 f.root(&format!("Module [{}]", f.format_raw(self.span, source)))?;
9 f.field_vec(true, "directives", &self.directives, source)
10 }
11}
12
13impl TreeDisplay for ModuleDirective {
14 fn tree_display(&self, f: &mut TreeFormatter, source: &str) -> std::fmt::Result {
15 match self {
16 ModuleDirective::ModuleVariable {
17 linkage,
18 directive,
19 span,
20 } => {
21 f.root(&format!(
22 "ModuleDirective::ModuleVariable [{}]",
23 f.format_raw(*span, source)
24 ))?;
25 f.field_option(false, "linkage", linkage, source)?;
26 f.field_with_child(true, "directive", directive, source)
27 }
28 ModuleDirective::EntryFunction {
29 linkage,
30 directive,
31 span,
32 } => {
33 f.root(&format!(
34 "ModuleDirective::EntryFunction [{}]",
35 f.format_raw(*span, source)
36 ))?;
37 f.field_option(false, "linkage", linkage, source)?;
38 f.field_with_child(true, "directive", directive, source)
39 }
40 ModuleDirective::FuncFunction {
41 linkage,
42 directive,
43 span,
44 } => {
45 f.root(&format!(
46 "ModuleDirective::FuncFunction [{}]",
47 f.format_raw(*span, source)
48 ))?;
49 f.field_option(false, "linkage", linkage, source)?;
50 f.field_with_child(true, "directive", directive, source)
51 }
52 ModuleDirective::AliasFunction { directive, span } => {
53 f.root(&format!(
54 "ModuleDirective::AliasFunction [{}]",
55 f.format_raw(*span, source)
56 ))?;
57 f.field_with_child(true, "directive", directive, source)
58 }
59 ModuleDirective::ModuleInfo { directive, span } => {
60 f.root(&format!(
61 "ModuleDirective::ModuleInfo [{}]",
62 f.format_raw(*span, source)
63 ))?;
64 f.field_with_child(true, "directive", directive, source)
65 }
66 ModuleDirective::Debug { directive, span } => {
67 f.root(&format!(
68 "ModuleDirective::Debug [{}]",
69 f.format_raw(*span, source)
70 ))?;
71 f.field_with_child(true, "directive", directive, source)
72 }
73 }
74 }
75}
76
77impl TreeDisplay for ModuleInfoDirectiveKind {
78 fn tree_display(&self, f: &mut TreeFormatter, source: &str) -> std::fmt::Result {
79 match self {
80 ModuleInfoDirectiveKind::Version { directive, span } => {
81 f.root(&format!(
82 "ModuleInfoDirectiveKind::Version [{}]",
83 f.format_raw(*span, source)
84 ))?;
85 f.field_with_child(true, "directive", directive, source)
86 }
87 ModuleInfoDirectiveKind::Target { directive, span } => {
88 f.root(&format!(
89 "ModuleInfoDirectiveKind::Target [{}]",
90 f.format_raw(*span, source)
91 ))?;
92 f.field_with_child(true, "directive", directive, source)
93 }
94 ModuleInfoDirectiveKind::AddressSize { directive, span } => {
95 f.root(&format!(
96 "ModuleInfoDirectiveKind::AddressSize [{}]",
97 f.format_raw(*span, source)
98 ))?;
99 f.field_with_child(true, "directive", directive, source)
100 }
101 }
102 }
103}
104
105impl TreeDisplay for VersionDirective {
106 fn tree_display(&self, f: &mut TreeFormatter, source: &str) -> std::fmt::Result {
107 f.root(&format!(
108 "VersionDirective [{}]",
109 f.format_raw(self.span, source)
110 ))?;
111 f.field(false, "major", &self.major.to_string())?;
112 f.field(true, "minor", &self.minor.to_string())
113 }
114}
115
116impl TreeDisplay for TargetDirective {
117 fn tree_display(&self, f: &mut TreeFormatter, source: &str) -> std::fmt::Result {
118 f.root(&format!(
119 "TargetDirective [{}]",
120 f.format_raw(self.span, source)
121 ))?;
122 f.field_vec(true, "entries", &self.entries, source)
123 }
124}
125
126impl TreeDisplay for AddressSizeDirective {
127 fn tree_display(&self, f: &mut TreeFormatter, source: &str) -> std::fmt::Result {
128 f.root(&format!(
129 "AddressSizeDirective [{}]",
130 f.format_raw(self.span, source)
131 ))?;
132 f.field_with_child(true, "size", &self.size, source)
133 }
134}
135
136impl TreeDisplay for ModuleDebugDirective {
137 fn tree_display(&self, f: &mut TreeFormatter, source: &str) -> std::fmt::Result {
138 match self {
139 ModuleDebugDirective::File { directive, span } => {
140 f.root(&format!(
141 "ModuleDebugDirective::File [{}]",
142 f.format_raw(*span, source)
143 ))?;
144 f.field_with_child(true, "directive", directive, source)
145 }
146 ModuleDebugDirective::Section { directive, span } => {
147 f.root(&format!(
148 "ModuleDebugDirective::Section [{}]",
149 f.format_raw(*span, source)
150 ))?;
151 f.field_with_child(true, "directive", directive, source)
152 }
153 ModuleDebugDirective::Dwarf { directive, span } => {
154 f.root(&format!(
155 "ModuleDebugDirective::Dwarf [{}]",
156 f.format_raw(*span, source)
157 ))?;
158 f.field_with_child(true, "directive", directive, source)
159 }
160 }
161 }
162}
163
164impl TreeDisplay for FileDirective {
165 fn tree_display(&self, f: &mut TreeFormatter, source: &str) -> std::fmt::Result {
166 f.root(&format!(
167 "FileDirective [{}]",
168 f.format_raw(self.span, source)
169 ))?;
170 f.field(false, "index", &self.index.to_string())?;
171 f.field(false, "path", &format!("\"{}\"", self.path))?;
172 match self.timestamp {
173 Some(t) => f.field(false, "timestamp", &format!("Some({})", t))?,
174 None => f.field(false, "timestamp", "None")?,
175 }
176 match self.file_size {
177 Some(s) => f.field(true, "file_size", &format!("Some({})", s)),
178 None => f.field(true, "file_size", "None"),
179 }
180 }
181}
182
183impl TreeDisplay for TargetString {
184 fn tree_display(&self, f: &mut TreeFormatter, source: &str) -> std::fmt::Result {
185 let (variant, span) = match self {
186 TargetString::Sm120a { span } => ("Sm120a", span),
187 TargetString::Sm120f { span } => ("Sm120f", span),
188 TargetString::Sm120 { span } => ("Sm120", span),
189 TargetString::Sm121a { span } => ("Sm121a", span),
190 TargetString::Sm121f { span } => ("Sm121f", span),
191 TargetString::Sm121 { span } => ("Sm121", span),
192 TargetString::Sm110a { span } => ("Sm110a", span),
193 TargetString::Sm110f { span } => ("Sm110f", span),
194 TargetString::Sm110 { span } => ("Sm110", span),
195 TargetString::Sm100a { span } => ("Sm100a", span),
196 TargetString::Sm100f { span } => ("Sm100f", span),
197 TargetString::Sm100 { span } => ("Sm100", span),
198 TargetString::Sm101a { span } => ("Sm101a", span),
199 TargetString::Sm101f { span } => ("Sm101f", span),
200 TargetString::Sm101 { span } => ("Sm101", span),
201 TargetString::Sm103a { span } => ("Sm103a", span),
202 TargetString::Sm103f { span } => ("Sm103f", span),
203 TargetString::Sm103 { span } => ("Sm103", span),
204 TargetString::Sm90a { span } => ("Sm90a", span),
205 TargetString::Sm90 { span } => ("Sm90", span),
206 TargetString::Sm80 { span } => ("Sm80", span),
207 TargetString::Sm86 { span } => ("Sm86", span),
208 TargetString::Sm87 { span } => ("Sm87", span),
209 TargetString::Sm88 { span } => ("Sm88", span),
210 TargetString::Sm89 { span } => ("Sm89", span),
211 TargetString::Sm70 { span } => ("Sm70", span),
212 TargetString::Sm72 { span } => ("Sm72", span),
213 TargetString::Sm75 { span } => ("Sm75", span),
214 TargetString::Sm60 { span } => ("Sm60", span),
215 TargetString::Sm61 { span } => ("Sm61", span),
216 TargetString::Sm62 { span } => ("Sm62", span),
217 TargetString::Sm50 { span } => ("Sm50", span),
218 TargetString::Sm52 { span } => ("Sm52", span),
219 TargetString::Sm53 { span } => ("Sm53", span),
220 TargetString::Sm30 { span } => ("Sm30", span),
221 TargetString::Sm32 { span } => ("Sm32", span),
222 TargetString::Sm35 { span } => ("Sm35", span),
223 TargetString::Sm37 { span } => ("Sm37", span),
224 TargetString::Sm20 { span } => ("Sm20", span),
225 TargetString::Sm10 { span } => ("Sm10", span),
226 TargetString::Sm11 { span } => ("Sm11", span),
227 TargetString::Sm12 { span } => ("Sm12", span),
228 TargetString::Sm13 { span } => ("Sm13", span),
229 TargetString::TexmodeUnified { span } => ("TexmodeUnified", span),
230 TargetString::TexmodeIndependent { span } => ("TexmodeIndependent", span),
231 TargetString::Debug { span } => ("Debug", span),
232 TargetString::MapF64ToF32 { span } => ("MapF64ToF32", span),
233 };
234 f.root(&format!(
235 "TargetString::{} [{}]",
236 variant,
237 f.format_raw(*span, source)
238 ))
239 }
240}
241
242impl TreeDisplay for AddressSize {
243 fn tree_display(&self, f: &mut TreeFormatter, source: &str) -> std::fmt::Result {
244 let (variant, span) = match self {
245 AddressSize::Size32 { span } => ("Size32", span),
246 AddressSize::Size64 { span } => ("Size64", span),
247 };
248 f.root(&format!(
249 "AddressSize::{} [{}]",
250 variant,
251 f.format_raw(*span, source)
252 ))
253 }
254}