pub struct BytecodeSpan { /// The location of this span in the assembled bytecode. pub location: BytecodeLocation, /// The bytes which this span represents. pub bytes: Vec, } impl Default for BytecodeSpan { fn default() -> Self { Self { location: BytecodeLocation { address: 0, length: 0, }, bytes: Vec::new(), } } } #[derive(Clone, Copy)] pub struct BytecodeLocation { // Address of the first byte. pub address: usize, // Length as a number of bytes. pub length: usize, } impl std::fmt::Display for BytecodeLocation { fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> { write!(f, "0x{:>04x}", self.address)?; if self.length > 0 { write!(f, "-0x{:>04x}", self.address + self.length)?; } Ok(()) } }