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

Method handleStructMember

erpcgen/src/SymbolScanner.cpp:786–820  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

784}
785
786AstNode *SymbolScanner::handleStructMember(AstNode *node, bottom_up)
787{
788 assert_throw_internal((m_currentStruct), "struct member not in struct");
789
790 AstNode *ident = (*node)[0];
791 const Token &tok = ident->getToken();
792 const string &name = tok.getStringValue();
793 Log::debug("struct member: %s\n", name.c_str());
794
795 /* Extract member type. */
796 AstNode *typeNode = (*node)[1];
797 DataType *dataType = lookupDataType(typeNode);
798 if (dataType->getName() == m_currentStruct->getName())
799 {
800 throw semantic_error(
801 format_string("line %d: invalid data type. Structure member has same data type name as structure name.",
802 tok.getFirstLine()));
803 }
804
805 /* Create struct member object. */
806 StructMember *param = new StructMember(tok, dataType);
807
808 // Set byref flag for structure member.
809 AstNode *memberType = node->getChild(2);
810 param->setByref(memberType->getTokenString().compare("2") == 0);
811
812 addAnnotations(node->getChild(3), param);
813
814 /* doxygen comment */
815 addDoxygenComments(param, node->getChild(4), node->getChild(5));
816
817 m_currentStruct->addMember(param);
818
819 return nullptr;
820}
821
822AstNode *SymbolScanner::handleUnion(AstNode *node, top_down)
823{

Callers

nothing calls this directly

Calls 10

assert_throw_internalFunction · 0.85
semantic_errorClass · 0.85
format_stringFunction · 0.85
getTokenMethod · 0.80
getChildMethod · 0.80
setByrefMethod · 0.80
getTokenStringMethod · 0.80
addMemberMethod · 0.80
getNameMethod · 0.45
getFirstLineMethod · 0.45

Tested by

no test coverage detected