1#![forbid(unsafe_code)]
2#![cfg_attr(not(test), deny(clippy::unwrap_used, clippy::expect_used))]
3
4mod cancel;
7mod compiler;
8mod engine;
9mod env;
10mod error;
11mod evaluator;
12mod libraries;
13mod prelude;
14mod runtime_env;
15mod stack;
16mod value;
17
18pub use cancel::CancellationToken;
19pub use compiler::Compiler;
20pub use engine::{
21 AsyncHandler, AsyncNativeCallable, AsyncNativeCallableCancellable, ClassMethodCapability,
22 ClassMethodRequirement, CompiledExterns, CompiledProgram, CompiledProgramBoundary, Engine,
23 EngineOptions, Export, Handler, NativeCapability, NativeFn, NativeFuture, NativeRequirement,
24 OverloadedFn, PRELUDE_LIBRARY_NAME, PreludeMode, ROOT_LIBRARY_NAME, RexAdt, RexDefault,
25 RuntimeCapabilities, RuntimeCompatibility, RuntimeLinkContract, SyncNativeCallable,
26 collect_adts_error_to_engine,
27};
28pub use env::Env;
29pub use error::{CompileError, EngineError, EvalError, ExecutionError, LibraryError};
30pub use evaluator::{Evaluator, EvaluatorRef};
31pub use libraries::virtual_export_name;
32pub use libraries::{
33 CanonicalSymbol, Library, LibraryExports, LibraryId, LibraryInstance, LibraryKey, ReplState,
34 ResolveRequest, ResolvedLibrary, SymbolKind,
35};
36pub use runtime_env::{RuntimeEnv, RuntimeEnvBoundary};
37pub use stack::DEFAULT_STACK_SIZE_BYTES;
38pub use value::{
39 Closure, FromPointer, Heap, IntoPointer, Pointer, RexType, Value, ValueDisplayOptions,
40 ValueRef, closure_debug, closure_eq, pointer_display, pointer_display_with, pointer_eq,
41 value_debug, value_eq,
42};
43
44#[macro_export]
45macro_rules! assert_pointer_eq {
46 ($heap:expr, $left:expr, $right:expr $(,)?) => {{
47 let __heap = $heap;
48 match (&$left, &$right) {
49 (__left, __right) => {
50 let __left_ptr: &$crate::Pointer = __left;
51 let __right_ptr: &$crate::Pointer = __right;
52 let __equal =
53 $crate::pointer_eq(__heap, __left_ptr, __right_ptr).unwrap_or_else(|err| {
54 panic!("assert_pointer_eq failed to compare pointers: {err}")
55 });
56 if !__equal {
57 let __left_value = __heap.get(__left_ptr).unwrap_or_else(|err| {
58 panic!("assert_pointer_eq failed to dereference left pointer: {err}")
59 });
60 let __right_value = __heap.get(__right_ptr).unwrap_or_else(|err| {
61 panic!("assert_pointer_eq failed to dereference right pointer: {err}")
62 });
63 let __left_dbg = $crate::value_debug(__heap, __left_value.as_ref())
64 .unwrap_or_else(|err| format!("<value_debug error: {err}>"));
65 let __right_dbg = $crate::value_debug(__heap, __right_value.as_ref())
66 .unwrap_or_else(|err| format!("<value_debug error: {err}>"));
67 panic!(
68 "assertion `pointer values are equal` failed\n left: {}\n right: {}",
69 __left_dbg, __right_dbg
70 );
71 }
72 }
73 }
74 }};
75}