Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bevyengine
GitHub Repository: bevyengine/bevy
Path: blob/main/crates/bevy_scene/macros/src/bsn/mod.rs
30638 views
1
pub mod codegen;
2
pub mod parse;
3
pub mod types;
4
5
use codegen::*;
6
use types::*;
7
8
use bevy_macro_utils::BevyManifest;
9
use proc_macro::{Span, TokenStream};
10
use syn::{parse_macro_input, parse_quote};
11
12
pub fn bsn(input: TokenStream) -> TokenStream {
13
bsn_token_stream::<BsnRoot>(input)
14
}
15
16
pub fn bsn_list(input: TokenStream) -> TokenStream {
17
bsn_token_stream::<BsnListRoot>(input)
18
}
19
20
fn bsn_token_stream<T: BsnTokenStream>(input: TokenStream) -> TokenStream {
21
let scene = parse_macro_input!(input as T);
22
23
let (bevy_scene, bevy_ecs) = BevyManifest::shared(|manifest| {
24
(
25
manifest.get_path("bevy_scene"),
26
manifest.get_path("bevy_ecs"),
27
)
28
});
29
let mut entity_refs = EntityRefs::default();
30
let mut hoisted_expressions = HoistedExpressions::default();
31
let call_site = Span::call_site();
32
let file = call_site.file();
33
let line = call_site.line();
34
let column = call_site.column();
35
let mut ctx = BsnCodegenCtx {
36
bevy_scene: &bevy_scene,
37
bevy_ecs: &bevy_ecs,
38
entity_refs: &mut entity_refs,
39
invocation_index: parse_quote!((#file, #line, #column)),
40
hoisted_expressions: &mut hoisted_expressions,
41
errors: Vec::new(),
42
};
43
44
TokenStream::from(scene.to_tokens(&mut ctx))
45
}
46
47