DEV: Canonicalize is never the right thing on windows.

This commit is contained in:
Jeremy Wall 2019-11-09 15:39:32 -06:00
parent acffc6d5da
commit 6f714e6583
2 changed files with 49 additions and 23 deletions

View File

@ -568,9 +568,12 @@ impl ModuleDef {
}
pub fn imports_to_absolute(&mut self, base: PathBuf) {
&base;
let rewrite_import = |e: &mut Expression| {
if let Expression::Include(ref mut def) = e {
let path = PathBuf::from(&def.path.fragment);
#[cfg(not(windows))]
{
if path.is_relative() {
def.path.fragment = base
.join(path)
@ -580,12 +583,21 @@ impl ModuleDef {
.to_string();
}
}
#[cfg(windows)]
{
if path.is_relative() {
def.path.fragment = dbg!(base.join(path).to_string_lossy().to_string());
}
}
}
if let Expression::Import(ref mut def) = e {
let path = PathBuf::from(&def.path.fragment);
let path = dbg!(PathBuf::from(&def.path.fragment));
// std/ paths are special and do not get made into absolute paths.
if path.starts_with("std/") {
return;
}
#[cfg(not(windows))]
{
if path.is_relative() {
def.path.fragment = base
.join(path)
@ -595,6 +607,13 @@ impl ModuleDef {
.to_string();
}
}
#[cfg(windows)]
{
if path.is_relative() {
def.path.fragment = base.join(path).to_string_lossy().to_string();
}
}
}
};
let mut walker = walk::AstWalker::new().with_expr_handler(&rewrite_import);
for stmt in self.statements.iter_mut() {

View File

@ -381,6 +381,12 @@ where
} else {
normalized = path;
}
#[cfg(windows)]
{
Ok(normalized)
}
#[cfg(not(windows))]
{
match normalized.canonicalize() {
Ok(p) => Ok(p),
Err(e) => Err(error::BuildError::new(
@ -391,6 +397,7 @@ where
.to_boxed()),
}
}
}
fn eval_import(&self, def: &ImportDef) -> Result<Rc<Val>, Box<dyn Error>> {
// Look for a std file first.