Add node macro support for injecting nodes into global scope (#4221)

* Macro support

* Preprocessor support

* Allow Cow str as scope name

* Use Passthrough node to work around compiler auto wrapping the producer node and invalidating the node id

* Stable NodeIds

* Less hacky but with bad performace

* Remove Cow from RegistryValueSource::Scope

* Connect scope injections to the inner network export

---------

Co-authored-by: Dennis Kobert <dennis@kobert.dev>
This commit is contained in:
Timon
2026-06-11 18:14:58 +00:00
committed by GitHub
parent 05d3d66587
commit e524dff1a7
13 changed files with 272 additions and 165 deletions

View File

@@ -17,6 +17,7 @@ pub struct NodeMetadata {
pub properties: Option<&'static str>,
pub context_features: Vec<ContextFeature>,
pub memoize: bool,
pub inject_scope: bool,
}
// Translation struct between macro and definition

View File

@@ -154,6 +154,13 @@ impl ProtoNodeIdentifier {
pub fn as_str(&self) -> &str {
self.name.as_ref()
}
pub const fn as_static_str(&self) -> &'static str {
match self.name {
Cow::Borrowed(name) => name,
Cow::Owned(_) => panic!("`as_static_str` called on a `ProtoNodeIdentifier` backed by an owned string"),
}
}
}
impl Display for ProtoNodeIdentifier {