mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-15 22:03:26 +00:00
Mode analyser reorganisation.
Estimated hours taken: 20
Mode analyser reorganisation.
compiler/mode_util.m:
Removed: instmap_init/1, apply_instmap_delta/3, instmap_lookup_var/3,
instmapping_lookup_var/3, instmap_restrict/3, map_restrict/3 (all
moved to instmap.m).
compiler/hlds_goal.m:
Removed the declarations of instmap_delta, instmap and instmapping.
compiler/mode_errors.m:
Added report_mode_errors/2 (was modecheck_report_errors, from
modes.m).
compiler/modes.m:
Predicates now exported:
modecheck_goal/4
modecheck_goal_expr/5 (previously named modecheck_goal_2/5)
handle_extra_goals/8
mode_context_to_unify_context/3
Moved to mode_errors.m:
modecheck_report_errors/2
Moved to instmap.m:
compute_instmap_delta/4
instmap_merge/3
instmap_lookup_vars (was instmap_lookup_arg_list/3)
compute_instmap_delta/4
Moved to mode_debug.m:
Type port/0
mode_checkpoint/4
Moved to modecheck_call.m:
modecheck_call_pred/7
modecheck_higher_order_call/10
modecheck_higher_order_pred_call/4
modecheck_higher_order_func_call/7
Moved to modecheck_unify.m:
modecheck_unification/9
categorize_unify_var_var/12
categorize_unify_var_functor/11
categorize_unify_var_lambda/9
Moved to mode_info.m:
mode_info_error/4
mode_info_add_error/3
compiler/code_gen.pp, compiler/code_info.m, compiler/constraint.m,
compiler/cse_detection.m, compiler/det_analysis.m, compiler/det_util.m,
compiler/dnf.m, compiler/goal_util.m, compiler/higher_order.m,
compiler/hlds_out.m, compiler/hlds_pred.m, compiler/live_vars.m,
compiler/liveness.m, compiler/lookup_switch.m, compiler/polymorphism.m,
compiler/simplify.m, compiler/store_alloc.m, compiler/switch_detection.m,
compiler/transform.m, compiler/unused_args.m:
Imported instmap.m
New files:
compiler/instmap.m:
Handle operations associated with instmaps.
compiler/modecheck_unify.m:
Handle mode checking of unifications.
compiler/modecheck_call.m:
Handle mode checking of calls
compiler/mode_debug.m:
Code to trace the actions of the mode checker.
This commit is contained in:
@@ -111,6 +111,13 @@
|
||||
|
||||
%-----------------------------------------------------------------------------%
|
||||
|
||||
% If there were any errors recorded in the mode_info,
|
||||
% report them to the user now.
|
||||
%
|
||||
:- pred report_mode_errors(mode_info, mode_info).
|
||||
:- mode report_mode_errors(mode_info_di, mode_info_uo) is det.
|
||||
|
||||
|
||||
% print an error message describing a mode error
|
||||
|
||||
:- pred report_mode_error(mode_error, mode_info, io__state, io__state).
|
||||
@@ -866,5 +873,26 @@ write_mode_inference_message(PredInfo, ProcInfo) -->
|
||||
MaybeDet, Context)
|
||||
).
|
||||
|
||||
%-----------------------------------------------------------------------------%
|
||||
%-----------------------------------------------------------------------------%
|
||||
|
||||
% If there were any errors recorded in the mode_info,
|
||||
% report them to the user now.
|
||||
|
||||
report_mode_errors(ModeInfo0, ModeInfo) :-
|
||||
mode_info_get_errors(ModeInfo0, Errors),
|
||||
( Errors = [FirstError | _] -> % XXX Why do we only report the first?
|
||||
FirstError = mode_error_info(_, ModeError,
|
||||
Context, ModeContext),
|
||||
mode_info_set_context(Context, ModeInfo0, ModeInfo1),
|
||||
mode_info_set_mode_context(ModeContext, ModeInfo1, ModeInfo2),
|
||||
mode_info_get_io_state(ModeInfo2, IOState0),
|
||||
report_mode_error(ModeError, ModeInfo2,
|
||||
IOState0, IOState),
|
||||
mode_info_set_io_state(ModeInfo2, IOState, ModeInfo)
|
||||
;
|
||||
ModeInfo = ModeInfo0
|
||||
).
|
||||
|
||||
%-----------------------------------------------------------------------------%
|
||||
%-----------------------------------------------------------------------------%
|
||||
|
||||
Reference in New Issue
Block a user