Skip to content

Commit

Permalink
#132 Refactor DFS code
Browse files Browse the repository at this point in the history
Signed-off-by: vityaman <[email protected]>
  • Loading branch information
vityaman committed Jul 31, 2024
1 parent 268e821 commit 45aa67b
Showing 1 changed file with 13 additions and 12 deletions.
25 changes: 13 additions & 12 deletions ports/cpp/source/antlr4-c3/CodeCompletionCore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -287,26 +287,27 @@ bool CodeCompletionCore::translateToRuleIndex(
*/
std::vector<size_t> CodeCompletionCore::getFollowingTokens(const antlr4::atn::Transition* transition
) const {
std::vector<size_t> result = {};

std::vector<size_t> result;
std::vector<antlr4::atn::ATNState*> pipeline = {transition->target};

while (!pipeline.empty()) {
antlr4::atn::ATNState* state = pipeline.back();
pipeline.pop_back();

if (state != nullptr) {
for (const antlr4::atn::ConstTransitionPtr& outgoing : state->transitions) {
if (outgoing->getTransitionType() == antlr4::atn::TransitionType::ATOM) {
if (!outgoing->isEpsilon()) {
const auto list = outgoing->label();
if (list.size() == 1 && !ignoredTokens.contains(list.get(0))) {
result.push_back(list.get(0));
pipeline.push_back(outgoing->target);
}
} else {
if (state == nullptr) {
continue;
}

for (const antlr4::atn::ConstTransitionPtr& outgoing : state->transitions) {
if (outgoing->getTransitionType() == antlr4::atn::TransitionType::ATOM) {
if (!outgoing->isEpsilon()) {
const auto list = outgoing->label();
if (list.size() == 1 && !ignoredTokens.contains(list.get(0))) {
result.push_back(list.get(0));
pipeline.push_back(outgoing->target);
}
} else {
pipeline.push_back(outgoing->target);
}
}
}
Expand Down

0 comments on commit 45aa67b

Please sign in to comment.