diff options
Diffstat (limited to 'src/makefile/input.rs')
-rw-r--r-- | src/makefile/input.rs | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/src/makefile/input.rs b/src/makefile/input.rs index 40720c2..6333a66 100644 --- a/src/makefile/input.rs +++ b/src/makefile/input.rs @@ -212,7 +212,8 @@ impl<'a, 'parent> MakefileReader<'a, 'parent, BufReader<File>> { ) -> Result<Self> { let mut macros = MacroSet::new(); #[cfg(feature = "full")] - if let Some(mut old_makefile_list) = macros.pop("MAKEFILE_LIST") { + if let Some(old_makefile_list) = stack.get("MAKEFILE_LIST") { + let mut old_makefile_list = old_makefile_list.into_owned(); old_makefile_list.text.extend(TokenString::text(format!( " {}", path.as_ref().to_string_lossy() @@ -454,7 +455,7 @@ impl<'a, 'parent, R: BufRead> MakefileReader<'a, 'parent, R> { let action = line .action( self.conditional_stack.last(), - |name| self.macros.is_defined(name), + |name| self.stack.with_scope(&self.macros).is_defined(name), |t| self.expand_macros_deferred_eval(t, &mut deferred_eval_context), ) .wrap_err_with(|| { @@ -820,17 +821,16 @@ impl<'a, 'parent, R: BufRead> MakefileReader<'a, 'parent, R> { value }; - let skipped = match self.macros.get(name) { + let skipped = match self + .stack + .with_scope(&self.macros) + .get(name) + .map(|x| x.source.clone()) + { // We always let command line or MAKEFLAGS macros override macros from the file. - Some(Macro { - source: ItemSource::CommandLineOrMakeflags, - .. - }) => true, + Some(ItemSource::CommandLineOrMakeflags) => true, // We let environment variables override macros from the file only if the command-line argument to do that was given - Some(Macro { - source: ItemSource::Environment, - .. - }) => self.args.environment_overrides, + Some(ItemSource::Environment) => self.args.environment_overrides, Some(_) => skip_if_defined, None => false, }; @@ -846,8 +846,9 @@ impl<'a, 'parent, R: BufRead> MakefileReader<'a, 'parent, R> { &value ); - let value = match self.macros.pop(name) { - Some(mut old_value) if append => { + let value = match self.stack.with_scope(&self.macros).get(name) { + Some(old_value) if append => { + let mut old_value = old_value.into_owned(); #[cfg(feature = "full")] let value = if old_value.eagerly_expanded { TokenString::text(self.expand_macros(&value).wrap_err_with(|| { |