Rename DerivedRecordEdge to DerivedRecordInput

This commit is contained in:
Dennis Kobert
2026-09-06 15:12:54 +00:00
parent 8f7d3936f8
commit d294d75198
5 changed files with 22 additions and 22 deletions
+1 -1
View File
@@ -606,7 +606,7 @@ impl<'a, 'f, N> LazyInput<'a, 'f, N> {
#[inline(always)] #[inline(always)]
pub fn eval<'e, Input>(&self, ctx: &Input) -> Result<crate::record::RecordValue<'e>, Interrupt> pub fn eval<'e, Input>(&self, ctx: &Input) -> Result<crate::record::RecordValue<'e>, Interrupt>
where where
N: crate::record::DerivedRecordEdge<'e, Input>, N: crate::record::DerivedRecordInput<'e, Input>,
'f: 'e, 'f: 'e,
{ {
self.node.eval_derived(self.cell, self.input_index, ctx, self.frames) self.node.eval_derived(self.cell, self.input_index, ctx, self.frames)
@@ -12,12 +12,12 @@ use crate::node::Node;
/// `for<'d> Node<Derived<'d, C>>` cannot also say the derived context's arena /// `for<'d> Node<Derived<'d, C>>` cannot also say the derived context's arena
/// is at `'d`: the equality binding `ExtractArena<ArenaRef = &'d Arena>` is an /// is at `'d`: the equality binding `ExtractArena<ArenaRef = &'d Arena>` is an
/// unconstrained position under a higher rank. /// unconstrained position under a higher rank.
pub trait DerivedRecordEdge<'derived, C> { pub trait DerivedRecordInput<'derived, C> {
fn eval_derived(&self, cell: &crate::node::StatusCell, input_index: usize, ctx: &C, frames: &Frames<'derived>) -> Result<RecordValue<'derived>, crate::gpoll::Interrupt>; fn eval_derived(&self, cell: &crate::node::StatusCell, input_index: usize, ctx: &C, frames: &Frames<'derived>) -> Result<RecordValue<'derived>, crate::gpoll::Interrupt>;
fn extent_at_derived(&self, ctx: &C, level: u8, frames: &Frames<'derived>) -> GPoll<crate::gpoll::Extent>; fn extent_at_derived(&self, ctx: &C, level: u8, frames: &Frames<'derived>) -> GPoll<crate::gpoll::Extent>;
} }
impl<'derived, C, N> DerivedRecordEdge<'derived, C> for N impl<'derived, C, N> DerivedRecordInput<'derived, C> for N
where where
N: Node<C>, N: Node<C>,
C: crate::context::ExtractArena<ArenaRef = &'derived crate::arena::Arena>, C: crate::context::ExtractArena<ArenaRef = &'derived crate::arena::Arena>,
@@ -248,7 +248,7 @@ impl<'a, 'e, Out, N> ElementEdge<'a, 'e, Out, N> {
/// again at the next one. /// again at the next one.
pub fn eval<'d, C>(&self, ctx: &C) -> GPoll<Out> pub fn eval<'d, C>(&self, ctx: &C) -> GPoll<Out>
where where
N: DerivedRecordEdge<'d, C>, N: DerivedRecordInput<'d, C>,
'e: 'd, 'e: 'd,
{ {
let cell = crate::node::StatusCell::new(); let cell = crate::node::StatusCell::new();
@@ -316,7 +316,7 @@ impl<'a, 'e, Out, N> ElementLazyInput<'a, 'e, Out, N> {
/// the record's claim dies with the call. /// the record's claim dies with the call.
pub fn eval<'d, C>(&self, ctx: &C) -> Result<Out, crate::gpoll::Interrupt> pub fn eval<'d, C>(&self, ctx: &C) -> Result<Out, crate::gpoll::Interrupt>
where where
N: DerivedRecordEdge<'d, C>, N: DerivedRecordInput<'d, C>,
'e: 'd, 'e: 'd,
{ {
let scope = self.frames.scope(); let scope = self.frames.scope();
@@ -351,7 +351,7 @@ impl<'a, 'e, N> RecordLazyInput<'a, 'e, N> {
pub fn eval<'d, C>(&self, ctx: &C) -> Result<RecordValue<'e>, crate::gpoll::Interrupt> pub fn eval<'d, C>(&self, ctx: &C) -> Result<RecordValue<'e>, crate::gpoll::Interrupt>
where where
N: DerivedRecordEdge<'d, C>, N: DerivedRecordInput<'d, C>,
'e: 'd, 'e: 'd,
{ {
Ok(self.node.eval_derived(self.cell, self.input_index, ctx, self.frames)?.rebind()) Ok(self.node.eval_derived(self.cell, self.input_index, ctx, self.frames)?.rebind())
@@ -363,7 +363,7 @@ impl<'a, 'e, N> RecordLazyInput<'a, 'e, N> {
pub fn inner_extent<B>(&self, ctx: &B) -> Result<u64, crate::gpoll::Interrupt> pub fn inner_extent<B>(&self, ctx: &B) -> Result<u64, crate::gpoll::Interrupt>
where where
B: crate::context::DeriveCtx, B: crate::context::DeriveCtx,
N: for<'d> DerivedRecordEdge<'d, crate::context::Derived<'d, B>>, N: for<'d> DerivedRecordInput<'d, crate::context::Derived<'d, B>>,
{ {
inner_extent_of(self.node, ctx, 0, self.inner_levels, self.input_index, self.frames) inner_extent_of(self.node, ctx, 0, self.inner_levels, self.input_index, self.frames)
} }
@@ -373,7 +373,7 @@ impl<'a, 'e, N> RecordLazyInput<'a, 'e, N> {
pub fn inner_extent_at<B>(&self, ctx: &B, copy: u64) -> Result<u64, crate::gpoll::Interrupt> pub fn inner_extent_at<B>(&self, ctx: &B, copy: u64) -> Result<u64, crate::gpoll::Interrupt>
where where
B: crate::context::DeriveCtx, B: crate::context::DeriveCtx,
N: for<'d> DerivedRecordEdge<'d, crate::context::Derived<'d, B>>, N: for<'d> DerivedRecordInput<'d, crate::context::Derived<'d, B>>,
{ {
inner_extent_of(self.node, ctx, copy, self.inner_levels, self.input_index, self.frames) inner_extent_of(self.node, ctx, copy, self.inner_levels, self.input_index, self.frames)
} }
@@ -383,7 +383,7 @@ impl<'a, 'e, N> RecordLazyInput<'a, 'e, N> {
fn inner_extent_of<B, N>(node: &N, ctx: &B, copy: u64, levels: u8, input_index: usize, frames: &Frames<'_>) -> Result<u64, crate::gpoll::Interrupt> fn inner_extent_of<B, N>(node: &N, ctx: &B, copy: u64, levels: u8, input_index: usize, frames: &Frames<'_>) -> Result<u64, crate::gpoll::Interrupt>
where where
B: crate::context::DeriveCtx, B: crate::context::DeriveCtx,
N: for<'d> DerivedRecordEdge<'d, crate::context::Derived<'d, B>>, N: for<'d> DerivedRecordInput<'d, crate::context::Derived<'d, B>>,
{ {
let mut frame = crate::context::IndexLink { index: 0, outer: None }; let mut frame = crate::context::IndexLink { index: 0, outer: None };
let derived = ctx.push_level(&mut frame, copy, 0); let derived = ctx.push_level(&mut frame, copy, 0);
@@ -405,7 +405,7 @@ where
fn probed_inner<B, N>(node: &N, ctx: &B, copy: u64, input_index: usize, frames: &Frames<'_>) -> Result<u64, crate::gpoll::Interrupt> fn probed_inner<B, N>(node: &N, ctx: &B, copy: u64, input_index: usize, frames: &Frames<'_>) -> Result<u64, crate::gpoll::Interrupt>
where where
B: crate::context::DeriveCtx, B: crate::context::DeriveCtx,
N: for<'d> DerivedRecordEdge<'d, crate::context::Derived<'d, B>>, N: for<'d> DerivedRecordInput<'d, crate::context::Derived<'d, B>>,
{ {
let cell = crate::node::StatusCell::new(); let cell = crate::node::StatusCell::new();
let mut count: u64 = 0; let mut count: u64 = 0;
@@ -466,14 +466,14 @@ impl<'a, 'e, Out, N> DerivedLazyInput<'a, 'e, Out, N> {
pub fn inner_extent<B>(&self, ctx: &B) -> Result<u64, crate::gpoll::Interrupt> pub fn inner_extent<B>(&self, ctx: &B) -> Result<u64, crate::gpoll::Interrupt>
where where
B: crate::context::DeriveCtx, B: crate::context::DeriveCtx,
N: for<'d> DerivedRecordEdge<'d, crate::context::Derived<'d, B>>, N: for<'d> DerivedRecordInput<'d, crate::context::Derived<'d, B>>,
{ {
inner_extent_of(self.node, ctx, 0, self.inner_levels, self.input_index, self.frames) inner_extent_of(self.node, ctx, 0, self.inner_levels, self.input_index, self.frames)
} }
pub fn eval<'d, C>(&self, ctx: &C) -> Result<Out, crate::gpoll::Interrupt> pub fn eval<'d, C>(&self, ctx: &C) -> Result<Out, crate::gpoll::Interrupt>
where where
N: DerivedRecordEdge<'d, C>, N: DerivedRecordInput<'d, C>,
'e: 'd, 'e: 'd,
{ {
let value: RecordValue<'e> = self.node.eval_derived(self.cell, self.input_index, ctx, self.frames)?.rebind(); let value: RecordValue<'e> = self.node.eval_derived(self.cell, self.input_index, ctx, self.frames)?.rebind();
@@ -23,7 +23,7 @@ mod testkit;
pub use access::{Rec, RecordValue, apply_plan, borrow_element, erase_static, read_at, read_element, token_only, write_element, write_element_sized, write_field}; pub use access::{Rec, RecordValue, apply_plan, borrow_element, erase_static, read_at, read_element, token_only, write_element, write_element_sized, write_field};
pub use frames::{FrameArena, FrameScope, Frames}; pub use frames::{FrameArena, FrameScope, Frames};
pub use input::{DerivedLazyInput, DerivedRecordEdge, ElementEdge, ElementLazyInput, LevelStatus, RecordEdgeInput, RecordExtract, RecordLazyInput, fill_frames, materialize_batch, materialize_level}; pub use input::{DerivedLazyInput, DerivedRecordInput, ElementEdge, ElementLazyInput, LevelStatus, RecordEdgeInput, RecordExtract, RecordLazyInput, fill_frames, materialize_batch, materialize_level};
pub use layout::{ pub use layout::{
ElToken, ElementSpec, ElementWrite, ElementWritePick, ElementWritePickHashed, ElementWritePickPlain, FieldDesc, FieldOffset, FieldWrite, InputReads, Layout, LayoutMeta, RecordLayout, copy_plan, ElToken, ElementSpec, ElementWrite, ElementWritePick, ElementWritePickHashed, ElementWritePickPlain, FieldDesc, FieldOffset, FieldWrite, InputReads, Layout, LayoutMeta, RecordLayout, copy_plan,
element_dims, element_parked, element_write, element_write_hashed, empty_layout, element_dims, element_parked, element_write, element_write_hashed, empty_layout,
@@ -421,7 +421,7 @@ mod tests {
C: Ctx + crate::context::DeriveCtx, C: Ctx + crate::context::DeriveCtx,
T: Clone + 'static, T: Clone + 'static,
Vec<T>: Send + Sync + dyn_any::StaticTypeSized, Vec<T>: Send + Sync + dyn_any::StaticTypeSized,
Node0: for<'x> crate::record::DerivedRecordEdge<'x, crate::context::Derived<'x, C>>, Node0: for<'x> crate::record::DerivedRecordInput<'x, crate::context::Derived<'x, C>>,
{ {
fn serve<'e, 'l>(&self, input: &C, mut slot: FrameClaim<'e, 'l>) -> GPoll<Served<'e>> fn serve<'e, 'l>(&self, input: &C, mut slot: FrameClaim<'e, 'l>) -> GPoll<Served<'e>>
where where
@@ -497,7 +497,7 @@ mod tests {
impl<C, Node0> Node<C> for ShiftFootprintNode<Node0> impl<C, Node0> Node<C> for ShiftFootprintNode<Node0>
where where
C: Ctx + crate::context::DeriveCtx + crate::context::ExtractFootprint, C: Ctx + crate::context::DeriveCtx + crate::context::ExtractFootprint,
Node0: for<'x> crate::record::DerivedRecordEdge<'x, crate::context::Derived<'x, C>>, Node0: for<'x> crate::record::DerivedRecordInput<'x, crate::context::Derived<'x, C>>,
{ {
fn serve<'e, 'l>(&self, input: &C, mut slot: FrameClaim<'e, 'l>) -> GPoll<Served<'e>> fn serve<'e, 'l>(&self, input: &C, mut slot: FrameClaim<'e, 'l>) -> GPoll<Served<'e>>
where where
+7 -7
View File
@@ -999,7 +999,7 @@ pub(crate) fn generate_node_impl(crate_ident: &CrateIdent, parsed: &ParsedNodeFn
if routing_generic.as_ref().is_some_and(|generic| crate::codegen::classify::routing_source_output(source_ty, generic)) { if routing_generic.as_ref().is_some_and(|generic| crate::codegen::classify::routing_source_output(source_ty, generic)) {
let source_generic = format_ident!("__Source{index}"); let source_generic = format_ident!("__Source{index}");
generics.push(quote! { generics.push(quote! {
#source_generic: for<'__derived> #core_types::record::DerivedRecordEdge<'__derived, #core_types::context::Derived<'__derived, #ctx_ident>> #source_generic: for<'__derived> #core_types::record::DerivedRecordInput<'__derived, #core_types::context::Derived<'__derived, #ctx_ident>>
}); });
} }
} }
@@ -1007,7 +1007,7 @@ pub(crate) fn generate_node_impl(crate_ident: &CrateIdent, parsed: &ParsedNodeFn
if lazy_carrier && derives { if lazy_carrier && derives {
let source_generic = format_ident!("__Source0"); let source_generic = format_ident!("__Source0");
generics.push(quote! { generics.push(quote! {
#source_generic: for<'__derived> #core_types::record::DerivedRecordEdge<'__derived, #core_types::context::Derived<'__derived, #ctx_ident>> #source_generic: for<'__derived> #core_types::record::DerivedRecordInput<'__derived, #core_types::context::Derived<'__derived, #ctx_ident>>
}); });
} }
if flip { if flip {
@@ -1015,7 +1015,7 @@ pub(crate) fn generate_node_impl(crate_ident: &CrateIdent, parsed: &ParsedNodeFn
if matches!(&field.ty, ParsedFieldType::Node(_)) { if matches!(&field.ty, ParsedFieldType::Node(_)) {
let source_generic = format_ident!("__Source{index}"); let source_generic = format_ident!("__Source{index}");
let derived_extra = derives let derived_extra = derives
.then(|| quote!(+ for<'__derived> #core_types::record::DerivedRecordEdge<'__derived, #core_types::context::Derived<'__derived, #ctx_ident>>)) .then(|| quote!(+ for<'__derived> #core_types::record::DerivedRecordInput<'__derived, #core_types::context::Derived<'__derived, #ctx_ident>>))
.into_iter(); .into_iter();
generics.push(quote! { generics.push(quote! {
#source_generic: #core_types::node::Node<#ctx_ident> #(#derived_extra)* #source_generic: #core_types::node::Node<#ctx_ident> #(#derived_extra)*
@@ -1028,7 +1028,7 @@ pub(crate) fn generate_node_impl(crate_ident: &CrateIdent, parsed: &ParsedNodeFn
if matches!(&field.ty, ParsedFieldType::Node(_)) && matches!(crate::codegen::ir::lazy_binding(&node, index), LazyBinding::Element) { if matches!(&field.ty, ParsedFieldType::Node(_)) && matches!(crate::codegen::ir::lazy_binding(&node, index), LazyBinding::Element) {
let source_generic = format_ident!("__Source{index}"); let source_generic = format_ident!("__Source{index}");
let derived_extra = derives let derived_extra = derives
.then(|| quote!(+ for<'__derived> #core_types::record::DerivedRecordEdge<'__derived, #core_types::context::Derived<'__derived, #ctx_ident>>)) .then(|| quote!(+ for<'__derived> #core_types::record::DerivedRecordInput<'__derived, #core_types::context::Derived<'__derived, #ctx_ident>>))
.into_iter(); .into_iter();
generics.push(quote! { generics.push(quote! {
#source_generic: #core_types::node::Node<#ctx_ident> #(#derived_extra)* #source_generic: #core_types::node::Node<#ctx_ident> #(#derived_extra)*
@@ -1059,7 +1059,7 @@ pub(crate) fn generate_node_impl(crate_ident: &CrateIdent, parsed: &ParsedNodeFn
quote!(#pat: &#ty) quote!(#pat: &#ty)
}); });
let derived_edge = quote!(for<'__derived> #core_types::record::DerivedRecordEdge<'__derived, #core_types::context::Derived<'__derived, #ctx_ident>>); let derived_edge = quote!(for<'__derived> #core_types::record::DerivedRecordInput<'__derived, #core_types::context::Derived<'__derived, #ctx_ident>>);
let lazy_bound = || match derives { let lazy_bound = || match derives {
true => { true => {
let derived_edge = derived_edge.clone(); let derived_edge = derived_edge.clone();
@@ -1558,7 +1558,7 @@ pub(crate) fn generate_node_impl(crate_ident: &CrateIdent, parsed: &ParsedNodeFn
let #query = |__copy: u64, __lvl: u8| { let #query = |__copy: u64, __lvl: u8| {
let mut __frame = #core_types::context::IndexLink { index: 0, outer: None }; let mut __frame = #core_types::context::IndexLink { index: 0, outer: None };
let __derived = #core_types::context::DeriveCtx::push_level(__input, &mut __frame, __copy, 0); let __derived = #core_types::context::DeriveCtx::push_level(__input, &mut __frame, __copy, 0);
#core_types::record::DerivedRecordEdge::extent_at_derived(&self.#name, &__derived, __lvl, &__frames.scope()) #core_types::record::DerivedRecordInput::extent_at_derived(&self.#name, &__derived, __lvl, &__frames.scope())
}; };
let #arg = #core_types::extent::ExtentIn::new(&#query); let #arg = #core_types::extent::ExtentIn::new(&#query);
}, },
@@ -1650,7 +1650,7 @@ pub(crate) fn generate_node_impl(crate_ident: &CrateIdent, parsed: &ParsedNodeFn
let __query = |_: u64, __lvl: u8| { let __query = |_: u64, __lvl: u8| {
let __head = #core_types::context::DeriveCtx::index_head(__input); let __head = #core_types::context::DeriveCtx::index_head(__input);
let __derived = #core_types::context::DeriveCtx::replaced(__input, __head.index); let __derived = #core_types::context::DeriveCtx::replaced(__input, __head.index);
#core_types::record::DerivedRecordEdge::extent_at_derived(&self.#name, &__derived, __lvl, &__frames.scope()) #core_types::record::DerivedRecordInput::extent_at_derived(&self.#name, &__derived, __lvl, &__frames.scope())
}; };
}, },
_ => quote! { _ => quote! {