[PPL-devel] [GIT] ppl/ppl(master): Added support for SWI-Prolog version 5.8 and later.

Roberto Bagnara bagnara at cs.unipr.it
Sat Dec 19 11:47:26 CET 2009


Module: ppl/ppl
Branch: master
Commit: 9784b8165b6cb1dea5eb6d20b4cebca7ecc780fd
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=9784b8165b6cb1dea5eb6d20b4cebca7ecc780fd

Author: Roberto Bagnara <bagnara at cs.unipr.it>
Date:   Sat Dec 19 11:46:22 2009 +0100

Added support for SWI-Prolog version 5.8 and later.

---

 interfaces/Prolog/SWI/swi_cfli.hh |   48 +++++++++++++++++++++++++++++++++++++
 interfaces/Prolog/SWI/swi_efli.cc |    9 ++++++-
 2 files changed, 56 insertions(+), 1 deletions(-)

diff --git a/interfaces/Prolog/SWI/swi_cfli.hh b/interfaces/Prolog/SWI/swi_cfli.hh
index 98d2092..e09fde7 100644
--- a/interfaces/Prolog/SWI/swi_cfli.hh
+++ b/interfaces/Prolog/SWI/swi_cfli.hh
@@ -52,8 +52,12 @@ Prolog_new_term_ref() {
 */
 inline int
 Prolog_put_term(Prolog_term_ref t, Prolog_term_ref u) {
+#if PLVERSION >= 50800
+  return PL_put_term(t, u);
+#else
   PL_put_term(t, u);
   return 1;
+#endif
 }
 
 /*!
@@ -61,8 +65,12 @@ Prolog_put_term(Prolog_term_ref t, Prolog_term_ref u) {
 */
 inline int
 Prolog_put_long(Prolog_term_ref t, long l) {
+#if PLVERSION >= 50800
+  return PL_put_integer(t, l);
+#else
   PL_put_integer(t, l);
   return 1;
+#endif
 }
 
 static int tmp_mpz_t_initialized = 0;
@@ -89,12 +97,20 @@ Prolog_put_big_ulong(Prolog_term_ref t, unsigned long ul) {
 inline int
 Prolog_put_ulong(Prolog_term_ref t, unsigned long ul) {
   if (ul <= LONG_MAX) {
+#if PLVERSION >= 50800
+    return PL_put_integer(t, ul);
+#else
     PL_put_integer(t, ul);
     return 1;
+#endif
   }
   else if (ul <= (uint64_t) INT64_MAX) {
+#if PLVERSION >= 50800
+    return PL_put_int64(t, (int64_t) ul);
+#else
     PL_put_int64(t, (int64_t) ul);
     return 1;
+#endif
   }
   else
     return Prolog_put_big_ulong(t, ul);
@@ -106,8 +122,12 @@ Prolog_put_ulong(Prolog_term_ref t, unsigned long ul) {
 */
 inline int
 Prolog_put_atom_chars(Prolog_term_ref t, const char* s) {
+#if PLVERSION >= 50800
+  return PL_put_atom_chars(t, s);
+#else
   PL_put_atom_chars(t, s);
   return 1;
+#endif
 }
 
 /*!
@@ -115,8 +135,12 @@ Prolog_put_atom_chars(Prolog_term_ref t, const char* s) {
 */
 inline int
 Prolog_put_atom(Prolog_term_ref t, Prolog_atom a) {
+#if PLVERSION >= 50800
+  return PL_put_atom(t, a);
+#else
   PL_put_atom(t, a);
   return 1;
+#endif
 }
 
 /*!
@@ -124,8 +148,12 @@ Prolog_put_atom(Prolog_term_ref t, Prolog_atom a) {
 */
 inline int
 Prolog_put_address(Prolog_term_ref t, void* p) {
+#if PLVERSION >= 50800
+  return PL_put_pointer(t, p);
+#else
   PL_put_pointer(t, p);
   return 1;
+#endif
 }
 
 /*!
@@ -143,8 +171,12 @@ Prolog_atom_from_string(const char* s) {
 inline int
 Prolog_construct_compound(Prolog_term_ref t, Prolog_atom f,
 			  Prolog_term_ref a1) {
+#if PLVERSION >= 50800
+  return PL_cons_functor(t, PL_new_functor(f, 1), a1);
+#else
   PL_cons_functor(t, PL_new_functor(f, 1), a1);
   return 1;
+#endif
 }
 
 /*!
@@ -154,8 +186,12 @@ Prolog_construct_compound(Prolog_term_ref t, Prolog_atom f,
 inline int
 Prolog_construct_compound(Prolog_term_ref t, Prolog_atom f,
 			  Prolog_term_ref a1, Prolog_term_ref a2) {
+#if PLVERSION >= 50800
+  return PL_cons_functor(t, PL_new_functor(f, 2), a1, a2);
+#else
   PL_cons_functor(t, PL_new_functor(f, 2), a1, a2);
   return 1;
+#endif
 }
 
 /*!
@@ -166,8 +202,12 @@ inline int
 Prolog_construct_compound(Prolog_term_ref t, Prolog_atom f,
 			  Prolog_term_ref a1, Prolog_term_ref a2,
 			  Prolog_term_ref a3) {
+#if PLVERSION >= 50800
+  return PL_cons_functor(t, PL_new_functor(f, 3), a1, a2, a3);
+#else
   PL_cons_functor(t, PL_new_functor(f, 3), a1, a2, a3);
   return 1;
+#endif
 }
 
 /*!
@@ -178,8 +218,12 @@ inline int
 Prolog_construct_compound(Prolog_term_ref t, Prolog_atom f,
 			  Prolog_term_ref a1, Prolog_term_ref a2,
 			  Prolog_term_ref a3, Prolog_term_ref a4) {
+#if PLVERSION >= 50800
+  return PL_cons_functor(t, PL_new_functor(f, 4), a1, a2, a3, a4);
+#else
   PL_cons_functor(t, PL_new_functor(f, 4), a1, a2, a3, a4);
   return 1;
+#endif
 }
 
 /*!
@@ -188,8 +232,12 @@ Prolog_construct_compound(Prolog_term_ref t, Prolog_atom f,
 inline int
 Prolog_construct_cons(Prolog_term_ref c,
 		      Prolog_term_ref h, Prolog_term_ref t) {
+#if PLVERSION >= 50800
+  return PL_cons_list(c, h, t);
+#else
   PL_cons_list(c, h, t);
   return 1;
+#endif
 }
 
 /*!
diff --git a/interfaces/Prolog/SWI/swi_efli.cc b/interfaces/Prolog/SWI/swi_efli.cc
index 01b197c..48a569e 100644
--- a/interfaces/Prolog/SWI/swi_efli.cc
+++ b/interfaces/Prolog/SWI/swi_efli.cc
@@ -50,10 +50,17 @@ ppl_Prolog_sysdep_deinit() {
 int
 Prolog_get_Coefficient(Prolog_term_ref t, Coefficient& n) {
   assert(Prolog_is_integer(t));
+  // FIXME: avoid the temporary when Coefficient is mpz_class.
   PPL_DIRTY_TEMP0(mpz_class, tmp);
+  int r;
+#if PLVERSION >= 50800
+  r = PL_get_mpz(t, tmp.get_mpz_t());
+#else
   PL_get_mpz(t, tmp.get_mpz_t());
+  r = 1;
+#endif
   n = tmp;
-  return 1;
+  return r;
 }
 
 int




More information about the PPL-devel mailing list