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
//! Constant table loader implementation.
//!
//! This module provides the [`crate::metadata::tables::constant::loader::ConstantLoader`]
//! implementation for loading Constant metadata from the ECMA-335 Constant table (0x0B).
//! The loader processes compile-time constant values associated with fields, properties,
//! and parameters, integrating this data with existing metadata entries.
//!
//! # Architecture
//!
//! The loader follows the standard metadata loading pattern, implementing the
//! [`crate::metadata::loader::MetadataLoader`] trait to process table data and integrate
//! constant values with previously loaded field, property, and parameter entries.
//!
//! # Key Components
//!
//! - [`crate::metadata::tables::constant::loader::ConstantLoader`] - Main loader implementation
//! - [`crate::metadata::tables::constant::ConstantRaw`] - Raw table row structure
//! - [`crate::metadata::loader::LoaderContext`] - Context for loading operations
//!
//! # Table Structure
//!
//! The Constant table contains zero or more rows that define constant values:
//! - **Type**: Element type of the constant (`ELEMENT_TYPE_*` values from ECMA-335)
//! - **Parent**: Coded index referencing Field, Property, or Param tables
//! - **Value**: Blob heap reference containing the constant's binary representation
//!
//! # Constant Types
//!
//! Supported constant types include:
//! - **Primitive types**: Boolean, integers, floating-point values
//! - **String literals**: Compile-time string constants
//! - **Null references**: Null values for reference types
//! - **Enumerations**: Named constant values
//!
//! # Dependencies
//!
//! This loader depends on Field, Property, and Param tables being loaded first,
//! as it needs to update existing metadata entries with constant values.
//!
//! # Integration
//!
//! This module integrates with:
//! - [`crate::metadata::loader`] - Core metadata loading infrastructure
//! - [`crate::metadata::tables::field`] - Field table entries
//! - [`crate::metadata::tables::property`] - Property table entries
//! - [`crate::metadata::tables::param`] - Parameter table entries
//! - [`crate::metadata::streams::Blob`] - Blob heap for constant data
//!
//! # References
//!
//! - [ECMA-335 II.22.9](https://ecma-international.org/wp-content/uploads/ECMA-335_6th_edition_june_2012.pdf) - Constant table specification
use crate::;
/// Loader for the Constant metadata table
///
/// Implements [`crate::metadata::loader::MetadataLoader`] to process the Constant table (0x0B)
/// which contains compile-time constant values for fields, properties, and parameters.
/// These constants represent literal values embedded in the metadata at compile time.
///
/// # Constant Value Processing
///
/// The loader handles various constant formats:
/// - **Primitive constants**: Direct binary encoding of numeric and boolean values
/// - **String constants**: UTF-16 encoded string literals in the blob heap
/// - **Null constants**: Special encoding for null reference values
/// - **Default values**: Compile-time default values for optional parameters
///
/// # 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 Constant entries.
pub ;