hephasm 0.1.0

Assembler for Asmodeus architecture with macro support and extended instructions
Documentation
//! Hephasm - Assembler for Asmodeus language
//! Converts AST into binary machine code for Machine W (asmachine)

mod error;
mod types;
mod symbol_table;
mod macro_processor;
mod instruction;
mod operand;
mod directive;
mod ascii_art;
mod passes;
mod hephasm;

pub use error::AssemblerError;
pub use types::{Symbol, SymbolType, ExpandedMacro};
pub use symbol_table::SymbolTable;
pub use hephasm::Assembler;

use parseid::ast::Program;

pub fn assemble_source(source: &str) -> Result<Vec<u16>, Box<dyn std::error::Error>> {
    let program = parseid::parse_source(source)?;
    let mut assembler = Assembler::new();
    Ok(assembler.assemble(&program)?)
}

pub fn assemble_source_extended(source: &str, extended_mode: bool) -> Result<Vec<u16>, Box<dyn std::error::Error>> {
    let program = parseid::parse_source(source)?;
    let mut assembler = Assembler::new_with_extended(extended_mode);
    Ok(assembler.assemble(&program)?)
}

pub fn assemble_program(program: &Program) -> Result<Vec<u16>, AssemblerError> {
    let mut assembler = Assembler::new();
    assembler.assemble(program)
}

pub fn assemble_program_extended(program: &Program, extended_mode: bool) -> Result<Vec<u16>, AssemblerError> {
    let mut assembler = Assembler::new_with_extended(extended_mode);
    assembler.assemble(program)
}

#[cfg(test)]
mod tests {
    use crate::ascii_art::print_hephasm_logo;

    #[test]
    fn test_hephasm_logo() {
        print_hephasm_logo();
        assert!(true);
    }
}