Skip to main content

Module stack

Module stack 

Source
Expand description

Tagged Stack Implementation

Stack operations using 8-byte tagged values (tagged pointers).

Encoding:

  • Odd (bit 0 = 1): Int — 63-bit signed integer, value = tagged >> 1
  • 0x0: Bool false
  • 0x2: Bool true
  • Even > 2: Heap pointer to Arc

The Stack type is a pointer to the “current position” (where next push goes).

  • Push: store at *sp, return sp + 1
  • Pop: return sp - 1, read from *(sp - 1)

Re-exports§

pub use patch_seq_2dup as two_dup;
pub use patch_seq_dup as dup;
pub use patch_seq_nip as nip;
pub use patch_seq_over as over;
pub use patch_seq_pick_op as pick;
pub use patch_seq_roll as roll;
pub use patch_seq_rot as rot;
pub use patch_seq_swap as swap;
pub use patch_seq_tuck as tuck;

Constants§

DISC_BOOL
DISC_CHANNEL
DISC_CLOSURE
DISC_FLOAT
DISC_INT
Discriminant constants — retained for API compatibility with codegen and runtime code that switches on type. In tagged-ptr mode, these values are NOT stored in the StackValue itself (the tag is in the pointer bits). They are used only when the runtime unpacks a Value (via pop()) and needs to identify its type. Phase 2 codegen will use bit-level tag checks instead of loading these discriminants from memory.
DISC_MAP
DISC_QUOTATION
DISC_STRING
DISC_SYMBOL
DISC_VARIANT
DISC_WEAVECTX

Functions§

alloc_stack
alloc_test_stack
clone_stack
Safety
clone_stack_segment
Clone a stack segment.
clone_stack_value
Clone a tagged StackValue, handling heap types.
clone_stack_with_base
Safety
drop_stack_value
Drop a tagged StackValue, freeing heap types.
drop_top
Drop the top value: ( a – )
get_stack_base
heap_value_mut
Get a mutable reference to a heap Value at the given stack position without popping (no Arc alloc/dealloc cycle).
patch_seq_2dup
Duplicate top two values: ( a b – a b a b )
patch_seq_clone_value
Clone a StackValue from LLVM IR.
patch_seq_drop_op
Safety
patch_seq_dup
Duplicate the top value: ( a – a a )
patch_seq_nip
Remove the second value: ( a b – b )
patch_seq_over
Copy the second value to the top: ( a b – a b a )
patch_seq_pick_op
Pick: Copy the nth value to the top.
patch_seq_push_value
Safety
patch_seq_roll
Roll: Rotate n+1 items, bringing the item at depth n to the top.
patch_seq_rot
Rotate the top three values: ( a b c – b c a )
patch_seq_set_stack_base
Safety
patch_seq_stack_dump
Dump all values on the stack (for REPL debugging).
patch_seq_swap
Swap the top two values: ( a b – b a )
patch_seq_tuck
Copy top value below second: ( a b – b a b )
peek
Peek at the top value without removing it.
peek_heap_mut
Convenience: get a mutable reference to the heap Value at stack top (sp - 1).
peek_heap_mut_second
Convenience: get a mutable reference to the heap Value at sp - 2 (second from top).
peek_sv
Peek at the raw StackValue without removing it.
pop
Pop a value from the stack.
pop_sv
Pop a StackValue directly from the stack.
pop_three
Pop three values from the stack.
pop_two
Pop two values from the stack.
push
Push a value onto the stack.
push_sv
Push a StackValue directly onto the stack.
stack_value_size
Returns the size of a StackValue in bytes
stack_value_to_value
Convert a tagged StackValue back to a Value (takes ownership)
value_to_stack_value
Convert a Value to a tagged StackValue

Type Aliases§

Stack
Stack: A pointer to the current position in a contiguous array of u64.