mirror of
https://github.com/Z3Prover/z3
synced 2025-08-11 05:30:51 +00:00
minimal addition to rewrite bit-vector to character conversion using constant folding.
This commit is contained in:
parent
8f2ea90db1
commit
e839e18381
4 changed files with 122 additions and 0 deletions
62
src/ast/rewriter/char_rewriter.cpp
Normal file
62
src/ast/rewriter/char_rewriter.cpp
Normal file
|
@ -0,0 +1,62 @@
|
|||
/*++
|
||||
Copyright (c) 2015 Microsoft Corporation
|
||||
|
||||
Module Name:
|
||||
|
||||
char_rewriter.cpp
|
||||
|
||||
Abstract:
|
||||
|
||||
Basic rewriting rules for character constraints
|
||||
|
||||
Author:
|
||||
|
||||
Nikolaj Bjorner (nbjorner) 2015-12-5
|
||||
|
||||
--*/
|
||||
|
||||
#include "util/debug.h"
|
||||
#include "ast/rewriter/char_rewriter.h"
|
||||
#include "ast/bv_decl_plugin.h"
|
||||
|
||||
char_rewriter::char_rewriter(ast_manager& m):
|
||||
m(m) {
|
||||
m_char = static_cast<char_decl_plugin*>(m.get_plugin(m.mk_family_id("char")));
|
||||
}
|
||||
|
||||
family_id char_rewriter::get_fid() {
|
||||
return m_char->get_family_id();
|
||||
}
|
||||
|
||||
br_status char_rewriter::mk_app_core(func_decl * f, unsigned num_args, expr * const * args, expr_ref & result) {
|
||||
SASSERT(f->get_family_id() == get_fid());
|
||||
br_status st = BR_FAILED;
|
||||
switch (f->get_decl_kind()) {
|
||||
case OP_CHAR_CONST:
|
||||
break;
|
||||
case OP_CHAR_LE:
|
||||
break;
|
||||
case OP_CHAR_TO_INT:
|
||||
break;
|
||||
case OP_CHAR_TO_BV:
|
||||
break;
|
||||
case OP_CHAR_FROM_BV:
|
||||
st = mk_char_from_bv(args[0], result);
|
||||
break;
|
||||
case OP_CHAR_IS_DIGIT:
|
||||
break;
|
||||
}
|
||||
return st;
|
||||
}
|
||||
|
||||
br_status char_rewriter::mk_char_from_bv(expr* e, expr_ref& result) {
|
||||
bv_util bv(m);
|
||||
rational n;
|
||||
if (bv.is_numeral(e, n) && n.is_unsigned()) {
|
||||
if (n > m_char->max_char())
|
||||
return BR_FAILED;
|
||||
result = m_char->mk_char(n.get_unsigned());
|
||||
return BR_DONE;
|
||||
}
|
||||
return BR_FAILED;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue