Skip to main content

scarf_syntax/source_text/
interface_items.rs

1// =======================================================================
2// interface_items.rs
3// =======================================================================
4// CST Nodes from 1800-2023 A.1.6
5use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum InterfaceOrGenerateItem<'a> {
9    ModuleCommon(Box<(Vec<AttributeInstance<'a>>, ModuleCommonItem<'a>)>),
10    ExternTf(Box<(Vec<AttributeInstance<'a>>, ExternTfDeclaration<'a>)>),
11}
12
13#[derive(Clone, Debug, PartialEq)]
14pub enum ExternTfDeclaration<'a> {
15    Method(
16        Box<(
17            Metadata<'a>, // exterm
18            MethodPrototype<'a>,
19            Metadata<'a>, // ;
20        )>,
21    ),
22    Task(
23        Box<(
24            Metadata<'a>, // extern
25            Metadata<'a>, // forkjoin
26            TaskPrototype<'a>,
27            Metadata<'a>, // ;
28        )>,
29    ),
30}
31
32#[derive(Clone, Debug, PartialEq)]
33pub enum InterfaceItem<'a> {
34    Port(
35        Box<(
36            PortDeclaration<'a>,
37            Metadata<'a>, // ;
38        )>,
39    ),
40    NonPort(Box<NonPortInterfaceItem<'a>>),
41}
42
43#[derive(Clone, Debug, PartialEq)]
44pub enum NonPortInterfaceItem<'a> {
45    Generate(Box<GenerateRegion<'a>>),
46    InterfaceOrGenerate(Box<InterfaceOrGenerateItem<'a>>),
47    Program(Box<ProgramDeclaration<'a>>),
48    Modport(Box<ModportDeclaration<'a>>),
49    Interface(Box<InterfaceDeclaration<'a>>),
50    Timeunits(Box<TimeunitsDeclaration<'a>>),
51}