Public API and docs

This commit is contained in:
2023-05-26 15:23:15 +01:00
parent 3c1a6e2be2
commit fdf18e6ff8
99 changed files with 503 additions and 406 deletions

View File

@@ -14,10 +14,10 @@ use crate::representations::Primitive;
/// A macro that generates implementations of [Atomic] to simplify the
/// development of external bindings for Orchid.
///
/// The macro depends on implementations of [AsRef<Clause>] and [From<(&Self,
/// Clause)>] for extracting the clause to be processed and then reconstructing
/// the [Atomic]. Naturally, supertraits of [Atomic] are also dependencies.
/// These are [Any], [Debug] and [DynClone].
/// The macro depends on implementations of [`AsRef<Clause>`] and
/// [`From<(&Self, Clause)>`] for extracting the clause to be processed and then
/// reconstructing the [Atomic]. Naturally, supertraits of [Atomic] are also
/// dependencies. These are [Any], [Debug] and [DynClone].
///
/// The simplest form just requires the typename to be specified. This
/// additionally depends on an implementation of [ExternFn] because after the
@@ -37,8 +37,9 @@ use crate::representations::Primitive;
/// ```
/// // excerpt from the exact implementation of Multiply
/// atomic_impl!(Multiply0, |Self(a, cls): &Self| {
/// let b: Numeric = cls.clone().try_into().map_err(AssertionError::into_extern)?;
/// Ok(*a * b).into())
/// let b: Numeric =
/// cls.clone().try_into().map_err(AssertionError::into_extern)?;
/// Ok(*a * b).into()
/// })
/// ```
#[macro_export]
@@ -58,14 +59,18 @@ macro_rules! atomic_impl {
ctx: $crate::interpreter::Context,
) -> $crate::foreign::AtomicResult {
// extract the expression
let expr =
<Self as AsRef<$crate::foreign::RcExpr>>::as_ref(self).clone();
let expr = <Self as AsRef<
$crate::representations::interpreted::ExprInst,
>>::as_ref(self)
.clone();
// run the expression
let ret = $crate::interpreter::run(expr, ctx.clone())?;
let $crate::interpreter::Return { gas, state, inert } = ret;
// rebuild the atomic
let next_self =
<Self as From<(&Self, $crate::foreign::RcExpr)>>::from((self, state));
let next_self = <Self as From<(
&Self,
$crate::representations::interpreted::ExprInst,
)>>::from((self, state));
// branch off or wrap up
let clause = if inert {
let closure = $next_phase;