mirror of
https://github.com/Z3Prover/z3
synced 2025-08-07 03:31:23 +00:00
address accessor inconsistencies between - and from #1506
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
45b6e0998a
commit
ce1b135ec3
6 changed files with 44 additions and 14 deletions
|
@ -1059,6 +1059,7 @@ extern "C" {
|
|||
switch(_d->get_decl_kind()) {
|
||||
case OP_DT_CONSTRUCTOR: return Z3_OP_DT_CONSTRUCTOR;
|
||||
case OP_DT_RECOGNISER: return Z3_OP_DT_RECOGNISER;
|
||||
case OP_DT_IS: return Z3_OP_DT_IS;
|
||||
case OP_DT_ACCESSOR: return Z3_OP_DT_ACCESSOR;
|
||||
case OP_DT_UPDATE_FIELD: return Z3_OP_DT_UPDATE_FIELD;
|
||||
default:
|
||||
|
|
|
@ -485,7 +485,9 @@ class PP:
|
|||
raise StopPPException()
|
||||
|
||||
def pp(self, f, indent):
|
||||
if f.is_string():
|
||||
if isinstance(f, str):
|
||||
sef.pp_string(f, indent)
|
||||
elif f.is_string():
|
||||
self.pp_string(f, indent)
|
||||
elif f.is_indent():
|
||||
self.pp(f.child, min(indent + f.indent, self.max_indent))
|
||||
|
@ -846,10 +848,17 @@ class Formatter:
|
|||
else:
|
||||
return seq1('MultiPattern', [ self.pp_expr(arg, d+1, xs) for arg in a.children() ])
|
||||
|
||||
def pp_is(self, a, d, xs):
|
||||
f = a.params()[0]
|
||||
return self.pp_fdecl(f, a, d, xs)
|
||||
|
||||
def pp_map(self, a, d, xs):
|
||||
f = z3.get_map_func(a)
|
||||
return self.pp_fdecl(f, a, d, xs)
|
||||
|
||||
def pp_fdecl(self, f, a, d, xs):
|
||||
r = []
|
||||
sz = 0
|
||||
f = z3.get_map_func(a)
|
||||
r.append(to_format(f.name()))
|
||||
for child in a.children():
|
||||
r.append(self.pp_expr(child, d+1, xs))
|
||||
|
@ -909,6 +918,8 @@ class Formatter:
|
|||
return self.pp_unary_param(a, d, xs)
|
||||
elif k == Z3_OP_EXTRACT:
|
||||
return self.pp_extract(a, d, xs)
|
||||
elif k == Z3_OP_DT_IS:
|
||||
return self.pp_is(a, d, xs)
|
||||
elif k == Z3_OP_ARRAY_MAP:
|
||||
return self.pp_map(a, d, xs)
|
||||
elif k == Z3_OP_CONST_ARRAY:
|
||||
|
@ -963,6 +974,14 @@ class Formatter:
|
|||
else:
|
||||
return to_format(self.pp_unknown())
|
||||
|
||||
def pp_decl(self, f):
|
||||
k = f.kind()
|
||||
if k == Z3_OP_DT_IS or k == Z3_OP_ARRAY_MAP:
|
||||
g = f.params()[0]
|
||||
r = [ to_format(g.name()) ]
|
||||
return seq1(self.pp_name(f), r)
|
||||
return self.pp_name(f)
|
||||
|
||||
def pp_seq_core(self, f, a, d, xs):
|
||||
self.visited = self.visited + 1
|
||||
if d > self.max_depth or self.visited > self.max_visited:
|
||||
|
@ -1054,7 +1073,7 @@ class Formatter:
|
|||
elif z3.is_sort(a):
|
||||
return self.pp_sort(a)
|
||||
elif z3.is_func_decl(a):
|
||||
return self.pp_name(a)
|
||||
return self.pp_decl(a)
|
||||
elif isinstance(a, z3.Goal) or isinstance(a, z3.AstVector):
|
||||
return self.pp_seq(a, 0, [])
|
||||
elif isinstance(a, z3.Solver):
|
||||
|
|
|
@ -876,6 +876,8 @@ typedef enum
|
|||
|
||||
- Z3_OP_DT_RECOGNISER: datatype recognizer.
|
||||
|
||||
- Z3_OP_DT_IS: datatype recognizer.
|
||||
|
||||
- Z3_OP_DT_ACCESSOR: datatype accessor.
|
||||
|
||||
- Z3_OP_DT_UPDATE_FIELD: datatype field update.
|
||||
|
@ -1220,6 +1222,7 @@ typedef enum {
|
|||
// Datatypes
|
||||
Z3_OP_DT_CONSTRUCTOR=0x800,
|
||||
Z3_OP_DT_RECOGNISER,
|
||||
Z3_OP_DT_IS,
|
||||
Z3_OP_DT_ACCESSOR,
|
||||
Z3_OP_DT_UPDATE_FIELD,
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue