From b8e524424cc84cabed08d7e6b0e7aea4d0350ace Mon Sep 17 00:00:00 2001 From: vsc Date: Fri, 3 Mar 2006 23:11:30 +0000 Subject: [PATCH] fix MacOSX interrupt handling fix using Yap files as Yap scripts. git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1555 b08c6af1-5177-4d33-ba66-4b1c6b8b522a --- C/absmi.c | 17 +++---- C/iopreds.c | 2 +- C/scanner.c | 9 +++- H/Regs.h | 16 +++--- H/TermExt.h | 39 ++++++--------- H/absmi.h | 20 +------- changes-5.1.html | 4 ++ docs/yap.tex | 2 +- pl/boot.yap | 24 +-------- pl/consult.yap | 123 +++++++++++++++++++++++++++++------------------ pl/modules.yap | 1 - 11 files changed, 122 insertions(+), 135 deletions(-) diff --git a/C/absmi.c b/C/absmi.c index 13d1552bb..13d088205 100644 --- a/C/absmi.c +++ b/C/absmi.c @@ -10,8 +10,11 @@ * * * File: absmi.c * * comments: Portable abstract machine interpreter * -* Last rev: $Date: 2006-02-01 13:28:56 $,$Author: vsc $ * +* Last rev: $Date: 2006-03-03 23:10:47 $,$Author: vsc $ * * $Log: not supported by cvs2svn $ +* Revision 1.195 2006/02/01 13:28:56 vsc +* bignum support fixes +* * Revision 1.194 2006/01/26 19:13:24 vsc * avoid compilation issues with lack of gmp (Remko Troncon) * @@ -467,10 +470,6 @@ Yap_absmi(int inp) register CELL *HBREG = HB; #endif /* SHADOW_HB */ -#if SHADOW_CrFl - register CELL CFREG = CreepFlag; -#endif /* SHADOW_CP */ - #if SHADOW_Y register CELL *YREG = Yap_REGS.YENV_; #endif /* SHADOW_Y */ @@ -2700,7 +2699,7 @@ Yap_absmi(int inp) is not proceesed by same thread as absmi */ LOCK(SignalLock); if (Yap_PrologMode & (AbortMode|InterruptMode)) { - CFREG = CalculateStackGap(); + CreepFlag = CalculateStackGap(); UNLOCK(SignalLock); /* same instruction */ if (Yap_PrologMode & InterruptMode) { @@ -2766,7 +2765,7 @@ Yap_absmi(int inp) H += 2; LOCK(SignalLock); - CFREG = CalculateStackGap(); + CreepFlag = CalculateStackGap(); #ifdef COROUTINING if (ActiveSignals & YAP_WAKEUP_SIGNAL) { ActiveSignals &= ~YAP_WAKEUP_SIGNAL; @@ -12839,7 +12838,7 @@ Yap_absmi(int inp) setregs_and_ycache(); LOCK(SignalLock); ActiveSignals &= ~YAP_CDOVF_SIGNAL; - CFREG = CalculateStackGap(); + CreepFlag = CalculateStackGap(); UNLOCK(SignalLock); if (!ActiveSignals) { goto execute_after_comma; @@ -12858,7 +12857,7 @@ Yap_absmi(int inp) setregs_and_ycache(); LOCK(SignalLock); ActiveSignals &= ~YAP_TROVF_SIGNAL; - CFREG = CalculateStackGap(); + CreepFlag = CalculateStackGap(); UNLOCK(SignalLock); if (!ActiveSignals) { goto execute_after_comma; diff --git a/C/iopreds.c b/C/iopreds.c index 0ccf89d0f..3638a2646 100644 --- a/C/iopreds.c +++ b/C/iopreds.c @@ -2205,7 +2205,7 @@ SetAlias (Atom arg, int sno) default: break; } -#if HAVE_SETBUF +#if HAVE_SETBUF_COMMENTED_OUT YP_setbuf (Stream[sno].u.file.file, NULL); #endif /* HAVE_SETBUF */ } diff --git a/C/scanner.c b/C/scanner.c index 8782d67f8..82892dc29 100644 --- a/C/scanner.c +++ b/C/scanner.c @@ -798,8 +798,7 @@ Yap_tokenizer(int inp_stream) /* serious error now */ return l; } - if (ASP-H < 1024 || - ((t->TokInfo = get_num(&cha,&cherr,inp_stream,Nxtch,QuotedNxtch,ptr,4096)) == 0L)) { + if (ASP-H < 1024) { Yap_ErrorMessage = "Stack Overflow"; Yap_Error_TYPE = OUT_OF_STACK_ERROR; if (p) @@ -807,6 +806,12 @@ Yap_tokenizer(int inp_stream) /* serious error now */ return l; } + if ((t->TokInfo = get_num(&cha,&cherr,inp_stream,Nxtch,QuotedNxtch,ptr,4096)) == 0L) { + if (p) + p->Tok = Ord(kind = eot_tok); + /* serious error now */ + return l; + } PopScannerMemory(ptr, 4096); ch = cha; if (cherr) { diff --git a/H/Regs.h b/H/Regs.h index 4821ff98d..d2de69bc2 100644 --- a/H/Regs.h +++ b/H/Regs.h @@ -10,7 +10,7 @@ * File: Regs.h * * mods: * * comments: YAP abstract machine registers * -* version: $Id: Regs.h,v 1.36 2006-02-13 16:58:55 vsc Exp $ * +* version: $Id: Regs.h,v 1.37 2006-03-03 23:11:03 vsc Exp $ * *************************************************************************/ @@ -543,10 +543,15 @@ EXTERN inline void restore_TR(void) { restore the global registers :-(. */ +#define CreepFlag Yap_REGS.CreepFlag_ +/* + vsc: this MUST start from register 13, otherwise GCC will break down in flames and + use the registers for evil purposes. :-( + */ #ifndef __svr4__ -register CELL CreepFlag asm ("r13"); +register tr_fr_ptr TR asm ("r13"); #else -register CELL CreepFlag asm ("r21"); +register tr_fr_ptr TR asm ("r21"); #endif register CELL *H asm ("r14"); register CELL *HB asm ("r15"); @@ -554,7 +559,6 @@ register choiceptr B asm ("r16"); register yamop *CP asm ("r17"); register CELL *S asm ("r18"); register CELL *YENV asm ("r19"); -register tr_fr_ptr TR asm ("r20"); #define P Yap_REGS.P_ /* prolog machine program counter */ #undef YENV2MEM @@ -568,7 +572,6 @@ register tr_fr_ptr TR asm ("r20"); EXTERN inline void save_machine_regs(void) { - Yap_REGS.CreepFlag_ = CreepFlag; Yap_REGS.H_ = H; Yap_REGS.HB_ = HB; Yap_REGS.B_ = B; @@ -578,7 +581,6 @@ EXTERN inline void save_machine_regs(void) { } EXTERN inline void restore_machine_regs(void) { - CreepFlag = Yap_REGS.CreepFlag_; H = Yap_REGS.H_; HB = Yap_REGS.HB_; B = Yap_REGS.B_; @@ -591,7 +593,6 @@ EXTERN inline void restore_machine_regs(void) { CELL *BK_H = H; \ CELL *BK_HB = HB; \ choiceptr BK_B = B; \ - CELL BK_CreepFlag = CreepFlag; \ yamop *BK_CP = CP; \ tr_fr_ptr BK_TR = TR; \ restore_machine_regs() @@ -601,7 +602,6 @@ EXTERN inline void restore_machine_regs(void) { H = BK_H; \ HB = BK_HB; \ B = BK_B; \ - CreepFlag = BK_CreepFlag; \ CP = BK_CP; \ TR = BK_TR diff --git a/H/TermExt.h b/H/TermExt.h index 75e91367e..2082a703e 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.6 2006-01-18 15:34:54 vsc Exp $ * +* version: $Id: TermExt.h,v 1.7 2006-03-03 23:11:03 vsc Exp $ * *************************************************************************/ #ifdef USE_SYSTEM_MALLOC @@ -288,33 +288,22 @@ IsFloatTerm (Term t) /* extern Functor FunctorLongInt; */ + +inline EXTERN Term MkLongIntTerm (Int); + +inline EXTERN Term +MkLongIntTerm (Int i) +{ + H[0] = (CELL) FunctorLongInt; + H[1] = (CELL) (i); #if GC_NO_TAGS - -inline EXTERN Term MkLongIntTerm (Int); - -inline EXTERN Term -MkLongIntTerm (Int i) -{ - return (Term) ((H[0] = (CELL) FunctorLongInt, H[1] = (CELL) (i), H[2] = - (2 * sizeof (CELL) + EndSpecials), H += - 3, AbsAppl (H - 3))); -} - - + H[2] = 2 * sizeof (CELL) + EndSpecials; #else - -inline EXTERN Term MkLongIntTerm (Int); - -inline EXTERN Term -MkLongIntTerm (Int i) -{ - return (Term) ((H[0] = (CELL) FunctorLongInt, H[1] = (CELL) (i), H[2] = - ((2 * sizeof (CELL) + EndSpecials) | MBIT), H += - 3, AbsAppl (H - 3))); -} - - + H[2] = ((2 * sizeof (CELL) + EndSpecials) | MBIT); #endif + H += 3; + return AbsAppl(H - 3); +} inline EXTERN Int LongIntOfTerm (Term t); diff --git a/H/absmi.h b/H/absmi.h index a00ef9774..0a233ca58 100644 --- a/H/absmi.h +++ b/H/absmi.h @@ -35,7 +35,6 @@ static char SccsId[] = "%W% %G%"; #define SHADOW_REGS 1 #define SHADOW_CP 1 #define SHADOW_HB 1 -/*#define SHADOW_CrFl 1 Breaks alarm/3 */ #define USE_PREFETCH 1 #endif @@ -621,30 +620,15 @@ typedef CELL label; #define CPREG CP #endif -/* - * Next, CP - */ - /* Breaks alarm/3 */ -#if SHADOW_CrFl -#define set_cf() CFREG = CreepFlag -#define save_cf() CreepFlag = CFREG -#else -#define set_cf() -#define save_cf() -#define CFREG CreepFlag -#endif - /* Say which registers must be saved at register entry and register * exit */ #define setregs() \ - set_cf(); \ set_hb(); \ set_cp(); \ set_pc(); \ set_y() #define saveregs() \ - save_cf(); \ save_hb(); \ save_cp(); \ save_pc(); \ @@ -687,10 +671,10 @@ Macros to check the limits of stacks #if (defined(SBA) && defined(YAPOR)) || defined(TABLING) #define check_stack(Label, GLOB) \ - if ( (Int)(Unsigned(YOUNGEST_CP((choiceptr)ENV_YREG,B_FZ)) - Unsigned(YOUNGEST_H(H_FZ,GLOB))) < CFREG ) goto Label + if ( (Int)(Unsigned(YOUNGEST_CP((choiceptr)ENV_YREG,B_FZ)) - Unsigned(YOUNGEST_H(H_FZ,GLOB))) < CreepFlag ) goto Label #else #define check_stack(Label, GLOB) \ - if ( (Int)(Unsigned(ENV_YREG) - Unsigned(GLOB)) < CFREG ) goto Label + if ( (Int)(Unsigned(ENV_YREG) - Unsigned(GLOB)) < CreepFlag ) goto Label #endif /* SBA && YAPOR */ /*************************************************************** diff --git a/changes-5.1.html b/changes-5.1.html index fb984fbe7..f263436c6 100644 --- a/changes-5.1.html +++ b/changes-5.1.html @@ -16,6 +16,10 @@

Yap-5.1.0: