diff options
author | Melody Horn <melody@boringcactus.com> | 2021-03-26 21:15:27 -0600 |
---|---|---|
committer | Melody Horn <melody@boringcactus.com> | 2021-03-26 21:15:27 -0600 |
commit | 41ad330695cb844ee0c6846ac307f33cbd2068a7 (patch) | |
tree | 804c4d18b4d28ffd221b579cfd67aabcadc442ad | |
parent | 18c80339a728dadaec94b3918eb58c7def68462d (diff) | |
download | makers-41ad330695cb844ee0c6846ac307f33cbd2068a7.tar.gz makers-41ad330695cb844ee0c6846ac307f33cbd2068a7.zip |
keep a line number so errors are easier to find
-rw-r--r-- | src/makefile/mod.rs | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/makefile/mod.rs b/src/makefile/mod.rs index bd8838a..4c39160 100644 --- a/src/makefile/mod.rs +++ b/src/makefile/mod.rs @@ -270,9 +270,9 @@ impl Makefile { } pub fn and_read(&mut self, source: impl BufRead) -> &mut Makefile { - let mut lines_iter = source.lines().peekable(); + let mut lines_iter = source.lines().enumerate().peekable(); while lines_iter.peek().is_some() { - let line = match lines_iter.next() { + let (line_number, line) = match lines_iter.next() { Some(x) => x, // fancy Rust trick: break-with-an-argument to return a value from a // `loop` expression @@ -284,7 +284,7 @@ impl Makefile { // handle escaped newlines while line.ends_with(r"\") { let next_line = match lines_iter.next() { - Some(x) => x, + Some((_, x)) => x, None => Ok("".into()), }; let next_line = next_line.expect("failed to read line of makefile!"); @@ -362,7 +362,7 @@ impl Makefile { Some((prerequisites, mut command)) => { while command.ends_with(r"\") && lines_iter.peek().is_some() { command.strip_suffix(r"\"); - command.extend(tokenize(&lines_iter.next().unwrap().unwrap())); + command.extend(tokenize(&lines_iter.next().unwrap().1.unwrap())); } (prerequisites, vec![command]) } @@ -371,12 +371,12 @@ impl Makefile { let prerequisites = self.expand_macros(&prerequisites, None); let prerequisites = prerequisites.split_whitespace().map(|x| x.into()).collect::<Vec<String>>(); - while lines_iter.peek().and_then(|x| x.as_ref().ok()).map_or(false, |line| line.starts_with('\t')) { - let line = lines_iter.next().unwrap().unwrap(); + while lines_iter.peek().and_then(|(_, x)| x.as_ref().ok()).map_or(false, |line| line.starts_with('\t')) { + let line = lines_iter.next().unwrap().1.unwrap(); let mut line: String = line.strip_prefix("\t").unwrap().into(); while line.ends_with('\\') { match lines_iter.next() { - Some(Ok(next_line)) => { + Some((_, Ok(next_line))) => { let next_line = next_line.strip_prefix("\t").unwrap_or(&next_line); line.push('\n'); line.push_str(next_line); @@ -497,7 +497,7 @@ impl Makefile { self.macros.insert(name.into(), (MacroSource::File, value)); } LineType::Unknown => { - panic!("Unknown line {:?}", line_tokens); + panic!("error: line {}: unknown line {:?}", line_number, line_tokens); } } } |