[m-dev.] Re: opt_imported

Peter Ross petdr at miscrit.be
Wed Sep 20 20:15:56 AEDT 2000


On Wed, Sep 20, 2000 at 11:06:59AM +0200, Nancy Mazur wrote:
> 
> Hi,
> 
> 
> ===================================================================
> 
> 
> Estimated hours taken: 2
> 
> Added a new kind of import_status: opt_exported. This new status
> is used in order to distinguish a real exported predicate from a
> local predicate appearing in the .opt files (used to be set to exported).

I suggest changing this to be:

A local predicate which appeared in a .opt file (even if it was only a
call to that predicate) needs to have its export status changed to
exported so that an entry point to that predicate is available.  This
can confuse the structure reuse analysis, so we add a new import_status:
opt_exported.

> Also some beautifying minor changes.
> 


> hlds_pred.m:
> 	Added opt_exported as a new import_status. Adapted predicates
> 	testing the import_status, and checking for exported status. 
> 	New predicate: pred_info_is_opt_exported.
> intermod.m:
> 	When the status of a local predicate is changed due to its presence
> 	in the .opt file, this status is now set to opt_exported instead
> 	of exported.
> 
Add a new line between these two entries.

> assertion.m:
> hlds_out.m:
> 	Take into account opt_exported. 
> 
> make_hlds.m:
> 	Minor change: make output more intelligeble.
> 
> pa_run.m:
> sr_run.m:
> 	Once pred_info corresponds to an exported predicate, simply
> 	select all the procids instead of the exported ones (was a
> 	useless operation).
> 
> unused_args.m:
> 	Where pred_info_is_exported, also check for opt_exported.
> 
> 
> Index: assertion.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/compiler/assertion.m,v
> retrieving revision 1.8
> diff -u -r1.8 assertion.m
> --- assertion.m	2000/08/09 07:46:16	1.8
> +++ assertion.m	2000/09/20 08:42:20
> @@ -836,6 +836,7 @@
>  is_defined_in_implementation_section(abstract_imported, no).
>  is_defined_in_implementation_section(pseudo_imported, no).
>  is_defined_in_implementation_section(exported, no).
> +is_defined_in_implementation_section(opt_exported, no).
>  is_defined_in_implementation_section(pseudo_exported, no).
>  
>  %-----------------------------------------------------------------------------%
> Index: hlds_out.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/compiler/hlds_out.m,v
> retrieving revision 1.243.2.1
> diff -u -r1.243.2.1 hlds_out.m
> --- hlds_out.m	2000/09/19 10:01:27	1.243.2.1
> +++ hlds_out.m	2000/09/20 08:42:32
> @@ -2259,6 +2259,8 @@
>  	io__write_string("local").
>  hlds_out__write_import_status(exported) -->
>  	io__write_string("exported").
> +hlds_out__write_import_status(opt_exported) -->
> +	io__write_string("opt_exported").
>  hlds_out__write_import_status(abstract_exported) -->
>  	io__write_string("abstract_exported").
>  hlds_out__write_import_status(pseudo_exported) -->
> Index: hlds_pred.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/compiler/hlds_pred.m,v
> retrieving revision 1.81.2.1
> diff -u -r1.81.2.1 hlds_pred.m
> --- hlds_pred.m	2000/09/19 10:01:30	1.81.2.1
> +++ hlds_pred.m	2000/09/20 08:42:37
> @@ -253,6 +253,10 @@
>  				% for unification predicates (see comments in
>  				% unify_proc.m)
>  	;	exported	% defined in the interface of this module
> +	;	opt_exported	% a local item for which the import-status
> +				% has been changed due to its presence in
> +				% the .opt files 
> +				% (intermod__adjust_pred_import_status)
>  	;	abstract_exported % describes a type with only an abstract
>  				% declaration exported
>  	;	pseudo_exported % the converse of pseudo_imported
> @@ -566,6 +570,8 @@
>  	% exported_to_submodules or pseudo_exported
>  :- pred pred_info_is_exported(pred_info::in) is semidet.
>  
> +:- pred pred_info_is_opt_exported(pred_info::in) is semidet.
> +
>  :- pred pred_info_is_exported_to_submodules(pred_info::in) is semidet.
>  
>  :- pred pred_info_is_pseudo_exported(pred_info::in) is semidet.
> @@ -724,6 +730,7 @@
>  status_is_exported(pseudo_imported,		no).
>  status_is_exported(opt_imported,		no).
>  status_is_exported(exported,			yes).
> +status_is_exported(opt_exported,		yes).
>  status_is_exported(abstract_exported,		yes).
>  status_is_exported(pseudo_exported,		yes).
>  status_is_exported(exported_to_submodules,	yes).
> @@ -738,6 +745,7 @@
>  status_defined_in_this_module(pseudo_imported,		no).
>  status_defined_in_this_module(opt_imported,		no).
>  status_defined_in_this_module(exported,			yes).
> +status_defined_in_this_module(opt_exported,		yes).
>  status_defined_in_this_module(abstract_exported,	yes).
>  status_defined_in_this_module(pseudo_exported,		yes).
>  status_defined_in_this_module(exported_to_submodules,	yes).
> @@ -748,6 +756,7 @@
>  import_status_to_minimal_string(abstract_imported, "abstract_imported").
>  import_status_to_minimal_string(pseudo_imported, "pseudo_imported").
>  import_status_to_minimal_string(exported, "exported").
> +import_status_to_minimal_string(opt_exported, "opt_exported").
>  import_status_to_minimal_string(abstract_exported, "abstract_exported").
>  import_status_to_minimal_string(pseudo_exported, "pseudo_exported").
>  import_status_to_minimal_string(exported_to_submodules,
> @@ -912,6 +921,7 @@
>  	pred_info_import_status(PredInfo, ImportStatus),
>  	(
>  		( ImportStatus = exported
> +		; ImportStatus = opt_exported
>  		; ImportStatus = exported_to_submodules
>  		)
>  	->
> @@ -924,6 +934,7 @@
>  		ProcIds = []
>  	).
>  
> +
>  pred_info_clauses_info(PredInfo, PredInfo^clauses_info).
>  
>  pred_info_set_clauses_info(PredInfo, X, PredInfo^clauses_info := X).
> @@ -965,6 +976,10 @@
>  pred_info_is_exported(PredInfo) :-
>  	pred_info_import_status(PredInfo, ImportStatus),
>  	ImportStatus = exported.
> +
> +pred_info_is_opt_exported(PredInfo) :-
> +	pred_info_import_status(PredInfo, ImportStatus),
> +	ImportStatus = opt_exported.
>  
>  pred_info_is_exported_to_submodules(PredInfo) :-
>  	pred_info_import_status(PredInfo, ImportStatus),
> Index: intermod.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/compiler/intermod.m,v
> retrieving revision 1.83.2.1
> diff -u -r1.83.2.1 intermod.m
> --- intermod.m	2000/09/19 10:01:34	1.83.2.1
> +++ intermod.m	2000/09/20 08:42:44
> @@ -1956,7 +1956,7 @@
>  		->
>  			NewStatus = pseudo_exported
>  		;
> -			NewStatus = exported
> +			NewStatus = opt_exported
>  		),
>  		pred_info_set_import_status(PredInfo0, NewStatus, PredInfo),
>  		map__det_update(Preds0, PredId, PredInfo, Preds1)
> Index: make_hlds.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/compiler/make_hlds.m,v
> retrieving revision 1.347.2.1
> diff -u -r1.347.2.1 make_hlds.m
> --- make_hlds.m	2000/09/19 10:01:40	1.347.2.1
> +++ make_hlds.m	2000/09/20 08:43:10
> @@ -1445,9 +1445,9 @@
>  		% { module_info_incr_errors(Module0, Module) }
>  	   )
>  	;
> -	   io__write_string("Error: no corresponding predicate found "),
> +	   io__write_string("Error: no corresponding entry found for "),
>  	   hlds_out__write_simple_call_id(PredOrFunc, SymName/Arity),
> -	   io__write_string(" in `pragma pa_alias_info'.\n"),
> +	   io__write_string(" with `pragma pa_alias_info'.\n"),
>  	   { Module = Module0 },
>  	   io__set_exit_status(1)
>  	   % { module_info_incr_errors(Module0, Module) }
> @@ -1522,9 +1522,9 @@
>  		% { module_info_incr_errors(Module0, Module) }
>  	   )
>  	;
> -	   io__write_string("Error: no corresponding predicate found "),
> +	   io__write_string("Error: no corresponding entry found for "),
>  	   hlds_out__write_simple_call_id(PredOrFunc, SymName/Arity),
> -	   io__write_string(" in `pragma pa_alias_info'.\n"),
> +	   io__write_string(" with `pragma sr_reuse_info'.\n"),
>  	   { Module = Module0 },
>  	   io__set_exit_status(1)
>  	   % { module_info_incr_errors(Module0, Module) }
> Index: pa_run.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/compiler/Attic/pa_run.m,v
> retrieving revision 1.1.2.1
> diff -u -r1.1.2.1 pa_run.m
> --- pa_run.m	2000/09/19 10:02:07	1.1.2.1
> +++ pa_run.m	2000/09/20 08:43:23
> @@ -197,12 +197,19 @@
>  analyse_pred_proc( HLDS, PRED_PROC_ID , FPtable0, FPtable) -->
>  	globals__io_lookup_bool_option(very_verbose,Verbose),
>  
> -	{ module_info_pred_proc_info( HLDS, PRED_PROC_ID,_PredInfo,ProcInfo) },
> +	% { module_info_pred_proc_info( HLDS, PRED_PROC_ID,_PredInfo,ProcInfo) },
> +	{ module_info_pred_proc_info( HLDS, PRED_PROC_ID,PredInfo,ProcInfo) },
> +	{ pred_info_import_status( PredInfo, ImportStatus) },
> +	{ import_status_to_minimal_string( ImportStatus, ImportStatusS) },
> +
>  	{ PRED_PROC_ID = proc(PredId, ProcId) },
>  
>  	{ pa_util__pa_fixpoint_table_which_run(FPtable0, Run) },
>  	{ string__int_to_string(Run, SRun )},
> -	{ string__append_list( ["% Alias analysing (run ",SRun,") "],
> +	% { string__append_list( ["% Alias analysing (run ",SRun,") "],
> +	%			Msg ) },
> +	{ string__append_list( ["% Alias analysing (run ",SRun,") ",
> +				" (", ImportStatusS, ") "],
>  				Msg ) },
>  	passes_aux__write_proc_progress_message( Msg, 
>  				PredId, ProcId, HLDS ), 
> @@ -572,7 +579,7 @@
>  		->
>  			[]
>  		;
> -			{ pred_info_exported_procids( PredInfo , ProcIds ) } ,
> +			{ pred_info_procids(PredInfo, ProcIds) },
>  			{ pred_info_procedures( PredInfo, ProcTable ) },
>  			list__foldl( make_pa_interface_pred_proc( PredInfo, ProcTable),
>  					ProcIds )
> Index: sr_run.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/compiler/Attic/sr_run.m,v
> retrieving revision 1.1.2.1
> diff -u -r1.1.2.1 sr_run.m
> --- sr_run.m	2000/09/19 10:02:14	1.1.2.1
> +++ sr_run.m	2000/09/20 08:43:34
> @@ -65,7 +65,7 @@
>  		->
>  			[]
>  		;
> -			{ pred_info_exported_procids( PredInfo , ProcIds ) } ,
> +			{ pred_info_procids(PredInfo, ProcIds) },
>  			{ pred_info_procedures( PredInfo, ProcTable ) },
>  			list__foldl( 
>  				write_pred_proc_sr_reuse_info( PredInfo, 
> Index: unused_args.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/compiler/unused_args.m,v
> retrieving revision 1.67
> diff -u -r1.67 unused_args.m
> --- unused_args.m	2000/09/07 01:47:00	1.67
> +++ unused_args.m	2000/09/20 08:43:39
> @@ -1480,6 +1480,7 @@
>  write_unused_args_to_opt_file(yes(OptStream), PredInfo, ProcId, UnusedArgs) -->
>  	(
>  		( { pred_info_is_exported(PredInfo) }
> +		; { pred_info_is_opt_exported(PredInfo) }
>  		; { pred_info_is_exported_to_submodules(PredInfo) }
>  		),
>  		{ UnusedArgs \= [] }
> 
--------------------------------------------------------------------------
mercury-developers mailing list
Post messages to:       mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions:          mercury-developers-request at cs.mu.oz.au
--------------------------------------------------------------------------



More information about the developers mailing list