Struct LocalVariableRaw
pub struct LocalVariableRaw {
pub rid: u32,
pub token: Token,
pub offset: usize,
pub attributes: u16,
pub index: u16,
pub name: u32,
}Expand description
Raw binary representation of a LocalVariable table entry
This structure matches the exact binary layout of LocalVariable table
entries in the metadata tables stream. The Name field contains an unresolved
index into the #Strings heap that must be resolved during conversion
to the owned LocalVariable variant.
§Binary Format
Each LocalVariable table entry consists of:
- Attributes: 2-byte unsigned integer with variable flags
- Index: 2-byte unsigned integer (variable index within method)
- Name: Index into #Strings heap for the variable name
Fields§
§rid: u32Row identifier (1-based index in the table)
token: TokenMetadata token for this LocalVariable entry
offset: usizeByte offset of this row in the original metadata stream
attributes: u16Variable attribute flags
A bitfield containing flags that describe characteristics of the local variable. Common flags include whether the variable is a compiler-generated temporary, whether it’s a pinned variable, etc.
index: u16Variable index within the method
Zero-based index that identifies this variable within the containing method. This index corresponds to the variable’s position in the method’s local variable signature and IL instructions.
name: u32Index into #Strings heap for variable name
Points to the variable’s name string in the metadata #Strings heap. This index must be resolved to get the actual variable name string. May be 0 for anonymous or compiler-generated variables.
Implementations§
§impl LocalVariableRaw
impl LocalVariableRaw
pub fn to_owned(&self, strings: &Strings<'_>) -> Result<LocalVariableRc>
pub fn to_owned(&self, strings: &Strings<'_>) -> Result<LocalVariableRc>
Converts this raw LocalVariable entry to an owned LocalVariable instance
This method resolves the raw LocalVariable entry to create a complete LocalVariable
object by resolving the name string from the #Strings heap.
§Parameters
strings: Reference to the #Strings heap for resolving the name index
§Returns
Returns Ok(LocalVariableRc) with the resolved variable data, or an error if
the name index is invalid or points to malformed string data.
§Errors
Returns an error if the name index is invalid or points to malformed string data.
§Example
let variable_raw = LocalVariableRaw {
rid: 1,
token: Token::new(0x33000001),
offset: 0,
attributes: 0, // No special attributes
index: 0, // First local variable
name: 42, // Index into #Strings heap
};
let variable = variable_raw.to_owned(strings)?;Trait Implementations§
§impl Clone for LocalVariableRaw
impl Clone for LocalVariableRaw
§fn clone(&self) -> LocalVariableRaw
fn clone(&self) -> LocalVariableRaw
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl Debug for LocalVariableRaw
impl Debug for LocalVariableRaw
§impl RowReadable for LocalVariableRaw
impl RowReadable for LocalVariableRaw
§impl RowWritable for LocalVariableRaw
impl RowWritable for LocalVariableRaw
§fn row_write(
&self,
data: &mut [u8],
offset: &mut usize,
_rid: u32,
sizes: &TableInfoRef,
) -> Result<()>
fn row_write( &self, data: &mut [u8], offset: &mut usize, _rid: u32, sizes: &TableInfoRef, ) -> Result<()>
Write a LocalVariable table row to binary data
Serializes one LocalVariable table entry to the metadata tables stream format, handling
variable-width string heap indexes based on the heap size information.
§Arguments
data- Target binary buffer for metadata tables streamoffset- Current write position (updated after writing)_rid- Row identifier for this local variable entry (unused forLocalVariable)sizes- Table sizing information for writing heap indexes
§Returns
Ok(())- Successfully serialized local variable rowErr(crate::Error)- If buffer is too small or write fails
§Binary Format
Fields are written in the exact order specified by the Portable PDB specification:
- Attributes (2 bytes, little-endian)
- Index (2 bytes, little-endian)
- Name string index (2/4 bytes, little-endian, 0 = anonymous)
§impl TableRow for LocalVariableRaw
impl TableRow for LocalVariableRaw
§fn row_size(sizes: &TableInfoRef) -> u32
fn row_size(sizes: &TableInfoRef) -> u32
Calculate the row size for LocalVariable table entries
Returns the total byte size of a single LocalVariable table row based on the
table configuration. The size varies depending on the size of heap indexes in the metadata.
§Size Breakdown
attributes: 2 bytes (variable attribute flags)index: 2 bytes (variable index within method)name: 2 or 4 bytes (string heap index for variable name)
Total: 6-8 bytes depending on heap size configuration
Auto Trait Implementations§
impl Freeze for LocalVariableRaw
impl RefUnwindSafe for LocalVariableRaw
impl Send for LocalVariableRaw
impl Sync for LocalVariableRaw
impl Unpin for LocalVariableRaw
impl UnsafeUnpin for LocalVariableRaw
impl UnwindSafe for LocalVariableRaw
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Downcast for T
impl<T> Downcast for T
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.