diff options
author | Ben Bridle <ben@derelict.engineering> | 2025-07-04 21:17:30 +1200 |
---|---|---|
committer | Ben Bridle <ben@derelict.engineering> | 2025-07-04 21:17:30 +1200 |
commit | 99ad972395af9953e433b4a7c11bcfd6c4daad3f (patch) | |
tree | 78e6b2c8f3dcc4acc0a3d7bc3e22fbfbc2d973ad /src/stages/bytecode.rs | |
parent | f454238e433792fda0f66f807f7ec12d3e560fa2 (diff) | |
download | bedrock-asm-99ad972395af9953e433b4a7c11bcfd6c4daad3f.zip |
Fix sort order of generated symbols file
The symbols file was not being generated in ascending address order.
This was because the assembler was using unordered HashMaps, which have
now been replaced with ordered IndexMaps.
Diffstat (limited to 'src/stages/bytecode.rs')
-rw-r--r-- | src/stages/bytecode.rs | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/stages/bytecode.rs b/src/stages/bytecode.rs index f0b99df..02cc739 100644 --- a/src/stages/bytecode.rs +++ b/src/stages/bytecode.rs @@ -1,6 +1,6 @@ use crate::*; -use std::collections::HashMap; +use indexmap::IndexMap; /// Doesn't truncate trailing null bytes. @@ -22,8 +22,8 @@ pub fn generate_bytecode(semantic: &Program) -> Result<AssembledProgram, Vec<Tra pub struct BytecodeGenerator<'a> { - definitions: &'a HashMap<String, Tracked<Definition>>, - labels: HashMap<String, LabelInformation>, + definitions: &'a IndexMap<String, Tracked<Definition>>, + labels: IndexMap<String, LabelInformation>, stack: Vec<usize>, bytecode: Vec<u8>, errors: Vec<Tracked<BytecodeError>>, @@ -35,8 +35,8 @@ struct LabelInformation { } impl<'a> BytecodeGenerator<'a> { - pub fn new(definitions: &'a HashMap<String, Tracked<Definition>>) -> Self { - let mut labels = HashMap::new(); + pub fn new(definitions: &'a IndexMap<String, Tracked<Definition>>) -> Self { + let mut labels = IndexMap::new(); for (name, definition) in definitions { if let DefinitionVariant::LabelDefinition = definition.variant { // Use fake address for now. |