summaryrefslogtreecommitdiff
path: root/src/translators/symbols_generator.rs
blob: 06bbaa8849a0ea43993d476241a2b3a14d0f4b1c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
use crate::*;

use SemanticTokenVariant as SemVar;


pub fn generate_symbols_file(semantic_tokens: &[SemanticToken]) -> String {
    let mut symbols = String::new();

    for token in semantic_tokens {
        if let SemVar::LabelDefinition(definition) = &token.variant {
            let address = token.bytecode.location.address;
            if address > 0xffff { break; }
            let name = &definition.name;
            let path = match &token.source.in_source {
                Some(source) => &source.path,
                None => &token.source.in_merged.path,
            };
            if let Some(path) = path {
                let path = path.as_os_str().to_string_lossy();
                symbols.push_str(&format!("{address:04x} {name} {path}\n"));
            } else {
                symbols.push_str(&format!("{address:04x} {name}\n"));
            }
        }
    }

    return symbols;
}