Ensure whitespace is skipped

next
Sayan Nandan 2 years ago
parent 2434170ede
commit 08a286d543
No known key found for this signature in database
GPG Key ID: 8BC07A0A4D41DD52

@ -253,7 +253,7 @@ impl LexItem for LitStringEscaped {
// UNSAFE(@ohsayan): First operand guarantees correctness
scanner.deref_cursor() == b'"'
};
scanner.skip_separator();
match String::from_utf8(stringbuf) {
Ok(s) if is_okay => Ok(Self(s)),
_ => Err(LangError::TypeParseFailure),
@ -279,6 +279,7 @@ macro_rules! impl_punctuation {
// UNSAFE(@ohsayan): The above condition guarantees safety
scanner.incr_cursor()
};
scanner.skip_separator();
Ok(Self)
} else {
Err(LangError::InvalidSyntax)
@ -311,15 +312,19 @@ pub enum Type {
impl LexItem for Type {
#[inline(always)]
fn lex(scanner: &mut Scanner) -> LangResult<Self> {
let try_ident = Ident::lex(scanner)?;
let ret = match unsafe {
// UNSAFE(@ohsayan): The lifetime of the `scanner` ensures validity
try_ident.as_slice()
} {
b"string" => Self::String,
b"binary" => Self::Binary,
b"list" => Self::List,
_ => return Err(LangError::UnknownType),
let ret = match Ident::lex(scanner) {
Ok(ret) => {
match unsafe {
// UNSAFE(@ohsayan): The lifetime of the `scanner` ensures validity
ret.as_slice()
} {
b"string" => Self::String,
b"binary" => Self::Binary,
b"list" => Self::List,
_ => return Err(LangError::UnknownType),
}
}
Err(_) => return Err(LangError::InvalidSyntax),
};
Ok(ret)
}
@ -382,6 +387,7 @@ impl LexItem for TypeExpression {
}
valid_expr &= open_c == close_c;
if valid_expr {
scanner.skip_separator();
Ok(Self(type_expr))
} else {
Err(LangError::BadExpression)

Loading…
Cancel
Save