use crate::*; // ----------------------------------------------------------------------------- #[derive(Clone, Debug, PartialEq, Node)] pub enum ConcurrentAssertionItem { Statement(Box), CheckerInstantiation(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub struct ConcurrentAssertionItemStatement { pub nodes: ( Option<(BlockIdentifier, Symbol)>, ConcurrentAssertionStatement, ), } #[derive(Clone, Debug, PartialEq, Node)] pub enum ConcurrentAssertionStatement { AssertPropertyStatement(Box), AssumePropertyStatement(Box), CoverPropertyStatement(Box), CoverSequenceStatement(Box), RestrictPropertyStatement(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub struct AssertPropertyStatement { pub nodes: (Keyword, Keyword, Paren, ActionBlock), } #[derive(Clone, Debug, PartialEq, Node)] pub struct AssumePropertyStatement { pub nodes: (Keyword, Keyword, Paren, ActionBlock), } #[derive(Clone, Debug, PartialEq, Node)] pub struct CoverPropertyStatement { pub nodes: (Keyword, Keyword, Paren, StatementOrNull), } #[derive(Clone, Debug, PartialEq, Node)] pub struct ExpectPropertyStatement { pub nodes: (Keyword, Paren, ActionBlock), } #[derive(Clone, Debug, PartialEq, Node)] pub struct CoverSequenceStatement { pub nodes: ( Keyword, Keyword, Paren<( Option, Option<(Keyword, Keyword, Paren)>, SequenceExpr, )>, StatementOrNull, ), } #[derive(Clone, Debug, PartialEq, Node)] pub struct RestrictPropertyStatement { pub nodes: (Keyword, Keyword, Paren, Symbol), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyInstance { pub nodes: ( PsOrHierarchicalPropertyIdentifier, Option>>, ), } #[derive(Clone, Debug, PartialEq, Node)] pub enum PropertyListOfArguments { Ordered(Box), Named(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyListOfArgumentsOrdered { pub nodes: ( List>, Vec<(Symbol, Symbol, Identifier, Paren>)>, ), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyListOfArgumentsNamed { pub nodes: (List>)>,), } #[derive(Clone, Debug, PartialEq, Node)] pub enum PropertyActualArg { PropertyExpr(Box), SequenceActualArg(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub enum AssertionItemDeclaration { PropertyDeclaration(Box), SequenceDeclaration(Box), LetDeclaration(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyDeclaration { pub nodes: ( Keyword, PropertyIdentifier, Option>>, Symbol, Vec, PropertySpec, Option, Keyword, Option<(Symbol, PropertyIdentifier)>, ), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyPortList { pub nodes: (List,), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyPortItem { pub nodes: ( Vec, Option<(Keyword, Option)>, PropertyFormalType, FormalPortIdentifier, Vec, Option<(Symbol, PropertyActualArg)>, ), } #[derive(Clone, Debug, PartialEq, Node)] pub enum PropertyLvarPortDirection { Input(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub enum PropertyFormalType { SequenceFormalType(Box), Property(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertySpec { pub nodes: ( Option, Option<(Keyword, Keyword, Paren)>, PropertyExpr, ), } #[derive(Clone, Debug, PartialEq, Node)] pub enum PropertyExpr { SequenceExpr(Box), Strong(Box), Weak(Box), Paren(Box), Not(Box), BinaryProperty(Box), BinarySequence(Box), If(Box), Case(Box), Nexttime(Box), SNexttime(Box), Always(Box), SAlways(Box), Eventually(Box), SEventually(Box), AcceptOn(Box), RejectOn(Box), SyncAcceptOn(Box), SyncRejectOn(Box), PropertyInstance(Box), ClockingEvent(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyExprStrong { pub nodes: (Keyword, Paren), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyExprWeak { pub nodes: (Keyword, Paren), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyExprParen { pub nodes: (Paren,), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyExprNot { pub nodes: (Keyword, PropertyExpr), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyExprBinaryProperty { pub nodes: (PropertyExpr, Keyword, PropertyExpr), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyExprBinarySequence { pub nodes: (SequenceExpr, Symbol, PropertyExpr), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyExprIf { pub nodes: ( Keyword, Paren, PropertyExpr, Option<(Keyword, PropertyExpr)>, ), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyExprCase { pub nodes: ( Keyword, Paren, PropertyCaseItem, Vec, Keyword, ), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyExprNexttime { pub nodes: (Keyword, Option>, PropertyExpr), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyExprSNexttime { pub nodes: (Keyword, Option>, PropertyExpr), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyExprAlways { pub nodes: ( Keyword, Option>, PropertyExpr, ), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyExprSAlways { pub nodes: ( Keyword, Bracket, PropertyExpr, ), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyExprEventually { pub nodes: (Keyword, Bracket, PropertyExpr), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyExprSEventually { pub nodes: ( Keyword, Option>, PropertyExpr, ), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyExprAcceptOn { pub nodes: (Keyword, Paren, PropertyExpr), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyExprRejectOn { pub nodes: (Keyword, Paren, PropertyExpr), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyExprSyncAcceptOn { pub nodes: (Keyword, Paren, PropertyExpr), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyExprSyncRejectOn { pub nodes: (Keyword, Paren, PropertyExpr), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyExprClockingEvent { pub nodes: (ClockingEvent, PropertyExpr), } #[derive(Clone, Debug, PartialEq, Node)] pub enum PropertyCaseItem { Nondefault(Box), Default(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyCaseItemNondefault { pub nodes: (List, Symbol, PropertyExpr, Symbol), } #[derive(Clone, Debug, PartialEq, Node)] pub struct PropertyCaseItemDefault { pub nodes: (Keyword, Option, PropertyExpr, Symbol), } #[derive(Clone, Debug, PartialEq, Node)] pub struct SequenceDeclaration { pub nodes: ( Keyword, SequenceIdentifier, Option>>, Symbol, Vec, SequenceExpr, Option, Keyword, Option<(Symbol, SequenceIdentifier)>, ), } #[derive(Clone, Debug, PartialEq, Node)] pub struct SequencePortList { pub nodes: (List,), } #[derive(Clone, Debug, PartialEq, Node)] pub struct SequencePortItem { pub nodes: ( Vec, Option<(Keyword, Option)>, SequenceFormalType, FormalPortIdentifier, Vec, Option<(Symbol, SequenceActualArg)>, ), } #[derive(Clone, Debug, PartialEq, Node)] pub enum SequenceLvarPortDirection { Input(Box), Inout(Box), Output(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub enum SequenceFormalType { DataTypeOrImplicit(Box), Sequence(Box), Untyped(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub enum SequenceExpr { CycleDelayExpr(Box), ExprCycleDelayExpr(Box), Expression(Box), Instance(Box), Paren(Box), Binary(Box), FirstMatch(Box), Throughout(Box), ClockingEvent(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub struct SequenceExprCycleDelayExpr { pub nodes: ( CycleDelayRange, SequenceExpr, Vec<(CycleDelayRange, SequenceExpr)>, ), } #[derive(Clone, Debug, PartialEq, Node)] pub struct SequenceExprExprCycleDelayExpr { pub nodes: ( SequenceExpr, CycleDelayRange, SequenceExpr, Vec<(CycleDelayRange, SequenceExpr)>, ), } #[derive(Clone, Debug, PartialEq, Node)] pub struct SequenceExprExpression { pub nodes: (ExpressionOrDist, Option), } #[derive(Clone, Debug, PartialEq, Node)] pub struct SequenceExprInstance { pub nodes: (SequenceInstance, Option), } #[derive(Clone, Debug, PartialEq, Node)] pub struct SequenceExprParen { pub nodes: ( Paren<(SequenceExpr, Vec<(Symbol, SequenceMatchItem)>)>, Option, ), } #[derive(Clone, Debug, PartialEq, Node)] pub struct SequenceExprBinary { pub nodes: (SequenceExpr, Keyword, SequenceExpr), } #[derive(Clone, Debug, PartialEq, Node)] pub struct SequenceExprFirstMatch { pub nodes: ( Keyword, Paren<(SequenceExpr, Vec<(Symbol, SequenceMatchItem)>)>, ), } #[derive(Clone, Debug, PartialEq, Node)] pub struct SequenceExprThroughout { pub nodes: (ExpressionOrDist, Keyword, SequenceExpr), } #[derive(Clone, Debug, PartialEq, Node)] pub struct SequenceExprClockingEvent { pub nodes: (ClockingEvent, SequenceExpr), } #[derive(Clone, Debug, PartialEq, Node)] pub enum CycleDelayRange { Primary(Box), Expression(Box), Asterisk(Box), Plus(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub struct CycleDelayRangePrimary { pub nodes: (Symbol, ConstantPrimary), } #[derive(Clone, Debug, PartialEq, Node)] pub struct CycleDelayRangeExpression { pub nodes: (Symbol, Bracket), } #[derive(Clone, Debug, PartialEq, Node)] pub struct CycleDelayRangeAsterisk { pub nodes: (Symbol, Bracket), } #[derive(Clone, Debug, PartialEq, Node)] pub struct CycleDelayRangePlus { pub nodes: (Symbol, Bracket), } #[derive(Clone, Debug, PartialEq, Node)] pub struct SequenceMethodCall { pub nodes: (SequenceInstance, Symbol, MethodIdentifier), } #[derive(Clone, Debug, PartialEq, Node)] pub enum SequenceMatchItem { OperatorAssignment(Box), IncOrDecExpression(Box), SubroutineCall(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub struct SequenceInstance { pub nodes: ( PsOrHierarchicalSequenceIdentifier, Option>>, ), } #[derive(Clone, Debug, PartialEq, Node)] pub enum SequenceListOfArguments { Ordered(Box), Named(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub struct SequenceListOfArgumentsOrdered { pub nodes: ( List>, Vec<(Symbol, Symbol, Identifier, Paren>)>, ), } #[derive(Clone, Debug, PartialEq, Node)] pub struct SequenceListOfArgumentsNamed { pub nodes: (List>)>,), } #[derive(Clone, Debug, PartialEq, Node)] pub enum SequenceActualArg { EventExpression(Box), SequenceExpr(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub enum BooleanAbbrev { ConsecutiveRepetition(Box), NonConsecutiveRepetition(Box), GotoRepetition(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub struct SequenceAbbrev { pub nodes: (ConsecutiveRepetition,), } #[derive(Clone, Debug, PartialEq, Node)] pub enum ConsecutiveRepetition { Expression(Box), Asterisk(Box), Plus(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub struct ConsecutiveRepetitionExpression { pub nodes: (Bracket<(Symbol, ConstOrRangeExpression)>,), } #[derive(Clone, Debug, PartialEq, Node)] pub struct ConsecutiveRepetitionAsterisk { pub nodes: (Bracket,), } #[derive(Clone, Debug, PartialEq, Node)] pub struct ConsecutiveRepetitionPlus { pub nodes: (Bracket,), } #[derive(Clone, Debug, PartialEq, Node)] pub struct NonConsecutiveRepetition { pub nodes: (Bracket<(Symbol, ConstOrRangeExpression)>,), } #[derive(Clone, Debug, PartialEq, Node)] pub struct GotoRepetition { pub nodes: (Bracket<(Symbol, ConstOrRangeExpression)>,), } #[derive(Clone, Debug, PartialEq, Node)] pub enum ConstOrRangeExpression { ConstantExpression(Box), CycleDelayConstRangeExpression(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub enum CycleDelayConstRangeExpression { Binary(Box), Dollar(Box), } #[derive(Clone, Debug, PartialEq, Node)] pub struct CycleDelayConstRangeExpressionBinary { pub nodes: (ConstantExpression, Symbol, ConstantExpression), } #[derive(Clone, Debug, PartialEq, Node)] pub struct CycleDelayConstRangeExpressionDollar { pub nodes: (ConstantExpression, Symbol, Symbol), } #[derive(Clone, Debug, PartialEq, Node)] pub struct ExpressionOrDist { pub nodes: (Expression, Option<(Keyword, Brace)>), } #[derive(Clone, Debug, PartialEq, Node)] pub struct AssertionVariableDeclaration { pub nodes: (VarDataType, ListOfVariableDeclAssignments, Symbol), }