From: Terrance S. <ts...@us...> - 2007-04-16 16:14:22
|
Update of /cvsroot/xsb/XSB/emu In directory sc8-pr-cvs10.sourceforge.net:/tmp/cvs-serv4845 Modified Files: builtin.c io_builtins_xsb_i.h io_defs_xsb.h psc_xsb.c Log Message: Got rid of some unnecessary calls to string_find(). There are plenty left due to ctop_string() calls. --- It turned out that read/[1,2] was interning each token 3 times, and I got rid of 2 of those 3, by tweaking the builtin call and by redefining the unnecessary read_getcon. -- It also turned out that nl, and file_nl were performing unnecessary string interns because of windows_os_loader. I got rid of that function and moved file_nl to C (in file_function). Also, I redefined nl/0 to call file_nl. Index: builtin.c =================================================================== RCS file: /cvsroot/xsb/XSB/emu/builtin.c,v retrieving revision 1.278 retrieving revision 1.279 diff -u -r1.278 -r1.279 --- builtin.c 5 Apr 2007 17:26:56 -0000 1.278 +++ builtin.c 16 Apr 2007 16:14:15 -0000 1.279 @@ -1553,7 +1553,9 @@ switch (token->type) { case TK_ATOM : case TK_FUNC : case TK_STR : case TK_LIST : case TK_VAR : case TK_VVAR : case TK_VARFUNC : case TK_VVARFUNC : - ctop_string(CTXTc 4, string_find(token->value,1)); // NOW INTERNED, CALLER MUST DO SO SOON!! + // TLS 070416 -- change to fix double interning (ctop_string calls string_find) + // ctop_string(CTXTc 4, string_find(token->value,1)); // NOW INTERNED, CALLER MUST DO SO SOON!! + ctop_string(CTXTc 4, token->value); break; case TK_INT : case TK_INTFUNC : ctop_int(CTXTc 4, *(long *)(token->value)); Index: io_builtins_xsb_i.h =================================================================== RCS file: /cvsroot/xsb/XSB/emu/io_builtins_xsb_i.h,v retrieving revision 1.52 retrieving revision 1.53 diff -u -r1.52 -r1.53 --- io_builtins_xsb_i.h 23 Feb 2007 20:17:05 -0000 1.52 +++ io_builtins_xsb_i.h 16 Apr 2007 16:14:15 -0000 1.53 @@ -913,6 +913,18 @@ break; } + case FILE_NL: + io_port = ptoc_int(CTXTc 2); + SET_FILEPTR(fptr, io_port); +#ifdef WIN_NT + XSB_STREAM_LOCK(io_port); + putc(CH_RETURN,fptr); putc(CH_NEWLINE,fptr); + XSB_STREAM_UNLOCK(io_port); +#else + putc(CH_NEWLINE,fptr); +#endif + break; + default: xsb_abort("[FILE_FUNCTION]: Invalid file operation, %d\n", ptoc_int(CTXTc 1)); } Index: io_defs_xsb.h =================================================================== RCS file: /cvsroot/xsb/XSB/emu/io_defs_xsb.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- io_defs_xsb.h 31 Dec 2005 01:43:35 -0000 1.11 +++ io_defs_xsb.h 16 Apr 2007 16:14:16 -0000 1.12 @@ -52,6 +52,7 @@ #define FILE_PEEK 23 #define XSB_STREAM_LOCK_B 24 #define XSB_STREAM_UNLOCK_B 25 +#define FILE_NL 26 /* This sequence is for stream properties */ #define STREAM_FILE_NAME 0 @@ -90,3 +91,7 @@ #define STRING_STREAM 3 #define PIPE_STREAM 4 #define CONSOLE_STREAM 5 + +/* from char_defs in prolog_includes */ +#define CH_NEWLINE 10 +#define CH_RETURN 13 Index: psc_xsb.c =================================================================== RCS file: /cvsroot/xsb/XSB/emu/psc_xsb.c,v retrieving revision 1.34 retrieving revision 1.35 diff -u -r1.34 -r1.35 --- psc_xsb.c 20 Nov 2006 16:53:42 -0000 1.34 +++ psc_xsb.c 16 Apr 2007 16:14:16 -0000 1.35 @@ -70,6 +70,7 @@ char **ptr, *str0; + // printf("interning %s\n",str); SYS_MUTEX_LOCK_NOERROR( MUTEX_STRING ) ; ptr = (char **)string_table.table + hash(str, 0, string_table.size); while (*ptr) { |