| 1501 | } |
| 1502 | |
| 1503 | DataType *SymbolScanner::lookupDataType(const AstNode *typeNode) |
| 1504 | { |
| 1505 | const Token &typeToken = typeNode->getToken(); |
| 1506 | switch (typeToken.getToken()) |
| 1507 | { |
| 1508 | case TOK_ARRAY: |
| 1509 | { |
| 1510 | return createArrayType(typeNode); |
| 1511 | } |
| 1512 | |
| 1513 | case TOK_IDENT: |
| 1514 | { |
| 1515 | DataType *dataType = nullptr; |
| 1516 | if (m_currentInterface != nullptr) |
| 1517 | { |
| 1518 | dataType = lookupDataTypeByName(typeToken, &m_currentInterface->getScope()); |
| 1519 | } |
| 1520 | if (dataType == nullptr) |
| 1521 | { |
| 1522 | dataType = lookupDataTypeByName(typeToken, m_globals); |
| 1523 | } |
| 1524 | return dataType; |
| 1525 | } |
| 1526 | case TOK_LIST: |
| 1527 | { |
| 1528 | return createListType(typeNode); |
| 1529 | } |
| 1530 | case TOK_UNION: |
| 1531 | { |
| 1532 | assert(nullptr != m_currentStruct); |
| 1533 | return lookupDataTypeByName(typeNode->getChild(3)->getToken(), &(m_currentStruct->getScope()), false); |
| 1534 | } |
| 1535 | default: |
| 1536 | { |
| 1537 | throw internal_error(format_string("unexpected token type %s on line %d", typeToken.getTokenName(), |
| 1538 | typeToken.getLocation().m_firstLine)); |
| 1539 | } |
| 1540 | } |
| 1541 | } |
| 1542 | |
| 1543 | DataType *SymbolScanner::createListType(const AstNode *typeNode) |
| 1544 | { |
nothing calls this directly
no test coverage detected