You can subscribe to this list here.
| 2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(72) |
Jul
(30) |
Aug
(31) |
Sep
(41) |
Oct
(22) |
Nov
(70) |
Dec
(98) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2002 |
Jan
(194) |
Feb
(127) |
Mar
(47) |
Apr
(83) |
May
(154) |
Jun
(149) |
Jul
(49) |
Aug
(64) |
Sep
(98) |
Oct
(104) |
Nov
(99) |
Dec
(109) |
| 2003 |
Jan
(72) |
Feb
(105) |
Mar
(76) |
Apr
(66) |
May
(20) |
Jun
(51) |
Jul
(67) |
Aug
(16) |
Sep
(24) |
Oct
(52) |
Nov
(43) |
Dec
(92) |
| 2004 |
Jan
(16) |
Feb
(145) |
Mar
(137) |
Apr
(140) |
May
(29) |
Jun
(214) |
Jul
(167) |
Aug
(202) |
Sep
(188) |
Oct
(228) |
Nov
(283) |
Dec
(250) |
| 2005 |
Jan
(107) |
Feb
(162) |
Mar
(100) |
Apr
(110) |
May
(144) |
Jun
(19) |
Jul
(23) |
Aug
(127) |
Sep
(20) |
Oct
(76) |
Nov
(85) |
Dec
(171) |
| 2006 |
Jan
(86) |
Feb
(134) |
Mar
(213) |
Apr
(70) |
May
(81) |
Jun
(25) |
Jul
(6) |
Aug
(36) |
Sep
(20) |
Oct
(21) |
Nov
(368) |
Dec
(164) |
| 2007 |
Jan
(239) |
Feb
(126) |
Mar
(148) |
Apr
(24) |
May
(48) |
Jun
(238) |
Jul
(18) |
Aug
(13) |
Sep
(59) |
Oct
(73) |
Nov
(224) |
Dec
(39) |
| 2008 |
Jan
(53) |
Feb
(92) |
Mar
(134) |
Apr
(81) |
May
(53) |
Jun
(210) |
Jul
(31) |
Aug
(38) |
Sep
|
Oct
|
Nov
|
Dec
(2) |
| 2009 |
Jan
(1) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: Vitor S. C. <vs...@us...> - 2008-08-07 20:51:19
|
Update of /cvsroot/yap/pl In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv17793/pl Modified Files: threads.yap Log Message: more threadin fixes Index: threads.yap =================================================================== RCS file: /cvsroot/yap/pl/threads.yap,v retrieving revision 1.76 retrieving revision 1.77 diff -u -r1.76 -r1.77 --- threads.yap 6 Aug 2008 17:32:22 -0000 1.76 +++ threads.yap 7 Aug 2008 20:51:23 -0000 1.77 @@ -29,7 +29,6 @@ no_threads, !, recorda('$thread_alias', [0|main], _). '$init_thread0' :- - '$record_thread_info'(0, main, [0, 0, 0], false, true, '$init_thread0'), recorda('$thread_defaults', [0, 0, 0, false, true], _), '$new_mutex'(QId), assert('$global_queue_mutex'(QId)), @@ -42,25 +41,26 @@ (Detached == true -> '$detach_thread'(Id) ; true), '$current_module'(Module), % always finish with a throw to make sure we clean stacks. - '$system_catch'((G -> throw('$thread_finished'(true)) ; throw('$thread_finished'(false))),Module,Exception,'$close_thread'(Exception,Detached)). + '$system_catch'((G -> throw('$thread_finished'(true)) ; throw('$thread_finished'(false))),Module,Exception,'$close_thread'(Exception,Detached)), + % force backtracking and handling exceptions + fail. '$close_thread'(Status, Detached) :- '$thread_zombie_self'(Id0), !, '$record_thread_status'(Id0,Status), '$run_at_thread_exit'(Id0), '$erase_thread_info'(Id0). -'$close_thread'(Status) :- - '$close_thread'(Status). % OK, we want to ensure atomicity here in case we get an exception while we % are closing down the thread. '$record_thread_status'(Id0,Stat) :- !, - (recorded('$thread_exit_status', [Id0|_], R), erase(R), fail + '$mk_tstatus_key'(Id0, Key), + (recorded(Key, _, R), erase(R), fail ; Stat = '$thread_finished'(Status) -> - recorda('$thread_exit_status', [Id0|Status], _) + recorda(Key, Status, _) ; - recorda('$thread_exit_status', [Id0|exception(Stat)], _) + recorda(Key, exception(Stat), _) ). thread_create(Goal) :- @@ -69,14 +69,14 @@ '$thread_options'([detached(true)], [], Stack, Trail, System, Detached, AtExit, G0), '$thread_new_tid'(Id), % '$erase_thread_info'(Id), % this should not be here - '$record_thread_info'(Id, [Stack, Trail, System], Detached, AtExit), '$create_thread_mq'(Id), ( - '$create_thread'(Goal, Stack, Trail, System, Detached, Id) + '$create_thread'(Goal, Stack, Trail, System, Detached, AtExit, Id) -> true ; - recorda('$thread_exit_status', [Id|exception(resource_error(memory))],_) + '$mk_tstatus_key'(Id, Key), + recorda(Key, exception(resource_error(memory)),_) ). thread_create(Goal, Id) :- @@ -86,14 +86,14 @@ '$thread_options'([], [], Stack, Trail, System, Detached, AtExit, G0), '$thread_new_tid'(Id), % '$erase_thread_info'(Id), % this should not be here - '$record_thread_info'(Id, [Stack, Trail, System], Detached, AtExit), '$create_thread_mq'(Id), ( - '$create_thread'(Goal, Stack, Trail, System, Detached, Id) + '$create_thread'(Goal, Stack, Trail, System, Detached, AtExit, Id) -> true ; - recorda('$thread_exit_status', [Id|exception(resource_error(memory))],_) + '$mk_tstatus_key'(Id, Key), + recorda(Key, exception(resource_error(memory)),_) ). thread_create(Goal, Id, Options) :- @@ -103,17 +103,15 @@ '$thread_options'(Options, Alias, Stack, Trail, System, Detached, AtExit, G0), '$thread_new_tid'(Id), % '$erase_thread_info'(Id), % this should not be here - ( var(Alias) -> - '$record_thread_info'(Id, [Stack, Trail, System], Detached, AtExit) - ; '$record_thread_info'(Id, Alias, [Stack, Trail, System], Detached, AtExit, G0) - ), + '$record_alias_info'(Id, Alias), '$create_thread_mq'(Id), ( - '$create_thread'(Goal, Stack, Trail, System, Detached, Id) + '$create_thread'(Goal, Stack, Trail, System, Detached, AtExit, Id) -> true ; - recorda('$thread_exit_status', [Id|exception(resource_error(memory))],_) + '$mk_tstatus_key'(Id, Key), + recorda(Key, exception(resource_error(memory)),_) ). '$erase_thread_info'(Id) :- @@ -121,14 +119,6 @@ erase(R), fail. '$erase_thread_info'(Id) :- - recorded('$thread_sizes', [Id|_], R), - erase(R), - fail. -'$erase_thread_info'(Id) :- - recorded('$thread_at_exit', [Id|_], R), - erase(R), - fail. -'$erase_thread_info'(Id) :- recorded('$thread_exit_hook', [Id|_], R), erase(R), fail. @@ -169,19 +159,13 @@ '$thread_option'(Option, _, _, _, _, _, _, G0) :- '$do_error'(domain_error(thread_option,Option),G0). -'$record_thread_info'(_, Alias, _, _, _, Goal) :- +'$record_alias_info'(_, Alias) :- + var(Alias), !. +'$record_alias_info'(_, Alias) :- recorded('$thread_alias', [_|Alias], _), !, '$do_error'(permission_error(create,thread,alias(Alias)), Goal). -'$record_thread_info'(Id, Alias, Sizes, Detached, AtExit, _) :- - recorda('$thread_alias', [Id|Alias], _), - '$record_thread_info'(Id, Sizes, Detached, AtExit). - -'$record_thread_info'(Id, Sizes, Detached, AtExit) :- - recorda('$thread_sizes', [Id|Sizes], _), - ( AtExit == true -> - true - ; recorda('$thread_at_exit', [Id|AtExit], _) - ). +'$record_alias_info'(Id, Alias) :- + recorda('$thread_alias', [Id|Alias], _). % vsc: ????? thread_defaults(Defaults) :- @@ -298,7 +282,8 @@ '$check_thread_or_alias'(Id, thread_join(Id, Status)), '$thread_id_alias'(Id0, Id), '$thread_join'(Id0), - recorded('$thread_exit_status', [Id0|Status], R), + '$mk_tstatus_key'(Id0, Key), + recorded(Key, Status, R), erase(R), '$thread_destroy'(Id0). @@ -312,7 +297,8 @@ '$check_thread_or_alias'(Id, thread_detach(Id)), '$thread_id_alias'(Id0, Id), '$detach_thread'(Id0), - ( recorded('$thread_exit_status', [Id0|_], _) -> + '$mk_tstatus_key'(Id0, Key), + ( recorded(Key, _, _) -> '$erase_thread_info'(Id0), '$thread_destroy'(Id0) ; @@ -326,8 +312,8 @@ '$close_thread'('$thread_finished'(exited(Term)), Detached). '$run_at_thread_exit'(Id0) :- - recorded('$thread_at_exit',[Id0|AtExit],R), erase(R), - catch(once(AtExit), _, fail), + '$thread_run_at_exit'(G, M), + catch(once(M:G), _, fail), fail. '$run_at_thread_exit'(Id0) :- recorded('$thread_exit_hook',[Id0|Hook],R), erase(R), @@ -541,12 +527,10 @@ var(Options), !, '$do_error'(instantiation_error, message_queue_create(Id, Options)). message_queue_create(Id, []) :- !, - '$global_queue_mutex'(QMutex), '$new_mutex'(Mutex), '$cond_create'(Cond), '$mq_new_id'(Id, NId, Key), - recorda('$queue',q(Id,Mutex,Cond,NId,Key), _), - '$unlock_mutex'(QMutex). + recorda('$queue',q(Id,Mutex,Cond,NId,Key), _). message_queue_create(Id, [alias(Alias)]) :- var(Alias), !, '$do_error'(instantiation_error, message_queue_create(Id, [alias(Alias)])). @@ -554,19 +538,14 @@ \+ atom(Alias), !, '$do_error'(type_error(atom,Alias), message_queue_create(Id, [alias(Alias)])). message_queue_create(Id, [alias(Alias)]) :- !, - '$global_queue_mutex'(QMutex), - '$lock_mutex'(QMutex), '$new_mutex'(Mutex), '$cond_create'(Cond), ( recorded('$queue', q(Alias,_,_,_,_), _) -> - '$unlock_mutex'(QMutex), '$do_error'(permission_error(create,queue,alias(Alias)),message_queue_create(Id, [alias(Alias)])) ; recorded('$thread_alias', [_|Alias], _) -> - '$unlock_mutex'(QMutex), '$do_error'(permission_error(create,queue,alias(Alias)),message_queue_create(Id, [alias(Alias)])) ; '$mq_new_id'(Id, NId, Key), - recorda('$queue',q(Alias,Mutex,Cond,NId,Key), _), - '$unlock_mutex'(QMutex) + recorda('$queue',q(Alias,Mutex,Cond,NId,Key), _) ). message_queue_create(Id, [Option| _]) :- '$do_error'(domain_error(queue_option, Option), message_queue_create(Id, [Option| _])). @@ -582,12 +561,13 @@ ). '$create_thread_mq'(TId) :- - '$global_queue_mutex'(QMutex), '$new_mutex'(Mutex), '$cond_create'(Cond), '$mq_new_id'(TId, TId, Key), recorda('$queue', q(TId,Mutex,Cond,TId,Key), _), - '$unlock_mutex'(QMutex). + fail. +% recover space +'$create_thread_mq'(_). '$mq_new_id'(Id, Id, AtId) :- integer(Id), !, @@ -609,21 +589,22 @@ message_queue_destroy(Name) :- var(Name), !, '$do_error'(instantiation_error,message_queue_destroy(Name)). -message_queue_destroy(Queue) :- - '$global_queue_mutex'(QMutex), - '$lock_mutex'(QMutex), +message_queue_destroy(Name) :- + '$message_queue_destroy'(Name), + fail. +message_queue_destroy(_). + + +'$message_queue_destroy'(Queue) :- recorded('$queue',q(Queue,Mutex,Cond,_,QKey),R), !, erase(R), '$cond_destroy'(Cond), '$destroy_mutex'(Mutex), - '$clean_mqueue'(QKey), - '$unlock_mutex'(QMutex). -message_queue_destroy(Queue) :- - '$global_queue_mutex'(QMutex), - '$unlock_mutex'(QMutex), + '$clean_mqueue'(QKey). +'$message_queue_destroy'(Queue) :- atomic(Queue), !, '$do_error'(existence_error(message_queue,Queue),message_queue_destroy(Queue)). -message_queue_destroy(Name) :- +'$message_queue_destroy'(Name) :- '$do_error'(type_error(atom,Name),message_queue_destroy(Name)). '$clean_mqueue'(Queue) :- @@ -684,17 +665,18 @@ recorded('$thread_alias',[Id|Queue],_), !, thread_send_message(Id, Term). thread_send_message(Queue, Term) :- - '$global_queue_mutex'(QMutex), - '$lock_mutex'(QMutex), + '$do_thread_send_message'(Queue, Term), + fail. +% release pointers +thread_send_message(_, _). + +'$do_thread_send_message'(Queue, Term) :- recorded('$queue',q(Queue,Mutex,Cond,_,Key),_), !, '$lock_mutex'(Mutex), - '$unlock_mutex'(QMutex), recordz(Key,Term,_), '$cond_signal'(Cond), '$unlock_mutex'(Mutex). -thread_send_message(Queue, Term) :- - '$global_queue_mutex'(QMutex), - '$unlock_mutex'(QMutex), +'$do_thread_send_message'(Queue, Term) :- '$do_error'(existence_error(queue,Queue),thread_send_message(Queue,Term)). thread_get_message(Term) :- @@ -707,15 +689,10 @@ recorded('$thread_alias',[Id|Queue],_), !, thread_get_message(Id, Term). thread_get_message(Queue, Term) :- - '$global_queue_mutex'(QMutex), - '$lock_mutex'(QMutex), recorded('$queue',q(Queue,Mutex,Cond,_,Key),_), !, '$lock_mutex'(Mutex), - '$unlock_mutex'(QMutex), '$thread_get_message_loop'(Key, Term, Mutex, Cond). thread_get_message(Queue, Term) :- - '$global_queue_mutex'(QMutex), - '$unlock_mutex'(QMutex), '$do_error'(existence_error(message_queue,Queue),thread_get_message(Queue,Term)). @@ -737,15 +714,10 @@ recorded('$thread_alias',[Id|Queue],_), !, thread_peek_message(Id, Term). thread_peek_message(Queue, Term) :- - '$global_queue_mutex'(QMutex), - '$lock_mutex'(QMutex), recorded('$queue',q(Queue,Mutex,_,_,Key),_), !, '$lock_mutex'(Mutex), - '$unlock_mutex'(QMutex), '$thread_peek_message2'(Key, Term, Mutex). thread_peek_message(Queue, Term) :- - '$global_queue_mutex'(QMutex), - '$unlock_mutex'(QMutex), '$do_error'(existence_error(message_queue,Queue),thread_peek_message(Queue,Term)). @@ -826,7 +798,7 @@ thread_property(Id, Prop) :- ( nonvar(Id) -> '$check_thread_or_alias'(Id, thread_property(Id, Prop)) - ; recorded('$thread_sizes', [Id| _], _) + ; '$thread_stacks'(Id, _, _, _) ), '$check_thread_property'(Prop, thread_property(Id, Prop)), '$thread_id_alias'(Id0, Id), @@ -835,21 +807,22 @@ '$thread_property'(Id, alias(Alias)) :- recorded('$thread_alias', [Id|Alias], _). '$thread_property'(Id, status(Status)) :- - ( recorded('$thread_exit_status', [Id|Exit], _) -> + '$mk_tstatus_key'(Id, Key), + ( recorded(Key, Exit, _) -> Status = Exit ; Status = running ). '$thread_property'(Id, detached(Detached)) :- '$thread_detached'(Detached). -'$thread_property'(Id, at_exit(AtExit)) :- - recorded('$thread_at_exit', [Id|AtExit], _). -'$thread_property'(Id, stack(Stack)) :- - recorded('$thread_sizes', [Id, Stack, _, _], _). -'$thread_property'(Id, trail(Trail)) :- - recorded('$thread_sizes', [Id, _, Trail, _], _). -'$thread_property'(Id, system(System)) :- - recorded('$thread_sizes', [Id, _, _, System], _). - +'$thread_property'(Id, at_exit(M:G)) :- + '$thread_run_at_exit'(G,M). +'$thread_property'(Id, InfoSize) :- + '$thread_stacks'(Id, Stack, Trail, System), + '$select_thread_property'(InfoSize, Stack, Trail, System). + +'$select_thread_property'(stack(Stack), Stack, _, _). +'$select_thread_property'(trail(Trail), _, Trail, _). +'$select_thread_property'(system(System), _, _, System). threads :- format(user_error,'------------------------------------------------------------------------~n',[]), @@ -919,3 +892,7 @@ ). '$check_mutex_property'(Term, Goal) :- '$do_error'(domain_error(mutex_property, Term), Goal). + +'$mk_tstatus_key'(Id0, Key) :- + atomic_concat('$thread_exit_status__',Id0,Key). + |
|
From: Vitor S. C. <vs...@us...> - 2008-08-07 20:51:19
|
Update of /cvsroot/yap/H In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv17793/H Modified Files: Heap.h Yapproto.h clause.h rheap.h threads.h Log Message: more threadin fixes Index: Heap.h =================================================================== RCS file: /cvsroot/yap/H/Heap.h,v retrieving revision 1.134 retrieving revision 1.135 diff -u -r1.134 -r1.135 --- Heap.h 6 Aug 2008 17:32:20 -0000 1.134 +++ Heap.h 7 Aug 2008 20:51:23 -0000 1.135 @@ -185,10 +185,11 @@ int zombie; UInt ssize; UInt tsize; + UInt sysize; void *stack_address; Term tdetach; - Term cmod; - struct DB_TERM *tgoal; + Term cmod, texit_mod; + struct DB_TERM *tgoal, *texit; int id; int ret; REGSTORE *default_yaam_regs; Index: Yapproto.h =================================================================== RCS file: /cvsroot/yap/H/Yapproto.h,v retrieving revision 1.89 retrieving revision 1.90 diff -u -r1.89 -r1.90 --- Yapproto.h 6 Aug 2008 17:32:21 -0000 1.89 +++ Yapproto.h 7 Aug 2008 20:51:23 -0000 1.90 @@ -258,6 +258,7 @@ Term STD_PROTO(Yap_Module_Name, (struct pred_entry *)); struct pred_entry *STD_PROTO(Yap_ModulePred, (Term)); void STD_PROTO(Yap_NewModulePred, (Term, struct pred_entry *)); +Term STD_PROTO(Yap_StripModule, (Term, Term *)); void STD_PROTO(Yap_InitModules, (void)); void STD_PROTO(Yap_InitModulesC, (void)); Index: clause.h =================================================================== RCS file: /cvsroot/yap/H/clause.h,v retrieving revision 1.52 retrieving revision 1.53 diff -u -r1.52 -r1.53 --- clause.h 23 Jan 2008 17:57:54 -0000 1.52 +++ clause.h 7 Aug 2008 20:51:23 -0000 1.53 @@ -44,7 +44,7 @@ UInt ClRefCount; #if defined(YAPOR) || defined(THREADS) /* A lock for manipulating the clause */ - lockvar ClLock; + // lockvar ClLock; #endif UInt ClSize; struct logic_upd_index *ParentIndex; @@ -65,7 +65,7 @@ CELL ClFlags; #if defined(YAPOR) || defined(THREADS) /* A lock for manipulating the clause */ - lockvar ClLock; + // lockvar ClLock; #endif UInt ClSize; /* extra clause information for logical update indices and facts */ Index: rheap.h =================================================================== RCS file: /cvsroot/yap/H/rheap.h,v retrieving revision 1.99 retrieving revision 1.100 diff -u -r1.99 -r1.100 --- rheap.h 22 Jul 2008 23:34:49 -0000 1.99 +++ rheap.h 7 Aug 2008 20:51:23 -0000 1.100 @@ -13,6 +13,9 @@ * * * Last rev: $Date$,$Author$ * * $Log$ +* Revision 1.100 2008/08/07 20:51:23 vsc +* more threadin fixes +* * Revision 1.99 2008/07/22 23:34:49 vsc * SWI and module fixes * @@ -401,7 +404,7 @@ * clause for this predicate or not */ { - INIT_LOCK(cl->ClLock); + // INIT_LOCK(cl->ClLock); if (cl->ClFlags & LogUpdRuleMask) { cl->ClExt = PtoOpAdjust(cl->ClExt); } @@ -440,7 +443,7 @@ static void CleanLUIndex(LogUpdIndex *idx, int recurse) { - INIT_LOCK(idx->ClLock); + // INIT_LOCK(idx->ClLock); idx->ClPred = PtoPredAdjust(idx->ClPred); if (idx->ParentIndex) idx->ParentIndex = LUIndexAdjust(idx->ParentIndex); Index: threads.h =================================================================== RCS file: /cvsroot/yap/H/threads.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- threads.h 13 Mar 2005 06:26:11 -0000 1.3 +++ threads.h 7 Aug 2008 20:51:23 -0000 1.4 @@ -1,7 +1,9 @@ typedef struct{ UInt ssize; UInt tsize; + UInt sysize; int (*cancel)(int thread); + Term egoal; } thread_attr; Int STD_PROTO(Yap_thread_self,(void)); |
|
From: Vitor S. C. <vs...@us...> - 2008-08-06 23:05:43
|
Update of /cvsroot/yap/C In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv2923/C Modified Files: absmi.c Log Message: fix debugging info Index: absmi.c =================================================================== RCS file: /cvsroot/yap/C/absmi.c,v retrieving revision 1.243 retrieving revision 1.244 diff -u -r1.243 -r1.244 --- absmi.c 6 Aug 2008 17:32:18 -0000 1.243 +++ absmi.c 6 Aug 2008 23:05:49 -0000 1.244 @@ -12,6 +12,9 @@ * comments: Portable abstract machine interpreter * * Last rev: $Date$,$Author$ * * $Log$ +* Revision 1.244 2008/08/06 23:05:49 vsc +* fix debugging info +* * Revision 1.243 2008/08/06 17:32:18 vsc * more thread fixes * @@ -1567,11 +1570,6 @@ ASP = YREG+E_CB; saveregs(); - if (cl->ClSource == NULL) { - fprintf(stderr,"%d CLLLLL %p %p %s\n",worker_id,cl,cl->ClSource,RepAtom(cl->ClPred->FunctorOfPred)->StrOfAE); - exit(1); - FAIL(); - } while ((t = Yap_FetchTermFromDB(cl->ClSource)) == 0L) { if (Yap_Error_TYPE == OUT_OF_ATTVARS_ERROR) { Yap_Error_TYPE = YAP_NO_ERROR; |
|
From: Vitor S. C. <vs...@us...> - 2008-08-06 23:05:42
|
Update of /cvsroot/yap/pl In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv2923/pl Modified Files: directives.yap Log Message: fix debugging info Index: directives.yap =================================================================== RCS file: /cvsroot/yap/pl/directives.yap,v retrieving revision 1.77 retrieving revision 1.78 diff -u -r1.77 -r1.78 --- directives.yap 10 May 2008 23:24:13 -0000 1.77 +++ directives.yap 6 Aug 2008 23:05:49 -0000 1.78 @@ -23,42 +23,42 @@ '$all_directives'(G) :- !, '$directive'(G). -'$directive'(multifile(_)). -'$directive'(expects_dialect(_)). +'$directive'(block(_)). +'$directive'(char_conversion(_,_)). +'$directive'(compile(_)). +'$directive'(consult(_)). '$directive'(discontiguous(_)). -'$directive'(initialization(_)). +'$directive'(dynamic(_)). +'$directive'(elif(_)). +'$directive'(else). +'$directive'(encoding(_)). +'$directive'(endif). +'$directive'(ensure_loaded(_)). +'$directive'(expects_dialect(_)). +'$directive'(if(_)). '$directive'(include(_)). +'$directive'(initialization(_)). +'$directive'(meta_predicate(_)). '$directive'(module(_,_)). '$directive'(module(_,_,_)). -'$directive'(meta_predicate(_)). '$directive'(module_transparent(_)). -'$directive'(public(_)). -'$directive'(dynamic(_)). +'$directive'(multifile(_)). '$directive'(noprofile(_)). +'$directive'(parallel). +'$directive'(public(_)). '$directive'(op(_,_,_)). '$directive'(set_prolog_flag(_,_)). -'$directive'(ensure_loaded(_)). -'$directive'(char_conversion(_,_)). -'$directive'(compile(_)). -'$directive'(consult(_)). '$directive'(reconsult(_)). +'$directive'(reexport(_)). +'$directive'(reexport(_,_)). '$directive'(sequential). -'$directive'(parallel). '$directive'(sequential(_)). -'$directive'(block(_)). -'$directive'(wait(_)). +'$directive'(thread_local(_)). +'$directive'(uncutable(_)). '$directive'(use_module(_)). '$directive'(use_module(_,_)). '$directive'(use_module(_,_,_)). -'$directive'(thread_local(_)). -'$directive'(uncutable(_)). -'$directive'(encoding(_)). -'$directive'(if(_)). -'$directive'(else). -'$directive'(elif(_)). -'$directive'(endif). -'$directive'(reexport(_)). -'$directive'(reexport(_,_)). +'$directive'(wait(_)). '$exec_directives'((G1,G2), Mode, M) :- !, '$exec_directives'(G1, Mode, M), |
|
From: Vitor S. C. <vs...@us...> - 2008-08-06 17:34:07
|
Update of /cvsroot/yap/library In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv32543/library Modified Files: swi.yap Log Message: fix fix Index: swi.yap =================================================================== RCS file: /cvsroot/yap/library/swi.yap,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- swi.yap 6 Aug 2008 17:32:21 -0000 1.30 +++ swi.yap 6 Aug 2008 17:34:15 -0000 1.31 @@ -400,7 +400,6 @@ call(Goal, Elem1, Elem2, Elem3, Elem4), maplist2(Tail1, Tail2, Tail3, Tail4, Goal). -======= % copied from SWI's boot/apply library :- module_transparent prolog:maplist/2, |
|
From: Vitor S. C. <vs...@us...> - 2008-08-06 17:32:24
|
Update of /cvsroot/yap/C In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv31799/C Modified Files: absmi.c compiler.c dbase.c init.c threads.c tracer.c utilpreds.c Log Message: more thread fixes Index: absmi.c =================================================================== RCS file: /cvsroot/yap/C/absmi.c,v retrieving revision 1.242 retrieving revision 1.243 diff -u -r1.242 -r1.243 --- absmi.c 17 Jun 2008 13:37:48 -0000 1.242 +++ absmi.c 6 Aug 2008 17:32:18 -0000 1.243 @@ -12,6 +12,9 @@ * comments: Portable abstract machine interpreter * * Last rev: $Date$,$Author$ * * $Log$ +* Revision 1.243 2008/08/06 17:32:18 vsc +* more thread fixes +* * Revision 1.242 2008/06/17 13:37:48 vsc * fix c_interface not to crash when people try to recover slots that are * not there. @@ -1564,6 +1567,11 @@ ASP = YREG+E_CB; saveregs(); + if (cl->ClSource == NULL) { + fprintf(stderr,"%d CLLLLL %p %p %s\n",worker_id,cl,cl->ClSource,RepAtom(cl->ClPred->FunctorOfPred)->StrOfAE); + exit(1); + FAIL(); + } while ((t = Yap_FetchTermFromDB(cl->ClSource)) == 0L) { if (Yap_Error_TYPE == OUT_OF_ATTVARS_ERROR) { Yap_Error_TYPE = YAP_NO_ERROR; @@ -8205,9 +8213,11 @@ CACHE_Y(B); #if defined(YAPOR) || defined(THREADS) - PP = PREG->u.lld.d->ClPred; + if (!PP) { + PP = PREG->u.lld.d->ClPred; + LOCK(PP->PELock); + } #endif - LOCK(PP->PELock); timestamp = IntegerOfTerm(((CELL *)(B_YREG+1))[PREG->u.lld.t.s]); /* fprintf(stderr,"^ %p/%p %d %d %d--%u\n",PREG,PREG->u.lld.d->ClPred,timestamp,PREG->u.lld.d->ClPred->TimeStampOfPred,PREG->u.lld.d->ClTimeStart,PREG->u.lld.d->ClTimeEnd);*/ if (!VALID_TIMESTAMP(timestamp, PREG->u.lld.d)) { @@ -8239,15 +8249,17 @@ UInt timestamp = IntegerOfTerm(((CELL *)(B_YREG+1))[ap->ArityOfPE]); /* fprintf(stderr,"- %p/%p %d %d %p\n",PREG,ap,timestamp,ap->TimeStampOfPred,PREG->u.lld.d->ClCode);*/ - LOCK(ap->PELock); +#if defined(YAPOR) || defined(THREADS) + if (!PP) { + LOCK(ap->PELock); + PP = ap; + } +#endif if (!VALID_TIMESTAMP(timestamp, lcl)) { /* jump to next alternative */ PREG = FAILCODE; } else { PREG = lcl->ClCode; -#if defined(YAPOR) || defined(THREADS) - PP = ap; -#endif } /* HEY, leave indexing block alone!! */ /* check if we are the ones using this code */ @@ -8332,6 +8344,12 @@ } SET_BB(B_YREG); ENDCACHE_Y(); +#if defined(YAPOR) || defined(THREADS) + if (PREG == FAILCODE) { + UNLOCK(PP->PELock); + PP = NULL; + } +#endif JMPNext(); } ENDBOp(); Index: compiler.c =================================================================== RCS file: /cvsroot/yap/C/compiler.c,v retrieving revision 1.88 retrieving revision 1.89 diff -u -r1.88 -r1.89 --- compiler.c 13 Mar 2008 14:37:58 -0000 1.88 +++ compiler.c 6 Aug 2008 17:32:18 -0000 1.89 @@ -13,6 +13,9 @@ * * * Last rev: $Date$,$Author$ * * $Log$ +* Revision 1.89 2008/08/06 17:32:18 vsc +* more thread fixes +* * Revision 1.88 2008/03/13 14:37:58 vsc * update chr * @@ -704,10 +707,13 @@ write_num_op), (CELL) t, Zero, &cglobs->cint); } else if (IsPairTerm(t)) { if (optimizer_on && level < 6) { +#if !defined(THREADS) + /* discard code sharing because we cannot write on shared stuff */ if (!(cglobs->cint.CurrentPred->PredFlags & (DynamicPredFlag|LogUpdatePredFlag))) { if (try_store_as_dbterm(t, argno, arity, level, cglobs)) return; - } + } +#endif t = optimize_ce(t, arity, level, cglobs); if (IsVarTerm(t)) { c_var(t, argno, arity, level, cglobs); Index: dbase.c =================================================================== RCS file: /cvsroot/yap/C/dbase.c,v retrieving revision 1.174 retrieving revision 1.175 diff -u -r1.174 -r1.175 --- dbase.c 13 Jun 2008 14:10:27 -0000 1.174 +++ dbase.c 6 Aug 2008 17:32:19 -0000 1.175 @@ -1504,7 +1504,7 @@ NOfCells = ntp - ntp0; /* End Of Code Info */ *dbg->lr++ = 0; NOfLinks = (dbg->lr - dbg->LinkAr); - if (vars_found || InFlag & InQueue) { + if (vars_found || InFlag & InQueue ) { /* * Take into account the fact that one needs an entry @@ -1800,10 +1800,16 @@ yamop *ipc; int needs_vars = FALSE; struct db_globs dbg; + int d_flag = 0; +#ifdef THREADS + /* we cannot allow sharing between threads (for now) */ + if (!(pe->PredFlags & ThreadLocalPredFlag)) + d_flag |= InQueue; +#endif s_dbg = &dbg; ipc = NEXTOP(((LogUpdClause *)NULL)->ClCode,e); - if ((x = (DBTerm *)CreateDBStruct(t, NULL, 0, &needs_vars, (UInt)ipc, &dbg)) == NULL) { + if ((x = (DBTerm *)CreateDBStruct(t, NULL, d_flag, &needs_vars, (UInt)ipc, &dbg)) == NULL) { return NULL; /* crash */ } cl = (LogUpdClause *)((ADDR)x-(UInt)ipc); @@ -1928,7 +1934,7 @@ p_rcda(void) { /* Idiotic xlc's cpp does not work with ARG1 within MkDBRefTerm */ - Term TRef, t1 = Deref(ARG1), t2 = Deref(ARG2); + Term TRef, t1 = Deref(ARG1); PredEntry *pe = NULL; if (!IsVarTerm(Deref(ARG3))) @@ -1940,7 +1946,7 @@ LogUpdClause *cl; LOCK(pe->PELock); - cl = record_lu(pe, t2, MkFirst); + cl = record_lu(pe, Deref(ARG2), MkFirst); if (cl != NULL) { TRAIL_CLREF(cl); #if defined(YAPOR) || defined(THREADS) @@ -1954,11 +1960,10 @@ } UNLOCK(pe->PELock); } else { - TRef = MkDBRefTerm(record(MkFirst, t1, t2, Unsigned(0))); + TRef = MkDBRefTerm(record(MkFirst, t1, Deref(ARG2), Unsigned(0))); } if (Yap_Error_TYPE != YAP_NO_ERROR) { if (recover_from_record_error(3)) { - t2 = Deref(ARG2); goto restart_record; } else { return FALSE; Index: init.c =================================================================== RCS file: /cvsroot/yap/C/init.c,v retrieving revision 1.173 retrieving revision 1.174 diff -u -r1.173 -r1.174 --- init.c 22 Jul 2008 23:34:48 -0000 1.173 +++ init.c 6 Aug 2008 17:32:19 -0000 1.174 @@ -985,6 +985,7 @@ Yap_heap_regs->thread_handle[0].handle = pthread_self(); Yap_heap_regs->thread_handle[0].handle = pthread_self(); pthread_mutex_init(&ThreadHandle[0].tlock, NULL); + pthread_mutex_init(&ThreadHandle[0].tlock_status, NULL); Yap_heap_regs->n_of_threads = 1; Yap_heap_regs->n_of_threads_created = 1; Yap_heap_regs->threads_total_time = 0; Index: threads.c =================================================================== RCS file: /cvsroot/yap/C/threads.c,v retrieving revision 1.42 retrieving revision 1.43 diff -u -r1.42 -r1.43 --- threads.c 3 Jun 2008 09:24:27 -0000 1.42 +++ threads.c 6 Aug 2008 17:32:20 -0000 1.43 @@ -38,11 +38,9 @@ * */ -#if DEBUG - +#if DEBUGX static void DEBUG_TLOCK_ACCESS( int pos, int wid) { - ThreadHandle[wid].been_here2 = ThreadHandle[wid].been_here1; - ThreadHandle[wid].been_here1 = pos; + fprintf(stderr,"wid=%p %p\n", wid, pos); } #else #define DEBUG_TLOCK_ACCESS(WID, POS) @@ -58,8 +56,8 @@ ThreadHandle[new_worker_id].zombie == TRUE) ) new_worker_id++; if (new_worker_id < MAX_THREADS) { - pthread_mutex_lock(&(ThreadHandle[new_worker_id].tlock)); DEBUG_TLOCK_ACCESS(new_worker_id, 0); + pthread_mutex_lock(&(ThreadHandle[new_worker_id].tlock)); ThreadHandle[new_worker_id].in_use = TRUE; } else { new_worker_id = -1; @@ -98,7 +96,7 @@ static void -kill_thread_engine (int wid) +kill_thread_engine (int wid, int always_die) { Prop p0 = AbsPredProp(Yap_heap_regs->thread_handle[wid].local_preds); @@ -110,33 +108,32 @@ Yap_FreeCodeSpace((char *)ap); } Yap_KillStacks(wid); - Yap_FreeCodeSpace((ADDR)(ThreadHandle[wid].tgoal)); - ThreadHandle[wid].tgoal = NULL; Yap_heap_regs->wl[wid].active_signals = 0L; free(Yap_heap_regs->wl[wid].scratchpad.ptr); free(ThreadHandle[wid].default_yaam_regs); ThreadHandle[wid].current_yaam_regs = NULL; free(ThreadHandle[wid].start_of_timesp); free(ThreadHandle[wid].last_timep); - ThreadHandle[wid].zombie = FALSE; - DEBUG_TLOCK_ACCESS(1, wid); - pthread_mutex_unlock(&(ThreadHandle[wid].tlock)); + LOCK(ThreadHandlesLock); + if (ThreadHandle[wid].tdetach == MkAtomTerm(AtomTrue) || + always_die) { + ThreadHandle[wid].zombie = FALSE; + ThreadHandle[wid].in_use = FALSE; + DEBUG_TLOCK_ACCESS(1, wid); + pthread_mutex_unlock(&(ThreadHandle[wid].tlock)); + } + UNLOCK(ThreadHandlesLock); } static void thread_die(int wid, int always_die) { - LOCK(ThreadHandlesLock); if (!always_die) { /* called by thread itself */ ThreadsTotalTime += Yap_cputime(); } - if (ThreadHandle[wid].tdetach == MkAtomTerm(AtomTrue) || - always_die) { - kill_thread_engine(wid); - } - UNLOCK(ThreadHandlesLock); + kill_thread_engine(wid, always_die); } static void @@ -195,6 +192,8 @@ } } } while (t == 0); + free(ThreadHandle[myworker_id].tgoal); + ThreadHandle[myworker_id].tgoal = NULL; tgs[1] = ThreadHandle[worker_id].tdetach; tgoal = Yap_MkApplTerm(FunctorThreadRun, 2, tgs); Yap_RunTopGoal(tgoal); @@ -230,6 +229,7 @@ Term x3 = Deref(ARG3); int new_worker_id = IntegerOfTerm(Deref(ARG6)); + // fprintf(stderr," %d --> %d\n", worker_id, new_worker_id); if (IsBigIntTerm(x2)) return FALSE; if (IsBigIntTerm(x3)) @@ -241,14 +241,13 @@ /* YAP ERROR */ return FALSE; } + /* make sure we can proceed */ if (!init_thread_engine(new_worker_id, ssize, tsize, tgoal, tdetach)) return FALSE; ThreadHandle[new_worker_id].id = new_worker_id; ThreadHandle[new_worker_id].ref_count = 1; if ((ThreadHandle[new_worker_id].ret = pthread_create(&ThreadHandle[new_worker_id].handle, NULL, thread_run, (void *)(&(ThreadHandle[new_worker_id].id)))) == 0) { /* wait until the client is initialised */ - DEBUG_TLOCK_ACCESS(3, new_worker_id); - pthread_mutex_unlock(&(ThreadHandle[new_worker_id].tlock)); return TRUE; } return FALSE; @@ -304,17 +303,36 @@ /* make sure the lock is available */ if (pthread_getspecific(Yap_yaamregs_key) == NULL) return Yap_unify(MkIntegerTerm(-1), ARG1); - pthread_mutex_lock(&(ThreadHandle[worker_id].tlock)); DEBUG_TLOCK_ACCESS(4, worker_id); + pthread_mutex_lock(&(ThreadHandle[worker_id].tlock)); if (Yap_heap_regs->wl[worker_id].active_signals &= YAP_ITI_SIGNAL) { DEBUG_TLOCK_ACCESS(5, worker_id); pthread_mutex_unlock(&(ThreadHandle[worker_id].tlock)); return FALSE; } + // fprintf(stderr," -- %d\n", worker_id); Yap_heap_regs->thread_handle[worker_id].in_use = FALSE; Yap_heap_regs->thread_handle[worker_id].zombie = TRUE; - DEBUG_TLOCK_ACCESS(6, worker_id); - pthread_mutex_unlock(&(ThreadHandle[worker_id].tlock)); + return Yap_unify(MkIntegerTerm(worker_id), ARG1); +} + +static Int +p_thread_status_lock(void) +{ + /* make sure the lock is available */ + if (pthread_getspecific(Yap_yaamregs_key) == NULL) + return FALSE; + pthread_mutex_lock(&(ThreadHandle[worker_id].tlock_status)); + return Yap_unify(MkIntegerTerm(worker_id), ARG1); +} + +static Int +p_thread_status_unlock(void) +{ + /* make sure the lock is available */ + if (pthread_getspecific(Yap_yaamregs_key) == NULL) + return FALSE; + pthread_mutex_unlock(&(ThreadHandle[worker_id].tlock_status)); return Yap_unify(MkIntegerTerm(worker_id), ARG1); } @@ -346,8 +364,8 @@ Int Yap_thread_attach_engine(int wid) { - pthread_mutex_lock(&(ThreadHandle[wid].tlock)); DEBUG_TLOCK_ACCESS(7, wid); + pthread_mutex_lock(&(ThreadHandle[wid].tlock)); if (ThreadHandle[wid].ref_count && ThreadHandle[wid].handle != pthread_self()) { DEBUG_TLOCK_ACCESS(8, wid); @@ -365,8 +383,8 @@ Int Yap_thread_detach_engine(int wid) { - pthread_mutex_lock(&(ThreadHandle[wid].tlock)); DEBUG_TLOCK_ACCESS(10, wid); + pthread_mutex_lock(&(ThreadHandle[wid].tlock)); if (ThreadHandle[wid].handle == pthread_self()) ThreadHandle[wid].handle = 0; ThreadHandle[wid].ref_count--; @@ -379,7 +397,7 @@ Yap_thread_destroy_engine(int wid) { if (ThreadHandle[wid].ref_count == 0) { - kill_thread_engine(wid); + kill_thread_engine(wid, TRUE); return TRUE; } else { DEBUG_TLOCK_ACCESS(12, wid); @@ -404,8 +422,6 @@ UNLOCK(ThreadHandlesLock); return FALSE; } - pthread_mutex_lock(&(ThreadHandle[tid].tlock)); - DEBUG_TLOCK_ACCESS(13, tid); UNLOCK(ThreadHandlesLock); /* make sure this lock is accessible */ if (pthread_join(ThreadHandle[tid].handle, NULL) < 0) { @@ -421,7 +437,12 @@ { Int tid = IntegerOfTerm(Deref(ARG1)); - thread_die(tid, TRUE); + LOCK(ThreadHandlesLock); + ThreadHandle[tid].zombie = FALSE; + ThreadHandle[tid].in_use = FALSE; + DEBUG_TLOCK_ACCESS(32, tid); + pthread_mutex_unlock(&(ThreadHandle[tid].tlock)); + UNLOCK(ThreadHandlesLock); return TRUE; } @@ -445,6 +466,12 @@ } static Int +p_thread_detached(void) +{ + return Yap_unify(ARG1,ThreadHandle[worker_id].tdetach); +} + +static Int p_thread_exit(void) { thread_die(worker_id, FALSE); @@ -699,8 +726,15 @@ } static Int +p_thread_self_lock(void) +{ /* '$thread_unlock' */ + pthread_mutex_lock(&(ThreadHandle[worker_id].tlock)); + return Yap_unify(ARG1,MkIntegerTerm(worker_id)); +} + +static Int p_thread_unlock(void) -{ /* '$thread_self_lock' */ +{ /* '$thread_unlock' */ Int wid = IntegerOfTerm(Deref(ARG1)); DEBUG_TLOCK_ACCESS(19, wid); pthread_mutex_unlock(&(ThreadHandle[wid].tlock)); @@ -715,11 +749,14 @@ Yap_InitCPred("$thread_new_tid", 1, p_thread_new_tid, HiddenPredFlag); Yap_InitCPred("$create_thread", 6, p_create_thread, HiddenPredFlag); Yap_InitCPred("$thread_self", 1, p_thread_self, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$thread_status_lock", 1, p_thread_status_lock, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$thread_status_unlock", 1, p_thread_status_unlock, SafePredFlag|HiddenPredFlag); Yap_InitCPred("$thread_zombie_self", 1, p_thread_zombie_self, SafePredFlag|HiddenPredFlag); Yap_InitCPred("$thread_join", 1, p_thread_join, HiddenPredFlag); Yap_InitCPred("$thread_destroy", 1, p_thread_destroy, HiddenPredFlag); Yap_InitCPred("thread_yield", 0, p_thread_yield, 0); Yap_InitCPred("$detach_thread", 1, p_thread_detach, HiddenPredFlag); + Yap_InitCPred("$thread_detached", 1, p_thread_detached, HiddenPredFlag); Yap_InitCPred("$thread_exit", 0, p_thread_exit, HiddenPredFlag); Yap_InitCPred("thread_setconcurrency", 2, p_thread_set_concurrency, 0); Yap_InitCPred("$valid_thread", 1, p_valid_thread, HiddenPredFlag); @@ -739,6 +776,7 @@ Yap_InitCPred("$nof_threads_created", 1, p_nof_threads_created, SafePredFlag|HiddenPredFlag); Yap_InitCPred("$thread_sleep", 4, p_thread_sleep, SafePredFlag|HiddenPredFlag); Yap_InitCPred("$thread_runtime", 1, p_thread_runtime, SafePredFlag|HiddenPredFlag); + Yap_InitCPred("$thread_self_lock", 1, p_thread_self_lock, SafePredFlag); Yap_InitCPred("$thread_unlock", 1, p_thread_unlock, SafePredFlag); } Index: tracer.c =================================================================== RCS file: /cvsroot/yap/C/tracer.c,v retrieving revision 1.161 retrieving revision 1.162 diff -u -r1.161 -r1.162 --- tracer.c 8 Jun 2008 08:05:11 -0000 1.161 +++ tracer.c 6 Aug 2008 17:32:20 -0000 1.162 @@ -66,7 +66,7 @@ omax_write_args = max_write_args; max_depth = 5; max_list = 5; - max_write_args = 5; + max_write_args = 10; Yap_plwrite(args[i], TracePutchar, Handle_vars_f); max_depth = omax_depth; max_list = omax_list; @@ -361,6 +361,12 @@ return(TRUE); } +static Int p_show_low_level_trace(void) +{ + fprintf(stderr,"Call counter=%lld\n",vsc_count); + return(TRUE); +} + #ifdef THREADS static Int p_start_low_level_trace2(void) { @@ -395,6 +401,7 @@ Yap_InitCPred("start_low_level_trace", 1, p_start_low_level_trace2, SafePredFlag); #endif Yap_InitCPred("stop_low_level_trace", 0, p_stop_low_level_trace, SafePredFlag); + Yap_InitCPred("show_low_level_trace", 0, p_show_low_level_trace, SafePredFlag); Yap_InitCPred("vsc_wait", 0, p_vsc_wait, SafePredFlag); } Index: utilpreds.c =================================================================== RCS file: /cvsroot/yap/C/utilpreds.c,v retrieving revision 1.63 retrieving revision 1.64 diff -u -r1.63 -r1.64 --- utilpreds.c 10 May 2008 23:24:12 -0000 1.63 +++ utilpreds.c 6 Aug 2008 17:32:20 -0000 1.64 @@ -24,6 +24,9 @@ #include "yapio.h" #include "eval.h" #include "attvar.h" +#ifdef HAVE_STRING_H +#include "string.h" +#endif typedef struct { Term old_var; @@ -168,9 +171,30 @@ INC_DBREF_COUNT(entryref); UNLOCK(entryref->lock); } + *ptf++ = d0; /* you can just copy other extensions. */ } #endif - *ptf++ = d0; /* you can just copy other extensions. */ + else if (!share) { + UInt sz; + + *ptf++ = AbsAppl(H); /* you can just copy other extensions. */ + /* make sure to copy floats */ + if (f== FunctorDouble) { + sz = sizeof(Float)/sizeof(CELL)+2; + } else if (f== FunctorLongInt) { + sz = 3; + } else { + CELL *pt = ap2+1; + sz = 2+sizeof(MP_INT)+(((MP_INT *)(pt+1))->_mp_alloc*sizeof(mp_limb_t)); + } + if (H+sz > ASP - 2048) { + goto overflow; + } + memcpy((void *)H, (void *)ap2, sz*sizeof(CELL)); + H += sz; + } else { + *ptf++ = d0; /* you can just copy other extensions. */ + } continue; } *ptf = AbsAppl(H); @@ -252,7 +276,7 @@ goto trail_overflow; } } - Bind_Global(ptd0, ptf[-1]); + Bind(ptd0, ptf[-1]); } } else { #endif @@ -264,7 +288,7 @@ goto trail_overflow; } } - Bind_Global(ptd0, (CELL)ptf); + Bind(ptd0, (CELL)ptf); ptf++; #ifdef COROUTINING } @@ -482,6 +506,11 @@ return CopyTerm(inp, 0, TRUE, TRUE); } +Term +Yap_CopyTermNoShare(Term inp) { + return CopyTerm(inp, 0, FALSE, FALSE); +} + static Int p_copy_term(void) /* copy term t to a new instance */ { |
|
From: Vitor S. C. <vs...@us...> - 2008-08-06 17:32:20
|
Update of /cvsroot/yap/pl In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv31799/pl Modified Files: threads.yap Log Message: more thread fixes Index: threads.yap =================================================================== RCS file: /cvsroot/yap/pl/threads.yap,v retrieving revision 1.75 retrieving revision 1.76 diff -u -r1.75 -r1.76 --- threads.yap 8 Jun 2008 16:55:23 -0000 1.75 +++ threads.yap 6 Aug 2008 17:32:22 -0000 1.76 @@ -46,36 +46,29 @@ '$close_thread'(Status, Detached) :- '$thread_zombie_self'(Id0), !, - '$close_thread'(Status, Detached, Id0). -'$close_thread'(Status, Detached) :- !, - % zombie_self failed as it the thread was messages pending - '$close_thread'(Status, Detached). - - -'$close_thread'('$thread_finished'(Status), Detached, Id0) :- !, - recorda('$thread_exit_status', [Id0|Status], _), - '$run_at_thread_exit'(Id0), - ( Detached == true -> - '$erase_thread_info'(Id0) - ; true - ). -% format(user_error,'closing thread ~w~n',[v([Id0|Status])]). -'$close_thread'(Exception, Detached, Id0) :- - ( recorded('$thread_exit_status', [Id0|_], R), erase(R), fail - ; recorda('$thread_exit_status', [Id0|exception(Exception)], _) - ), + '$record_thread_status'(Id0,Status), '$run_at_thread_exit'(Id0), - ( Detached == true -> - '$erase_thread_info'(Id0) - ; true - ). + '$erase_thread_info'(Id0). +'$close_thread'(Status) :- + '$close_thread'(Status). + +% OK, we want to ensure atomicity here in case we get an exception while we +% are closing down the thread. +'$record_thread_status'(Id0,Stat) :- !, + (recorded('$thread_exit_status', [Id0|_], R), erase(R), fail + ; + Stat = '$thread_finished'(Status) -> + recorda('$thread_exit_status', [Id0|Status], _) + ; + recorda('$thread_exit_status', [Id0|exception(Stat)], _) + ). thread_create(Goal) :- G0 = thread_create(Goal), '$check_callable'(Goal, G0), '$thread_options'([detached(true)], [], Stack, Trail, System, Detached, AtExit, G0), '$thread_new_tid'(Id), - '$erase_thread_info'(Id), +% '$erase_thread_info'(Id), % this should not be here '$record_thread_info'(Id, [Stack, Trail, System], Detached, AtExit), '$create_thread_mq'(Id), ( @@ -92,7 +85,7 @@ ( nonvar(Id) -> '$do_error'(type_error(variable,Id),G0) ; true ), '$thread_options'([], [], Stack, Trail, System, Detached, AtExit, G0), '$thread_new_tid'(Id), - '$erase_thread_info'(Id), +% '$erase_thread_info'(Id), % this should not be here '$record_thread_info'(Id, [Stack, Trail, System], Detached, AtExit), '$create_thread_mq'(Id), ( @@ -109,7 +102,7 @@ ( nonvar(Id) -> '$do_error'(type_error(variable,Id),G0) ; true ), '$thread_options'(Options, Alias, Stack, Trail, System, Detached, AtExit, G0), '$thread_new_tid'(Id), - '$erase_thread_info'(Id), +% '$erase_thread_info'(Id), % this should not be here ( var(Alias) -> '$record_thread_info'(Id, [Stack, Trail, System], Detached, AtExit) ; '$record_thread_info'(Id, Alias, [Stack, Trail, System], Detached, AtExit, G0) @@ -124,10 +117,6 @@ ). '$erase_thread_info'(Id) :- - recorded('$thread_exit_status', [Id|_], R), - erase(R), - fail. -'$erase_thread_info'(Id) :- recorded('$thread_alias',[Id|_],R), erase(R), fail. @@ -136,10 +125,6 @@ erase(R), fail. '$erase_thread_info'(Id) :- - recorded('$thread_detached', [Id|_], R), - erase(R), - fail. -'$erase_thread_info'(Id) :- recorded('$thread_at_exit', [Id|_], R), erase(R), fail. @@ -147,6 +132,9 @@ recorded('$thread_exit_hook', [Id|_], R), erase(R), fail. +'$erase_thread_info'(Id) :- + message_queue_destroy(Id), + fail. '$erase_thread_info'(_). @@ -190,7 +178,6 @@ '$record_thread_info'(Id, Sizes, Detached, AtExit) :- recorda('$thread_sizes', [Id|Sizes], _), - recorda('$thread_detached', [Id|Detached], _), ( AtExit == true -> true ; recorda('$thread_at_exit', [Id|AtExit], _) @@ -311,8 +298,8 @@ '$check_thread_or_alias'(Id, thread_join(Id, Status)), '$thread_id_alias'(Id0, Id), '$thread_join'(Id0), - recorded('$thread_exit_status', [Id0|Status], _), - '$erase_thread_info'(Id0), + recorded('$thread_exit_status', [Id0|Status], R), + erase(R), '$thread_destroy'(Id0). thread_cancel(Id) :- @@ -324,16 +311,7 @@ thread_detach(Id) :- '$check_thread_or_alias'(Id, thread_detach(Id)), '$thread_id_alias'(Id0, Id), - ( - recorded('$thread_detached', [Id0|_], R), - erase(R), - fail - ; - recordz('$thread_detached', [Id0|true], _), - fail - ; - '$detach_thread'(Id0) - ), + '$detach_thread'(Id0), ( recorded('$thread_exit_status', [Id0|_], _) -> '$erase_thread_info'(Id0), '$thread_destroy'(Id0) @@ -355,8 +333,7 @@ recorded('$thread_exit_hook',[Id0|Hook],R), erase(R), catch(once(Hook),_,fail), fail. -'$run_at_thread_exit'(Id0) :- - message_queue_destroy(Id0). +'$run_at_thread_exit'(_). thread_at_exit(Goal) :- '$check_callable'(Goal,thread_at_exit(Goal)), @@ -639,8 +616,8 @@ erase(R), '$cond_destroy'(Cond), '$destroy_mutex'(Mutex), - '$unlock_mutex'(QMutex), - '$clean_mqueue'(QKey). + '$clean_mqueue'(QKey), + '$unlock_mutex'(QMutex). message_queue_destroy(Queue) :- '$global_queue_mutex'(QMutex), '$unlock_mutex'(QMutex), @@ -713,7 +690,7 @@ '$lock_mutex'(Mutex), '$unlock_mutex'(QMutex), recordz(Key,Term,_), - '$cond_broadcast'(Cond), + '$cond_signal'(Cond), '$unlock_mutex'(Mutex). thread_send_message(Queue, Term) :- '$global_queue_mutex'(QMutex), @@ -863,7 +840,7 @@ ; Status = running ). '$thread_property'(Id, detached(Detached)) :- - recorded('$thread_detached', [Id|Detached], _). + '$thread_detached'(Detached). '$thread_property'(Id, at_exit(AtExit)) :- recorded('$thread_at_exit', [Id|AtExit], _). '$thread_property'(Id, stack(Stack)) :- |
|
From: Vitor S. C. <vs...@us...> - 2008-08-06 17:32:20
|
Update of /cvsroot/yap/library In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv31799/library Modified Files: swi.yap Log Message: more thread fixes Index: swi.yap =================================================================== RCS file: /cvsroot/yap/library/swi.yap,v retrieving revision 1.29 retrieving revision 1.30 diff -u -r1.29 -r1.30 --- swi.yap 22 Jul 2008 23:34:50 -0000 1.29 +++ swi.yap 6 Aug 2008 17:32:21 -0000 1.30 @@ -70,6 +70,9 @@ swi_predicate_table(_,min_list(X,Y),lists,min_list(X,Y)). swi_predicate_table(_,max_list(X,Y),lists,max_list(X,Y)). swi_predicate_table(_,memberchk(X,Y),lists,memberchk(X,Y)). +swi_predicate_table(_,flatten(X,Y),lists,flatten(X,Y)). +swi_predicate_table(_,select(X,Y,Z),lists,select(X,Y,Z)). +swi_predicate_table(_,sublist(X,Y),lists,sublist(X,Y)). swi_predicate_table(_,hash_term(X,Y),terms,term_hash(X,Y)). swi_predicate_table(_,term_hash(X,Y),terms,term_hash(X,Y)). swi_predicate_table(_,subsumes(X,Y),terms,subsumes(X,Y)). @@ -397,6 +400,71 @@ call(Goal, Elem1, Elem2, Elem3, Elem4), maplist2(Tail1, Tail2, Tail3, Tail4, Goal). +======= +% copied from SWI's boot/apply library +:- module_transparent + prolog:maplist/2, + maplist2/2, + prolog:maplist/3, + maplist2/3, + prolog:maplist/4, + maplist2/4, + prolog:maplist/5, + maplist2/5. + +% maplist(:Goal, +List) +% +% True if Goal can succesfully be applied on all elements of List. +% Arguments are reordered to gain performance as well as to make +% the predicate deterministic under normal circumstances. + +prolog:maplist(Goal, List) :- + maplist2(List, Goal). + +maplist2([], _). +maplist2([Elem|Tail], Goal) :- + call(Goal, Elem), + maplist2(Tail, Goal). + +% maplist(:Goal, ?List1, ?List2) +% +% True if Goal can succesfully be applied to all succesive pairs +% of elements of List1 and List2. + +prolog:maplist(Goal, List1, List2) :- + maplist2(List1, List2, Goal). + +maplist2([], [], _). +maplist2([Elem1|Tail1], [Elem2|Tail2], Goal) :- + call(Goal, Elem1, Elem2), + maplist2(Tail1, Tail2, Goal). + +% maplist(:Goal, ?List1, ?List2, ?List3) +% +% True if Goal can succesfully be applied to all succesive triples +% of elements of List1..List3. + +prolog:maplist(Goal, List1, List2, List3) :- + maplist2(List1, List2, List3, Goal). + +maplist2([], [], [], _). +maplist2([Elem1|Tail1], [Elem2|Tail2], [Elem3|Tail3], Goal) :- + call(Goal, Elem1, Elem2, Elem3), + maplist2(Tail1, Tail2, Tail3, Goal). + +% maplist(:Goal, ?List1, ?List2, ?List3, List4) +% +% True if Goal can succesfully be applied to all succesive +% quadruples of elements of List1..List4 + +prolog:maplist(Goal, List1, List2, List3, List4) :- + maplist2(List1, List2, List3, List4, Goal). + +maplist2([], [], [], [], _). +maplist2([Elem1|Tail1], [Elem2|Tail2], [Elem3|Tail3], [Elem4|Tail4], Goal) :- + call(Goal, Elem1, Elem2, Elem3, Elem4), + maplist2(Tail1, Tail2, Tail3, Tail4, Goal). + prolog:compile_aux_clauses([]). prolog:compile_aux_clauses([(:- G)|Cls]) :- prolog_load_context(module, M), |
|
From: Vitor S. C. <vs...@us...> - 2008-08-06 17:32:19
|
Update of /cvsroot/yap/H In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv31799/H Modified Files: Heap.h Yapproto.h Log Message: more thread fixes Index: Heap.h =================================================================== RCS file: /cvsroot/yap/H/Heap.h,v retrieving revision 1.133 retrieving revision 1.134 diff -u -r1.133 -r1.134 --- Heap.h 22 Jul 2008 23:34:49 -0000 1.133 +++ Heap.h 6 Aug 2008 17:32:20 -0000 1.134 @@ -202,6 +202,7 @@ int been_here2; #endif pthread_mutex_t tlock; + pthread_mutex_t tlock_status; #if HAVE_GETRUSAGE struct timeval *start_of_timesp; struct timeval *last_timep; Index: Yapproto.h =================================================================== RCS file: /cvsroot/yap/H/Yapproto.h,v retrieving revision 1.88 retrieving revision 1.89 diff -u -r1.88 -r1.89 --- Yapproto.h 24 Jul 2008 16:02:02 -0000 1.88 +++ Yapproto.h 6 Aug 2008 17:32:21 -0000 1.89 @@ -343,6 +343,7 @@ /* utilpreds.c */ Term STD_PROTO(Yap_CopyTerm,(Term)); +Term STD_PROTO(Yap_CopyTermNoShare,(Term)); int STD_PROTO(Yap_SizeGroundTerm,(Term, int)); void STD_PROTO(Yap_InitUtilCPreds,(void)); |
|
From: Vitor S. C. <vs...@us...> - 2008-08-06 17:32:18
|
Update of /cvsroot/yap/LGPL In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv31799/LGPL Modified Files: apply_macros.pl Log Message: more thread fixes Index: apply_macros.pl =================================================================== RCS file: /cvsroot/yap/LGPL/apply_macros.pl,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- apply_macros.pl 15 May 2008 13:41:46 -0000 1.2 +++ apply_macros.pl 6 Aug 2008 17:32:21 -0000 1.3 @@ -179,7 +179,7 @@ % @tbd Should we only apply if optimization is enabled (-O)? -user:goal_expansion(GoalIn, GoalOut) :- +user:goal_expansion(GoalIn, M, GoalOut) :- \+ current_prolog_flag(xref, true), - expand_apply(GoalIn, GoalOut). + expand_apply(M:GoalIn, GoalOut). |
|
From: Vitor S. C. <vs...@us...> - 2008-08-06 17:32:10
|
Update of /cvsroot/yap In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv31799 Modified Files: changes-5.1.html Log Message: more thread fixes |
|
From: Vitor S. C. <vs...@us...> - 2008-08-06 10:15:46
|
Update of /cvsroot/yap/pl In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv14183/pl Modified Files: boot.yap Log Message: fix expand_term to list at end_of_file Index: boot.yap =================================================================== RCS file: /cvsroot/yap/pl/boot.yap,v retrieving revision 1.191 retrieving revision 1.192 diff -u -r1.191 -r1.192 --- boot.yap 6 Aug 2008 00:56:11 -0000 1.191 +++ boot.yap 6 Aug 2008 10:15:48 -0000 1.192 @@ -288,8 +288,12 @@ '$command'(C,VL,Con) :- ( (Con = top ; var(C) ; C = [_|_]) -> '$execute_command'(C,VL,Con,C), ! ; + % do term expansion expand_term(C, EC), - '$execute_commands'(EC,VL,Con,C) + % execute a list of commands + '$execute_commands'(EC,VL,Con,C), + % succeed only if the *original* was at end of file. + C == end_of_file ). % @@ -297,7 +301,7 @@ % '$execute_commands'(V,_,_,Source) :- var(V), !, '$do_error'(instantiation_error,meta_call(Source)). - '$execute_commands'([],_,_,_) :- !, fail. + '$execute_commands'([],_,_,_) :- !. '$execute_commands'([C|Cs],VL,Con,Source) :- !, ( '$execute_command'(C,VL,Con,Source), @@ -322,15 +326,13 @@ '$execute_command'(Command,_,_,_) :- nb_getval('$if_skip_mode',skip), \+ '$if_directive'(Command), - !, - fail. + !. '$execute_command'((:-G),_,Option,_) :- !, '$current_module'(M), % allow user expansion expand_term((:- G), O), O = (:- G1), - '$process_directive'(G1, Option, M), - fail. + '$process_directive'(G1, Option, M). '$execute_command'((?-G),V,_,Source) :- !, '$execute_command'(G,V,top,Source). '$execute_command'(G,V,Option,Source) :- |
|
From: Vitor S. C. <vs...@us...> - 2008-08-06 00:56:05
|
Update of /cvsroot/yap/pl In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv12640/pl Modified Files: boot.yap modules.yap preds.yap Log Message: fixes to module expansion Index: boot.yap =================================================================== RCS file: /cvsroot/yap/pl/boot.yap,v retrieving revision 1.190 retrieving revision 1.191 diff -u -r1.190 -r1.191 --- boot.yap 22 Jul 2008 23:34:50 -0000 1.190 +++ boot.yap 6 Aug 2008 00:56:11 -0000 1.191 @@ -304,8 +304,7 @@ fail ; '$execute_commands'(Cs,VL,Con,Source) - ), - fail. + ). '$execute_commands'(C,VL,Con,Source) :- '$execute_command'(C,VL,Con,Source). @@ -781,16 +780,16 @@ '$call'(Y,CP,G0,M). '$call'((X->Y),CP,G0,M) :- !, ( - '$execute'(X) + '$call'(X,CP,G0,M) -> '$call'(Y,CP,G0,M) ). '$call'((X*->Y),CP,G0,M) :- !, - '$execute'(X), + '$call'(X,CP,G0,M), '$call'(Y,CP,G0,M). '$call'((X->Y; Z),CP,G0,M) :- !, ( - '$execute'(X) + '$call'(X,CP,G0,M) -> '$call'(Y,CP,G0,M) ; @@ -799,7 +798,7 @@ '$call'((X*->Y; Z),CP,G0,M) :- !, ( yap_hacks:current_choicepoint(DCP), - '$execute'(X), + '$call'(X,CP,G0,M), yap_hacks:cut_at(DCP), '$call'(Y,CP,G0,M) ; @@ -813,16 +812,16 @@ ). '$call'((X->Y| Z),CP,G0,M) :- !, ( - '$execute'(X) + '$call'(X,CP,G0,M) -> - '$call'(Y,CP,G0,M) + '$call'(Y,CP,G0,M) ; - '$call'(Z,CP,G0,M) + '$call'(Z,CP,G0,M) ). '$call'((X*->Y| Z),CP,G0,M) :- !, ( yap_hacks:current_choicepoint(DCP), - '$execute'(X), + '$call'(X,CP,G0,M), yap_hacks:cut_at(DCP), '$call'(Y,CP,G0,M) ; @@ -835,9 +834,9 @@ '$call'(B,CP,G0,M) ). '$call'(\+ X, _CP, _G0, M) :- !, - \+ '$execute'(M:X). + \+ '$call'(X,CP,G0,M). '$call'(not(X), _CP, _G0, M) :- !, - \+ '$execute'(M:X). + \+ '$call'(X,CP,G0,M). '$call'(!, CP, _,_) :- !, '$$cut_by'(CP). '$call'([A|B], _, _, M) :- !, Index: modules.yap =================================================================== RCS file: /cvsroot/yap/pl/modules.yap,v retrieving revision 1.84 retrieving revision 1.85 diff -u -r1.84 -r1.85 --- modules.yap 22 Jul 2008 23:34:50 -0000 1.84 +++ modules.yap 6 Aug 2008 00:56:11 -0000 1.85 @@ -190,6 +190,7 @@ % A5: context module (this is the current context % A6: head module (this is the one used in compiling and accessing). % +% '$module_expansion'((H:-B),(H:-B1),(H:-BO),M,HM) :- !, '$is_mt'(M, H, B, IB, MM), '$module_u_vars'(H,UVars,M), % collect head variables in Index: preds.yap =================================================================== RCS file: /cvsroot/yap/pl/preds.yap,v retrieving revision 1.80 retrieving revision 1.81 diff -u -r1.80 -r1.81 --- preds.yap 22 Jul 2008 23:34:50 -0000 1.80 +++ preds.yap 6 Aug 2008 00:56:11 -0000 1.81 @@ -45,7 +45,8 @@ '$assert'((H:-G),M1,Where,R,P) :- !, '$assert_clause'(H, G, M1, Where, R, P). '$assert'(H,M1,Where,R,_) :- - '$assert_fact'(H, M1, Where, R). + strip_module(M1:H, HM, H1), + '$assert_fact'(H1, HM, Where, R). '$assert_clause'(H, _, _, _, _, P) :- var(H), !, '$do_error'(instantiation_error,P). @@ -75,8 +76,8 @@ '$assert_clause2'(HI,BI,Mod,Where,R,P) :- - '$expand_clause'((HI :- BI),C0,C,Mod), - '$assert_clause3'(C0,C,Mod,Where,R,P). + '$expand_clause'((HI :- BI),C0,C,Mod,HM), + '$assert_clause3'(C0,C,HM,Where,R,P). '$assert_clause3'(C0,C,Mod,Where,R,P) :- '$check_head_and_body'(C,H,B,P), @@ -106,8 +107,8 @@ '$assert_dynamic'((H:-G),M1,Where,R,P) :- var(H), !, '$do_error'(instantiation_error,P). '$assert_dynamic'(CI,Mod,Where,R,P) :- - '$expand_clause'(CI,C0,C,Mod), - '$assert_dynamic2'(C0,C,Mod,Where,R,P). + '$expand_clause'(CI,C0,C,Mod,HM), + '$assert_dynamic2'(C0,C,HM,Where,R,P). '$assert_dynamic2'(C0,C,Mod,Where,R,P) :- '$check_head_and_body'(C,H,B,P), @@ -151,15 +152,15 @@ '$assert_static'((H:-G),M1,Where,R,P) :- var(H), !, '$do_error'(instantiation_error,P). '$assert_static'(CI,Mod,Where,R,P) :- - '$expand_clause'(CI,C0,C,Mod), + '$expand_clause'(CI,C0,C,Mod, HM), '$check_head_and_body'(C,H,B,P), - ( '$is_dynamic'(H, Mod) -> - '$do_error'(permission_error(modify,dynamic_procedure,Na/Ar),P) + ( '$is_dynamic'(H, HM) -> + '$do_error'(permission_error(modify,dynamic_procedure,HM:Na/Ar),P) ; - '$undefined'(H,Mod), get_value('$full_iso',true) -> - functor(H,Na,Ar), '$dynamic'(Na/Ar, Mod), '$assertat_d'(Where,H,B,C0,Mod,R) + '$undefined'(H,HM), get_value('$full_iso',true) -> + functor(H,Na,Ar), '$dynamic'(Na/Ar, HM), '$assertat_d'(Where,H,B,C0,HM,R) ; - '$assert1'(Where,C,C0,Mod,H) + '$assert1'(Where,C,C0,HM,H) ). @@ -736,13 +737,16 @@ '$do_error'(domain_error(semantics_indicator,Sem),Goal). -'$expand_clause'(C0,C1,C2,Mod) :- - '$module_expansion'(C0, C1, C2, Mod, Mod), +'$expand_clause'((H:-B),C1,C2,Mod,HM) :- !, + strip_module(Mod:H, HM, H1), + '$module_expansion'((H1:-B), C1, C2, Mod, HM), ( get_value('$strict_iso',on) -> '$check_iso_strict_clause'(C1) ; true ). +'$expand_clause'(H,H1,H1,Mod,HM) :- + strip_module(Mod:H, HM, H1). '$public'(X, _) :- var(X), !, '$do_error'(instantiation_error,public(X)). |
|
From: Vitor S. C. <vs...@us...> - 2008-08-01 23:02:26
|
Update of /cvsroot/yap/library/yap2swi In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv11953/library/yap2swi Modified Files: yap2swi.c Log Message: swi compatibility support Index: yap2swi.c =================================================================== RCS file: /cvsroot/yap/library/yap2swi/yap2swi.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -r1.24 -r1.25 --- yap2swi.c 24 Jul 2008 16:02:04 -0000 1.24 +++ yap2swi.c 1 Aug 2008 21:44:25 -0000 1.25 @@ -13,9 +13,12 @@ #include <stdlib.h> #include <string.h> #include <stdio.h> +#include <wchar.h> +#include <assert.h> + -#include <SWI-Prolog.h> #include <SWI-Stream.h> +#include <SWI-Prolog.h> [...1180 lines suppressed...] +} + + +void +Sseterr(IOSTREAM *s, int flag, const char *message) +{ if ( s->message ) + { free(s->message); + s->message = NULL; + s->flags &= ~SIO_CLEARERR; + } + if ( message ) + { s->flags |= flag; + s->message = strdup(message); + } else + { s->flags &= ~flag; + } +} |
|
From: Vitor S. C. <vs...@us...> - 2008-08-01 21:44:19
|
Update of /cvsroot/yap/include In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv11953/include Modified Files: SWI-Prolog.h SWI-Stream.h YapInterface.h Log Message: swi compatibility support Index: SWI-Prolog.h =================================================================== RCS file: /cvsroot/yap/include/SWI-Prolog.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- SWI-Prolog.h 24 Jul 2008 16:02:02 -0000 1.3 +++ SWI-Prolog.h 1 Aug 2008 21:44:25 -0000 1.4 @@ -104,6 +104,19 @@ #define PL_INT (20) /* int */ #define PL_LONG (21) /* long */ #define PL_DOUBLE (22) /* double */ +#define PL_NCHARS (23) /* unsigned, const char * */ +#define PL_UTF8_CHARS (24) /* const char * */ +#define PL_UTF8_STRING (25) /* const char * */ +#define PL_INT64 (26) /* int64_t */ +#define PL_NUTF8_CHARS (27) /* unsigned, const char * */ +#define PL_NUTF8_CODES (29) /* unsigned, const char * */ +#define PL_NUTF8_STRING (30) /* unsigned, const char * */ +#define PL_NWCHARS (31) /* unsigned, const wchar_t * */ +#define PL_NWCODES (32) /* unsigned, const wchar_t * */ +#define PL_NWSTRING (33) /* unsigned, const wchar_t * */ +#define PL_MBCHARS (34) /* const char * */ +#define PL_MBCODES (35) /* const char * */ +#define PL_MBSTRING (36) /* const char * */ #define CVT_ATOM 0x0001 #define CVT_STRING 0x0002 @@ -143,6 +156,21 @@ /* end from pl-itf.h */ + /******************************* + * CALL-BACK * + *******************************/ + +#ifdef PL_KERNEL +#define PL_Q_DEBUG 0x01 /* = TRUE for backward compatibility */ +#endif +#define PL_Q_NORMAL 0x02 /* normal usage */ +#define PL_Q_NODEBUG 0x04 /* use this one */ +#define PL_Q_CATCH_EXCEPTION 0x08 /* handle exceptions in C */ +#define PL_Q_PASS_EXCEPTION 0x10 /* pass to parent environment */ +#ifdef PL_KERNEL +#define PL_Q_DETERMINISTIC 0x20 /* call was deterministic */ +#endif + /* copied from old SICStus/SWI interface */ typedef void install_t; @@ -171,6 +199,8 @@ extern X_API int PL_get_long(term_t, long *); extern X_API int PL_get_list_chars(term_t, char **, unsigned); extern X_API int PL_get_module(term_t, module_t *); +extern X_API module_t PL_context(void); +extern X_API int PL_strip_module(term_t, module_t *, term_t); extern X_API atom_t PL_module_name(module_t); extern X_API module_t PL_new_module(atom_t); extern X_API int PL_get_name_arity(term_t, atom_t *, int *); @@ -205,39 +235,41 @@ extern X_API void PL_put_string_chars(term_t, const char *); extern X_API void PL_put_term(term_t, term_t); extern X_API void PL_put_variable(term_t); -extern X_API int PL_compare(term_t, term_t); +extern X_API int PL_compare(term_t, term_t); /* end PL_put_* functions =============================*/ /* begin PL_unify_* functions =============================*/ -extern X_API int PL_unify(term_t, term_t); -extern X_API int PL_unify_atom(term_t, atom_t); -extern X_API int PL_unify_atom_chars(term_t, const char *); -extern X_API int PL_unify_float(term_t, double); -extern X_API int PL_unify_int64(term_t, int64_t); -extern X_API int PL_unify_integer(term_t, long); -extern X_API int PL_unify_list(term_t, term_t, term_t); -extern X_API int PL_unify_list_chars(term_t, const char *); -extern X_API int PL_unify_nil(term_t); -extern X_API int PL_unify_pointer(term_t, void *); -extern X_API int PL_unify_string_chars(term_t, const char *); -extern X_API int PL_unify_term(term_t,...); -extern X_API int PL_unify_wchars(term_t, int, size_t, const pl_wchar_t *); +extern X_API int PL_unify(term_t, term_t); +extern X_API int PL_unify_atom(term_t, atom_t); +extern X_API int PL_unify_atom_chars(term_t, const char *); +extern X_API int PL_unify_atom_nchars(term_t, size_t len, const char *); +extern X_API int PL_unify_float(term_t, double); +extern X_API int PL_unify_functor(term_t, functor_t); +extern X_API int PL_unify_int64(term_t, int64_t); +extern X_API int PL_unify_integer(term_t, long); +extern X_API int PL_unify_list(term_t, term_t, term_t); +extern X_API int PL_unify_list_chars(term_t, const char *); +extern X_API int PL_unify_nil(term_t); +extern X_API int PL_unify_pointer(term_t, void *); +extern X_API int PL_unify_string_chars(term_t, const char *); +extern X_API int PL_unify_term(term_t,...); +extern X_API int PL_unify_wchars(term_t, int, size_t, const pl_wchar_t *); /* end PL_unify_* functions =============================*/ /* begin PL_is_* functions =============================*/ -extern X_API int PL_is_atom(term_t); -extern X_API int PL_is_atomic(term_t); -extern X_API int PL_is_compound(term_t); -extern X_API int PL_is_float(term_t); -extern X_API int PL_is_functor(term_t, functor_t); -extern X_API int PL_is_integer(term_t); -extern X_API int PL_is_list(term_t); -extern X_API int PL_is_number(term_t); -extern X_API int PL_is_string(term_t); -extern X_API int PL_is_variable(term_t); -extern X_API int PL_term_type(term_t); +extern X_API int PL_is_atom(term_t); +extern X_API int PL_is_atomic(term_t); +extern X_API int PL_is_compound(term_t); +extern X_API int PL_is_float(term_t); +extern X_API int PL_is_functor(term_t, functor_t); +extern X_API int PL_is_integer(term_t); +extern X_API int PL_is_list(term_t); +extern X_API int PL_is_number(term_t); +extern X_API int PL_is_string(term_t); +extern X_API int PL_is_variable(term_t); +extern X_API int PL_term_type(term_t); /* end PL_is_* functions =============================*/ extern X_API void PL_halt(int); -extern X_API int PL_initialise(int, char **); -extern X_API int PL_is_initialised(int *, char ***); +extern X_API int PL_initialise(int, char **); +extern X_API int PL_is_initialised(int *, char ***); extern X_API void PL_close_foreign_frame(fid_t); extern X_API void PL_discard_foreign_frame(fid_t); extern X_API fid_t PL_open_foreign_frame(void); @@ -257,6 +289,7 @@ extern X_API void PL_register_foreign_in_module(const char *, const char *, int, foreign_t (*)(void), int); extern X_API void PL_register_extensions(PL_extension *); extern X_API void PL_load_extensions(PL_extension *); +extern X_API int PL_handle_signals(void); extern X_API int PL_thread_self(void); extern X_API int PL_thread_attach_engine(const PL_thread_attr_t *); extern X_API int PL_thread_destroy_engine(void); @@ -274,6 +307,12 @@ extern X_API int Sprintf(char *,...); extern X_API int Sdprintf(char *,...); +#ifdef SIO_MAGIC /* defined from <SWI-Stream.h> */ +extern X_API int PL_unify_stream(term_t t, IOSTREAM *s); +extern X_API int PL_open_stream(term_t t, IOSTREAM *s); /* compat */ +extern X_API int PL_get_stream_handle(term_t t, IOSTREAM **s); +#endif + void swi_install(void); #endif /* _FLI_H_INCLUDED */ Index: SWI-Stream.h =================================================================== RCS file: /cvsroot/yap/include/SWI-Stream.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- SWI-Stream.h 24 Jul 2008 16:02:03 -0000 1.3 +++ SWI-Stream.h 1 Aug 2008 21:44:25 -0000 1.4 @@ -10,6 +10,10 @@ #endif #endif +#ifndef PL_EXPORT +#define PL_EXPORT(type) extern X_API type +#endif + /* This appears to make the wide-character support compile and work on HPUX 11.23. There really should be a cleaner way ... */ @@ -146,8 +150,78 @@ intptr_t reserved[3]; /* reserved for extension */ } IOSTREAM; -#define PL_EXPORT(type) extern X_API type +#define SmakeFlag(n) (1<<(n-1)) -extern X_API int PL_unify_stream(term_t t, IOSTREAM *s); +#define SIO_FBUF SmakeFlag(1) /* full buffering */ +#define SIO_LBUF SmakeFlag(2) /* line buffering */ +#define SIO_NBUF SmakeFlag(3) /* no buffering */ +#define SIO_FEOF SmakeFlag(4) /* end-of-file */ +#define SIO_FERR SmakeFlag(5) /* error ocurred */ +#define SIO_USERBUF SmakeFlag(6) /* buffer is from user */ +#define SIO_INPUT SmakeFlag(7) /* input stream */ +#define SIO_OUTPUT SmakeFlag(8) /* output stream */ +#define SIO_NOLINENO SmakeFlag(9) /* line no. info is void */ +#define SIO_NOLINEPOS SmakeFlag(10) /* line pos is void */ +#define SIO_STATIC SmakeFlag(11) /* Stream in static memory */ +#define SIO_RECORDPOS SmakeFlag(12) /* Maintain position */ +#define SIO_FILE SmakeFlag(13) /* Stream refers to an OS file */ +#define SIO_PIPE SmakeFlag(14) /* Stream refers to an OS pipe */ +#define SIO_NOFEOF SmakeFlag(15) /* don't set SIO_FEOF flag */ +#define SIO_TEXT SmakeFlag(16) /* text-mode operation */ +#define SIO_FEOF2 SmakeFlag(17) /* attempt to read past eof */ +#define SIO_FEOF2ERR SmakeFlag(18) /* Sfpasteof() */ +#define SIO_NOCLOSE SmakeFlag(19) /* Do not close on abort */ +#define SIO_APPEND SmakeFlag(20) /* opened in append-mode */ +#define SIO_UPDATE SmakeFlag(21) /* opened in update-mode */ +#define SIO_ISATTY SmakeFlag(22) /* Stream is a tty */ +#define SIO_CLOSING SmakeFlag(23) /* We are closing the stream */ +#define SIO_TIMEOUT SmakeFlag(24) /* We had a timeout */ +#define SIO_NOMUTEX SmakeFlag(25) /* Do not allow multi-thread access */ +#define SIO_ADVLOCK SmakeFlag(26) /* File locked with advisory lock */ +#define SIO_WARN SmakeFlag(27) /* Pending warning */ +#define SIO_CLEARERR SmakeFlag(28) /* Clear error after reporting */ +#define SIO_REPXML SmakeFlag(29) /* Bad char --> XML entity */ +#define SIO_REPPL SmakeFlag(30) /* Bad char --> Prolog \hex\ */ +#define SIO_BOM SmakeFlag(31) /* BOM was detected/written */ + +#define SIO_SEEK_SET 0 /* From beginning of file. */ +#define SIO_SEEK_CUR 1 /* From current position. */ +#define SIO_SEEK_END 2 /* From end of file. */ + +#define Sinput (&S__iob[0]) /* Stream Sinput */ +#define Soutput (&S__iob[1]) /* Stream Soutput */ +#define Serror (&S__iob[2]) /* Stream Serror */ + +#define Sgetchar() Sgetc(Sinput) +#define Sputchar(c) Sputc((c), Soutput) + +#define S__updatefilepos_getc(s, c) \ + ((s)->position ? S__fupdatefilepos_getc((s), (c)) \ + : (c)) + +#define Snpgetc(s) ((s)->bufp < (s)->limitp ? (int)(*(s)->bufp++)&0xff \ + : S__fillbuf(s)) +#define Sgetc(s) S__updatefilepos_getc((s), Snpgetc(s)) + +/* Control-operations */ +#define SIO_GETSIZE (1) /* get size of underlying object */ +#define SIO_GETFILENO (2) /* get underlying file (if any) */ +#define SIO_SETENCODING (3) /* modify encoding of stream */ + +/* Sread_pending() */ +#define SIO_RP_BLOCK 0x1 /* wait for new input */ + +PL_EXPORT(void) Sseterr(IOSTREAM *s, int which, const char *message); +PL_EXPORT(int) S__fillbuf(IOSTREAM *s); +PL_EXPORT(IOSTREAM *) Snew(void *handle, int flags, IOFUNCTIONS *functions); +PL_EXPORT(int) Sfileno(IOSTREAM *s); +PL_EXPORT(int) Sgetcode(IOSTREAM *s); +PL_EXPORT(int) Sungetc(int c, IOSTREAM *s); +PL_EXPORT(int) Sputcode(int c, IOSTREAM *s); +PL_EXPORT(int) Sfeof(IOSTREAM *s); +PL_EXPORT(int) Sfpasteof(IOSTREAM *s); +PL_EXPORT(int) Sferror(IOSTREAM *s); +PL_EXPORT(void) Sclearerr(IOSTREAM *s); +PL_EXPORT(void) Sseterr(IOSTREAM *s, int which, const char *message); #endif /*_PL_STREAM_H*/ Index: YapInterface.h =================================================================== RCS file: /cvsroot/yap/include/YapInterface.h,v retrieving revision 1.31 retrieving revision 1.32 diff -u -r1.31 -r1.32 --- YapInterface.h 24 Jul 2008 16:02:03 -0000 1.31 +++ YapInterface.h 1 Aug 2008 21:44:25 -0000 1.32 @@ -439,6 +439,9 @@ /* int YAP_CurrentModule() */ extern X_API YAP_Module PROTO(YAP_CreateModule,(YAP_Atom)); +/* int YAP_StripModule() */ +extern X_API YAP_Term PROTO(YAP_StripModule,(YAP_Term, YAP_Module *)); + /* int YAP_AtomGetHold(YAP_Atom) */ extern X_API int PROTO(YAP_AtomGetHold,(YAP_Atom)); |
|
From: Vitor S. C. <vs...@us...> - 2008-08-01 21:44:18
|
Update of /cvsroot/yap/C In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv11953/C Modified Files: c_interface.c Log Message: swi compatibility support Index: c_interface.c =================================================================== RCS file: /cvsroot/yap/C/c_interface.c,v retrieving revision 1.121 retrieving revision 1.122 diff -u -r1.121 -r1.122 --- c_interface.c 24 Jul 2008 16:02:00 -0000 1.121 +++ c_interface.c 1 Aug 2008 21:44:24 -0000 1.122 @@ -12,6 +12,9 @@ * * * Last rev: $Date$,$Author$ * * $Log$ +* Revision 1.122 2008/08/01 21:44:24 vsc +* swi compatibility support +* * Revision 1.121 2008/07/24 16:02:00 vsc * improve C-interface and SWI comptaibility a bit. * @@ -479,6 +482,7 @@ #endif X_API Term STD_PROTO(YAP_CurrentModule,(void)); X_API Term STD_PROTO(YAP_CreateModule,(Atom)); +X_API Term STD_PROTO(YAP_StripModule,(Term, Term *)); X_API int STD_PROTO(YAP_ThreadSelf,(void)); X_API int STD_PROTO(YAP_GetThreadRefCount,(int)); X_API void STD_PROTO(YAP_SetThreadRefCount,(int,int)); @@ -2291,6 +2295,39 @@ } +X_API Term +YAP_StripModule(Term t, Term *modp) +{ + Term tmod; + + tmod = CurrentModule; + restart: + if (IsVarTerm(t)) { + return 0L; + } else if (IsAtomTerm(t)) { + *modp = tmod; + return t; + } else if (IsApplTerm(t)) { + Functor fun = FunctorOfTerm(t); + if (fun == FunctorModule) { + tmod = ArgOfTerm(1, t); + if (IsVarTerm(tmod) ) { + return 0L; + } + if (!IsAtomTerm(tmod) ) { + return 0L; + } + t = ArgOfTerm(2, t); + goto restart; + } + *modp = tmod; + return t; + } + return 0L; +} + + + X_API int YAP_ThreadSelf(void) { |
|
From: Vitor S. C. <vs...@us...> - 2008-08-01 21:44:18
|
Update of /cvsroot/yap/docs In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv11953/docs Modified Files: yap.tex Log Message: swi compatibility support Index: yap.tex =================================================================== RCS file: /cvsroot/yap/docs/yap.tex,v retrieving revision 1.262 retrieving revision 1.263 diff -u -r1.262 -r1.263 --- yap.tex 24 Jul 2008 16:02:02 -0000 1.262 +++ yap.tex 1 Aug 2008 21:44:25 -0000 1.263 @@ -941,7 +941,8 @@ @section Running Prolog Files YAP can also be used to run Prolog files as scripts, at least in -Unix-like environments. A simple example is shown next: +Unix-like environments. A simple example is shown next (do not forget +that the shell comments are very important): @example @cartouche |
|
From: Vitor S. C. <vs...@us...> - 2008-07-27 22:31:35
|
Update of /cvsroot/yap In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv1380 Modified Files: changes-5.1.html config.h.in Log Message: fix bad syntax in config.h and first step to fix chr compilation. Index: config.h.in =================================================================== RCS file: /cvsroot/yap/config.h.in,v retrieving revision 1.50 retrieving revision 1.51 diff -u -r1.50 -r1.51 --- config.h.in 2 Apr 2008 15:41:46 -0000 1.50 +++ config.h.in 27 Jul 2008 22:31:36 -0000 1.51 @@ -124,10 +124,12 @@ in adtdefs.c */ #define FFIEEE 1 -#undef FFVAX /* manual */ +/*manual */ +#undef FFVAX /* Define the standard type of a float argument to a function */ -#define FAFloat double /* manual */ +/*manual */ +#define FAFloat double /* Set the minimum and default heap, trail and stack size */ #undef MinTrailSpace |
|
From: Vitor S. C. <vs...@us...> - 2008-07-27 22:31:31
|
Update of /cvsroot/yap/LGPL/chr In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv1380/LGPL/chr Modified Files: Makefile.in Log Message: fix bad syntax in config.h and first step to fix chr compilation. Index: Makefile.in =================================================================== RCS file: /cvsroot/yap/LGPL/chr/Makefile.in,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- Makefile.in 3 Apr 2008 13:26:38 -0000 1.6 +++ Makefile.in 27 Jul 2008 22:31:36 -0000 1.7 @@ -11,7 +11,7 @@ SHELL=@SHELL@ PLBASE=@PLBASE@ PLARCH=@PLARCH@ -PL=../../yap ../../startup +PL=LD_LIBRARY_PATH=system YAPSHAREDIR=`pwd`/../../library ../../yap ../../startup XPCEBASE=$(PLBASE)/xpce PKGDOC=$(PLBASE)/doc/packages PCEHOME=../../xpce @@ -48,9 +48,16 @@ $(srcdir)/Benchmarks/bool.chr $(srcdir)/Benchmarks/family.chr $(srcdir)/Benchmarks/fibonacci.chr $(srcdir)/Benchmarks/leq.chr $(srcdir)/Benchmarks/listdom.chr \ $(srcdir)/Benchmarks/chrdif.chr +GPLDIR= $(srcdir)/../../GPL +LGPLDIR= $(srcdir)/../../LGPL +EXTRALIBDIR= $(srcdir)/../../library +GPLLIBPL= $(EXTRALIBDIR)/aggregate.pl $(EXTRALIBDIR)/error.pl $(EXTRALIBDIR)/occurs.yap $(EXTRALIBDIR)/pairs.pl +LGPLLIBPL= $(EXTRALIBDIR)/maplist.pl +EXTRALIBPL= $(GPLLIBPL) $(LGPLLIBPL) + all: chr_translate.pl -chr_translate_bootstrap1.pl: $(srcdir)/chr_translate_bootstrap1.chr +chr_translate_bootstrap1.pl: $(srcdir)/chr_translate_bootstrap1.chr $(EXTRALIBPL) $(PL) -f -l chr_swi_bootstrap.yap \ -g "chr_compile_step1('$<','$@'),halt." \ -z 'halt(1).' @@ -85,6 +92,11 @@ chr.pl: chr_swi.pl cp $< $@ +$(GPLLIBPL): $(EXTRALIBDIR)/%: $(GPLDIR)/% + cp $< $@ +$(LGPLLIBPL): $(EXTRALIBDIR)/%: $(LGPLDIR)/% + cp $< $@ + install: chr_translate.pl guard_entailment.pl mkdir -p $(DESTDIR)$(CHRDIR) $(INSTALL) -m 644 $(LIBPL) $(DESTDIR)$(CHRDIR) |
|
From: Vitor S. C. <vs...@us...> - 2008-07-24 16:02:29
|
Update of /cvsroot/yap/docs In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv7875/docs Modified Files: yap.tex Log Message: improve C-interface and SWI comptaibility a bit. Index: yap.tex =================================================================== RCS file: /cvsroot/yap/docs/yap.tex,v retrieving revision 1.261 retrieving revision 1.262 diff -u -r1.261 -r1.262 --- yap.tex 23 Jul 2008 11:43:15 -0000 1.261 +++ yap.tex 24 Jul 2008 16:02:02 -0000 1.262 @@ -14142,16 +14142,35 @@ fails and generates an exception if @var{String} is not a valid string. @findex YAP_BufferToString (C-Interface function) +@findex YAP_NBufferToString (C-Interface function) +@findex YAP_WideBufferToString (C-Interface function) +@findex YAP_NWideBufferToString (C-Interface function) @findex YAP_BufferToAtomList (C-Interface function) +@findex YAP_NBufferToAtomList (C-Interface function) +@findex YAP_WideBufferToAtomList (C-Interface function) +@findex YAP_NWideBufferToAtomList (C-Interface function) +@findex YAP_BufferToDiffList (C-Interface function) +@findex YAP_NBufferToDiffList (C-Interface function) +@findex YAP_WideBufferToDiffList (C-Interface function) +@findex YAP_NWideBufferToDiffList (C-Interface function) The C-interface also includes utility routines to do the reverse, that -is, to copy a from a buffer to a list of character codes or to a list of -character atoms +is, to copy a from a buffer to a list of character codes, to a +difference list, or to a list of +character atoms. The routines work either on strings of characters or +strings of wide characters: @example YAP_Term YAP_BufferToString(char *@var{buf}) + YAP_Term YAP_NBufferToString(char *@var{buf}, size_t @var{len}) + YAP_Term YAP_WideBufferToString(wchar_t *@var{buf}) + YAP_Term YAP_NWideBufferToString(wchar_t *@var{buf}, size_t @var{len}) YAP_Term YAP_BufferToAtomList(char *@var{buf}) + YAP_Term YAP_NBufferToAtomList(char *@var{buf}, size_t @var{len}) + YAP_Term YAP_WideBufferToAtomList(wchar_t *@var{buf}) + YAP_Term YAP_NWideBufferToAtomList(wchar_t *@var{buf}, size_t @var{len}) @end example @noindent -The user-provided string must include a terminating null character. +Users are advised to use the @var{N} version of the routines. Otherwise, +the user-provided string must include a terminating null character. @findex YAP_ReadBuffer (C-Interface function) The C-interface function calls the parser on a sequence of characters |
|
From: Vitor S. C. <vs...@us...> - 2008-07-24 16:02:29
|
Update of /cvsroot/yap/C In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv7875/C Modified Files: adtdefs.c c_interface.c iopreds.c parser.c stdpreds.c Log Message: improve C-interface and SWI comptaibility a bit. Index: adtdefs.c =================================================================== RCS file: /cvsroot/yap/C/adtdefs.c,v retrieving revision 1.59 retrieving revision 1.60 diff -u -r1.59 -r1.60 --- adtdefs.c 17 Jun 2008 13:37:48 -0000 1.59 +++ adtdefs.c 24 Jul 2008 16:01:58 -0000 1.60 @@ -1009,7 +1009,20 @@ } Term -Yap_WStringToList(wchar_t *s) +Yap_NStringToList(char *s, size_t len) +{ + Term t; + char *cp = s + len; + + t = MkAtomTerm(AtomNil); + while (cp > s) { + t = MkPairTerm(MkIntegerTerm(*--cp), t); + } + return t; +} + +Term +Yap_WideStringToList(wchar_t *s) { Term t; wchar_t *cp = s + wcslen(s); @@ -1022,6 +1035,19 @@ } Term +Yap_NWideStringToList(wchar_t *s, size_t len) +{ + Term t; + wchar_t *cp = s + len; + + t = MkAtomTerm(AtomNil); + while (cp > s) { + t = MkPairTerm(MkIntegerTerm(*--cp), t); + } + return t; +} + +Term Yap_StringToDiffList(char *s, Term t) { register unsigned char *cp = (unsigned char *)s + strlen(s); @@ -1033,6 +1059,39 @@ } Term +Yap_NStringToDiffList(char *s, Term t, size_t len) +{ + register unsigned char *cp = (unsigned char *)s + len; + + while (cp > (unsigned char *)s) { + t = MkPairTerm(MkIntTerm(*--cp), t); + } + return t; +} + +Term +Yap_WideStringToDiffList(wchar_t *s, Term t) +{ + wchar_t *cp = s + wcslen(s); + + while (cp > s) { + t = MkPairTerm(MkIntegerTerm(*--cp), t); + } + return t; +} + +Term +Yap_NWideStringToDiffList(wchar_t *s, Term t, size_t len) +{ + wchar_t *cp = s + len; + + while (cp > s) { + t = MkPairTerm(MkIntegerTerm(*--cp), t); + } + return t; +} + +Term Yap_StringToListOfAtoms(char *s) { register Term t; @@ -1045,11 +1104,27 @@ so[0] = *--cp; t = MkPairTerm(MkAtomTerm(LookupAtom(so)), t); } - return (t); + return t; } Term -Yap_WStringToListOfAtoms(wchar_t *s) +Yap_NStringToListOfAtoms(char *s, size_t len) +{ + register Term t; + char so[2]; + register unsigned char *cp = (unsigned char *)s + len; + + so[1] = '\0'; + t = MkAtomTerm(AtomNil); + while (cp > (unsigned char *)s) { + so[0] = *--cp; + t = MkPairTerm(MkAtomTerm(LookupAtom(so)), t); + } + return t; +} + +Term +Yap_WideStringToListOfAtoms(wchar_t *s) { register Term t; wchar_t so[2]; @@ -1065,6 +1140,22 @@ } Term +Yap_NWideStringToListOfAtoms(wchar_t *s, size_t len) +{ + register Term t; + wchar_t so[2]; + wchar_t *cp = s + len; + + so[1] = '\0'; + t = MkAtomTerm(AtomNil); + while (cp > s) { + so[0] = *--cp; + t = MkPairTerm(MkAtomTerm(LookupWideAtom(so)), t); + } + return t; +} + +Term Yap_ArrayToList(register Term *tp, int nof) { register Term *pt = tp + nof; Index: c_interface.c =================================================================== RCS file: /cvsroot/yap/C/c_interface.c,v retrieving revision 1.120 retrieving revision 1.121 diff -u -r1.120 -r1.121 --- c_interface.c 11 Jul 2008 17:02:07 -0000 1.120 +++ c_interface.c 24 Jul 2008 16:02:00 -0000 1.121 @@ -12,6 +12,9 @@ * * * Last rev: $Date$,$Author$ * * $Log$ +* Revision 1.121 2008/07/24 16:02:00 vsc +* improve C-interface and SWI comptaibility a bit. +* * Revision 1.120 2008/07/11 17:02:07 vsc * fixes by Bart and Tom: mostly libraries but nasty one in indexing * compilation. @@ -415,7 +418,17 @@ X_API int STD_PROTO(YAP_StringToBuffer, (Term, char *, unsigned int)); X_API Term STD_PROTO(YAP_ReadBuffer, (char *,Term *)); X_API Term STD_PROTO(YAP_BufferToString, (char *)); +X_API Term STD_PROTO(YAP_NBufferToString, (char *, size_t)); +X_API Term STD_PROTO(YAP_WideBufferToString, (wchar_t *)); +X_API Term STD_PROTO(YAP_NWideBufferToString, (wchar_t *, size_t)); X_API Term STD_PROTO(YAP_BufferToAtomList, (char *)); +X_API Term STD_PROTO(YAP_NBufferToAtomList, (char *,size_t)); +X_API Term STD_PROTO(YAP_WideBufferToAtomList, (wchar_t *)); +X_API Term STD_PROTO(YAP_NWideBufferToAtomList, (wchar_t *, size_t)); +X_API Term STD_PROTO(YAP_BufferToDiffList, (char *, Term)); +X_API Term STD_PROTO(YAP_NBufferToDiffList, (char *, Term, size_t)); +X_API Term STD_PROTO(YAP_WideBufferToDiffList, (wchar_t *, Term)); +X_API Term STD_PROTO(YAP_NWideBufferToDiffList, (wchar_t *, Term, size_t)); X_API void STD_PROTO(YAP_Error,(int, Term, char *, ...)); X_API Term STD_PROTO(YAP_RunGoal,(Term)); X_API Term STD_PROTO(YAP_RunGoalOnce,(Term)); @@ -1236,6 +1249,45 @@ /* copy a string to a buffer */ X_API Term +YAP_NBufferToString(char *s, size_t len) +{ + Term t; + BACKUP_H(); + + t = Yap_NStringToList(s, len); + + RECOVER_H(); + return t; +} + +/* copy a string to a buffer */ +X_API Term +YAP_WideBufferToString(wchar_t *s) +{ + Term t; + BACKUP_H(); + + t = Yap_WideStringToList(s); + + RECOVER_H(); + return t; +} + +/* copy a string to a buffer */ +X_API Term +YAP_NWideBufferToString(wchar_t *s, size_t len) +{ + Term t; + BACKUP_H(); + + t = Yap_NWideStringToList(s, len); + + RECOVER_H(); + return t; +} + +/* copy a string to a buffer */ +X_API Term YAP_ReadBuffer(char *s, Term *tp) { Term t; @@ -1262,6 +1314,97 @@ return t; } +/* copy a string of size len to a buffer */ +X_API Term +YAP_NBufferToAtomList(char *s, size_t len) +{ + Term t; + BACKUP_H(); + + t = Yap_NStringToListOfAtoms(s, len); + + RECOVER_H(); + return t; +} + +/* copy a string to a buffer */ +X_API Term +YAP_WideBufferToAtomList(wchar_t *s) +{ + Term t; + BACKUP_H(); + + t = Yap_WideStringToListOfAtoms(s); + + RECOVER_H(); + return t; +} + +/* copy a string of size len to a buffer */ +X_API Term +YAP_NWideBufferToAtomList(wchar_t *s, size_t len) +{ + Term t; + BACKUP_H(); + + t = Yap_NWideStringToListOfAtoms(s, len); + + RECOVER_H(); + return t; +} + +/* copy a string to a buffer */ +X_API Term +YAP_BufferToDiffList(char *s, Term t0) +{ + Term t; + BACKUP_H(); + + t = Yap_StringToDiffList(s, t0); + + RECOVER_H(); + return t; +} + +/* copy a string of size len to a buffer */ +X_API Term +YAP_NBufferToDiffList(char *s, Term t0, size_t len) +{ + Term t; + BACKUP_H(); + + t = Yap_NStringToDiffList(s, t0, len); + + RECOVER_H(); + return t; +} + +/* copy a string to a buffer */ +X_API Term +YAP_WideBufferToDiffList(wchar_t *s, Term t0) +{ + Term t; + BACKUP_H(); + + t = Yap_WideStringToDiffList(s, t0); + + RECOVER_H(); + return t; +} + +/* copy a string of size len to a buffer */ +X_API Term +YAP_NWideBufferToDiffList(wchar_t *s, Term t0, size_t len) +{ + Term t; + BACKUP_H(); + + t = Yap_NWideStringToDiffList(s, t0, len); + + RECOVER_H(); + return t; +} + X_API void YAP_Error(int myerrno, Term t, char *buf,...) Index: iopreds.c =================================================================== RCS file: /cvsroot/yap/C/iopreds.c,v retrieving revision 1.184 retrieving revision 1.185 diff -u -r1.184 -r1.185 --- iopreds.c 22 Jul 2008 23:34:48 -0000 1.184 +++ iopreds.c 24 Jul 2008 16:02:00 -0000 1.185 @@ -3660,7 +3660,7 @@ break; case WString_tok: { - Term t0 = Yap_WStringToList((wchar_t *)info); + Term t0 = Yap_WideStringToList((wchar_t *)info); ts[0] = Yap_MkApplTerm(Yap_MkFunctor(Yap_LookupAtom("string"),1),1,&t0); } break; Index: parser.c =================================================================== RCS file: /cvsroot/yap/C/parser.c,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- parser.c 10 Mar 2008 14:11:38 -0000 1.26 +++ parser.c 24 Jul 2008 16:02:00 -0000 1.27 @@ -546,11 +546,11 @@ if (*p == 0) t = MkAtomTerm(AtomNil); else if (yap_flags[YAP_DOUBLE_QUOTES_FLAG] == STRING_AS_CHARS) - t = Yap_WStringToListOfAtoms(p); + t = Yap_WideStringToListOfAtoms(p); else if (yap_flags[YAP_DOUBLE_QUOTES_FLAG] == STRING_AS_ATOM) t = MkAtomTerm(Yap_LookupWideAtom(p)); else - t = Yap_WStringToList(p); + t = Yap_WideStringToList(p); NextToken; } break; Index: stdpreds.c =================================================================== RCS file: /cvsroot/yap/C/stdpreds.c,v retrieving revision 1.131 retrieving revision 1.132 diff -u -r1.131 -r1.132 --- stdpreds.c 12 Jun 2008 10:55:52 -0000 1.131 +++ stdpreds.c 24 Jul 2008 16:02:00 -0000 1.132 @@ -13,6 +13,9 @@ * * * Last rev: $Date$,$Author$ * * $Log$ +* Revision 1.132 2008/07/24 16:02:00 vsc +* improve C-interface and SWI comptaibility a bit. +* * Revision 1.131 2008/06/12 10:55:52 vsc * fix syntax error messages * @@ -893,7 +896,7 @@ if (IsAtomTerm(AtomNameT)) { Atom at = AtomOfTerm(AtomNameT); if (IsWideAtom(at)) { - NewT = Yap_WStringToList((wchar_t *)(RepAtom(at)->StrOfAE)); + NewT = Yap_WideStringToList((wchar_t *)(RepAtom(at)->StrOfAE)); return Yap_unify(NewT, ARG2); } else String = RepAtom(at)->StrOfAE; @@ -1054,9 +1057,9 @@ at = AtomOfTerm(t1); if (IsWideAtom(at)) { if (yap_flags[YAP_TO_CHARS_FLAG] == QUINTUS_TO_CHARS) { - NewT = Yap_WStringToList((wchar_t *)RepAtom(at)->StrOfAE); + NewT = Yap_WideStringToList((wchar_t *)RepAtom(at)->StrOfAE); } else { - NewT = Yap_WStringToListOfAtoms((wchar_t *)RepAtom(AtomOfTerm(t1))->StrOfAE); + NewT = Yap_WideStringToListOfAtoms((wchar_t *)RepAtom(AtomOfTerm(t1))->StrOfAE); } } else { if (yap_flags[YAP_TO_CHARS_FLAG] == QUINTUS_TO_CHARS) { @@ -1609,7 +1612,7 @@ } at = AtomOfTerm(t1); if (IsWideAtom(at)) { - NewT = Yap_WStringToList((wchar_t *)RepAtom(at)->StrOfAE); + NewT = Yap_WideStringToList((wchar_t *)RepAtom(at)->StrOfAE); } else { NewT = Yap_StringToList(RepAtom(at)->StrOfAE); } |
|
From: Vitor S. C. <vs...@us...> - 2008-07-24 16:02:29
|
Update of /cvsroot/yap/library/yap2swi In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv7875/library/yap2swi Modified Files: yap2swi.c Log Message: improve C-interface and SWI comptaibility a bit. Index: yap2swi.c =================================================================== RCS file: /cvsroot/yap/library/yap2swi/yap2swi.c,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- yap2swi.c 25 Mar 2008 16:45:53 -0000 1.23 +++ yap2swi.c 24 Jul 2008 16:02:04 -0000 1.24 @@ -15,6 +15,7 @@ #include <stdio.h> #include <SWI-Prolog.h> +#include <SWI-Stream.h> #ifdef USE_GMP #include <gmp.h> @@ -270,28 +271,42 @@ int res = PL_get_chars(l, &sp, ((flags & ~(BUF_MALLOC|BUF_DISCARDABLE))|BUF_RING)); size_t sz; - if (!res) - return FALSE; + if (!res) { + if (flags & CVT_EXCEPTION) + YAP_Error(0, 0L, "PL_get_wchars"); + return 0; + } sz = wcstombs(sp,NULL,BUF_SIZE); if (flags & BUF_MALLOC) { wchar_t *nbf = (wchar_t *)YAP_AllocSpaceFromYap(sz+1); - if (nbf == NULL) + if (nbf == NULL) { + if (flags & CVT_EXCEPTION) + YAP_Error(0, 0L, "PL_get_wchars: lack of memory"); return 0; + } *wsp = nbf; } else if (flags & BUF_DISCARDABLE) { wchar_t *buf = (wchar_t *)buffers; - if (wcstombs(sp,buf,BUF_SIZE) == -1) + if (wcstombs(sp,buf,BUF_SIZE) == -1) { + if (flags & CVT_EXCEPTION) + YAP_Error(0, 0L, "PL_get_wchars: wcstombs"); return 0; + } *wsp = buf; } else { wchar_t *tmp = (wchar_t *)alloc_ring_buf(); - if (wcstombs(sp, tmp, BUF_SIZE) == -1) + if (wcstombs(sp, tmp, BUF_SIZE) == -1) { + if (flags & CVT_EXCEPTION) + YAP_Error(0, 0L, "PL_get_wchars: wcstombs"); return 0; + } *wsp = tmp; } return res; } + if (flags & CVT_EXCEPTION) + YAP_Error(0, 0L, "PL_get_wchars"); return 0; } @@ -845,6 +860,33 @@ return YAP_Unify(YAP_GetFromSlot(t), chterm); } +/* SWI: int PL_unify_wchars(term_t ?t, int type, size_t len,, const pl_wchar_t *s) + */ +X_API int PL_unify_wchars(term_t t, int type, size_t len, const pl_wchar_t *chars) +{ + YAP_Term chterm; + + if (len == (size_t)-1) + len = wcslen(chars); + + switch (type) { + case PL_ATOM: + chterm = YAP_MkAtomTerm(YAP_LookupWideAtom(chars)); + break; + case PL_STRING: + case PL_CODE_LIST: + chterm = YAP_NWideBufferToString(chars, len); + break; + case PL_CHAR_LIST: + chterm = YAP_NWideBufferToAtomList(chars, len); + break; + default: + /* should give error?? */ + return FALSE; + } + return YAP_Unify(YAP_GetFromSlot(t), chterm); +} + typedef struct { int type; union { @@ -1566,6 +1608,111 @@ #endif } + +/***** SWI IO ***************/ + +#define GET_LD +#define LOCK() +#define UNLOCK() +#define FUNCTOR_dstream1 (functor_t)YAP_MkFunctor(YAP_LookupAtom("stream"),1) +#define succeed return 1 +#define fail return 0 + +typedef struct symbol * Symbol; /* symbol of hash table */ + +struct symbol +{ Symbol next; /* next in chain */ + void * name; /* name entry of symbol */ + void * value; /* associated value with name */ +}; + +static Symbol *streamContext; + +#define NULL_ATOM 0L + +#define allocHeap(size) YAP_AllocSpaceFromYap(size) + +// FIX THIS +#define PL_error(A,B,C,D,E,F) 0 + +static Symbol lookupHTable(Symbol *htp, void *name) +{ + Symbol ht = *htp; + while (ht) { + if (ht->name == name) return ht; + } + return NULL; +} + +static void addHTable(Symbol *htp, void *name, void *val) +{ + Symbol s = (Symbol)allocHeap(sizeof(Symbol)); + if (!s) + return; + s->next = *htp; + s->name = name; + s->value = val; + *htp = s; +} + +typedef struct _alias +{ struct _alias *next; + atom_t name; +} alias; + +typedef struct +{ alias *alias_head; + alias *alias_tail; + atom_t filename; /* associated filename */ + unsigned flags; +} stream_context; + + +static stream_context * +getStreamContext(IOSTREAM *s) +{ Symbol symb; + + if ( !(symb = lookupHTable(streamContext, s)) ) + { GET_LD + stream_context *ctx = allocHeap(sizeof(*ctx)); + + // DEBUG(1, Sdprintf("Created ctx=%p for stream %p\n", ctx, s)); + + ctx->alias_head = ctx->alias_tail = NULL; + ctx->filename = NULL_ATOM; + ctx->flags = 0; + addHTable(streamContext, s, ctx); + + return ctx; + } + + return symb->value; +} + +X_API int +PL_unify_stream(term_t t, IOSTREAM *s) +{ GET_LD + stream_context *ctx; + term_t a = PL_new_term_ref(); + + LOCK(); + ctx = getStreamContext(s); + UNLOCK(); + + PL_put_pointer(a, s); + PL_cons_functor(a, FUNCTOR_dstream1, a); + + if ( PL_unify(t, a) ) + succeed; + if ( PL_is_functor(t, FUNCTOR_dstream1) ) + fail; + + return PL_error(NULL, 0, NULL, ERR_DOMAIN, ATOM_stream, t); +} + + + + void Yap_swi_install(void); void @@ -1596,3 +1743,4 @@ return 1; } #endif + |
|
From: Vitor S. C. <vs...@us...> - 2008-07-24 16:02:29
|
Update of /cvsroot/yap/include In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv7875/include Modified Files: SWI-Prolog.h SWI-Stream.h YapInterface.h Log Message: improve C-interface and SWI comptaibility a bit. Index: SWI-Prolog.h =================================================================== RCS file: /cvsroot/yap/include/SWI-Prolog.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- SWI-Prolog.h 12 Feb 2008 17:03:54 -0000 1.2 +++ SWI-Prolog.h 24 Jul 2008 16:02:02 -0000 1.3 @@ -28,11 +28,13 @@ #include <time.h> #endif +#ifndef X_API #if defined(_MSC_VER) && defined(YAP_EXPORTS) #define X_API __declspec(dllexport) #else #define X_API #endif +#endif typedef unsigned long fid_t; typedef unsigned long term_t; @@ -115,6 +117,8 @@ #define CVT_ALL (CVT_ATOMIC|CVT_LIST) #define CVT_MASK 0x00ff +#define CVT_EXCEPTION 0x10000 + #define BUF_DISCARDABLE 0x0000 #define BUF_RING 0x0100 #define BUF_MALLOC 0x0200 @@ -216,6 +220,7 @@ extern X_API int PL_unify_pointer(term_t, void *); extern X_API int PL_unify_string_chars(term_t, const char *); extern X_API int PL_unify_term(term_t,...); +extern X_API int PL_unify_wchars(term_t, int, size_t, const pl_wchar_t *); /* end PL_unify_* functions =============================*/ /* begin PL_is_* functions =============================*/ extern X_API int PL_is_atom(term_t); Index: SWI-Stream.h =================================================================== RCS file: /cvsroot/yap/include/SWI-Stream.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- SWI-Stream.h 12 Feb 2008 17:03:54 -0000 1.2 +++ SWI-Stream.h 24 Jul 2008 16:02:03 -0000 1.3 @@ -2,6 +2,14 @@ #ifndef _PL_STREAM_H #define _PL_STREAM_H +#ifndef X_API +#if defined(_MSC_VER) && defined(YAP_EXPORTS) +#define X_API __declspec(dllexport) +#else +#define X_API +#endif +#endif + /* This appears to make the wide-character support compile and work on HPUX 11.23. There really should be a cleaner way ... */ @@ -138,5 +146,8 @@ intptr_t reserved[3]; /* reserved for extension */ } IOSTREAM; +#define PL_EXPORT(type) extern X_API type + +extern X_API int PL_unify_stream(term_t t, IOSTREAM *s); #endif /*_PL_STREAM_H*/ Index: YapInterface.h =================================================================== RCS file: /cvsroot/yap/include/YapInterface.h,v retrieving revision 1.30 retrieving revision 1.31 diff -u -r1.30 -r1.31 --- YapInterface.h 11 Jul 2008 17:02:07 -0000 1.30 +++ YapInterface.h 24 Jul 2008 16:02:03 -0000 1.31 @@ -287,7 +287,7 @@ /* void YAP_Write(YAP_Term,void (*)(int),int) */ extern X_API void PROTO(YAP_Write,(YAP_Term,void (*)(int),int)); -/* void YAP_WriteBuffer(YAP_Term,char *,unsgined int,int) */ +/* void YAP_WriteBufffer(YAP_Term,char *,unsgined int,int) */ extern X_API void PROTO(YAP_WriteBuffer,(YAP_Term,char *,unsigned int,int)); /* void YAP_Term(YAP_Term) */ @@ -323,12 +323,42 @@ /* int BufferToString(const char *) */ extern X_API YAP_Term PROTO(YAP_BufferToString,(CONST char *)); -/* YAP_Term BufferToTerm(const char *) */ -extern X_API YAP_Term PROTO(YAP_ReadBuffer,(CONST char *,YAP_Term *)); +/* int BufferToString(const char *) */ +extern X_API YAP_Term PROTO(YAP_NBufferToString,(CONST char *, size_t len)); + +/* int BufferToString(const char *) */ +extern X_API YAP_Term PROTO(YAP_WideBufferToString,(CONST wchar_t *)); + +/* int BufferToString(const char *) */ +extern X_API YAP_Term PROTO(YAP_NWideBufferToString,(CONST wchar_t *, size_t len)); /* int BufferToAtomList(const char *) */ extern X_API YAP_Term PROTO(YAP_BufferToAtomList,(CONST char *)); +/* int BufferToAtomList(const char *) */ +extern X_API YAP_Term PROTO(YAP_NBufferToAtomList,(CONST char *, size_t len)); + +/* int BufferToAtomList(const char *) */ +extern X_API YAP_Term PROTO(YAP_WideBufferToAtomList,(CONST wchar_t *)); + +/* int BufferToAtomList(const char *) */ +extern X_API YAP_Term PROTO(YAP_NWideBufferToAtomList,(CONST wchar_t *, size_t len)); + +/* int BufferToDiffList(const char *) */ +extern X_API YAP_Term PROTO(YAP_BufferToDiffList,(CONST char *)); + +/* int BufferToDiffList(const char *) */ +extern X_API YAP_Term PROTO(YAP_NBufferToDiffList,(CONST char *, size_t len)); + +/* int BufferToDiffList(const char *) */ +extern X_API YAP_Term PROTO(YAP_WideBufferToDiffList,(CONST wchar_t *)); + +/* int BufferToDiffList(const char *) */ +extern X_API YAP_Term PROTO(YAP_NWideBufferToDiffList,(CONST wchar_t *, size_t len)); + +/* YAP_Term BufferToTerm(const char *) */ +extern X_API YAP_Term PROTO(YAP_ReadBuffer,(CONST char *,YAP_Term *)); + /* void YAP_InitSocks(const char *,long) */ extern X_API int PROTO(YAP_InitSocks,(CONST char *,long)); |
|
From: Vitor S. C. <vs...@us...> - 2008-07-24 16:02:01
|
Update of /cvsroot/yap/H In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv7875/H Modified Files: YapOpcodes.h Yapproto.h Log Message: improve C-interface and SWI comptaibility a bit. Index: YapOpcodes.h =================================================================== RCS file: /cvsroot/yap/H/YapOpcodes.h,v retrieving revision 1.45 retrieving revision 1.46 diff -u -r1.45 -r1.46 --- YapOpcodes.h 16 Jul 2008 10:58:59 -0000 1.45 +++ YapOpcodes.h 24 Jul 2008 16:02:01 -0000 1.46 @@ -13,6 +13,9 @@ * * * Last rev: $Date$ * * $Log$ +* Revision 1.46 2008/07/24 16:02:01 vsc +* improve C-interface and SWI comptaibility a bit. +* * Revision 1.45 2008/07/16 10:58:59 vsc * small fixes * @@ -209,7 +212,7 @@ OPCODE(unify_y_val ,oy), OPCODE(unify_atom ,oc), OPCODE(unify_float ,od), - OPCODE(unify_longint ,oc), + OPCODE(unify_longint ,oi), OPCODE(unify_bigint ,oc), OPCODE(unify_dbterm ,oc), OPCODE(unify_list ,o), Index: Yapproto.h =================================================================== RCS file: /cvsroot/yap/H/Yapproto.h,v retrieving revision 1.87 retrieving revision 1.88 diff -u -r1.87 -r1.88 --- Yapproto.h 17 Jun 2008 13:37:49 -0000 1.87 +++ Yapproto.h 24 Jul 2008 16:02:02 -0000 1.88 @@ -41,8 +41,17 @@ void STD_PROTO(Yap_PutValue,(Atom,Term)); void STD_PROTO(Yap_ReleaseAtom,(Atom)); Term STD_PROTO(Yap_StringToList,(char *)); +Term STD_PROTO(Yap_NStringToList,(char *, size_t)); +Term STD_PROTO(Yap_WideStringToList,(wchar_t *)); +Term STD_PROTO(Yap_NWideStringToList,(wchar_t *, size_t)); Term STD_PROTO(Yap_StringToDiffList,(char *,Term)); +Term STD_PROTO(Yap_NStringToDiffList,(char *,Term, size_t)); +Term STD_PROTO(Yap_WideStringToDiffList,(wchar_t *,Term)); +Term STD_PROTO(Yap_NWideStringToDiffList,(wchar_t *,Term, size_t)); Term STD_PROTO(Yap_StringToListOfAtoms,(char *)); +Term STD_PROTO(Yap_NStringToListOfAtoms,(char *, size_t)); +Term STD_PROTO(Yap_WideStringToListOfAtoms,(wchar_t *)); +Term STD_PROTO(Yap_NWideStringToListOfAtoms,(wchar_t *, size_t)); struct hold_entry *STD_PROTO(Yap_InitAtomHold,(void)); int STD_PROTO(Yap_AtomGetHold,(Atom)); int STD_PROTO(Yap_AtomReleaseHold,(Atom)); |
|
From: Paulo M. <pm...@us...> - 2008-07-23 11:43:11
|
Update of /cvsroot/yap/docs In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv21827/docs Modified Files: yap.tex Log Message: Added missing documentation on the call/N family of built-in predicates. Index: yap.tex =================================================================== RCS file: /cvsroot/yap/docs/yap.tex,v retrieving revision 1.260 retrieving revision 1.261 diff -u -r1.260 -r1.261 --- yap.tex 22 Jul 2008 23:34:49 -0000 1.260 +++ yap.tex 23 Jul 2008 11:43:15 -0000 1.261 @@ -2648,6 +2648,14 @@ @cnindex incore/1 The same as @code{call/1}. +@item call(+@var{Closure},...,?@var{Ai},...) +@findex call/n +@snindex call/n +@cnindex call/n +Meta-call where @var{Closure} is a closure that is converted into a goal by +appending the @var{Ai} additional arguments. The number of arguments varies +between 0 and 10. + @item call_with_args(+@var{Name},...,?@var{Ai},...) @findex call_with_args/n @snindex call_with_args/n |