use crate::*; pub struct AssembledProgram { pub bytecode: Vec, pub symbols: Vec, } pub struct AssembledSymbol { pub name: String, pub address: usize, pub source: SourceSpan, } pub enum BytecodeError { InvalidLabelAddress(usize), InvalidBlockAddress(usize), } pub fn report_bytecode_errors(errors: &[Tracked], source_code: &str) { for error in errors { report_bytecode_error(error, source_code); } } fn report_bytecode_error(error: &Tracked, source_code: &str) { let context = Context { source_code: &source_code, source: &error.source }; let message = match &error.value { BytecodeError::InvalidLabelAddress(address) => &format!("The label address exceeds 0xFFFF: 0x{address:X}"), BytecodeError::InvalidBlockAddress(address) => &format!("The block address exceeds 0xFFFF: 0x{address:X}"), }; report_source_issue(LogLevel::Error, &context, message); }