MCPcopy Create free account
hub / github.com/EmbeddedRPC/erpc / setDiscriminatorTemp

Method setDiscriminatorTemp

erpcgen/src/CGenerator.cpp:3367–3434  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3365}
3366
3367bool CGenerator::setDiscriminatorTemp(UnionType *unionType, StructType *structType, StructMember *structMember,
3368 bool isFunctionParam, data_map &templateData)
3369{
3370 bool needTempVariableI32 = false;
3371 if (structType)
3372 {
3373 string discriminatorName;
3374 Symbol *disSymbol;
3375
3376 if (unionType->isNonEncapsulatedUnion())
3377 {
3378 discriminatorName = getAnnStringValue(structMember, DISCRIMINATOR_ANNOTATION);
3379 disSymbol = m_globals->getSymbol(discriminatorName, false);
3380 if (isFunctionParam || disSymbol)
3381 {
3382 templateData["dataLiteral"] = "";
3383 }
3384 else
3385 {
3386 templateData["dataLiteral"] = "data->";
3387 }
3388 }
3389 else
3390 {
3391 disSymbol = nullptr;
3392 templateData["dataLiteral"] = "data->";
3393 discriminatorName = unionType->getDiscriminatorName();
3394 }
3395
3396 DataType *disType;
3397 if (disSymbol)
3398 {
3399 templateData["isConstant"] = true;
3400 ConstType *constType = dynamic_cast<ConstType *>(disSymbol);
3401 assert(constType);
3402 disType = constType->getDataType();
3403 }
3404 else
3405 {
3406 templateData["isConstant"] = false;
3407 disSymbol = structType->getScope().getSymbol(discriminatorName);
3408 assert(disSymbol);
3409 StructMember *disMember = dynamic_cast<StructMember *>(disSymbol);
3410 assert(disMember);
3411 disType = disMember->getDataType();
3412 }
3413
3414 BuiltinType *disBuiltin = dynamic_cast<BuiltinType *>(disType->getTrueDataType());
3415 if (disBuiltin && disBuiltin->getBuiltinType() == BuiltinType::builtin_type_t::kInt32Type)
3416 {
3417 templateData["castDiscriminator"] = false;
3418 }
3419 else
3420 {
3421 needTempVariableI32 = true;
3422 templateData["castDiscriminator"] = true;
3423 templateData["discriminatorType"] = disType->getName();
3424 }

Callers

nothing calls this directly

Calls 7

getSymbolMethod · 0.80
getDiscriminatorNameMethod · 0.80
getTrueDataTypeMethod · 0.80
getBuiltinTypeMethod · 0.80
getDataTypeMethod · 0.45
getNameMethod · 0.45

Tested by

no test coverage detected