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

Method visitSimple_expression

src/vhdlConvertor/exprParser.cpp:175–233  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

173}
174
175unique_ptr<iHdlExprItem> VhdlExprParser::visitSimple_expression(
176 vhdlParser::Simple_expressionContext *ctx) {
177 // simple_expression:
178 // primary ( DOUBLESTAR primary )?
179 // | ( KW_ABS | KW_NOT | logical_operator | sign ) simple_expression
180 // | simple_expression multiplying_operator simple_expression
181 // | simple_expression adding_operator simple_expression
182 // ;
183 auto _primary = ctx->primary();
184 if (_primary.size() == 1) {
185 return visitPrimary(_primary[0]);
186 } else if (_primary.size() == 2) {
187 auto p0 = visitPrimary(_primary[0]);
188 aggregate_to_parenthesis(p0);
189 auto p1 = visitPrimary(_primary[1]);
190 aggregate_to_parenthesis(p1);
191 assert(ctx->DOUBLESTAR());
192 return create_object<HdlOp>(ctx, move(p0), HdlOpType::POW,
193 move(p1));
194 }
195 auto se = ctx->simple_expression();
196 HdlOpType op;
197 if (se.size() == 1) {
198 if (ctx->KW_ABS()) {
199 op = HdlOpType::ABS;
200 } else if (ctx->KW_NOT()) {
201 op = HdlOpType::NEG;
202 } else {
203 auto lo = ctx->logical_operator();
204 if (lo) {
205 op = HdlOpType_from(lo);
206 } else {
207 auto s = ctx->sign();
208 assert(s);
209 op = HdlOpType_from(s);
210 }
211 op = HdlOpType_toUnary(op);
212 }
213 auto se0 = visitSimple_expression(se[0]);
214 aggregate_to_parenthesis(se0);
215 return create_object<HdlOp>(ctx, op, move(se0));
216 } else {
217 assert(se.size() == 2);
218 auto mo = ctx->multiplying_operator();
219 if (mo) {
220 op = HdlOpType_from(mo);
221 } else {
222 auto ao = ctx->adding_operator();
223 assert(ao);
224 op = HdlOpType_from(ao);
225 }
226
227 auto se0 = visitSimple_expression(se[0]);
228 aggregate_to_parenthesis(se0);
229 auto se1 = visitSimple_expression(se[1]);
230 aggregate_to_parenthesis(se1);
231 return create_object<HdlOp>(ctx, move(se0), op, move(se1));
232 }

Callers

nothing calls this directly

Calls 3

aggregate_to_parenthesisFunction · 0.85
HdlOpType_fromFunction · 0.85
HdlOpType_toUnaryFunction · 0.85

Tested by

no test coverage detected