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

Method getStructDefinitionTemplateData

erpcgen/src/CGenerator.cpp:1069–1193  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1067}
1068
1069data_map CGenerator::getStructDefinitionTemplateData(Group *group, StructType *structType, data_map structInfo)
1070{
1071 // reset list numbering.
1072 listCounter = 0;
1073
1074 structInfo["hasNullableMember"] = false;
1075 structInfo["needTempVariableI32"] = false;
1076 structInfo["genStructWrapperF"] = !isBinaryStruct(structType);
1077 structInfo["noSharedMem"] = (findAnnotation(structType, NO_SHARED_ANNOTATION) != nullptr);
1078
1079 setTemplateComments(structType, structInfo);
1080
1081 // set struct members template data
1082 data_list members;
1083 assert(dynamic_cast<DataList *>(structInfo["members"].get().get()));
1084 data_list baseMembers = dynamic_cast<DataList *>(structInfo["members"].get().get())->getlist();
1085 data_list membersToFree;
1086
1087 for (StructMember *member : structType->getMembers())
1088 {
1089 data_map member_info;
1090
1091 // find base member template
1092 for (data_ptr mt : baseMembers)
1093 {
1094 if (mt->getmap()["name"]->getvalue() == getOutputName(member))
1095 {
1096 member_info = mt->getmap();
1097 break;
1098 }
1099 }
1100 if (member_info.empty())
1101 {
1102 Log::info("Could not find base member template for member '%s'\n", member->getName().c_str());
1103 continue;
1104 }
1105
1106 // member data type
1107 DataType *dataType = member->getDataType();
1108 DataType *trueDataType = member->getDataType()->getTrueDataType();
1109 string memberName = getOutputName(member);
1110
1111 bool isPtrType = (member->isByref() || trueDataType->isBinary() || trueDataType->isString() ||
1112 trueDataType->isList() || trueDataType->isFunction());
1113 // When forward declaration is used member should be present as pointer to data.
1114 if (!isPtrType && isMemberDataTypeUsingForwardDeclaration(structType, dataType))
1115 {
1116 throw syntax_error(
1117 format_string("line %d: Struct member shall use byref option. Member is using forward declared type.",
1118 member->getFirstLine()));
1119 }
1120 // Handle nullable annotation
1121 bool isNullable =
1122 ((findAnnotation(member, NULLABLE_ANNOTATION) != nullptr) &&
1123 (isPtrType || (trueDataType->isStruct() && (isListStruct(dynamic_cast<StructType *>(trueDataType)) ||
1124 (isBinaryStruct(dynamic_cast<StructType *>(trueDataType)))))));
1125 member_info["isNullable"] = isNullable;
1126 member_info["structElements"] = "";

Callers

nothing calls this directly

Calls 15

syntax_errorClass · 0.85
format_stringFunction · 0.85
getvalueMethod · 0.80
getTrueDataTypeMethod · 0.80
isByrefMethod · 0.80
isFunctionMethod · 0.80
isStructMethod · 0.80
push_backMethod · 0.80
getMethod · 0.45
emptyMethod · 0.45
getNameMethod · 0.45
getDataTypeMethod · 0.45

Tested by

no test coverage detected