scarf_parser/lexer/
keywords.rs1use crate::*;
7
8#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Debug)]
9pub enum StandardVersion {
10 IEEE1364_1995,
11 IEEE1364_2001,
12 IEEE1364_2001Noconfig,
13 IEEE1364_2005,
14 IEEE1800_2005,
15 IEEE1800_2009,
16 IEEE1800_2012,
17 IEEE1800_2017,
18 IEEE1800_2023,
19}
20
21impl Default for StandardVersion {
22 fn default() -> Self {
23 StandardVersion::IEEE1800_2023
24 }
25}
26
27impl<'a> Token<'a> {
28 pub(crate) fn keyword_replace(&self, standard: &StandardVersion) -> bool {
31 let valid_in_standard = match self {
32 Token::Automatic
33 | Token::Endgenerate
34 | Token::Generate
35 | Token::Genvar
36 | Token::Localparam
37 | Token::Noshowcancelled
38 | Token::PulsestyleOndetect
39 | Token::PulsestyleOnevent
40 | Token::Showcancelled
41 | Token::Signed
42 | Token::Unsigned => *standard >= StandardVersion::IEEE1364_2001,
43 Token::Cell
44 | Token::Config
45 | Token::Design
46 | Token::Endconfig
47 | Token::Incdir
48 | Token::Include
49 | Token::Instance
50 | Token::Liblist
51 | Token::Library
52 | Token::Use => {
53 (*standard >= StandardVersion::IEEE1364_2001)
54 & (*standard != StandardVersion::IEEE1364_2001Noconfig)
55 }
56 Token::Uwire => *standard >= StandardVersion::IEEE1364_2005,
57 Token::Alias
58 | Token::AlwaysComb
59 | Token::AlwaysFf
60 | Token::AlwaysLatch
61 | Token::Assert
62 | Token::Assume
63 | Token::Before
64 | Token::Bind
65 | Token::Bins
66 | Token::Binsof
67 | Token::Bit
68 | Token::Break
69 | Token::Byte
70 | Token::Chandle
71 | Token::Class
72 | Token::Clocking
73 | Token::Const
74 | Token::Constraint
75 | Token::Context
76 | Token::Continue
77 | Token::Cover
78 | Token::Covergroup
79 | Token::Coverpoint
80 | Token::Cross
81 | Token::Dist
82 | Token::Do
83 | Token::Endclass
84 | Token::Endclocking
85 | Token::Endgroup
86 | Token::Endinterface
87 | Token::Endpackage
88 | Token::Endprogram
89 | Token::Endproperty
90 | Token::Endsequence
91 | Token::Enum
92 | Token::Expect
93 | Token::Export
94 | Token::Extends
95 | Token::Extern
96 | Token::Final
97 | Token::FirstMatch
98 | Token::Foreach
99 | Token::Forkjoin
100 | Token::Iff
101 | Token::IgnoreBins
102 | Token::IllegalBins
103 | Token::Import
104 | Token::Inside
105 | Token::Int
106 | Token::Interface
107 | Token::Intersect
108 | Token::JoinAny
109 | Token::JoinNone
110 | Token::Local
111 | Token::Logic
112 | Token::Longint
113 | Token::Matches
114 | Token::Modport
115 | Token::New
116 | Token::Null
117 | Token::Package
118 | Token::Packed
119 | Token::Priority
120 | Token::Program
121 | Token::Property
122 | Token::Protected
123 | Token::Pure
124 | Token::Rand
125 | Token::Randc
126 | Token::Randcase
127 | Token::Randsequence
128 | Token::Ref
129 | Token::Return
130 | Token::Sequence
131 | Token::Shortint
132 | Token::Shortreal
133 | Token::Solve
134 | Token::Static
135 | Token::String
136 | Token::Struct
137 | Token::Super
138 | Token::Tagged
139 | Token::This
140 | Token::Throughout
141 | Token::Timeprecision
142 | Token::Timeunit
143 | Token::Type
144 | Token::Typedef
145 | Token::Union
146 | Token::Unique
147 | Token::Var
148 | Token::Virtual
149 | Token::Void
150 | Token::WaitOrder
151 | Token::Wildcard
152 | Token::With
153 | Token::Within => *standard >= StandardVersion::IEEE1800_2005,
154 Token::AcceptOn
155 | Token::Checker
156 | Token::Endchecker
157 | Token::Eventually
158 | Token::Global
159 | Token::Implies
160 | Token::Let
161 | Token::Nexttime
162 | Token::RejectOn
163 | Token::Restrict
164 | Token::SAlways
165 | Token::SEventually
166 | Token::SNexttime
167 | Token::SUntil
168 | Token::SUntilWith
169 | Token::Strong
170 | Token::SyncAcceptOn
171 | Token::SyncRejectOn
172 | Token::Unique0
173 | Token::Until
174 | Token::UntilWith
175 | Token::Untyped
176 | Token::Weak => *standard >= StandardVersion::IEEE1800_2009,
177 Token::Implements
178 | Token::Interconnect
179 | Token::Nettype
180 | Token::Soft => *standard >= StandardVersion::IEEE1800_2012,
181 _ => true,
182 };
183 !valid_in_standard
184 }
185}