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

Method handleFunction

erpcgen/src/SymbolScanner.cpp:1122–1235  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1120}
1121
1122AstNode *SymbolScanner::handleFunction(AstNode *node, top_down)
1123{
1124 // Get function name.
1125 AstNode *ident = (*node)[0];
1126 const Token &tok = ident->getToken();
1127 const string &name = tok.getStringValue();
1128 Log::debug("function: %s\n", name.c_str());
1129 bool isFunctionType = node->getChild(4) != nullptr;
1130
1131 // Create function symbol.
1132 FunctionBase *func;
1133 if (isFunctionType)
1134 {
1135 func = new FunctionType(tok, m_currentInterface);
1136 m_currentInterface->addFunctionType(dynamic_cast<FunctionType *>(func));
1137 }
1138 else
1139 {
1140 if (m_currentInterface->getFunctions().size() == 0)
1141 {
1142 func = new Function(tok, m_currentInterface, 1);
1143 }
1144 else
1145 {
1146 func = new Function(tok, m_currentInterface);
1147 }
1148 m_currentInterface->addFunction(dynamic_cast<Function *>(func));
1149 }
1150
1151 m_currentStruct = &(func->getParameters());
1152
1153 // Get return type.
1154 AstNode *returnNode = (*node)[1];
1155 if (returnNode) /* Function type/definition */
1156 {
1157 Token &returnTokenType = returnNode->getToken();
1158 if (returnTokenType.getToken() == TOK_RETURN)
1159 {
1160 AstNode *returnTypeNode = returnNode->getChild(0);
1161 Token &returnTypeToken = returnTypeNode->getToken();
1162 switch (returnTypeToken.getToken())
1163 {
1164 case TOK_ONEWAY:
1165 {
1166 func->setIsOneway(true);
1167 func->setReturnStructMemberType(new StructMember("(return)", new VoidType));
1168 break;
1169 }
1170
1171 case TOK_VOID:
1172 {
1173 func->setReturnStructMemberType(new StructMember("(return)", new VoidType));
1174 break;
1175 }
1176
1177 default:
1178 {
1179 DataType *dataType = lookupDataType(returnTypeNode);

Callers

nothing calls this directly

Calls 15

semantic_errorClass · 0.85
format_stringFunction · 0.85
getTokenMethod · 0.80
getChildMethod · 0.80
addFunctionTypeMethod · 0.80
addFunctionMethod · 0.80
getTrueDataTypeMethod · 0.80
isFunctionMethod · 0.80
push_backMethod · 0.80
setFunctionTypeMethod · 0.80

Tested by

no test coverage detected