[PPL-devel] [GIT] ppl/ppl(devel): Common forein language interface for Ciao Prolog updated.
Roberto Bagnara
roberto.bagnara at bugseng.com
Thu Jun 25 11:55:43 CEST 2020
Module: ppl/ppl
Branch: devel
Commit: 7c03fce5f76e423281813c535520c282f7a6345e
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=7c03fce5f76e423281813c535520c282f7a6345e
Author: Roberto Bagnara <roberto.bagnara at bugseng.com>
Date: Thu Jun 25 11:55:22 2020 +0200
Common forein language interface for Ciao Prolog updated.
---
interfaces/Prolog/Ciao/ciao_cfli.hh | 33 ++++++++++++++++++++++++++-------
interfaces/Prolog/Ciao/ciao_efli.cc | 6 +++---
2 files changed, 29 insertions(+), 10 deletions(-)
diff --git a/interfaces/Prolog/Ciao/ciao_cfli.hh b/interfaces/Prolog/Ciao/ciao_cfli.hh
index b4be37f..fcea5dc 100644
--- a/interfaces/Prolog/Ciao/ciao_cfli.hh
+++ b/interfaces/Prolog/Ciao/ciao_cfli.hh
@@ -58,7 +58,7 @@ Prolog_put_term(Prolog_term_ref& t, Prolog_term_ref u) {
*/
inline int
Prolog_put_long(Prolog_term_ref& t, long l) {
- t = ciao_integer(l);
+ t = ciao_mk_c_long(l);
return 1;
}
@@ -68,7 +68,7 @@ Prolog_put_long(Prolog_term_ref& t, long l) {
inline int
Prolog_put_ulong(Prolog_term_ref& t, unsigned long ul) {
if (ul < INT_MAX)
- t = ciao_integer(ul);
+ t = ciao_mk_c_long(ul);
else {
std::ostringstream s;
s << ul;
@@ -99,11 +99,21 @@ Prolog_put_atom(Prolog_term_ref& t, Prolog_atom a) {
}
/*!
+ Assign to \p t the list terminator <CODE>[]</CODE> (which needs not
+ be an atom).
+*/
+inline int
+Prolog_put_nil(Prolog_term_ref& t) {
+ t = ciao_empty_list();
+ return 1;
+}
+
+/*!
Assign to \p t a term representing the address contained in \p p.
*/
inline int
Prolog_put_address(Prolog_term_ref& t, void* p) {
- t = ciao_pointer_to_address(ciao_implicit_state, p);
+ t = ciao_pointer_to_address(ciao_implicit_ctx, p);
return 1;
}
@@ -222,7 +232,7 @@ Prolog_is_integer(Prolog_term_ref t) {
*/
inline int
Prolog_is_address(Prolog_term_ref t) {
- return ciao_is_address(ciao_implicit_state, t);
+ return ciao_is_address(ciao_implicit_ctx, t);
}
/*!
@@ -250,8 +260,8 @@ Prolog_is_cons(Prolog_term_ref t) {
inline int
Prolog_get_long(Prolog_term_ref t, long* lp) {
assert(ciao_is_integer(t));
- if (ciao_fits_in_int(t)) {
- *lp = ciao_to_integer(t);
+ if (ciao_fits_in_c_long(t)) {
+ *lp = ciao_get_c_long(t);
return 1;
}
else {
@@ -275,7 +285,7 @@ Prolog_get_long(Prolog_term_ref t, long* lp) {
inline int
Prolog_get_address(Prolog_term_ref t, void** vpp) {
assert(Prolog_is_address(t));
- *vpp = ciao_address_to_pointer(ciao_implicit_state, t);
+ *vpp = ciao_address_to_pointer(ciao_implicit_ctx, t);
return 1;
}
@@ -317,6 +327,15 @@ Prolog_get_arg(int i, Prolog_term_ref t, Prolog_term_ref& a) {
}
/*!
+ Succeeds if and only if \p t represents the list terminator <CODE>[]</CODE>
+ (which needs not be an atom).
+*/
+inline int
+Prolog_get_nil(Prolog_term_ref t) {
+ return ciao_is_empty_list(t);
+}
+
+/*!
If \p c is a Prolog cons (list constructor), assign its head and
tail to \p h and \p t, respectively.
The behavior is undefined if \p c is not a Prolog cons.
diff --git a/interfaces/Prolog/Ciao/ciao_efli.cc b/interfaces/Prolog/Ciao/ciao_efli.cc
index 7d069ed..daf2957 100644
--- a/interfaces/Prolog/Ciao/ciao_efli.cc
+++ b/interfaces/Prolog/Ciao/ciao_efli.cc
@@ -52,8 +52,8 @@ ppl_Prolog_sysdep_deinit() {
int
Prolog_get_Coefficient(Prolog_term_ref t, Coefficient& n) {
assert(Prolog_is_integer(t));
- if (ciao_fits_in_int(t))
- n = ciao_to_integer(t);
+ if (ciao_fits_in_c_long(t))
+ n = ciao_get_c_long(t);
else {
const char* s = ciao_get_number_chars(t);
n = Coefficient(s);
@@ -68,7 +68,7 @@ Prolog_put_Coefficient(Prolog_term_ref& t, const Coefficient& n) {
int i;
Result r = assign_r(i, n, ROUND_IGNORE);
if (!result_overflow(r))
- t = ciao_integer(i);
+ t = ciao_mk_c_long(i);
else {
std::ostringstream s;
s << n;
More information about the PPL-devel
mailing list