mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-04 13:29:11 +00:00 
			
		
		
		
	fix regressions exposed by build
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
		
							parent
							
								
									db746e0c2f
								
							
						
					
					
						commit
						22fbed18cc
					
				
					 2 changed files with 13 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -9320,8 +9320,10 @@ def Union(*args):
 | 
			
		|||
    args = _get_args(args)
 | 
			
		||||
    sz = len(args)
 | 
			
		||||
    if __debug__:
 | 
			
		||||
        _z3_assert(sz >= 2, "At least two arguments expected.")
 | 
			
		||||
        _z3_assert(sz > 0, "At least one argument expected.")
 | 
			
		||||
        _z3_assert(all([is_re(a) for a in args]), "All arguments must be regular expressions.")
 | 
			
		||||
    if sz == 1:
 | 
			
		||||
        return args[0]
 | 
			
		||||
    ctx = args[0].ctx
 | 
			
		||||
    v = (Ast * sz)()
 | 
			
		||||
    for i in range(sz):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -40,10 +40,9 @@ re2automaton::re2automaton(ast_manager& m): m(m), u(m) {}
 | 
			
		|||
eautomaton* re2automaton::operator()(expr* e) { 
 | 
			
		||||
    eautomaton* r = re2aut(e); 
 | 
			
		||||
    if (r) {
 | 
			
		||||
        //display_expr1 disp(m);
 | 
			
		||||
        //r->display(std::cout, disp);
 | 
			
		||||
        display_expr1 disp(m);
 | 
			
		||||
        r->compress(); 
 | 
			
		||||
        //r->display(std::cout, disp);
 | 
			
		||||
        TRACE("seq", r->display(tout, disp););
 | 
			
		||||
    }
 | 
			
		||||
    return r;
 | 
			
		||||
} 
 | 
			
		||||
| 
						 | 
				
			
			@ -664,6 +663,7 @@ void seq_rewriter::add_next(u_map<expr*>& next, unsigned idx, expr* cond) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
bool seq_rewriter::is_sequence(eautomaton& aut, expr_ref_vector& seq) {
 | 
			
		||||
    seq.reset();
 | 
			
		||||
    unsigned state = aut.init();
 | 
			
		||||
    uint_set visited;
 | 
			
		||||
    eautomaton::moves mvs;
 | 
			
		||||
| 
						 | 
				
			
			@ -675,6 +675,9 @@ bool seq_rewriter::is_sequence(eautomaton& aut, expr_ref_vector& seq) {
 | 
			
		|||
        if (visited.contains(state)) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        if (aut.is_final_state(mvs[0].src())) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        visited.insert(state);
 | 
			
		||||
        expr* t = mvs[0].t();
 | 
			
		||||
        if (!t) {
 | 
			
		||||
| 
						 | 
				
			
			@ -689,6 +692,7 @@ bool seq_rewriter::is_sequence(eautomaton& aut, expr_ref_vector& seq) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
bool seq_rewriter::is_sequence(expr* e, expr_ref_vector& seq) {
 | 
			
		||||
    seq.reset();
 | 
			
		||||
    zstring s;
 | 
			
		||||
    ptr_vector<expr> todo;
 | 
			
		||||
    expr *e1, *e2;
 | 
			
		||||
| 
						 | 
				
			
			@ -728,6 +732,8 @@ br_status seq_rewriter::mk_str_in_regexp(expr* a, expr* b, expr_ref& result) {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    if (is_sequence(*aut, seq)) {
 | 
			
		||||
        TRACE("seq", tout << seq << "\n";);
 | 
			
		||||
              
 | 
			
		||||
        if (seq.empty()) {
 | 
			
		||||
            result = m().mk_eq(a, m_util.str.mk_empty(m().get_sort(a)));
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -873,8 +879,7 @@ br_status seq_rewriter::mk_re_plus(expr* a, expr_ref& result) {
 | 
			
		|||
br_status seq_rewriter::mk_re_opt(expr* a, expr_ref& result) {
 | 
			
		||||
    sort* s;
 | 
			
		||||
    VERIFY(m_util.is_re(a, s));
 | 
			
		||||
    sort_ref seq(m_util.str.mk_seq(s), m());
 | 
			
		||||
    result = m_util.re.mk_union(m_util.re.mk_to_re(m_util.str.mk_empty(seq)), a);
 | 
			
		||||
    result = m_util.re.mk_union(m_util.re.mk_to_re(m_util.str.mk_empty(s)), a);
 | 
			
		||||
    return BR_REWRITE1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue