diff options
Diffstat (limited to 'src/stages/syntactic.rs')
| -rw-r--r-- | src/stages/syntactic.rs | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/src/stages/syntactic.rs b/src/stages/syntactic.rs index 6453ae0..59b8b95 100644 --- a/src/stages/syntactic.rs +++ b/src/stages/syntactic.rs @@ -37,7 +37,7 @@ fn parse_syntactic_from_tokeniser(mut t: Tokeniser, label_name: &str) -> Result< } // Eat characters until the end character is found. - macro_rules! is_any_end { + macro_rules! is_end { ($end:expr) => { |t: &mut Tokeniser| { t.eat_char() == Some($end) @@ -45,15 +45,6 @@ fn parse_syntactic_from_tokeniser(mut t: Tokeniser, label_name: &str) -> Result< }; } - // Eat characters until the end character is found without a preceding back-slash. - macro_rules! is_plain_end { - ($end:expr) => { - |t: &mut Tokeniser| { - t.eat_if(concat!('\\', $end)).is_some() || t.eat_char() == Some($end) - } - }; - } - loop { // Eat leading whitespace. while let Some(c) = t.peek_char() { @@ -67,7 +58,7 @@ fn parse_syntactic_from_tokeniser(mut t: Tokeniser, label_name: &str) -> Result< let token = match c { '"' => { let source = t.get_source(); - match t.track_until(is_plain_end!('"')) { + match t.track_until(is_end!('"')) { Some(string) => { let mut bytes = string.into_bytes(); bytes.push(0x00); @@ -78,14 +69,14 @@ fn parse_syntactic_from_tokeniser(mut t: Tokeniser, label_name: &str) -> Result< } '\'' => { let source = t.get_source(); - match t.track_until(is_plain_end!('\'')) { + match t.track_until(is_end!('\'')) { Some(string) => SyntacticToken::String(string.into_bytes()), None => err!(SyntacticError::UnterminatedRawString, source), } } '(' => { let source = t.get_source(); - if let Some(string) = t.track_until(is_any_end!(')')) { + if let Some(string) = t.track_until(is_end!(')')) { // Check if the comment fills the entire line. if t.start.position.column == 0 && t.end_of_line() { if let Some(path) = string.strip_prefix(": ") { @@ -105,7 +96,7 @@ fn parse_syntactic_from_tokeniser(mut t: Tokeniser, label_name: &str) -> Result< let source = t.get_source(); check_name!(name, source); t.mark_child(); - if let Some(_) = t.track_until(is_any_end!(';')) { + if let Some(_) = t.track_until(is_end!(';')) { let child = t.tokenise_child_span(); match parse_body_from_tokeniser(child, &label_name) { Ok(body) => { @@ -149,7 +140,7 @@ fn parse_syntactic_from_tokeniser(mut t: Tokeniser, label_name: &str) -> Result< } }, ':' => { - SyntacticToken::Symbol(String::from(':')) + SyntacticToken::Instruction(Instruction { value: 0x21 }) } c => { let token = format!("{c}{}", t.eat_token()); |
