sv_parser_syntaxtree/declarations/
function_declarations.rs1use crate::*;
2
3#[derive(Clone, Debug, PartialEq, Node)]
6pub enum FunctionDataTypeOrImplicit {
7 DataTypeOrVoid(Box<DataTypeOrVoid>),
8 ImplicitDataType(Box<ImplicitDataType>),
9}
10
11#[derive(Clone, Debug, PartialEq, Node)]
12pub struct FunctionDeclaration {
13 pub nodes: (Keyword, Option<Lifetime>, FunctionBodyDeclaration),
14}
15
16#[derive(Clone, Debug, PartialEq, Node)]
17pub enum FunctionBodyDeclaration {
18 WithoutPort(Box<FunctionBodyDeclarationWithoutPort>),
19 WithPort(Box<FunctionBodyDeclarationWithPort>),
20}
21
22#[derive(Clone, Debug, PartialEq, Node)]
23pub struct FunctionBodyDeclarationWithoutPort {
24 pub nodes: (
25 FunctionDataTypeOrImplicit,
26 Option<InterfaceIdentifierOrClassScope>,
27 FunctionIdentifier,
28 Symbol,
29 Vec<TfItemDeclaration>,
30 Vec<FunctionStatementOrNull>,
31 Keyword,
32 Option<(Symbol, FunctionIdentifier)>,
33 ),
34}
35
36#[derive(Clone, Debug, PartialEq, Node)]
37pub struct FunctionBodyDeclarationWithPort {
38 pub nodes: (
39 FunctionDataTypeOrImplicit,
40 Option<InterfaceIdentifierOrClassScope>,
41 FunctionIdentifier,
42 Paren<Option<TfPortList>>,
43 Symbol,
44 Vec<BlockItemDeclaration>,
45 Vec<FunctionStatementOrNull>,
46 Keyword,
47 Option<(Symbol, FunctionIdentifier)>,
48 ),
49}
50
51#[derive(Clone, Debug, PartialEq, Node)]
52pub enum InterfaceIdentifierOrClassScope {
53 InterfaceIdentifier(Box<(InterfaceIdentifier, Symbol)>),
54 ClassScope(Box<ClassScope>),
55}
56
57#[derive(Clone, Debug, PartialEq, Node)]
58pub struct FunctionPrototype {
59 pub nodes: (
60 Keyword,
61 DataTypeOrVoid,
62 FunctionIdentifier,
63 Option<Paren<Option<TfPortList>>>,
64 ),
65}
66
67#[derive(Clone, Debug, PartialEq, Node)]
68pub enum DpiImportExport {
69 ImportFunction(Box<DpiImportExportImportFunction>),
70 ImportTask(Box<DpiImportExportImportTask>),
71 ExportFunction(Box<DpiImportExportExportFunction>),
72 ExportTask(Box<DpiImportExportExportTask>),
73}
74
75#[derive(Clone, Debug, PartialEq, Node)]
76pub struct DpiImportExportImportFunction {
77 pub nodes: (
78 Keyword,
79 DpiSpecString,
80 Option<DpiFunctionImportProperty>,
81 Option<(CIdentifier, Symbol)>,
82 DpiFunctionProto,
83 Symbol,
84 ),
85}
86
87#[derive(Clone, Debug, PartialEq, Node)]
88pub struct DpiImportExportImportTask {
89 pub nodes: (
90 Keyword,
91 DpiSpecString,
92 Option<DpiTaskImportProperty>,
93 Option<(CIdentifier, Symbol)>,
94 DpiTaskProto,
95 Symbol,
96 ),
97}
98
99#[derive(Clone, Debug, PartialEq, Node)]
100pub struct DpiImportExportExportFunction {
101 pub nodes: (
102 Keyword,
103 DpiSpecString,
104 Option<(CIdentifier, Symbol)>,
105 Keyword,
106 FunctionIdentifier,
107 Symbol,
108 ),
109}
110
111#[derive(Clone, Debug, PartialEq, Node)]
112pub struct DpiImportExportExportTask {
113 pub nodes: (
114 Keyword,
115 DpiSpecString,
116 Option<(CIdentifier, Symbol)>,
117 Keyword,
118 TaskIdentifier,
119 Symbol,
120 ),
121}
122
123#[derive(Clone, Debug, PartialEq, Node)]
124pub enum DpiSpecString {
125 DpiC(Box<Keyword>),
126 Dpi(Box<Keyword>),
127}
128
129#[derive(Clone, Debug, PartialEq, Node)]
130pub enum DpiFunctionImportProperty {
131 Context(Box<Keyword>),
132 Pure(Box<Keyword>),
133}
134
135#[derive(Clone, Debug, PartialEq, Node)]
136pub enum DpiTaskImportProperty {
137 Context(Box<Keyword>),
138}
139
140#[derive(Clone, Debug, PartialEq, Node)]
141pub struct DpiFunctionProto {
142 pub nodes: (FunctionPrototype,),
143}
144
145#[derive(Clone, Debug, PartialEq, Node)]
146pub struct DpiTaskProto {
147 pub nodes: (TaskPrototype,),
148}