diff --git a/src/ast2ram/AstToRamTranslator.cpp b/src/ast2ram/AstToRamTranslator.cpp index b8dd9bc8e4c..7d8ca2d3fe2 100644 --- a/src/ast2ram/AstToRamTranslator.cpp +++ b/src/ast2ram/AstToRamTranslator.cpp @@ -337,7 +337,7 @@ Own AstToRamTranslator::createDeltaClause( return recursiveVersion; } -VecOwn AstToRamTranslator::translateRecursiveClauses( +Own AstToRamTranslator::translateRecursiveClauses( const std::set& scc, const ast::Relation* rel) const { assert(contains(scc, rel) && "relation should belong to scc"); VecOwn result; @@ -413,7 +413,7 @@ VecOwn AstToRamTranslator::translateRecursiveClauses( } } - return result; + return mk(std::move(result)); } Own AstToRamTranslator::generateStratumPreamble( @@ -466,16 +466,11 @@ Own AstToRamTranslator::generateStratumTableUpdates( return mk(std::move(updateTable)); } -Own AstToRamTranslator::generateStratumMainLoop( +Own AstToRamTranslator::generateStratumLoopBody( const std::set& scc) const { - VecOwn loopSeq; + VecOwn loopBody; for (const ast::Relation* rel : scc) { - auto loopRelSeq = translateRecursiveClauses(scc, rel); - - // if there were no rules, continue - if (loopRelSeq.empty()) { - continue; - } + auto relClauses = translateRecursiveClauses(scc, rel); // add profiling information if (Global::config().has("profile")) { @@ -483,15 +478,13 @@ Own AstToRamTranslator::generateStratumMainLoop( const auto& srcLocation = rel->getSrcLoc(); const std::string logTimerStatement = LogStatement::tRecursiveRelation(relationName, srcLocation); const std::string logSizeStatement = LogStatement::nRecursiveRelation(relationName, srcLocation); - auto newStmt = mk(mk(std::move(loopRelSeq)), + relClauses = mk(mk(std::move(relClauses)), logTimerStatement, getNewRelationName(rel->getQualifiedName())); - loopRelSeq.clear(); - appendStmt(loopRelSeq, std::move(newStmt)); } - appendStmt(loopSeq, mk(std::move(loopRelSeq))); + appendStmt(loopBody, mk(std::move(relClauses))); } - return mk(std::move(loopSeq)); + return mk(std::move(loopBody)); } Own AstToRamTranslator::generateStratumExitSequence( @@ -533,11 +526,11 @@ Own AstToRamTranslator::translateRecursiveRelation( appendStmt(result, generateStratumPreamble(scc)); // Add in the main fixpoint loop - auto innerLoop = mk(generateStratumMainLoop(scc)); + auto loopBody = mk(generateStratumLoopBody(scc)); auto exitSequence = generateStratumExitSequence(scc); auto updateSequence = generateStratumTableUpdates(scc); auto fixpointLoop = mk( - mk(std::move(innerLoop), std::move(exitSequence), std::move(updateSequence))); + mk(std::move(loopBody), std::move(exitSequence), std::move(updateSequence))); appendStmt(result, std::move(fixpointLoop)); // Add in the postamble diff --git a/src/ast2ram/AstToRamTranslator.h b/src/ast2ram/AstToRamTranslator.h index cc0260403d2..2ec871c746b 100644 --- a/src/ast2ram/AstToRamTranslator.h +++ b/src/ast2ram/AstToRamTranslator.h @@ -150,14 +150,14 @@ class AstToRamTranslator { Own generateMergeRelations( const ast::Relation* rel, const std::string& destRelation, const std::string& srcRelation) const; - VecOwn translateRecursiveClauses( + Own translateRecursiveClauses( const std::set& scc, const ast::Relation* rel) const; /** Stratum translation */ Own generateStratumPreamble(const std::set& scc) const; Own generateStratumPostamble(const std::set& scc) const; Own generateStratumTableUpdates(const std::set& scc) const; - Own generateStratumMainLoop(const std::set& scc) const; + Own generateStratumLoopBody(const std::set& scc) const; Own generateStratumExitSequence(const std::set& scc) const; Own generateStoreRelation(const ast::Relation* relation) const;