[m-rev.] for post-commit review: determinism error messages
paul at bone.id.au
Fri May 13 09:44:25 AEST 2016
On Fri, May 13, 2016 at 05:48:32AM +1000, Zoltan Somogyi wrote:
> For review by anyone.
> diff --git a/compiler/switch_detection.m b/compiler/switch_detection.m
> index 04cb50f..28c96eb 100644
> --- a/compiler/switch_detection.m
> +++ b/compiler/switch_detection.m
> @@ -567,6 +569,31 @@ project_single_arm_goal(single_cons_id_arm(_, Goal)) = Goal.
> project_single_arm_goal(multi_cons_id_arm(_, _, _)) = _ :-
> unexpected($module, $pred, "multi arm").
> +:- pred use_context_of_first_disjunct(list(hlds_goal)::in,
> + hlds_goal_info::in, hlds_goal_info::out) is det.
> +use_context_of_first_disjunct(Disjuncts, GoalInfo0, GoalInfo) :-
> + gather_contexts_of_goals(Disjuncts, set_tree234.init, Contexts),
> + % In the common case that all the contexts have the same filename,
> + % this selects the smallest line number. If Contexts contains more than
> + % one filename, we have no way to choose the least surprising context
> + % to use, so may as well use LeastContext.
> + ( if set_tree234.remove_least(LeastContext, Contexts, _OtherContexts) then
> + goal_info_set_context(LeastContext, GoalInfo0, GoalInfo)
> + else
> + GoalInfo = GoalInfo0
> + ).
> +:- pred gather_contexts_of_goals(list(hlds_goal)::in,
> + set_tree234(term.context)::in, set_tree234(term.context)::out) is det.
> +gather_contexts_of_goals(, !Contexts).
> +gather_contexts_of_goals([Goal | Goals], !Contexts) :-
> + Goal = hlds_goal(_GoalExpr, GoalInfo),
> + Context = goal_info_get_context(GoalInfo),
> + set_tree234.insert(Context, !Contexts),
> + gather_contexts_of_goals(Goals, !Contexts).
There is an opportunity for optimisation here. Rather than building up a
set of contexts you only need to track the smallest context seen so far.
The code is correct how it is and already committed, so I wouldn't worry
about it unless we wanted, for some reason, to improve the performance of an
error handling routine (rarely executed).
The rest of the change looks fine.
More information about the reviews