Skip to content

Commit

Permalink
compiletest: dedup revision line logic.
Browse files Browse the repository at this point in the history
  • Loading branch information
luqmana committed Jul 20, 2022
1 parent 8de7f04 commit 5d7cd65
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 31 deletions.
36 changes: 25 additions & 11 deletions src/tools/compiletest/src/header.rs
Original file line number Diff line number Diff line change
Expand Up @@ -535,6 +535,29 @@ impl TestProps {
}
}

pub fn line_directive<'line>(
comment: &str,
ln: &'line str,
) -> Option<(Option<&'line str>, &'line str)> {
if ln.starts_with(comment) {
let ln = ln[comment.len()..].trim_start();
if ln.starts_with('[') {
// A comment like `//[foo]` is specific to revision `foo`
if let Some(close_brace) = ln.find(']') {
let lncfg = &ln[1..close_brace];

Some((Some(lncfg), ln[(close_brace + 1)..].trim_start()))
} else {
panic!("malformed condition directive: expected `{}[foo]`, found `{}`", comment, ln)
}
} else {
Some((None, ln))
}
} else {
None
}
}

fn iter_header<R: Read>(testfile: &Path, rdr: R, it: &mut dyn FnMut(Option<&str>, &str)) {
if testfile.is_dir() {
return;
Expand All @@ -557,17 +580,8 @@ fn iter_header<R: Read>(testfile: &Path, rdr: R, it: &mut dyn FnMut(Option<&str>
let ln = ln.trim();
if ln.starts_with("fn") || ln.starts_with("mod") {
return;
} else if ln.starts_with(comment) && ln[comment.len()..].trim_start().starts_with('[') {
// A comment like `//[foo]` is specific to revision `foo`
if let Some(close_brace) = ln.find(']') {
let open_brace = ln.find('[').unwrap();
let lncfg = &ln[open_brace + 1..close_brace];
it(Some(lncfg), ln[(close_brace + 1)..].trim_start());
} else {
panic!("malformed condition directive: expected `{}[foo]`, found `{}`", comment, ln)
}
} else if ln.starts_with(comment) {
it(None, ln[comment.len()..].trim_start());
} else if let Some((lncfg, ln)) = line_directive(comment, ln) {
it(lncfg, ln);
}
}
}
Expand Down
22 changes: 2 additions & 20 deletions src/tools/compiletest/src/runtest/debugger.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use crate::common::Config;
use crate::header::line_directive;
use crate::runtest::ProcRes;

use std::fs::File;
Expand Down Expand Up @@ -32,26 +33,7 @@ impl DebuggerCommands {
counter += 1;
match line {
Ok(line) => {
let (line, lnrev) = if line.starts_with("//") {
let line = line[2..].trim_start();
if line.starts_with('[') {
if let Some(close_brace) = line.find(']') {
let open_brace = line.find('[').unwrap();
let lnrev = &line[open_brace + 1..close_brace];
let line = line[(close_brace + 1)..].trim_start();
(line, Some(lnrev))
} else {
panic!(
"malformed condition direction: expected `//[foo]`, found `{}`",
line
)
}
} else {
(line, None)
}
} else {
(line.as_str(), None)
};
let (lnrev, line) = line_directive("//", &line).unwrap_or((None, &line));

// Skip any revision specific directive that doesn't match the current
// revision being tested
Expand Down

0 comments on commit 5d7cd65

Please sign in to comment.