seq_core/
lib.rs

1//! Seq Core: A clean foundation for stack-based concatenative languages
2//!
3//! This crate provides the language-agnostic runtime primitives that can be
4//! shared across multiple stack-based languages (Seq, actor languages, etc.)
5//!
6//! Key design principles:
7//! - Value: What the language talks about (Int, Bool, Variant, etc.)
8//! - StackValue: 40-byte tagged stack entry (discriminant + 4 payload slots)
9//! - Stack: Contiguous array of StackValue entries for efficient operations
10//!
11//! # Modules
12//!
13//! - `error`: Thread-local error handling for FFI safety
14//! - `memory_stats`: Cross-thread memory statistics registry
15//! - `arena`: Thread-local bump allocation for fast value creation
16//! - `seqstring`: Arena or globally-allocated strings
17//! - `tagged_stack`: Low-level 40-byte stack value layout
18//! - `value`: Core Value enum (Int, Float, Bool, String, Variant, Map, etc.)
19//! - `stack`: Stack operations and value conversion
20//! - `son`: Seq Object Notation serialization
21
22pub mod arena;
23pub mod error;
24pub mod memory_stats;
25pub mod seqstring;
26pub mod son;
27pub mod stack;
28pub mod tagged_stack;
29pub mod value;
30
31// Re-export key types and functions
32pub use stack::{
33    DISC_BOOL, DISC_CHANNEL, DISC_CLOSURE, DISC_FLOAT, DISC_INT, DISC_MAP, DISC_QUOTATION,
34    DISC_STRING, DISC_SYMBOL, DISC_VARIANT, DISC_WEAVECTX, Stack, alloc_stack, alloc_test_stack,
35    clone_stack, clone_stack_segment, clone_stack_value, drop_stack_value, drop_top, is_empty,
36    patch_seq_2dup as two_dup, patch_seq_3drop as three_drop, patch_seq_clone_value as clone_value,
37    patch_seq_drop_op as drop_op, patch_seq_dup as dup, patch_seq_nip as nip,
38    patch_seq_over as over, patch_seq_pick_op as pick_op, patch_seq_push_value as push_value,
39    patch_seq_roll as roll, patch_seq_rot as rot, patch_seq_set_stack_base as set_stack_base,
40    patch_seq_stack_dump as stack_dump, patch_seq_swap as swap, patch_seq_tuck as tuck, peek,
41    peek_sv, pop, pop_sv, push, push_sv, stack_value_to_value, value_to_stack_value,
42};
43
44pub use value::{ChannelData, MapKey, Value, VariantData, WeaveChannelData, WeaveMessage};
45
46// SON serialization
47pub use son::{patch_seq_son_dump as son_dump, patch_seq_son_dump_pretty as son_dump_pretty};
48
49// Error handling
50pub use error::{
51    clear_runtime_error, has_runtime_error, patch_seq_clear_error as clear_error,
52    patch_seq_get_error as get_error, patch_seq_has_error as has_error,
53    patch_seq_take_error as take_error, set_runtime_error, take_runtime_error,
54};