add file resolver

This commit is contained in:
nora 2022-07-18 16:17:57 +02:00
parent cfb6ef500a
commit a0e33835ed

View file

@ -1,12 +1,32 @@
mod lexer;
use std::{io, path::Path};
use lexer::PLexer;
pub use lexer::{PToken, Punctuator};
use crate::Span;
enum IncludeKind {
AngleBracketed,
Quoted,
}
trait FileResolver {
fn resolve_file(&self, file_name: &Path, kind: IncludeKind) -> io::Result<Vec<u8>>;
}
struct Todo;
impl FileResolver for Todo {
fn resolve_file(&self, file_name: &Path, kind: IncludeKind) -> io::Result<Vec<u8>> {
todo!()
}
}
pub struct Preprocessor<L> {
lexer: L,
resolver: Box<dyn FileResolver>,
}
impl<'src, L> Iterator for Preprocessor<L>
@ -23,7 +43,10 @@ where
pub fn preprocess_tokens(src: &str) -> impl Iterator<Item = (PToken<'_>, Span)> {
let lexer = PLexer::new(src);
let preprocessor = Preprocessor { lexer };
let preprocessor = Preprocessor {
lexer,
resolver: Box::new(Todo),
};
preprocessor
}