- inertness now tracked separately from gas - atomic_impl now correctly rolls over when the argument is inert - syntax fixes - tree shaking
29 lines
859 B
Rust
29 lines
859 B
Rust
#[allow(unused)] // for the doc comments
|
|
use crate::foreign::Atomic;
|
|
#[allow(unused)] // for the doc comments
|
|
use std::any::Any;
|
|
#[allow(unused)] // for the doc comments
|
|
use dyn_clone::DynClone;
|
|
#[allow(unused)] // for the doc comments
|
|
use std::fmt::Debug;
|
|
|
|
/// Implement [Atomic] for a structure that cannot be transformed any further. This would be optimal
|
|
/// for atomics encapsulating raw data. [Atomic] depends on [Any], [Debug] and [DynClone].
|
|
#[macro_export]
|
|
macro_rules! atomic_inert {
|
|
($typ:ident) => {
|
|
impl $crate::foreign::Atomic for $typ {
|
|
$crate::atomic_defaults!{}
|
|
|
|
fn run(&self, ctx: $crate::interpreter::Context)
|
|
-> $crate::foreign::AtomicResult
|
|
{
|
|
Ok($crate::foreign::AtomicReturn{
|
|
clause: self.clone().to_atom_cls(),
|
|
gas: ctx.gas,
|
|
inert: true
|
|
})
|
|
}
|
|
}
|
|
};
|
|
} |