Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/proc_macro_srv/src/lib.rs')
| -rw-r--r-- | crates/proc_macro_srv/src/lib.rs | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/crates/proc_macro_srv/src/lib.rs b/crates/proc_macro_srv/src/lib.rs index 1c39455112..c60dd2efc5 100644 --- a/crates/proc_macro_srv/src/lib.rs +++ b/crates/proc_macro_srv/src/lib.rs @@ -15,7 +15,7 @@ mod dylib; mod abis; -use proc_macro_api::{ExpansionResult, ExpansionTask, ListMacrosResult, ListMacrosTask}; +use proc_macro_api::{ExpansionResult, ExpansionTask, FlatTree, ListMacrosResult, ListMacrosTask}; use std::{ collections::{hash_map::Entry, HashMap}, env, fs, @@ -29,7 +29,7 @@ pub(crate) struct ProcMacroSrv { } impl ProcMacroSrv { - pub fn expand(&mut self, task: &ExpansionTask) -> Result<ExpansionResult, String> { + pub fn expand(&mut self, task: ExpansionTask) -> Result<ExpansionResult, String> { let expander = self.expander(task.lib.as_ref())?; let mut prev_env = HashMap::new(); @@ -38,7 +38,11 @@ impl ProcMacroSrv { env::set_var(k, v); } - let result = expander.expand(&task.macro_name, &task.macro_body, task.attributes.as_ref()); + let macro_body = task.macro_body.to_subtree(); + let attributes = task.attributes.map(|it| it.to_subtree()); + let result = expander + .expand(&task.macro_name, ¯o_body, attributes.as_ref()) + .map(|it| FlatTree::new(&it)); for (k, _) in &task.env { match &prev_env[k.as_str()] { |