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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
//! Ketos is a Lisp dialect functional programming language, designed to be
//! a scripting and extension language for Rust programs.
//!
//! ```
//! use ketos::{Interpreter, FromValueRef};
//!
//! // Create an interpreter.
//! let interp = Interpreter::new();
//!
//! // Define a function.
//! interp.run_code(r#"
//!     (define (foo a)
//!       (* a 2))
//!     "#, None).unwrap();
//!
//! // Call the function.
//! let result = interp.call("foo", vec![123.into()]).unwrap();
//!
//! // Get a Rust value back.
//! let n = i32::from_value_ref(&result).unwrap();
//!
//! assert_eq!(n, 246);
//! ```
//!
//! See `examples/` for more examples on interacting with the Ketos interpreter.

#![deny(missing_docs)]

extern crate byteorder;
extern crate num;
extern crate rand;
#[cfg(feature = "serde")] extern crate serde;

#[cfg(test)]
#[macro_use] extern crate assert_matches;

pub use buffer::{CodeBuffer, More, MoreResult};
pub use bytecode::Code;
pub use bytes::Bytes;
pub use completion::complete_name;
pub use compile::CompileError;
pub use encode::{DecodeError, EncodeError};
pub use error::Error;
pub use exec::{Context, ExecError, panic, panic_none};
pub use function::Arity;
pub use interpreter::{Builder, Interpreter};
pub use integer::{Integer, Ratio};
pub use io::{File, GlobalIo, IoError, SharedWrite};
pub use module::{BuiltinModuleLoader, FileModuleLoader, Module, ModuleBuilder, ModuleLoader};
pub use name::{Name, NameStore};
pub use parser::{ParseError, ParseErrorKind};
pub use restrict::{RestrictConfig, RestrictError};
pub use run::run_code;
pub use scope::{GlobalScope, Scope};
pub use trace::{clear_traceback, get_traceback, set_traceback, take_traceback, Trace};
pub use value::{ForeignValue, FromValue, FromValueRef, Value};
#[cfg(feature = "serde")] pub use value_decode::decode_value;
#[cfg(feature = "serde")] pub use value_encode::encode_value;

pub mod args;
pub mod buffer;
pub mod bytecode;
pub mod bytes;
pub mod completion;
pub mod compile;
mod const_fold;
pub mod encode;
pub mod error;
pub mod exec;
pub mod function;
pub mod integer;
pub mod interpreter;
pub mod io;
pub mod lexer;
pub mod module;
pub mod name;
pub mod parser;
pub mod pretty;
pub mod restrict;
pub mod rc_vec;
pub mod run;
pub mod scope;
mod string;
pub mod string_fmt;
pub mod trace;
pub mod value;
#[cfg(feature = "serde")] pub mod value_decode;
#[cfg(feature = "serde")] pub mod value_encode;

mod mod_code;
mod mod_math;
mod mod_random;