pub struct BytecodeProgram {Show 21 fields
pub instructions: Vec<Instruction>,
pub constants: Vec<Constant>,
pub strings: Vec<String>,
pub functions: Vec<Function>,
pub debug_info: DebugInfo,
pub data_schema: Option<DataFrameSchema>,
pub module_binding_names: Vec<String>,
pub top_level_locals_count: u16,
pub top_level_local_storage_hints: Vec<StorageHint>,
pub module_binding_storage_hints: Vec<StorageHint>,
pub function_local_storage_hints: Vec<Vec<StorageHint>>,
pub top_level_frame: Option<FrameDescriptor>,
pub type_schema_registry: TypeSchemaRegistry,
pub compiled_annotations: HashMap<String, CompiledAnnotation>,
pub trait_method_symbols: HashMap<String, String>,
pub expanded_function_defs: HashMap<String, FunctionDef>,
pub string_index: HashMap<String, u32>,
pub foreign_functions: Vec<ForeignFunctionEntry>,
pub native_struct_layouts: Vec<NativeStructLayoutEntry>,
pub content_addressed: Option<Program>,
pub function_blob_hashes: Vec<Option<FunctionHash>>,
}Expand description
A compiled bytecode program
Fields§
§instructions: Vec<Instruction>The bytecode instructions
constants: Vec<Constant>Constant pool for literals
strings: Vec<String>String pool for identifiers and properties
functions: Vec<Function>Function table
debug_info: DebugInfoDebug information (always present, used for error messages)
data_schema: Option<DataFrameSchema>DataFrame schema for column name resolution (required for data access)
module_binding_names: Vec<String>ModuleBinding variable names (index -> name mapping for REPL persistence)
top_level_locals_count: u16Number of locals used by top-level code.
The executor advances sp past this many slots before execution
so that expression evaluation doesn’t overlap with local storage.
top_level_local_storage_hints: Vec<StorageHint>Storage hints for top-level locals (index -> hint). Used by JIT lowering to preserve native width integer codegen.
module_binding_storage_hints: Vec<StorageHint>Storage hints for module bindings (index -> hint).
function_local_storage_hints: Vec<Vec<StorageHint>>Per-function local storage hints.
function_local_storage_hints[f][local] is the hint for local slot in function f.
top_level_frame: Option<FrameDescriptor>Typed frame layout for top-level locals.
When present, supersedes top_level_local_storage_hints for the
JIT and VM. None means fall back to the legacy hints vec.
type_schema_registry: TypeSchemaRegistryType schema registry for TypedObject field resolution Used to convert TypedObject back to Object when needed
compiled_annotations: HashMap<String, CompiledAnnotation>Compiled annotation definitions Maps annotation name to its compiled handlers
trait_method_symbols: HashMap<String, String>Trait method dispatch registry: (trait, type, impl selector, method) -> compiled function symbol name.
This is populated by impl-block compilation and used by runtime dispatch (e.g. print() -> Display::display) without relying on symbol naming heuristics.
expanded_function_defs: HashMap<String, FunctionDef>Final function definitions after comptime mutation/specialization.
This is a compile-time inspection artifact for tooling (e.g. shape --expand)
and is not serialized into cached bytecode.
string_index: HashMap<String, u32>Reverse index for O(1) string dedup during compilation.
Maps string content → index in self.strings.
Not serialized — rebuilt lazily on first intern_string call after deserialization.
foreign_functions: Vec<ForeignFunctionEntry>Foreign function metadata table.
Populated by the compiler when fn python ... blocks are compiled.
Linked to language runtimes before execution.
native_struct_layouts: Vec<NativeStructLayoutEntry>Native type C layout metadata table.
content_addressed: Option<Program>Content-addressed program built alongside the flat bytecode.
When present, this contains per-function FunctionBlobs with content
hashes. It is produced by the compiler as a dual-output alongside the
traditional flat instruction array.
function_blob_hashes: Vec<Option<FunctionHash>>Content hash for each function in functions, indexed by function ID.
This provides stable function identity without relying on function names.
None entries indicate missing content-addressed metadata.
Implementations§
Source§impl BytecodeProgram
impl BytecodeProgram
Sourcepub fn add_constant(&mut self, constant: Constant) -> u16
pub fn add_constant(&mut self, constant: Constant) -> u16
Add a constant to the pool and return its index
Sourcepub fn add_string(&mut self, string: String) -> u16
pub fn add_string(&mut self, string: String) -> u16
Add a string to the pool and return its index. Uses the HashMap index for O(1) dedup.
Sourcepub fn intern_string(&mut self, s: &str) -> StringId
pub fn intern_string(&mut self, s: &str) -> StringId
Intern a string and return a StringId for use in Operand::Name /
Operand::MethodCall. Uses the HashMap index for O(1) dedup.
Sourcepub fn ensure_string_index(&mut self)
pub fn ensure_string_index(&mut self)
Ensure the string_index HashMap is populated. After deserialization, string_index is empty — rebuild it from the strings Vec.
Sourcepub fn resolve_string(&self, id: StringId) -> &str
pub fn resolve_string(&self, id: StringId) -> &str
Resolve a StringId back to a &str.
Panics if the id is out of bounds (indicates a compiler bug).
Sourcepub fn emit(&mut self, instruction: Instruction) -> usize
pub fn emit(&mut self, instruction: Instruction) -> usize
Add an instruction to the program
Sourcepub fn current_offset(&self) -> usize
pub fn current_offset(&self) -> usize
Get the current instruction pointer
Sourcepub fn register_trait_method_symbol(
&mut self,
trait_name: &str,
type_name: &str,
impl_name: Option<&str>,
method_name: &str,
function_name: &str,
)
pub fn register_trait_method_symbol( &mut self, trait_name: &str, type_name: &str, impl_name: Option<&str>, method_name: &str, function_name: &str, )
Register a trait-method dispatch symbol.
Sourcepub fn lookup_trait_method_symbol(
&self,
trait_name: &str,
type_name: &str,
impl_name: Option<&str>,
method_name: &str,
) -> Option<&str>
pub fn lookup_trait_method_symbol( &self, trait_name: &str, type_name: &str, impl_name: Option<&str>, method_name: &str, ) -> Option<&str>
Resolve a trait-method dispatch symbol name.
Sourcepub fn named_trait_impls_for_method(
&self,
trait_name: &str,
type_name: &str,
method_name: &str,
) -> Vec<String>
pub fn named_trait_impls_for_method( &self, trait_name: &str, type_name: &str, method_name: &str, ) -> Vec<String>
List named impl selectors for a trait method on a specific type.
Excludes the default selector (__default__) and returns stable sorted names.
Sourcepub fn find_default_trait_impl_for_type_method(
&self,
type_name: &str,
method_name: &str,
) -> Option<&str>
pub fn find_default_trait_impl_for_type_method( &self, type_name: &str, method_name: &str, ) -> Option<&str>
Find the default trait impl function for a given type and method (any trait).
Searches trait_method_symbols for any entry whose type and method match,
preferring the default selector (__default__). Returns the compiled function
symbol name if found.
This is used by method call dispatch to detect when a trait impl method exists for the receiver type, so that builtin functions with the same name don’t shadow it.
Trait Implementations§
Source§impl Clone for BytecodeProgram
impl Clone for BytecodeProgram
Source§fn clone(&self) -> BytecodeProgram
fn clone(&self) -> BytecodeProgram
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for BytecodeProgram
impl Debug for BytecodeProgram
Source§impl Default for BytecodeProgram
impl Default for BytecodeProgram
Source§fn default() -> BytecodeProgram
fn default() -> BytecodeProgram
Source§impl<'de> Deserialize<'de> for BytecodeProgram
impl<'de> Deserialize<'de> for BytecodeProgram
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for BytecodeProgram
impl RefUnwindSafe for BytecodeProgram
impl Send for BytecodeProgram
impl Sync for BytecodeProgram
impl Unpin for BytecodeProgram
impl UnsafeUnpin for BytecodeProgram
impl UnwindSafe for BytecodeProgram
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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 more