Skip to main content

litex/parse/by_stmt/
closed_range_by_stmt.rs

1use crate::prelude::*;
2
3impl Runtime {
4    /// After `by enumerate`; consumes `closed_range(lo, hi): element`.
5    pub fn parse_by_enumerate_closed_range_stmt(
6        &mut self,
7        tb: &mut TokenBlock,
8    ) -> Result<Stmt, RuntimeError> {
9        let obj = self.parse_obj(tb)?;
10        let closed_range = match obj {
11            Obj::ClosedRange(cr) => cr,
12            _ => {
13                return Err(RuntimeError::from(ParseRuntimeError(RuntimeErrorStruct::new_with_msg_and_line_file("by enumerate closed_range: expected closed_range(lo, hi) or lo ... hi before `:`"
14                        .to_string(), tb.line_file.clone()))));
15            }
16        };
17
18        tb.skip_token(COLON)?;
19        let element = self.parse_obj(tb)?;
20        if !tb.exceed_end_of_head() {
21            return Err(RuntimeError::from(ParseRuntimeError(
22                RuntimeErrorStruct::new_with_msg_and_line_file(
23                    "by enumerate closed_range: expected end of line after element".to_string(),
24                    tb.line_file.clone(),
25                ),
26            )));
27        }
28        Ok(ByEnumerateClosedRangeStmt::new(element, closed_range, tb.line_file.clone()).into())
29    }
30}