aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMelody Horn <melody@boringcactus.com>2021-03-31 13:28:28 -0600
committerMelody Horn <melody@boringcactus.com>2021-03-31 13:28:28 -0600
commita3d602d6e84a91b7656b80e3a7e45caa532b841e (patch)
treecbedb12fb49f9685cc2512882fe7bc1016b90228
parent9666eea62b8cf763027d1f01acbb403c1c6097e0 (diff)
downloadmakers-a3d602d6e84a91b7656b80e3a7e45caa532b841e.tar.gz
makers-a3d602d6e84a91b7656b80e3a7e45caa532b841e.zip
avoid redundancy
-rw-r--r--src/makefile/conditional.rs48
-rw-r--r--src/makefile/functions.rs4
-rw-r--r--src/makefile/macro.rs30
-rw-r--r--src/makefile/mod.rs4
-rw-r--r--src/makefile/token.rs1
5 files changed, 43 insertions, 44 deletions
diff --git a/src/makefile/conditional.rs b/src/makefile/conditional.rs
index a3c3e0d..6795051 100644
--- a/src/makefile/conditional.rs
+++ b/src/makefile/conditional.rs
@@ -1,6 +1,6 @@
use super::token::TokenString;
-pub enum ConditionalLine {
+pub enum Line {
/// spelled "ifeq"
IfEqual(TokenString, TokenString),
/// spelled "ifneq"
@@ -12,12 +12,12 @@ pub enum ConditionalLine {
/// spelled "else"
Else,
/// spelled "else condition"
- ElseIf(Box<ConditionalLine>),
+ ElseIf(Box<Line>),
/// spelled "endif"
EndIf,
}
-pub enum ConditionalState {
+pub enum State {
/// we saw a conditional, the condition was true, we're executing now
/// and if we hit an else we will start SkippingUntilEndIf
Executing,
@@ -31,7 +31,7 @@ pub enum ConditionalState {
SkippingUntilEndIf,
}
-impl ConditionalState {
+impl State {
pub const fn skipping(&self) -> bool {
match self {
Self::Executing => false,
@@ -40,14 +40,14 @@ impl ConditionalState {
}
}
-pub enum ConditionalStateAction {
- Push(ConditionalState),
- Replace(ConditionalState),
+pub enum StateAction {
+ Push(State),
+ Replace(State),
Pop,
}
-impl ConditionalStateAction {
- pub fn apply_to(self, stack: &mut Vec<ConditionalState>) {
+impl StateAction {
+ pub fn apply_to(self, stack: &mut Vec<State>) {
match self {
Self::Push(state) => stack.push(state),
Self::Replace(state) => match stack.last_mut() {
@@ -77,7 +77,7 @@ fn decode_condition_args(line_body: &str) -> Option<(TokenString, TokenString)>
Some((arg1, arg2))
}
-impl ConditionalLine {
+impl Line {
pub fn from(
line: &str,
expand_macro: impl Fn(&TokenString) -> anyhow::Result<String>,
@@ -112,46 +112,44 @@ impl ConditionalLine {
pub fn action(
&self,
- current_state: Option<&ConditionalState>,
+ current_state: Option<&State>,
is_macro_defined: impl Fn(&str) -> bool,
expand_macro: impl Fn(&TokenString) -> anyhow::Result<String>,
- ) -> anyhow::Result<ConditionalStateAction> {
- use ConditionalState as State;
- use ConditionalStateAction as Action;
+ ) -> anyhow::Result<StateAction> {
Ok(match self {
Self::IfEqual(arg1, arg2) => {
let arg1 = expand_macro(arg1)?;
let arg2 = expand_macro(arg2)?;
if arg1 == arg2 {
- Action::Push(State::Executing)
+ StateAction::Push(State::Executing)
} else {
- Action::Push(State::SkippingUntilElseOrEndIf)
+ StateAction::Push(State::SkippingUntilElseOrEndIf)
}
}
Self::IfNotEqual(arg1, arg2) => {
let arg1 = expand_macro(arg1)?;
let arg2 = expand_macro(arg2)?;
if arg1 == arg2 {
- Action::Push(State::SkippingUntilElseOrEndIf)
+ StateAction::Push(State::SkippingUntilElseOrEndIf)
} else {
- Action::Push(State::Executing)
+ StateAction::Push(State::Executing)
}
}
Self::IfDefined(name) => {
if is_macro_defined(name) {
- Action::Push(State::Executing)
+ StateAction::Push(State::Executing)
} else {
- Action::Push(State::SkippingUntilElseOrEndIf)
+ StateAction::Push(State::SkippingUntilElseOrEndIf)
}
}
Self::IfNotDefined(name) => {
if is_macro_defined(name) {
- Action::Push(State::SkippingUntilElseOrEndIf)
+ StateAction::Push(State::SkippingUntilElseOrEndIf)
} else {
- Action::Push(State::Executing)
+ StateAction::Push(State::Executing)
}
}
- Self::Else => Action::Replace(match current_state {
+ Self::Else => StateAction::Replace(match current_state {
Some(State::Executing) | Some(State::SkippingUntilEndIf) => {
State::SkippingUntilEndIf
}
@@ -160,14 +158,14 @@ impl ConditionalLine {
}),
Self::ElseIf(inner_condition) => match current_state {
Some(State::Executing) | Some(State::SkippingUntilEndIf) => {
- Action::Replace(State::SkippingUntilEndIf)
+ StateAction::Replace(State::SkippingUntilEndIf)
}
Some(State::SkippingUntilElseOrEndIf) => {
inner_condition.action(current_state, is_macro_defined, expand_macro)?
}
None => panic!("got an ElseIf but not in a conditional"),
},
- Self::EndIf => Action::Pop,
+ Self::EndIf => StateAction::Pop,
})
}
}
diff --git a/src/makefile/functions.rs b/src/makefile/functions.rs
index c73d7e7..005f906 100644
--- a/src/makefile/functions.rs
+++ b/src/makefile/functions.rs
@@ -1,5 +1,5 @@
use super::pattern::r#match;
-use super::r#macro::{MacroSet, MacroSource};
+use super::r#macro::{Set as MacroSet, Source as MacroSource};
use super::token::TokenString;
pub fn expand_call(name: &str, args: &[TokenString], macros: &MacroSet) -> anyhow::Result<String> {
@@ -242,7 +242,7 @@ mod call {
mod test {
use super::*;
- use crate::makefile::r#macro::{MacroSet, MacroSource};
+ use crate::makefile::r#macro::{Set as MacroSet, Source as MacroSource};
type R = anyhow::Result<()>;
diff --git a/src/makefile/macro.rs b/src/makefile/macro.rs
index 0b7a27d..f18060f 100644
--- a/src/makefile/macro.rs
+++ b/src/makefile/macro.rs
@@ -9,7 +9,7 @@ use super::functions;
use super::token::{Token, TokenString};
#[derive(Debug, Clone)]
-pub enum MacroSource {
+pub enum Source {
File,
CommandLineOrMakeflags,
Environment,
@@ -21,13 +21,13 @@ pub trait LookupInternal: for<'a> Fn(&'a str) -> anyhow::Result<String> {}
impl<F: for<'a> Fn(&'a str) -> anyhow::Result<String>> LookupInternal for F {}
#[derive(Clone)]
-pub struct MacroSet<'parent, 'lookup> {
- parent: Option<&'parent MacroSet<'parent, 'lookup>>,
- data: HashMap<String, (MacroSource, TokenString)>,
+pub struct Set<'parent, 'lookup> {
+ parent: Option<&'parent Set<'parent, 'lookup>>,
+ data: HashMap<String, (Source, TokenString)>,
lookup_internal: Option<&'lookup dyn LookupInternal>,
}
-impl<'parent, 'lookup> MacroSet<'parent, 'lookup> {
+impl<'parent, 'lookup> Set<'parent, 'lookup> {
pub fn new() -> Self {
Self {
parent: None,
@@ -38,7 +38,7 @@ impl<'parent, 'lookup> MacroSet<'parent, 'lookup> {
pub fn add_builtins(&mut self) {
for (k, v) in builtins() {
- self.data.insert(k.into(), (MacroSource::Builtin, v));
+ self.data.insert(k.into(), (Source::Builtin, v));
}
}
@@ -46,7 +46,7 @@ impl<'parent, 'lookup> MacroSet<'parent, 'lookup> {
for (k, v) in env::vars() {
if k != "MAKEFLAGS" && k != "SHELL" {
self.data
- .insert(k, (MacroSource::Environment, TokenString::text(v)));
+ .insert(k, (Source::Environment, TokenString::text(v)));
}
}
}
@@ -61,13 +61,13 @@ impl<'parent, 'lookup> MacroSet<'parent, 'lookup> {
}
}
- pub fn get(&self, name: &str) -> Option<&(MacroSource, TokenString)> {
+ pub fn get(&self, name: &str) -> Option<&(Source, TokenString)> {
self.data
.get(name)
.or_else(|| self.parent.and_then(|parent| parent.get(name)))
}
- pub fn set(&mut self, name: String, source: MacroSource, text: TokenString) {
+ pub fn set(&mut self, name: String, source: Source, text: TokenString) {
self.data.insert(name, (source, text));
}
@@ -76,7 +76,7 @@ impl<'parent, 'lookup> MacroSet<'parent, 'lookup> {
}
// `remove` is fine, but I think for "remove-and-return" `pop` is better
- pub fn pop(&mut self, name: &str) -> Option<(MacroSource, TokenString)> {
+ pub fn pop(&mut self, name: &str) -> Option<(Source, TokenString)> {
self.data.remove(name)
}
@@ -121,16 +121,16 @@ impl<'parent, 'lookup> MacroSet<'parent, 'lookup> {
Ok(result)
}
- pub fn with_lookup<'l, 's: 'l>(&'s self, lookup: &'l dyn LookupInternal) -> MacroSet<'s, 'l> {
- MacroSet {
+ pub fn with_lookup<'l, 's: 'l>(&'s self, lookup: &'l dyn LookupInternal) -> Set<'s, 'l> {
+ Set {
parent: Some(self),
data: HashMap::new(),
lookup_internal: Some(lookup),
}
}
- pub fn with_overlay<'s>(&'s self) -> MacroSet<'s, 'lookup> {
- MacroSet {
+ pub fn with_overlay<'s>(&'s self) -> Set<'s, 'lookup> {
+ Set {
parent: Some(self),
data: HashMap::new(),
lookup_internal: None,
@@ -138,7 +138,7 @@ impl<'parent, 'lookup> MacroSet<'parent, 'lookup> {
}
}
-impl fmt::Display for MacroSet<'_, '_> {
+impl fmt::Display for Set<'_, '_> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let pieces = self
.data
diff --git a/src/makefile/mod.rs b/src/makefile/mod.rs
index d9c9b46..94a104a 100644
--- a/src/makefile/mod.rs
+++ b/src/makefile/mod.rs
@@ -22,9 +22,9 @@ mod target;
mod token;
use command_line::CommandLine;
-use conditional::{ConditionalLine, ConditionalState};
+use conditional::{Line as ConditionalLine, State as ConditionalState};
use inference_rules::InferenceRule;
-use r#macro::{MacroSet, MacroSource};
+use r#macro::{Set as MacroSet, Source as MacroSource};
use target::Target;
use token::{tokenize, Token, TokenString};
diff --git a/src/makefile/token.rs b/src/makefile/token.rs
index dee290e..85d2e96 100644
--- a/src/makefile/token.rs
+++ b/src/makefile/token.rs
@@ -12,6 +12,7 @@ use nom::{
Finish, IResult,
};
+#[allow(clippy::module_name_repetitions)]
#[derive(PartialEq, Eq, Clone, Debug)]
pub struct TokenString(Vec<Token>);