seq_runtime/
lib.rs

1//! Seq Runtime: A clean concatenative language foundation
2//!
3//! Key design principles:
4//! - Value: What the language talks about (Int, Bool, Variant, etc.)
5//! - StackNode: Implementation detail (contains Value + next pointer)
6//! - Variant fields: Stored in arrays, NOT linked via next pointers
7
8pub mod arena;
9pub mod args;
10pub mod arithmetic;
11pub mod channel;
12pub mod closures;
13pub mod cond;
14pub mod file;
15pub mod float_ops;
16pub mod io;
17pub mod pool;
18pub mod quotations;
19pub mod scheduler;
20pub mod seqstring;
21pub mod stack;
22pub mod string_ops;
23pub mod tcp;
24pub mod tcp_test;
25pub mod value;
26pub mod variant_ops;
27
28// Re-export key types and functions
29pub use stack::{
30    Stack, StackNode, drop, is_empty, patch_seq_drop_op as drop_op, patch_seq_dup as dup,
31    patch_seq_nip as nip, patch_seq_over as over, patch_seq_pick_op as pick_op,
32    patch_seq_push_value as push_value, patch_seq_rot as rot, patch_seq_swap as swap,
33    patch_seq_tuck as tuck, peek, pick, pop, push,
34};
35pub use value::{Value, VariantData};
36
37// Arithmetic operations (exported for LLVM linking)
38pub use arithmetic::{
39    patch_seq_add as add, patch_seq_divide as divide, patch_seq_eq as eq, patch_seq_gt as gt,
40    patch_seq_gte as gte, patch_seq_lt as lt, patch_seq_lte as lte, patch_seq_multiply as multiply,
41    patch_seq_neq as neq, patch_seq_push_bool as push_bool, patch_seq_push_int as push_int,
42    patch_seq_subtract as subtract,
43};
44
45// Float operations (exported for LLVM linking)
46pub use float_ops::{
47    patch_seq_f_add as f_add, patch_seq_f_divide as f_divide, patch_seq_f_eq as f_eq,
48    patch_seq_f_gt as f_gt, patch_seq_f_gte as f_gte, patch_seq_f_lt as f_lt,
49    patch_seq_f_lte as f_lte, patch_seq_f_multiply as f_multiply, patch_seq_f_neq as f_neq,
50    patch_seq_f_subtract as f_subtract, patch_seq_float_to_int as float_to_int,
51    patch_seq_float_to_string as float_to_string, patch_seq_int_to_float as int_to_float,
52    patch_seq_push_float as push_float,
53};
54
55// I/O operations (exported for LLVM linking)
56pub use io::{
57    patch_seq_exit_op as exit_op, patch_seq_push_string as push_string,
58    patch_seq_read_line as read_line, patch_seq_write_line as write_line,
59};
60
61// Scheduler operations (exported for LLVM linking)
62pub use scheduler::{
63    patch_seq_scheduler_init as scheduler_init, patch_seq_scheduler_run as scheduler_run,
64    patch_seq_scheduler_shutdown as scheduler_shutdown, patch_seq_spawn_strand as spawn_strand,
65    patch_seq_strand_spawn as strand_spawn, patch_seq_wait_all_strands as wait_all_strands,
66    patch_seq_yield_strand as yield_strand,
67};
68
69// Channel operations (exported for LLVM linking)
70pub use channel::{
71    patch_seq_chan_receive as receive, patch_seq_chan_send as send,
72    patch_seq_close_channel as close_channel, patch_seq_make_channel as make_channel,
73};
74
75// String operations (exported for LLVM linking)
76pub use string_ops::{
77    patch_seq_string_concat as string_concat, patch_seq_string_contains as string_contains,
78    patch_seq_string_empty as string_empty, patch_seq_string_length as string_length,
79    patch_seq_string_split as string_split, patch_seq_string_starts_with as string_starts_with,
80    patch_seq_string_to_lower as string_to_lower, patch_seq_string_to_upper as string_to_upper,
81    patch_seq_string_trim as string_trim,
82};
83
84// Quotation operations (exported for LLVM linking)
85pub use quotations::{
86    patch_seq_call as call, patch_seq_forever as forever,
87    patch_seq_push_quotation as push_quotation, patch_seq_spawn as spawn, patch_seq_times as times,
88    patch_seq_until_loop as until_loop, patch_seq_while_loop as while_loop,
89};
90
91// Closure operations (exported for LLVM linking)
92pub use closures::{
93    patch_seq_create_env as create_env, patch_seq_env_get as env_get,
94    patch_seq_env_get_int as env_get_int, patch_seq_env_set as env_set,
95    patch_seq_make_closure as make_closure, patch_seq_push_closure as push_closure,
96};
97
98// Conditional combinator (exported for LLVM linking)
99pub use cond::patch_seq_cond as cond;
100
101// TCP operations (exported for LLVM linking)
102pub use tcp::{
103    patch_seq_tcp_accept as tcp_accept, patch_seq_tcp_close as tcp_close,
104    patch_seq_tcp_listen as tcp_listen, patch_seq_tcp_read as tcp_read,
105    patch_seq_tcp_write as tcp_write,
106};
107
108// Variant operations (exported for LLVM linking)
109pub use variant_ops::{
110    patch_seq_make_variant as make_variant, patch_seq_variant_field_at as variant_field_at,
111    patch_seq_variant_field_count as variant_field_count, patch_seq_variant_tag as variant_tag,
112};
113
114// Command-line argument operations (exported for LLVM linking)
115pub use args::{
116    patch_seq_arg_at as arg_at, patch_seq_arg_count as arg_count, patch_seq_args_init as args_init,
117};
118
119// File operations (exported for LLVM linking)
120pub use file::{patch_seq_file_exists as file_exists, patch_seq_file_slurp as file_slurp};