small fixes
gc improvements WIN32 library fixes git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@18 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
6f3d55651c
commit
47e595a624
38
C/heapgc.c
38
C/heapgc.c
@ -147,6 +147,8 @@ STATIC_PROTO(Int p_gc, (void));
|
||||
|
||||
#ifdef SIMPLE_SHUNTING
|
||||
static choiceptr current_B;
|
||||
|
||||
static tr_fr_ptr sTR;
|
||||
#endif
|
||||
|
||||
STATIC_PROTO(void push_registers, (Int, yamop *));
|
||||
@ -739,6 +741,10 @@ mark_variable(CELL_PTR current)
|
||||
current = next;
|
||||
}
|
||||
}
|
||||
} else if (IsVarTerm(cnext) && UNMARK_CELL(cnext) != (CELL)next) {
|
||||
/* This step is possible because we clean up the trail */
|
||||
*current = UNMARK_CELL(cnext);
|
||||
total_marked--;
|
||||
} else
|
||||
#endif
|
||||
/* what I'd do without variable shunting */
|
||||
@ -1035,7 +1041,6 @@ mark_trail(tr_fr_ptr trail_ptr, tr_fr_ptr trail_base, CELL *gc_H, choiceptr gc_B
|
||||
RESET_VARIABLE(&TrailVal(trail_ptr));
|
||||
#endif
|
||||
#else
|
||||
printf("should be doing early reset\n");
|
||||
/* if I have no early reset I have to follow the trail chain */
|
||||
mark_external_reference(&TrailTerm(trail_ptr));
|
||||
UNMARK(&TrailTerm(trail_ptr));
|
||||
@ -1046,6 +1051,17 @@ mark_trail(tr_fr_ptr trail_ptr, tr_fr_ptr trail_base, CELL *gc_H, choiceptr gc_B
|
||||
The point of doing so is to have dynamic arrays */
|
||||
mark_external_reference(hp);
|
||||
}
|
||||
#ifdef SIMPLE_SHUNTING
|
||||
if (hp < gc_H && hp >= H0) {
|
||||
CELL *cptr = (CELL *)trail_cell;
|
||||
|
||||
TrailTerm(sTR) = *hp;
|
||||
TrailTerm(sTR+1) = trail_cell;
|
||||
sTR += 2;
|
||||
RESET_VARIABLE(cptr);
|
||||
MARK(cptr);
|
||||
}
|
||||
#endif
|
||||
#ifdef FROZEN_REGS
|
||||
mark_external_reference(&TrailVal(trail_ptr));
|
||||
#endif
|
||||
@ -2138,6 +2154,16 @@ compact_heap(void)
|
||||
|
||||
}
|
||||
|
||||
#ifdef SIMPLE_SHUNTING
|
||||
static void
|
||||
set_conditionals(CELL *TRo) {
|
||||
while (sTR != TRo) {
|
||||
CELL *cptr = (CELL *)TrailTerm(sTR-1);
|
||||
*cptr = TrailTerm(sTR-2);
|
||||
sTR -= 2;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
@ -2150,6 +2176,9 @@ marking_phase(tr_fr_ptr old_TR, CELL *current_env, yamop *curp, CELL *max)
|
||||
{
|
||||
|
||||
#ifdef SIMPLE_SHUNTING
|
||||
tr_fr_ptr TRo;
|
||||
sTR = (tr_fr_ptr)PreAllocCodeSpace();
|
||||
TRo = sTR;
|
||||
current_B = B;
|
||||
#endif
|
||||
init_dbtable(old_TR);
|
||||
@ -2162,6 +2191,10 @@ marking_phase(tr_fr_ptr old_TR, CELL *current_env, yamop *curp, CELL *max)
|
||||
/* active environments */
|
||||
mark_environments(current_env, EnvSize(curp), EnvBMap((CELL *)curp));
|
||||
mark_choicepoints(B, old_TR); /* choicepoints, and environs */
|
||||
#ifdef SIMPLE_SHUNTING
|
||||
set_conditionals(TRo);
|
||||
ReleasePreAllocCodeSpace((ADDR)sTR);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef COROUTINING
|
||||
@ -2244,6 +2277,9 @@ do_gc(Int predarity, CELL *current_env, yamop *nextop)
|
||||
YP_fprintf(YP_stderr, "[gc]\n");
|
||||
} else if (gc_verbose) {
|
||||
YP_fprintf(YP_stderr, "[GC] Start of garbage collection %d:\n", gc_calls);
|
||||
#ifndef EARLY_RESET
|
||||
YP_fprintf(YP_stderr, "[GC] no early reset in trail\n");
|
||||
#endif
|
||||
YP_fprintf(YP_stderr, "[GC] Global: %8ld cells (%p-%p)\n", (long int)heap_cells,H0,H);
|
||||
YP_fprintf(YP_stderr, "[GC] Local:%8ld cells (%p-%p)\n", (unsigned long int)(LCL0-ASP),LCL0,ASP);
|
||||
YP_fprintf(YP_stderr, "[GC] Trail:%8ld cells (%p-%p)\n",
|
||||
|
@ -467,8 +467,8 @@ install_mingw32:
|
||||
$(INSTALL) $(srcdir)/include/c_interface.h $(DESTDIR)$(INCLUDEDIR)/c_interface.h
|
||||
$(INSTALL) config.h $(INCLUDEDIR)/config.h
|
||||
(cd $(srcdir) ; tar cf - library) | (cd $(DESTDIR)$(YAPLIBDIR) ; tar xf -)
|
||||
$(INSTALL_DATA) $(srcdir)/LGPL/icon_address.pl $(DESTDIR)$(YAPLIBDIR)/library
|
||||
$(INSTALL_DATA) $(srcdir)/LGPL/pillow.pl $(DESTDIR)$(YAPLIBDIR)/library
|
||||
$(INSTALL_DATA) $(srcdir)/LGPL/pillow/icon_address.pl $(DESTDIR)$(YAPLIBDIR)/library
|
||||
$(INSTALL_DATA) $(srcdir)/LGPL/pillow/pillow.pl $(DESTDIR)$(YAPLIBDIR)/library
|
||||
(cd $(srcdir)/CLPQR ; tar cf - .) | (cd $(DESTDIR)$(YAPLIBDIR)/library ; tar xf -)
|
||||
(cd $(srcdir)/CHR ; tar cf - .) | (cd $(DESTDIR)$(YAPLIBDIR)/library ; tar xf -)
|
||||
(cd library/regex; make install_mingw32)
|
||||
|
@ -6,6 +6,9 @@
|
||||
|
||||
<H2 ALIGN=CENTER>Yap-4.3.19:</H2>
|
||||
<UL>
|
||||
<LI> FIXED: change first two arguments of add_vertices/3 for
|
||||
SICStus compatibility (report from Nicos Angelopoulos).
|
||||
<LI> NEW: sum_list/2 (request from Nicos Angelopoulos).
|
||||
<LI> FIXED: ord_union/2 should not use use merge/3 but instead
|
||||
ord_union/3 (report from Nicos Angelopoulos).
|
||||
<LI> FIXED: statistics/0 should report to user_error (report from Nicos
|
||||
@ -13,7 +16,7 @@
|
||||
<LI> FIXED: database could copy compiled floats,longs, and bigs
|
||||
to Heap, later crashing the garbage collector (report from Nicos
|
||||
Angelopoulos).
|
||||
<LI> NEW: if/3.
|
||||
<LI> NEW: if/3 (request from Nicos Angelopoulos)..
|
||||
<LI> SPEEDUP: inline functor(S) -> Na,Ar.
|
||||
<LI> SPEEDUP: inline functor(Na,Ar) -> S.
|
||||
<LI> FIXED: pillow installation path.
|
||||
|
31
docs/yap.tex
31
docs/yap.tex
@ -4601,7 +4601,7 @@ currently defined atoms by backtracking.
|
||||
@cyindex current_predicate/1
|
||||
@var{F} is the predicate indicator for a currently defined user or
|
||||
library predicate. @var{F} is of the form @var{Na/Ar}, where the atom
|
||||
@var{A} is the name of the predicate, and @var{Ar} its arity.
|
||||
@var{Na} is the name of the predicate, and @var{Ar} its arity.
|
||||
|
||||
@item current_predicate(@var{A},@var{P})
|
||||
@findex current_predicate/2
|
||||
@ -6524,11 +6524,19 @@ True when both @code{append(_,Sublist,S)} and @code{append(S,_,List)} hold.
|
||||
@cnindex suffix/2
|
||||
Holds when @code{append(_,Suffix,List)} holds.
|
||||
|
||||
@item sum_list(?@var{Numbers}, ?@var{Total})
|
||||
@findex sum_list/2
|
||||
@snindex sum_list/2
|
||||
@cnindex sum_list/2
|
||||
True when @var{Numbers} is a list of integers, and @var{Total} is their sum.
|
||||
|
||||
@item sumlist(?@var{Numbers}, ?@var{Total})
|
||||
@findex sumlist/2
|
||||
@syindex sumlist/2
|
||||
@cnindex sumlist/2
|
||||
True when @var{Numbers} is a list of integers, and @var{Total} is their sum.
|
||||
True when @var{Numbers} is a list of integers, and @var{Total} is their
|
||||
sum. The same as @code{sum_list/2}, please do use @code{sum_list/2}
|
||||
instead.
|
||||
|
||||
@end table
|
||||
|
||||
@ -6581,10 +6589,10 @@ Removing @var{Element} from @var{Set1} returns @var{Set2}.
|
||||
@cnindex ord_disjoint/2
|
||||
Holds when the two ordered sets have no element in common.
|
||||
|
||||
@item ord_element(+@var{Element}, +@var{Set})
|
||||
@findex ord_element/2
|
||||
@syindex ord_element/2
|
||||
@cnindex ord_element/2
|
||||
@item ord_member(+@var{Element}, +@var{Set})
|
||||
@findex ord_member/2
|
||||
@syindex ord_member/2
|
||||
@cnindex ord_member/2
|
||||
Holds when @var{Element} is a member of @var{Set}.
|
||||
|
||||
@item ord_insert(+@var{Set1}, +@var{Element}, ?@var{Set2})
|
||||
@ -7425,16 +7433,17 @@ Unify @var{Edges} with all edges appearing in graph
|
||||
L = [1,2,3,4,5]
|
||||
@end example
|
||||
|
||||
@item add_vertices(+@var{Vertices}, +@var{Graph}, -@var{NewGraph})
|
||||
@item add_vertices(+@var{Graph}, +@var{Vertices}, -@var{NewGraph})
|
||||
@findex add_vertices/3
|
||||
@syindex add_vertices/3
|
||||
@cnindex add_vertices/3
|
||||
Unify @var{NewGraph} with a new graph obtained by adding the list of
|
||||
vertices @var{Vertices} to the graph @var{Graph}. In the next example:
|
||||
@example
|
||||
?- add_vertices([0,2,9,10,11],
|
||||
[1-[3,5],2-[4],3-[],4-[5],
|
||||
5-[],6-[],7-[],8-[]], NG).
|
||||
?- add_vertices([1-[3,5],2-[4],3-[],4-[5],
|
||||
5-[],6-[],7-[],8-[]],
|
||||
[0,2,9,10,11],
|
||||
NG).
|
||||
|
||||
NG = [0-[],1-[3,5],2-[4],3-[],4-[5],5-[],
|
||||
6-[],7-[],8-[],9-[],10-[],11-[]]
|
||||
@ -9189,7 +9198,7 @@ SICStus. In order to keep the users of the eval-quote variant happy, we
|
||||
provide a source transformation package. It is activated via:
|
||||
|
||||
@example
|
||||
| ?- use.module(library('clpqr/expand')).
|
||||
| ?- use_module(library('clpqr/expand')).
|
||||
@end example
|
||||
|
||||
Loading the package puts you in a mode where the arithmetic functors
|
||||
|
@ -22,6 +22,7 @@
|
||||
select/3,
|
||||
sublist/2,
|
||||
substitute/4,
|
||||
sum_list/2,
|
||||
suffix/2,
|
||||
sumlist/2,
|
||||
list_concat/2
|
||||
@ -262,6 +263,9 @@ suffix(Suffix, [_|List]) :-
|
||||
sumlist(Numbers, Total) :-
|
||||
sumlist(Numbers, 0, Total).
|
||||
|
||||
sum_list(Numbers, Total) :-
|
||||
sumlist(Numbers, 0, Total).
|
||||
|
||||
sumlist([], Total, Total).
|
||||
sumlist([Head|Tail], Sofar, Total) :-
|
||||
Next is Sofar+Head,
|
||||
|
@ -88,7 +88,7 @@ regexec.so: regexec.o
|
||||
#
|
||||
DLLTOOL=dlltool
|
||||
DLLNAME=regexp.dll
|
||||
DLL_LIBS=-lcrtdll -L../.. -lWYap
|
||||
DLL_LIBS=-L /usr/lib/mingw -lcrtdll -L../.. -lWYap
|
||||
BASE_FILE=regexp.base
|
||||
EXP_FILE=regexp.exp
|
||||
DEF_FILE=$(srcdir)/regexp.def
|
||||
|
@ -156,7 +156,7 @@ init_regexp(void)
|
||||
UserCPredicate("check_regexp", regexp, 7);
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
#if defined(_WIN32) || defined(__MINGW32__)
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
|
@ -38,7 +38,7 @@
|
||||
*/
|
||||
|
||||
/* utility definitions */
|
||||
#ifdef _WIN32
|
||||
#if defined(_WIN32) || defined(__MINGW32__)
|
||||
#define DUPMAX ((unsigned int)-2) /* xxx is this right? */
|
||||
#else
|
||||
#define DUPMAX _POSIX2_RE_DUP_MAX /* xxx is this right? */
|
||||
|
@ -127,7 +127,7 @@ vertices_edges_to_ugraph(Vertices, Edges, Graph) :-
|
||||
p_to_s_group(VertexSet, EdgeSet, Graph).
|
||||
|
||||
|
||||
add_vertices(Vertices, Graph, NewGraph) :-
|
||||
add_vertices(Graph, Vertices, NewGraph) :-
|
||||
msort(Vertices, V1),
|
||||
add_vertices_to_s_graph(V1, Graph, NewGraph).
|
||||
|
||||
|
Reference in New Issue
Block a user