From 5df974b8572f9ae10f10ddfc830bca672b584d37 Mon Sep 17 00:00:00 2001 From: vsc Date: Wed, 10 Oct 2007 09:44:28 +0000 Subject: [PATCH] some more fixes to make YAP swi compatible fix absolute_file_name (again) fix setarg git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1951 b08c6af1-5177-4d33-ba66-4b1c6b8b522a --- C/init.c | 1 + C/mavar.c | 30 +- C/stdpreds.c | 12 +- H/Heap.h | 6 +- H/rheap.h | 6 +- LGPL/chr/chr_compiler_errors.pl | 0 LGPL/chr/chr_integertable_store.pl | 0 changes-5.1.html | 1 + library/Makefile.in | 1 + library/swi.yap | 73 +- library/yap2swi/yap2swi.c | 3028 ++++++++++++++-------------- pl/boot.yap | 4 +- pl/consult.yap | 4 +- 13 files changed, 1630 insertions(+), 1536 deletions(-) create mode 100644 LGPL/chr/chr_compiler_errors.pl create mode 100644 LGPL/chr/chr_integertable_store.pl diff --git a/C/init.c b/C/init.c index ce1e1277c..efec16f27 100644 --- a/C/init.c +++ b/C/init.c @@ -886,6 +886,7 @@ InitCodes(void) Yap_heap_regs->readutil_module = MkAtomTerm(Yap_LookupAtom("readutil")); Yap_heap_regs->hacks_module = MkAtomTerm(Yap_LookupAtom("yap_hacks")); Yap_heap_regs->globals_module = MkAtomTerm(Yap_LookupAtom("nb")); + Yap_heap_regs->swi_module = MkAtomTerm(Yap_LookupAtom("swi")); Yap_InitModules(); #ifdef BEAM Yap_heap_regs->beam_retry_code.opc = Yap_opcode(_retry_eam); diff --git a/C/mavar.c b/C/mavar.c index 82fbd0d17..7acf54ab2 100644 --- a/C/mavar.c +++ b/C/mavar.c @@ -32,11 +32,19 @@ STD_PROTO(static Int p_is_mutable, (void)); static Int p_setarg(void) { - CELL ti = Deref(ARG1), ts = Deref(ARG2); + CELL ti = Deref(ARG1), ts = Deref(ARG2), t3 = Deref(ARG3); Int i; + + if (IsVarTerm(t3) && + VarOfTerm(t3) > H &&VarOfTerm(t3) < ASP) { + /* local variable */ + Term tn = MkVarTerm(); + Bind_Local(VarOfTerm(t3), tn); + t3 = tn; + } if (IsVarTerm(ti)) { Yap_Error(INSTANTIATION_ERROR,ti,"setarg/3"); - return(FALSE); + return FALSE; } else { if (IsIntTerm(ti)) i = IntOfTerm(ti); @@ -46,7 +54,7 @@ p_setarg(void) i = v.Int; } else { Yap_Error(TYPE_ERROR_INTEGER,ti,"setarg/3"); - return(FALSE); + return FALSE; } } } @@ -56,34 +64,34 @@ p_setarg(void) CELL *pt; if (IsExtensionFunctor(FunctorOfTerm(ts))) { Yap_Error(TYPE_ERROR_COMPOUND,ts,"setarg/3"); - return(FALSE); + return FALSE; } if (i < 1 || i > (Int)ArityOfFunctor(FunctorOfTerm(ts))) { if (i<0) Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO,ts,"setarg/3"); - return(FALSE); + return FALSE; if (i==0) Yap_Error(DOMAIN_ERROR_NOT_ZERO,ts,"setarg/3"); - return(FALSE); + return FALSE; } pt = RepAppl(ts)+i; /* the evil deed is to be done now */ - MaBind(pt, Deref(ARG3)); + MaBind(pt, t3); } else if(IsPairTerm(ts)) { CELL *pt; if (i < 1 || i > 2) { if (i<0) Yap_Error(DOMAIN_ERROR_NOT_LESS_THAN_ZERO,ts,"setarg/3"); - return(FALSE); + return FALSE; } pt = RepPair(ts)+i-1; /* the evil deed is to be done now */ - MaBind(pt, Deref(ARG3)); + MaBind(pt, t3); } else { Yap_Error(TYPE_ERROR_COMPOUND,ts,"setarg/3"); - return(FALSE); + return FALSE; } - return(TRUE); + return TRUE; } diff --git a/C/stdpreds.c b/C/stdpreds.c index 8a027152d..7ceb96d15 100644 --- a/C/stdpreds.c +++ b/C/stdpreds.c @@ -11,8 +11,11 @@ * File: stdpreds.c * * comments: General-purpose C implemented system predicates * * * -* Last rev: $Date: 2007-10-08 23:02:15 $,$Author: vsc $ * +* Last rev: $Date: 2007-10-10 09:44:24 $,$Author: vsc $ * * $Log: not supported by cvs2svn $ +* Revision 1.120 2007/10/08 23:02:15 vsc +* minor fixes +* * Revision 1.119 2007/04/18 23:01:16 vsc * fix deadlock when trying to create a module with the same name as a * predicate (for now, just don't lock modules). obs Paulo Moura. @@ -3944,9 +3947,14 @@ Yap_InitCPreds(void) init_sys(); init_random(); // init_tries(); - swi_install(); init_regexp(); #endif + { + Term cm = CurrentModule; + CurrentModule = SWI_MODULE; + swi_install(); + CurrentModule = cm; + } } diff --git a/H/Heap.h b/H/Heap.h index 9a40e066f..d7b0ef29d 100644 --- a/H/Heap.h +++ b/H/Heap.h @@ -10,7 +10,7 @@ * File: Heap.h * * mods: * * comments: Heap Init Structure * -* version: $Id: Heap.h,v 1.117 2007-09-28 23:18:17 vsc Exp $ * +* version: $Id: Heap.h,v 1.118 2007-10-10 09:44:24 vsc Exp $ * *************************************************************************/ /* information that can be stored in Code Space */ @@ -491,7 +491,8 @@ typedef struct various_codes { system_module, readutil_module, hacks_module, - globals_module; + globals_module, + swi_module; void *last_wtime; struct pred_entry *pred_goal_expansion; struct pred_entry *pred_meta_call; @@ -795,6 +796,7 @@ struct various_codes *Yap_heap_regs; #define READUTIL_MODULE Yap_heap_regs->readutil_module #define HACKS_MODULE Yap_heap_regs->hacks_module #define GLOBALS_MODULE Yap_heap_regs->globals_module +#define SWI_MODULE Yap_heap_regs->swi_module #define PredGoalExpansion Yap_heap_regs->pred_goal_expansion #define PredMetaCall Yap_heap_regs->pred_meta_call #define PredDollarCatch Yap_heap_regs->pred_dollar_catch diff --git a/H/rheap.h b/H/rheap.h index d2d3001e6..dda0d023e 100644 --- a/H/rheap.h +++ b/H/rheap.h @@ -11,8 +11,11 @@ * File: rheap.h * * comments: walk through heap code * * * -* Last rev: $Date: 2007-09-28 23:18:17 $,$Author: vsc $ * +* Last rev: $Date: 2007-10-10 09:44:24 $,$Author: vsc $ * * $Log: not supported by cvs2svn $ +* Revision 1.76 2007/09/28 23:18:17 vsc +* handle learning from interpretations. +* * Revision 1.75 2007/04/10 22:13:21 vsc * fix max modules limitation * @@ -690,6 +693,7 @@ restore_codes(void) Yap_heap_regs->system_module = AtomTermAdjust(Yap_heap_regs->system_module); Yap_heap_regs->readutil_module = AtomTermAdjust(Yap_heap_regs->readutil_module); Yap_heap_regs->globals_module = AtomTermAdjust(Yap_heap_regs->globals_module); + Yap_heap_regs->swi_module = AtomTermAdjust(Yap_heap_regs->swi_module); if (Yap_heap_regs->file_aliases != NULL) { Yap_heap_regs->yap_streams = (struct stream_desc *)AddrAdjust((ADDR)Yap_heap_regs->yap_streams); diff --git a/LGPL/chr/chr_compiler_errors.pl b/LGPL/chr/chr_compiler_errors.pl new file mode 100644 index 000000000..e69de29bb diff --git a/LGPL/chr/chr_integertable_store.pl b/LGPL/chr/chr_integertable_store.pl new file mode 100644 index 000000000..e69de29bb diff --git a/changes-5.1.html b/changes-5.1.html index 4be591f37..253f1442f 100644 --- a/changes-5.1.html +++ b/changes-5.1.html @@ -17,6 +17,7 @@

Yap-5.1.3: