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