/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 | | } |