diff options
author | Ben Bridle <ben@derelict.engineering> | 2025-02-27 14:53:21 +1300 |
---|---|---|
committer | Ben Bridle <ben@derelict.engineering> | 2025-02-27 14:53:31 +1300 |
commit | 67470aea034fd46f4bbcfe815c51ad3451043188 (patch) | |
tree | 83d78d3d28e094d6a3af347d2ff2ff16472e5421 /src/compiler.rs | |
parent | 4e8fae09f0f7d6f3a4ddbe285aeb01ef0622b761 (diff) | |
download | torque-asm-67470aea034fd46f4bbcfe815c51ad3451043188.zip |
Finish first working version of Torque
This is a huge and messy commit, worked on piecemeal while traveling
and while the language was still being designed.
Diffstat (limited to 'src/compiler.rs')
-rw-r--r-- | src/compiler.rs | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/src/compiler.rs b/src/compiler.rs index 2ad9145..10f1433 100644 --- a/src/compiler.rs +++ b/src/compiler.rs @@ -58,7 +58,7 @@ impl Compiler { /// Parse all symbols from a source code string. fn parse_symbols(source_code: &str, path: Option<&Path>) -> Vec<Symbol> { - use syntactic::*; + use SyntacticTokenVariant as SynVar; use DefinitionType::*; use SymbolRole::*; let mut symbols = Vec::new(); @@ -80,41 +80,41 @@ fn parse_symbols(source_code: &str, path: Option<&Path>) -> Vec<Symbol> { } } - for token in SyntacticParser::from_source_code(&source_code, path) { + let syntactic_tokens = SyntacticParser::new(&source_code, path).parse(); + for token in syntactic_tokens { match token.variant { - TokenVariant::MacroDefinition(name) => { + SynVar::MacroDefinition(name) => { push!(name.clone(), token.source, Definition(MustPrecedeReference)); macro_name = Some(name); parse_arg_list = true; } - TokenVariant::MacroDefinitionTerminator => { + SynVar::MacroDefinitionTerminator => { macro_name = None; } - TokenVariant::LabelDefinition(name) => { + SynVar::LabelDefinition(name) => { push!(name.clone(), token.source, Definition(CanFollowReference)); } - TokenVariant::Symbol(name) => if parse_arg_list && after_separator { + SynVar::Symbol(name) => if parse_arg_list && after_separator { push!(name, token.source, Definition(MustPrecedeReference)); } else { parse_arg_list = false; push!(name, token.source, Reference); } - TokenVariant::Separator => { + SynVar::Separator => { after_separator = true; continue; } - TokenVariant::BlockOpen | TokenVariant::BlockClose => { + SynVar::BlockOpen | SynVar::BlockClose => { continue; } - TokenVariant::PackedBinaryLiteral(pbl) => { + SynVar::PackedBinaryLiteral(pbl) => { for field in pbl.fields { push!(field.name.to_string(), field.source, Reference) } } - TokenVariant::ConstantExpression(expr) => { - use ConstantExpressionTokenVariant as TokenVar; + SynVar::Expression(expr) => { for token in expr.tokens { - if let TokenVar::SymbolReference(name) = token.variant { + if let ExpressionTokenVariant::Invocation(name) = token.variant { push!(name, token.source, Reference); } } |