support python3
This commit is contained in:
parent
a8eda03305
commit
b47aeb461b
75
configure
vendored
75
configure
vendored
@ -13311,19 +13311,84 @@ test -n "$PYTHON" || PYTHON=""none""
|
|||||||
else
|
else
|
||||||
PYTHON="$yap_cv_python"
|
PYTHON="$yap_cv_python"
|
||||||
fi
|
fi
|
||||||
PYTHONHOME=`$PYTHON -c'import sys; print sys.prefix'`
|
PYTHONHOME=`$PYTHON -c'import sys; sys.stdout.write(sys.prefix)'`
|
||||||
PYTHONVERSION=`"$PYTHON" -c "import sys; print sys.version[:3]"`
|
PYTHONVERSION=`"$PYTHON" -c "import sys; sys.stdout.write(sys.version[:3])"`
|
||||||
if test -d "$PYTHONHOME/libs"; then
|
if test -d "$PYTHONHOME/libs"; then
|
||||||
PYTHONV=`echo "$PYTHONVERSION"|sed -e 's/\.//g'`
|
PYTHONV=`echo "$PYTHONVERSION"|sed -e 's/\.//g'`
|
||||||
PYTHON_LIBS="-L $PYTHONHOME/libs -lpython$PYTHONV"
|
PYTHON_LIBS="-L $PYTHONHOME/libs"
|
||||||
elif test -d "$PYTHONHOME/lib"; then
|
elif test -d "$PYTHONHOME/lib"; then
|
||||||
PYTHON_LIBS="-L $PYTHONHOME/lib -lpython$PYTHONVERSION"
|
PYTHON_LIBS="-L $PYTHONHOME/lib"
|
||||||
else
|
else
|
||||||
echo "Could not find includes for Python"
|
echo "Could not find libraries for Python"
|
||||||
ENABLE_PYTHON="@# "
|
ENABLE_PYTHON="@# "
|
||||||
fi
|
fi
|
||||||
|
OLIBS=$LIBS
|
||||||
|
LIBS=$PYTHON_LIBS
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing Py_Initialize" >&5
|
||||||
|
$as_echo_n "checking for library containing Py_Initialize... " >&6; }
|
||||||
|
if ${ac_cv_search_Py_Initialize+:} false; then :
|
||||||
|
$as_echo_n "(cached) " >&6
|
||||||
|
else
|
||||||
|
ac_func_search_save_LIBS=$LIBS
|
||||||
|
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
||||||
|
/* end confdefs.h. */
|
||||||
|
|
||||||
|
/* Override any GCC internal prototype to avoid an error.
|
||||||
|
Use char because int might match the return type of a GCC
|
||||||
|
builtin and then its argument prototype would still apply. */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
#endif
|
||||||
|
char Py_Initialize ();
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
return Py_Initialize ();
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
for ac_lib in '' python"$PYTHONVERSION" python"$PYTHONVERSION"m; do
|
||||||
|
if test -z "$ac_lib"; then
|
||||||
|
ac_res="none required"
|
||||||
|
else
|
||||||
|
ac_res=-l$ac_lib
|
||||||
|
LIBS="-l$ac_lib "$OLIBS" $ac_func_search_save_LIBS"
|
||||||
|
fi
|
||||||
|
if ac_fn_c_try_link "$LINENO"; then :
|
||||||
|
ac_cv_search_Py_Initialize=$ac_res
|
||||||
|
fi
|
||||||
|
rm -f core conftest.err conftest.$ac_objext \
|
||||||
|
conftest$ac_exeext
|
||||||
|
if ${ac_cv_search_Py_Initialize+:} false; then :
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if ${ac_cv_search_Py_Initialize+:} false; then :
|
||||||
|
|
||||||
|
else
|
||||||
|
ac_cv_search_Py_Initialize=no
|
||||||
|
fi
|
||||||
|
rm conftest.$ac_ext
|
||||||
|
LIBS=$ac_func_search_save_LIBS
|
||||||
|
fi
|
||||||
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_Py_Initialize" >&5
|
||||||
|
$as_echo "$ac_cv_search_Py_Initialize" >&6; }
|
||||||
|
ac_res=$ac_cv_search_Py_Initialize
|
||||||
|
if test "$ac_res" != no; then :
|
||||||
|
test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
|
||||||
|
|
||||||
|
else
|
||||||
|
echo "Could not find libraries for Python";
|
||||||
|
ENABLE_PYTHON="@# "
|
||||||
|
fi
|
||||||
|
|
||||||
|
PYTHON_LIBS=$LIBS
|
||||||
|
LIBS=$OLIBS
|
||||||
if test -d "$PYTHONHOME/include/python$PYTHONVERSION"; then
|
if test -d "$PYTHONHOME/include/python$PYTHONVERSION"; then
|
||||||
PYTHON_INCLUDES="-I $PYTHONHOME/include/python$PYTHONVERSION"
|
PYTHON_INCLUDES="-I $PYTHONHOME/include/python$PYTHONVERSION"
|
||||||
|
elif test -d "$PYTHONHOME/include/python$PYTHONVERSION"m; then
|
||||||
|
PYTHON_INCLUDES="-I $PYTHONHOME/include/python$PYTHONVERSION"m
|
||||||
elif test -d "$PYTHONHOME/include"; then
|
elif test -d "$PYTHONHOME/include"; then
|
||||||
PYTHON_INCLUDES="-I $PYTHONHOME/include"
|
PYTHON_INCLUDES="-I $PYTHONHOME/include"
|
||||||
else
|
else
|
||||||
|
@ -21,20 +21,28 @@ elif test -e "$srcdir"/packages/python/Makefile.in ; then
|
|||||||
else
|
else
|
||||||
PYTHON="$yap_cv_python"
|
PYTHON="$yap_cv_python"
|
||||||
fi
|
fi
|
||||||
PYTHONHOME=`$PYTHON -c'import sys; print sys.prefix'`
|
PYTHONHOME=`$PYTHON -c'import sys; sys.stdout.write(sys.prefix)'`
|
||||||
PYTHONVERSION=`"$PYTHON" -c "import sys; print sys.version[[:3]]"`
|
PYTHONVERSION=`"$PYTHON" -c "import sys; sys.stdout.write(sys.version[[:3]])"`
|
||||||
if test -d "$PYTHONHOME/libs"; then
|
if test -d "$PYTHONHOME/libs"; then
|
||||||
dnl windows
|
dnl windows
|
||||||
PYTHONV=`echo "$PYTHONVERSION"|sed -e 's/\.//g'`
|
PYTHONV=`echo "$PYTHONVERSION"|sed -e 's/\.//g'`
|
||||||
PYTHON_LIBS="-L $PYTHONHOME/libs -lpython$PYTHONV"
|
PYTHON_LIBS="-L $PYTHONHOME/libs"
|
||||||
elif test -d "$PYTHONHOME/lib"; then
|
elif test -d "$PYTHONHOME/lib"; then
|
||||||
PYTHON_LIBS="-L $PYTHONHOME/lib -lpython$PYTHONVERSION"
|
PYTHON_LIBS="-L $PYTHONHOME/lib"
|
||||||
else
|
else
|
||||||
echo "Could not find includes for Python"
|
echo "Could not find libraries for Python"
|
||||||
ENABLE_PYTHON="@# "
|
ENABLE_PYTHON="@# "
|
||||||
fi
|
fi
|
||||||
|
OLIBS=$LIBS
|
||||||
|
LIBS=$PYTHON_LIBS
|
||||||
|
AC_SEARCH_LIBS(Py_Initialize, [python"$PYTHONVERSION" python"$PYTHONVERSION"m],,[echo "Could not find libraries for Python";
|
||||||
|
ENABLE_PYTHON="@# "],"$OLIBS")
|
||||||
|
PYTHON_LIBS=$LIBS
|
||||||
|
LIBS=$OLIBS
|
||||||
if test -d "$PYTHONHOME/include/python$PYTHONVERSION"; then
|
if test -d "$PYTHONHOME/include/python$PYTHONVERSION"; then
|
||||||
PYTHON_INCLUDES="-I $PYTHONHOME/include/python$PYTHONVERSION"
|
PYTHON_INCLUDES="-I $PYTHONHOME/include/python$PYTHONVERSION"
|
||||||
|
elif test -d "$PYTHONHOME/include/python$PYTHONVERSION"m; then
|
||||||
|
PYTHON_INCLUDES="-I $PYTHONHOME/include/python$PYTHONVERSION"m
|
||||||
elif test -d "$PYTHONHOME/include"; then
|
elif test -d "$PYTHONHOME/include"; then
|
||||||
PYTHON_INCLUDES="-I $PYTHONHOME/include"
|
PYTHON_INCLUDES="-I $PYTHONHOME/include"
|
||||||
else
|
else
|
||||||
|
@ -64,8 +64,10 @@ get_p_int(PyObject *o, Py_ssize_t def) {
|
|||||||
return def;
|
return def;
|
||||||
if (PyLong_Check(o)) {
|
if (PyLong_Check(o)) {
|
||||||
return PyLong_AsLong(o);
|
return PyLong_AsLong(o);
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
} else if (PyInt_Check(o)) {
|
} else if (PyInt_Check(o)) {
|
||||||
return PyInt_AsLong(o);
|
return PyInt_AsLong(o);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return def;
|
return def;
|
||||||
}
|
}
|
||||||
@ -88,7 +90,11 @@ find_obj(PyObject *ob, term_t lhs)
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
if (!ob && !arity) {
|
if (!ob && !arity) {
|
||||||
pName = PyString_FromString(s);
|
#if PY_MAJOR_VERSION<3
|
||||||
|
pName = PyString_FromString(s);
|
||||||
|
#else
|
||||||
|
pName = PyUnicode_FromString(s);
|
||||||
|
#endif
|
||||||
if (pName == NULL) {
|
if (pName == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -238,8 +244,10 @@ bip_float(term_t t)
|
|||||||
pVal = term_to_python(t);
|
pVal = term_to_python(t);
|
||||||
if (PyLong_Check(pVal)) {
|
if (PyLong_Check(pVal)) {
|
||||||
o = PyFloat_FromDouble( PyLong_AsLong(pVal) );
|
o = PyFloat_FromDouble( PyLong_AsLong(pVal) );
|
||||||
|
#if PY_MAJOR_VERSION<3
|
||||||
} else if (PyInt_Check(pVal)) {
|
} else if (PyInt_Check(pVal)) {
|
||||||
o = PyFloat_FromDouble( PyInt_AsLong(pVal) );
|
o = PyFloat_FromDouble( PyInt_AsLong(pVal) );
|
||||||
|
#endif
|
||||||
} else if (PyFloat_Check(pVal)) {
|
} else if (PyFloat_Check(pVal)) {
|
||||||
return pVal;
|
return pVal;
|
||||||
} else
|
} else
|
||||||
@ -256,12 +264,21 @@ bip_int(term_t t)
|
|||||||
if (! PL_get_arg(1, t, t) )
|
if (! PL_get_arg(1, t, t) )
|
||||||
return NULL;
|
return NULL;
|
||||||
pVal = term_to_python(t);
|
pVal = term_to_python(t);
|
||||||
|
#if PY_MAJOR_VERSION<3
|
||||||
if (PyLong_Check(pVal)) {
|
if (PyLong_Check(pVal)) {
|
||||||
o = PyInt_FromLong( PyLong_AsLong(pVal) );
|
o = PyInt_FromLong( PyLong_AsLong(pVal) );
|
||||||
} else if (PyInt_Check(pVal)) {
|
} else if (PyInt_Check(pVal)) {
|
||||||
return pVal;
|
return pVal;
|
||||||
|
#else
|
||||||
|
if (PyLong_Check(pVal)) {
|
||||||
|
return pVal;
|
||||||
|
#endif
|
||||||
} else if (PyFloat_Check(pVal)) {
|
} else if (PyFloat_Check(pVal)) {
|
||||||
|
#if PY_MAJOR_VERSION<3
|
||||||
o = PyInt_FromLong( PyFloat_AsDouble(pVal) );
|
o = PyInt_FromLong( PyFloat_AsDouble(pVal) );
|
||||||
|
#else
|
||||||
|
o = PyLong_FromDouble( PyFloat_AsDouble(pVal) );
|
||||||
|
#endif
|
||||||
} else
|
} else
|
||||||
return NULL;
|
return NULL;
|
||||||
Py_DECREF(pVal);
|
Py_DECREF(pVal);
|
||||||
@ -278,8 +295,10 @@ bip_long(term_t t)
|
|||||||
pVal = term_to_python(t);
|
pVal = term_to_python(t);
|
||||||
if (PyLong_Check(pVal)) {
|
if (PyLong_Check(pVal)) {
|
||||||
return pVal;
|
return pVal;
|
||||||
} else if (PyLong_Check(pVal)) {
|
#if PY_MAJOR_VERSION<3
|
||||||
|
} else if (PyInt_Check(pVal)) {
|
||||||
o = PyLong_FromLong( PyInt_AsLong(pVal) );
|
o = PyLong_FromLong( PyInt_AsLong(pVal) );
|
||||||
|
#endif
|
||||||
} else if (PyFloat_Check(pVal)) {
|
} else if (PyFloat_Check(pVal)) {
|
||||||
o = PyLong_FromLong( PyFloat_AsDouble(pVal) );
|
o = PyLong_FromLong( PyFloat_AsDouble(pVal) );
|
||||||
} else
|
} else
|
||||||
@ -310,10 +329,19 @@ bip_ord(term_t t)
|
|||||||
return NULL;
|
return NULL;
|
||||||
pVal = term_to_python(t);
|
pVal = term_to_python(t);
|
||||||
if (PyUnicode_Check(pVal)) {
|
if (PyUnicode_Check(pVal)) {
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
size = PyUnicode_GET_SIZE(pVal);
|
size = PyUnicode_GET_SIZE(pVal);
|
||||||
|
#else
|
||||||
|
size = PyUnicode_GetLength(pVal);
|
||||||
|
#endif
|
||||||
if (size == 1) {
|
if (size == 1) {
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
long ord = (long)*PyUnicode_AS_UNICODE(pVal);
|
long ord = (long)*PyUnicode_AS_UNICODE(pVal);
|
||||||
return PyInt_FromLong(ord);
|
return PyInt_FromLong(ord);
|
||||||
|
#else
|
||||||
|
Py_UCS4 ord = PyUnicode_ReadChar(pVal, 0);
|
||||||
|
return PyLong_FromLong(ord);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
} else if (PyByteArray_Check(pVal)) {
|
} else if (PyByteArray_Check(pVal)) {
|
||||||
@ -321,6 +349,7 @@ bip_ord(term_t t)
|
|||||||
|
|
||||||
if (s[1])
|
if (s[1])
|
||||||
return NULL;
|
return NULL;
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
return PyInt_FromLong(s[0]);
|
return PyInt_FromLong(s[0]);
|
||||||
} else if (PyString_Check(pVal)) {
|
} else if (PyString_Check(pVal)) {
|
||||||
char *s = PyString_AsString(pVal);
|
char *s = PyString_AsString(pVal);
|
||||||
@ -328,6 +357,9 @@ bip_ord(term_t t)
|
|||||||
if (s[1])
|
if (s[1])
|
||||||
return NULL;
|
return NULL;
|
||||||
return PyInt_FromLong(s[0]);
|
return PyInt_FromLong(s[0]);
|
||||||
|
#else
|
||||||
|
return PyLong_FromLong(s[0]);
|
||||||
|
#endif
|
||||||
} else
|
} else
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -347,12 +379,17 @@ bip_sum(term_t t)
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (result == NULL) {
|
if (result == NULL) {
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
result = PyInt_FromLong(0);
|
result = PyInt_FromLong(0);
|
||||||
|
#else
|
||||||
|
result = PyLong_FromLong(0);
|
||||||
|
#endif
|
||||||
if (result == NULL) {
|
if (result == NULL) {
|
||||||
Py_DECREF(iter);
|
Py_DECREF(iter);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
/* reject string values for 'start' parameter */
|
/* reject string values for 'start' parameter */
|
||||||
if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
|
if (PyObject_TypeCheck(result, &PyBaseString_Type)) {
|
||||||
PyErr_SetString(PyExc_TypeError,
|
PyErr_SetString(PyExc_TypeError,
|
||||||
@ -361,6 +398,7 @@ bip_sum(term_t t)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
Py_INCREF(result);
|
Py_INCREF(result);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef SLOW_SUM
|
#ifndef SLOW_SUM
|
||||||
@ -368,8 +406,13 @@ bip_sum(term_t t)
|
|||||||
Assumes all inputs are the same type. If the assumption fails, default
|
Assumes all inputs are the same type. If the assumption fails, default
|
||||||
to the more general routine.
|
to the more general routine.
|
||||||
*/
|
*/
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
if (PyInt_CheckExact(result)) {
|
if (PyInt_CheckExact(result)) {
|
||||||
long i_result = PyInt_AS_LONG(result);
|
long i_result = PyInt_AS_LONG(result);
|
||||||
|
#else
|
||||||
|
if (PyLong_CheckExact(result)) {
|
||||||
|
long i_result = PyLong_AS_LONG(result);
|
||||||
|
#endif
|
||||||
Py_DECREF(result);
|
Py_DECREF(result);
|
||||||
result = NULL;
|
result = NULL;
|
||||||
while(result == NULL) {
|
while(result == NULL) {
|
||||||
@ -378,10 +421,19 @@ bip_sum(term_t t)
|
|||||||
Py_DECREF(iter);
|
Py_DECREF(iter);
|
||||||
if (PyErr_Occurred())
|
if (PyErr_Occurred())
|
||||||
return NULL;
|
return NULL;
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
return PyInt_FromLong(i_result);
|
return PyInt_FromLong(i_result);
|
||||||
|
#else
|
||||||
|
return PyLong_FromLong(i_result);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
if (PyInt_CheckExact(item)) {
|
if (PyInt_CheckExact(item)) {
|
||||||
long b = PyInt_AS_LONG(item);
|
long b = PyInt_AS_LONG(item);
|
||||||
|
#else
|
||||||
|
if (PyLong_CheckExact(item)) {
|
||||||
|
long b = PyLong_AS_LONG(item);
|
||||||
|
#endif
|
||||||
long x = i_result + b;
|
long x = i_result + b;
|
||||||
if ((x^i_result) >= 0 || (x^b) >= 0) {
|
if ((x^i_result) >= 0 || (x^b) >= 0) {
|
||||||
i_result = x;
|
i_result = x;
|
||||||
@ -390,7 +442,11 @@ bip_sum(term_t t)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Either overflowed or is not an int. Restore real objects and process normally */
|
/* Either overflowed or is not an int. Restore real objects and process normally */
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
result = PyInt_FromLong(i_result);
|
result = PyInt_FromLong(i_result);
|
||||||
|
#else
|
||||||
|
result = PyLong_FromLong(i_result);
|
||||||
|
#endif
|
||||||
temp = PyNumber_Add(result, item);
|
temp = PyNumber_Add(result, item);
|
||||||
Py_DECREF(result);
|
Py_DECREF(result);
|
||||||
Py_DECREF(item);
|
Py_DECREF(item);
|
||||||
@ -421,9 +477,15 @@ bip_sum(term_t t)
|
|||||||
Py_DECREF(item);
|
Py_DECREF(item);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
if (PyInt_CheckExact(item)) {
|
if (PyInt_CheckExact(item)) {
|
||||||
PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
|
PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
|
||||||
f_result += (double)PyInt_AS_LONG(item);
|
f_result += (double)PyInt_AS_LONG(item);
|
||||||
|
#else
|
||||||
|
if (PyLong_CheckExact(item)) {
|
||||||
|
PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
|
||||||
|
f_result += PyLong_AsDouble(item);
|
||||||
|
#endif
|
||||||
PyFPE_END_PROTECT(f_result)
|
PyFPE_END_PROTECT(f_result)
|
||||||
Py_DECREF(item);
|
Py_DECREF(item);
|
||||||
continue;
|
continue;
|
||||||
@ -480,8 +542,10 @@ get_int(term_t arg)
|
|||||||
PyObject *low = term_to_python(arg);
|
PyObject *low = term_to_python(arg);
|
||||||
if (PyLong_Check(low)) {
|
if (PyLong_Check(low)) {
|
||||||
return PyLong_AsLong(low);
|
return PyLong_AsLong(low);
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
} else if (PyInt_Check(low)) {
|
} else if (PyInt_Check(low)) {
|
||||||
return PyInt_AsLong(low);
|
return PyInt_AsLong(low);
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -568,7 +632,11 @@ bip_range(term_t t)
|
|||||||
if (v == NULL)
|
if (v == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
PyObject *w = PyInt_FromLong(ilow);
|
#if PY_MAJOR_VERSION < 3
|
||||||
|
PyObject *w = PyInt_FromLong(ilow);
|
||||||
|
#else
|
||||||
|
PyObject *w = PyLong_FromLong(ilow);
|
||||||
|
#endif
|
||||||
if (w == NULL) {
|
if (w == NULL) {
|
||||||
Py_DECREF(v);
|
Py_DECREF(v);
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -600,20 +668,27 @@ term_to_python(term_t t)
|
|||||||
if (!PL_get_chars(t, &s, REP_UTF8|CVT_ATOM|CVT_STRING|BUF_DISCARDABLE) ) {
|
if (!PL_get_chars(t, &s, REP_UTF8|CVT_ATOM|CVT_STRING|BUF_DISCARDABLE) ) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
if (proper_ascii_string(s)) {
|
if (proper_ascii_string(s)) {
|
||||||
return PyString_FromStringAndSize(s, strlen(s) );
|
return PyString_FromStringAndSize(s, strlen(s) );
|
||||||
} else {
|
} else
|
||||||
PyObject *pobj = PyUnicode_DecodeUTF8(s, strlen(s), NULL);
|
#endif
|
||||||
//fprintf(stderr, "%s\n", s);
|
{
|
||||||
return pobj;
|
PyObject *pobj = PyUnicode_DecodeUTF8(s, strlen(s), NULL);
|
||||||
}
|
//fprintf(stderr, "%s\n", s);
|
||||||
|
return pobj;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
case PL_INTEGER:
|
case PL_INTEGER:
|
||||||
{
|
{
|
||||||
int64_t j;
|
int64_t j;
|
||||||
if (!PL_get_int64_ex(t, &j))
|
if (!PL_get_int64_ex(t, &j))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
return PyInt_FromLong(j);
|
return PyInt_FromLong(j);
|
||||||
|
#else
|
||||||
|
return PyLong_FromLong(j);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
case PL_FLOAT:
|
case PL_FLOAT:
|
||||||
{
|
{
|
||||||
@ -723,8 +798,10 @@ term_to_python(term_t t)
|
|||||||
d1 = PyFloat_AsDouble(lhs);
|
d1 = PyFloat_AsDouble(lhs);
|
||||||
} else if (PyLong_Check(lhs)) {
|
} else if (PyLong_Check(lhs)) {
|
||||||
d1 = PyLong_AsLong(lhs);
|
d1 = PyLong_AsLong(lhs);
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
} else if (PyInt_Check(lhs)) {
|
} else if (PyInt_Check(lhs)) {
|
||||||
d1 = PyInt_AsLong(lhs);
|
d1 = PyInt_AsLong(lhs);
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -737,8 +814,10 @@ term_to_python(term_t t)
|
|||||||
d2 = PyFloat_AsDouble(rhs);
|
d2 = PyFloat_AsDouble(rhs);
|
||||||
} else if (PyLong_Check(rhs)) {
|
} else if (PyLong_Check(rhs)) {
|
||||||
d2 = PyLong_AsLong(rhs);
|
d2 = PyLong_AsLong(rhs);
|
||||||
} else if (PyInt_Check(rhs)) {
|
#if PY_MAJOR_VERSION < 3
|
||||||
|
} else if (PyInt_Check(rhs)) {
|
||||||
d2 = PyInt_AsLong(rhs);
|
d2 = PyInt_AsLong(rhs);
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -814,7 +893,11 @@ term_to_python(term_t t)
|
|||||||
if (! PL_get_arg(2, t, targ) )
|
if (! PL_get_arg(2, t, targ) )
|
||||||
return NULL;
|
return NULL;
|
||||||
rhs = term_to_python(targ);
|
rhs = term_to_python(targ);
|
||||||
if (PySequence_Check(lhs) && (PyInt_Check(rhs) || PyLong_Check(rhs)) ){
|
if (PySequence_Check(lhs) && (
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
|
PyInt_Check(rhs) ||
|
||||||
|
#endif
|
||||||
|
PyLong_Check(rhs)) ){
|
||||||
return PySequence_Repeat(lhs, get_p_int(rhs, 0));
|
return PySequence_Repeat(lhs, get_p_int(rhs, 0));
|
||||||
}
|
}
|
||||||
if (!PyNumber_Check(lhs)+!PyNumber_Check(rhs))
|
if (!PyNumber_Check(lhs)+!PyNumber_Check(rhs))
|
||||||
@ -834,7 +917,13 @@ term_to_python(term_t t)
|
|||||||
rhs = term_to_python(targ);
|
rhs = term_to_python(targ);
|
||||||
if (!PyNumber_Check(rhs))
|
if (!PyNumber_Check(rhs))
|
||||||
return NULL;
|
return NULL;
|
||||||
return PyNumber_Divide(lhs, rhs);
|
#if PY_MAJOR_VERSION < 3
|
||||||
|
return
|
||||||
|
PyNumber_Divide(lhs, rhs);
|
||||||
|
#else
|
||||||
|
return
|
||||||
|
PyNumber_TrueDivide(lhs, rhs);
|
||||||
|
#endif
|
||||||
} else if (fun == FUNCTOR_hat2) {
|
} else if (fun == FUNCTOR_hat2) {
|
||||||
term_t targ = PL_new_term_ref(), trhs = PL_new_term_ref();
|
term_t targ = PL_new_term_ref(), trhs = PL_new_term_ref();
|
||||||
PyObject *lhs, *rhs;
|
PyObject *lhs, *rhs;
|
||||||
@ -1071,8 +1160,10 @@ python_to_term(PyObject *pVal, term_t t)
|
|||||||
}
|
}
|
||||||
} else if (PyLong_Check(pVal)) {
|
} else if (PyLong_Check(pVal)) {
|
||||||
return PL_unify_int64(t, PyLong_AsLong(pVal));
|
return PL_unify_int64(t, PyLong_AsLong(pVal));
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
} else if (PyInt_Check(pVal)) {
|
} else if (PyInt_Check(pVal)) {
|
||||||
return PL_unify_int64(t, PyInt_AsLong(pVal));
|
return PL_unify_int64(t, PyInt_AsLong(pVal));
|
||||||
|
#endif
|
||||||
} else if (PyFloat_Check(pVal)) {
|
} else if (PyFloat_Check(pVal)) {
|
||||||
return PL_unify_float(t, PyFloat_AsDouble(pVal));
|
return PL_unify_float(t, PyFloat_AsDouble(pVal));
|
||||||
} else if (PyComplex_Check(pVal)) {
|
} else if (PyComplex_Check(pVal)) {
|
||||||
@ -1083,21 +1174,28 @@ python_to_term(PyObject *pVal, term_t t)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
return PL_unify(t, to);
|
return PL_unify(t, to);
|
||||||
} else if (PyUnicode_Check(pVal)) {
|
} else if (PyUnicode_Check(pVal)) {
|
||||||
Py_ssize_t sz = PyUnicode_GetSize(pVal)+1;
|
|
||||||
wchar_t *ptr;
|
|
||||||
atom_t tmp_atom;
|
atom_t tmp_atom;
|
||||||
|
|
||||||
ptr = malloc(sizeof(wchar_t)*sz);
|
#if PY_MAJOR_VERSION < 3
|
||||||
|
Py_ssize_t sz = PyUnicode_GetSize(pVal)+1;
|
||||||
|
wchar_t *ptr = malloc(sizeof(wchar_t)*sz);
|
||||||
sz = PyUnicode_AsWideChar((PyUnicodeObject *)pVal, ptr, sz-1);
|
sz = PyUnicode_AsWideChar((PyUnicodeObject *)pVal, ptr, sz-1);
|
||||||
tmp_atom = PL_new_atom_wchars(sz,ptr);
|
#else
|
||||||
|
Py_ssize_t sz = PyUnicode_GetLength(pVal)+1;
|
||||||
|
wchar_t *ptr = malloc(sizeof(wchar_t)*sz);
|
||||||
|
sz = PyUnicode_AsWideChar(pVal, ptr, sz);
|
||||||
|
#endif
|
||||||
|
tmp_atom = PL_new_atom_wchars(sz, ptr);
|
||||||
free(ptr);
|
free(ptr);
|
||||||
return PL_unify_atom(t, tmp_atom);
|
return PL_unify_atom(t, tmp_atom);
|
||||||
} else if (PyByteArray_Check(pVal)) {
|
} else if (PyByteArray_Check(pVal)) {
|
||||||
atom_t tmp_atom = PL_new_atom(PyByteArray_AsString(pVal));
|
atom_t tmp_atom = PL_new_atom(PyByteArray_AsString(pVal));
|
||||||
return PL_unify_atom(t, tmp_atom);
|
return PL_unify_atom(t, tmp_atom);
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
} else if (PyString_Check(pVal)) {
|
} else if (PyString_Check(pVal)) {
|
||||||
atom_t tmp_atom = PL_new_atom(PyString_AsString(pVal));
|
atom_t tmp_atom = PL_new_atom(PyString_AsString(pVal));
|
||||||
return PL_unify_atom(t, tmp_atom);
|
return PL_unify_atom(t, tmp_atom);
|
||||||
|
#endif
|
||||||
} else if (PyTuple_Check(pVal)) {
|
} else if (PyTuple_Check(pVal)) {
|
||||||
Py_ssize_t i, sz = PyTuple_Size(pVal);
|
Py_ssize_t i, sz = PyTuple_Size(pVal);
|
||||||
functor_t f = PL_new_functor(ATOM_t, sz);
|
functor_t f = PL_new_functor(ATOM_t, sz);
|
||||||
@ -1166,7 +1264,11 @@ python_import(term_t mname, term_t mod)
|
|||||||
if ( !PL_get_nchars(mname, &len, &s, CVT_ALL|CVT_EXCEPTION) ) {
|
if ( !PL_get_nchars(mname, &len, &s, CVT_ALL|CVT_EXCEPTION) ) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
pName = PyString_FromString(s);
|
pName = PyString_FromString(s);
|
||||||
|
#else
|
||||||
|
pName = PyUnicode_FromString(s);
|
||||||
|
#endif
|
||||||
if (pName == NULL) {
|
if (pName == NULL) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -1194,7 +1296,11 @@ python_f(term_t tmod, term_t fname, term_t tf)
|
|||||||
if ( !PL_get_nchars(fname, &len, &s, CVT_ALL|CVT_EXCEPTION) ) {
|
if ( !PL_get_nchars(fname, &len, &s, CVT_ALL|CVT_EXCEPTION) ) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
#if PY_MAJOR_VERSION < 3
|
||||||
pName = PyString_FromString(s);
|
pName = PyString_FromString(s);
|
||||||
|
#else
|
||||||
|
pName = PyUnicode_FromString(s);
|
||||||
|
#endif
|
||||||
if (pName == NULL) {
|
if (pName == NULL) {
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user