/*************************************************************************
*									 *
*	 YAP Prolog 							 *
*									 *
*	Yap Prolog was developed at NCCUP - Universidade do Porto	 *
*									 *
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997	 *
*									 *
**************************************************************************
*									 *
* File:		protect.yap						 *
* Last rev:								 *
* mods:									 *
* comments:	protecting the system functions				 *
*									 *
*************************************************************************/

:- system_module( '$_protect', [], ['$protect'/0]).

% This protects all code from further changes
% and also makes it impossible from some predicates to be seen
'$protect' :-
    '$current_predicate'(Name,M,P,_),
    M \= user,
    functor(P,Name,Arity),
    '$new_system_predicate'(Name,Arity,M),
    sub_atom(Name,0,1,_, '$'),
    fail.
'$protect' :-
    current_atom(Name),
    sub_atom(Name,0,1,_, '$'),
    \+ '$visible'(Name),
    hide_atom(Name),
    fail.
'$protect'.


% hide all atoms who start by '$'
'$visible'('$').			/* not $VAR */
'$visible'('$VAR').			/* not $VAR */
'$visible'('$dbref').			/* not stream position */
'$visible'('$stream').			/* not $STREAM */
'$visible'('$stream_position').		/* not stream position */
'$visible'('$hacks').
'$visible'('$source_location').
'$visible'('$messages').
'$visible'('$push_input_context').
'$visible'('$pop_input_context').
'$visible'('$set_source_module').
'$visible'('$declare_module').
'$visible'('$store_clause').
'$visible'('$skip_list').
'$visible'('$win_insert_menu_item').
'$visible'('$set_predicate_attribute').
'$visible'('$parse_quasi_quotations').
'$visible'('$quasi_quotation').
'$visible'('$qq_open').
'$visible'('$live').
'$visible'('$init_prolog').