diff --git a/src/api/java/EnumSort.java b/src/api/java/EnumSort.java index 5cd11ba08b..6dcbee519e 100644 --- a/src/api/java/EnumSort.java +++ b/src/api/java/EnumSort.java @@ -92,6 +92,11 @@ public class EnumSort extends Sort return new FuncDecl<>(getContext(), Native.getDatatypeSortRecognizer(getContext().nCtx(), getNativeObject(), inx)); } + EnumSort(Context ctx, long obj) + { + super(ctx, obj); + } + EnumSort(Context ctx, Symbol name, Symbol[] enumNames) { super(ctx, Native.mkEnumerationSort(ctx.nCtx(), diff --git a/src/api/java/Sort.java b/src/api/java/Sort.java index 4910338f35..8be2cda7b8 100644 --- a/src/api/java/Sort.java +++ b/src/api/java/Sort.java @@ -125,6 +125,17 @@ public class Sort extends AST case Z3_BV_SORT: return new BitVecSort(ctx, obj); case Z3_DATATYPE_SORT: + int n = Native.getDatatypeSortNumConstructors(ctx.nCtx(), obj); + boolean isEnum = true; + for (int i = 0; i < n && isEnum; i++) { + long ctor = Native.getDatatypeSortConstructor(ctx.nCtx(), obj, i); + if (Native.getDomainSize(ctx.nCtx(), ctor) != 0) { + isEnum = false; + } + } + if (isEnum) { + return new EnumSort<>(ctx, obj); + } return new DatatypeSort<>(ctx, obj); case Z3_INT_SORT: return new IntSort(ctx, obj);