38 lines
1.1 KiB
Rust
38 lines
1.1 KiB
Rust
use super::module::inputs_list;
|
|
use super::tokens::TokenKind as tk;
|
|
use crate::parser::tokens::token;
|
|
use crate::parser::typename;
|
|
use crate::parser::IResult;
|
|
use crate::parser::Module;
|
|
use crate::parser::TokenSpan;
|
|
use nom::combinator::cut;
|
|
use nom::combinator::map;
|
|
use nom::multi::many0;
|
|
use nom::sequence::delimited;
|
|
use nom::sequence::preceded;
|
|
use nom::sequence::tuple;
|
|
|
|
pub fn comb_block(input: TokenSpan) -> IResult<TokenSpan, Module> {
|
|
map(
|
|
preceded(
|
|
token(tk::Comb),
|
|
cut(tuple((
|
|
token(tk::Ident),
|
|
delimited(token(tk::LParen), inputs_list, token(tk::RParen)),
|
|
preceded(token(tk::RArrow), typename),
|
|
delimited(
|
|
token(tk::LBrace),
|
|
many0(token(tk::Error)),
|
|
token(tk::RBrace),
|
|
),
|
|
))),
|
|
),
|
|
|(name, inputs, _ret, _items)| Module {
|
|
// TODO: bring back returns
|
|
name: name.span(),
|
|
ports: inputs,
|
|
items: todo!(),
|
|
},
|
|
)(input)
|
|
}
|