scarf_syntax/declarations/
task_declarations.rs1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct TaskDeclaration<'a>(
9 pub Metadata<'a>, pub Option<DynamicOverrideSpecifiers<'a>>,
11 pub Option<Lifetime<'a>>,
12 pub TaskBodyDeclaration<'a>,
13);
14
15#[derive(Clone, Debug, PartialEq)]
16pub enum InterfaceIdentifierOrClassScope<'a> {
17 InterfaceIdentifier(
18 Box<(
19 InterfaceIdentifier<'a>,
20 Metadata<'a>, )>,
22 ),
23 ClassScope(Box<ClassScope<'a>>),
24}
25
26#[derive(Clone, Debug, PartialEq)]
27pub enum TaskBodyDeclaration<'a> {
28 Tf(
29 Box<(
30 Option<InterfaceIdentifierOrClassScope<'a>>,
31 TaskIdentifier<'a>,
32 Metadata<'a>, Vec<TfItemDeclaration<'a>>,
34 Vec<StatementOrNull<'a>>,
35 Metadata<'a>, Option<(
37 Metadata<'a>, TaskIdentifier<'a>,
39 )>,
40 )>,
41 ),
42 Block(
43 Box<(
44 Option<InterfaceIdentifierOrClassScope<'a>>,
45 TaskIdentifier<'a>,
46 Metadata<'a>, Option<TfPortList<'a>>,
48 Metadata<'a>, Metadata<'a>, Vec<BlockItemDeclaration<'a>>,
51 Vec<StatementOrNull<'a>>,
52 Metadata<'a>, Option<(
54 Metadata<'a>, TaskIdentifier<'a>,
56 )>,
57 )>,
58 ),
59}
60
61#[derive(Clone, Debug, PartialEq)]
62pub enum TfItemDeclaration<'a> {
63 Block(Box<BlockItemDeclaration<'a>>),
64 Tf(Box<TfPortDeclaration<'a>>),
65}
66
67#[derive(Clone, Debug, PartialEq)]
68pub struct TfPortList<'a>(
69 pub TfPortItem<'a>,
70 pub Vec<(
71 Metadata<'a>, TfPortItem<'a>,
73 )>,
74);
75
76#[derive(Clone, Debug, PartialEq)]
77pub struct TfPortItem<'a>(
78 pub Vec<AttributeInstance<'a>>,
79 pub Option<TfPortDirection<'a>>,
80 pub Option<Metadata<'a>>, pub DataTypeOrImplicit<'a>,
82 pub Option<(
83 PortIdentifier<'a>,
84 Vec<VariableDimension<'a>>,
85 Option<(
86 Metadata<'a>, Expression<'a>,
88 )>,
89 )>,
90);
91
92#[derive(Clone, Debug, PartialEq)]
93pub enum TfPortDirection<'a> {
94 Port(Box<PortDirection<'a>>),
95 Ref(
96 Box<(
97 Option<Metadata<'a>>, Metadata<'a>, Option<Metadata<'a>>, )>,
101 ),
102}
103
104#[derive(Clone, Debug, PartialEq)]
105pub struct TfPortDeclaration<'a>(
106 pub Vec<AttributeInstance<'a>>,
107 pub TfPortDirection<'a>,
108 pub Option<Metadata<'a>>, pub DataTypeOrImplicit<'a>,
110 pub ListOfTfVariableIdentifiers<'a>,
111 pub Metadata<'a>, );
113
114#[derive(Clone, Debug, PartialEq)]
115pub struct TaskPrototype<'a>(
116 pub Metadata<'a>, pub Option<DynamicOverrideSpecifiers<'a>>,
118 pub TaskIdentifier<'a>,
119 pub Option<(
120 Metadata<'a>, Option<TfPortList<'a>>,
122 Metadata<'a>, )>,
124);
125
126#[derive(Clone, Debug, PartialEq)]
127pub struct DynamicOverrideSpecifiers<'a>(
128 pub Option<InitialOrExtendsSpecifier<'a>>,
129 pub Option<FinalSpecifier<'a>>,
130);
131
132#[derive(Clone, Debug, PartialEq)]
133pub enum InitialOrExtendsSpecifier<'a> {
134 Initial((Metadata<'a>, Metadata<'a>)),
135 Extends((Metadata<'a>, Metadata<'a>)),
136}
137
138#[derive(Clone, Debug, PartialEq)]
139pub struct FinalSpecifier<'a>(
140 pub Metadata<'a>, pub Metadata<'a>, );