diff --git a/src/protocol/parser/token_parsing.rs b/src/protocol/parser/token_parsing.rs index 1a81840b3c5a4c112d01c7cd0e032cc66ba87ecd..4de8f5c7636b1fc002d1ebaf7473666a274234b6 100644 --- a/src/protocol/parser/token_parsing.rs +++ b/src/protocol/parser/token_parsing.rs @@ -86,6 +86,15 @@ pub(crate) const KW_TYPE_CHAR: &'static [u8] = KW_TYPE_CHAR_STR.as_bytes(); pub(crate) const KW_TYPE_STRING: &'static [u8] = KW_TYPE_STRING_STR.as_bytes(); pub(crate) const KW_TYPE_INFERRED: &'static [u8] = KW_TYPE_INFERRED_STR.as_bytes(); +// Builtin pragma types +// Not usable by the programmer, but usable in the standard library. These hint +// at the fact that we need a different system (e.g. function overloading) +pub(crate) const PRAGMA_TYPE_VOID: &'static [u8] = b"#type_void"; +pub(crate) const PRAGMA_TYPE_PORTLIKE: &'static [u8] = b"#type_portlike"; +pub(crate) const PRAGMA_TYPE_INTEGERLIKE: &'static [u8] = b"#type_integerlike"; +pub(crate) const PRAGMA_TYPE_ARRAYLIKE: &'static [u8] = b"#type_arraylike"; + + /// A special trait for when consuming comma-separated things such that we can /// push them onto a `Vec` and onto a `ScopedSection`. As we monomorph for /// very specific comma-separated cases I don't expect polymorph bloat. @@ -449,13 +458,13 @@ fn parse_escaped_character(source: &InputSource, literal_span: InputSpan, v: u8) Ok(result) } -pub(crate) fn consume_pragma<'a>(source: &'a InputSource, iter: &mut TokenIter) -> Result<(&'a [u8], InputPosition, InputPosition), ParseError> { +pub(crate) fn consume_pragma<'a>(source: &'a InputSource, iter: &mut TokenIter) -> Result<(&'a [u8], InputSpan), ParseError> { if Some(TokenKind::Pragma) != iter.next() { return Err(ParseError::new_error_str_at_pos(source, iter.last_valid_pos(), "expected a pragma")); } - let (pragma_start, pragma_end) = iter.next_positions(); + let pragma_span = iter.next_span(); iter.consume(); - Ok((source.section_at_pos(pragma_start, pragma_end), pragma_start, pragma_end)) + Ok((source.section_at_span(pragma_span), pragma_span)) } pub(crate) fn has_ident(source: &InputSource, iter: &mut TokenIter, expected: &[u8]) -> bool {