use crate::data::context::{Env, EvalError};
use crate::data::value::Val;
use crate::vm::{Program, VM};
use super::{BuiltinCancellation, BuiltinMethod, BuiltinSpec};
pub(crate) struct StreamCtx<'a, 'b> {
pub vm: &'a mut VM,
pub env: &'a mut Env,
pub kernel: &'a crate::exec::pipeline::BodyKernel,
pub stage: &'a crate::exec::pipeline::Stage,
pub stage_idx: usize,
pub stage_taken: &'a mut [usize],
pub stage_skipped: &'a mut [usize],
pub terminal_map_idx: Option<usize>,
pub terminal_map_collect: &'a mut Option<crate::exec::pipeline::TerminalMapCollector<'b>>,
}
pub(crate) struct BarrierCtx<'a> {
pub vm: &'a mut VM,
pub env: &'a mut Env,
pub kernel: &'a crate::exec::pipeline::BodyKernel,
pub stage: &'a crate::exec::pipeline::Stage,
pub strategy: crate::exec::pipeline::StageStrategy,
}
pub(crate) trait Builtin {
#[allow(dead_code)]
const METHOD: BuiltinMethod;
const NAME: &'static str;
const ALIASES: &'static [&'static str] = &[];
fn spec() -> BuiltinSpec;
#[inline]
fn cancellation() -> Option<BuiltinCancellation> {
None
}
#[inline]
fn apply_one(_recv: &Val) -> Option<Val> {
None
}
#[inline]
fn apply_args(_recv: &Val, _args: &super::BuiltinArgs) -> Option<Val> {
None
}
#[inline]
fn apply_stream(
_ctx: &mut StreamCtx<'_, '_>,
item: Val,
_body: Option<&Program>,
) -> Result<crate::exec::pipeline::StageFlow<Val>, EvalError> {
Ok(crate::exec::pipeline::StageFlow::Continue(item))
}
#[inline]
fn apply_barrier(
_ctx: &mut BarrierCtx<'_>,
_buf: &mut Vec<Val>,
_body: Option<&Program>,
) -> Option<Result<(), EvalError>> {
None
}
}