Fixes for warnings from clang++, from -std=gnu++0x, from swig, and from javac
authorMorgan Deters <mdeters@cs.nyu.edu>
Tue, 26 Mar 2013 21:58:39 +0000 (17:58 -0400)
committerMorgan Deters <mdeters@cs.nyu.edu>
Tue, 26 Mar 2013 23:43:25 +0000 (19:43 -0400)
36 files changed:
config/bindings.m4
config/cvc4.m4
configure.ac
examples/api/java/Makefile.am
examples/api/java/PipedInput.java [new file with mode: 0644]
src/bindings/compat/c/c_interface.cpp
src/bindings/compat/java/Makefile.am
src/bindings/compat/java/src/cvc3/ValidityChecker_impl.cpp
src/compat/cvc3_compat.cpp
src/cvc4.i
src/expr/command.i
src/expr/expr.i
src/expr/variable_type_map.i
src/parser/cvc/Makefile.am
src/parser/parser.i
src/parser/parser_exception.i
src/parser/smt1/Makefile.am
src/parser/smt2/Makefile.am
src/parser/tptp/Makefile.am
src/printer/ast/ast_printer.h
src/printer/cvc/cvc_printer.cpp
src/printer/cvc/cvc_printer.h
src/printer/smt1/smt1_printer.h
src/printer/smt2/smt2_printer.h
src/smt/boolean_terms.cpp
src/smt/smt_engine.i
src/util/Makefile.am
src/util/cvc4_assert.i [deleted file]
src/util/output.h
src/util/output.i
src/util/record.i
src/util/sexpr.h
src/util/sexpr.i
src/util/statistics.i
src/util/tuple.i
src/util/util_model.i [deleted file]

index 1c4c426951b6de77b69142ba1251c601dffa0ebc..6aa9b1ac59c21886c032715b3d3ce7f515a70732 100644 (file)
@@ -2,7 +2,7 @@
 # -----------------------
 # Supported language bindings for CVC4.
 AC_DEFUN([CVC4_SUPPORTED_BINDINGS],
-[c,java])
+[c,c++,java])
 
 # CVC4_ALL_BINDINGS
 # -----------------
index c530b8543a12832c3c9fa92d211657d5adafd832..0eca68c1352a843d202562f2f9640a38c05591bf 100644 (file)
@@ -94,7 +94,7 @@ AC_CONFIG_FILES([$1.tmp:$1.in],
 AC_DEFUN([CVC4_CXX_OPTION], [
 AC_MSG_CHECKING([whether $CXX supports $1])
 cvc4_save_CXXFLAGS="$CXXFLAGS"
-CXXFLAGS="$CXXFLAGS $1"
+CXXFLAGS="$CXXFLAGS $WERROR $1"
 AC_LANG_PUSH([C++])
 AC_COMPILE_IFELSE([AC_LANG_SOURCE([int main() { return 0; }])],
                   [AC_MSG_RESULT([yes]); $2='$1'],
index a4b8892abeac07c64ce417acc337edd7c34c246d..b8127592fecbeca2003b2db186f1c1f10088ef55 100644 (file)
@@ -743,11 +743,17 @@ AC_SUBST([CVC4_NEED_INT64_T_OVERLOADS])
 # Check for ANTLR runantlr script (defined in config/antlr.m4)
 AC_PROG_ANTLR
 
+CVC4_CXX_OPTION([-Werror], [WERROR])
 CVC4_CXX_OPTION([-Wno-conversion-null], [WNO_CONVERSION_NULL])
+CVC4_CXX_OPTION([-Wno-tautological-compare], [WNO_TAUTOLOGICAL_COMPARE])
+CVC4_CXX_OPTION([-Wno-parentheses], [WNO_PARENTHESES])
 CVC4_CXX_OPTION([-Wno-uninitialized], [WNO_UNINITIALIZED])
 CVC4_CXX_OPTION([-Wno-unused-variable], [WNO_UNUSED_VARIABLE])
 CVC4_CXX_OPTION([-fno-strict-aliasing], [FNO_STRICT_ALIASING])
+AC_SUBST([WERROR])
 AC_SUBST([WNO_CONVERSION_NULL])
+AC_SUBST([WNO_TAUTOLOGICAL_COMPARE])
+AC_SUBST([WNO_PARENTHESES])
 AC_SUBST([WNO_UNINITIALIZED])
 AC_SUBST([WNO_UNUSED_VARIABLE])
 AC_SUBST([FNO_STRICT_ALIASING])
index 55f63760402755c0866ed756e0b047e563dec6cf..84c818737f727eb8a75273c00b7750cd35be8a01 100644 (file)
@@ -6,7 +6,8 @@ noinst_DATA += \
        BitVectorsAndArrays.class \
        Combination.class \
        HelloWorld.class \
-       LinearArith.class
+       LinearArith.class \
+       PipedInput.class
 endif
 
 %.class: %.java
@@ -17,7 +18,8 @@ EXTRA_DIST = \
        BitVectorsAndArrays.java \
        Combination.java \
        HelloWorld.java \
-       LinearArith.java
+       LinearArith.java \
+       PipedInput.java
 
 # for installation
 examplesdir = $(docdir)/$(subdir)
diff --git a/examples/api/java/PipedInput.java b/examples/api/java/PipedInput.java
new file mode 100644 (file)
index 0000000..3a54709
--- /dev/null
@@ -0,0 +1,69 @@
+/*********************                                                        */
+/*! \file PipedInput.java
+ ** \verbatim
+ ** Original author: mdeters
+ ** Major contributors: none
+ ** Minor contributors (to current version): none
+ ** This file is part of the CVC4 prototype.
+ ** Copyright (c) 2009-2013  New York University and The University of Iowa
+ ** See the file COPYING in the top-level source directory for licensing
+ ** information.\endverbatim
+ **
+ ** \brief A simple demonstration of the input parsing capabilities of CVC4
+ ** when used from Java
+ **
+ ** A simple demonstration of the input parsing capabilities of CVC4 when
+ ** used from Java.
+ **/
+
+import edu.nyu.acsys.CVC4.*;
+import java.io.*;
+
+public class PipedInput {
+  public static void main(String[] args) throws IOException {
+    System.loadLibrary("cvc4jni");
+
+    // Boilerplate setup for CVC4
+    ExprManager exprMgr = new ExprManager();
+    SmtEngine smt = new SmtEngine(exprMgr);
+    smt.setOption("incremental", new SExpr(true));
+    smt.setOption("output-language", new SExpr("smt2"));
+
+    // Set up a pair of connected Java streams
+    PipedOutputStream solverPipe = new PipedOutputStream();
+    PrintWriter toSolver = new PrintWriter(solverPipe);
+    PipedInputStream stream = new PipedInputStream(solverPipe);
+
+    // Write some things to CVC4's input stream, making sure to flush()
+    toSolver.println("(set-logic QF_LIA)");
+    toSolver.println("(declare-fun x () Int)");
+    toSolver.println("(assert (= x 5))");
+    toSolver.println("(check-sat)");
+    toSolver.flush();
+
+    // Set up the CVC4 parser
+    ParserBuilder pbuilder =
+      new ParserBuilder(exprMgr, "<string 1>")
+      .withInputLanguage(InputLanguage.INPUT_LANG_SMTLIB_V2)
+      .withLineBufferedStreamInput((java.io.InputStream)stream);
+    Parser parser = pbuilder.build();
+
+    // Read all the commands thus far
+    Command cmd;
+    while((cmd = parser.nextCommand()) != null) {
+      System.out.println(cmd);
+      cmd.invoke(smt, System.out);
+    }
+
+    // Write some more things to CVC4's input stream, making sure to flush()
+    toSolver.println("(assert (= x 10))");
+    toSolver.println("(check-sat)");
+    toSolver.flush();
+
+    // Read all the commands thus far
+    while((cmd = parser.nextCommand()) != null) {
+      System.out.println(cmd);
+      cmd.invoke(smt, System.out);
+    }
+  }
+}
index 6540f428c6a23ffaba4f479ffd35e67220588987..8219d5169bceae01fe14a1a7a08fb85b9551f5bf 100644 (file)
@@ -31,6 +31,7 @@
 //#include "fdstream.h"
 #include <string>
 #include <cassert>
+#include <cerrno>
 #include <unistd.h>
 
 #ifdef CVC4_DEBUG
@@ -862,7 +863,12 @@ extern "C" void vc_printExprFile(VC vc, Expr e, int fd)
     CVC3::ValidityChecker* cvc = (CVC3::ValidityChecker*) vc;
     cvc->printExpr(fromExpr(e), ss);
     string s = ss.str();
-    write(fd, s.c_str(), s.size());
+    ssize_t e = write(fd, s.c_str(), s.size());
+    if(e < 0) {
+      IF_DEBUG(cerr << "write() failed, errno == " << errno << endl;)
+      c_interface_error_string = "write() failed";
+      c_interface_error_flag = errno;
+    }
   } catch(CVC3::Exception ex) {
     signal_error("vc_printExpr",error_int,ex);
   }
index 3b0df308a1e769ee9b3b2585a8e630bae24f83b5..e465195d9cd0af9611d7d2161f249c8273da1b09 100644 (file)
@@ -16,7 +16,7 @@ AM_CPPFLAGS = \
        -D__BUILDING_CVC4BINDINGSLIB \
        -I@builddir@/../../.. -I@srcdir@/../../../include -I@srcdir@/../../.. \
        -I@builddir@/cvc3 -I@srcdir@/include/cvc3
-AM_CXXFLAGS = -Wall
+AM_CXXFLAGS = -Wall -Wno-unused-variable
 
 javadatadir = $(datadir)/java
 javalibdir = $(libdir)/jni
index af588a4ff23b58e386dc281d631e2f6c764042a5..fa608a785c9ec5963d1b368e9bc31ba5d69986fb 100644 (file)
@@ -87,10 +87,12 @@ return toJavaVCopy(env, result);
 DEFINITION: Java_cvc3_ValidityChecker_jniAnyType
 jobject m ValidityChecker vc
 assert(false);// Unimplemented
+return NULL;
 
 DEFINITION: Java_cvc3_ValidityChecker_jniArrayLiteral
 jobject m ValidityChecker vc c Expr indexVar c Expr bodyExpr
 assert(false);// Unimplemented
+return NULL;
 
 DEFINITION: Java_cvc3_ValidityChecker_jniArrayType
 jobject m ValidityChecker vc c Type typeIndex c Type typeData
index 0cd35ce0d5257f1442b5c5106925ed7b68023c5d..9fbdeb8d0117c8900857bbc026cde4784cd51160 100644 (file)
@@ -1261,6 +1261,7 @@ Type ValidityChecker::createType(const std::string& typeName) {
 
 Type ValidityChecker::createType(const std::string& typeName, const Type& def) {
   d_parserContext->defineType(typeName, def);
+  return def;
 }
 
 Type ValidityChecker::lookupType(const std::string& typeName) {
@@ -1279,6 +1280,7 @@ Expr ValidityChecker::varExpr(const std::string& name, const Type& type,
                               const Expr& def) {
   CVC4::CheckArgument(def.getType() == type, def, "expected types to match");
   d_parserContext->defineVar(name, def);
+  return def;
 }
 
 Expr ValidityChecker::lookupVar(const std::string& name, Type* type) {
index 92515224873789c30789a9002280d94089bf2fba..ebb8cbd6345dab72521bac95ba1f2e7aa8b04c5c 100644 (file)
@@ -62,6 +62,7 @@ std::set<JavaInputStreamAdapter*> CVC4::JavaInputStreamAdapter::s_adapters;
 %template(vectorCommandPtr) std::vector< CVC4::Command* >;
 %template(vectorType) std::vector< CVC4::Type >;
 %template(vectorExpr) std::vector< CVC4::Expr >;
+%template(vectorVectorExpr) std::vector< std::vector< CVC4::Expr > >;
 %template(vectorDatatypeType) std::vector< CVC4::DatatypeType >;
 %template(vectorSExpr) std::vector< CVC4::SExpr >;
 %template(vectorString) std::vector< std::string >;
@@ -177,7 +178,8 @@ std::set<JavaInputStreamAdapter*> CVC4::JavaInputStreamAdapter::s_adapters;
   *(CVC4::JavaInputStreamAdapter **)&$result = $1;
 %}
 %typemap(javacode) CVC4::JavaInputStreamAdapter %{
-  private static java.util.HashMap streams = new java.util.HashMap();
+  private static java.util.HashMap<java.io.InputStream, JavaInputStreamAdapter> streams =
+    new java.util.HashMap<java.io.InputStream, JavaInputStreamAdapter>();
   public static JavaInputStreamAdapter get(java.io.InputStream is) {
     if(streams.containsKey(is)) {
       return (JavaInputStreamAdapter) streams.get(is);
@@ -195,6 +197,7 @@ std::set<JavaInputStreamAdapter*> CVC4::JavaInputStreamAdapter::s_adapters;
 %}
 %ignore CVC4::JavaInputStreamAdapter::init(JNIEnv*);
 %ignore CVC4::JavaInputStreamAdapter::pullAdapters(JNIEnv*);
+%ignore CVC4::JavaInputStreamAdapter::pull(JNIEnv*);
 %javamethodmodifiers CVC4::JavaInputStreamAdapter::getInputStream() const "private";
 %javamethodmodifiers CVC4::JavaInputStreamAdapter::JavaInputStreamAdapter(jobject) "private";
 
@@ -256,6 +259,8 @@ std::set<JavaInputStreamAdapter*> CVC4::JavaInputStreamAdapter::s_adapters;
 %include "expr/type.i"
 %include "util/ascription_type.i"
 %include "util/datatype.i"
+%include "util/tuple.i"
+%include "util/record.i"
 %include "util/uninterpreted_constant.i"
 
 %include "expr/kind.i"
index 09e54fec0fd6445af28a29d9f5e90fb1f8297778..6085a444f27ff48e4451a5453ed85183d3d6b983 100644 (file)
@@ -1,5 +1,12 @@
 %{
 #include "expr/command.h"
+
+#ifdef SWIGJAVA
+
+#include "bindings/java_iterator_adapter.h"
+#include "bindings/java_stream_adapters.h"
+
+#endif /* SWIGJAVA */
 %}
 
 %ignore CVC4::operator<<(std::ostream&, const Command&) throw();
@@ -7,8 +14,55 @@
 %ignore CVC4::operator<<(std::ostream&, BenchmarkStatus status) throw();
 
 %ignore CVC4::GetProofCommand;
+%ignore CVC4::CommandPrintSuccess::Scope;
+
+#ifdef SWIGJAVA
+
+// Instead of CommandSequence::begin() and end(), create an
+// iterator() method on the Java side that returns a Java-style
+// Iterator.
+%ignore CVC4::CommandSequence::begin();
+%ignore CVC4::CommandSequence::end();
+%ignore CVC4::CommandSequence::begin() const;
+%ignore CVC4::CommandSequence::end() const;
+%extend CVC4::CommandSequence {
+  CVC4::JavaIteratorAdapter<CVC4::CommandSequence> iterator() {
+    return CVC4::JavaIteratorAdapter<CVC4::CommandSequence>(*$self);
+  }
+}
+
+// CommandSequence is "iterable" on the Java side
+%typemap(javainterfaces) CVC4::CommandSequence "java.lang.Iterable<edu.nyu.acsys.CVC4.Command>";
 
-%rename(beginConst) CVC4::CommandSequence::begin() const throw();
-%rename(endConst) CVC4::CommandSequence::end() const throw();
+// the JavaIteratorAdapter should not be public, and implements Iterator
+%typemap(javaclassmodifiers) CVC4::JavaIteratorAdapter<CVC4::CommandSequence> "class";
+%typemap(javainterfaces) CVC4::JavaIteratorAdapter<CVC4::CommandSequence> "java.util.Iterator<edu.nyu.acsys.CVC4.Command>";
+// add some functions to the Java side (do it here because there's no way to do these in C++)
+%typemap(javacode) CVC4::JavaIteratorAdapter<CVC4::CommandSequence> "
+  public void remove() {
+    throw new java.lang.UnsupportedOperationException();
+  }
+
+  public edu.nyu.acsys.CVC4.Command next() {
+    if(hasNext()) {
+      return getNext();
+    } else {
+      throw new java.util.NoSuchElementException();
+    }
+  }
+"
+// getNext() just allows C++ iterator access from Java-side next(), make it private
+%javamethodmodifiers CVC4::JavaIteratorAdapter<CVC4::CommandSequence>::getNext() "private";
+
+#endif /* SWIGJAVA */
 
 %include "expr/command.h"
+
+#ifdef SWIGJAVA
+
+%include "bindings/java_iterator_adapter.h"
+%include "bindings/java_stream_adapters.h"
+
+%template(JavaIteratorAdapter_CommandSequence) CVC4::JavaIteratorAdapter<CVC4::CommandSequence>;
+
+#endif /* SWIGJAVA */
index 34f074a6dd45f2ebaa5c51aa0a6bbc54001a3859..92ab517b13e1ab38090366018b55e05eaecb3cde 100644 (file)
@@ -1,5 +1,12 @@
 %{
 #include "expr/expr.h"
+
+#ifdef SWIGJAVA
+
+#include "bindings/java_iterator_adapter.h"
+#include "bindings/java_stream_adapters.h"
+
+#endif /* SWIGJAVA */
 %}
 
 %rename(apply) CVC4::ExprHashFunction::operator()(CVC4::Expr) const;
@@ -29,6 +36,44 @@ namespace CVC4 {
   }/* CVC4::expr namespace */
 }/* CVC4 namespace */
 
+#ifdef SWIGJAVA
+
+// Instead of Expr::begin() and end(), create an
+// iterator() method on the Java side that returns a Java-style
+// Iterator.
+%ignore CVC4::Expr::begin() const;
+%ignore CVC4::Expr::end() const;
+%extend CVC4::Expr {
+  CVC4::JavaIteratorAdapter<CVC4::Expr> iterator() {
+    return CVC4::JavaIteratorAdapter<CVC4::Expr>(*$self);
+  }
+}
+
+// Expr is "iterable" on the Java side
+%typemap(javainterfaces) CVC4::Expr "java.lang.Iterable<edu.nyu.acsys.CVC4.Expr>";
+
+// the JavaIteratorAdapter should not be public, and implements Iterator
+%typemap(javaclassmodifiers) CVC4::JavaIteratorAdapter<CVC4::Expr> "class";
+%typemap(javainterfaces) CVC4::JavaIteratorAdapter<CVC4::Expr> "java.util.Iterator<edu.nyu.acsys.CVC4.Expr>";
+// add some functions to the Java side (do it here because there's no way to do these in C++)
+%typemap(javacode) CVC4::JavaIteratorAdapter<CVC4::Expr> "
+  public void remove() {
+    throw new java.lang.UnsupportedOperationException();
+  }
+
+  public edu.nyu.acsys.CVC4.Expr next() {
+    if(hasNext()) {
+      return getNext();
+    } else {
+      throw new java.util.NoSuchElementException();
+    }
+  }
+"
+// getNext() just allows C++ iterator access from Java-side next(), make it private
+%javamethodmodifiers CVC4::JavaIteratorAdapter<CVC4::Expr>::getNext() "private";
+
+#endif /* SWIGJAVA */
+
 %include "expr/expr.h"
 
 %template(getConstTypeConstant) CVC4::Expr::getConst<CVC4::TypeConstant>;
@@ -52,4 +97,13 @@ namespace CVC4 {
 %template(getConstString) CVC4::Expr::getConst<std::string>;
 %template(getConstBoolean) CVC4::Expr::getConst<bool>;
 
+#ifdef SWIGJAVA
+
+%include "bindings/java_iterator_adapter.h"
+%include "bindings/java_stream_adapters.h"
+
+%template(JavaIteratorAdapter_Expr) CVC4::JavaIteratorAdapter<CVC4::Expr>;
+
+#endif /* SWIGJAVA */
+
 %include "expr/expr.h"
index a5d50361fccb21b51c1d459bf80203ae580950f2..95c705c1e4e10c5b3571b77f91f5b88c0f76683a 100644 (file)
@@ -5,4 +5,8 @@
 %rename(get) CVC4::VariableTypeMap::operator[](Expr);
 %rename(get) CVC4::VariableTypeMap::operator[](Type);
 
+%ignore CVC4::ExprManagerMapCollection::d_typeMap;
+%ignore CVC4::ExprManagerMapCollection::d_to;
+%ignore CVC4::ExprManagerMapCollection::d_from;
+
 %include "expr/variable_type_map.h"
index b1cfe7bd80c3f7090894e75abad26e24fb0f57c5..7c5d48c1c0a11596ee2ac727a127b534159d0d0c 100644 (file)
@@ -1,7 +1,7 @@
 AM_CPPFLAGS = \
        -D__BUILDING_CVC4PARSERLIB \
        -I@builddir@/../.. -I@srcdir@/../../include -I@srcdir@/../.. $(ANTLR_INCLUDES)
-AM_CXXFLAGS = -Wall -Wno-unknown-pragmas $(FLAG_VISIBILITY_HIDDEN) -Wno-unused-function -Wno-unused-variable $(WNO_CONVERSION_NULL)
+AM_CXXFLAGS = -Wall -Wno-unknown-pragmas $(FLAG_VISIBILITY_HIDDEN) $(WNO_PARENTHESES) $(WNO_TAUTOLOGICAL_COMPARE) -Wno-unused-function -Wno-unused-variable $(WNO_CONVERSION_NULL)
 
 # Compile generated C files using C++ compiler
 CC=$(CXX)
index 5b23555eac3f123984fdda212c9a9a47700c8c0e..37aefb9013b79240ecd799eca210fb6ab255ab05 100644 (file)
@@ -19,6 +19,8 @@ namespace CVC4 {
   }/* namespace CVC4::parser */
 }/* namespace CVC4 */
 
+%ignore CVC4::parser::Parser::ExprStream;
+
 %include "parser/parser.h"
 
 %{
index 5be81034d6e44150b266d3278e1581d5378c20cf..39f67e6f51a2d578fb310796d056ce896e7de311 100644 (file)
@@ -3,5 +3,6 @@
 %}
 
 %ignore CVC4::parser::ParserException::ParserException(const char*);
+%ignore CVC4::parser::ParserEndOfFileException::ParserEndOfFileException(const char*);
 
 %include "parser/parser_exception.h"
index 578fae272c96eabeaf113aaa916e2c0ccad478ee..90ee7eb316cff26da0c0558411a6df3c5fb3feb2 100644 (file)
@@ -1,7 +1,7 @@
 AM_CPPFLAGS = \
        -D__BUILDING_CVC4PARSERLIB \
        -I@builddir@/../.. -I@srcdir@/../../include -I@srcdir@/../.. $(ANTLR_INCLUDES)
-AM_CXXFLAGS = -Wall -Wno-unknown-pragmas $(FLAG_VISIBILITY_HIDDEN) -Wno-unused-function -Wno-unused-variable
+AM_CXXFLAGS = -Wall -Wno-unknown-pragmas $(FLAG_VISIBILITY_HIDDEN) $(WNO_PARENTHESES) $(WNO_TAUTOLOGICAL_COMPARE) -Wno-unused-function -Wno-unused-variable
 
 # Compile generated C files using C++ compiler
 AM_CFLAGS = $(AM_CXXFLAGS)
index ec445427a2eae2260b96e5f202d944384dd67a7f..bf42e928872beb50499af44db8fcf45fdcab99df 100644 (file)
@@ -1,7 +1,7 @@
 AM_CPPFLAGS = \
        -D__BUILDING_CVC4PARSERLIB \
        -I@builddir@/../.. -I@srcdir@/../../include -I@srcdir@/../.. $(ANTLR_INCLUDES)
-AM_CXXFLAGS = -Wall -Wno-unknown-pragmas $(FLAG_VISIBILITY_HIDDEN) -Wno-unused-function -Wno-unused-variable
+AM_CXXFLAGS = -Wall -Wno-unknown-pragmas $(FLAG_VISIBILITY_HIDDEN) $(WNO_PARENTHESES) $(WNO_TAUTOLOGICAL_COMPARE) -Wno-unused-function -Wno-unused-variable
 
 # Compile generated C files using C++ compiler
 AM_CFLAGS = $(AM_CXXFLAGS)
index 0db7773b2a89ff967f4c11971ccaa3476aaf9cc9..b5ac965e875e87bafb4139ad8aca2759940e3c93 100644 (file)
@@ -1,7 +1,7 @@
 AM_CPPFLAGS = \
        -D__BUILDING_CVC4PARSERLIB \
        -I@builddir@/../.. -I@srcdir@/../../include -I@srcdir@/../.. $(ANTLR_INCLUDES)
-AM_CXXFLAGS = -Wall -Wno-unknown-pragmas $(FLAG_VISIBILITY_HIDDEN) -Wno-unused-function -Wno-unused-variable
+AM_CXXFLAGS = -Wall -Wno-unknown-pragmas $(FLAG_VISIBILITY_HIDDEN) $(WNO_PARENTHESES) $(WNO_TAUTOLOGICAL_COMPARE) -Wno-unused-function -Wno-unused-variable
 
 # Compile generated C files using C++ compiler
 AM_CFLAGS = $(AM_CXXFLAGS)
index 0923848e9d08cf772b6e32f0c34e6d38ec94a344..c3cd488d8f9828a6cf6f946aa18ceebb54e8612a 100644 (file)
@@ -31,6 +31,7 @@ class AstPrinter : public CVC4::Printer {
   void toStream(std::ostream& out, TNode n, int toDepth, bool types) const throw();
   void toStream(std::ostream& out, Model& m, const Command* c) const throw();
 public:
+  using CVC4::Printer::toStream;
   void toStream(std::ostream& out, TNode n, int toDepth, bool types, size_t dag) const throw();
   void toStream(std::ostream& out, const Command* c, int toDepth, bool types, size_t dag) const throw();
   void toStream(std::ostream& out, const CommandStatus* s) const throw();
index 524344612cdc5b37fc5f8edbbdae3c787542ae93..bad05b5c8346582de51e79cb29d6ccd2a4c8eff0 100644 (file)
@@ -24,6 +24,8 @@
 #include "smt/options.h"
 #include "theory/model.h"
 #include "theory/arrays/theory_arrays_rewriter.h"
+#include "printer/dagification_visitor.h"
+#include "util/node_visitor.h"
 
 #include <iostream>
 #include <vector>
index 77d770bb24a74f7222d12e63c8dc8fb6b0e9fe83..71ad947bfa699087f56eb2cc8536621d61dbf8a6 100644 (file)
@@ -22,9 +22,6 @@
 #include <iostream>
 
 #include "printer/printer.h"
-#include "printer/dagification_visitor.h"
-#include "theory/substitutions.h"
-#include "util/node_visitor.h"
 
 namespace CVC4 {
 namespace printer {
@@ -34,6 +31,7 @@ class CvcPrinter : public CVC4::Printer {
   void toStream(std::ostream& out, TNode n, int toDepth, bool types, bool bracket) const throw();
   void toStream(std::ostream& out, Model& m, const Command* c) const throw();
 public:
+  using CVC4::Printer::toStream;
   void toStream(std::ostream& out, TNode n, int toDepth, bool types, size_t dag) const throw();
   void toStream(std::ostream& out, const Command* c, int toDepth, bool types, size_t dag) const throw();
   void toStream(std::ostream& out, const CommandStatus* s) const throw();
index ca19c19c2f0857ce8123c5fe8c9f9decb284a62f..118f6b0283ea6b77871a87aea1d15e07a9f52e2c 100644 (file)
@@ -30,6 +30,7 @@ namespace smt1 {
 class Smt1Printer : public CVC4::Printer {
   void toStream(std::ostream& out, Model& m, const Command* c) const throw();
 public:
+  using CVC4::Printer::toStream;
   void toStream(std::ostream& out, TNode n, int toDepth, bool types, size_t dag) const throw();
   void toStream(std::ostream& out, const Command* c, int toDepth, bool types, size_t dag) const throw();
   void toStream(std::ostream& out, const CommandStatus* s) const throw();
index 32a0c94ba82e54c6c19417b1a1d111628c5ebec1..cf0d06e6c9ee28d97f9e8734d6511f824e309684 100644 (file)
@@ -32,6 +32,7 @@ class Smt2Printer : public CVC4::Printer {
   void toStream(std::ostream& out, Model& m, const Command* c) const throw();
   void toStream(std::ostream& out, Model& m) const throw();
 public:
+  using CVC4::Printer::toStream;
   void toStream(std::ostream& out, TNode n, int toDepth, bool types, size_t dag) const throw();
   void toStream(std::ostream& out, const Command* c, int toDepth, bool types, size_t dag) const throw();
   void toStream(std::ostream& out, const CommandStatus* s) const throw();
index 09d8fcbd4284016320326cce6e4f4ad3d6865f64..2eabdbea399dd9dc947388863adbff8936a48b86 100644 (file)
@@ -304,7 +304,7 @@ Node BooleanTermConverter::rewriteBooleanTermsRec(TNode top, theory::TheoryId pa
     }
   }
 
-  BooleanTermCache::iterator i = d_termCache.find(make_pair<Node, theory::TheoryId>(top, parentTheory));
+  BooleanTermCache::iterator i = d_termCache.find(pair<Node, theory::TheoryId>(top, parentTheory));
   if(i != d_termCache.end()) {
     return (*i).second.isNull() ? Node(top) : (*i).second;
   }
index c53bb8ce57a298bdafe1be3329713f111ce6ce48..c326d95d354f6811ee22ecd7dc751bcb8210d15c 100644 (file)
@@ -2,6 +2,7 @@
 #include "smt/smt_engine.h"
 %}
 
+%ignore CVC4::SmtEngine::setLogic(const char*);
 %ignore CVC4::SmtEngine::getProof;
 %ignore CVC4::stats::getStatisticsRegistry(SmtEngine*);
 %ignore CVC4::smt::beforeSearch(std::string, bool, SmtEngine*);
index 1952108f6c94df995a2b3400de105de79d45bb93..f95382cb16debe986371fda299ad85e926167add 100644 (file)
@@ -119,11 +119,12 @@ EXTRA_DIST = \
        bool.i \
        sexpr.i \
        datatype.i \
+       tuple.i \
+       record.i \
        output.i \
        cardinality.i \
        result.i \
        configuration.i \
-       cvc4_assert.i \
        bitvector.i \
        subrange_bound.i \
        exception.i \
diff --git a/src/util/cvc4_assert.i b/src/util/cvc4_assert.i
deleted file mode 100644 (file)
index 45d7631..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-%{
-#include "util/cvc4_assert.h"
-%}
-
-%rename(CVC4IllegalArgumentException) CVC4::IllegalArgumentException;
-%ignore CVC4::InternalErrorException::InternalErrorException(const char*, const char*, unsigned, const char*, ...);
-
-%include "util/cvc4_assert.h"
index 477035a16863a8279018797c39b23c4fd6e92a35..0b89980f2976e5f1629eb2b08c56499480ec7824 100644 (file)
@@ -570,7 +570,7 @@ public:
  * used for clearly separating different phases of an algorithm,
  * or iterations of a loop, or... etc.
  */
-class IndentedScope {
+class CVC4_PUBLIC IndentedScope {
   CVC4ostream d_out;
 public:
   inline IndentedScope(CVC4ostream out);
index dc524e1855bc971bb693b2f0e000b61bfb437eff..74953ba5374126a0ff6b1b83aa23524907e672bd 100644 (file)
@@ -3,6 +3,7 @@
 %}
 
 %ignore CVC4::null_streambuf;
+%ignore std::streambuf;
 %feature("valuewrapper") std::ostream;
 
 // There are issues with SWIG's attempted wrapping of these variables when
 %ignore CVC4::null_sb;
 %ignore CVC4::null_os;
 %ignore CVC4::DumpOutC::dump_cout;
+%ignore CVC4::CVC4ostream;
 
 %ignore operator<<;
 %ignore on(std::string);
 %ignore isOn(std::string);
 %ignore off(std::string);
 %ignore printf(std::string, const char*, ...);
-%ignore operator()(std::string);
+
+%ignore CVC4::IndentedScope;
+%ignore CVC4::push(CVC4ostream&);
+%ignore CVC4::pop(CVC4ostream&);
 
 %ignore CVC4::ScopedDebug::ScopedDebug(std::string);
 %ignore CVC4::ScopedDebug::ScopedDebug(std::string, bool);
 %ignore CVC4::ScopedTrace::ScopedTrace(std::string);
 %ignore CVC4::ScopedTrace::ScopedTrace(std::string, bool);
 
+%ignore CVC4::WarningC::WarningC(std::ostream*);
+%ignore CVC4::MessageC::MessageC(std::ostream*);
+%ignore CVC4::NoticeC::NoticeC(std::ostream*);
+%ignore CVC4::ChatC::ChatC(std::ostream*);
+%ignore CVC4::TraceC::TraceC(std::ostream*);
+%ignore CVC4::DebugC::DebugC(std::ostream*);
+%ignore CVC4::DumpOutC::DumpOutC(std::ostream*);
+
+%ignore CVC4::WarningC::operator();
+%ignore CVC4::MessageC::operator();
+%ignore CVC4::NoticeC::operator();
+%ignore CVC4::ChatC::operator();
+%ignore CVC4::TraceC::operator();
+%ignore CVC4::DebugC::operator();
+%ignore CVC4::DumpOutC::operator();
+
 %ignore CVC4::WarningC::getStream();
 %ignore CVC4::MessageC::getStream();
 %ignore CVC4::NoticeC::getStream();
@@ -43,7 +64,7 @@
 %ignore operator std::ostream&;
 %ignore operator CVC4ostream;
 
-%rename(get) operator();
+%rename(get) operator ();
 %rename(ok) operator bool;
 
 %include "util/output.h"
index f662178c239e16b279c1d878f03c194bd32593de..2805d2fdf3998abf35c089564ac90a19f57170c0 100644 (file)
@@ -1,5 +1,93 @@
 %{
 #include "util/record.h"
+
+#ifdef SWIGJAVA
+
+#include "bindings/java_iterator_adapter.h"
+#include "bindings/java_stream_adapters.h"
+
+#endif /* SWIGJAVA */
 %}
 
+%rename(equals) CVC4::RecordSelect::operator==(const RecordSelect&) const;
+%ignore CVC4::RecordSelect::operator!=(const RecordSelect&) const;
+
+%rename(equals) CVC4::RecordUpdate::operator==(const RecordUpdate&) const;
+%ignore CVC4::RecordUpdate::operator!=(const RecordUpdate&) const;
+
+%rename(equals) CVC4::Record::operator==(const Record&) const;
+%ignore CVC4::Record::operator!=(const Record&) const;
+%rename(getField) CVC4::Record::operator[](size_t) const;
+
+// These Object arrays are always of two elements, the first is a String and the second a
+// Type.  (On the C++ side, it is a std::pair<std::string, Type>.)
+%typemap(jni) std::pair<std::string, CVC4::Type> "jobjectArray";
+%typemap(jtype) std::pair<std::string, CVC4::Type> "java.lang.Object[]";
+%typemap(jstype) std::pair<std::string, CVC4::Type> "java.lang.Object[]";
+%typemap(javaout) std::pair<std::string, CVC4::Type> { return $jnicall; }
+%typemap(out) std::pair<std::string, CVC4::Type> {
+      $result = jenv->NewObjectArray(2, jenv->FindClass("java/lang/Object"), $null);
+      jenv->SetObjectArrayElement($result, 0, jenv->NewStringUTF($1.first.c_str()));
+      jclass clazz = jenv->FindClass("edu/nyu/acsys/CVC4/Type");
+      jmethodID methodid = jenv->GetMethodID(clazz, "<init>", "(JZ)V");
+      jenv->SetObjectArrayElement($result, 1, jenv->NewObject(clazz, methodid, reinterpret_cast<long>(new CVC4::Type($1.second)), true));
+    };
+
+#ifdef SWIGJAVA
+
+// Instead of Record::begin() and end(), create an
+// iterator() method on the Java side that returns a Java-style
+// Iterator.
+%ignore CVC4::Record::begin() const;
+%ignore CVC4::Record::end() const;
+%extend CVC4::Record {
+  CVC4::Type find(std::string name) const {
+    CVC4::Record::const_iterator i;
+    for(i = $self->begin(); i != $self->end(); ++i) {
+      if((*i).first == name) {
+        return (*i).second;
+      }
+    }
+    return CVC4::Type();
+  }
+
+  CVC4::JavaIteratorAdapter<CVC4::Record> iterator() {
+    return CVC4::JavaIteratorAdapter<CVC4::Record>(*$self);
+  }
+}
+
+// Record is "iterable" on the Java side
+%typemap(javainterfaces) CVC4::Record "java.lang.Iterable<Object[]>";
+
+// the JavaIteratorAdapter should not be public, and implements Iterator
+%typemap(javaclassmodifiers) CVC4::JavaIteratorAdapter<CVC4::Record> "class";
+%typemap(javainterfaces) CVC4::JavaIteratorAdapter<CVC4::Record> "java.util.Iterator<Object[]>";
+// add some functions to the Java side (do it here because there's no way to do these in C++)
+%typemap(javacode) CVC4::JavaIteratorAdapter<CVC4::Record> "
+  public void remove() {
+    throw new java.lang.UnsupportedOperationException();
+  }
+
+  public Object[] next() {
+    if(hasNext()) {
+      return getNext();
+    } else {
+      throw new java.util.NoSuchElementException();
+    }
+  }
+"
+// getNext() just allows C++ iterator access from Java-side next(), make it private
+%javamethodmodifiers CVC4::JavaIteratorAdapter<CVC4::Record>::getNext() "private";
+
+#endif /* SWIGJAVA */
+
 %include "util/record.h"
+
+#ifdef SWIGJAVA
+
+%include "bindings/java_iterator_adapter.h"
+%include "bindings/java_stream_adapters.h"
+
+%template(JavaIteratorAdapter_Record) CVC4::JavaIteratorAdapter<CVC4::Record>;
+
+#endif /* SWIGJAVA */
index 135a83c7e4954142723312fbb25315ceb1ea5174..e9ea83aa103a31adda3c659f9b401e05854e1d4d 100644 (file)
 
 namespace CVC4 {
 
+class CVC4_PUBLIC SExprKeyword {
+  std::string d_str;
+public:
+  SExprKeyword(const std::string& s) : d_str(s) {}
+  const std::string& getString() const { return d_str; }
+};/* class SExpr::Keyword */
+
 /**
  * A simple S-expression. An S-expression is either an atom with a
  * string value, or a list of other S-expressions.
@@ -65,11 +72,7 @@ class CVC4_PUBLIC SExpr {
 
 public:
 
-  class CVC4_PUBLIC Keyword : protected std::string {
-  public:
-    Keyword(const std::string& s) : std::string(s) {}
-    const std::string& getString() const { return *this; }
-  };/* class SExpr::Keyword */
+  typedef SExprKeyword Keyword;
 
   SExpr() :
     d_sexprType(SEXPR_STRING),
index 5d78142f3e676878d2b45366c10192d66871e7d9..4c89c501929a5ad4ba7f23e9c4bfec4566976f38 100644 (file)
   std::string toString() const { return self->getValue(); }
 };/* CVC4::SExpr */
 
+%ignore CVC4::SExpr::SExpr(int);
+%ignore CVC4::SExpr::SExpr(unsigned int);
+%ignore CVC4::SExpr::SExpr(unsigned long);
+%ignore CVC4::SExpr::SExpr(const char*);
+
 %rename(equals) CVC4::SExpr::operator==(const SExpr&) const;
 %ignore CVC4::SExpr::operator!=(const SExpr&) const;
 
index 7f3bbe526b7d558e5019c42f2ad3666372fb246c..bd3a4eeb963390a05845960c1009be3dc2bb6209 100644 (file)
@@ -62,7 +62,7 @@
       jenv->SetObjectArrayElement($result, 0, jenv->NewStringUTF($1.first.c_str()));
       jclass clazz = jenv->FindClass("edu/nyu/acsys/CVC4/SExpr");
       jmethodID methodid = jenv->GetMethodID(clazz, "<init>", "(JZ)V");
-      jenv->SetObjectArrayElement($result, 1, jenv->NewObject(jenv->FindClass("edu/nyu/acsys/CVC4/SExpr"), methodid, reinterpret_cast<long>(new CVC4::SExpr($1.second)), true));
+      jenv->SetObjectArrayElement($result, 1, jenv->NewObject(clazz, methodid, reinterpret_cast<long>(new CVC4::SExpr($1.second)), true));
     };
 
 #endif /* SWIGJAVA */
index d7301d201026d61d0dbe5e048d9ff53b4004bec0..f3de7b51b55e7827a7468eab8b751a3429cba11c 100644 (file)
@@ -2,4 +2,10 @@
 #include "util/tuple.h"
 %}
 
+%rename(equals) CVC4::TupleSelect::operator==(const TupleSelect&) const;
+%ignore CVC4::TupleSelect::operator!=(const TupleSelect&) const;
+
+%rename(equals) CVC4::TupleUpdate::operator==(const TupleUpdate&) const;
+%ignore CVC4::TupleUpdate::operator!=(const TupleUpdate&) const;
+
 %include "util/tuple.h"
diff --git a/src/util/util_model.i b/src/util/util_model.i
deleted file mode 100644 (file)
index 0d1b3bc..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-%{
-#include "util/util_model.h"
-%}
-
-%include "util/util_model.h"