litex/parse/by_stmt/
fn_tuple_by_stmt.rs1use crate::prelude::*;
2
3impl Runtime {
4 pub fn parse_by_fn_stmt(&mut self, tb: &mut TokenBlock) -> Result<Stmt, RuntimeError> {
5 tb.skip_token(FN_LOWER_CASE)?;
6 if tb.current_token_is_equal_to(SET) {
7 tb.skip_token(SET)?;
8 tb.skip_token(AS)?;
9 tb.skip_token(SET)?;
10 tb.skip_token(COLON)?;
11 return self.parse_by_fn_set_stmt(tb);
12 }
13 tb.skip_token(AS)?;
14 tb.skip_token(SET)?;
15 tb.skip_token(COLON)?;
16 let function = self.parse_obj(tb)?;
17 Ok(ByFnAsSetStmt::new(function, tb.line_file.clone()).into())
18 }
19
20 pub fn parse_by_fn_set_stmt(&mut self, tb: &mut TokenBlock) -> Result<Stmt, RuntimeError> {
21 let func = self.parse_obj(tb)?;
22 tb.skip_token(FACT_PREFIX)?;
23 tb.skip_token(IN)?;
24 tb.skip_token(FN_LOWER_CASE)?;
25 let fn_set = self.parse_fn_set(tb)?;
26 Ok(ByFnSetAsSetStmt::new(func, fn_set, tb.line_file.clone()).into())
27 }
28
29 pub fn parse_by_tuple_stmt(&mut self, tb: &mut TokenBlock) -> Result<Stmt, RuntimeError> {
31 tb.skip_token(TUPLE)?;
32 tb.skip_token(AS)?;
33 tb.skip_token(SET)?;
34 tb.skip_token(COLON)?;
35 let obj = self.parse_obj(tb)?;
36 Ok(ByTupleAsSetStmt::new(obj, tb.line_file.clone()).into())
37 }
38}