Skip to main content

scarf_syntax/instantiations/instantiation/
module_instantiation.rs

1// =======================================================================
2// module_instantiation.rs
3// =======================================================================
4//! CST Nodes from 1800-2023 A.4.1.1
5use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct ModuleInstantiation<'a>(
9    pub ModuleIdentifier<'a>,
10    pub Option<ParameterValueAssignment<'a>>,
11    pub HierarchicalInstance<'a>,
12    pub  Vec<(
13        Metadata<'a>, // ,
14        HierarchicalInstance<'a>,
15    )>,
16    pub Metadata<'a>, // ;
17);
18
19#[derive(Clone, Debug, PartialEq)]
20pub struct ParameterValueAssignment<'a>(
21    pub Metadata<'a>, // #
22    pub Metadata<'a>, // (
23    pub ListOfParameterValueAssignments<'a>,
24    pub Metadata<'a>, // )
25);
26
27#[derive(Clone, Debug, PartialEq)]
28pub enum ListOfParameterValueAssignments<'a> {
29    Ordered(
30        Box<(
31            OrderedParameterAssignment<'a>,
32            Vec<(
33                Metadata<'a>, // ,
34                OrderedParameterAssignment<'a>,
35            )>,
36        )>,
37    ),
38    Named(
39        Box<(
40            NamedParameterAssignment<'a>,
41            Vec<(
42                Metadata<'a>, // ,
43                NamedParameterAssignment<'a>,
44            )>,
45        )>,
46    ),
47}
48
49#[derive(Clone, Debug, PartialEq)]
50pub struct OrderedParameterAssignment<'a>(pub ParamExpression<'a>);
51
52#[derive(Clone, Debug, PartialEq)]
53pub struct NamedParameterAssignment<'a>(
54    pub Metadata<'a>, // .
55    pub ParameterIdentifier<'a>,
56    pub Metadata<'a>, // (
57    pub Option<ParamExpression<'a>>,
58    pub Metadata<'a>, // )
59);
60
61#[derive(Clone, Debug, PartialEq)]
62pub struct HierarchicalInstance<'a>(
63    pub NameOfInstance<'a>,
64    pub Metadata<'a>, // (
65    pub Option<ListOfPortConnections<'a>>,
66    pub Metadata<'a>, // )
67);
68
69#[derive(Clone, Debug, PartialEq)]
70pub struct NameOfInstance<'a>(
71    pub InstanceIdentifier<'a>,
72    pub Vec<UnpackedDimension<'a>>,
73);
74
75#[derive(Clone, Debug, PartialEq)]
76pub enum ListOfPortConnections<'a> {
77    Ordered(
78        Box<(
79            OrderedPortConnection<'a>,
80            Vec<(
81                Metadata<'a>, // ,
82                OrderedPortConnection<'a>,
83            )>,
84        )>,
85    ),
86    Named(
87        Box<(
88            NamedPortConnection<'a>,
89            Vec<(
90                Metadata<'a>, // ,
91                NamedPortConnection<'a>,
92            )>,
93        )>,
94    ),
95}
96
97#[derive(Clone, Debug, PartialEq)]
98pub struct OrderedPortConnection<'a>(
99    pub Vec<AttributeInstance<'a>>,
100    pub Option<Expression<'a>>,
101);
102
103#[derive(Clone, Debug, PartialEq)]
104pub enum NamedPortConnection<'a> {
105    Named(
106        Box<(
107            Vec<AttributeInstance<'a>>,
108            Metadata<'a>, // .
109            PortIdentifier<'a>,
110            Option<(
111                Metadata<'a>, // (
112                Option<Expression<'a>>,
113                Metadata<'a>, // )
114            )>,
115        )>,
116    ),
117    Wildcard(
118        Box<(
119            Vec<AttributeInstance<'a>>,
120            Metadata<'a>, // .
121            Metadata<'a>, // *
122        )>,
123    ),
124}