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
impl JumpTable
Source§impl JumpTable
impl JumpTable
Sourcepub fn relocate(&mut self, buffer: &mut Buffer) -> Result<()>
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
impl JumpTable
Sourcepub fn call(&mut self, pc: u16, func: u32)
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.
Sourcepub fn call_offset(&mut self, func: u32, offset: u16) -> Result<()>
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.
Sourcepub fn code_offset(&mut self, offset: u16)
pub fn code_offset(&mut self, offset: u16)
Registers the start of the program counter for the code section.
Sourcepub fn ext(&mut self, pc: u16, func: ExtFunc)
pub fn ext(&mut self, pc: u16, func: ExtFunc)
Registers an external function in the jump table.
Sourcepub fn merge(&mut self, table: Self, pc: u16) -> Result<()>
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.
Sourcepub fn max_target(&self) -> u16
pub fn max_target(&self) -> u16
Get the max target from the current jump table
Source§impl JumpTable
impl JumpTable
Sourcepub fn target(&self, jump: &Jump) -> Result<u16>
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).
Sourcepub fn shift_targets(&mut self) -> Result<()>
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.
Sourcepub fn shift_target(&mut self, ptr: u16, offset: u16) -> Result<()>
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.