1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
//! `CustomDebugInformation` table loader implementation.
//!
//! This module provides the [`crate::metadata::tables::customdebuginformation::loader::CustomDebugInformationLoader`]
//! implementation for loading `CustomDebugInformation` metadata from the Portable PDB `CustomDebugInformation` table (0x37).
//! The loader processes custom debugging information that extends the standard debugging metadata
//! with compiler and language-specific debugging data.
//!
//! # Architecture
//!
//! The loader follows the standard metadata loading pattern, implementing the
//! [`crate::metadata::loader::MetadataLoader`] trait to process table data and integrate
//! custom debugging information with previously loaded metadata elements.
//!
//! # Key Components
//!
//! - [`crate::metadata::tables::customdebuginformation::loader::CustomDebugInformationLoader`] - Main loader implementation
//! - [`crate::metadata::tables::customdebuginformation::CustomDebugInformationRaw`] - Raw table row structure
//! - [`crate::metadata::loader::LoaderContext`] - Context for loading operations
//!
//! # Table Structure
//!
//! The `CustomDebugInformation` table contains zero or more rows with debugging extensions:
//! - **Parent**: Coded index referencing the metadata element with custom debug info
//! - **Kind**: GUID heap reference identifying the custom debug info format
//! - **Value**: Blob heap reference containing the custom debug data
//!
//! # Custom Debug Information Processing
//!
//! Custom debugging information provides extensible debugging metadata for:
//! - **State machine debugging**: Async/await and iterator state tracking
//! - **Dynamic type debugging**: Information for dynamically typed variables
//! - **Edit-and-continue**: Mapping information for debugging sessions
//! - **Embedded sources**: Source code embedding for portable debugging
//! - **Source link**: URL mapping for source server integration
//! - **Language-specific data**: Compiler-specific debugging extensions
//!
//! # Dependencies
//!
//! This loader depends on most other metadata tables being loaded first, as custom
//! debugging information can be applied to various metadata elements.
//!
//! # Integration
//!
//! This module integrates with:
//! - [`crate::metadata::loader`] - Core metadata loading infrastructure
//! - [`crate::metadata::tables`] - Metadata table types for debug info targets
//! - [`crate::metadata::streams::Guid`] - GUID heap for debug info kind identification
//! - [`crate::metadata::streams::Blob`] - Blob heap for debug data
//! - [`crate::metadata::tables::customdebuginformation`] - `CustomDebugInformation` table types
//!
//! # Thread Safety
//!
//! The loader is thread-safe and uses parallel iteration for performance when processing
//! multiple `CustomDebugInformation` entries. Updates to storage collections are handled
//! through atomic operations.
//!
//! # References
//!
//! - [Portable PDB v1.1](https://github.com/dotnet/corefx/blob/master/src/System.Reflection.Metadata/specs/PortablePdb-Metadata.md#customdebuginformation-table-0x37) - `CustomDebugInformation` table specification
use crate::;
/// Loader for the `CustomDebugInformation` metadata table
///
/// Implements [`crate::metadata::loader::MetadataLoader`] to process the `CustomDebugInformation` table (0x37)
/// which contains custom debugging information that extends the standard Portable PDB debugging metadata
/// with compiler and language-specific debugging data.
///
/// # Debug Information Processing
///
/// The loader handles various custom debugging scenarios:
/// - **State machine debugging**: Async/await and iterator state tracking information
/// - **Dynamic type debugging**: Information for dynamically typed variables and expressions
/// - **Edit-and-continue**: Mapping information for debugging sessions and hot reload
/// - **Embedded sources**: Source code embedding for portable debugging scenarios
/// - **Source link**: URL mapping for source server integration and remote debugging
/// - **Language-specific data**: Compiler-specific debugging extensions and metadata
///
/// # Thread Safety
///
/// This type is [`Send`] and [`Sync`] as it contains no mutable state and all operations
/// are read-only during the metadata loading phase. The loader uses parallel iteration
/// for performance when processing multiple `CustomDebugInformation` entries.
;