MCPcopy Create free account
hub / github.com/Voxon-Development/zeta-lang / parse_struct_decl

Method parse_struct_decl

scribe-parser/src/parser/declarations.rs:21–111  ·  view source on GitHub ↗

Parse a struct declaration ```rs pub struct Point { x: i32, y: i32, } ```

(
        &mut self,
        visibility: Visibility,
    )

Source from the content-addressed store, hash-verified

19 /// }
20 /// ```
21 pub fn parse_struct_decl(
22 &mut self,
23 visibility: Visibility,
24 ) -> Result<Stmt<'a, 'bump>, DiagnosticError<'a>> {
25 let token = self.cursor.expect(TokenKind::Struct)?;
26
27 let (name, _span) = self.cursor.expect_ident()?;
28
29 // Parse optional generics: <T, U: Display>
30 let generics = if self.cursor.peek() == TokenKind::Lt {
31 self.parse_generics()?
32 } else {
33 None
34 };
35
36 let params = if self.cursor.consume(TokenKind::Semicolon) {
37 None
38 } else if self.cursor.peek() == TokenKind::LParen {
39 // Tuple struct: `struct Foo(i32, i32);`
40 let tuple_fields = self.parse_tuple_struct_fields()?;
41 self.cursor.expect(TokenKind::Semicolon)?;
42 Some(tuple_fields)
43 } else {
44 self.cursor.expect(TokenKind::LBrace)?;
45
46 let mut fields = Vec::new();
47
48 while self.cursor.peek() != TokenKind::RBrace && self.cursor.peek() != TokenKind::EOF {
49 let field_vis = if self.cursor.peek() == TokenKind::Private
50 || self.cursor.peek() == TokenKind::Module
51 || self.cursor.peek() == TokenKind::Package
52 {
53 let vis = token_to_visibility(self.cursor.peek());
54 self.cursor.advance();
55 vis
56 } else {
57 Visibility::Public
58 };
59
60 let (field_name, field_span) = self.cursor.expect_ident()?;
61 self.cursor.expect(TokenKind::Colon)?;
62 let field_type = self.parse_type()?;
63
64 fields.push(Field {
65 name: field_name,
66 field_type,
67 visibility: field_vis,
68 span: field_span,
69 });
70
71 self.cursor.consume(TokenKind::Comma);
72 }
73
74 self.cursor.expect(TokenKind::RBrace)?;
75
76 let fields_as_params: Vec<Param<'a, 'bump>> = fields
77 .into_iter()
78 .map(|f| {

Callers 1

parse_stmtMethod · 0.80

Calls 14

StructDeclClass · 0.85
expectMethod · 0.80
expect_identMethod · 0.80
peekMethod · 0.80
parse_genericsMethod · 0.80
consumeMethod · 0.80
advanceMethod · 0.80
parse_typeMethod · 0.80
into_iterMethod · 0.80
is_emptyMethod · 0.80
alloc_slice_copyMethod · 0.80

Tested by

no test coverage detected