3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-13 12:28:44 +00:00
This commit is contained in:
Christoph M. Wintersteiger 2015-10-14 13:59:20 +01:00
commit 58d3329190
6 changed files with 73 additions and 43 deletions

View file

@ -33,7 +33,7 @@ public class AST extends Z3Object implements Comparable
{
AST casted = null;
try
try
{
casted = AST.class.cast(o);
} catch (ClassCastException e)
@ -41,13 +41,12 @@ public class AST extends Z3Object implements Comparable
return false;
}
return
(this == casted) ||
(this != null) &&
(casted != null) &&
(getContext().nCtx() == casted.getContext().nCtx()) &&
(Native.isEqAst(getContext().nCtx(), getNativeObject(), casted.getNativeObject()));
}
return (this == casted) ||
(this != null) &&
(casted != null) &&
(getContext().nCtx() == casted.getContext().nCtx()) &&
(Native.isEqAst(getContext().nCtx(), getNativeObject(), casted.getNativeObject()));
}
/**
* Object Comparison.

View file

@ -80,11 +80,20 @@ public class Constructor extends Z3Object
/**
* Destructor.
* @throws Throwable
* @throws Z3Exception on error
**/
protected void finalize()
protected void finalize() throws Throwable
{
Native.delConstructor(getContext().nCtx(), getNativeObject());
try {
Native.delConstructor(getContext().nCtx(), getNativeObject());
}
catch (Throwable t) {
throw t;
}
finally {
super.finalize();
}
}
private int n = 0;

View file

@ -24,11 +24,20 @@ public class ConstructorList extends Z3Object
{
/**
* Destructor.
* @throws Throwable
* @throws Z3Exception on error
**/
protected void finalize()
protected void finalize() throws Throwable
{
Native.delConstructorList(getContext().nCtx(), getNativeObject());
try {
Native.delConstructorList(getContext().nCtx(), getNativeObject());
}
catch (Throwable t) {
throw t;
}
finally {
super.finalize();
}
}
ConstructorList(Context ctx, long obj)

View file

@ -18,6 +18,7 @@ Notes:
package com.microsoft.z3;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import com.microsoft.z3.enumerations.Z3_ast_print_mode;
@ -3766,29 +3767,35 @@ public class Context extends IDisposable
return m_Optimize_DRQ;
}
protected long m_refCount = 0;
protected AtomicInteger m_refCount = new AtomicInteger(0);
/**
* Finalizer.
* @throws Throwable
**/
protected void finalize()
protected void finalize() throws Throwable
{
dispose();
if (m_refCount == 0)
{
try
try {
dispose();
if (m_refCount.get() == 0)
{
Native.delContext(m_ctx);
} catch (Z3Exception e)
{
// OK.
}
m_ctx = 0;
}
/*
else
CMW: re-queue the finalizer? */
try
{
Native.delContext(m_ctx);
} catch (Z3Exception e)
{
// OK.
}
m_ctx = 0;
}
}
catch (Throwable t) {
throw t;
}
finally {
super.finalize();
}
}
/**

View file

@ -25,10 +25,19 @@ public class Z3Object extends IDisposable
{
/**
* Finalizer.
* @throws Throwable
**/
protected void finalize()
protected void finalize() throws Throwable
{
dispose();
try {
dispose();
}
catch (Throwable t) {
throw t;
}
finally {
super.finalize();
}
}
/**
@ -43,8 +52,8 @@ public class Z3Object extends IDisposable
}
if (m_ctx != null)
{
m_ctx.m_refCount--;
{
m_ctx.m_refCount.decrementAndGet();
m_ctx = null;
}
}
@ -54,13 +63,13 @@ public class Z3Object extends IDisposable
Z3Object(Context ctx)
{
ctx.m_refCount++;
ctx.m_refCount.incrementAndGet();
m_ctx = ctx;
}
Z3Object(Context ctx, long obj)
{
ctx.m_refCount++;
ctx.m_refCount.incrementAndGet();
m_ctx = ctx;
incRef(obj);
m_n_obj = obj;

View file

@ -399,7 +399,6 @@ namespace smt {
};
struct sidl_ext {
// TODO: It doesn't need to be a rational, but a bignum integer.
static const bool m_int_theory = true;
typedef s_integer numeral;
typedef s_integer fin_numeral;
@ -415,13 +414,11 @@ namespace smt {
rdl_ext() : m_epsilon(rational(), true) {}
};
struct srdl_ext {
static const bool m_int_theory = false;
typedef inf_s_integer numeral;
typedef s_integer fin_numeral;
numeral m_epsilon;
srdl_ext() : m_epsilon(s_integer(0),true) {}
};
//
// there is no s_rational class, so
// instead we use multi-precision rationals.
//
struct srdl_ext : public rdl_ext {};
typedef theory_diff_logic<idl_ext> theory_idl;
typedef theory_diff_logic<sidl_ext> theory_fidl;