3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-01-28 21:08:43 +00:00

Refactor find_psort_decl() to return std::optional<psort_decl*> (#8339)

* Initial plan

* Refactor find_psort_decl() to return std::optional&lt;psort_decl*&gt;

Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
This commit is contained in:
Copilot 2026-01-25 19:50:33 -08:00 committed by GitHub
parent 49817bc259
commit 445f995c54
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 30 additions and 28 deletions

View file

@ -887,20 +887,20 @@ public:
m_array_fid = null_family_id;
}
void execute(cmd_context & ctx) override {
psort_decl * array_sort = ctx.find_psort_decl(m_array_sort);
if (array_sort == nullptr)
auto array_sort = ctx.find_psort_decl(m_array_sort);
if (!array_sort)
throw cmd_exception("Array sort is not available");
ptr_vector<sort> & array_sort_args = m_domain;
sort_ref_buffer domain(ctx.m());
unsigned arity = m_f->get_arity();
for (unsigned i = 0; i < arity; ++i) {
array_sort_args.push_back(m_f->get_domain(i));
domain.push_back(array_sort->instantiate(ctx.pm(), array_sort_args.size(), array_sort_args.data()));
domain.push_back((*array_sort)->instantiate(ctx.pm(), array_sort_args.size(), array_sort_args.data()));
array_sort_args.pop_back();
}
sort_ref range(ctx.m());
array_sort_args.push_back(m_f->get_range());
range = array_sort->instantiate(ctx.pm(), array_sort_args.size(), array_sort_args.data());
range = (*array_sort)->instantiate(ctx.pm(), array_sort_args.size(), array_sort_args.data());
parameter p(m_f);
func_decl_ref new_map(ctx.m());
new_map = ctx.m().mk_func_decl(get_array_fid(ctx), OP_ARRAY_MAP, 1, &p, domain.size(), domain.data(), range.get());

View file

@ -1166,10 +1166,11 @@ func_decl * cmd_context::find_func_decl(symbol const & s, unsigned num_indices,
throw cmd_exception("invalid function declaration reference, unknown indexed function ", s);
}
psort_decl * cmd_context::find_psort_decl(symbol const & s) const {
std::optional<psort_decl*> cmd_context::find_psort_decl(symbol const & s) const {
psort_decl * p = nullptr;
m_psort_decls.find(s, p);
return p;
if (m_psort_decls.find(s, p))
return p;
return std::nullopt;
}

View file

@ -20,6 +20,7 @@ Notes:
--*/
#pragma once
#include<optional>
#include<sstream>
#include<vector>
#include "util/stopwatch.h"
@ -470,7 +471,7 @@ public:
func_decl * find_func_decl(symbol const & s, unsigned num_indices, unsigned const * indices,
unsigned arity, sort * const * domain, sort * range);
recfun::promise_def decl_rec_fun(const symbol &name, unsigned int arity, sort *const *domain, sort *range);
psort_decl * find_psort_decl(symbol const & s) const;
std::optional<psort_decl*> find_psort_decl(symbol const & s) const;
cmd * find_cmd(symbol const & s) const;
sexpr * find_user_tactic(symbol const & s) const;
object_ref * find_object_ref(symbol const & s) const;