Skip to content

Commit

Permalink
Moved some logic around to make provenance subclass easier to add.
Browse files Browse the repository at this point in the history
  • Loading branch information
azreika committed Nov 13, 2020
1 parent 09d1c72 commit 0c6f5e3
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 9 deletions.
21 changes: 13 additions & 8 deletions src/ast2ram/AstToRamTranslator.cpp
Expand Up @@ -370,7 +370,7 @@ std::string AstToRamTranslator::getRelationName(const ast::QualifiedName& id) {
return toString(join(id.getQualifiers(), "."));
}

Own<ram::Sequence> AstToRamTranslator::translateSCC(size_t scc, size_t idx) {
VecOwn<ram::Statement> AstToRamTranslator::translateSCC(size_t scc, size_t idx) {
// make a new ram statement for the current SCC
VecOwn<ram::Statement> current;

Expand Down Expand Up @@ -409,7 +409,15 @@ Own<ram::Sequence> AstToRamTranslator::translateSCC(size_t scc, size_t idx) {
}
}

return mk<ram::Sequence>(std::move(current));
return current;
}

void AstToRamTranslator::addNegation(ast::Clause& clause, const ast::Atom* atom) {
if (Global::config().has("provenance")) {
clause.addToBody(mk<ast::ProvenanceNegation>(souffle::clone(atom)));
} else if (clause.getHead()->getArity() > 0) {
clause.addToBody(mk<ast::Negation>(souffle::clone(atom)));
}
}

/** generate RAM code for recursive relations in a strongly-connected component */
Expand Down Expand Up @@ -504,11 +512,7 @@ Own<ram::Statement> AstToRamTranslator::translateRecursiveRelation(
auto r1 = souffle::clone(cl);
r1->getHead()->setQualifiedName(getNewRelationName(rel));
ast::getBodyLiterals<ast::Atom>(*r1)[j]->setQualifiedName(getDeltaRelationName(atomRelation));
if (Global::config().has("provenance")) {
r1->addToBody(mk<ast::ProvenanceNegation>(souffle::clone(cl->getHead())));
} else if (r1->getHead()->getArity() > 0) {
r1->addToBody(mk<ast::Negation>(souffle::clone(cl->getHead())));
}
addNegation(*r1, cl->getHead());

// replace wildcards with variables (reduces indices when wildcards are used in recursive
// atoms)
Expand Down Expand Up @@ -1087,7 +1091,8 @@ void AstToRamTranslator::translateProgram(const ast::TranslationUnit& translatio
size_t indexOfScc = 0;
for (const auto& scc : sccOrder.order()) {
// create subroutine for this stratum
ramSubs["stratum_" + std::to_string(indexOfScc)] = translateSCC(scc, indexOfScc);
auto sccStatements = translateSCC(scc, indexOfScc);
ramSubs["stratum_" + std::to_string(indexOfScc)] = mk<ram::Sequence>(std::move(sccStatements));
indexOfScc++;
}

Expand Down
4 changes: 3 additions & 1 deletion src/ast2ram/AstToRamTranslator.h
Expand Up @@ -183,7 +183,7 @@ class AstToRamTranslator {
RamDomain getConstantRamRepresentation(const ast::Constant& constant);

/** translate RAM code for a given SCC */
Own<ram::Sequence> translateSCC(size_t scc, size_t idx);
VecOwn<ram::Statement> translateSCC(size_t scc, size_t idx);

/** create RAM relations for a given SCC */
void createRamRelation(size_t scc);
Expand All @@ -200,6 +200,8 @@ class AstToRamTranslator {
/** translate RAM code for subroutine to get subproofs for non-existence of a tuple */
Own<ram::Statement> makeNegationSubproofSubroutine(const ast::Clause& clause);

static void addNegation(ast::Clause& clause, const ast::Atom* atom);

/** add a statement to store a relation */
void makeRamClear(VecOwn<ram::Statement>& curStmts, const ast::Relation* relation);

Expand Down

0 comments on commit 0c6f5e3

Please sign in to comment.