Scrap preprocessor, add .include directive instead

Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
2020-02-27 15:52:17 -05:00
parent 0eb394ddf5
commit 4b96902831
12 changed files with 234 additions and 279 deletions

View File

@@ -107,54 +107,13 @@ fn get_writer(path: impl AsRef<Path>) -> Result<Box<dyn Write>> {
fn main() -> Result<()> {
use vm::{
state::State,
obj::{
assemble::{Asm, Assemble},
syn::{lexer, parser, preprocessor},
}
obj::assemble::AsmSession,
};
let opt = Options::from_args();
// Load assembler
let text = {
let mut reader = get_reader(&opt.input)?;
let mut text = String::new();
reader.read_to_string(&mut text)?;
text
};
// Preprocess
let text = {
preprocessor::preprocess(&text)?
};
// Preprocess only - exit early
if opt.preprocess_only {
let outfile = opt.out.clone().unwrap_or_else(|| {
let mut outfile = opt.input.clone();
assert!(outfile.set_extension("pasm"));
outfile
});
let mut writer = get_writer(&outfile)?;
writer.write(&text.as_bytes())?;
return Ok(());
}
let lexerdef = lexer::lexerdef();
let lexer = lexerdef.lexer(&text);
let (res, errors) = parser::parse(&lexer);
// print errors
for err in errors.iter() {
println!("{}", err.pp(&lexer, &parser::token_epp));
}
if !errors.is_empty() {
process::exit(1);
}
let res = res.unwrap();
let mut asm = Asm::default();
let object = res.assemble(&mut asm)?;
let mut asm_session = AsmSession::default();
asm_session.include(&opt.input)?;
let object = asm_session.assemble()?;
if opt.compile_only {
let outfile = opt.out.clone().unwrap_or_else(|| {