| 1339 | } |
| 1340 | |
| 1341 | data_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. |
nothing calls this directly
no test coverage detected