Skip to main content

LocalVariableRaw

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: u32

Row identifier (1-based index in the table)

§token: Token

Metadata token for this LocalVariable entry

§offset: usize

Byte offset of this row in the original metadata stream

§attributes: u16

Variable 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: u16

Variable 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: u32

Index 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

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

§

fn clone(&self) -> LocalVariableRaw

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl Debug for LocalVariableRaw

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
§

impl RowReadable for LocalVariableRaw

§

const TABLE_ID: TableId = TableId::LocalVariable

The table ID for this row type. Read more
§

fn row_read( data: &[u8], offset: &mut usize, rid: u32, sizes: &TableInfoRef, ) -> Result<Self>

Reads and parses a single row from the provided byte buffer. Read more
§

impl RowWritable for LocalVariableRaw

§

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 stream
  • offset - Current write position (updated after writing)
  • _rid - Row identifier for this local variable entry (unused for LocalVariable)
  • sizes - Table sizing information for writing heap indexes
§Returns
  • Ok(()) - Successfully serialized local variable row
  • Err(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:

  1. Attributes (2 bytes, little-endian)
  2. Index (2 bytes, little-endian)
  3. Name string index (2/4 bytes, little-endian, 0 = anonymous)
§

impl TableRow for LocalVariableRaw

§

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§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> AsAny for T
where T: Any,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Source§

fn type_name(&self) -> &'static str

Gets the type name of self
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> Downcast for T
where T: AsAny + ?Sized,

Source§

fn is<T>(&self) -> bool
where T: AsAny,

Returns true if the boxed type is the same as T. Read more
Source§

fn downcast_ref<T>(&self) -> Option<&T>
where T: AsAny,

Forward to the method defined on the type Any.
Source§

fn downcast_mut<T>(&mut self) -> Option<&mut T>
where T: AsAny,

Forward to the method defined on the type Any.
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, A> IntoAst<A> for T
where T: Into<A>, A: Ast,

Source§

fn into_ast(self, _a: &A) -> A

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
Source§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> TryClone for T
where T: Clone,

Source§

fn try_clone(&self) -> Result<T, Error>

Clones self, possibly returning an error.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more