Skip to content

Commit

Permalink
Towards safe initialization of rewriter
Browse files Browse the repository at this point in the history
  • Loading branch information
ajreynol committed Oct 21, 2024
1 parent 63eb5e6 commit c3cd61c
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 7 deletions.
9 changes: 8 additions & 1 deletion src/theory/bags/theory_bags.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,14 @@ TheoryBags::TheoryBags(Env& env, OutputChannel& out, Valuation valuation)

TheoryBags::~TheoryBags() {}

TheoryRewriter* TheoryBags::getTheoryRewriter() { return &d_rewriter; }
TheoryRewriter* TheoryBags::getTheoryRewriter()
{
if (!options().bags.bagsExp)
{
return nullptr;
}
return &d_rewriter;
}

ProofRuleChecker* TheoryBags::getProofChecker() { return nullptr; }

Expand Down
10 changes: 9 additions & 1 deletion src/theory/rewriter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,15 @@ Node Rewriter::rewriteEqualityExt(TNode node)
void Rewriter::registerTheoryRewriter(theory::TheoryId tid,
TheoryRewriter* trew)
{
d_theoryRewriters[tid] = trew;
if (trew == nullptr)
{
// if nullptr, use the default (null) theory rewriter.
d_theoryRewriters[tid] = &d_nullTr;
}
else
{
d_theoryRewriters[tid] = trew;
}
}

TheoryRewriter* Rewriter::getTheoryRewriter(theory::TheoryId theoryId)
Expand Down
2 changes: 2 additions & 0 deletions src/theory/rewriter.h
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,8 @@ class Rewriter {

/** Theory rewriters used by this rewriter instance */
TheoryRewriter* d_theoryRewriters[theory::THEORY_LAST];
/** Null theory rewriter, used when theory does not provide a rewriter */
NullTheoryRewriter d_nullTr;

/** The proof generator */
std::unique_ptr<TConvProofGenerator> d_tpg;
Expand Down
2 changes: 1 addition & 1 deletion src/theory/rewriter_tables_template.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ void Rewriter::setPostRewriteCache(theory::TheoryId theoryId,
}

Rewriter::Rewriter(NodeManager* nm)
: d_nm(nm), d_resourceManager(nullptr), d_tpg(nullptr)
: d_nm(nm), d_resourceManager(nullptr), d_nullTr(nm), d_tpg(nullptr)
{
}

Expand Down
9 changes: 8 additions & 1 deletion src/theory/sep/theory_sep.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,14 @@ void TheorySep::initializeHeapTypes()
}
}

TheoryRewriter* TheorySep::getTheoryRewriter() { return &d_rewriter; }
TheoryRewriter* TheorySep::getTheoryRewriter()
{
if (!options().sep.sepExp)
{
return nullptr;
}
return &d_rewriter;
}

ProofRuleChecker* TheorySep::getProofChecker() { return nullptr; }

Expand Down
26 changes: 23 additions & 3 deletions src/theory/theory_rewriter.h
Original file line number Diff line number Diff line change
Expand Up @@ -118,21 +118,21 @@ class TheoryRewriter
virtual void registerRewrites(Rewriter* rewriter) {}

/**
* Performs a pre-rewrite step.
* Performs a post-rewrite step.
*
* @param node The node to rewrite
*/
virtual RewriteResponse postRewrite(TNode node) = 0;

/**
* Performs a pre-rewrite step, with proofs.
* Performs a post-rewrite step, with proofs.
*
* @param node The node to rewrite
*/
virtual TrustRewriteResponse postRewriteWithProof(TNode node);

/**
* Performs a post-rewrite step.
* Performs a pre-rewrite step.
*
* @param node The node to rewrite
*/
Expand Down Expand Up @@ -235,6 +235,26 @@ class TheoryRewriter
NodeManager* nodeManager() const;
};

/**
* The null theory rewriter, which does not perform any rewrites. This is used
* if a theory does not have an (active) rewriter.
*/
class NullTheoryRewriter : public TheoryRewriter
{
public:
NullTheoryRewriter(NodeManager* nm) : TheoryRewriter(nm) {}
/** Performs a post-rewrite step. */
RewriteResponse postRewrite(TNode node) override
{
return RewriteResponse(REWRITE_DONE, node);
}
/** Performs a pre-rewrite step. */
RewriteResponse preRewrite(TNode node) override
{
return RewriteResponse(REWRITE_DONE, node);
}
};

} // namespace theory
} // namespace cvc5::internal

Expand Down

0 comments on commit c3cd61c

Please sign in to comment.