1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//! A virtual machine and its runtime values.
//!
//! # Examples
//!
//! ```rust
//! use stak_code::{encode, Program};
//! use stak_device::FixedBufferDevice;
//! use stak_primitive::SmallPrimitiveSet;
//! use stak_vm::Vm;
//!
//! const HEAP_SIZE: usize = 1 << 10;
//! const BUFFER_SIZE: usize = 1 << 10;
//!
//! let mut heap = [Default::default(); HEAP_SIZE];
//! let device = FixedBufferDevice::<BUFFER_SIZE, BUFFER_SIZE, BUFFER_SIZE>::new();
//! let mut vm = Vm::new(&mut heap, SmallPrimitiveSet::new(device)).unwrap();
//!
//! // Replace this with actual bytecodes of your program.
//! let program = encode(&Program::new(vec![], vec![]));
//!
//! vm.initialize(program).unwrap();
//! vm.run().unwrap();
//! ```

#![no_std]

#[cfg(test)]
extern crate alloc;
#[cfg(any(feature = "std", feature = "trace", test))]
extern crate std;

mod cons;
mod error;
mod number;
mod primitive_set;
mod symbol_index;
mod r#type;
mod value;
mod vm;

pub use cons::Cons;
pub use error::Error;
pub use number::Number;
pub use primitive_set::PrimitiveSet;
pub use r#type::Type;
pub use value::Value;
pub use vm::Vm;