| 784 | } |
| 785 | |
| 786 | AstNode *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 | |
| 822 | AstNode *SymbolScanner::handleUnion(AstNode *node, top_down) |
| 823 | { |
nothing calls this directly
no test coverage detected