Coverage Report

Created: 2024-01-01 03:47

/home/runner/work/neco-project/neco-project/gen1/felis-syn/src/syn_statement.rs
Line
Count
Source (jump to first uncovered line)
1
use crate::{
2
    decoration::{Decoration, UD},
3
    parse::Parse,
4
    to_felis_string::ToFelisString,
5
    token::Token,
6
};
7
8
pub use syn_statement_let::*;
9
10
use self::{
11
    syn_statement_assign::SynStatementAssign, syn_statement_break::SynStatementBreak,
12
    syn_statement_continue::SynStatementContinue, syn_statement_expr_semi::SynStatementExprSemi,
13
    syn_statement_if::SynStatementIf, syn_statement_loop::SynStatementLoop,
14
};
15
16
pub mod syn_statement_assign;
17
pub mod syn_statement_break;
18
pub mod syn_statement_continue;
19
pub mod syn_statement_expr_semi;
20
pub mod syn_statement_if;
21
pub mod syn_statement_let;
22
pub mod syn_statement_loop;
23
24
0
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
25
pub enum SynStatement<D: Decoration> {
26
    ExprSemi(SynStatementExprSemi<D>),
27
    Let(SynStatementLet<D>),
28
    Assign(SynStatementAssign<D>),
29
    If(SynStatementIf<D>),
30
    Loop(SynStatementLoop<D>),
31
    Break(SynStatementBreak<D>),
32
    Continue(SynStatementContinue<D>),
33
}
34
35
impl Parse for SynStatement<UD> {
36
68
    fn parse(tokens: &[Token], i: &mut usize) -> Result<Option<Self>, ()> {
37
68
        let mut k = *i;
38
39
68
        if let Some(
statement_break1
) = SynStatementBreak::parse(tokens, &mut k)
?0
{
40
1
            *i = k;
41
1
            return Ok(Some(SynStatement::Break(statement_break)));
42
67
        }
43
44
67
        if let Some(
statement_continue1
) = SynStatementContinue::parse(tokens, &mut k)
?0
{
45
1
            *i = k;
46
1
            return Ok(Some(SynStatement::Continue(statement_continue)));
47
66
        }
48
49
66
        if let Some(
statement_loop3
) = SynStatementLoop::parse(tokens, &mut k)
?0
{
50
3
            *i = k;
51
3
            return Ok(Some(SynStatement::Loop(statement_loop)));
52
63
        }
53
54
63
        if let Some(
statement_if5
) = SynStatementIf::parse(tokens, &mut k)
?0
{
55
5
            *i = k;
56
5
            return Ok(Some(SynStatement::If(statement_if)));
57
58
        }
58
59
58
        if let Some(
statement_let13
) = SynStatementLet::parse(tokens, &mut k)
?0
{
60
13
            *i = k;
61
13
            return Ok(Some(SynStatement::Let(statement_let)));
62
45
        }
63
64
45
        if let Some(
statement_assign8
) = SynStatementAssign::parse(tokens, &mut k)
?0
{
65
8
            *i = k;
66
8
            return Ok(Some(SynStatement::Assign(statement_assign)));
67
37
        }
68
69
37
        if let Some(
statement_expr_semi13
) = SynStatementExprSemi::parse(tokens, &mut k)
?0
{
70
13
            *i = k;
71
13
            return Ok(Some(SynStatement::ExprSemi(statement_expr_semi)));
72
24
        }
73
24
74
24
        Ok(None)
75
68
    }
76
}
77
78
impl<D: Decoration> ToFelisString for SynStatement<D> {
79
0
    fn to_felis_string(&self) -> String {
80
0
        match self {
81
0
            SynStatement::ExprSemi(statement_expr_semi) => statement_expr_semi.to_felis_string(),
82
0
            SynStatement::Let(statement_let) => statement_let.to_felis_string(),
83
0
            SynStatement::Assign(_statement_assign) => todo!(),
84
0
            SynStatement::If(_statement_if) => todo!(),
85
0
            SynStatement::Loop(_statement_loop) => todo!(),
86
0
            SynStatement::Break(_statement_break) => todo!(),
87
0
            SynStatement::Continue(_statement_continue) => todo!(),
88
        }
89
0
    }
90
}