zingen

Struct JumpTable

Source
pub struct JumpTable {
    pub(crate) jump: BTreeMap<u16, Jump>,
    pub(crate) func: BTreeMap<u32, u16>,
    pub(crate) code: Code,
}
Expand description

Jump table implementation.

Fields§

§jump: BTreeMap<u16, Jump>

Jump table mapping program counters to jump types.

§func: BTreeMap<u32, u16>

Function table mapping function indices to program counters.

§code: Code

Code section associated with the jump table.

Implementations§

Source§

impl JumpTable

Source

pub fn shift_pc(&mut self, start: u16, offset: u16) -> Result<()>

Shifts the program counter for all jump items.

This function updates the program counters based on a starting point and an offset.

Source

pub fn shift_label_pc(&mut self, start: u16, offset: u16) -> Result<()>

Shifts the program counter for labels.

This function updates the program counters of labels based on the specified start point and offset.

Source§

impl JumpTable

Source

pub fn relocate(&mut self, buffer: &mut Buffer) -> Result<()>

Relocate program counter to all registered labels.

This function is responsible for adjusting the program counters of all jumps in the jump table. It first pre-calculates and shifts the target program counters, then iterates through each jump to relocate its target address. The function ensures that the jumps are correctly updated in the buffer, which represents the compiled code.

WARNING: This function should only be called once in the compiler. Consider moving it to the compiler’s main logic.

Source§

impl JumpTable

Source

pub fn call(&mut self, pc: u16, func: u32)

Registers a function in the jump table.

This function associates a program counter with a function.

Source

pub fn call_offset(&mut self, func: u32, offset: u16) -> Result<()>

Registers a program counter to the function table.

This function associates a function with a specific offset in the function table.

Source

pub fn code_offset(&mut self, offset: u16)

Registers the start of the program counter for the code section.

Source

pub fn ext(&mut self, pc: u16, func: ExtFunc)

Registers an external function in the jump table.

Source

pub fn label(&mut self, pc: u16, label: u16)

Registers a label in the jump table.

Source

pub fn merge(&mut self, table: Self, pc: u16) -> Result<()>

Merges another jump table into this one.

This function updates the program counters of the target jump table and handles any potential duplicates.

Source

pub fn register(&mut self, pc: u16, jump: Jump)

register jump to program counter

Source

pub fn max_target(&self) -> u16

Get the max target from the current jump table

Source§

impl JumpTable

Source

pub fn target(&self, jump: &Jump) -> Result<u16>

Retrieves the target of a given jump.

This function returns the target program counter based on the type of jump (offset, label, function, or external function).

Source

pub fn shift_targets(&mut self) -> Result<()>

Shifts the target program counters as a pre-calculation step.

This function calculates the target program counter from the original program counter and the target, adjusting for any offsets.

Source

pub fn shift_target(&mut self, ptr: u16, offset: u16) -> Result<()>

Shifts the program counter of targets with the given pointer and offset.

This function handles the shifting of the code section, label targets, and function targets.

Source

pub fn shift_func_target(&mut self, ptr: u16, offset: u16) -> Result<()>

Shifts the program counter for functions.

Source

pub fn shift_label_target(&mut self, ptr: u16, offset: u16) -> Result<()>

Shifts the program counter for labels.

Trait Implementations§

Source§

impl Clone for JumpTable

Source§

fn clone(&self) -> JumpTable

Returns a copy of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for JumpTable

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for JumpTable

Source§

fn default() -> JumpTable

Returns the “default value” for a type. Read more

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> 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<T> CloneToUninit for T
where T: Clone,

Source§

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

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

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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> 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, 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.
§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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