From 2e319c50baa0e81cc244da721530c3b93541aaae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Sun, 12 Dec 2010 18:28:55 +0000 Subject: [PATCH 1/4] make sure that atom garbage collector knows about foreign function names. --- C/load_aix.c | 2 +- C/load_aout.c | 4 ++-- C/load_coff.c | 4 ++-- C/load_dl.c | 6 +++--- C/load_dld.c | 2 +- C/load_dll.c | 9 +++++---- C/load_dyld.c | 11 ++++++----- C/load_foreign.c | 4 ++-- C/load_shl.c | 11 ++++++----- H/Foreign.h | 2 +- H/rheap.h | 6 ++---- 11 files changed, 31 insertions(+), 30 deletions(-) diff --git a/C/load_aix.c b/C/load_aix.c index a8051bb72..654d30b90 100644 --- a/C/load_aix.c +++ b/C/load_aix.c @@ -68,7 +68,7 @@ LoadForeign(StringList ofiles, StringList libs, strcpy(Yap_ErrorSay," Load Failed: in AIX you must load a single object file"); return LOAD_FAILLED; } - if (!Yap_TrueFileName(ofiles->s, Yap_FileNameBuf, TRUE)) { + if (!Yap_TrueFileName(AtomName(ofiles->name), Yap_FileNameBuf, TRUE)) { strcpy(Yap_ErrorSay, " Trying to open unexisting file in LoadForeign "); return LOAD_FAILLED; } diff --git a/C/load_aout.c b/C/load_aout.c index c6ad6b8cb..0c2e2c1b6 100644 --- a/C/load_aout.c +++ b/C/load_aout.c @@ -154,7 +154,7 @@ LoadForeign(StringList ofiles, while(tmp != NULL) { strcat(o_files," "); - strcat(o_files,tmp->s); + strcat(o_files,AtomName(tmp->name)); tmp = tmp->next; } } @@ -165,7 +165,7 @@ LoadForeign(StringList ofiles, while(tmp != NULL) { strcat(l_files," "); - strcat(l_files,tmp->s); + strcat(l_files,AtomName(tmp->name)); tmp = tmp->next; } } diff --git a/C/load_coff.c b/C/load_coff.c index f64ed7669..bb090f131 100644 --- a/C/load_coff.c +++ b/C/load_coff.c @@ -155,7 +155,7 @@ LoadForeign(StringList ofiles, while(tmp != NULL) { strcat(o_files," "); - strcat(o_files,tmp->s); + strcat(o_files,AtomName(tmp->name)); tmp = tmp->next; } } @@ -166,7 +166,7 @@ LoadForeign(StringList ofiles, while(tmp != NULL) { strcat(l_files," "); - strcat(l_files,tmp->s); + strcat(l_files,AtomName(tmp->name)); tmp = tmp->next; } } diff --git a/C/load_dl.c b/C/load_dl.c index 10b2b0e50..cc419101c 100755 --- a/C/load_dl.c +++ b/C/load_dl.c @@ -92,9 +92,9 @@ LoadForeign(StringList ofiles, StringList libs, while (libs) { - if (!Yap_TrueFileName(libs->s, Yap_FileNameBuf, TRUE)) { + if (!Yap_TrueFileName(AtomName(libs->name), Yap_FileNameBuf, TRUE)) { /* use LD_LIBRARY_PATH */ - strncpy(Yap_FileNameBuf, libs->s, YAP_FILENAME_MAX); + strncpy(Yap_FileNameBuf, AtomName(libs->name), YAP_FILENAME_MAX); } #ifdef __osf__ @@ -116,7 +116,7 @@ LoadForeign(StringList ofiles, StringList libs, other routines */ /* dlopen wants to follow the LD_CONFIG_PATH */ - if (!Yap_TrueFileName(ofiles->s, Yap_FileNameBuf, TRUE)) { + if (!Yap_TrueFileName(AtomName(ofiles->name), Yap_FileNameBuf, TRUE)) { strcpy(Yap_ErrorSay, "%% Trying to open unexisting file in LoadForeign"); return LOAD_FAILLED; } diff --git a/C/load_dld.c b/C/load_dld.c index 288cfd882..94f279539 100644 --- a/C/load_dld.c +++ b/C/load_dld.c @@ -80,7 +80,7 @@ LoadForeign(StringList ofiles, StringList libs, } while (ofiles) { - if((error=dld_link(ofiles->s)) !=0) { + if((error=dld_link(AtomName(ofiles->name))) !=0) { strcpy(Yap_ErrorSay,dld_strerror(error)); return LOAD_FAILLED; } diff --git a/C/load_dll.c b/C/load_dll.c index 676386f71..972ec0ec5 100755 --- a/C/load_dll.c +++ b/C/load_dll.c @@ -66,7 +66,7 @@ LoadForeign(StringList ofiles, StringList libs, while (ofiles) { HINSTANCE handle; - if (Yap_TrueFileName(ofiles->s, Yap_FileNameBuf, TRUE) && + if (Yap_TrueFileName(AtomName(ofiles->name), Yap_FileNameBuf, TRUE) && (handle=LoadLibrary(Yap_FileNameBuf)) != 0) { Yap_ErrorSay[0]=~'\0'; @@ -84,12 +84,13 @@ LoadForeign(StringList ofiles, StringList libs, other routines */ while (libs) { HINSTANCE handle; + char * s = AtomName(libs->name); - if (libs->s[0] == '-') { - strcat(Yap_FileNameBuf,libs->s+2); + if (s[0] == '-') { + strcat(Yap_FileNameBuf,s+2); strcat(Yap_FileNameBuf,".dll"); } else { - strcpy(Yap_FileNameBuf,libs->s); + strcpy(Yap_FileNameBuf,s); } if((handle=LoadLibrary(Yap_FileNameBuf)) == 0) diff --git a/C/load_dyld.c b/C/load_dyld.c index 088089524..8e7b47b25 100644 --- a/C/load_dyld.c +++ b/C/load_dyld.c @@ -145,7 +145,7 @@ LoadForeign(StringList ofiles, StringList libs, void *handle; /* mydlopen wants to follow the LD_CONFIG_PATH */ - if (!Yap_TrueFileName(ofiles->s, Yap_FileNameBuf, TRUE)) { + if (!Yap_TrueFileName(AtomName(ofiles->name), Yap_FileNameBuf, TRUE)) { strcpy(Yap_ErrorSay, "%% Trying to open unexisting file in LoadForeign"); return LOAD_FAILLED; } @@ -163,13 +163,14 @@ LoadForeign(StringList ofiles, StringList libs, /* load libraries first so that their symbols are available to other routines */ while (libs) { - - if (libs->s[0] == '-') { + char *s = AtomName(lib->name); + + if (ls[0] == '-') { strcpy(Yap_FileNameBuf,"lib"); - strcat(Yap_FileNameBuf,libs->s+2); + strcat(Yap_FileNameBuf,s+2); strcat(Yap_FileNameBuf,".so"); } else { - strcpy(Yap_FileNameBuf,libs->s); + strcpy(Yap_FileNameBuf,s); } if((libs->handle=mydlopen(Yap_FileNameBuf)) == NULL) diff --git a/C/load_foreign.c b/C/load_foreign.c index 1ab27d057..eae3a8f31 100755 --- a/C/load_foreign.c +++ b/C/load_foreign.c @@ -57,7 +57,7 @@ p_load_foreign(void) t = TailOfTerm(t); new = (StringList) Yap_AllocCodeSpace(sizeof(StringListItem)); new->next = ofiles; - new->s = RepAtom(AtomOfTerm(t1))->StrOfAE; + new->name = AtomOfTerm(t1); ofiles = new; } @@ -69,7 +69,7 @@ p_load_foreign(void) t = TailOfTerm(t); new = (StringList) Yap_AllocCodeSpace(sizeof(StringListItem)); new->next = libs; - new->s = RepAtom(AtomOfTerm(t1))->StrOfAE; + new->name = AtomOfTerm(t1); libs = new; } diff --git a/C/load_shl.c b/C/load_shl.c index 43b6721b1..0ff8799d4 100644 --- a/C/load_shl.c +++ b/C/load_shl.c @@ -61,7 +61,7 @@ LoadForeign( StringList ofiles, StringList libs, int valid_fname; /* shl_load wants to follow the LD_CONFIG_PATH */ - valid_fname = Yap_TrueFileName( ofiles->s, Yap_FileNameBuf, TRUE ); + valid_fname = Yap_TrueFileName( AtomName(ofiles->name), Yap_FileNameBuf, TRUE ); if( !valid_fname ) { strcpy( Yap_ErrorSay, "%% Trying to open non-existing file in LoadForeign" ); @@ -89,14 +89,15 @@ LoadForeign( StringList ofiles, StringList libs, } while( libs ) { - - if( libs->s[0] == '-' ) { + char *s = AtomName(lib->s); + + if( s[0] == '-' ) { strcpy( Yap_FileNameBuf, "lib" ); - strcat( Yap_FileNameBuf, libs->s+2 ); + strcat( Yap_FileNameBuf, s+2 ); strcat( Yap_FileNameBuf, ".sl" ); } else { - strcpy( Yap_FileNameBuf, libs->s ); + strcpy( Yap_FileNameBuf, s ); } *(shl_t *)libs->handle = shl_load( Yap_FileNameBuf, BIND_DEFERRED, 0 ); diff --git a/H/Foreign.h b/H/Foreign.h index df29c989e..c4a649cb4 100644 --- a/H/Foreign.h +++ b/H/Foreign.h @@ -84,7 +84,7 @@ #define LOAD_FAILLED -1 typedef struct StringListItem { - char *s; + Atom name; void *handle; struct StringListItem *next; } StringListItem, *StringList; diff --git a/H/rheap.h b/H/rheap.h index 33b96b1ea..e38d189e7 100755 --- a/H/rheap.h +++ b/H/rheap.h @@ -960,8 +960,7 @@ RestoreForeignCode(void) while (objs != NULL) { if (objs->next != NULL) objs->next = (StringList)AddrAdjust((ADDR)objs->next); - if (objs->s != NULL) - objs->s = (char *)AddrAdjust((ADDR)objs->s); + objs->name = AtomAdjust(objs->name); objs = objs->next; } if (f_code->libs != NULL) @@ -970,8 +969,7 @@ RestoreForeignCode(void) while (libs != NULL) { if (libs->next != NULL) libs->next = (StringList)AddrAdjust((ADDR)libs->next); - if (libs->s != NULL) - libs->s = (char *)AddrAdjust((ADDR)libs->s); + libs->name = AtomAdjust(libs->name); libs = libs->next; } if (f_code->f != NULL) From 2d1ece71c8d11fe6a64fa0d7f6946d1069be3d23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Sun, 12 Dec 2010 19:05:49 +0000 Subject: [PATCH 2/4] iget rid of message. --- C/tracer.c | 1 - 1 file changed, 1 deletion(-) diff --git a/C/tracer.c b/C/tracer.c index e98c81b8e..4f1a68986 100755 --- a/C/tracer.c +++ b/C/tracer.c @@ -391,7 +391,6 @@ static Int p_stop_low_level_trace(void) { Yap_do_low_level_trace = FALSE; do_trace_primitives = TRUE; - fprintf(stderr,"vsc_count = %I64d\n",vsc_count); return(TRUE); } From 51e9cb14a7acd375a0bc8fcf8140c6518f6e0285 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Sun, 12 Dec 2010 19:07:24 +0000 Subject: [PATCH 3/4] nl should be in the SWI IO (obs from Roberto Bagnara). --- library/dialect/swi.yap | 2 ++ packages/PLStream/pl-file.c | 30 +++++++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/library/dialect/swi.yap b/library/dialect/swi.yap index 69474c30f..65a9e3417 100755 --- a/library/dialect/swi.yap +++ b/library/dialect/swi.yap @@ -225,6 +225,8 @@ goal_expansion(file_base_name(A,B),system:swi_file_base_name(A,B)) :- swi_io. goal_expansion(file_directory_name(A,B),system:swi_file_directory_name(A,B)) :- swi_io. goal_expansion('$mark_executable'(A), system:'swi_is_absolute_file_name'(A)) :- swi_io. goal_expansion('$absolute_file_name'(A,B),system:'swi_$absolute_file_name'(A,B)) :- swi_io. +goal_expansion(nl(A),system:swi_nl(A)) :- swi_io. +goal_expansion(nl,system:swi_nl) :- swi_io. % make sure we also use diff --git a/packages/PLStream/pl-file.c b/packages/PLStream/pl-file.c index 6ab14d059..ae4aa4cfe 100755 --- a/packages/PLStream/pl-file.c +++ b/packages/PLStream/pl-file.c @@ -4215,6 +4215,7 @@ PRED_IMPL("copy_stream_data", 2, copy_stream_data2, 0) } + /******************************* * PUBLISH PREDICATES * *******************************/ @@ -4312,8 +4313,34 @@ static pl_Sgetc(IOSTREAM *s) return Sgetc(s); } +/* copied by VSC */ + +static word +pl_nl1(term_t stream) +{ IOSTREAM *s; + + if ( getOutputStream(stream, &s) ) + { Sputcode('\n', s); + return streamStatus(s); + } + + fail; +} + +static word +pl_nl() +{ return pl_nl1(0); +} + +static const PL_extension foreigns[] = { + FRG("swi_nl", 0, pl_nl, ISO), + FRG("swi_nl", 1, pl_nl1, ISO), + /* DO NOT ADD ENTRIES BELOW THIS ONE */ + FRG((char *)NULL, 0, NULL, 0) +}; + static void -init_yap_extras() +init_yap_extras(void) { swi_io_struct swiio; @@ -4329,6 +4356,7 @@ init_yap_extras() initFiles(); initGlob(); PL_register_extensions(PL_predicates_from_file); + PL_register_extensions(foreigns); fileerrors = TRUE; SinitStreams(); } From 7c2c3febe524a23512d81f0beea2f503fc97b770 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Sun, 12 Dec 2010 19:19:49 +0000 Subject: [PATCH 4/4] checker should be called after preprocessing (obs from Roberto Bagnara). --- pl/boot.yap | 11 ++++++++--- pl/checker.yap | 14 ++++++++------ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/pl/boot.yap b/pl/boot.yap index 3b240c7cf..bbe4e19a3 100755 --- a/pl/boot.yap +++ b/pl/boot.yap @@ -461,9 +461,14 @@ true :- true. '$$compile'(G1, G0, N, HeadMod). '$prepare_term'(G, V, Pos, G0, G1, BodyMod, SourceMod, Source) :- - ( get_value('$syntaxcheckflag',on) -> - '$check_term'(Source, V, Pos, BodyMod) ; true ), - '$precompile_term'(G, G0, G1, BodyMod, SourceMod). + '$precompile_term'(G, G0, G1, BodyMod, SourceMod), + ( + get_value('$syntaxcheckflag',on) + -> + '$check_term'(G0, V, Pos, Source, BodyMod) + ; + true + ). % process an input clause '$$compile'(G, G0, L, Mod) :- diff --git a/pl/checker.yap b/pl/checker.yap index 05a3ee24e..3405c2b17 100644 --- a/pl/checker.yap +++ b/pl/checker.yap @@ -120,20 +120,22 @@ no_style_check([H|T]) :- no_style_check(H), no_style_check(T). '$values'('$syntaxcheckmultiple',O,N). -'$check_term'(T,_,P,M) :- +'$check_term'(T,_,P,_Source,M) :- get_value('$syntaxcheckdiscontiguous',on), '$xtract_head'(T,M,NM,_,F,A), '$handle_discontiguous'(F,A,NM), fail. -'$check_term'(T,_,P,M) :- +'$check_term'(T,_,P,_Source,M) :- get_value('$syntaxcheckmultiple',on), '$xtract_head'(T,M,NM,_,F,A), '$handle_multiple'(F,A,NM), fail. -'$check_term'(T,VL,P,_) :- +'$check_term'(T,VL,P,_Source,_) :- get_value('$syntaxchecksinglevar',on), ( '$chk_binding_vars'(T), - '$sv_list'(VL,Sv) -> - '$sv_warning'(Sv,T) ), fail. -'$check_term'(_,_,_,_). + '$sv_list'(VL,Sv) + -> + '$sv_warning'(Sv,T) + ), fail. +'$check_term'(_,_,_,_,_). '$chk_binding_vars'(V) :- var(V), !, V = '$V'(_). '$chk_binding_vars'('$V'(off)) :- !.