scarf_syntax/declarations/
function_declarations.rs1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum FunctionDataTypeOrImplicit<'a> {
9 DataType(Box<DataTypeOrVoid<'a>>),
10 Implicit(Box<ImplicitDataType<'a>>),
11}
12
13#[derive(Clone, Debug, PartialEq)]
14pub struct FunctionDeclaration<'a>(
15 pub Metadata<'a>, pub Option<DynamicOverrideSpecifiers<'a>>,
17 pub Option<Lifetime<'a>>,
18 pub FunctionBodyDeclaration<'a>,
19);
20
21#[derive(Clone, Debug, PartialEq)]
22pub enum FunctionBodyDeclaration<'a> {
23 Tf(
24 Box<(
25 FunctionDataTypeOrImplicit<'a>,
26 Option<InterfaceIdentifierOrClassScope<'a>>,
27 FunctionIdentifier<'a>,
28 Metadata<'a>, Vec<TfItemDeclaration<'a>>,
30 Vec<FunctionStatementOrNull<'a>>,
31 Metadata<'a>, Option<(
33 Metadata<'a>, FunctionIdentifier<'a>,
35 )>,
36 )>,
37 ),
38 Block(
39 Box<(
40 FunctionDataTypeOrImplicit<'a>,
41 Option<InterfaceIdentifierOrClassScope<'a>>,
42 FunctionIdentifier<'a>,
43 Metadata<'a>, Option<TfPortList<'a>>,
45 Metadata<'a>, Metadata<'a>, Vec<BlockItemDeclaration<'a>>,
48 Vec<FunctionStatementOrNull<'a>>,
49 Metadata<'a>, Option<(
51 Metadata<'a>, FunctionIdentifier<'a>,
53 )>,
54 )>,
55 ),
56}
57
58#[derive(Clone, Debug, PartialEq)]
59pub struct FunctionPrototype<'a>(
60 pub Metadata<'a>, pub Option<DynamicOverrideSpecifiers<'a>>,
62 pub DataTypeOrVoid<'a>,
63 pub FunctionIdentifier<'a>,
64 pub Option<(
65 Metadata<'a>, Option<TfPortList<'a>>,
67 Metadata<'a>, )>,
69);
70
71#[derive(Clone, Debug, PartialEq)]
72pub enum DpiImportExport<'a> {
73 FunctionImport(
74 Box<(
75 Metadata<'a>, DpiSpecString<'a>,
77 Option<DpiFunctionImportProperty<'a>>,
78 Option<(
79 CIdentifier<'a>,
80 Metadata<'a>, )>,
82 DpiFunctionProto<'a>,
83 Metadata<'a>, )>,
85 ),
86 TaskImport(
87 Box<(
88 Metadata<'a>, DpiSpecString<'a>,
90 Option<DpiTaskImportProperty<'a>>,
91 Option<(
92 CIdentifier<'a>,
93 Metadata<'a>, )>,
95 DpiTaskProto<'a>,
96 Metadata<'a>, )>,
98 ),
99 FunctionExport(
100 Box<(
101 Metadata<'a>, DpiSpecString<'a>,
103 Option<(
104 CIdentifier<'a>,
105 Metadata<'a>, )>,
107 Metadata<'a>, FunctionIdentifier<'a>,
109 Metadata<'a>, )>,
111 ),
112 TaskExport(
113 Box<(
114 Metadata<'a>, DpiSpecString<'a>,
116 Option<(
117 CIdentifier<'a>,
118 Metadata<'a>, )>,
120 Metadata<'a>, TaskIdentifier<'a>,
122 Metadata<'a>, )>,
124 ),
125}
126
127#[derive(Clone, Debug, PartialEq)]
128pub enum DpiSpecString<'a> {
129 DpiC(Metadata<'a>),
130 Dpi(Metadata<'a>),
131}
132
133#[derive(Clone, Debug, PartialEq)]
134pub enum DpiFunctionImportProperty<'a> {
135 Context(Metadata<'a>),
136 Pure(Metadata<'a>),
137}
138
139#[derive(Clone, Debug, PartialEq)]
140pub struct DpiTaskImportProperty<'a>(
141 pub Metadata<'a>, );
143
144#[derive(Clone, Debug, PartialEq)]
145pub struct DpiFunctionProto<'a>(pub FunctionPrototype<'a>);
146
147#[derive(Clone, Debug, PartialEq)]
148pub struct DpiTaskProto<'a>(pub TaskPrototype<'a>);