don't break ISO standard in current_predicate/1.

Include Nicos flag.


git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@2081 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc 2008-02-07 23:09:13 +00:00
parent a65a9d67ad
commit 83e941e4cf
6 changed files with 47 additions and 13 deletions

View File

@ -805,6 +805,7 @@ Yap_tokenizer(int inp_stream)
*charp++ = och;
for (; chtype(ch) <= NU; ch = Nxtch(inp_stream)) {
if (charp == (char *)AuxSp-1024) {
huge_var_error:
/* huge atom or variable, we are in trouble */
Yap_ErrorMessage = "Code Space Overflow due to huge atom";
Yap_Error_TYPE = OUT_OF_AUXSPACE_ERROR;
@ -817,6 +818,13 @@ Yap_tokenizer(int inp_stream)
}
*charp++ = ch;
}
while (ch == '\'' && isvar && yap_flags[VARS_CAN_HAVE_QUOTE_FLAG]) {
if (charp == (char *)AuxSp-1024) {
goto huge_var_error;
}
*charp++ = ch;
ch = Nxtch(inp_stream);
}
*charp++ = '\0';
if (!isvar) {
/* don't do this in iso */

View File

@ -11,8 +11,12 @@
* File: stdpreds.c *
* comments: General-purpose C implemented system predicates *
* *
* Last rev: $Date: 2008-01-23 17:57:53 $,$Author: vsc $ *
* Last rev: $Date: 2008-02-07 23:09:13 $,$Author: vsc $ *
* $Log: not supported by cvs2svn $
* Revision 1.125 2008/01/23 17:57:53 vsc
* valgrind it!
* enable atom garbage collection.
*
* Revision 1.124 2007/11/26 23:43:08 vsc
* fixes to support threads and assert correctly, even if inefficiently.
*
@ -3607,6 +3611,11 @@ p_set_yap_flags(void)
}
break;
#endif /* TABLING */
case VARS_CAN_HAVE_QUOTE_FLAG:
if (value != 0 && value != 1)
return(FALSE);
yap_flags[VARS_CAN_HAVE_QUOTE_FLAG] = value;
break;
default:
return(FALSE);
}

View File

@ -10,7 +10,7 @@
* File: Yap.h.m4 *
* mods: *
* comments: main header file for YAP *
* version: $Id: Yap.h,v 1.25 2008-01-28 10:42:20 vsc Exp $ *
* version: $Id: Yap.h,v 1.26 2008-02-07 23:09:13 vsc Exp $ *
*************************************************************************/
#include "config.h"
@ -520,8 +520,9 @@ typedef enum
GENERATE_DEBUG_INFO_FLAG = 18,
INDEXING_MODE_FLAG = 19,
TABLING_MODE_FLAG = 20,
VARS_CAN_HAVE_QUOTE_FLAG = 21,
/* let this be the last one */
LAST_FLAG = 21
LAST_FLAG = 22
} yap_flags;
#define STRING_AS_CHARS 0

View File

@ -17,8 +17,10 @@ xb
<h2>Yap-5.1.3:</h2>
<ul>
<li> NEW: variable_names_may_end_with_quotes allows A' in variable
names (request from Nicos Angelopoulos).</li>
<li> SPEEDUP: quickly check if we are importing an undefined goal.</li>
<li> FIXED: current_predicate/1 should enumerate all predicates
<li> FIXED: current_predicate/1 should enumerate all non-system predicates
visible (obs from Nicos Angelopoulos).</li>
<li> NEW: time/1 (based on the SWI-Prolog time/1 predicate; request from Paulo Moura).</li>
<li> FIXED: with 64 bits indexing would separate ints from atoms (obs from A N Saravanaraj).</li>

View File

@ -450,6 +450,19 @@ yap_flag(strict_iso,off) :- !,
yap_flag(strict_iso,X) :-
'$do_error'(domain_error(flag_value,strict_iso+X),yap_flag(strict_iso,X)).
yap_flag(variable_names_may_end_with_quotes,OUT) :-
var(OUT), !,
'$access_yap_flags'(21,X),
'$transl_to_on_off'(X,OUT).
yap_flag(variable_names_may_end_with_quotes,on) :- !,
'$transl_to_on_off'(X,on),
'$set_yap_flags'(21,X).
yap_flag(variable_names_may_end_with_quotes,off) :- !,
'$transl_to_on_off'(X,off),
'$set_yap_flags'(21,X).
yap_flag(variable_names_may_end_with_quotes,X) :-
'$do_error'(domain_error(flag_value,strict_iso+X),yap_flag(strict_iso,X)).
yap_flag(language,X) :-
var(X), !,
'$access_yap_flags'(8, X1),
@ -780,6 +793,7 @@ yap_flag(dialect,yap).
V = user_error ;
V = user_input ;
V = user_output ;
V = variable_names_may_end_with_quotes ;
V = verbose_auto_load ;
V = version ;
V = version_data ;

View File

@ -940,11 +940,11 @@ system_predicate(P) :-
functor(T,A,Arity),
'$pred_exists'(T,M)
;
'$current_predicate'(prolog,A,Arity)
->
functor(T,A,Arity),
'$pred_exists'(T,M)
;
% '$current_predicate'(prolog,A,Arity)
% ->
% functor(T,A,Arity),
% '$pred_exists'(T,M)
% ;
recorded('$import','$import'(NM,M,G,T,A,Arity),_)
->
'$pred_exists'(G,NM)
@ -955,10 +955,10 @@ system_predicate(P) :-
functor(T,A,Arity),
'$pred_exists'(T,M)
;
'$current_predicate'(prolog,A,Arity),
functor(T,A,Arity),
'$pred_exists'(T,M)
;
% '$current_predicate'(prolog,A,Arity),
% functor(T,A,Arity),
% '$pred_exists'(T,M)
% ;
recorded('$import','$import'(NM,M,G,T,A,Arity),_),
functor(T,A,Arity),
'$pred_exists'(G,NM)