Name the attribute read for the type it reads

The read is a number read, not a read of whatever the name holds: our
model has no coercion, so a name written at another value type is a graph
error rather than a conversion. The name says so.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Dennis Kobert
2026-09-09 12:47:49 +00:00
co-authored by Claude Fable 5
parent 6e5ab01b76
commit 8501010ece
2 changed files with 8 additions and 6 deletions
@@ -801,7 +801,7 @@ mod test {
(NodeId(2), ProtoNode::value(ConstructionArgs::Value(value.into()), vec![])), (NodeId(2), ProtoNode::value(ConstructionArgs::Value(value.into()), vec![])),
(NodeId(3), proto_node("graphic_nodes::graphic::WriteAttributeNode", vec![NodeId(0), NodeId(1), NodeId(2)])), (NodeId(3), proto_node("graphic_nodes::graphic::WriteAttributeNode", vec![NodeId(0), NodeId(1), NodeId(2)])),
(NodeId(4), string_value(read_name)), (NodeId(4), string_value(read_name)),
(NodeId(5), proto_node("graphic_nodes::graphic::ReadAttributeNode", vec![NodeId(3), NodeId(4)])), (NodeId(5), proto_node("graphic_nodes::graphic::ReadNumberAttributeNode", vec![NodeId(3), NodeId(4)])),
], ],
} }
} }
+7 -5
View File
@@ -390,12 +390,14 @@ pub fn write_attribute<'e, T, V: WireValue>(
Ok((content, Attr(parked))) Ok((content, Attr(parked)))
} }
/// Reads the attribute `name` names off each lane. An absent attribute reads as /// Reads the `f64` attribute `name` names off each lane. An absent attribute
/// the name's own default, so the value carries the declared type either way; /// reads as the name's own default, so the value is always a number; the name
/// the name is constant text the compiler folds into an offset when the graph /// is constant text the compiler folds into an offset when the graph compiles.
/// compiles. ///
/// A name written at another value type is a graph error rather than a
/// conversion, so reading a number is never a coercion of one.
#[node_macro::node(category("Attributes: Read"))] #[node_macro::node(category("Attributes: Read"))]
pub fn read_attribute<'e>( pub fn read_number_attribute<'e>(
_: impl Ctx, _: impl Ctx,
/// The content whose lanes carry the attribute. /// The content whose lanes carry the attribute.
(content, value): (f64, Attr<'e, Named<Name0, f64>>), (content, value): (f64, Attr<'e, Named<Name0, f64>>),