diff --git a/C/agc.c b/C/agc.c index 36816fff8..fd1c2845c 100644 --- a/C/agc.c +++ b/C/agc.c @@ -252,6 +252,10 @@ mark_global_cell(CELL *pt) #else return pt + 3; #endif + case (CELL)FunctorIntArray: + return pt + (4+pt[1]); + case (CELL)FunctorDoubleArray: + return pt + (4+((SIZEOF_DOUBLE -SIZEOF_LONG_INT) + pt[1]*SIZEOF_DOUBLE)/SIZEOF_LONG_INT); #if USE_GMP case (CELL)FunctorBigInt: { diff --git a/C/arith1.c b/C/arith1.c index efdcf8d64..358a2aaf0 100644 --- a/C/arith1.c +++ b/C/arith1.c @@ -44,7 +44,7 @@ float_to_int(Float v, union arith_ret *o) Int i = (Int)v; if (i-v == 0.0) { o->Int = i; - return(long_int_e); + return long_int_e; } else { mpz_init_set_d(o->big, v); return big_int_e; diff --git a/C/cmppreds.c b/C/cmppreds.c index e0432b737..a92c64fec 100644 --- a/C/cmppreds.c +++ b/C/cmppreds.c @@ -334,59 +334,125 @@ compare(Term t1, Term t2) /* compare terms t1 and t2 */ if (IsExtensionFunctor(fun1)) { /* float, long, big, dbref */ - if (IsFloatTerm(t1)) { - if (IsFloatTerm(t2)) - return(rfloat(FloatOfTerm(t1) - FloatOfTerm(t2))); - if (IsRefTerm(t2)) - return 1; - return -1; - } - if (IsLongIntTerm(t1)) { - if (IsIntTerm(t2)) - return LongIntOfTerm(t1) - IntOfTerm(t2); - if (IsFloatTerm(t2)) { - return 1; + switch ((CELL)fun1) { + case double_e: + { + if (IsFloatTerm(t2)) + return(rfloat(FloatOfTerm(t1) - FloatOfTerm(t2))); + if (IsRefTerm(t2)) + return 1; + return -1; } - if (IsLongIntTerm(t2)) - return LongIntOfTerm(t1) - LongIntOfTerm(t2); + case long_int_e: + { + if (IsIntTerm(t2)) + return LongIntOfTerm(t1) - IntOfTerm(t2); + if (IsFloatTerm(t2)) { + return 1; + } + if (IsLongIntTerm(t2)) + return LongIntOfTerm(t1) - LongIntOfTerm(t2); #ifdef USE_GMP - if (IsBigIntTerm(t2)) - return -mpz_cmp_si(Yap_BigIntOfTerm(t2), LongIntOfTerm(t1)); + if (IsBigIntTerm(t2)) + return -mpz_cmp_si(Yap_BigIntOfTerm(t2), LongIntOfTerm(t1)); #endif - if (IsRefTerm(t2)) - return 1; - return -1; - } -#ifdef USE_GMP - if (IsBigIntTerm(t1)) { - if (IsIntTerm(t2)) - return mpz_cmp_si(Yap_BigIntOfTerm(t1), IntOfTerm(t2)); - if (IsFloatTerm(t2)) { - return 1; + if (IsRefTerm(t2)) + return 1; + return -1; + } +#ifdef USE_GMP + case big_int_e: + { + if (IsIntTerm(t2)) + return mpz_cmp_si(Yap_BigIntOfTerm(t1), IntOfTerm(t2)); + if (IsFloatTerm(t2)) { + return 1; + } + if (IsLongIntTerm(t2)) + return mpz_cmp_si(Yap_BigIntOfTerm(t1), LongIntOfTerm(t2)); + if (IsBigIntTerm(t2)) + return mpz_cmp(Yap_BigIntOfTerm(t1), Yap_BigIntOfTerm(t2)); + if (IsRefTerm(t2)) + return 1; + return -1; } - if (IsLongIntTerm(t2)) - return mpz_cmp_si(Yap_BigIntOfTerm(t1), LongIntOfTerm(t2)); - if (IsBigIntTerm(t2)) - return mpz_cmp(Yap_BigIntOfTerm(t1), Yap_BigIntOfTerm(t2)); - if (IsRefTerm(t2)) - return 1; - return -1; - } #endif - if (IsRefTerm(t1)) { + case int_array_e: + { + Functor f2; + + if (!IsApplTerm(t2)) + return 1; + f2 = FunctorOfTerm(t2); + if (f2 == FunctorDoubleArray) { + UInt dim, i; + Int *ar1, *ar2; + + if ((dim = Yap_SizeOfIntArray(t1)) != Yap_SizeOfIntArray(t2)) { + return dim-Yap_SizeOfIntArray(t2); + } + ar1 = Yap_IntArrayOfTerm(t1); + ar2 = Yap_IntArrayOfTerm(t2); + for (i=0;i 0; + } + return 0; + } else if (f2 == FunctorIntArray) { + return -1; + } else + return 1; + } + case double_array_e: + { + Functor f2; + + if (!IsApplTerm(t2)) + return 1; + f2 = FunctorOfTerm(t2); + if (f2 == FunctorDoubleArray) { + UInt dim, i; + Float *ar1, *ar2; + + if ((dim = Yap_SizeOfFloatArray(t1)) != Yap_SizeOfFloatArray(t2)) { + return dim-Yap_SizeOfFloatArray(t2); + } + ar1 = Yap_FloatArrayOfTerm(t1); + ar2 = Yap_FloatArrayOfTerm(t2); + for (i=0;iStrOfAE,"."); + return out; + } return 1; } else { Functor fun2 = FunctorOfTerm(t2); Int r; if (IsExtensionFunctor(fun2)) { + if (fun2 == FunctorDoubleArray || + fun2 == FunctorIntArray) + return -1; return 1; } r = ArityOfFunctor(fun1) - ArityOfFunctor(fun2); @@ -404,7 +470,7 @@ compare(Term t1, Term t2) /* compare terms t1 and t2 */ } } -int Yap_compare_terms(register CELL d0, register CELL d1) +int Yap_compare_terms(CELL d0, CELL d1) { return (compare(Deref(d0),Deref(d1))); } diff --git a/C/compiler.c b/C/compiler.c index 89bee2819..4471f479c 100644 --- a/C/compiler.c +++ b/C/compiler.c @@ -11,8 +11,13 @@ * File: compiler.c * * comments: Clause compiler * * * -* Last rev: $Date: 2006-05-16 18:37:30 $,$Author: vsc $ * +* Last rev: $Date: 2006-05-19 13:48:11 $,$Author: vsc $ * * $Log: not supported by cvs2svn $ +* Revision 1.75 2006/05/16 18:37:30 vsc +* WIN32 fixes +* compiler bug fixes +* extend interface +* * Revision 1.74 2006/04/13 02:04:24 vsc * fix debugging typo * @@ -541,8 +546,14 @@ c_arg(Int argno, Term t, unsigned int arity, unsigned int level, compiler_struct Yap_emit((cglobs->onhead ? (argno == (Int)arity ? unify_last_atom_op : unify_atom_op) : write_atom_op), (CELL) t, Zero, &cglobs->cint); - } - else if (IsIntegerTerm(t) || IsFloatTerm(t) || IsBigIntTerm(t)) { + } else if (Yap_IsIntArrayTerm(t) || Yap_IsFloatArrayTerm(t)) { + Yap_Error_TYPE = TYPE_ERROR_NUMBER; + Yap_Error_Term = t; + Yap_ErrorMessage = Yap_ErrorSay; + sprintf(Yap_ErrorMessage, "compiling array term"); + save_machine_regs(); + longjmp(cglobs->cint.CompilerBotch,1); + } else if (IsIntegerTerm(t) || IsFloatTerm(t) || IsBigIntTerm(t)) { if (!IsIntTerm(t)) { /* we are taking a blob, that is a binary that is supposed to be guarded in the clause itself. Possible examples include diff --git a/C/corout.c b/C/corout.c index f940efb83..8bb1696a8 100644 --- a/C/corout.c +++ b/C/corout.c @@ -198,6 +198,8 @@ static int can_unify_complex(register CELL *pt0, if (IsExtensionFunctor(f)) { switch((CELL)f) { case (CELL)FunctorDBRef: + case (CELL)FunctorIntArray: + case (CELL)FunctorDoubleArray: if (d0 == d1) continue; goto comparison_failed; case (CELL)FunctorLongInt: @@ -337,7 +339,9 @@ can_unify(Term t1, Term t2, Term *Vars) if (IsExtensionFunctor(f)) { switch((CELL)f) { case (CELL)FunctorDBRef: - if (t1 == t2) return(FALSE); + case (CELL)FunctorIntArray: + case (CELL)FunctorDoubleArray: + if (t1 == t2) return FALSE; return FALSE; case (CELL)FunctorLongInt: if (RepAppl(t1)[1] == RepAppl(t2)[1]) return(TRUE); diff --git a/C/dbase.c b/C/dbase.c index 19b991ed0..964763731 100644 --- a/C/dbase.c +++ b/C/dbase.c @@ -663,6 +663,22 @@ copy_double(CELL *st, CELL *pt) return st+(2+SIZEOF_DOUBLE/SIZEOF_LONG_INT); } +static CELL * +copy_int_array(CELL *st, CELL *pt) +{ + UInt sz = SIZEOF_LONG_INT*(pt[1]+4); + memcpy((void *)st, (void *)pt, sz); + return (CELL *)((char *)st+sz); +} + +static CELL * +copy_double_array(CELL *st, CELL *pt) +{ + UInt sz = SIZEOF_LONG_INT*4+SIZEOF_DOUBLE*pt[1]+(SIZEOF_DOUBLE-SIZEOF_LONG_INT); + memcpy((void *)st, (void *)pt, sz); + return (CELL *)((char *)st+sz); +} + #ifdef USE_GMP static CELL * copy_big_int(CELL *st, CELL *pt) @@ -780,9 +796,29 @@ static CELL *MkDBTerm(register CELL *pt0, register CELL *pt0_end, CodeMax = copy_long_int(CodeMax, ap2); ++pt0; continue; + case (CELL)FunctorIntArray: + CheckDBOverflow(4+Yap_SizeOfIntArray(d0)); +#ifdef IDB_USE_MBIT + *StoPoint++ = AbsAppl(CodeMax)|MBIT; +#else + *StoPoint++ = AbsAppl(CodeMax); +#endif + CodeMax = copy_int_array(CodeMax, ap2); + ++pt0; + continue; + case (CELL)FunctorDoubleArray: + CheckDBOverflow(4+Yap_SizeOfFloatArray(d0)); +#ifdef IDB_USE_MBIT + *StoPoint++ = AbsAppl(CodeMax)|MBIT; +#else + *StoPoint++ = AbsAppl(CodeMax); +#endif + CodeMax = copy_double_array(CodeMax, ap2); + ++pt0; + continue; #ifdef USE_GMP case (CELL)FunctorBigInt: - CheckDBOverflow(3); + CheckDBOverflow(2+Yap_SizeOfBigInt(d0)); /* first thing, store a link to the list before we move on */ #ifdef IDB_USE_MBIT *StoPoint++ = AbsAppl(CodeMax)|MBIT; @@ -1523,6 +1559,12 @@ CreateDBStruct(Term Tm, DBProp p, int InFlag, int *pstat, UInt extra_size, struc fun = FunctorOfTerm(Tm); if (IsExtensionFunctor(fun)) { switch((CELL)fun) { + case (CELL)FunctorIntArray: + ntp = copy_int_array(ntp0, RepAppl(Tm)); + break; + case (CELL)FunctorDoubleArray: + ntp = copy_double_array(ntp0, RepAppl(Tm)); + break; case (CELL)FunctorDouble: ntp = copy_double(ntp0, RepAppl(Tm)); break; diff --git a/C/grow.c b/C/grow.c index 437f77640..2df7e6f34 100644 --- a/C/grow.c +++ b/C/grow.c @@ -485,6 +485,18 @@ AdjustGlobal(void) pt += 2; #endif break; + case (CELL)FunctorDoubleArray: + { + Int sz = 3+(SIZEOF_DOUBLE-SIZEOF_LONG_INT)/SIZEOF_LONG_INT+pt[0]; + pt += sz; + } + break; + case (CELL)FunctorIntArray: + { + Int sz = 3+pt[0]; + pt += sz; + } + break; #if USE_GMP case (CELL)FunctorBigInt: { diff --git a/C/heapgc.c b/C/heapgc.c index 9723017b1..731b1ed33 100644 --- a/C/heapgc.c +++ b/C/heapgc.c @@ -1277,6 +1277,43 @@ mark_variable(CELL_PTR current) MARK(next+2); #endif POP_CONTINUATION(); + case (CELL)FunctorIntArray: + MARK(next); + /* size is given by functor + friends */ + if (next < HGEN) { + total_oldies+=4+next[1]; + } + total_marked += 4+next[1]; + { + int i; + for (i = 0; i <= 4+next[1]; i++) { + PUSH_POINTER(next+i); + } +#if GC_NO_TAGS + MARK(next+(3+next[1])); +#endif + } + POP_CONTINUATION(); + case (CELL)FunctorDoubleArray: + MARK(next); + { + UInt sz = 4+next[1]+(SIZEOF_DOUBLE-SIZEOF_LONG_INT); + /* size is given by functor + friends */ + if (next < HGEN) { + total_oldies+=sz; + } + total_marked += sz; + { + int i; + for (i = 0; i <= sz; i++) { + PUSH_POINTER(next+i); + } +#if GC_NO_TAGS + MARK(next+(sz-1)); +#endif + } + } + POP_CONTINUATION(); #ifdef USE_GMP case (CELL)FunctorBigInt: MARK(next); @@ -3025,8 +3062,13 @@ compact_heap(void) ) { /* oops, we found a blob */ int nofcells = (UNMARK_CELL(*current)-EndSpecials) / sizeof(CELL); - CELL *ptr = current - nofcells ; + CELL *ptr; + if (!nofcells) { + /* Arrays */ + nofcells = current[-1]; + } + ptr = current - nofcells; if (MARKED_PTR(ptr)) { #ifdef DEBUG found_marked+=nofcells; @@ -3130,6 +3172,8 @@ compact_heap(void) /* oops, we found a blob */ int nofcells = (uccur-EndSpecials) / sizeof(CELL) , i; + + //FIX THIS *dest++ = current[nofcells-1]; current ++; for (i = 0; i < nofcells-2; i++) { diff --git a/C/inlines.c b/C/inlines.c index 3fb162a15..80c8f05bf 100755 --- a/C/inlines.c +++ b/C/inlines.c @@ -319,6 +319,9 @@ p_eq(void) return (d0 == d1); case (CELL)FunctorLongInt: return(LongIntOfTerm(d0) == LongIntOfTerm(d1)); + case (CELL)FunctorIntArray: + case (CELL)FunctorDoubleArray: + return !Yap_compare_terms(d0,d1); #ifdef USE_GMP case (CELL)FunctorBigInt: return (mpz_cmp(Yap_BigIntOfTerm(d0), Yap_BigIntOfTerm(d1)) == 0); diff --git a/C/other.c b/C/other.c index 76055abc7..aaa8e98da 100644 --- a/C/other.c +++ b/C/other.c @@ -22,6 +22,9 @@ static char SccsId[] = "%W% %G%"; #include "Yap.h" #include "Yatom.h" #include "Heap.h" +#if HAVE_STRING_H +#include +#endif /* exile Yap_standard_regs here, otherwise WIN32 linkers may complain */ REGSTORE Yap_standard_regs; @@ -95,3 +98,43 @@ Yap_MkNewApplTerm(Functor f, unsigned int n) } return (AbsAppl(t)); } + +Term +Yap_MkIntArrayTerm (UInt sz, Int *ptr) +{ + CELL *h0 = H; + + H[0] = (CELL) FunctorLongInt; + H[1] = (CELL) (sz); + memcpy((void *)(H+2), (void *)ptr, sz*sizeof(Int)); + H += sz+2; + H[0] = (CELL) (sz); +#if GC_NO_TAGS + H[1] = EndSpecials; +#else + H[1] = EndSpecials | MBIT; +#endif + H += 2; + return AbsAppl(h0); +} + +Term +Yap_MkFloatArrayTerm (UInt sz, Float *ptr) +{ + CELL *h0 = H; + + H[0] = (CELL) FunctorLongInt; + H[1] = (CELL) (sz); + H[2] = 0; + memcpy((void *)(H+3), (void *)ptr, sz*sizeof(Float)); + H += sz+3; + H[0] = (CELL) (sz); +#if GC_NO_TAGS + H[1] = EndSpecials; +#else + H[1] = EndSpecials | MBIT; +#endif + H += 2; + return AbsAppl(h0); +} + diff --git a/C/unify.c b/C/unify.c index 9a5a3c959..1b5948e19 100644 --- a/C/unify.c +++ b/C/unify.c @@ -227,6 +227,8 @@ OCUnify_complex(register CELL *pt0, register CELL *pt0_end, if (IsExtensionFunctor(f)) { switch((CELL)f) { case (CELL)FunctorDBRef: + case (CELL)FunctorIntArray: + case (CELL)FunctorDoubleArray: if (d0 == d1) continue; goto cufail; case (CELL)FunctorLongInt: @@ -385,6 +387,8 @@ oc_unify_nvar_nvar: if (IsExtensionFunctor((Functor)d0)) { switch(d0) { case (CELL)FunctorDBRef: + case (CELL)FunctorIntArray: + case (CELL)FunctorDoubleArray: return(pt0 == pt1); case (CELL)FunctorLongInt: return(pt0[1] == pt1[1]); @@ -526,6 +530,8 @@ unify_nvar_nvar: if (IsExtensionFunctor((Functor)d0)) { switch(d0) { case (CELL)FunctorDBRef: + case (CELL)FunctorIntArray: + case (CELL)FunctorDoubleArray: return(pt0 == pt1); case (CELL)FunctorLongInt: return(pt0[1] == pt1[1]); diff --git a/C/write.c b/C/write.c index 93c75a8e8..cde3a8aed 100644 --- a/C/write.c +++ b/C/write.c @@ -442,6 +442,8 @@ writeTerm(Term t, int p, int depth, int rinfixarg, struct write_globs *wglb) case (CELL)FunctorDouble: wrputf(FloatOfTerm(t),wglb->writech); return; + case (CELL)FunctorIntArray: + case (CELL)FunctorDoubleArray: case (CELL)FunctorDBRef: wrputref(RefOfTerm(t), wglb->Quote_illegal, wglb->writech); return; diff --git a/H/TermExt.h b/H/TermExt.h index 2082a703e..17ba2e4b9 100644 --- a/H/TermExt.h +++ b/H/TermExt.h @@ -10,7 +10,7 @@ * File: TermExt.h * * mods: * * comments: Extensions to standard terms for YAP * -* version: $Id: TermExt.h,v 1.7 2006-03-03 23:11:03 vsc Exp $ * +* version: $Id: TermExt.h,v 1.8 2006-05-19 13:48:11 vsc Exp $ * *************************************************************************/ #ifdef USE_SYSTEM_MALLOC @@ -41,35 +41,37 @@ #define TermNil MkAtomTerm(AtomNil) #define TermDot MkAtomTerm(AtomDot) +typedef enum +{ #if defined(IN_SECOND_QUADRANT) && !GC_NO_TAGS -typedef enum -{ db_ref_e = sizeof (Functor *) | RBIT, - long_int_e = 2 * sizeof (Functor *) | RBIT, + int_array_e = 2 * sizeof (Functor *) | RBIT, + double_array_e = 3 * sizeof (Functor *) | RBIT, + long_int_e = 4 * sizeof (Functor *) | RBIT, #ifdef USE_GMP - big_int_e = 3 * sizeof (Functor *) | RBIT, - double_e = 4 * sizeof (Functor *) | RBIT + big_int_e = 5 * sizeof (Functor *) | RBIT, + double_e = 6 * sizeof (Functor *) | RBIT #else - double_e = 3 * sizeof (Functor *) | RBIT + double_e = 5 * sizeof (Functor *) | RBIT #endif -} -blob_type; #else -typedef enum -{ db_ref_e = sizeof (Functor *), - long_int_e = 2 * sizeof (Functor *), + int_array_e = 2 * sizeof (Functor *), + double_array_e = 3 * sizeof (Functor *), + long_int_e = 4 * sizeof (Functor *), #ifdef USE_GMP - big_int_e = 3 * sizeof (Functor *), - double_e = 4 * sizeof (Functor *) + big_int_e = 5 * sizeof (Functor *), + double_e = 6 * sizeof (Functor *) #else - double_e = 3 * sizeof (Functor *) + double_e = 5 * sizeof (Functor *) +#endif #endif } blob_type; -#endif #define FunctorDBRef ((Functor)(db_ref_e)) +#define FunctorIntArray ((Functor)(int_array_e)) +#define FunctorDoubleArray ((Functor)(double_array_e)) #define FunctorLongInt ((Functor)(long_int_e)) #ifdef USE_GMP #define FunctorBigInt ((Functor)(big_int_e)) @@ -324,6 +326,58 @@ IsLongIntTerm (Term t) } +Term Yap_MkIntArrayTerm (UInt, Int *); + +inline EXTERN Int *Yap_IntArrayOfTerm (Term t); + +inline EXTERN Int * +Yap_IntArrayOfTerm (Term t) +{ + return (Int *) (RepAppl(t)+2); +} + +inline EXTERN UInt Yap_SizeOfIntArray (Term t); + +inline EXTERN UInt +Yap_SizeOfIntArray (Term t) +{ + return (UInt) (RepAppl(t)[1]); +} + +inline EXTERN int Yap_IsIntArrayTerm (Term); + +inline EXTERN int +Yap_IsIntArrayTerm (Term t) +{ + return (int) (IsApplTerm (t) && FunctorOfTerm (t) == FunctorIntArray); +} + + +Term Yap_MkFloatArrayTerm (UInt, Float *); + +inline EXTERN Float *Yap_FloatArrayOfTerm (Term t); + +inline EXTERN Float * +Yap_FloatArrayOfTerm (Term t) +{ + return (Float *) (RepAppl(t)+2); +} + +inline EXTERN UInt Yap_SizeOfFloatArray (Term t); + +inline EXTERN UInt +Yap_SizeOfFloatArray (Term t) +{ + return (UInt) (RepAppl(t)[1]); +} + +inline EXTERN int Yap_IsFloatArrayTerm (Term); + +inline EXTERN int +Yap_IsFloatArrayTerm (Term t) +{ + return (int) (IsApplTerm (t) && FunctorOfTerm (t) == FunctorDoubleArray); +} #ifdef USE_GMP @@ -363,6 +417,17 @@ IsLargeIntTerm (Term t) } +inline EXTERN UInt Yap_SizeOfBigInt (Term); + +inline EXTERN UInt +Yap_SizeOfBigInt (Term t) +{ + CELL *pt = RepAppl(t)+1; + return 2+(sizeof(MP_INT)+ + (((MP_INT *)pt)->_mp_alloc*sizeof(mp_limb_t)))/sizeof(CELL); +} + + #else @@ -542,6 +607,8 @@ unify_extension (Functor f, CELL d0, CELL * pt0, CELL d1) switch (BlobOfFunctor (f)) { case db_ref_e: + case int_array_e: + case double_array_e: return (d0 == d1); case long_int_e: return (pt0[1] == RepAppl (d1)[1]); diff --git a/LGPL/JPL/jpl.yap b/LGPL/JPL/jpl.yap index b4f9fe186..fcb0c0642 100644 --- a/LGPL/JPL/jpl.yap +++ b/LGPL/JPL/jpl.yap @@ -1,4 +1,4 @@ -/* $Id: jpl.yap,v 1.5 2005-05-25 18:18:00 vsc Exp $ +/* $Id: jpl.yap,v 1.6 2006-05-19 13:48:11 vsc Exp $ Part of JPL -- SWI-Prolog/Java interface @@ -4272,28 +4272,32 @@ report_java_setup_problem(E) :- load_jpl_lib :- jpl_java_home(JavaHome), fetch_arch(Arch), - gen_jvm_lib(JavaHome,Arch,JLib), - load_foreign_files([jpl], [JLib], jpl_install), !. + gen_jvm_lib(JavaHome,Arch,JPL,JLibs), + load_foreign_files(JPL, JLibs, jpl_install), !. fetch_arch(Arch) :- current_prolog_flag(host_type,Name), atom_codes(Name,Codes), gen_arch(Codes,Arch). +gen_arch(L,mac) :- + append(_,[0'd,0'a,0'r,0'w,0'i,0'n|_],L), !. gen_arch([0'x,0'8,0'6,0'_,0'6,0'4|_],amd64). gen_arch([0'i,_,0'8,0'6|_],i386). % take all versions of X86 gen_arch([0's,0'p,0'a,0'r,0'c|_],sparc). +gen_arch([0'/,0'u,0's,0'r|_],mac). -gen_jvm_lib(JavaHome,Arch,JLib) :- +gen_jvm_lib(_,mac,[jpl],[]) :- !. +gen_jvm_lib(JavaHome,Arch,[jpl], [JLib]) :- atom_concat([JavaHome,'/jre/lib/',Arch,'/client/libjvm.so'],JLib), exists(JLib), !. -gen_jvm_lib(JavaHome,Arch,JLib) :- +gen_jvm_lib(JavaHome,Arch,[jpl], [JLib]) :- atom_concat([JavaHome,'/jre/lib/',Arch,'/server/libjvm.so'],JLib), exists(JLib), !. -gen_jvm_lib(JavaHome,Arch,JLib) :- +gen_jvm_lib(JavaHome,Arch,[jpl], [JLib]) :- atom_concat([JavaHome,'/jre/lib/',Arch,'/classic/libjvm.so'],JLib), exists(JLib), !. -gen_jvm_lib(JavaHome,Arch,JLib) :- +gen_jvm_lib(JavaHome,Arch,[jpl], [JLib]) :- atom_concat([JavaHome,'/jre/lib/',Arch,'/libjvm.so'],JLib), exists(JLib), !. diff --git a/LGPL/JPL/src/Makefile.in b/LGPL/JPL/src/Makefile.in index d8323b27e..047b494b4 100644 --- a/LGPL/JPL/src/Makefile.in +++ b/LGPL/JPL/src/Makefile.in @@ -1,8 +1,8 @@ # # JAVA_HOME=@JAVA_HOME@ -JVM_INC = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux -JVM_LIB = -L$(JAVA_HOME)/jre/lib/i386 -L$(JAVA_HOME)/jre/lib/i386/client -ljava -lverify -ljvm +JVM_INC = @JAVAINCPATH@ +JVM_LIB = @JAVALIBPATH@ -ljava -lverify -ljvm # # # diff --git a/LGPL/JPL/src/jpl.c b/LGPL/JPL/src/jpl.c index 44fbfe918..445233c44 100644 --- a/LGPL/JPL/src/jpl.c +++ b/LGPL/JPL/src/jpl.c @@ -1,4 +1,4 @@ -/* $Id: jpl.c,v 1.9 2006-02-01 13:28:56 vsc Exp $ +/* $Id: jpl.c,v 1.10 2006-05-19 13:48:11 vsc Exp $ Part of JPL -- SWI-Prolog/Java interface @@ -608,7 +608,7 @@ JNI_term_to_ref(JNIEnv *env, term_t tp, jobject *J) YAP_Term t = YAP_GetFromSlot(tp); if (YAP_IsAtomTerm(t)) { - char *cp = YAP_AtomName(YAP_AtomOfTerm(t)); + const char *cp = YAP_AtomName(YAP_AtomOfTerm(t)); return ((*J=(*env)->NewStringUTF(env,cp)) != NULL); } else if (YAP_IsApplTerm(t) && YAP_FunctorOfTerm(t) == JNI_functor_at_1) { @@ -630,7 +630,7 @@ JNI_term_to_jobject(JNIEnv *env, term_t tp, jobject *J) YAP_Term t = YAP_GetFromSlot(tp); if (YAP_IsAtomTerm(t)) { - char *cp = YAP_AtomName(YAP_AtomOfTerm(t)); + const char *cp = YAP_AtomName(YAP_AtomOfTerm(t)); return ((*J=(*env)->NewStringUTF(env,cp)) != NULL); } else if (YAP_IsApplTerm(t) && YAP_FunctorOfTerm(t) == JNI_functor_at_1) { @@ -1853,7 +1853,7 @@ jni_supported_jvm_version( static int jni_get_created_jvm_count(void) { - int n; + jint n; return ( JNI_GetCreatedJavaVMs(NULL,0,&n) == 0 // what does the '0' arg mean? ? n @@ -1890,7 +1890,7 @@ jni_create_jvm_c( char cpopt[1000]; JavaVMOption opt[MAX_JVM_OPTIONS]; int r; - int n; + jint n; int optn = 0; DEBUG(1, Sdprintf( "[creating JVM with 'java.class.path=%s']\n", classpath)); @@ -2938,7 +2938,7 @@ jni_func_1_plc( // jlong jl; // " void *p1; // temp for converted (JVM) arg char *c1; // " - int i1; // " + jint i1; // " // jlong l1; // " // double d1; // " jboolean r; // Prolog exit/fail outcome @@ -3078,7 +3078,7 @@ jni_func_2_plc( char *c1; // " char *c2; // " // int i1; // " - int i2; // " + jint i2; // " // jlong l1; // " // jlong l2; // " // double d1; // " @@ -4852,14 +4852,15 @@ Java_jpl_fli_Prolog_reset_1term_1refs( jobject jafter ) { - term_t term; + long term; + if ( jpl_ensure_pvm_init(env) // && jafter != NULL // redundant: getLongValue checks this - && getLongValue(env,jafter,&term) // SWI RM -> oughta be non-null + && getLongValue(env,jafter,&term) // SWI RM -> oughta be non-null ) { - PL_reset_term_refs( term); // void; SWI RM -> "always succeeds" + PL_reset_term_refs( (term_t)term); // void; SWI RM -> "always succeeds" } } diff --git a/Makefile.in b/Makefile.in index 619e5d4e0..24ab54217 100644 --- a/Makefile.in +++ b/Makefile.in @@ -526,8 +526,8 @@ libYap.a: $(LIB_OBJECTS) $(AR) rc libYap.a $(LIB_OBJECTS) $(RANLIB) libYap.a -@IN_UNIX@@DO_SECOND_LD@libYap@SHLIB_SUFFIX@: $(LIB_OBJECTS) -@IN_UNIX@@DO_SECOND_LD@ @SHLIB_LD@ -o libYap@SHLIB_SUFFIX@ $(LIB_OBJECTS) $(LIBS) +@IN_UNIX@@DO_SECOND_LD@@YAPLIB@: $(LIB_OBJECTS) +@IN_UNIX@@DO_SECOND_LD@ @DYNLIB_LD@ -o @YAPLIB@ $(LIB_OBJECTS) $(LIBS) install: install_bin install_data diff --git a/changes-5.1.html b/changes-5.1.html index 93fe73db7..d7e5bf68f 100644 --- a/changes-5.1.html +++ b/changes-5.1.html @@ -28,6 +28,7 @@ allocate up to 3GB).
  • FIXED: compilation bug in arg(X,1,A).
  • NEW: extend interface to pass chunks of integers/floats.
  • FIXED: get rid of some more global variables.
  • +>>>>>>> 1.73
  • NEW: thread_yield/0 (request Paulo Moura).
  • FIXED: current_thread was not returning aliases (obs Paulo Moura).
  • FIXED: AuxSp was not properly initialised for new threads (obs Paulo Moura).
  • diff --git a/configure b/configure index e39f80c7f..2456d3838 100755 --- a/configure +++ b/configure @@ -309,7 +309,7 @@ ac_includes_default="\ # include #endif" -ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT GCC C_INTERF_FLAGS C_PARSER_FLAGS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os LN_S INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA RANLIB ac_ct_RANLIB INDENT ac_ct_INDENT AR ac_ct_AR MPI_CC ac_ct_MPI_CC INSTALL_INFO CPP EGREP M4 M4GENHDRS INSTALL_DLLS MERGE_DLL_OBJS SHLIB_CFLAGS SHLIB_SUFFIX EXEC_SUFFIX DO_SECOND_LD SHLIB_LD YAPLIB YAP_EXTRAS NO_BUILTIN_REGEXP ENABLE_JPL JAVA_HOME JAVAC JAR IN_UNIX YAPMPILIB MPI_OBJS MPI_LIBS INSTALL_COMMAND CROSS_SIMULATOR INSTALLCLP M4GENABSMI LIBOBJS LTLIBOBJS' +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT GCC C_INTERF_FLAGS C_PARSER_FLAGS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os LN_S INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA RANLIB ac_ct_RANLIB INDENT ac_ct_INDENT AR ac_ct_AR MPI_CC ac_ct_MPI_CC INSTALL_INFO CPP EGREP M4 M4GENHDRS INSTALL_DLLS MERGE_DLL_OBJS SHLIB_CFLAGS SHLIB_SUFFIX EXEC_SUFFIX DO_SECOND_LD SHLIB_LD DYNLIB_LD YAPLIB YAP_EXTRAS NO_BUILTIN_REGEXP ENABLE_JPL JAVA_HOME JAVAC JAR IN_UNIX YAPMPILIB MPI_OBJS MPI_LIBS INSTALL_COMMAND CROSS_SIMULATOR INSTALLCLP JAVALIBPATH JAVAINCPATH M4GENABSMI LIBOBJS LTLIBOBJS' ac_subst_files='' # Initialize some variables set by options. @@ -6017,6 +6017,8 @@ fi LDFLAGS="-dynamic $LDFLAGS" ;; *) + JAVALIBPATH="-L$JAVA_HOME/jre/lib/i386 -L$JAVA_HOME/jre/lib/i386/client" + JAVAINCPATH="-I$JAVA_HOME/include -I$JAVA_HOME/include/linux" if test "$CC" != "lcc" then LDFLAGS="-rdynamic $LDFLAGS" @@ -6263,11 +6265,13 @@ fi fi fi SHLIB_CFLAGS="-fno-common" - SHLIB_SUFFIX=".so" + SHLIB_SUFFIX=".dylib" DO_SECOND_LD="" - SHLIB_LD="cc -bundle -flat_namespace -undefined suppress" + SHLIB_LD="gcc -bundle -flat_namespace -undefined suppress" INSTALL_DLLS="" CC="cc -no-cpp-precomp" + JAVALIBPATH="-L/System/Library/Frameworks/JavaVM.framework/Libraries" + JAVAINCPATH="-I/System/Library/Frameworks/JavaVM.framework/Headers" ;; *netbsd*|*freebsd*) if echo __ELF__ | ${CC:-cc} -E - | grep -q __ELF__ @@ -6392,9 +6396,18 @@ esac if test "$dynamic_loading" = "yes" then YAP_EXTRAS="$SHLIB_CFLAGS $YAP_EXTRAS" - YAPLIB=libYap"$SHLIB_SUFFIX" CROSS_SIMULATOR="LD_LIBRARY_PATH=." - LDFLAGS="$LDFLAGS -Wl,-R,$prefix/lib" + case "$target_os" in + *darwin*) + YAPLIB=libYap"$SHLIB_SUFFIX" + DYNLIB_LD="gcc -dynamiclib" + ;; + *) + LDFLAGS="$LDFLAGS -Wl,-R,$prefix/lib" + YAPLIB=libYap"$SHLIB_SUFFIX" + DYNLIB_LD="$SHLIB_LD" + ;; + esac fi if test "$coroutining" = "yes" @@ -12637,6 +12650,10 @@ EXEC_SUFFIX="" + + + + @@ -15218,6 +15235,7 @@ _ACEOF fi +mkdir -p library/matrices mkdir -p library/mpi mkdir -p library/random mkdir -p library/regex @@ -15237,7 +15255,7 @@ mkdir -p LGPL/clp mkdir -p LGPL/clpr mkdir -p LGPL/chr - ac_config_files="$ac_config_files Makefile library/regex/Makefile library/system/Makefile library/random/Makefile library/yap2swi/Makefile library/mpi/Makefile .depend library/Makefile LGPL/chr/Makefile LGPL/chr/chr_swi_bootstrap.yap CLPBN/Makefile LGPL/clp/Makefile LGPL/clpr/Makefile library/Tries/Makefile LGPL/JPL/Makefile LGPL/JPL/src/Makefile LGPL/JPL/java/Makefile LGPL/JPL/jpl_paths.yap" + ac_config_files="$ac_config_files Makefile library/matrices/Makefile library/regex/Makefile library/system/Makefile library/random/Makefile library/yap2swi/Makefile library/mpi/Makefile .depend library/Makefile LGPL/chr/Makefile LGPL/chr/chr_swi_bootstrap.yap CLPBN/Makefile LGPL/clp/Makefile LGPL/clpr/Makefile library/Tries/Makefile LGPL/JPL/Makefile LGPL/JPL/src/Makefile LGPL/JPL/java/Makefile LGPL/JPL/jpl_paths.yap" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure @@ -15320,10 +15338,9 @@ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_i=`echo "$ac_i" | sed 's/\$U\././;s/\.o$//;s/\.obj$//'` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" - ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' done LIBOBJS=$ac_libobjs @@ -15765,6 +15782,7 @@ do case "$ac_config_target" in # Handling of arguments. "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "library/matrices/Makefile" ) CONFIG_FILES="$CONFIG_FILES library/matrices/Makefile" ;; "library/regex/Makefile" ) CONFIG_FILES="$CONFIG_FILES library/regex/Makefile" ;; "library/system/Makefile" ) CONFIG_FILES="$CONFIG_FILES library/system/Makefile" ;; "library/random/Makefile" ) CONFIG_FILES="$CONFIG_FILES library/random/Makefile" ;; @@ -15913,6 +15931,7 @@ s,@SHLIB_SUFFIX@,$SHLIB_SUFFIX,;t t s,@EXEC_SUFFIX@,$EXEC_SUFFIX,;t t s,@DO_SECOND_LD@,$DO_SECOND_LD,;t t s,@SHLIB_LD@,$SHLIB_LD,;t t +s,@DYNLIB_LD@,$DYNLIB_LD,;t t s,@YAPLIB@,$YAPLIB,;t t s,@YAP_EXTRAS@,$YAP_EXTRAS,;t t s,@NO_BUILTIN_REGEXP@,$NO_BUILTIN_REGEXP,;t t @@ -15927,6 +15946,8 @@ s,@MPI_LIBS@,$MPI_LIBS,;t t s,@INSTALL_COMMAND@,$INSTALL_COMMAND,;t t s,@CROSS_SIMULATOR@,$CROSS_SIMULATOR,;t t s,@INSTALLCLP@,$INSTALLCLP,;t t +s,@JAVALIBPATH@,$JAVALIBPATH,;t t +s,@JAVAINCPATH@,$JAVAINCPATH,;t t s,@M4GENABSMI@,$M4GENABSMI,;t t s,@LIBOBJS@,$LIBOBJS,;t t s,@LTLIBOBJS@,$LTLIBOBJS,;t t diff --git a/configure.in b/configure.in index 6440023ef..05fb72826 100644 --- a/configure.in +++ b/configure.in @@ -591,6 +591,8 @@ case "$target_os" in LDFLAGS="-dynamic $LDFLAGS" ;; *) + JAVALIBPATH="-L$JAVA_HOME/jre/lib/i386 -L$JAVA_HOME/jre/lib/i386/client" + JAVAINCPATH="-I$JAVA_HOME/include -I$JAVA_HOME/include/linux" if test "$CC" != "lcc" then LDFLAGS="-rdynamic $LDFLAGS" @@ -692,11 +694,13 @@ dnl Linux has both elf and a.out, in this case we found elf fi fi SHLIB_CFLAGS="-fno-common" - SHLIB_SUFFIX=".so" + SHLIB_SUFFIX=".dylib" DO_SECOND_LD="" - SHLIB_LD="cc -bundle -flat_namespace -undefined suppress" + SHLIB_LD="gcc -bundle -flat_namespace -undefined suppress" INSTALL_DLLS="" CC="cc -no-cpp-precomp" + JAVALIBPATH="-L/System/Library/Frameworks/JavaVM.framework/Libraries" + JAVAINCPATH="-I/System/Library/Frameworks/JavaVM.framework/Headers" ;; *netbsd*|*freebsd*) if echo __ELF__ | ${CC:-cc} -E - | grep -q __ELF__ @@ -754,9 +758,18 @@ esac if test "$dynamic_loading" = "yes" then YAP_EXTRAS="$SHLIB_CFLAGS $YAP_EXTRAS" - YAPLIB=libYap"$SHLIB_SUFFIX" CROSS_SIMULATOR="LD_LIBRARY_PATH=." - LDFLAGS="$LDFLAGS -Wl,-R,$prefix/lib" + case "$target_os" in + *darwin*) + YAPLIB=libYap"$SHLIB_SUFFIX" + DYNLIB_LD="gcc -dynamiclib" + ;; + *) + LDFLAGS="$LDFLAGS -Wl,-R,$prefix/lib" + YAPLIB=libYap"$SHLIB_SUFFIX" + DYNLIB_LD="$SHLIB_LD" + ;; + esac fi if test "$coroutining" = "yes" @@ -945,8 +958,10 @@ AC_SUBST(EXEC_SUFFIX) dnl how to call the loader AC_SUBST(DO_SECOND_LD) AC_SUBST(SHLIB_LD) +AC_SUBST(DYNLIB_LD) dnl objects in YAP library AC_SUBST(YAPLIB) +AC_SUBST(LDFLAGS) dnl install_info AC_SUBST(INSTALL_INFO) dnl let YAP_EXTRAS fall through configure, from the env into Makefile @@ -963,6 +978,8 @@ AC_SUBST(MPI_LIBS) AC_SUBST(INSTALL_COMMAND) AC_SUBST(CROSS_SIMULATOR) AC_SUBST(INSTALLCLP) +AC_SUBST(JAVALIBPATH) +AC_SUBST(JAVAINCPATH) dnl check for threaded code @@ -1231,6 +1248,7 @@ AC_DEFINE(GC_NO_TAGS,1) AC_DEFINE(USE_DL_MALLOC,1) fi +mkdir -p library/matrices mkdir -p library/mpi mkdir -p library/random mkdir -p library/regex @@ -1250,7 +1268,7 @@ mkdir -p LGPL/clp mkdir -p LGPL/clpr mkdir -p LGPL/chr -AC_OUTPUT(Makefile library/regex/Makefile library/system/Makefile library/random/Makefile library/yap2swi/Makefile library/mpi/Makefile .depend library/Makefile LGPL/chr/Makefile LGPL/chr/chr_swi_bootstrap.yap CLPBN/Makefile LGPL/clp/Makefile LGPL/clpr/Makefile library/Tries/Makefile LGPL/JPL/Makefile LGPL/JPL/src/Makefile LGPL/JPL/java/Makefile LGPL/JPL/jpl_paths.yap) +AC_OUTPUT(Makefile library/matrices/Makefile library/regex/Makefile library/system/Makefile library/random/Makefile library/yap2swi/Makefile library/mpi/Makefile .depend library/Makefile LGPL/chr/Makefile LGPL/chr/chr_swi_bootstrap.yap CLPBN/Makefile LGPL/clp/Makefile LGPL/clpr/Makefile library/Tries/Makefile LGPL/JPL/Makefile LGPL/JPL/src/Makefile LGPL/JPL/java/Makefile LGPL/JPL/jpl_paths.yap) make depend diff --git a/library/Makefile.in b/library/Makefile.in index 38cc7e9f7..018c7cbaa 100644 --- a/library/Makefile.in +++ b/library/Makefile.in @@ -36,6 +36,7 @@ PROGRAMS= $(srcdir)/apply_macros.yap \ $(srcdir)/listing.yap \ $(srcdir)/lists.yap \ $(srcdir)/logtalk.yap \ + $(srcdir)/matrices.yap \ $(srcdir)/ordsets.yap \ $(srcdir)/prandom.yap \ $(srcdir)/queues.yap \