diff --git a/C/cdmgr.c b/C/cdmgr.c index 362b438d4..7dea33d2c 100644 --- a/C/cdmgr.c +++ b/C/cdmgr.c @@ -2301,7 +2301,7 @@ Yap_source_line_no( void ) Atom Yap_source_file_name( void ) -{ +{ CACHE_REGS return LOCAL_SourceFileName; } @@ -3688,7 +3688,7 @@ do_toggle_static_predicates_in_use(int mask) do { PredEntry *pe; - + /* check first environments that are younger than our latest choicepoint */ while (b_ptr > (choiceptr)env_ptr) { PredEntry *pe = EnvPreg((yamop *)env_ptr[E_CP]); @@ -4094,8 +4094,7 @@ cl_code_in_pred(PredEntry *pp, yamop *codeptr, CODEADDR *startp, CODEADDR *endp) static Int code_in_pred(PredEntry *pp, Atom *pat, arity_t *parity, yamop *codeptr) { Int out; - - // PELOCK(40,pp); this is deadlocking... + PELOCK(40,pp); /* check if the codeptr comes from the indexing code */ if (pp->PredFlags & IndexedPredFlag) { if (pp->PredFlags & LogUpdatePredFlag) { diff --git a/C/exo.c b/C/exo.c index 7a4531bf4..1689164fb 100755 --- a/C/exo.c +++ b/C/exo.c @@ -732,7 +732,7 @@ bool YAP_AssertTuples( PredEntry *pe, const Term *ts, size_t offset, size_t m) { MegaClause *mcl = ClauseCodeToMegaClause(pe->cs.p_code.FirstClause); - size_t i, n = pe->cs.p_code.NOfClauses; + size_t i; ADDR base = (ADDR)mcl->ClCode+2*sizeof(struct index_t *); for (i=0; iClItemSize)); diff --git a/C/grow.c b/C/grow.c index 77df2341a..a9df620e3 100755 --- a/C/grow.c +++ b/C/grow.c @@ -751,9 +751,10 @@ AdjustScannerStacks(TokEntry **tksp, VarEntry **vep USES_REGS) } break; case Var_tok: - case String_tok: - case WString_tok: - case StringTerm_tok: + case String_tok: + case WString_tok: + case BQString_tok: + case WBQString_tok: if (IsOldTrail(tks->TokInfo)) tks->TokInfo = TrailAdjust(tks->TokInfo); break; diff --git a/C/init.c b/C/init.c index 44e0f9863..007cb8e41 100755 --- a/C/init.c +++ b/C/init.c @@ -979,7 +979,6 @@ InitStdPreds(void) Yap_InitCPreds(); Yap_InitBackCPreds(); BACKUP_MACHINE_REGS(); - Yap_InitYaamRegs( 0 ); Yap_InitPlIO(); Yap_InitFlags(false); #if HAVE_MPE @@ -1335,7 +1334,7 @@ InitCodes(void) modp->PredFlags |= MetaPredFlag; } #ifdef YAPOR - Yap_heap_regs->getwork_code->y_u.Otapl.p = RepPredProp(PredPropByAtom(AtomGetwork, PROLOG_MODULE)); +v Yap_heap_regs->getwork_code->y_u.Otapl.p = RepPredProp(PredPropByAtom(AtomGetwork, PROLOG_MODULE)); Yap_heap_regs->getwork_seq_code->y_u.Otapl.p = RepPredProp(PredPropByAtom(AtomGetworkSeq, PROLOG_MODULE)); #endif /* YAPOR */ @@ -1458,6 +1457,7 @@ Yap_InitWorkspace(UInt Heap, UInt Stack, UInt Trail, UInt Atts, UInt max_table_s GLOBAL_AllowLocalExpansion = TRUE; GLOBAL_AllowTrailExpansion = TRUE; Yap_InitExStacks (0, Trail, Stack); + Yap_InitYaamRegs( 0 ); InitStdPreds(); /* make sure tmp area is available */ { diff --git a/C/parser.c b/C/parser.c index 35994a74b..b48ccd171 100755 --- a/C/parser.c +++ b/C/parser.c @@ -718,36 +718,46 @@ static Term ParseTerm( int prio, JMPBUFF *FailBuff USES_REGS) { NextToken; break; - case String_tok: /* build list on the heap */ - { - Volatile char *p = (char *)LOCAL_tokptr->TokInfo; - t = Yap_CharsToTDQ(p, CurrentModule PASS_REGS); - if (!t) { - FAIL; - } - NextToken; - } break; - - case WString_tok: /* build list on the heap */ - { - Volatile wchar_t *p = (wchar_t *)LOCAL_tokptr->TokInfo; - t = Yap_WCharsToTDQ(p, CurrentModule PASS_REGS); - if (!t) { - FAIL; - } - NextToken; - } break; - - case StringTerm_tok: /* build list on the heap */ -{ - Volatile char *p = (char *)LOCAL_tokptr->TokInfo; - t = Yap_CharsToString(p PASS_REGS); - if (!t) { - FAIL; - } - NextToken; -} break; - + case String_tok: /* build list on the heap */ + { + Volatile char *p = (char *)LOCAL_tokptr->TokInfo; + t = Yap_CharsToTDQ(p, CurrentModule PASS_REGS); + if (!t) { + FAIL; + } + NextToken; + } break; + + case WString_tok: /* build list on the heap */ + { + Volatile wchar_t *p = (wchar_t *)LOCAL_tokptr->TokInfo; + t = Yap_WCharsToTDQ(p, CurrentModule PASS_REGS); + if (!t) { + FAIL; + } + NextToken; + } break; + + case BQString_tok: /* build list on the heap */ + { + Volatile char *p = (char *)LOCAL_tokptr->TokInfo; + t = Yap_CharsToTBQ(p, CurrentModule PASS_REGS); + if (!t) { + FAIL; + } + NextToken; + } break; + + case WBQString_tok: /* build list on the heap */ + { + Volatile wchar_t *p = (wchar_t *)LOCAL_tokptr->TokInfo; + t = Yap_WCharsToTBQ(p, CurrentModule PASS_REGS); + if (!t) { + FAIL; + } + NextToken; + } break; + case Var_tok: varinfo = (VarEntry *)(LOCAL_tokptr->TokInfo); if ((t = varinfo->VarAdr) == TermNil) { diff --git a/C/signals.c b/C/signals.c index 2f149f403..1dfeedea9 100755 --- a/C/signals.c +++ b/C/signals.c @@ -236,8 +236,7 @@ p_creep_fail( USES_REGS1 ) return FALSE; } -static Int -p_stop_creeping( USES_REGS1 ) +static Int stop_creeping( USES_REGS1 ) { get_signal( YAP_CREEP_SIGNAL PASS_REGS ); return TRUE; @@ -452,7 +451,8 @@ Yap_InitSignalCPreds(void) /* Basic predicates for the debugger */ Yap_InitCPred("$creep", 0, p_creep, SafePredFlag); Yap_InitCPred("$creep_fail", 0, p_creep_fail, SafePredFlag); - Yap_InitCPred("$stop_creeping", 0, p_stop_creeping, SafePredFlag); + Yap_InitCPred("$stop_creeping", 0, stop_creeping, NoTracePredFlag|HiddenPredFlag|SafePredFlag); + Yap_InitCPred("$disable_debugging", 0, stop_creeping, NoTracePredFlag|HiddenPredFlag|SafePredFlag); Yap_InitCPred ("$first_signal", 1, p_first_signal, SafePredFlag|SyncPredFlag); Yap_InitCPred ("$continue_signals", 0, p_continue_signals, SafePredFlag|SyncPredFlag); Yap_InitCPred("$creep_allowed", 0, p_creep_allowed, 0); diff --git a/C/tracer.c b/C/tracer.c index 72ed092d9..f182e83ac 100644 --- a/C/tracer.c +++ b/C/tracer.c @@ -94,6 +94,7 @@ check_trail_consistency(void) { } */ +volatile int v; CELL old_value = 0L, old_value2 = 0L; @@ -151,6 +152,7 @@ low_level_trace(yap_low_level_port port, PredEntry *pred, CELL *args) Int arity; /* extern int gc_calls; */ vsc_count++; + if (vsc_count == 12534) jmp_deb( 2 ); #if __ANDROID__ && 0 PredEntry *ap = pred; if (pred && port == enter_pred) { @@ -170,7 +172,7 @@ low_level_trace(yap_low_level_port port, PredEntry *pred, CELL *args) LOCK(Yap_heap_regs->low_level_trace_lock); sc = Yap_heap_regs; //if (vsc_count == 161862) jmp_deb(1); - // fprintf(stderr,"B=%p ", B); + fprintf(stderr,"B=%ld ", LCL0-(CELL*)B); #ifdef THREADS LOCAL_ThreadHandle.thread_inst_count++; #endif diff --git a/C/write.c b/C/write.c index 474848be0..75efc9324 100644 --- a/C/write.c +++ b/C/write.c @@ -83,11 +83,12 @@ typedef struct write_globs { #define lastw wglb->lw #define last_minus wglb->last_atom_minus -static bool callPortray(Term t, struct DB_TERM **old_EXp USES_REGS) { +static bool callPortray(Term t, struct DB_TERM **old_EXp, int sno USES_REGS) { PredEntry *pe; Int b0 = LCL0 - (CELL *)B; EX = NULL; + UNLOCK(GLOBAL_Stream[sno].streamlock); if ((pe = RepPredProp(Yap_GetPredPropByFunc(FunctorPortray, USER_MODULE))) && pe->OpcodeOfPred != FAIL_OPCODE && pe->OpcodeOfPred != UNDEF_OPCODE && Yap_execute_pred(pe, &t, true PASS_REGS)) { @@ -95,8 +96,10 @@ static bool callPortray(Term t, struct DB_TERM **old_EXp USES_REGS) { if (EX && !*old_EXp) *old_EXp = EX; Yap_fail_all(B0 PASS_REGS); + LOCK(GLOBAL_Stream[sno].streamlock); return true; } + LOCK(GLOBAL_Stream[sno].streamlock); if (EX && !*old_EXp) *old_EXp = EX; return false; @@ -903,7 +906,7 @@ static void writeTerm(Term t, int p, int depth, int rinfixarg, return; } if (wglb->Use_portray) - if (callPortray(t, &EX PASS_REGS)) { + if (callPortray(t, &EX, wglb->stream-GLOBAL_Stream PASS_REGS)) { EX = oEX; return; } @@ -977,7 +980,7 @@ static void writeTerm(Term t, int p, int depth, int rinfixarg, } #endif if (wglb->Use_portray) { - if (callPortray(t, &EX PASS_REGS)) { + if (callPortray(t, &EX, wglb->stream-GLOBAL_Stream PASS_REGS)) { EX = oEX; return; }