| 363 | |
| 364 | |
| 365 | void SymbolRuleSet::recognizeSymbolPatterns(const Map& symbol_set) |
| 366 | { |
| 367 | for (auto& item : *this) |
| 368 | { |
| 369 | if (item.type == SymbolRule::NoAssignment |
| 370 | || item.query.getOperator() != ObjectQuery::OperatorSearch) |
| 371 | continue; |
| 372 | Q_ASSERT(item.symbol); |
| 373 | |
| 374 | auto operands = item.query.tagOperands(); |
| 375 | if (!operands || operands->value.isEmpty()) |
| 376 | continue; |
| 377 | |
| 378 | // Find original symbol number matching the pattern |
| 379 | for (int i = 0; i < symbol_set.getNumSymbols(); ++i) |
| 380 | { |
| 381 | auto symbol = symbol_set.getSymbol(i); |
| 382 | if (symbol->getNumberAsString() == operands->value) |
| 383 | { |
| 384 | if (Symbol::areTypesCompatible(symbol->getType(), item.symbol->getType())) |
| 385 | item.query = { symbol }; |
| 386 | break; |
| 387 | } |
| 388 | } |
| 389 | } |
| 390 | } |
| 391 | |
| 392 | |
| 393 |
no test coverage detected