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

Method getFunctionBaseTemplateData

erpcgen/src/CGenerator.cpp:1341–1654  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1339}
1340
1341data_map CGenerator::getFunctionBaseTemplateData(Group *group, FunctionBase *fn)
1342{
1343 data_map info;
1344 Symbol *fnSymbol = dynamic_cast<Symbol *>(fn);
1345 data_list externalInterfacesDataList;
1346 list<string> externalInterfacesList;
1347
1348 // reset list numbering.
1349 listCounter = 0;
1350
1351 info["isOneway"] = fn->isOneway();
1352 info["isReturnValue"] = !fn->isOneway();
1353 info["isSendValue"] = false;
1354 setTemplateComments(fnSymbol, info);
1355 info["needTempVariableServerI32"] = false;
1356 info["needTempVariableClientI32"] = false;
1357 info["needTempVariableServerU16"] = false;
1358 info["needTempVariableClientU16"] = false;
1359 info["needNullVariableOnServer"] = false;
1360
1361 /* Is function declared as external? */
1362 info["isNonExternalFunction"] = !findAnnotation(fnSymbol, EXTERNAL_ANNOTATION);
1363
1364 // Get return value info
1365 data_map returnInfo;
1366 returnInfo["type"] = getTypeInfo(fn->getReturnType(), true);
1367 StructMember *structMember = fn->getReturnStructMemberType();
1368 DataType *dataType = fn->getReturnType();
1369 DataType *trueDataType = dataType->getTrueDataType();
1370 if (!trueDataType->isVoid())
1371 {
1372 string result = "result";
1373 bool needTempVariableI32 = false;
1374 setCallingFreeFunctions(structMember, returnInfo, true);
1375 string extraPointer = getExtraPointerInReturn(dataType);
1376 string resultVariable = extraPointer + returnSpaceWhenNotEmpty(extraPointer) + result;
1377 if (findAnnotation(structMember, NULLABLE_ANNOTATION) == nullptr)
1378 {
1379 returnInfo["isNullable"] = false;
1380 returnInfo["nullableName"] = "";
1381 }
1382 else
1383 {
1384 returnInfo["isNullable"] = true;
1385 returnInfo["nullableName"] = result;
1386 }
1387 bool isShared = (findAnnotation(structMember, SHARED_ANNOTATION) != nullptr);
1388 if (!isShared)
1389 {
1390 returnInfo["firstAlloc"] = firstAllocOnReturnWhenIsNeed(result, dataType);
1391 result = extraPointer + result;
1392 }
1393 else
1394 {
1395 returnInfo["firstAlloc"] = "";
1396 }
1397
1398 // due to compatibility with function parameters.

Callers

nothing calls this directly

Calls 15

semantic_errorClass · 0.85
format_stringFunction · 0.85
make_dataFunction · 0.85
getReturnTypeMethod · 0.80
getTrueDataTypeMethod · 0.80
isVoidMethod · 0.80
isEnumMethod · 0.80
isFunctionMethod · 0.80
getSymbolMethod · 0.80
push_backMethod · 0.80
getSymbolDirectionsMethod · 0.80

Tested by

no test coverage detected