Scrap preprocessor, add .include directive instead
Signed-off-by: Alek Ratzloff <alekratz@gmail.com>
This commit is contained in:
49
src/main.rs
49
src/main.rs
@@ -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(|| {
|
||||
|
||||
Reference in New Issue
Block a user