cl-parser, cl-repl: Add ./[mod].cl to module search path
This commit is contained in:
parent
2fd08193fd
commit
e39b390441
@ -81,18 +81,32 @@ impl Fold for ModuleInliner {
|
|||||||
self.path.set_extension("cl");
|
self.path.set_extension("cl");
|
||||||
|
|
||||||
let file = match std::fs::read_to_string(&self.path) {
|
let file = match std::fs::read_to_string(&self.path) {
|
||||||
|
Err(error) => {
|
||||||
|
let Some(basename) = self.path.file_name() else {
|
||||||
|
return self.handle_io_error(error);
|
||||||
|
};
|
||||||
|
let path = self
|
||||||
|
.path
|
||||||
|
.parent()
|
||||||
|
.and_then(Path::parent)
|
||||||
|
.map(|path| path.join(basename))
|
||||||
|
.unwrap_or_default();
|
||||||
|
|
||||||
|
match std::fs::read_to_string(&path) {
|
||||||
Err(error) => return self.handle_io_error(error),
|
Err(error) => return self.handle_io_error(error),
|
||||||
Ok(file) => file,
|
Ok(file) => file,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(file) => file,
|
||||||
};
|
};
|
||||||
|
|
||||||
let kind = match Parser::new(Lexer::new(&file)).parse() {
|
match Parser::new(Lexer::new(&file)).parse() {
|
||||||
Err(e) => return self.handle_parse_error(e),
|
Err(e) => self.handle_parse_error(e),
|
||||||
Ok(file) => ModuleKind::Inline(file),
|
Ok(file) => {
|
||||||
};
|
|
||||||
// cd path/mod
|
|
||||||
self.path.set_extension("");
|
self.path.set_extension("");
|
||||||
|
|
||||||
// The newly loaded module may need further inlining
|
// The newly loaded module may need further inlining
|
||||||
self.fold_module_kind(kind)
|
ModuleKind::Inline(self.fold_file(file))
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -72,8 +72,7 @@ pub fn run(args: Args) -> Result<(), Box<dyn Error>> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn load_file(env: &mut Environment, path: impl AsRef<Path>) -> Result<ConValue, Box<dyn Error>> {
|
fn load_file(env: &mut Environment, path: impl AsRef<Path>) -> Result<ConValue, Box<dyn Error>> {
|
||||||
let inliner =
|
let inliner = cl_parser::inliner::ModuleInliner::new(path.as_ref().with_extension(""));
|
||||||
cl_parser::inliner::ModuleInliner::new(path.as_ref().parent().unwrap_or(Path::new("")));
|
|
||||||
let file = std::fs::read_to_string(path)?;
|
let file = std::fs::read_to_string(path)?;
|
||||||
let code = Parser::new(Lexer::new(&file)).parse()?;
|
let code = Parser::new(Lexer::new(&file)).parse()?;
|
||||||
let code = match inliner.inline(code) {
|
let code = match inliner.inline(code) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user