[m-rev.] for review: make foreign_proc impure by default

Simon Taylor stayl at cs.mu.OZ.AU
Mon Jan 21 15:46:47 AEDT 2002


On 21-Jan-2002, Tyson Dowd <trd at cs.mu.OZ.AU> wrote:
> Estimated hours taken: 12
> Branches: main
> 
> Make foreign_proc impure by default.

 
> Index: compiler/purity.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/compiler/purity.m,v
> retrieving revision 1.40
> diff -u -r1.40 purity.m
> --- compiler/purity.m	16 Dec 2001 08:11:11 -0000	1.40
> +++ compiler/purity.m	20 Jan 2002 12:15:23 -0000
> @@ -563,8 +563,8 @@
>  	% If this clause doesn't apply to all modes of this procedure,
>  	% i.e. the procedure has different clauses for different modes,
>  	% then we must treat it as impure.
> -	% XXX Currently `:- pragma foreign_proc' procedures are
> -	% assumed to be pure. This will change.
> +	% foreign_proc procedures are not treated as impure because they
> +	% have different clauses for different modes

I parse this sentence as saying that foreign_proc procedures are not
treated as impure. It would be better to say that the default impurity
of foreign proc procedures is handled when processing the foreign_proc
goal.

> @@ -774,22 +774,22 @@
>  	compute_goal_purity(Goale0, Goale, InClosure, Purity3),
>  	{ worst_purity(Purity1, Purity2, Purity12) },
>  	{ worst_purity(Purity12, Purity3, Purity) }.
> -compute_expr_purity(Ccode, Ccode, _, _, Purity) -->
> -	{ Ccode = foreign_proc(Attributes, PredId, _,_,_,_,_) },
> -	{ purity(Attributes, AttributesPurity) },
> -
> -	%
> -	% If there were no purity attributes, the purity of the goal
> -	% is the purity of the predicate.
> -	% XXX Currently the default purity is `pure'. Eventually it
> -	% should default to `impure', and require promises for any
> -	% other purity levels, i.e. Purity = AttributesPurity.
> -	%
> +compute_expr_purity(ForeignProc0, ForeignProc, _, _, Purity) -->
> +	{ Attributes = ForeignProc0 ^ foreign_attr },
> +	{ PredId = ForeignProc0 ^ foreign_pred_id },

It's probably better style for each arm of the switch to mention
the functor being handled explicitly, rather than implicitly in
a field access.

Otherwise this change looks fine.

Simon.
--------------------------------------------------------------------------
mercury-reviews mailing list
post:  mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the reviews mailing list