MCPcopy Create free account
hub / github.com/Nic30/hdlConvertor / visitExpression

Method visitExpression

src/svConvertor/exprParser.cpp:151–330  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

149}
150
151unique_ptr<iHdlExprItem> VerExprParser::visitExpression(
152 sv2017Parser::ExpressionContext *ctx) {
153 // expression:
154 // primary
155 // | LPAREN operator_assignment RPAREN
156 // | KW_TAGGED identifier ( expression )?
157 // | unary_operator ( attribute_instance )* primary
158 // | inc_or_dec_expression
159 // | expression DOUBLESTAR ( attribute_instance )* expression
160 // | expression operator_mul_div_mod ( attribute_instance )* expression
161 // | expression operator_plus_minus ( attribute_instance )* expression
162 // | expression operator_shift ( attribute_instance )* expression
163 // | expression operator_cmp ( attribute_instance )* expression
164 // | expression KW_INSIDE LBRACE open_range_list RBRACE
165 // | expression operator_eq_neq ( attribute_instance )* expression
166 // | expression AMPERSAND ( attribute_instance )* expression
167 // | expression operator_xor ( attribute_instance )* expression
168 // | expression BAR ( attribute_instance )* expression
169 // | expression AND_LOG ( attribute_instance )* expression
170 // | expression OR_LOG ( attribute_instance )* expression
171 // | expression ( KW_MATCHES pattern )? TRIPLE_AND expression ( KW_MATCHES pattern )?
172 // | expression ( KW_MATCHES pattern )? (QUESTIONMARK ( attribute_instance )* expression COLON expression)+ // right associative
173 // | expression (operator_impl ( attribute_instance )* expression)+ // right associative
174 // ;
175
176 auto oa = ctx->operator_assignment();
177 if (oa) {
178 NotImplementedLogger::print(
179 "VerExprParser.visitExpression.operator_assignment", ctx);
180 return create_object<HdlExprNotImplemented>(ctx);
181 }
182 if (ctx->KW_TAGGED()) {
183 NotImplementedLogger::print(
184 "VerExprParser.visitExpression.KW_TAGGED identifier", ctx);
185 return create_object<HdlExprNotImplemented>(ctx);
186 }
187
188 for (auto ai : ctx->attribute_instance()) {
189 VerAttributeParser::visitAttribute_instance(ai);
190 }
191
192 auto _p = ctx->primary();
193 if (_p) {
194 VerExprPrimaryParser pp(this);
195 auto p = pp.visitPrimary(_p);
196 auto _uo = ctx->unary_operator();
197 if (_uo) {
198 auto uo = VerLiteralParser::visitUnary_operator(_uo);
199 assert(_p);
200 return create_object<HdlOp>(_uo, uo, move(p));
201 } else {
202 return p;
203 }
204 }
205 auto ide = ctx->inc_or_dec_expression();
206 if (ide) {
207 return visitInc_or_dec_expression(ide);
208 }

Calls 1

visitPrimaryMethod · 0.45

Tested by

no test coverage detected