sv_parser_parser/source_text/
checker_items.rs1use crate::*;
2
3#[tracable_parser]
6#[packrat_parser]
7pub(crate) fn checker_port_list(s: Span) -> IResult<Span, CheckerPortList> {
8 let (s, a) = list(symbol(","), checker_port_item)(s)?;
9 Ok((s, CheckerPortList { nodes: (a,) }))
10}
11
12#[tracable_parser]
13#[packrat_parser]
14pub(crate) fn checker_port_item(s: Span) -> IResult<Span, CheckerPortItem> {
15 let (s, a) = many0(attribute_instance)(s)?;
16 let (s, b) = opt(checker_port_direction)(s)?;
17 let (s, c) = property_formal_type(s)?;
18 let (s, d) = formal_port_identifier(s)?;
19 let (s, e) = many0(variable_dimension)(s)?;
20 let (s, f) = opt(pair(symbol("="), property_actual_arg))(s)?;
21 Ok((
22 s,
23 CheckerPortItem {
24 nodes: (a, b, c, d, e, f),
25 },
26 ))
27}
28
29#[tracable_parser]
30#[packrat_parser]
31pub(crate) fn checker_port_direction(s: Span) -> IResult<Span, CheckerPortDirection> {
32 alt((
33 map(keyword("input"), |x| {
34 CheckerPortDirection::Input(Box::new(x))
35 }),
36 map(keyword("output"), |x| {
37 CheckerPortDirection::Output(Box::new(x))
38 }),
39 ))(s)
40}
41
42#[tracable_parser]
43#[packrat_parser]
44pub(crate) fn checker_or_generate_item(s: Span) -> IResult<Span, CheckerOrGenerateItem> {
45 alt((
46 map(checker_or_generate_item_declaration, |x| {
47 CheckerOrGenerateItem::CheckerOrGenerateItemDeclaration(Box::new(x))
48 }),
49 map(initial_construct, |x| {
50 CheckerOrGenerateItem::InitialConstruct(Box::new(x))
51 }),
52 map(always_construct, |x| {
53 CheckerOrGenerateItem::AlwaysConstruct(Box::new(x))
54 }),
55 map(final_construct, |x| {
56 CheckerOrGenerateItem::FinalConstruct(Box::new(x))
57 }),
58 map(assertion_item, |x| {
59 CheckerOrGenerateItem::AssertionItem(Box::new(x))
60 }),
61 map(continuous_assign, |x| {
62 CheckerOrGenerateItem::ContinuousAssign(Box::new(x))
63 }),
64 map(checker_generate_item, |x| {
65 CheckerOrGenerateItem::CheckerGenerateItem(Box::new(x))
66 }),
67 ))(s)
68}
69
70#[tracable_parser]
71#[packrat_parser]
72pub(crate) fn checker_or_generate_item_declaration(
73 s: Span,
74) -> IResult<Span, CheckerOrGenerateItemDeclaration> {
75 alt((
76 checker_or_generate_item_declaration_data,
77 map(function_declaration, |x| {
78 CheckerOrGenerateItemDeclaration::FunctionDeclaration(Box::new(x))
79 }),
80 map(checker_declaration, |x| {
81 CheckerOrGenerateItemDeclaration::CheckerDeclaration(Box::new(x))
82 }),
83 map(assertion_item_declaration, |x| {
84 CheckerOrGenerateItemDeclaration::AssertionItemDeclaration(Box::new(x))
85 }),
86 map(covergroup_declaration, |x| {
87 CheckerOrGenerateItemDeclaration::CovergroupDeclaration(Box::new(x))
88 }),
89 map(genvar_declaration, |x| {
90 CheckerOrGenerateItemDeclaration::GenvarDeclaration(Box::new(x))
91 }),
92 map(clocking_declaration, |x| {
93 CheckerOrGenerateItemDeclaration::ClockingDeclaration(Box::new(x))
94 }),
95 checker_or_generate_item_declaration_clocking,
96 checker_or_generate_item_declaration_disable,
97 map(symbol(";"), |x| {
98 CheckerOrGenerateItemDeclaration::Empty(Box::new(x))
99 }),
100 ))(s)
101}
102
103#[tracable_parser]
104#[packrat_parser]
105pub(crate) fn checker_or_generate_item_declaration_data(
106 s: Span,
107) -> IResult<Span, CheckerOrGenerateItemDeclaration> {
108 let (s, a) = opt(rand)(s)?;
109 let (s, b) = data_declaration(s)?;
110 Ok((
111 s,
112 CheckerOrGenerateItemDeclaration::Data(Box::new(CheckerOrGenerateItemDeclarationData {
113 nodes: (a, b),
114 })),
115 ))
116}
117
118#[tracable_parser]
119#[packrat_parser]
120pub(crate) fn rand(s: Span) -> IResult<Span, Rand> {
121 let (s, a) = keyword("rand")(s)?;
122 Ok((s, Rand { nodes: (a,) }))
123}
124
125#[tracable_parser]
126#[packrat_parser]
127pub(crate) fn checker_or_generate_item_declaration_clocking(
128 s: Span,
129) -> IResult<Span, CheckerOrGenerateItemDeclaration> {
130 let (s, a) = keyword("default")(s)?;
131 let (s, b) = keyword("clocking")(s)?;
132 let (s, c) = clocking_identifier(s)?;
133 let (s, d) = symbol(";")(s)?;
134 Ok((
135 s,
136 CheckerOrGenerateItemDeclaration::Clocking(Box::new(
137 CheckerOrGenerateItemDeclarationClocking {
138 nodes: (a, b, c, d),
139 },
140 )),
141 ))
142}
143
144#[tracable_parser]
145#[packrat_parser]
146pub(crate) fn checker_or_generate_item_declaration_disable(
147 s: Span,
148) -> IResult<Span, CheckerOrGenerateItemDeclaration> {
149 let (s, a) = keyword("default")(s)?;
150 let (s, b) = keyword("disable")(s)?;
151 let (s, c) = keyword("iff")(s)?;
152 let (s, d) = expression_or_dist(s)?;
153 let (s, e) = symbol(";")(s)?;
154 Ok((
155 s,
156 CheckerOrGenerateItemDeclaration::Disable(Box::new(
157 CheckerOrGenerateItemDeclarationDisable {
158 nodes: (a, b, c, d, e),
159 },
160 )),
161 ))
162}
163
164#[tracable_parser]
165#[packrat_parser]
166pub(crate) fn checker_generate_item(s: Span) -> IResult<Span, CheckerGenerateItem> {
167 alt((
168 map(loop_generate_construct, |x| {
169 CheckerGenerateItem::LoopGenerateConstruct(Box::new(x))
170 }),
171 map(conditional_generate_construct, |x| {
172 CheckerGenerateItem::ConditionalGenerateConstruct(Box::new(x))
173 }),
174 map(generate_region, |x| {
175 CheckerGenerateItem::GenerateRegion(Box::new(x))
176 }),
177 map(elaboration_system_task, |x| {
178 CheckerGenerateItem::ElaborationSystemTask(Box::new(x))
179 }),
180 ))(s)
181}