3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-23 09:05:31 +00:00

add more support for unroll (WIP)

This commit is contained in:
Murphy Berzish 2016-06-27 14:41:57 -04:00
parent 020e8aef6d
commit b31d1a92aa
4 changed files with 165 additions and 3 deletions

View file

@ -41,6 +41,7 @@ str_decl_plugin::str_decl_plugin():
m_re_regexconcat_decl(0),
m_re_regexstar_decl(0),
m_re_regexunion_decl(0),
m_re_unroll_decl(0),
m_arith_plugin(0),
m_arith_fid(0),
m_int_sort(0){
@ -69,6 +70,7 @@ void str_decl_plugin::finalize(void) {
DEC_REF(m_re_regexconcat_decl);
DEC_REF(m_re_regexstar_decl);
DEC_REF(m_re_regexunion_decl);
DEC_REF(m_re_unroll_decl);
DEC_REF(m_int_sort);
}
@ -154,6 +156,9 @@ void str_decl_plugin::set_manager(ast_manager * m, family_id id) {
m_re_regexunion_decl = m->mk_func_decl(symbol("RegexUnion"), re, re, re, func_decl_info(id, OP_RE_REGEXUNION));
m_manager->inc_ref(m_re_regexunion_decl);
m_re_unroll_decl = m->mk_func_decl(symbol("Unroll"), re, i, s, func_decl_info(id, OP_RE_UNROLL));
m_manager->inc_ref(m_re_unroll_decl);
}
decl_plugin * str_decl_plugin::mk_fresh() {
@ -186,6 +191,7 @@ func_decl * str_decl_plugin::mk_func_decl(decl_kind k) {
case OP_RE_REGEXCONCAT: return m_re_regexconcat_decl;
case OP_RE_REGEXSTAR: return m_re_regexstar_decl;
case OP_RE_REGEXUNION: return m_re_regexunion_decl;
case OP_RE_UNROLL: return m_re_unroll_decl;
default: return 0;
}
}
@ -256,6 +262,7 @@ void str_decl_plugin::get_op_names(svector<builtin_name> & op_names, symbol cons
op_names.push_back(builtin_name("RegexConcat", OP_RE_REGEXCONCAT));
op_names.push_back(builtin_name("RegexStar", OP_RE_REGEXSTAR));
op_names.push_back(builtin_name("RegexUnion", OP_RE_REGEXUNION));
op_names.push_back(builtin_name("Unroll", OP_RE_UNROLL));
}
void str_decl_plugin::get_sort_names(svector<builtin_name> & sort_names, symbol const & logic) {

View file

@ -47,6 +47,7 @@ enum str_op_kind {
OP_RE_REGEXCONCAT,
OP_RE_REGEXSTAR,
OP_RE_REGEXUNION,
OP_RE_UNROLL,
// end
LAST_STR_OP
};
@ -75,6 +76,7 @@ protected:
func_decl * m_re_regexconcat_decl;
func_decl * m_re_regexstar_decl;
func_decl * m_re_regexunion_decl;
func_decl * m_re_unroll_decl;
arith_decl_plugin * m_arith_plugin;
family_id m_arith_fid;