sv_parser_syntaxtree/declarations/
function_declarations.rs

1use crate::*;
2
3// -----------------------------------------------------------------------------
4
5#[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}