
Dear all,
following the advice of Kostis, here is something anyone can easily run to try reproducing what seems a rather serious bug in XSB. The files foo.c and foo.H follow:
------------------------------ foo.c ------------------------------ #include <cinterf.h> #include <stdio.h>
xsbBool foo() { prolog_term x = p2p_new(); if (is_var(x) == TRUE) printf("`x' is a variable: fine!\n"); if (c2p_list(x) == TRUE) printf("`c2p_list(x)' succeeded: fine!!\n"); // Hey, how can `x' still be a variable? if (is_var(x) == TRUE) printf("`x' is still a variable!!!\n"); return TRUE; } --------------------------- end of foo.c --------------------------
------------------------------ foo.H ------------------------------ :- export foo/0. --------------------------- end of foo.H --------------------------
Then assume your XSB emulator directory is
/usr/local/lib/xsb/2.5/emu
and run
echo "consult(foo, [cc('gcc'), cc_opts('-I/usr/local/lib/xsb/2.5/emu')]), foo." | xsb
What I see is
[xsb_configuration loaded] [sysinitrc loaded] [packaging loaded]
XSB Version 2.5 (Okocim) of March 11, 2002 [i686-pc-linux-gnu; mode: optimal; engine: slg-wam; gc: indirection; scheduling: local]
| ?- [Compiling Foreign Module ./foo (Prolog compiler options are ignored)] [foo compiled, cpu time used: 0.0000 seconds] [Compiling C file ./foo.c using gcc] In file included from /usr/local/lib/xsb/2.5/emu/export.h:28, from /usr/local/lib/xsb/2.5/emu/cinterf.h:155, from foo.c:1: /usr/local/lib/xsb/2.5/config/i686-pc-linux-gnu/xsb_config.h:275:28: warning: no newline at end of file [foo loaded] `x' is a variable: fine! `c2p_list(x)' succeeded: fine!! `x' is still a variable!!!
yes | ?- End XSB (cputime 0.04 secs, elapsetime 0.16 secs)
The warning given by gcc constitutes a problem in xsb_config.h that is totally unrelated, of course. Please let me know if you need further information. All the best
Roberto