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);                      }                  }              } |