mirror of
https://github.com/ProvableHQ/leo.git
synced 2024-09-19 01:37:34 +03:00
Add parser support for visibilities on structs
This commit is contained in:
parent
47fa89b012
commit
5001f3abde
@ -223,19 +223,21 @@ impl ParserContext<'_> {
|
||||
}
|
||||
|
||||
/// Parses `IDENT: TYPE`.
|
||||
pub(super) fn parse_typed_ident(&mut self) -> Result<(Identifier, Type)> {
|
||||
pub(super) fn parse_typed_ident(&mut self) -> Result<(Identifier, Type, Span)> {
|
||||
let name = self.expect_identifier()?;
|
||||
self.expect(&Token::Colon)?;
|
||||
let type_ = self.parse_type()?.0;
|
||||
let (type_, span) = self.parse_type()?;
|
||||
|
||||
Ok((name, type_))
|
||||
Ok((name, type_, name.span + span))
|
||||
}
|
||||
|
||||
/// Returns a [`Member`] AST node if the next tokens represent a struct member variable.
|
||||
fn parse_member_variable_declaration(&mut self) -> Result<Member> {
|
||||
let (identifier, type_) = self.parse_typed_ident()?;
|
||||
let mode = self.parse_mode()?;
|
||||
|
||||
Ok(Member { identifier, type_ })
|
||||
let (identifier, type_, span) = self.parse_typed_ident()?;
|
||||
|
||||
Ok(Member { mode, identifier, type_, span })
|
||||
}
|
||||
|
||||
/// Parses a struct or record definition, e.g., `struct Foo { ... }` or `record Foo { ... }`.
|
||||
@ -278,6 +280,7 @@ impl ParserContext<'_> {
|
||||
))
|
||||
}
|
||||
|
||||
// TODO: Return a span associated with the mode.
|
||||
/// Returns a [`ParamMode`] AST node if the next tokens represent a function parameter mode.
|
||||
pub(super) fn parse_mode(&mut self) -> Result<Mode> {
|
||||
let private = self.eat(&Token::Private).then_some(self.prev_token.span);
|
||||
@ -293,8 +296,8 @@ impl ParserContext<'_> {
|
||||
(None, None, None, None) => Ok(Mode::None),
|
||||
(Some(_), None, None, None) => Ok(Mode::Private),
|
||||
(None, Some(_), None, None) => Ok(Mode::Public),
|
||||
(None, None, Some(_), None) => Ok(Mode::Const),
|
||||
(None, None, None, Some(_)) => Ok(Mode::Const),
|
||||
(None, None, Some(_), None) => Ok(Mode::Constant),
|
||||
(None, None, None, Some(_)) => Ok(Mode::Constant),
|
||||
_ => {
|
||||
let mut spans = [private, public, constant, const_].into_iter().flatten();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user