diff --git a/src/protocol/parser/pass_definitions.rs b/src/protocol/parser/pass_definitions.rs index e9f1d96120d8954e41f43ac58d3050c0efdc57e8..024c1ea3a753a01b85fb332105ee12d4fb7527f6 100644 --- a/src/protocol/parser/pass_definitions.rs +++ b/src/protocol/parser/pass_definitions.rs @@ -255,6 +255,7 @@ impl PassDefinitions { // Retrieve function name consume_exact_ident(&module.source, iter, KW_FUNCTION)?; let (ident_text, _) = consume_ident(&module.source, iter)?; + let stringy = String::from_utf8_lossy(ident_text).to_string(); // Retrieve preallocated DefinitionId let module_scope = SymbolScope::Module(module.root_id); @@ -342,7 +343,9 @@ impl PassDefinitions { fn consume_procedure_body( &mut self, module: &Module, iter: &mut TokenIter, ctx: &mut PassCtx, definition_id: DefinitionId, kind: ProcedureKind ) -> Result<(BlockStatementId, ProcedureSource), ParseError> { - if iter.peek() == Some(TokenKind::Pragma) { + if iter.next() == Some(TokenKind::OpenCurly) && iter.peek() == Some(TokenKind::Pragma) { + // Consume the placeholder "{ #builtin }" tokens + iter.consume(); // opening curly brace let (pragma, pragma_start, pragma_end) = consume_pragma(&module.source, iter)?; if pragma != b"#builtin" { return Err(ParseError::new_error_str_at_span( @@ -351,6 +354,12 @@ impl PassDefinitions { )); } + if iter.next() != Some(TokenKind::CloseCurly) { + // Just to keep the compiler writers in line ;) + panic!("compiler error: when using the #builtin pragma, wrap it in curly braces"); + } + iter.consume(); + // Retrieve module and procedure name assert!(module.name.is_some(), "compiler error: builtin procedure body in unnamed module"); let (_, module_name) = module.name.as_ref().unwrap();