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 diagnostics;
15pub mod file;
16pub mod float_ops;
17pub mod io;
18pub mod list_ops;
19pub mod map_ops;
20pub mod memory_stats;
21pub mod os;
22pub mod pool;
23pub mod quotations;
24pub mod scheduler;
25pub mod seqstring;
26pub mod serialize;
27pub mod stack;
28pub mod string_ops;
29pub mod tcp;
30pub mod tcp_test;
31pub mod value;
32pub mod variant_ops;
33pub mod watchdog;
34
35// Re-export key types and functions
36pub use stack::{
37    Stack, StackNode, drop, is_empty, patch_seq_drop_op as drop_op, patch_seq_dup as dup,
38    patch_seq_nip as nip, patch_seq_over as over, patch_seq_pick_op as pick_op,
39    patch_seq_push_value as push_value, patch_seq_rot as rot, patch_seq_swap as swap,
40    patch_seq_tuck as tuck, peek, pick, pop, push,
41};
42pub use value::{MapKey, Value, VariantData};
43
44// Serialization types (for persistence/exchange with external systems)
45pub use serialize::{SerializeError, TypedMapKey, TypedValue, ValueSerialize};
46
47// Arithmetic operations (exported for LLVM linking)
48pub use arithmetic::{
49    patch_seq_add as add, patch_seq_divide as divide, patch_seq_eq as eq, patch_seq_gt as gt,
50    patch_seq_gte as gte, patch_seq_lt as lt, patch_seq_lte as lte, patch_seq_multiply as multiply,
51    patch_seq_neq as neq, patch_seq_push_bool as push_bool, patch_seq_push_int as push_int,
52    patch_seq_subtract as subtract,
53};
54
55// Float operations (exported for LLVM linking)
56pub use float_ops::{
57    patch_seq_f_add as f_add, patch_seq_f_divide as f_divide, patch_seq_f_eq as f_eq,
58    patch_seq_f_gt as f_gt, patch_seq_f_gte as f_gte, patch_seq_f_lt as f_lt,
59    patch_seq_f_lte as f_lte, patch_seq_f_multiply as f_multiply, patch_seq_f_neq as f_neq,
60    patch_seq_f_subtract as f_subtract, patch_seq_float_to_int as float_to_int,
61    patch_seq_float_to_string as float_to_string, patch_seq_int_to_float as int_to_float,
62    patch_seq_push_float as push_float,
63};
64
65// I/O operations (exported for LLVM linking)
66pub use io::{
67    patch_seq_exit_op as exit_op, patch_seq_push_string as push_string,
68    patch_seq_read_line as read_line, patch_seq_read_line_plus as read_line_plus,
69    patch_seq_write_line as write_line,
70};
71
72// Scheduler operations (exported for LLVM linking)
73pub use scheduler::{
74    patch_seq_scheduler_init as scheduler_init, patch_seq_scheduler_run as scheduler_run,
75    patch_seq_scheduler_shutdown as scheduler_shutdown, patch_seq_spawn_strand as spawn_strand,
76    patch_seq_strand_spawn as strand_spawn, patch_seq_wait_all_strands as wait_all_strands,
77    patch_seq_yield_strand as yield_strand,
78};
79
80// Channel operations (exported for LLVM linking)
81pub use channel::{
82    patch_seq_chan_receive as receive, patch_seq_chan_receive_safe as receive_safe,
83    patch_seq_chan_send as send, patch_seq_chan_send_safe as send_safe,
84    patch_seq_close_channel as close_channel, patch_seq_make_channel as make_channel,
85};
86
87// String operations (exported for LLVM linking)
88pub use io::patch_seq_int_to_string as int_to_string;
89pub use string_ops::{
90    patch_seq_json_escape as json_escape, patch_seq_string_chomp as string_chomp,
91    patch_seq_string_concat as string_concat, patch_seq_string_contains as string_contains,
92    patch_seq_string_empty as string_empty, patch_seq_string_length as string_length,
93    patch_seq_string_split as string_split, patch_seq_string_starts_with as string_starts_with,
94    patch_seq_string_to_int as string_to_int, patch_seq_string_to_lower as string_to_lower,
95    patch_seq_string_to_upper as string_to_upper, patch_seq_string_trim as string_trim,
96};
97
98// Quotation operations (exported for LLVM linking)
99pub use quotations::{
100    patch_seq_call as call, patch_seq_peek_is_quotation as peek_is_quotation,
101    patch_seq_peek_quotation_fn_ptr as peek_quotation_fn_ptr,
102    patch_seq_push_quotation as push_quotation, patch_seq_spawn as spawn, patch_seq_times as times,
103    patch_seq_until_loop as until_loop, patch_seq_while_loop as while_loop,
104};
105
106// Closure operations (exported for LLVM linking)
107pub use closures::{
108    patch_seq_create_env as create_env, patch_seq_env_get as env_get,
109    patch_seq_env_get_int as env_get_int, patch_seq_env_set as env_set,
110    patch_seq_make_closure as make_closure, patch_seq_push_closure as push_closure,
111};
112
113// Conditional combinator (exported for LLVM linking)
114pub use cond::patch_seq_cond as cond;
115
116// TCP operations (exported for LLVM linking)
117pub use tcp::{
118    patch_seq_tcp_accept as tcp_accept, patch_seq_tcp_close as tcp_close,
119    patch_seq_tcp_listen as tcp_listen, patch_seq_tcp_read as tcp_read,
120    patch_seq_tcp_write as tcp_write,
121};
122
123// OS operations (exported for LLVM linking)
124pub use os::{
125    patch_seq_current_dir as current_dir, patch_seq_exit as exit, patch_seq_getenv as getenv,
126    patch_seq_home_dir as home_dir, patch_seq_os_arch as os_arch, patch_seq_os_name as os_name,
127    patch_seq_path_exists as path_exists, patch_seq_path_filename as path_filename,
128    patch_seq_path_is_dir as path_is_dir, patch_seq_path_is_file as path_is_file,
129    patch_seq_path_join as path_join, patch_seq_path_parent as path_parent,
130};
131
132// Variant operations (exported for LLVM linking)
133pub use variant_ops::{
134    patch_seq_make_variant_0 as make_variant_0, patch_seq_make_variant_1 as make_variant_1,
135    patch_seq_make_variant_2 as make_variant_2, patch_seq_make_variant_3 as make_variant_3,
136    patch_seq_make_variant_4 as make_variant_4, patch_seq_unpack_variant as unpack_variant,
137    patch_seq_variant_field_at as variant_field_at,
138    patch_seq_variant_field_count as variant_field_count, patch_seq_variant_tag as variant_tag,
139};
140
141// Command-line argument operations (exported for LLVM linking)
142pub use args::{
143    patch_seq_arg_at as arg_at, patch_seq_arg_count as arg_count, patch_seq_args_init as args_init,
144};
145
146// File operations (exported for LLVM linking)
147pub use file::{
148    patch_seq_file_exists as file_exists,
149    patch_seq_file_for_each_line_plus as file_for_each_line_plus,
150    patch_seq_file_slurp as file_slurp, patch_seq_file_slurp_safe as file_slurp_safe,
151};
152
153// List operations (exported for LLVM linking)
154pub use list_ops::{
155    patch_seq_list_each as list_each, patch_seq_list_empty as list_empty,
156    patch_seq_list_filter as list_filter, patch_seq_list_fold as list_fold,
157    patch_seq_list_length as list_length, patch_seq_list_map as list_map,
158};
159
160// Map operations (exported for LLVM linking)
161pub use map_ops::{
162    patch_seq_make_map as make_map, patch_seq_map_empty as map_empty, patch_seq_map_get as map_get,
163    patch_seq_map_get_safe as map_get_safe, patch_seq_map_has as map_has,
164    patch_seq_map_keys as map_keys, patch_seq_map_remove as map_remove,
165    patch_seq_map_set as map_set, patch_seq_map_size as map_size,
166    patch_seq_map_values as map_values,
167};