[m-rev.] for review: renaming head variables fix

Zoltan Somogyi zs at csse.unimelb.edu.au
Wed May 16 20:34:59 AEST 2007


Fix the failure of the invalid/modes_erroneous test case, whose symptom was
an error message about a "mode error in unification of `X' and `X'".
The root cause of the problem was that the renaming of head variables
computed by headvar_names.m was being applied too early, during typechecking.
The fix is to apply it after the frontend (all the passes that can generate
error messages).

To avoid slowdowns from larger pred_infos, this diff also moves the least
frequently used fields of pred_infos to a subterm. (Proc_infos already had
a subterm.) This leads to an almost 3% speedup.

compiler/headvar_names.m:
	Store the renaming instead of applying it.

compiler/simplify.m:
	Apply the renaming in invocations after the front end, since doing so
	may allow some excess assignments to be eliminated.

compiler/hlds_pred.m:
	Add fields to pred_infos and proc_infos for the renaming.

	Move the least frequently used fields of pred_infos into a
	pred_sub_info.

	Some fields of pred_infos were being accessed using predicates
	that did not follow our naming conventions, and some were accessed
	using field access functions that are now inappropriate; fix them all.

	Require the caller to provide the renaming when creating new pred_infos
	and proc_infos. This is to force the compiler components that do this
	to propagate the renaming fields of the original predicates and/or
	procedures to their modified versions.

	Convert that some old code that used if-then-elses to use switches
	instead.

compiler/hlds_out.m:
	Write out the new pred_info and proc_info fields.

compiler/*.m:
	Conform to the changes in hlds_pred.m.

compiler/hlds_clauses.m:
	Avoid ambiguity by giving a prefix to the fields of the clauses_info
	type.

tests/invalid/ho_type_mode_bug.err_exp:
tests/invalid/merge_ground_any.err_exp:
	Don't expect error messages about a "X = X" anymore.

Zoltan.

cvs diff: Diffing .
cvs diff: Diffing analysis
cvs diff: Diffing bindist
cvs diff: Diffing boehm_gc
cvs diff: Diffing boehm_gc/Mac_files
cvs diff: Diffing boehm_gc/cord
cvs diff: Diffing boehm_gc/cord/private
cvs diff: Diffing boehm_gc/doc
cvs diff: Diffing boehm_gc/include
cvs diff: Diffing boehm_gc/include/private
cvs diff: Diffing boehm_gc/libatomic_ops-1.2
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/doc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/gcc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/hpc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/ibmc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/icc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/msftc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/src/atomic_ops/sysdeps/sunc
cvs diff: Diffing boehm_gc/libatomic_ops-1.2/tests
cvs diff: Diffing boehm_gc/tests
cvs diff: Diffing boehm_gc/windows-untested
cvs diff: Diffing boehm_gc/windows-untested/vc60
cvs diff: Diffing boehm_gc/windows-untested/vc70
cvs diff: Diffing boehm_gc/windows-untested/vc71
cvs diff: Diffing browser
cvs diff: Diffing bytecode
cvs diff: Diffing compiler
Index: compiler/accumulator.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/accumulator.m,v
retrieving revision 1.66
diff -u -b -r1.66 accumulator.m
--- compiler/accumulator.m	6 Jan 2007 09:23:23 -0000	1.66
+++ compiler/accumulator.m	16 May 2007 01:11:12 -0000
@@ -257,7 +257,7 @@
         ->
             true
         ;
-            pred_info_context(PredInfo, Context),
+            pred_info_get_context(PredInfo, Context),
             PredPieces = describe_one_pred_name(!.ModuleInfo,
                 should_module_qualify, PredId),
             write_error_pieces(Context, 0, [words("In") | PredPieces], !IO),
@@ -1449,6 +1449,7 @@
     proc_info_get_context(OrigProcInfo, Context),
     proc_info_get_rtti_varmaps(OrigProcInfo, RttiVarMaps),
     proc_info_get_is_address_taken(OrigProcInfo, IsAddressTaken),
+    proc_info_get_var_name_remap(OrigProcInfo, VarNameRemap),
 
     Substs = substs(AccVarSubst, _RecCallSubst, _AssocCallSubst,
         _UpdateSubst),
@@ -1471,7 +1472,8 @@
     list.map(map.lookup(VarTypes), Accs, AccTypes),
 
     proc_info_create(Context, VarSet, VarTypes, HeadVars, InstVarSet,
-        HeadModes, Detism, Goal, RttiVarMaps, IsAddressTaken, AccProcInfo).
+        HeadModes, Detism, Goal, RttiVarMaps, IsAddressTaken, VarNameRemap,
+        AccProcInfo).
 
 %-----------------------------------------------------------------------------%
 
@@ -1488,10 +1490,11 @@
     ModuleName = pred_info_module(OrigPredInfo),
     Name = pred_info_name(OrigPredInfo),
     PredOrFunc = pred_info_is_pred_or_func(OrigPredInfo),
-    pred_info_context(OrigPredInfo, PredContext),
+    pred_info_get_context(OrigPredInfo, PredContext),
     pred_info_get_markers(OrigPredInfo, Markers),
     pred_info_get_class_context(OrigPredInfo, ClassContext),
     pred_info_get_origin(OrigPredInfo, OldOrigin),
+    pred_info_get_var_name_remap(OrigPredInfo, VarNameRemap),
 
     set.init(Assertions),
 
@@ -1509,7 +1512,7 @@
         OldOrigin, OrigPredId),
     pred_info_create(ModuleName, SymName, PredOrFunc, PredContext, Origin,
         status_local, Markers, Types, TypeVarSet, ExistQVars, ClassContext,
-        Assertions, NewProcInfo, NewProcId, NewPredInfo).
+        Assertions, VarNameRemap, NewProcInfo, NewProcId, NewPredInfo).
 
 %-----------------------------------------------------------------------------%
 
Index: compiler/add_class.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/add_class.m,v
retrieving revision 1.26
diff -u -b -r1.26 add_class.m
--- compiler/add_class.m	19 Jan 2007 07:04:07 -0000	1.26
+++ compiler/add_class.m	15 May 2007 01:59:32 -0000
@@ -601,7 +601,7 @@
     list(error_spec)::in, list(error_spec)::out) is det.
 
 pred_method_with_no_modes_error(PredInfo, !Specs) :-
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
     Module = pred_info_module(PredInfo),
     Name = pred_info_name(PredInfo),
     Arity = pred_info_orig_arity(PredInfo),
Index: compiler/add_clause.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/add_clause.m,v
retrieving revision 1.42
diff -u -b -r1.42 add_clause.m
--- compiler/add_clause.m	19 Jan 2007 07:04:07 -0000	1.42
+++ compiler/add_clause.m	15 May 2007 01:59:48 -0000
@@ -154,7 +154,7 @@
             globals.io_lookup_bool_option(very_verbose, VeryVerbose, !IO),
             (
                 VeryVerbose = yes,
-                pred_info_clauses_info(!.PredInfo, MsgClauses),
+                pred_info_get_clauses_info(!.PredInfo, MsgClauses),
                 NumClauses =
                     num_clauses_in_clauses_rep(MsgClauses ^ clauses_rep),
                 io.format("%% Processing clause %d for ", [i(NumClauses + 1)],
@@ -223,7 +223,7 @@
             Spec = error_spec(severity_error, phase_parse_tree_to_hlds, [Msg]),
             !:Specs = [Spec | !.Specs]
         ;
-            pred_info_clauses_info(!.PredInfo, Clauses0),
+            pred_info_get_clauses_info(!.PredInfo, Clauses0),
             pred_info_get_typevarset(!.PredInfo, TVarSet0),
             maybe_add_default_func_mode(!PredInfo, _),
             select_applicable_modes(Args, ClauseVarSet, Status, Context,
Index: compiler/add_pragma.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/add_pragma.m,v
retrieving revision 1.63
diff -u -b -r1.63 add_pragma.m
--- compiler/add_pragma.m	7 May 2007 05:21:29 -0000	1.63
+++ compiler/add_pragma.m	16 May 2007 01:03:28 -0000
@@ -816,10 +816,11 @@
             SubstDesc = list.map(subst_desc, Subst),
             Origin = origin_transformed(
                 transform_type_specialization(SubstDesc), OrigOrigin, PredId),
+            pred_info_get_var_name_remap(PredInfo0, VarNameRemap),
             pred_info_init(ModuleName, SpecName, PredArity, PredOrFunc,
                 Context, Origin, Status, goal_type_none, Markers,
                 Types, TVarSet, ExistQVars, ClassContext, Proofs,
-                ConstraintMap, Clauses, NewPredInfo0),
+                ConstraintMap, Clauses, VarNameRemap, NewPredInfo0),
             pred_info_set_procedures(Procs, NewPredInfo0, NewPredInfo),
             module_info_get_predicate_table(!.ModuleInfo, PredTable0),
             predicate_table_insert(NewPredInfo, NewPredId,
@@ -1467,7 +1468,7 @@
     % Lookup some information we need from the pred_info and proc_info.
     PredName = pred_info_name(!.PredInfo),
     PredModule = pred_info_module(!.PredInfo),
-    pred_info_clauses_info(!.PredInfo, Clauses0),
+    pred_info_get_clauses_info(!.PredInfo, Clauses0),
     pred_info_get_purity(!.PredInfo, Purity),
     pred_info_get_markers(!.PredInfo, Markers),
 
@@ -1563,7 +1564,7 @@
             % into mode-specific clauses.
             pred_info_clause_goal_type(!.PredInfo)
         ->
-            pred_info_clauses_info(!.PredInfo, CInfo0),
+            pred_info_get_clauses_info(!.PredInfo, CInfo0),
             clauses_info_clauses_only(CInfo0, ClauseList0),
             ClauseList = list.map(
                 (func(C) = Res :-
@@ -1625,7 +1626,7 @@
                 get_procedure_matching_declmodes_with_renaming(ExistingProcs,
                     Modes, !.ModuleInfo, ProcId)
             ->
-                pred_info_clauses_info(!.PredInfo, Clauses0),
+                pred_info_get_clauses_info(!.PredInfo, Clauses0),
                 pred_info_get_arg_types(!.PredInfo, ArgTypes),
                 pred_info_get_purity(!.PredInfo, Purity),
                 pred_info_get_markers(!.PredInfo, Markers),
Index: compiler/add_pred.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/add_pred.m,v
retrieving revision 1.29
diff -u -b -r1.29 add_pred.m
--- compiler/add_pred.m	19 Jan 2007 07:04:07 -0000	1.29
+++ compiler/add_pred.m	16 May 2007 01:04:54 -0000
@@ -180,16 +180,17 @@
         purity_to_markers(Purity, PurityMarkers),
         markers_to_marker_list(PurityMarkers, MarkersList),
         list.foldl(add_marker, MarkersList, Markers0, Markers),
+        map.init(VarNameRemap),
         pred_info_init(ModuleName, PredName, Arity, PredOrFunc, Context,
             origin_user(PredName), Status, goal_type_none, Markers, Types,
             TVarSet, ExistQVars, ClassContext, Proofs, ConstraintMap,
-            ClausesInfo, PredInfo0),
+            ClausesInfo, VarNameRemap, PredInfo0),
         (
             predicate_table_search_pf_m_n_a(PredTable0, is_fully_qualified,
                 PredOrFunc, MNameOfPred, PName, Arity, [OrigPred | _])
         ->
             module_info_pred_info(!.ModuleInfo, OrigPred, OrigPredInfo),
-            pred_info_context(OrigPredInfo, OrigContext),
+            pred_info_get_context(OrigPredInfo, OrigContext),
             DeclString = pred_or_func_to_str(PredOrFunc),
             adjust_func_arity(PredOrFunc, OrigArity, Arity),
             multiple_def_error(ItemStatus, PredName, OrigArity, DeclString,
@@ -227,8 +228,8 @@
 add_builtin(PredId, Types, !PredInfo) :-
     Module = pred_info_module(!.PredInfo),
     Name = pred_info_name(!.PredInfo),
-    pred_info_context(!.PredInfo, Context),
-    pred_info_clauses_info(!.PredInfo, ClausesInfo0),
+    pred_info_get_context(!.PredInfo, Context),
+    pred_info_get_clauses_info(!.PredInfo, ClausesInfo0),
     clauses_info_get_varset(ClausesInfo0, VarSet0),
     clauses_info_get_headvars(ClausesInfo0, HeadVars),
     % XXX ARGVEC - clean this up after the pred_info is converted to
@@ -337,9 +338,10 @@
         ModeId) :-
     pred_info_get_procedures(PredInfo0, Procs0),
     pred_info_get_arg_types(PredInfo0, ArgTypes),
+    pred_info_get_var_name_remap(PredInfo0, VarNameRemap),
     next_mode_id(Procs0, ModeId),
-    proc_info_init(Context, Arity, ArgTypes, MaybeDeclaredArgModes,
-        ArgModes, MaybeArgLives, MaybeDet, IsAddressTaken, NewProc0),
+    proc_info_init(Context, Arity, ArgTypes, MaybeDeclaredArgModes, ArgModes,
+        MaybeArgLives, MaybeDet, IsAddressTaken, VarNameRemap, NewProc0),
     proc_info_set_inst_varset(InstVarSet, NewProc0, NewProc),
     map.det_insert(Procs0, ModeId, NewProc, Procs),
     pred_info_set_procedures(Procs, PredInfo0, PredInfo).
@@ -473,9 +475,11 @@
         % Existential types must be declared, they won't be inferred.
     ExistQVars = [],
     init_markers(Markers0),
+    map.init(VarNameRemap),
     pred_info_init(ModuleName, PredName, Arity, PredOrFunc, Context,
         Origin, Status, goal_type_none, Markers0, Types, TVarSet, ExistQVars,
-        ClassContext, Proofs, ConstraintMap, ClausesInfo, PredInfo0),
+        ClassContext, Proofs, ConstraintMap, ClausesInfo, VarNameRemap,
+        PredInfo0),
     add_marker(marker_infer_type, Markers0, Markers),
     pred_info_set_markers(Markers, PredInfo0, PredInfo),
     (
Index: compiler/add_special_pred.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/add_special_pred.m,v
retrieving revision 1.19
diff -u -b -r1.19 add_special_pred.m
--- compiler/add_special_pred.m	19 Jan 2007 07:04:07 -0000	1.19
+++ compiler/add_special_pred.m	16 May 2007 01:05:26 -0000
@@ -373,9 +373,11 @@
         % XXX this context might not be empty
     ClassContext = constraints([], []),
     ExistQVars = [],
+    map.init(VarNameRemap),
     pred_info_init(ModuleName, PredName, Arity, pf_predicate, Context,
         Origin, Status, goal_type_none, Markers, ArgTypes, TVarSet, ExistQVars,
-        ClassContext, Proofs, ConstraintMap, ClausesInfo0, PredInfo0),
+        ClassContext, Proofs, ConstraintMap, ClausesInfo0, VarNameRemap,
+        PredInfo0),
     ArgLives = no,
     varset.init(InstVarSet),
         % Should not be any inst vars here so it's ok to use a
Index: compiler/assertion.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/assertion.m,v
retrieving revision 1.56
diff -u -b -r1.56 assertion.m
--- compiler/assertion.m	6 Jan 2007 09:23:24 -0000	1.56
+++ compiler/assertion.m	14 May 2007 15:55:53 -0000
@@ -433,7 +433,7 @@
     module_info_get_assertion_table(Module, AssertTable),
     assertion_table_lookup(AssertTable, AssertId, PredId),
     module_info_pred_info(Module, PredId, PredInfo),
-    pred_info_clauses_info(PredInfo, ClausesInfo),
+    pred_info_get_clauses_info(PredInfo, ClausesInfo),
     clauses_info_clauses_only(ClausesInfo, Clauses),
     ( Clauses = [clause(_ProcIds, Goal0, _Lang, _Context)] ->
         normalise_goal(Goal0, Goal)
Index: compiler/build_mode_constraints.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/build_mode_constraints.m,v
retrieving revision 1.25
diff -u -b -r1.25 build_mode_constraints.m
--- compiler/build_mode_constraints.m	6 Jan 2007 10:56:10 -0000	1.25
+++ compiler/build_mode_constraints.m	14 May 2007 15:52:05 -0000
@@ -265,7 +265,7 @@
 
 add_mc_vars_for_pred_head(ModuleInfo, PredId, !VarInfo) :-
     module_info_pred_info(ModuleInfo, PredId, PredInfo),
-    pred_info_clauses_info(PredInfo, ClausesInfo),
+    pred_info_get_clauses_info(PredInfo, ClausesInfo),
     clauses_info_get_headvar_list(ClausesInfo, HeadVars),
     clauses_info_get_varset(ClausesInfo, ProgVarset),
     list.foldl(add_mc_var_for_pred_head(ProgVarset, PredId), HeadVars,
@@ -339,7 +339,7 @@
 
 add_clauses_constraints(ModuleInfo, PredId, PredInfo, !VarInfo,
         !Constraints) :-
-    pred_info_clauses_info(PredInfo, ClausesInfo),
+    pred_info_get_clauses_info(PredInfo, ClausesInfo),
     clauses_info_get_headvars(ClausesInfo, HeadVars),
     clauses_info_clauses_only(ClausesInfo, Clauses),
     clauses_info_get_varset(ClausesInfo, ProgVarset),
@@ -442,7 +442,7 @@
 
     ( pred_info_infer_modes(CalleePredInfo) ->
         % No modes declared so just constrain the hearvars
-        pred_info_clauses_info(CalleePredInfo, CalleeClausesInfo),
+        pred_info_get_clauses_info(CalleePredInfo, CalleeClausesInfo),
         clauses_info_get_headvar_list(CalleeClausesInfo, CalleeHeadVars),
         add_mode_infer_callee(CalleePredId, !Constraints),
         add_call_headvar_constraints(ProgVarset, Context, GoalPath,
Index: compiler/check_typeclass.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/check_typeclass.m,v
retrieving revision 1.111
diff -u -b -r1.111 check_typeclass.m
--- compiler/check_typeclass.m	19 Jan 2007 07:04:08 -0000	1.111
+++ compiler/check_typeclass.m	16 May 2007 01:00:35 -0000
@@ -681,10 +681,11 @@
     % order.
     MethodConstraints = instance_method_constraints(ClassId,
         InstanceTypes, InstanceConstraints, ClassMethodClassContext),
+    map.init(VarNameRemap),
     pred_info_init(InstanceModuleName, PredName, PredArity, PredOrFunc,
         Context, origin_instance_method(MethodConstraints), Status,
         goal_type_none, Markers, ArgTypes, TVarSet, ExistQVars, ClassContext,
-        Proofs, ConstraintMap, ClausesInfo, PredInfo0),
+        Proofs, ConstraintMap, ClausesInfo, VarNameRemap, PredInfo0),
     pred_info_set_clauses_info(ClausesInfo, PredInfo0, PredInfo1),
 
     % Add procs with the expected modes and determinisms
@@ -1709,7 +1710,7 @@
     = error_spec.
 
 report_unbound_tvars_in_pred_context(Vars, PredInfo) = Spec :-
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
     pred_info_get_arg_types(PredInfo, TVarSet, _, ArgTypes),
     PredName = pred_info_name(PredInfo),
     Module = pred_info_module(PredInfo),
@@ -1807,7 +1808,7 @@
 
 report_badly_quantified_vars(PredInfo, QuantErrorType, TVars) = Spec :-
     pred_info_get_typevarset(PredInfo, TVarSet),
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
 
     InDeclaration = [words("In declaration of")] ++
         describe_one_pred_info_name(should_module_qualify, PredInfo) ++
Index: compiler/clause_to_proc.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/clause_to_proc.m,v
retrieving revision 1.78
diff -u -b -r1.78 clause_to_proc.m
--- compiler/clause_to_proc.m	26 Apr 2007 09:10:41 -0000	1.78
+++ compiler/clause_to_proc.m	15 May 2007 01:56:47 -0000
@@ -124,7 +124,7 @@
         FuncRetMode = OutMode,
         list.append(FuncArgModes, [FuncRetMode], PredArgModes),
         Determinism = detism_det,
-        pred_info_context(PredInfo0, Context),
+        pred_info_get_context(PredInfo0, Context),
         MaybePredArgLives = no,
         varset.init(InstVarSet),
             % No inst_vars in default func mode.
@@ -174,7 +174,7 @@
 
 copy_clauses_to_procs(!PredInfo) :-
     pred_info_get_procedures(!.PredInfo, Procs0),
-    pred_info_clauses_info(!.PredInfo, ClausesInfo),
+    pred_info_get_clauses_info(!.PredInfo, ClausesInfo),
     ProcIds = pred_info_all_non_imported_procids(!.PredInfo),
     copy_clauses_to_procs_2(ProcIds, ClausesInfo, Procs0, Procs),
     pred_info_set_procedures(Procs, !PredInfo).
Index: compiler/dead_proc_elim.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/dead_proc_elim.m,v
retrieving revision 1.120
diff -u -b -r1.120 dead_proc_elim.m
--- compiler/dead_proc_elim.m	19 Jan 2007 07:04:09 -0000	1.120
+++ compiler/dead_proc_elim.m	14 May 2007 15:57:48 -0000
@@ -852,7 +852,7 @@
                 !:DeadInfo = pred_elim_info(ModuleInfo, !.Queue, !.Examined,
                     !.Needed, NeededNames),
                 module_info_pred_info(ModuleInfo, PredId, PredInfo),
-                pred_info_clauses_info(PredInfo, ClausesInfo),
+                pred_info_get_clauses_info(PredInfo, ClausesInfo),
                 clauses_info_get_clauses_rep(ClausesInfo, ClausesRep),
                 get_clause_list_any_order(ClausesRep, Clauses),
                 list.foldl(dead_pred_elim_process_clause, Clauses, !DeadInfo)
Index: compiler/dep_par_conj.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/dep_par_conj.m,v
retrieving revision 1.19
diff -u -b -r1.19 dep_par_conj.m
--- compiler/dep_par_conj.m	10 May 2007 05:34:05 -0000	1.19
+++ compiler/dep_par_conj.m	16 May 2007 01:06:48 -0000
@@ -1376,11 +1376,12 @@
 
     futurise_argtypes(1, FutureArgs, ArgTypes0, ArgTypes),
 
-    pred_info_context(!.PredInfo, Context),
-    pred_info_clauses_info(!.PredInfo, ClausesInfo),
+    pred_info_get_context(!.PredInfo, Context),
+    pred_info_get_clauses_info(!.PredInfo, ClausesInfo),
     pred_info_get_markers(!.PredInfo, Markers),
     pred_info_get_goal_type(!.PredInfo, GoalType),
     pred_info_get_class_context(!.PredInfo, ClassContext),
+    pred_info_get_var_name_remap(!.PredInfo, VarNameRemap),
 
     % Since this pred_info isn't built until after the polymorphism
     % transformation is complete, we just use dummy maps for the class
@@ -1392,7 +1393,7 @@
     pred_info_init(PredModule, Name, Arity, PredOrFunc, Context, Origin,
         Status, GoalType, Markers, ArgTypes, Tvars, ExistQVars,
         ClassContext, EmptyProofs, EmptyConstraintMap, ClausesInfo,
-        !:PredInfo),
+        VarNameRemap, !:PredInfo),
     pred_info_set_typevarset(TypeVars, !PredInfo).
 
 :- pred futurise_argtypes(arg_pos::in, list(arg_pos)::in, list(mer_type)::in,
Index: compiler/dependency_graph.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/dependency_graph.m,v
retrieving revision 1.94
diff -u -b -r1.94 dependency_graph.m
--- compiler/dependency_graph.m	19 Jan 2007 07:04:10 -0000	1.94
+++ compiler/dependency_graph.m	14 May 2007 15:57:59 -0000
@@ -331,7 +331,7 @@
     ->
         true
     ;
-        pred_info_clauses_info(PredInfo, ClausesInfo),
+        pred_info_get_clauses_info(PredInfo, ClausesInfo),
         clauses_info_get_clauses_rep(ClausesInfo, ClausesRep),
         get_clause_list_any_order(ClausesRep, Clauses),
         Goals = list.map(func(clause(_, Goal, _, _)) = Goal, Clauses),
Index: compiler/fact_table.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/fact_table.m,v
retrieving revision 1.82
diff -u -b -r1.82 fact_table.m
--- compiler/fact_table.m	19 Jan 2007 07:04:12 -0000	1.82
+++ compiler/fact_table.m	14 May 2007 15:57:00 -0000
@@ -574,7 +574,7 @@
     StructName = "mercury__" ++ Identifier ++ "_fact_table",
 
     % Define a struct for a fact table entry.
-    pred_info_context(PredInfo, Context),  % location of :- pred decl
+    pred_info_get_context(PredInfo, Context),  % location of :- pred decl
     create_fact_table_struct(FactArgInfos, 1, Context, StructContents,
         !Errors),
     ( StructContents = "" ->
Index: compiler/goal_path.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/goal_path.m,v
retrieving revision 1.42
diff -u -b -r1.42 goal_path.m
--- compiler/goal_path.m	19 Apr 2007 04:24:50 -0000	1.42
+++ compiler/goal_path.m	14 May 2007 15:52:45 -0000
@@ -89,7 +89,7 @@
     proc_info_set_goal(Goal, !Proc).
 
 fill_goal_path_slots_in_clauses(ModuleInfo, OmitModeEquivPrefix, !PredInfo) :-
-    pred_info_clauses_info(!.PredInfo, ClausesInfo0),
+    pred_info_get_clauses_info(!.PredInfo, ClausesInfo0),
     clauses_info_clauses_only(ClausesInfo0, Clauses0),
     clauses_info_get_vartypes(ClausesInfo0, VarTypes),
     SlotInfo = slot_info(VarTypes, ModuleInfo, OmitModeEquivPrefix),
Index: compiler/headvar_names.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/headvar_names.m,v
retrieving revision 1.1
diff -u -b -r1.1 headvar_names.m
--- compiler/headvar_names.m	14 May 2007 10:58:16 -0000	1.1
+++ compiler/headvar_names.m	16 May 2007 01:36:41 -0000
@@ -7,9 +7,11 @@
 %-----------------------------------------------------------------------------%
 %
 % File: headvar_names.m.
-% Main author: fjh.
+% Main author: zs.
 %
-% This file contains code for improving the names of head variables.
+% This file contains code for improving the names of head variables,
+% replacing HeadVar__n with user-given names whereever the clauses
+% agree on the names.
 
 :- module hlds.headvar_names.
 
@@ -49,10 +51,7 @@
 :- import_module svvarset.
 
 maybe_improve_headvar_names(Globals, !PredInfo) :-
-    pred_info_clauses_info(!.PredInfo, ClausesInfo0),
-    clauses_info_clauses_only(ClausesInfo0, Clauses0),
-    clauses_info_get_headvars(ClausesInfo0, HeadVars0),
-    clauses_info_get_varset(ClausesInfo0, VarSet0),
+    globals.lookup_bool_option(Globals, make_optimization_interface, MakeOpt),
     (
         % Don't do this when making a `.opt' file.
         % intermod.m needs to perform a similar transformation
@@ -60,12 +59,17 @@
         % places the original argument terms, not just the argument
         % variables in the clause head, and this pass would make it
         % difficult to work out what were the original arguments).
-        globals.lookup_bool_option(Globals, make_optimization_interface, yes)
-    ->
-        true
+        MakeOpt = yes
     ;
-        Clauses0 = [SingleClause0]
-    ->
+        MakeOpt = no,
+        pred_info_get_clauses_info(!.PredInfo, ClausesInfo0),
+        clauses_info_clauses_only(ClausesInfo0, Clauses0),
+        clauses_info_get_headvars(ClausesInfo0, HeadVars0),
+        clauses_info_get_varset(ClausesInfo0, VarSet0),
+        (
+            Clauses0 = []
+        ;
+            Clauses0 = [SingleClause0],
         SingleClause0 = clause(ApplicableProcs, Goal0, Language, Context),
 
         Goal0 = hlds_goal(_, GoalInfo0),
@@ -82,21 +86,49 @@
         clauses_info_set_headvars(HeadVars, ClausesInfo0, ClausesInfo1),
 
         SingleClause = clause(ApplicableProcs, Goal, Language, Context),
-        clauses_info_set_clauses([SingleClause], ClausesInfo1, ClausesInfo2),
+            clauses_info_set_clauses([SingleClause],
+                ClausesInfo1, ClausesInfo2),
         clauses_info_set_varset(VarSet, ClausesInfo2, ClausesInfo),
         pred_info_set_clauses_info(ClausesInfo, !PredInfo)
     ;
+            Clauses0 = [_, _ | _],
         % If a headvar is assigned to a variable with the same name
         % (or no name) in every clause, rename it to have that name.
-        list.map2(find_headvar_names_in_clause(VarSet0, HeadVars0), Clauses0,
-            VarNameInfoMaps, VarsInMapSets),
+            list.map2(find_headvar_names_in_clause(VarSet0, HeadVars0),
+                Clauses0, VarNameInfoMaps, VarsInMapSets),
         ConsensusMap = find_consensus_headvar_names(VarsInMapSets,
             VarNameInfoMaps),
-        map.foldl(svvarset.name_var, ConsensusMap, VarSet0, VarSet),
-        clauses_info_set_varset(VarSet, ClausesInfo0, ClausesInfo),
-        pred_info_set_clauses_info(ClausesInfo, !PredInfo)
+
+            % We don't apply the renaming right now, because that could lead to
+            % error messages about unifications of the form X = X instead of
+            % HeadVar__n = X, which would be confusing.
+            %
+            % Instead, we record the renaming, and apply it only when we
+            % generate the data structures that record variable names for
+            % the debugger.
+            %
+            % We put the renaming into both all the proc_infos of the predicate
+            % (which is where stack_layout.m gets them from), and into the
+            % pred_info (so that any later procedures and/or predicates created
+            % from this one will get the rename map as well).
+
+            pred_info_set_var_name_remap(ConsensusMap, !PredInfo),
+            ProcIds = pred_info_all_procids(!.PredInfo),
+            pred_info_get_procedures(!.PredInfo, ProcTable0),
+            list.foldl(set_var_name_remap_in_proc(ConsensusMap), ProcIds,
+                ProcTable0, ProcTable),
+            pred_info_set_procedures(ProcTable, !PredInfo)
+        )
     ).
 
+:- pred set_var_name_remap_in_proc(map(prog_var, string)::in, proc_id::in,
+    proc_table::in, proc_table::out) is det.
+
+set_var_name_remap_in_proc(ConsensusMap, ProcId, !ProcTable) :-
+    map.lookup(!.ProcTable, ProcId, ProcInfo0),
+    proc_info_set_var_name_remap(ConsensusMap, ProcInfo0, ProcInfo),
+    svmap.det_update(ProcId, ProcInfo, !ProcTable).
+
 :- pred improve_single_clause_headvars(list(hlds_goal)::in,
     proc_arg_vector(prog_var)::in, list(prog_var)::in,
     prog_varset::in, prog_varset::out,
Index: compiler/hhf.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/hhf.m,v
retrieving revision 1.30
diff -u -b -r1.30 hhf.m
--- compiler/hhf.m	13 Jan 2007 12:23:06 -0000	1.30
+++ compiler/hhf.m	15 May 2007 15:26:12 -0000
@@ -67,28 +67,28 @@
     ( pred_info_is_imported(PredInfo0) ->
         % AAA
         % PredInfo2 = PredInfo0
-        pred_info_clauses_info(PredInfo0, ClausesInfo),
+        pred_info_get_clauses_info(PredInfo0, ClausesInfo),
         clauses_info_get_headvar_list(ClausesInfo, HeadVars),
         clauses_info_get_varset(ClausesInfo, VarSet),
         some [!IG] (
-            !:IG = PredInfo0 ^ inst_graph_info,
+            pred_info_get_inst_graph_info(PredInfo0, !:IG),
             inst_graph.init(HeadVars, InstGraph),
             !:IG = !.IG ^ implementation_inst_graph := InstGraph,
             !:IG = !.IG ^ interface_inst_graph := InstGraph,
             !:IG = !.IG ^ interface_vars := HeadVars,
             !:IG = !.IG ^ interface_varset := VarSet,
-            PredInfo2 = PredInfo0 ^ inst_graph_info := !.IG
+            pred_info_set_inst_graph_info(!.IG, PredInfo0, PredInfo2)
         )
     ;
         write_pred_progress_message("% Calculating HHF and inst graph for ",
             PredId, !.ModuleInfo, !IO),
 
-        pred_info_clauses_info(PredInfo0, ClausesInfo0),
+        pred_info_get_clauses_info(PredInfo0, ClausesInfo0),
         process_clauses_info(Simple, !.ModuleInfo, ClausesInfo0,
             ClausesInfo, ImplementationInstGraph),
         pred_info_set_clauses_info(ClausesInfo, PredInfo0, PredInfo1),
         some [!IG] (
-            !:IG = PredInfo1 ^ inst_graph_info,
+            pred_info_get_inst_graph_info(PredInfo1, !:IG),
             !:IG = !.IG ^ implementation_inst_graph := ImplementationInstGraph,
 
             % AAA only for non-imported preds with no mode decls.
@@ -104,7 +104,7 @@
             !:IG = !.IG ^ interface_vars := InterfaceVars,
             !:IG = !.IG ^ interface_varset := VarSet,
 
-            PredInfo2 = PredInfo1 ^ inst_graph_info := !.IG
+            pred_info_set_inst_graph_info(!.IG, PredInfo1, PredInfo2)
         )
     ),
 
Index: compiler/higher_order.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/higher_order.m,v
retrieving revision 1.166
diff -u -b -r1.166 higher_order.m
--- compiler/higher_order.m	19 Jan 2007 07:04:13 -0000	1.166
+++ compiler/higher_order.m	16 May 2007 01:07:09 -0000
@@ -2617,6 +2617,7 @@
     pred_info_get_markers(PredInfo0, MarkerList),
     pred_info_get_goal_type(PredInfo0, GoalType),
     pred_info_get_class_context(PredInfo0, ClassContext),
+    pred_info_get_var_name_remap(PredInfo0, VarNameRemap),
     varset.init(EmptyVarSet),
     map.init(EmptyVarTypes),
     map.init(EmptyTVarNameMap),
@@ -2628,14 +2629,13 @@
     % if it's filled in.
     set_clause_list([], ClausesRep),
     EmptyHeadVars = proc_arg_vector_init(pf_predicate, []),
-    ClausesInfo = clauses_info(EmptyVarSet, EmptyVarTypes,
-        EmptyTVarNameMap, EmptyVarTypes, EmptyHeadVars, ClausesRep,
-        EmptyRttiVarMaps, no),
+    ClausesInfo = clauses_info(EmptyVarSet, EmptyVarTypes, EmptyTVarNameMap,
+        EmptyVarTypes, EmptyHeadVars, ClausesRep, EmptyRttiVarMaps, no),
     Origin = origin_transformed(Transform, OrigOrigin, CallerPredId),
     pred_info_init(PredModule, SymName, Arity, PredOrFunc, Context, Origin,
         Status, GoalType, MarkerList, Types, ArgTVarSet, ExistQVars,
         ClassContext, EmptyProofs, EmptyConstraintMap, ClausesInfo,
-        NewPredInfo0),
+        VarNameRemap, NewPredInfo0),
     pred_info_set_typevarset(TypeVarSet, NewPredInfo0, NewPredInfo1),
 
     module_info_get_predicate_table(ModuleInfo0, PredTable0),
Index: compiler/hlds_clauses.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/hlds_clauses.m,v
retrieving revision 1.9
diff -u -b -r1.9 hlds_clauses.m
--- compiler/hlds_clauses.m	26 Apr 2007 09:10:42 -0000	1.9
+++ compiler/hlds_clauses.m	15 May 2007 02:04:43 -0000
@@ -38,24 +38,25 @@
     %
 :- type clauses_info
     --->    clauses_info(
-                varset                  :: prog_varset,
+                clauses_varset          :: prog_varset,
+                                        % The varset describing the clauses.
 
-                explicit_vartypes       :: vartypes,
+                clauses_explicit_vartypes :: vartypes,
                                         % Variable types from explicit
                                         % qualifications.
 
-                tvar_name_map           :: tvar_name_map,
+                clauses_tvar_name_map   :: tvar_name_map,
                                         % Map from variable name to type
                                         % variable for the type variables
                                         % occurring in the argument types.
                                         % This is used to process explicit
                                         % type qualifications.
 
-                vartypes                :: vartypes,
+                clauses_vartypes        :: vartypes,
                                         % Variable types inferred by
                                         % typecheck.m.
 
-                headvars                :: proc_arg_vector(prog_var),
+                clauses_headvars        :: proc_arg_vector(prog_var),
                                         % The head variables.
 
                 clauses_rep             :: clauses_rep,
@@ -218,19 +219,19 @@
     ClausesInfo = clauses_info(VarSet, VarTypes, TVarNameMap, VarTypes,
         HeadVarVec, ClausesRep, RttiVarMaps, HasForeignClauses).
 
-clauses_info_get_varset(CI, CI ^ varset).
-clauses_info_get_explicit_vartypes(CI, CI ^ explicit_vartypes).
-clauses_info_get_vartypes(CI, CI ^ vartypes).
-clauses_info_get_headvars(CI, CI ^ headvars).
+clauses_info_get_varset(CI, CI ^ clauses_varset).
+clauses_info_get_explicit_vartypes(CI, CI ^ clauses_explicit_vartypes).
+clauses_info_get_vartypes(CI, CI ^ clauses_vartypes).
+clauses_info_get_headvars(CI, CI ^ clauses_headvars).
 clauses_info_get_headvar_list(CI, List) :-
-    List = proc_arg_vector_to_list(CI ^ headvars).
+    List = proc_arg_vector_to_list(CI ^ clauses_headvars).
 clauses_info_get_clauses_rep(CI, CI ^ clauses_rep).
 clauses_info_get_rtti_varmaps(CI, CI ^ clauses_rtti_varmaps).
 
-clauses_info_set_varset(X, CI, CI ^ varset := X).
-clauses_info_set_explicit_vartypes(X, CI, CI ^ explicit_vartypes := X).
-clauses_info_set_vartypes(X, CI, CI ^ vartypes := X).
-clauses_info_set_headvars(X, CI, CI ^ headvars := X).
+clauses_info_set_varset(X, CI, CI ^ clauses_varset := X).
+clauses_info_set_explicit_vartypes(X, CI, CI ^ clauses_explicit_vartypes := X).
+clauses_info_set_vartypes(X, CI, CI ^ clauses_vartypes := X).
+clauses_info_set_headvars(X, CI, CI ^ clauses_headvars := X).
 clauses_info_set_clauses(X, CI, CI ^ clauses_rep := Rep) :-
     set_clause_list(X, Rep).
 clauses_info_set_clauses_rep(X, CI, CI ^ clauses_rep := X).
Index: compiler/hlds_out.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/hlds_out.m,v
retrieving revision 1.425
diff -u -b -r1.425 hlds_out.m
--- compiler/hlds_out.m	19 Jan 2007 07:04:14 -0000	1.425
+++ compiler/hlds_out.m	15 May 2007 23:23:50 -0000
@@ -771,8 +771,8 @@
     pred_info_get_arg_types(PredInfo, ArgTypes),
     pred_info_get_exist_quant_tvars(PredInfo, ExistQVars),
     pred_info_get_typevarset(PredInfo, TVarSet),
-    pred_info_clauses_info(PredInfo, ClausesInfo),
-    pred_info_context(PredInfo, Context),
+    pred_info_get_clauses_info(PredInfo, ClausesInfo),
+    pred_info_get_context(PredInfo, Context),
     pred_info_get_import_status(PredInfo, ImportStatus),
     pred_info_get_markers(PredInfo, Markers),
     pred_info_get_class_context(PredInfo, ClassContext),
@@ -780,6 +780,7 @@
     pred_info_get_constraint_map(PredInfo, ConstraintMap),
     pred_info_get_purity(PredInfo, Purity),
     pred_info_get_head_type_params(PredInfo, HeadTypeParams),
+    pred_info_get_var_name_remap(PredInfo, VarNameRemap),
     globals.io_lookup_string_option(dump_hlds_options, Verbose, !IO),
     ( string.contains_char(Verbose, 'v') ->
         AppendVarNums = yes
@@ -855,6 +856,18 @@
         ),
         write_var_types(Indent, VarSet, AppendVarNums, VarTypes, TVarSet, !IO),
 
+        map.to_assoc_list(VarNameRemap, VarNameRemapList),
+        (
+            VarNameRemapList = []
+        ;
+            VarNameRemapList = [VarNameRemapHead | VarNameRemapTail],
+            write_indent(Indent, !IO),
+            io.write_string("% var name remap: ", !IO),
+            write_var_name_remap(VarNameRemapHead, VarNameRemapTail, VarSet,
+                !IO),
+            io.nl(!IO)
+        ),
+
         get_clause_list(ClausesRep, Clauses),
         (
             Clauses = [_ | _],
@@ -3117,6 +3130,23 @@
     mercury_output_vars(VarSet, AppendVarNums, NewVars, !IO),
     io.nl(!IO).
 
+:- pred write_var_name_remap(pair(prog_var, string)::in,
+    list(pair(prog_var, string))::in, prog_varset::in, io::di, io::uo) is det.
+
+write_var_name_remap(Head, Tail, VarSet, !IO) :-
+    Head = Var - NewName,
+    AppendVarNums = yes,
+    mercury_output_var(VarSet, AppendVarNums, Var, !IO),
+    io.write_string(" -> ", !IO),
+    io.write_string(NewName, !IO),
+    (
+        Tail = []
+    ;
+        Tail = [TailHead | TailTail],
+        io.write_string(", ", !IO),
+        write_var_name_remap(TailHead, TailTail, VarSet, !IO)
+    ).
+
 %-----------------------------------------------------------------------------%
 
 :- pred write_types(int::in, type_table::in, io::di, io::uo) is det.
@@ -3569,6 +3599,7 @@
     proc_info_get_call_table_tip(Proc, MaybeCallTableTip),
     proc_info_get_maybe_deep_profile_info(Proc, MaybeDeepProfileInfo),
     proc_info_get_maybe_untuple_info(Proc, MaybeUntupleInfo),
+    proc_info_get_var_name_remap(Proc, VarNameRemap),
     Indent1 = Indent + 1,
 
     write_indent(Indent1, !IO),
@@ -3722,6 +3753,17 @@
         MaybeUntupleInfo = no
     ),
 
+    map.to_assoc_list(VarNameRemap, VarNameRemapList),
+    (
+        VarNameRemapList = []
+    ;
+        VarNameRemapList = [VarNameRemapHead | VarNameRemapTail],
+        write_indent(Indent, !IO),
+        io.write_string("% var name remap: ", !IO),
+        write_var_name_remap(VarNameRemapHead, VarNameRemapTail, VarSet, !IO),
+        io.nl(!IO)
+    ),
+
     write_indent(Indent, !IO),
     PredName = predicate_name(ModuleInfo, PredId),
     PredOrFunc = pred_info_is_pred_or_func(PredInfo),
Index: compiler/hlds_pred.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/hlds_pred.m,v
retrieving revision 1.224
diff -u -b -r1.224 hlds_pred.m
--- compiler/hlds_pred.m	19 Jan 2007 07:04:14 -0000	1.224
+++ compiler/hlds_pred.m	16 May 2007 03:55:03 -0000
@@ -493,7 +493,7 @@
     % pred_info_init(ModuleName, SymName, Arity, PredOrFunc, Context,
     %   Origin, Status, GoalType, Markers, ArgTypes, TypeVarSet,
     %   ExistQVars, ClassContext, ClassProofs, ClassConstraintMap,
-    %   User, ClausesInfo, PredInfo)
+    %   User, ClausesInfo, VarNameRemap, PredInfo)
     %
     % Return a pred_info whose fields are filled in from the information
     % (direct and indirect) in the arguments, and from defaults.
@@ -502,11 +502,13 @@
     pred_or_func::in, prog_context::in, pred_origin::in, import_status::in,
     goal_type::in, pred_markers::in, list(mer_type)::in, tvarset::in,
     existq_tvars::in, prog_constraints::in, constraint_proof_map::in,
-    constraint_map::in, clauses_info::in, pred_info::out) is det.
+    constraint_map::in, clauses_info::in, map(prog_var, string)::in,
+    pred_info::out) is det.
 
     % pred_info_create(ModuleName, SymName, PredOrFunc, Context, Origin,
     %   Status, Markers, TypeVarSet, ExistQVars, ArgTypes,
-    %   ClassContext, Assertions, User, ProcInfo, ProcId, PredInfo)
+    %   ClassContext, Assertions, User, VarNameRemap, ProcInfo, ProcId,
+    %   PredInfo)
     %
     % Return a pred_info whose fields are filled in from the information
     % (direct and indirect) in the arguments, and from defaults. The given
@@ -516,11 +518,12 @@
 :- pred pred_info_create(module_name::in, sym_name::in, pred_or_func::in,
     prog_context::in, pred_origin::in, import_status::in, pred_markers::in,
     list(mer_type)::in, tvarset::in, existq_tvars::in, prog_constraints::in,
-    set(assert_id)::in, proc_info::in, proc_id::out, pred_info::out) is det.
+    set(assert_id)::in, map(prog_var, string)::in, proc_info::in,
+    proc_id::out, pred_info::out) is det.
 
     % define_new_pred(Origin, Goal, CallGoal, Args, ExtraArgs,
     %   InstMap, PredName, TVarSet, VarTypes, ClassContext,
-    %   TVarMap, TCVarMap, VarSet, Markers, IsAddressTaken,
+    %   TVarMap, TCVarMap, VarSet, Markers, IsAddressTaken, VarNameRemap,
     %   !ModuleInfo, PredProcId)
     %
     % Create a new predicate for the given goal, returning a goal to
@@ -533,7 +536,8 @@
     instmap::in, string::in, tvarset::in, vartypes::in,
     prog_constraints::in, rtti_varmaps::in, prog_varset::in,
     inst_varset::in, pred_markers::in, is_address_taken::in,
-    module_info::in, module_info::out, pred_proc_id::out) is det.
+    map(prog_var, string)::in, module_info::in, module_info::out,
+    pred_proc_id::out) is det.
 
     % Various predicates for accessing the information stored in the
     % pred_id and pred_info data structures.
@@ -558,7 +562,7 @@
     %
 :- func pred_info_is_pred_or_func(pred_info) = pred_or_func.
 
-:- pred pred_info_context(pred_info::in, prog_context::out) is det.
+:- pred pred_info_get_context(pred_info::in, prog_context::out) is det.
 :- pred pred_info_get_origin(pred_info::in, pred_origin::out) is det.
 :- pred pred_info_get_import_status(pred_info::in, import_status::out) is det.
 :- pred pred_info_get_goal_type(pred_info::in, goal_type::out) is det.
@@ -580,8 +584,14 @@
     constraint_map::out) is det.
 :- pred pred_info_get_unproven_body_constraints(pred_info::in,
     list(prog_constraint)::out) is det.
+:- pred pred_info_get_inst_graph_info(pred_info::in, inst_graph_info::out)
+    is det.
+:- pred pred_info_get_arg_modes_maps(pred_info::in, list(arg_modes_map)::out)
+    is det.
+:- pred pred_info_get_var_name_remap(pred_info::in,
+    map(prog_var, string)::out) is det.
 :- pred pred_info_get_assertions(pred_info::in, set(assert_id)::out) is det.
-:- pred pred_info_clauses_info(pred_info::in, clauses_info::out) is det.
+:- pred pred_info_get_clauses_info(pred_info::in, clauses_info::out) is det.
 :- pred pred_info_get_procedures(pred_info::in, proc_table::out) is det.
 
     % Setting the name of a pred_info after its creation won't remove its name
@@ -622,6 +632,12 @@
     pred_info::in, pred_info::out) is det.
 :- pred pred_info_set_unproven_body_constraints(list(prog_constraint)::in,
     pred_info::in, pred_info::out) is det.
+:- pred pred_info_set_inst_graph_info(inst_graph_info::in,
+    pred_info::in, pred_info::out) is det.
+:- pred pred_info_set_arg_modes_maps(list(arg_modes_map)::in,
+    pred_info::in, pred_info::out) is det.
+:- pred pred_info_set_var_name_remap(map(prog_var, string)::in,
+    pred_info::in, pred_info::out) is det.
 :- pred pred_info_set_assertions(set(assert_id)::in,
     pred_info::in, pred_info::out) is det.
 :- pred pred_info_set_clauses_info(clauses_info::in,
@@ -629,42 +645,43 @@
 :- pred pred_info_set_procedures(proc_table::in,
     pred_info::in, pred_info::out) is det.
 
-:- func inst_graph_info(pred_info) = inst_graph_info.
-:- func 'inst_graph_info :='(pred_info, inst_graph_info) = pred_info.
-
     % Mode information for the arguments of a procedure.
     % The first map gives the instantiation state on entry of the
     % node corresponding to the prog_var.  The second map gives
     % the instantation state on exit.
 :- type arg_modes_map == pair(map(prog_var, bool)).
 
-:- func modes(pred_info) = list(arg_modes_map).
-:- func 'modes :='(pred_info, list(arg_modes_map)) = pred_info.
-
-    % Return a list of all the proc_ids for the valid modes
-    % of this predicate.  This does not include candidate modes
-    % that were generated during mode inference but which mode
-    % inference found were not valid modes.
+    % Return a list of all the proc_ids for the valid modes of this predicate.
+    % This does not include candidate modes that were generated during mode
+    % inference but which mode inference found were not valid modes.
+    %
 :- func pred_info_procids(pred_info) = list(proc_id).
 
-    % Return a list of the proc_ids for all the modes
-    % of this predicate, including invalid modes.
+    % Return a list of the proc_ids for all the modes of this predicate,
+    % including invalid modes.
+    %
 :- func pred_info_all_procids(pred_info) = list(proc_id).
 
-    % Return a list of the proc_ids for all the valid modes
-    % of this predicate that are not imported.
+    % Return a list of the proc_ids for all the valid modes of this predicate
+    % that are not imported.
+    %
 :- func pred_info_non_imported_procids(pred_info) = list(proc_id).
 
-    % Return a list of the proc_ids for all the modes
-    % of this predicate that are not imported
-    % (including invalid modes).
+    % Return a list of the proc_ids for all the modes of this predicate
+    % that are not imported (including invalid modes).
+    %
+    % XXX The implementation of this function is currently identical
+    % to the implementation of pred_info_non_imported_procids.
+    %
 :- func pred_info_all_non_imported_procids(pred_info) = list(proc_id).
 
-    % Return a list of the proc_ids for all the valid modes
-    % of this predicate that are exported.
+    % Return a list of the proc_ids for all the valid modes of this predicate
+    % that are exported.
+    %
 :- func pred_info_exported_procids(pred_info) = list(proc_id).
 
     % Remove a procedure from the pred_info.
+    %
 :- pred pred_info_remove_procid(proc_id::in, pred_info::in, pred_info::out)
     is det.
 
@@ -687,7 +704,8 @@
 :- pred pred_info_is_pseudo_imported(pred_info::in) is semidet.
 
     % pred_info_is_exported does *not* include predicates which are
-    % exported_to_submodules or pseudo_exported
+    % 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.
@@ -910,56 +928,21 @@
     % polymorphically-typed arguments whose type depends on the
     % values of those type_info-related variables;
     % accurate GC for the MLDS back-end relies on this.
-:- type pred_info
-    --->    pred_info(
-                % Module in which pred occurs.
-                module_name         :: module_name,
-
-                % Predicate name.
-                name                :: string,
-
-                % The arity of the pred (*not* counting any inserted type_info
-                % arguments).
-                orig_arity          :: arity,
-
-                % Whether this "predicate" is really a predicate or a function.
-                is_pred_or_func     :: pred_or_func,
-
+:- type pred_sub_info
+    --->    pred_sub_info(
                 % The location (line #) of the :- pred decl.
                 context             :: prog_context,
 
-                % Where did the predicate come from.
-                pred_origin         :: pred_origin,
-
-                import_status       :: import_status,
-
                 % Whether the goals seen so far, if any, for this predicate
                 % are clauses or foreign_code(...) pragmas.
                 goal_type           :: goal_type,
 
-                % Various boolean flags.
-                markers             :: pred_markers,
-
                 % Various attributes.
                 attributes          :: pred_attributes,
 
-                % Argument types.
-                arg_types           :: list(mer_type),
-
-                % Names of type vars in the predicate's type declaration.
-                decl_typevarset     :: tvarset,
-
-                % Names of type vars in the predicate's type declaration
-                % or in the variable type assignments.
-                typevarset          :: tvarset,
-
                 % Kinds of the type vars.
                 tvar_kinds          :: tvar_kind_map,
 
-                % The set of existentially quantified type variables in the
-                % predicate's type declaration.
-                exist_quant_tvars   :: existq_tvars,
-
                 % The statically known bindings of existentially quantified
                 % type variables inside this predicate. This field is set
                 % at the end of the polymorphism stage.
@@ -973,10 +956,6 @@
                 % from the called predicates). Computed during type checking.
                 head_type_params    :: head_type_params,
 
-                % The class constraints on the type variables in the
-                % predicate's type declaration.
-                class_context       :: prog_constraints,
-
                 % Explanations of how redundant constraints were eliminated.
                 % These are needed by polymorphism.m to work out where to get
                 % the typeclass_infos from. Computed during type checking.
@@ -998,19 +977,74 @@
 
                 % Mode information extracted from constraint based
                 % mode analysis.
-                modes               :: list(arg_modes_map),
+                arg_modes_maps      :: list(arg_modes_map),
+
+                % Renames of some head variables computed by headvar_names.m,
+                % for use by the debugger.
+                var_name_remap      :: map(prog_var, string),
 
                 % List of assertions which mention this predicate.
-                assertions          :: set(assert_id),
+                assertions          :: set(assert_id)
+            ).
+
+:- type pred_info
+    --->    pred_info(
+                % Module in which pred occurs.
+                module_name         :: module_name,
+
+                % Predicate name.
+                name                :: string,
+
+                % The arity of the pred (*not* counting any inserted type_info
+                % arguments).
+                orig_arity          :: arity,
+
+                % Whether this "predicate" is really a predicate or a function.
+                is_pred_or_func     :: pred_or_func,
+
+                % Where did the predicate come from.
+                pred_origin         :: pred_origin,
+
+                import_status       :: import_status,
+
+                % Various boolean flags.
+                markers             :: pred_markers,
+
+                % Argument types.
+                arg_types           :: list(mer_type),
+
+                % Names of type vars in the predicate's type declaration.
+                decl_typevarset     :: tvarset,
+
+                % Names of type vars in the predicate's type declaration
+                % or in the variable type assignments.
+                typevarset          :: tvarset,
+
+                % The set of existentially quantified type variables in the
+                % predicate's type declaration.
+                exist_quant_tvars   :: existq_tvars,
+
+                % The class constraints on the type variables in the
+                % predicate's type declaration.
+                class_context       :: prog_constraints,
 
                 clauses_info        :: clauses_info,
 
-                procedures          :: proc_table
+                procedures          :: proc_table,
+
+                pred_sub_info       :: pred_sub_info
+
+                % If you are adding any new fields, please try to ensure
+                % that the number of fields doesn't cross a threshold that
+                % would cause Boehm gc to double the amount of memory allocated
+                % for a cell (since Boehm gc deals only with power-of-2 cell
+                % sizes).
             ).
 
 pred_info_init(ModuleName, SymName, Arity, PredOrFunc, Context, Origin, Status,
         GoalType, Markers, ArgTypes, TypeVarSet, ExistQVars, ClassContext,
-        ClassProofs, ClassConstraintMap, ClausesInfo, PredInfo) :-
+        ClassProofs, ClassConstraintMap, ClausesInfo, VarNameRemap,
+        PredInfo) :-
     PredName = unqualify_name(SymName),
     sym_name_get_module_name(SymName, ModuleName, PredModuleName),
     type_vars_list(ArgTypes, TVars),
@@ -1023,16 +1057,17 @@
     UnprovenBodyConstraints = [],
     set.init(Assertions),
     map.init(Procs),
-    PredInfo = pred_info(PredModuleName, PredName, Arity, PredOrFunc,
-        Context, Origin, Status, GoalType, Markers, Attributes,
-        ArgTypes, TypeVarSet, TypeVarSet, Kinds, ExistQVars, ExistQVarBindings,
-        HeadTypeParams, ClassContext, ClassProofs, ClassConstraintMap,
+    PredSubInfo = pred_sub_info(Context, GoalType, Attributes, Kinds,
+        ExistQVarBindings, HeadTypeParams, ClassProofs, ClassConstraintMap,
         UnprovenBodyConstraints, inst_graph_info_init, [],
-        Assertions, ClausesInfo, Procs).
+        VarNameRemap, Assertions),
+    PredInfo = pred_info(PredModuleName, PredName, Arity, PredOrFunc,
+        Origin, Status, Markers, ArgTypes, TypeVarSet, TypeVarSet,
+        ExistQVars, ClassContext, ClausesInfo, Procs, PredSubInfo).
 
 pred_info_create(ModuleName, SymName, PredOrFunc, Context, Origin, Status,
         Markers, ArgTypes, TypeVarSet, ExistQVars, ClassContext,
-        Assertions, ProcInfo, ProcId, PredInfo) :-
+        Assertions, VarNameRemap, ProcInfo, ProcId, PredInfo) :-
     list.length(ArgTypes, Arity),
     proc_info_get_varset(ProcInfo, VarSet),
     proc_info_get_vartypes(ProcInfo, VarTypes),
@@ -1062,17 +1097,18 @@
     next_mode_id(Procs0, ProcId),
     map.det_insert(Procs0, ProcId, ProcInfo, Procs),
 
+    PredSubInfo = pred_sub_info(Context, goal_type_clause, Attributes, Kinds,
+        ExistQVarBindings, HeadTypeParams, ClassProofs, ClassConstraintMap,
+        UnprovenBodyConstraints, inst_graph_info_init, [],
+        VarNameRemap, Assertions),
     PredInfo = pred_info(ModuleName, PredName, Arity, PredOrFunc,
-        Context, Origin, Status, goal_type_clause, Markers, Attributes,
-        ArgTypes, TypeVarSet, TypeVarSet, Kinds, ExistQVars, ExistQVarBindings,
-        HeadTypeParams, ClassContext, ClassProofs, ClassConstraintMap,
-        UnprovenBodyConstraints, inst_graph_info_init, [], Assertions,
-        ClausesInfo, Procs).
-
-define_new_pred(Origin, Goal0, Goal, ArgVars0, ExtraTypeInfos,
-        InstMap0, PredName, TVarSet, VarTypes0, ClassContext,
-        RttiVarMaps, VarSet0, InstVarSet, Markers,
-        IsAddressTaken, ModuleInfo0, ModuleInfo, PredProcId) :-
+        Origin, Status, Markers, ArgTypes, TypeVarSet, TypeVarSet,
+        ExistQVars, ClassContext, ClausesInfo, Procs, PredSubInfo).
+
+define_new_pred(Origin, Goal0, Goal, ArgVars0, ExtraTypeInfos, InstMap0,
+        PredName, TVarSet, VarTypes0, ClassContext, RttiVarMaps,
+        VarSet0, InstVarSet, Markers, IsAddressTaken, VarNameRemap,
+        ModuleInfo0, ModuleInfo, PredProcId) :-
     Goal0 = hlds_goal(_GoalExpr, GoalInfo),
     goal_info_get_instmap_delta(GoalInfo, InstMapDelta),
     instmap.apply_instmap_delta(InstMap0, InstMapDelta, InstMap),
@@ -1125,16 +1161,16 @@
     ),
 
     MaybeDeclaredDetism = no,
-    proc_info_create(Context, VarSet, VarTypes, ArgVars, InstVarSet,
-        ArgModes, MaybeDeclaredDetism, Detism, Goal0,
-        RttiVarMaps, IsAddressTaken, ProcInfo0),
+    proc_info_create_with_declared_detism(Context, VarSet, VarTypes, ArgVars,
+        InstVarSet, ArgModes, MaybeDeclaredDetism, Detism, Goal0,
+        RttiVarMaps, IsAddressTaken, VarNameRemap, ProcInfo0),
     proc_info_set_maybe_termination_info(TermInfo, ProcInfo0, ProcInfo),
 
     set.init(Assertions),
 
     pred_info_create(ModuleName, SymName, pf_predicate, Context, Origin,
         ExportStatus, Markers, ArgTypes, TVarSet, ExistQVars,
-        ClassContext, Assertions, ProcInfo, ProcId, PredInfo),
+        ClassContext, Assertions, VarNameRemap, ProcInfo, ProcId, PredInfo),
 
     module_info_get_predicate_table(ModuleInfo0, PredTable0),
     predicate_table_insert(PredInfo, PredId, PredTable0, PredTable),
@@ -1163,26 +1199,31 @@
 pred_info_module(PI) = PI ^ module_name.
 pred_info_name(PI) = PI ^ name.
 pred_info_orig_arity(PI) = PI ^ orig_arity.
-
 pred_info_is_pred_or_func(PI) = PI ^ is_pred_or_func.
-pred_info_context(PI, PI ^ context).
+
+pred_info_get_context(PI, PI ^ pred_sub_info ^ context).
 pred_info_get_origin(PI, PI ^ pred_origin).
 pred_info_get_import_status(PI, PI ^ import_status).
-pred_info_get_goal_type(PI, PI ^ goal_type).
+pred_info_get_goal_type(PI, PI ^ pred_sub_info ^ goal_type).
 pred_info_get_markers(PI, PI ^ markers).
-pred_info_get_attributes(PI, PI ^ attributes).
+pred_info_get_attributes(PI, PI ^ pred_sub_info ^ attributes).
 pred_info_get_arg_types(PI, PI ^ arg_types).
 pred_info_get_typevarset(PI, PI ^ typevarset).
-pred_info_get_tvar_kinds(PI, PI ^ tvar_kinds).
+pred_info_get_tvar_kinds(PI, PI ^ pred_sub_info ^ tvar_kinds).
 pred_info_get_exist_quant_tvars(PI, PI ^ exist_quant_tvars).
-pred_info_get_existq_tvar_binding(PI, PI ^ existq_tvar_binding).
-pred_info_get_head_type_params(PI, PI ^ head_type_params).
+pred_info_get_existq_tvar_binding(PI,
+    PI ^ pred_sub_info ^ existq_tvar_binding).
+pred_info_get_head_type_params(PI, PI ^ pred_sub_info ^ head_type_params).
 pred_info_get_class_context(PI, PI ^ class_context).
-pred_info_get_constraint_proofs(PI, PI ^ constraint_proofs).
-pred_info_get_constraint_map(PI, PI ^ constraint_map).
-pred_info_get_unproven_body_constraints(PI, PI ^ unproven_body_constraints).
-pred_info_get_assertions(PI, PI ^ assertions).
-pred_info_clauses_info(PI, PI ^ clauses_info).
+pred_info_get_constraint_proofs(PI, PI ^ pred_sub_info ^ constraint_proofs).
+pred_info_get_constraint_map(PI, PI ^ pred_sub_info ^ constraint_map).
+pred_info_get_unproven_body_constraints(PI,
+    PI ^ pred_sub_info ^ unproven_body_constraints).
+pred_info_get_inst_graph_info(PI, PI ^ pred_sub_info ^ inst_graph_info).
+pred_info_get_arg_modes_maps(PI, PI ^ pred_sub_info ^ arg_modes_maps).
+pred_info_get_var_name_remap(PI, PI ^ pred_sub_info ^ var_name_remap).
+pred_info_get_assertions(PI, PI ^ pred_sub_info ^ assertions).
+pred_info_get_clauses_info(PI, PI ^ clauses_info).
 pred_info_get_procedures(PI, PI ^ procedures).
 
 pred_info_set_name(X, PI, PI ^ name := X).
@@ -1190,19 +1231,27 @@
 pred_info_set_is_pred_or_func(X, PI, PI ^ is_pred_or_func := X).
 pred_info_set_origin(X, PI, PI ^ pred_origin := X).
 pred_info_set_import_status(X, PI, PI ^ import_status := X).
-pred_info_set_goal_type(X, PI, PI ^ goal_type := X).
+pred_info_set_goal_type(X, PI, PI ^ pred_sub_info ^ goal_type := X).
 pred_info_set_markers(X, PI, PI ^ markers := X).
-pred_info_set_attributes(X, PI, PI ^ attributes := X).
+pred_info_set_attributes(X, PI, PI ^ pred_sub_info ^ attributes := X).
 pred_info_set_typevarset(X, PI, PI ^ typevarset := X).
-pred_info_set_tvar_kinds(X, PI, PI ^ tvar_kinds := X).
-pred_info_set_existq_tvar_binding(X, PI, PI ^ existq_tvar_binding := X).
-pred_info_set_head_type_params(X, PI, PI ^ head_type_params := X).
+pred_info_set_tvar_kinds(X, PI, PI ^ pred_sub_info ^ tvar_kinds := X).
+pred_info_set_existq_tvar_binding(X, PI,
+    PI ^ pred_sub_info ^ existq_tvar_binding := X).
+pred_info_set_head_type_params(X, PI,
+    PI ^ pred_sub_info ^ head_type_params := X).
 pred_info_set_class_context(X, PI, PI ^ class_context := X).
-pred_info_set_constraint_proofs(X, PI, PI ^ constraint_proofs := X).
-pred_info_set_constraint_map(X, PI, PI ^ constraint_map := X).
+pred_info_set_constraint_proofs(X, PI,
+    PI ^ pred_sub_info ^ constraint_proofs := X).
+pred_info_set_constraint_map(X, PI, PI ^ pred_sub_info ^ constraint_map := X).
 pred_info_set_unproven_body_constraints(X, PI,
-    PI ^ unproven_body_constraints := X).
-pred_info_set_assertions(X, PI, PI ^ assertions := X).
+    PI ^ pred_sub_info ^ unproven_body_constraints := X).
+pred_info_set_inst_graph_info(X, PI,
+    PI ^ pred_sub_info ^ inst_graph_info := X).
+pred_info_set_arg_modes_maps(X, PI,
+    PI ^ pred_sub_info ^ arg_modes_maps := X).
+pred_info_set_var_name_remap(X, PI, PI ^ pred_sub_info ^ var_name_remap := X).
+pred_info_set_assertions(X, PI, PI ^ pred_sub_info ^ assertions := X).
 pred_info_set_clauses_info(X, PI, PI ^ clauses_info := X).
 pred_info_set_procedures(X, PI, PI ^ procedures := X).
 
@@ -1224,29 +1273,54 @@
 
 pred_info_non_imported_procids(PredInfo) = ProcIds :-
     pred_info_get_import_status(PredInfo, ImportStatus),
-    ( ImportStatus = status_imported(_) ->
-        ProcIds = []
-    ; ImportStatus = status_external(_) ->
+    (
+        ( ImportStatus = status_imported(_)
+        ; ImportStatus = status_external(_)
+        ),
         ProcIds = []
-    ; ImportStatus = status_pseudo_imported ->
+    ;
+        ImportStatus = status_pseudo_imported,
         ProcIds0 = pred_info_procids(PredInfo),
-        % for pseduo_imported preds, procid 0 is imported
+        % for pseudo_imported preds, procid 0 is imported
         list.delete_all(ProcIds0, 0, ProcIds)
     ;
+        ( ImportStatus = status_opt_imported
+        ; ImportStatus = status_abstract_imported
+        ; ImportStatus = status_exported
+        ; ImportStatus = status_opt_exported
+        ; ImportStatus = status_abstract_exported
+        ; ImportStatus = status_pseudo_exported
+        ; ImportStatus = status_exported_to_submodules
+        ; ImportStatus = status_local
+        ),
         ProcIds = pred_info_procids(PredInfo)
     ).
 
 pred_info_all_non_imported_procids(PredInfo) = ProcIds :-
+    % XXX The documentation of this predicate says that the job it does
+    % is different from the job of pred_info_non_imported_procids, but
+    % the code is identical.
     pred_info_get_import_status(PredInfo, ImportStatus),
-    ( ImportStatus = status_imported(_) ->
-        ProcIds = []
-    ; ImportStatus = status_external(_) ->
+    (
+        ( ImportStatus = status_imported(_)
+        ; ImportStatus = status_external(_)
+        ),
         ProcIds = []
-    ; ImportStatus = status_pseudo_imported ->
+    ;
+        ImportStatus = status_pseudo_imported,
         ProcIds0 = pred_info_procids(PredInfo),
-        % for pseduo_imported preds, procid 0 is imported
+        % for pseudo_imported preds, procid 0 is imported
         list.delete_all(ProcIds0, 0, ProcIds)
     ;
+        ( ImportStatus = status_opt_imported
+        ; ImportStatus = status_abstract_imported
+        ; ImportStatus = status_exported
+        ; ImportStatus = status_opt_exported
+        ; ImportStatus = status_abstract_exported
+        ; ImportStatus = status_pseudo_exported
+        ; ImportStatus = status_exported_to_submodules
+        ; ImportStatus = status_local
+        ),
         ProcIds = pred_info_procids(PredInfo)
     ).
 
@@ -1256,14 +1330,20 @@
         ( ImportStatus = status_exported
         ; ImportStatus = status_opt_exported
         ; ImportStatus = status_exported_to_submodules
-        )
-    ->
+        ),
         ProcIds = pred_info_procids(PredInfo)
     ;
-        ImportStatus = status_pseudo_exported
-    ->
+        ImportStatus = status_pseudo_exported,
         ProcIds = [0]
     ;
+        ( ImportStatus = status_imported(_)
+        ; ImportStatus = status_opt_imported
+        ; ImportStatus = status_abstract_imported
+        ; ImportStatus = status_pseudo_imported
+        ; ImportStatus = status_abstract_exported
+        ; ImportStatus = status_local
+        ; ImportStatus = status_external(_)
+        ),
         ProcIds = []
     ).
 
@@ -1356,10 +1436,12 @@
         status_external(PredInfo0 ^ import_status).
 
 pred_info_clause_goal_type(PredInfo) :-
-    clause_goal_type(PredInfo ^ goal_type).
+    pred_info_get_goal_type(PredInfo, GoalType),
+    clause_goal_type(GoalType).
 
 pred_info_pragma_goal_type(PredInfo) :-
-    pragma_goal_type(PredInfo ^ goal_type).
+    pred_info_get_goal_type(PredInfo, GoalType),
+    pragma_goal_type(GoalType).
 
 :- pred clause_goal_type(goal_type::in) is semidet.
 
@@ -1696,17 +1778,15 @@
 
 :- pred proc_info_init(prog_context::in, arity::in, list(mer_type)::in,
     maybe(list(mer_mode))::in, list(mer_mode)::in, maybe(list(is_live))::in,
-    maybe(determinism)::in, is_address_taken::in, proc_info::out) is det.
-
-:- pred proc_info_create(prog_context::in, prog_varset::in, vartypes::in,
-    list(prog_var)::in, inst_varset::in, list(mer_mode)::in,
-    determinism::in, hlds_goal::in, rtti_varmaps::in,
-    is_address_taken::in, proc_info::out) is det.
+    maybe(determinism)::in, is_address_taken::in, map(prog_var, string)::in,
+    proc_info::out) is det.
 
-:- pred proc_info_create(prog_context::in, prog_varset::in, vartypes::in,
-    list(prog_var)::in, inst_varset::in, list(mer_mode)::in,
-    maybe(determinism)::in, determinism::in, hlds_goal::in,
-    rtti_varmaps::in, is_address_taken::in, proc_info::out) is det.
+:- pred proc_info_create(prog_context::in,
+    prog_varset::in, vartypes::in, list(prog_var)::in,
+    inst_varset::in, list(mer_mode)::in,
+    determinism::in, hlds_goal::in,
+    rtti_varmaps::in, is_address_taken::in, map(prog_var, string)::in,
+    proc_info::out) is det.
 
 :- pred proc_info_set_body(prog_varset::in, vartypes::in,
     list(prog_var)::in, hlds_goal::in, rtti_varmaps::in,
@@ -1757,6 +1837,8 @@
     maybe(deep_profile_proc_info)::out) is det.
 :- pred proc_info_get_maybe_untuple_info(proc_info::in,
     maybe(untuple_proc_info)::out) is det.
+:- pred proc_info_get_var_name_remap(proc_info::in,
+    map(prog_var, string)::out) is det.
 
     % Predicates to set fields of proc_infos.
 
@@ -1813,8 +1895,9 @@
 :- pred proc_info_set_maybe_deep_profile_info(
     maybe(deep_profile_proc_info)::in,
     proc_info::in, proc_info::out) is det.
-:- pred proc_info_set_maybe_untuple_info(
-    maybe(untuple_proc_info)::in,
+:- pred proc_info_set_maybe_untuple_info(maybe(untuple_proc_info)::in,
+    proc_info::in, proc_info::out) is det.
+:- pred proc_info_set_var_name_remap(map(prog_var, string)::in,
     proc_info::in, proc_info::out) is det.
 
 :- pred proc_info_get_termination2_info(proc_info::in,
@@ -2130,6 +2213,8 @@
                 % arguments in the original procedure.
                 maybe_untuple_info          :: maybe(untuple_proc_info),
 
+                proc_var_name_remap         :: map(prog_var, string),
+
                 % Structure sharing information as obtained by the structure
                 % sharing analysis.
                 structure_sharing           :: structure_sharing_info,
@@ -2137,7 +2222,6 @@
                 % Structure reuse conditions obtained by the structure reuse
                 % analysis (CTGC).
                 structure_reuse             :: structure_reuse_info
-
         ).
 
 :- type structure_sharing_info
@@ -2205,7 +2289,7 @@
 structure_reuse_info_init = structure_reuse_info(no, no).
 
 proc_info_init(MContext, Arity, Types, DeclaredModes, Modes, MaybeArgLives,
-        MaybeDet, IsAddressTaken, ProcInfo) :-
+        MaybeDet, IsAddressTaken, VarNameRemap, ProcInfo) :-
     % Some parts of the procedure aren't known yet. We initialize them
     % to any old garbage which we will later throw away.
 
@@ -2230,21 +2314,28 @@
     ReuseInfo = structure_reuse_info_init,
     ProcSubInfo = proc_sub_info(no, no, Term2Info, IsAddressTaken, StackSlots,
         ArgInfo, InitialLiveness, no, no, no, no, no, no, no, no, no,
-        SharingInfo, ReuseInfo),
+        VarNameRemap, SharingInfo, ReuseInfo),
     ProcInfo = proc_info(MContext, BodyVarSet, BodyTypes, HeadVars, InstVarSet,
         DeclaredModes, Modes, no, MaybeArgLives, MaybeDet, InferredDet,
         ClauseBody, CanProcess, ModeErrors, RttiVarMaps, eval_normal,
         ProcSubInfo).
 
-proc_info_create(Context, VarSet, VarTypes, HeadVars, InstVarSet,
-        HeadModes, Detism, Goal, RttiVarMaps, IsAddressTaken, ProcInfo) :-
-    proc_info_create(Context, VarSet, VarTypes, HeadVars, InstVarSet,
-        HeadModes, yes(Detism), Detism, Goal, RttiVarMaps,
-        IsAddressTaken, ProcInfo).
-
 proc_info_create(Context, VarSet, VarTypes, HeadVars, InstVarSet, HeadModes,
-        MaybeDeclaredDetism, Detism, Goal, RttiVarMaps, IsAddressTaken,
-        ProcInfo) :-
+        Detism, Goal, RttiVarMaps, IsAddressTaken, VarNameRemap, ProcInfo) :-
+    proc_info_create_with_declared_detism(Context, VarSet, VarTypes, HeadVars,
+        InstVarSet, HeadModes, yes(Detism), Detism, Goal, RttiVarMaps,
+        IsAddressTaken, VarNameRemap, ProcInfo).
+
+:- pred proc_info_create_with_declared_detism(prog_context::in,
+    prog_varset::in, vartypes::in, list(prog_var)::in,
+    inst_varset::in, list(mer_mode)::in,
+    maybe(determinism)::in, determinism::in, hlds_goal::in,
+    rtti_varmaps::in, is_address_taken::in, map(prog_var, string)::in,
+    proc_info::out) is det.
+
+proc_info_create_with_declared_detism(Context, VarSet, VarTypes, HeadVars,
+        InstVarSet, HeadModes, MaybeDeclaredDetism, Detism, Goal, RttiVarMaps,
+        IsAddressTaken, VarNameRemap, ProcInfo) :-
     map.init(StackSlots),
     set.init(Liveness),
     MaybeHeadLives = no,
@@ -2254,7 +2345,7 @@
     ReuseInfo = structure_reuse_info_init,
     ProcSubInfo = proc_sub_info(no, no, Term2Info, IsAddressTaken,
         StackSlots, no, Liveness, no, no, no, no, no, no, no, no, no,
-        SharingInfo, ReuseInfo),
+        VarNameRemap, SharingInfo, ReuseInfo),
     ProcInfo = proc_info(Context, VarSet, VarTypes, HeadVars,
         InstVarSet, no, HeadModes, no, MaybeHeadLives,
         MaybeDeclaredDetism, Detism, Goal, yes, ModeErrors,
@@ -2300,8 +2391,8 @@
     PI ^ proc_sub_info ^ maybe_special_return).
 proc_info_get_maybe_deep_profile_info(PI,
     PI ^ proc_sub_info ^ maybe_deep_profile_proc_info).
-proc_info_get_maybe_untuple_info(PI,
-    PI ^ proc_sub_info ^ maybe_untuple_info).
+proc_info_get_maybe_untuple_info(PI, PI ^ proc_sub_info ^ maybe_untuple_info).
+proc_info_get_var_name_remap(PI, PI ^ proc_sub_info ^ proc_var_name_remap).
 
 proc_info_set_varset(VS, PI, PI ^ prog_varset := VS).
 proc_info_set_vartypes(VT, PI, PI ^ var_types := VT).
@@ -2344,6 +2435,8 @@
     PI ^ proc_sub_info ^ maybe_deep_profile_proc_info := DPI).
 proc_info_set_maybe_untuple_info(MUI, PI,
     PI ^ proc_sub_info ^ maybe_untuple_info := MUI).
+proc_info_set_var_name_remap(VNR, PI,
+    PI ^ proc_sub_info ^ proc_var_name_remap := VNR).
 
 proc_info_head_modes_constraint(ProcInfo, HeadModesConstraint) :-
     MaybeHeadModesConstraint = ProcInfo ^ maybe_head_modes_constraint,
Index: compiler/intermod.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/intermod.m,v
retrieving revision 1.219
diff -u -b -r1.219 intermod.m
--- compiler/intermod.m	7 May 2007 05:21:30 -0000	1.219
+++ compiler/intermod.m	14 May 2007 15:58:15 -0000
@@ -229,7 +229,7 @@
     map.lookup(PredTable0, PredId, PredInfo0),
     module_info_get_type_spec_info(ModuleInfo0, TypeSpecInfo),
     TypeSpecInfo = type_spec_info(_, TypeSpecForcePreds, _, _),
-    pred_info_clauses_info(PredInfo0, ClausesInfo0),
+    pred_info_get_clauses_info(PredInfo0, ClausesInfo0),
     (
         clauses_info_get_explicit_vartypes(ClausesInfo0, ExplicitVarTypes),
         map.is_empty(ExplicitVarTypes),
@@ -301,7 +301,7 @@
         pred_info_get_import_status(PredInfo, status_local)
     ),
     (
-        pred_info_clauses_info(PredInfo, ClauseInfo),
+        pred_info_get_clauses_info(PredInfo, ClauseInfo),
         clauses_info_clauses_only(ClauseInfo, Clauses),
 
         [ProcId | _ProcIds] = pred_info_procids(PredInfo),
@@ -1491,7 +1491,7 @@
     Name = pred_info_name(PredInfo),
     PredOrFunc = pred_info_is_pred_or_func(PredInfo),
     pred_info_get_arg_types(PredInfo, TVarSet, ExistQVars, ArgTypes),
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
     pred_info_get_purity(PredInfo, Purity),
     pred_info_get_class_context(PredInfo, ClassContext),
     pred_info_get_goal_type(PredInfo, GoalType),
@@ -1592,7 +1592,7 @@
     % The type specialization pragmas for exported preds should
     % already be in the interface file.
 
-    pred_info_clauses_info(PredInfo, ClausesInfo),
+    pred_info_get_clauses_info(PredInfo, ClausesInfo),
     clauses_info_get_varset(ClausesInfo, VarSet),
     clauses_info_get_headvar_list(ClausesInfo, HeadVars),
     clauses_info_clauses_only(ClausesInfo, Clauses),
Index: compiler/lambda.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/lambda.m,v
retrieving revision 1.128
diff -u -b -r1.128 lambda.m
--- compiler/lambda.m	19 Jan 2007 07:04:16 -0000	1.128
+++ compiler/lambda.m	16 May 2007 01:07:35 -0000
@@ -481,9 +481,10 @@
 
         % Now construct the proc_info and pred_info for the new single-mode
         % predicate, using the information computed above.
-        proc_info_create(LambdaContext, VarSet, VarTypes,
-            AllArgVars, InstVarSet, AllArgModes, Detism,
-            LambdaGoal, RttiVarMaps, address_is_taken, ProcInfo0),
+        map.init(VarNameRemap),
+        proc_info_create(LambdaContext, VarSet, VarTypes, AllArgVars,
+            InstVarSet, AllArgModes, Detism, LambdaGoal, RttiVarMaps,
+            address_is_taken, VarNameRemap, ProcInfo0),
 
         % The debugger ignores unnamed variables.
         ensure_all_headvars_are_named(ProcInfo0, ProcInfo1),
@@ -508,7 +509,7 @@
         pred_info_create(ModuleName, PredName, PredOrFunc, LambdaContext,
             origin_lambda(OrigFile, OrigLine, LambdaCount), status_local,
             LambdaMarkers, ArgTypes, TVarSet, ExistQVars, Constraints,
-            Assertions, ProcInfo, ProcId, PredInfo),
+            Assertions, VarNameRemap, ProcInfo, ProcId, PredInfo),
 
         % Save the new predicate in the predicate table.
         module_info_get_predicate_table(ModuleInfo1, PredicateTable0),
Index: compiler/loop_inv.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/loop_inv.m,v
retrieving revision 1.40
diff -u -b -r1.40 loop_inv.m
--- compiler/loop_inv.m	6 Jan 2007 09:23:40 -0000	1.40
+++ compiler/loop_inv.m	16 May 2007 01:08:23 -0000
@@ -776,6 +776,7 @@
     proc_info_get_inst_varset(ProcInfo, InstVarSet),
     pred_info_get_markers(PredInfo, Markers),
     pred_info_get_origin(PredInfo, OrigOrigin),
+    pred_info_get_var_name_remap(PredInfo, VarNameRemap),
 
     PredName = pred_info_name(PredInfo),
     PredOrFunc = pred_info_is_pred_or_func(PredInfo),
@@ -812,6 +813,7 @@
         Markers,        % in    - Markers for the new aux proc.
         address_is_not_taken,
                         % in    - The address of the new aux proc is not taken.
+        VarNameRemap,   % in
         ModuleInfo0,
         ModuleInfo,
         AuxPredProcId   % out   - The pred_proc_id for the new aux proc.
Index: compiler/mode_constraints.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/mode_constraints.m,v
retrieving revision 1.40
diff -u -b -r1.40 mode_constraints.m
--- compiler/mode_constraints.m	19 Jan 2007 07:04:22 -0000	1.40
+++ compiler/mode_constraints.m	15 May 2007 15:35:02 -0000
@@ -220,7 +220,7 @@
 correct_nonlocals_in_pred(PredId, !ModuleInfo) :-
     module_info_pred_info(!.ModuleInfo, PredId, PredInfo0),
     some [!ClausesInfo, !Varset, !Vartypes, !Clauses, !Goals, !RttiVarMaps] (
-        pred_info_clauses_info(PredInfo0, !:ClausesInfo),
+        pred_info_get_clauses_info(PredInfo0, !:ClausesInfo),
         clauses_info_clauses_only(!.ClausesInfo, !:Clauses),
         clauses_info_get_headvar_list(!.ClausesInfo, HeadVars),
         clauses_info_get_varset(!.ClausesInfo, !:Varset),
@@ -369,9 +369,10 @@
     fill_goal_path_slots_in_clauses(!.ModuleInfo, OmitModeEquivPrefix,
         PredInfo0, PredInfo1),
 
-    pred_info_clauses_info(PredInfo1, ClausesInfo0),
+    pred_info_get_clauses_info(PredInfo1, ClausesInfo0),
     clauses_info_get_headvar_list(ClausesInfo0, HeadVars),
-    InstGraph = PredInfo1 ^ inst_graph_info ^ implementation_inst_graph,
+    pred_info_get_inst_graph_info(PredInfo1, InstGraphInfo),
+    InstGraph = InstGraphInfo ^ implementation_inst_graph,
     inst_graph.foldl_reachable_from_list(
         ( pred(V::in, S0::in, S::out) is det :-
             mode_constraint_var(in(V), _, S0, S1),
@@ -599,9 +600,10 @@
         PredId, !.ModuleInfo, !IO),
     io.flush_output(!IO),
 
-    InstGraph = PredInfo0 ^ inst_graph_info ^ implementation_inst_graph,
+    pred_info_get_inst_graph_info(PredInfo0, InstGraphInfo),
+    InstGraph = InstGraphInfo ^ implementation_inst_graph,
     pred_info_get_procedures(PredInfo0, ProcTable0),
-    pred_info_clauses_info(PredInfo0, ClausesInfo0),
+    pred_info_get_clauses_info(PredInfo0, ClausesInfo0),
     clauses_info_get_headvar_list(ClausesInfo0, HeadVars),
 
     HOModes0 = map.init,
@@ -650,8 +652,9 @@
         !ModuleInfo, !IO) :-
 
     module_info_pred_info(!.ModuleInfo, PredId, PredInfo0),
-    InstGraph = PredInfo0 ^ inst_graph_info ^ implementation_inst_graph,
-    pred_info_clauses_info(PredInfo0, ClausesInfo),
+    pred_info_get_inst_graph_info(PredInfo0, InstGraphInfo),
+    InstGraph = InstGraphInfo ^ implementation_inst_graph,
+    pred_info_get_clauses_info(PredInfo0, ClausesInfo),
     clauses_info_get_headvar_list(ClausesInfo, HeadVars),
 
     % DMO document this better
@@ -659,7 +662,7 @@
     % as an ROBDD instead.
     solutions(arg_modes_map(HeadVars, InstGraph, ModeConstraint,
         ModeConstraintInfo0), Modes),
-    PredInfo = PredInfo0 ^ modes := Modes,
+    pred_info_set_arg_modes_maps(Modes, PredInfo0, PredInfo),
     % PredInfo = PredInfo0,
 
     % DEBUGGING CODE
@@ -1257,7 +1260,7 @@
         % This is a recursive call.
         % XXX we currently assume that all recursive calls are to the
         % same mode of the predicate.
-        pred_info_clauses_info(PredInfo, ClausesInfo),
+        pred_info_get_clauses_info(PredInfo, ClausesInfo),
         clauses_info_get_headvar_list(ClausesInfo, HeadVars),
         call_constraints(GoalPath, PredId, HeadVars, Args,
             !Constraint, !GCInfo)
@@ -1279,12 +1282,12 @@
                 CallConstraint, !GCInfo)
 
         ;
-            % The called predicate is from a lower (i.e. already
-            % mode-analysed) SCC, but does not have any mode
-            % declarations.
-            ArgModes = PredInfo ^ modes,
-            PredInstGraph = PredInfo ^ inst_graph_info ^ interface_inst_graph,
-            pred_info_clauses_info(PredInfo, PredClausesInfo),
+            % The called predicate is from a lower (i.e. already mode-analysed)
+            % SCC, but does not have any mode declarations.
+            pred_info_get_arg_modes_maps(PredInfo, ArgModes),
+            pred_info_get_inst_graph_info(PredInfo, InstGraphInfo),
+            PredInstGraph = InstGraphInfo ^ interface_inst_graph,
+            pred_info_get_clauses_info(PredInfo, PredClausesInfo),
             clauses_info_get_headvar_list(PredClausesInfo, PredHeadVars),
             solutions((pred((V - W)::out) is nondet :-
                 inst_graph.corresponding_nodes_from_lists(
Index: compiler/mode_errors.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/mode_errors.m,v
retrieving revision 1.114
diff -u -b -r1.114 mode_errors.m
--- compiler/mode_errors.m	19 Jan 2007 07:04:22 -0000	1.114
+++ compiler/mode_errors.m	14 May 2007 16:12:53 -0000
@@ -404,14 +404,12 @@
 
 mode_error_conj_to_spec(ModeInfo, Errors, Culprit) = Spec :-
     mode_info_get_context(ModeInfo, Context),
-    mode_info_get_varset(ModeInfo, VarSet),
-
     (
         Errors = [],
         unexpected(this_file, "mode_error_conj_to_spec: no errors")
     ;
         Errors = [Error],
-        Msgs1 = mode_error_conjunct_to_msgs(VarSet, Context, ModeInfo, Error)
+        Msgs1 = mode_error_conjunct_to_msgs(Context, ModeInfo, Error)
     ;
         Errors = [_, _ | _],
         % If there's more than one error, we use the setting of
@@ -429,11 +427,11 @@
             % In the absence of --verbose-errors, report only one error.
             % We prefer that this be an important error.
             ( ImportantErrors = [FirstImportantError | _] ->
-                ConjMsgs = mode_error_conjunct_to_msgs(VarSet, Context,
-                    ModeInfo, FirstImportantError)
+                ConjMsgs = mode_error_conjunct_to_msgs(Context, ModeInfo,
+                    FirstImportantError)
             ; OtherErrors = [FirstOtherError | _] ->
-                ConjMsgs = mode_error_conjunct_to_msgs(VarSet, Context,
-                    ModeInfo, FirstOtherError)
+                ConjMsgs = mode_error_conjunct_to_msgs(Context, ModeInfo,
+                    FirstOtherError)
             ;
                 unexpected(this_file,
                     "mode_error_conj_to_spec: no errors of any kind")
@@ -452,7 +450,7 @@
             Msgs1Start = [simple_msg(Context,
                 [always(Preamble ++ ConjPieces)])],
             Msgs1Rest = list.map(
-                mode_error_conjunct_to_msgs(VarSet, Context, ModeInfo),
+                mode_error_conjunct_to_msgs(Context, ModeInfo),
                 ImportantErrors ++ OtherErrors),
             Msgs1 = Msgs1Start ++ list.condense(Msgs1Rest)
         )
@@ -502,12 +500,13 @@
         true
     ).
 
-:- func mode_error_conjunct_to_msgs(prog_varset, prog_context, mode_info,
-    delayed_goal) = list(error_msg).
+:- func mode_error_conjunct_to_msgs(prog_context, mode_info, delayed_goal)
+    = list(error_msg).
 
-mode_error_conjunct_to_msgs(VarSet, Context, !.ModeInfo, DelayedGoal) = Msgs :-
+mode_error_conjunct_to_msgs(Context, !.ModeInfo, DelayedGoal) = Msgs :-
     DelayedGoal = delayed_goal(Vars, Error, Goal),
     set.to_sorted_list(Vars, VarList),
+    mode_info_get_varset(!.ModeInfo, VarSet),
     Pieces1 = [words("Floundered goal, waiting on {"),
         words(mercury_vars_to_string(VarSet, no, VarList)),
         words("}:"), nl],
@@ -1176,7 +1175,7 @@
         ;
             InferModesOpt = no,
             io.set_exit_status(1, !IO),
-            pred_info_context(PredInfo, Context),
+            pred_info_get_context(PredInfo, Context),
             MainPieces = [words("Error: no mode declaration for")] ++
                 describe_one_pred_name(!.ModuleInfo, should_not_module_qualify,
                     PredId) ++ [suffix("."), nl],
@@ -1192,7 +1191,7 @@
         )
     ;
         io.set_exit_status(1, !IO),
-        pred_info_context(PredInfo, Context),
+        pred_info_get_context(PredInfo, Context),
         Pieces = [words("Error: no mode declaration for exported")] ++
             describe_one_pred_name(!.ModuleInfo, should_module_qualify, PredId)
             ++ [suffix("."), nl],
@@ -1260,7 +1259,7 @@
         !IO) :-
     PredName = pred_info_name(PredInfo),
     Name = unqualified(PredName),
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
     PredArity = pred_info_orig_arity(PredInfo),
     some [!ArgModes, !MaybeDet] (
         proc_info_get_argmodes(ProcInfo, !:ArgModes),
Index: compiler/mode_info.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/mode_info.m,v
retrieving revision 1.93
diff -u -b -r1.93 mode_info.m
--- compiler/mode_info.m	15 Jan 2007 10:30:32 -0000	1.93
+++ compiler/mode_info.m	15 May 2007 02:06:39 -0000
@@ -282,6 +282,7 @@
 
 :- import_module check_hlds.delay_info.
 :- import_module check_hlds.mode_errors.
+:- import_module hlds.hlds_clauses.
 :- import_module libs.
 :- import_module libs.compiler_util.
 :- import_module libs.globals.
@@ -471,9 +472,9 @@
     NeedToRequantify = no,
     InNegatedContext = no,
 
-    ModeSubInfo = mode_sub_info(ProcId, VarSet, Unreachable, Changed,
-        CheckingExtraGoals, InstMapping0, WarningList, NeedToRequantify,
-        InNegatedContext, no, no),
+    ModeSubInfo = mode_sub_info(ProcId, VarSet, Unreachable,
+        Changed, CheckingExtraGoals, InstMapping0, WarningList,
+        NeedToRequantify, InNegatedContext, no, no),
 
     ModeInfo = mode_info(ModuleInfo, PredId, VarTypes, Debug,
         Context, ModeContext, InstMapping0, LockedVars, DelayInfo,
Index: compiler/mode_ordering.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/mode_ordering.m,v
retrieving revision 1.21
diff -u -b -r1.21 mode_ordering.m
--- compiler/mode_ordering.m	6 Jan 2007 10:56:16 -0000	1.21
+++ compiler/mode_ordering.m	15 May 2007 15:24:43 -0000
@@ -130,7 +130,8 @@
     pred_info_proc_info(!.PredInfo, ProcId, ProcInfo0),
     proc_info_head_modes_constraint(ProcInfo0, ModeDeclConstraint),
     Constraint = Constraint0 * ModeDeclConstraint,
-    InstGraph = !.PredInfo ^ inst_graph_info ^ implementation_inst_graph,
+    pred_info_get_inst_graph_info(!.PredInfo, InstGraphInfo),
+    InstGraph = InstGraphInfo ^ implementation_inst_graph,
     mode_ordering.proc(InstGraph, Constraint, ModeConstraintInfo,
         ModuleInfo, PredConstraintMap, ProcInfo0, ProcInfo),
     pred_info_set_proc_info(ProcId, ProcInfo, !PredInfo).
@@ -505,7 +506,8 @@
     lookup_pred_constraint(PredConstraintMap, PredId, _, MCInfo),
 
     module_info_pred_info(ModuleInfo, PredId, PredInfo),
-    CalleeInstGraph = PredInfo^inst_graph_info^interface_inst_graph,
+    pred_info_get_inst_graph_info(PredInfo, CalleeInstGraphInfo),
+    CalleeInstGraph = CalleeInstGraphInfo ^ interface_inst_graph,
     pred_info_get_procedures(PredInfo, ProcTable),
     map.to_assoc_list(ProcTable, ProcList),
     (
Index: compiler/modecheck_call.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/modecheck_call.m,v
retrieving revision 1.78
diff -u -b -r1.78 modecheck_call.m
--- compiler/modecheck_call.m	19 Jan 2007 07:04:23 -0000	1.78
+++ compiler/modecheck_call.m	14 May 2007 15:53:31 -0000
@@ -452,7 +452,7 @@
     mode_info_get_module_info(!.ModeInfo, ModuleInfo0),
     module_info_preds(ModuleInfo0, Preds0),
     map.lookup(Preds0, PredId, PredInfo0),
-    pred_info_context(PredInfo0, Context),
+    pred_info_get_context(PredInfo0, Context),
     list.length(ArgVars, Arity),
     list.duplicate(Arity, not_reached, FinalInsts),
     inst_lists_to_mode_list(InitialInsts, FinalInsts, Modes),
Index: compiler/modes.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/modes.m,v
retrieving revision 1.355
diff -u -b -r1.355 modes.m
--- compiler/modes.m	19 Jan 2007 07:04:23 -0000	1.355
+++ compiler/modes.m	14 May 2007 15:53:41 -0000
@@ -773,7 +773,7 @@
     % We use the context of the first clause, unless there weren't any clauses
     % at all, in which case we use the context of the mode declaration.
     module_info_pred_info(!.ModuleInfo, PredId, PredInfo),
-    pred_info_clauses_info(PredInfo, ClausesInfo),
+    pred_info_get_clauses_info(PredInfo, ClausesInfo),
     clauses_info_clauses_only(ClausesInfo, ClauseList),
     (
         ClauseList = [FirstClause | _],
@@ -2609,7 +2609,7 @@
     mode_info_get_module_info(!.ModeInfo, ModuleInfo),
     mode_info_get_predid(!.ModeInfo, PredId),
     module_info_pred_info(ModuleInfo, PredId, PredInfo),
-    pred_info_clauses_info(PredInfo, ClausesInfo),
+    pred_info_get_clauses_info(PredInfo, ClausesInfo),
     clauses_info_get_headvar_list(ClausesInfo, HeadVars),
     filter_headvar_unification_goals(HeadVars, DelayedGoals0,
         HeadVarUnificationGoals, NonHeadVarUnificationGoals0),
Index: compiler/ordering_mode_constraints.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/ordering_mode_constraints.m,v
retrieving revision 1.14
diff -u -b -r1.14 ordering_mode_constraints.m
--- compiler/ordering_mode_constraints.m	6 Jan 2007 10:56:16 -0000	1.14
+++ compiler/ordering_mode_constraints.m	14 May 2007 15:53:48 -0000
@@ -721,7 +721,7 @@
 
     (
         ProcIds = [],
-        pred_info_clauses_info(PredInfo, ClausesInfo),
+        pred_info_get_clauses_info(PredInfo, ClausesInfo),
         clauses_info_clauses_only(ClausesInfo, Clauses),
         Goals = list.map(func(Clause) = clause_body(Clause), Clauses),
         Indent = 0,
Index: compiler/pd_info.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/pd_info.m,v
retrieving revision 1.33
diff -u -b -r1.33 pd_info.m
--- compiler/pd_info.m	19 Jan 2007 07:04:25 -0000	1.33
+++ compiler/pd_info.m	16 May 2007 01:08:46 -0000
@@ -642,11 +642,12 @@
     proc_info_get_vartypes(ProcInfo, VarTypes),
     proc_info_get_rtti_varmaps(ProcInfo, RttiVarMaps),
     proc_info_get_inst_varset(ProcInfo, InstVarSet),
+    proc_info_get_var_name_remap(ProcInfo, VarNameRemap),
     % XXX handle the extra typeinfo arguments for
     % --typeinfo-liveness properly.
     hlds_pred.define_new_pred(Origin, Goal, CallGoal, Args, _ExtraArgs,
         InstMap, Name, TVarSet, VarTypes, ClassContext, RttiVarMaps,
-        VarSet, InstVarSet, Markers, address_is_not_taken,
+        VarSet, InstVarSet, Markers, address_is_not_taken, VarNameRemap,
         ModuleInfo0, ModuleInfo, PredProcId),
     pd_info_set_module_info(ModuleInfo, !PDInfo).
 
Index: compiler/polymorphism.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/polymorphism.m,v
retrieving revision 1.318
diff -u -b -r1.318 polymorphism.m
--- compiler/polymorphism.m	19 Jan 2007 07:04:26 -0000	1.318
+++ compiler/polymorphism.m	15 May 2007 01:57:43 -0000
@@ -462,7 +462,7 @@
     %
     module_info_preds(!.ModuleInfo, PredTable0),
     map.lookup(PredTable0, PredId, PredInfo0),
-    pred_info_clauses_info(PredInfo0, ClausesInfo0),
+    pred_info_get_clauses_info(PredInfo0, ClausesInfo0),
     clauses_info_get_vartypes(ClausesInfo0, VarTypes0),
     clauses_info_get_headvars(ClausesInfo0, HeadVars),
 
@@ -535,7 +535,7 @@
     % goals, varsets, types, etc., and computing some information in the
     % poly_info.
 
-    pred_info_clauses_info(PredInfo0, ClausesInfo0),
+    pred_info_get_clauses_info(PredInfo0, ClausesInfo0),
     polymorphism_process_clause_info(PredInfo0, !.ModuleInfo,
         ClausesInfo0, ClausesInfo, Info, ExtraArgModes),
     poly_info_get_module_info(Info, !:ModuleInfo),
Index: compiler/post_typecheck.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/post_typecheck.m,v
retrieving revision 1.118
diff -u -b -r1.118 post_typecheck.m
--- compiler/post_typecheck.m	19 Jan 2007 07:04:26 -0000	1.118
+++ compiler/post_typecheck.m	14 May 2007 15:54:36 -0000
@@ -236,7 +236,7 @@
         NumErrors = 0
     ),
 
-    pred_info_clauses_info(!.PredInfo, ClausesInfo0),
+    pred_info_get_clauses_info(!.PredInfo, ClausesInfo0),
     pred_info_get_head_type_params(!.PredInfo, HeadTypeParams),
     clauses_info_get_varset(ClausesInfo0, VarSet),
     clauses_info_get_vartypes(ClausesInfo0, VarTypesMap0),
@@ -343,7 +343,7 @@
 report_unsatisfied_constraints(ModuleInfo, PredId, PredInfo, Constraints,
         !Specs) :-
     pred_info_get_typevarset(PredInfo, TVarSet),
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
 
     PredIdPieces = describe_one_pred_name(ModuleInfo,
         should_not_module_qualify, PredId),
@@ -376,7 +376,7 @@
 report_unresolved_type_warning(ModuleInfo, PredId, PredInfo, VarSet, Errs,
         !Specs) :-
     pred_info_get_typevarset(PredInfo, TypeVarSet),
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
 
     PredIdPieces =
         describe_one_pred_name(ModuleInfo, should_not_module_qualify, PredId),
@@ -425,7 +425,7 @@
         % have the specified name and arity.
         pred_info_get_typevarset(CallerPredInfo, TVarSet),
         pred_info_get_markers(CallerPredInfo, Markers),
-        pred_info_clauses_info(CallerPredInfo, ClausesInfo),
+        pred_info_get_clauses_info(CallerPredInfo, ClausesInfo),
         clauses_info_get_vartypes(ClausesInfo, VarTypes),
         map.apply_to_list(Args0, VarTypes, ArgTypes),
         resolve_pred_overloading(ModuleInfo, Markers, ArgTypes, TVarSet,
@@ -481,7 +481,7 @@
     ( pred_info_is_pseudo_imported(!.PredInfo) ->
         true
     ;
-        pred_info_clauses_info(!.PredInfo, ClausesInfo0),
+        pred_info_get_clauses_info(!.PredInfo, ClausesInfo0),
         clauses_info_get_headvar_list(ClausesInfo0, HeadVars),
         pred_info_get_arg_types(!.PredInfo, ArgTypes),
         map.from_corresponding_lists(HeadVars, ArgTypes, VarTypes),
@@ -555,7 +555,7 @@
 
 promise_ex_goal(ModuleInfo, ExclusiveDeclPredId, Goal) :-
     module_info_pred_info(ModuleInfo, ExclusiveDeclPredId, PredInfo),
-    pred_info_clauses_info(PredInfo, ClausesInfo),
+    pred_info_get_clauses_info(PredInfo, ClausesInfo),
     clauses_info_clauses_only(ClausesInfo, Clauses),
     ( Clauses = [clause(_ProcIds, Goal0, _Lang, _Context)] ->
         assertion.normalise_goal(Goal0, Goal)
@@ -660,7 +660,7 @@
         RHS = rhs_var(_)
     ;
         RHS = rhs_functor(ConsId, _, _),
-        pred_info_clauses_info(PredInfo, ClausesInfo),
+        pred_info_get_clauses_info(PredInfo, ClausesInfo),
         clauses_info_get_vartypes(ClausesInfo, VarTypes),
         map.lookup(VarTypes, Var, Type),
         ( type_to_ctor_and_args(Type, TypeCtor, _) ->
@@ -736,7 +736,7 @@
         ->
             true
         ;
-            pred_info_context(PredInfo, Context),
+            pred_info_get_context(PredInfo, Context),
             Pieces = [words("Error: arguments of main/2"),
                 words("must have type `io.state'."), nl],
             Msg = simple_msg(Context, [always(Pieces)]),
Index: compiler/proc_gen.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/proc_gen.m,v
retrieving revision 1.18
diff -u -b -r1.18 proc_gen.m
--- compiler/proc_gen.m	19 Jan 2007 07:04:26 -0000	1.18
+++ compiler/proc_gen.m	16 May 2007 08:54:34 -0000
@@ -324,7 +324,7 @@
         OutsideResumePoint, TraceSlotInfo, CodeInfo0),
 
     % Find out the approriate context for the predicate's interface events.
-    pred_info_clauses_info(PredInfo, ClausesInfo),
+    pred_info_get_clauses_info(PredInfo, ClausesInfo),
     get_clause_list(ClausesInfo ^ clauses_rep, Clauses),
     (
         Clauses = [],
Index: compiler/prop_mode_constraints.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/prop_mode_constraints.m,v
retrieving revision 1.16
diff -u -b -r1.16 prop_mode_constraints.m
--- compiler/prop_mode_constraints.m	6 Jan 2007 09:23:49 -0000	1.16
+++ compiler/prop_mode_constraints.m	14 May 2007 15:54:42 -0000
@@ -236,7 +236,7 @@
 
 ensure_unique_arguments(PredId, !ModuleInfo) :-
     module_info_pred_info(!.ModuleInfo, PredId, PredInfo0),
-    pred_info_clauses_info(PredInfo0, ClausesInfo0),
+    pred_info_get_clauses_info(PredInfo0, ClausesInfo0),
     clauses_info_clauses_only(ClausesInfo0, Clauses0),
     clauses_info_get_varset(ClausesInfo0, Varset0),
     clauses_info_get_vartypes(ClausesInfo0, Vartypes0),
Index: compiler/purity.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/purity.m,v
retrieving revision 1.111
diff -u -b -r1.111 purity.m
--- compiler/purity.m	19 Jan 2007 07:04:29 -0000	1.111
+++ compiler/purity.m	14 May 2007 15:55:01 -0000
@@ -290,7 +290,7 @@
     pred_info_get_purity(!.PredInfo, DeclPurity) ,
     pred_info_get_promised_purity(!.PredInfo, PromisedPurity),
     some [!ClausesInfo] (
-        pred_info_clauses_info(!.PredInfo, !:ClausesInfo),
+        pred_info_get_clauses_info(!.PredInfo, !:ClausesInfo),
         clauses_info_clauses(Clauses0, !ClausesInfo),
         clauses_info_get_vartypes(!.ClausesInfo, VarTypes0),
         clauses_info_get_varset(!.ClausesInfo, VarSet0),
@@ -974,7 +974,7 @@
     = error_spec.
 
 error_inconsistent_promise(ModuleInfo, PredInfo, PredId, Purity) = Spec :-
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
     PredOrFunc = pred_info_is_pred_or_func(PredInfo),
     PredOrFuncStr = pred_or_func_to_full_str(PredOrFunc),
     purity_name(Purity, PurityName),
@@ -995,7 +995,7 @@
 
 warn_exaggerated_impurity_decl(ModuleInfo, PredInfo, PredId,
         DeclPurity, ActualPurity) = Spec :-
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
     PredContextPieces = pred_context(ModuleInfo, PredInfo, PredId),
     purity_name(DeclPurity, DeclPurityName),
     purity_name(ActualPurity, ActualPurityName),
@@ -1010,7 +1010,7 @@
 
 warn_unnecessary_promise_pure(ModuleInfo, PredInfo, PredId, PromisedPurity)
         = Spec :-
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
     PredContextPieces = pred_context(ModuleInfo, PredInfo, PredId),
     (
         PromisedPurity = purity_pure,
@@ -1040,7 +1040,7 @@
     = error_spec.
 
 error_inferred_impure(ModuleInfo, PredInfo, PredId, Purity) = Spec :-
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
     PredOrFunc = pred_info_is_pred_or_func(PredInfo),
     PredOrFuncStr = pred_or_func_to_full_str(PredOrFunc),
     PredContextPieces = pred_context(ModuleInfo, PredInfo, PredId),
Index: compiler/simplify.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/simplify.m,v
retrieving revision 1.209
diff -u -b -r1.209 simplify.m
--- compiler/simplify.m	7 May 2007 05:21:36 -0000	1.209
+++ compiler/simplify.m	16 May 2007 08:52:39 -0000
@@ -167,6 +167,7 @@
 :- import_module string.
 :- import_module term.
 :- import_module varset.
+:- import_module svvarset.
 
 %-----------------------------------------------------------------------------%
 
@@ -421,7 +422,14 @@
 
     simplify_process_clause_body_goal(Goal1, Goal, Info0, Info, !IO),
 
-    simplify_info_get_varset(Info, VarSet),
+    simplify_info_get_varset(Info, VarSet1),
+    ( simplify_do_after_front_end(Info) ->
+        proc_info_get_var_name_remap(!.ProcInfo, VarNameRemap),
+        map.foldl(svvarset.name_var, VarNameRemap, VarSet1, VarSet),
+        proc_info_set_var_name_remap(map.init, !ProcInfo)
+    ;
+        VarSet = VarSet1
+    ),
     simplify_info_get_var_types(Info, VarTypes),
     simplify_info_get_rtti_varmaps(Info, RttiVarMaps),
     proc_info_set_varset(VarSet, !ProcInfo),
Index: compiler/structure_reuse.analysis.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/structure_reuse.analysis.m,v
retrieving revision 1.8
diff -u -b -r1.8 structure_reuse.analysis.m
--- compiler/structure_reuse.analysis.m	19 Jan 2007 07:04:31 -0000	1.8
+++ compiler/structure_reuse.analysis.m	14 May 2007 15:57:30 -0000
@@ -315,7 +315,7 @@
         PredOrFunc = pred_info_is_pred_or_func(PredInfo),
         ModuleName = pred_info_module(PredInfo),
         pred_info_get_procedures(PredInfo, ProcTable),
-        pred_info_context(PredInfo, Context),
+        pred_info_get_context(PredInfo, Context),
         SymName = qualified(ModuleName, PredName),
         pred_info_get_typevarset(PredInfo, TypeVarSet),
         list.foldl(write_proc_reuse_info(ProcTable, PredOrFunc, SymName, 
Index: compiler/structure_reuse.versions.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/structure_reuse.versions.m,v
retrieving revision 1.6
diff -u -b -r1.6 structure_reuse.versions.m
--- compiler/structure_reuse.versions.m	6 Jan 2007 09:23:53 -0000	1.6
+++ compiler/structure_reuse.versions.m	16 May 2007 01:06:31 -0000
@@ -144,7 +144,7 @@
         ReusePredInfo, ReuseProcId):-
     ModuleName = pred_info_module(PredInfo),
     PredOrFunc = pred_info_is_pred_or_func(PredInfo),
-    pred_info_context(PredInfo, ProgContext),
+    pred_info_get_context(PredInfo, ProgContext),
     pred_info_get_origin(PredInfo, PredOrigin),
     pred_info_get_import_status(PredInfo, ImportStatus),
     pred_info_get_markers(PredInfo, PredMarkers),
@@ -153,10 +153,11 @@
     pred_info_get_exist_quant_tvars(PredInfo, ExistQTVars),
     pred_info_get_class_context(PredInfo, ProgConstraints),
     pred_info_get_assertions(PredInfo, AssertIds),
+    pred_info_get_var_name_remap(PredInfo, VarNameRemap),
     pred_info_create(ModuleName, ReusePredName, PredOrFunc, ProgContext,
         PredOrigin, ImportStatus, PredMarkers, MerTypes, TVarset,
-        ExistQTVars, ProgConstraints, AssertIds, ProcInfo, ReuseProcId,
-        ReusePredInfo).
+        ExistQTVars, ProgConstraints, AssertIds, VarNameRemap,
+        ProcInfo, ReuseProcId, ReusePredInfo).
 
 %------------------------------------------------------------------------------%
 
Index: compiler/structure_sharing.analysis.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/structure_sharing.analysis.m,v
retrieving revision 1.21
diff -u -b -r1.21 structure_sharing.analysis.m
--- compiler/structure_sharing.analysis.m	19 Jan 2007 07:04:31 -0000	1.21
+++ compiler/structure_sharing.analysis.m	14 May 2007 15:57:42 -0000
@@ -645,7 +645,7 @@
         PredOrFunc = pred_info_is_pred_or_func(PredInfo),
         ModuleName = pred_info_module(PredInfo),
         pred_info_get_procedures(PredInfo, ProcTable),
-        pred_info_context(PredInfo, Context),
+        pred_info_get_context(PredInfo, Context),
         SymName = qualified(ModuleName, PredName),
         pred_info_get_typevarset(PredInfo, TypeVarSet),
         list.foldl(
Index: compiler/table_gen.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/table_gen.m,v
retrieving revision 1.132
diff -u -b -r1.132 table_gen.m
--- compiler/table_gen.m	19 Jan 2007 07:04:32 -0000	1.132
+++ compiler/table_gen.m	16 May 2007 01:09:29 -0000
@@ -305,7 +305,7 @@
     = error_spec.
 
 report_missing_tabled_for_io(PredInfo, PredId, ProcId, ModuleInfo) = Spec :-
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
     ProcPieces = describe_one_proc_name(ModuleInfo,
         should_not_module_qualify, proc(PredId, ProcId)),
     Pieces = ProcPieces ++ [words("contains untabled I/O primitive."), nl],
@@ -329,7 +329,7 @@
         table_gen_transform_proc(EvalMethod, PredId, ProcId,
             !ProcInfo, !PredInfo, !ModuleInfo, !GenMap)
     ;
-        pred_info_context(!.PredInfo, Context),
+        pred_info_get_context(!.PredInfo, Context),
         ProcPieces = describe_one_proc_name(!.ModuleInfo,
             should_module_qualify, proc(PredId, ProcId)),
         EvalMethodStr = eval_method_to_string(EvalMethod),
@@ -1813,7 +1813,7 @@
     ModuleName = pred_info_module(PredInfo0),
     PredName0 = pred_info_name(PredInfo0),
     PredOrFunc = pred_info_is_pred_or_func(PredInfo0),
-    pred_info_context(PredInfo0, Context),
+    pred_info_get_context(PredInfo0, Context),
     % The generator is local even if the original predicate is exported.
     Status = status_local,
     pred_info_get_goal_type(PredInfo0, GoalType),
@@ -1825,7 +1825,8 @@
     pred_info_get_constraint_proofs(PredInfo0, ClassProofs),
     pred_info_get_constraint_map(PredInfo0, ClassConstraintMap),
     pred_info_get_origin(PredInfo0, OrigOrigin),
-    pred_info_clauses_info(PredInfo0, ClausesInfo),
+    pred_info_get_clauses_info(PredInfo0, ClausesInfo),
+    pred_info_get_var_name_remap(PredInfo0, VarNameRemap),
 
     PredName = qualified(ModuleName, "GeneratorFor_" ++ PredName0),
     assoc_list.from_corresponding_lists(HeadVars, ArgTypes0, HeadVarTypes),
@@ -1841,7 +1842,7 @@
     pred_info_init(ModuleName, PredName, Arity, PredOrFunc, Context,
         Origin, Status, GoalType, Markers, ArgTypes, TypeVarSet,
         ExistQVars, ClassContext, ClassProofs, ClassConstraintMap,
-        ClausesInfo, PredInfo),
+        ClausesInfo, VarNameRemap, PredInfo),
 
     ModuleInfo0 = !.TableInfo ^ table_module_info,
     module_info_get_predicate_table(ModuleInfo0, PredTable0),
@@ -1869,13 +1870,14 @@
     proc_info_get_inferred_determinism(ProcInfo, ProcDetism),
     proc_info_get_goal(ProcInfo, ProcGoal),
     proc_info_get_rtti_varmaps(ProcInfo, ProcRttiVarMaps),
+    proc_info_get_var_name_remap(ProcInfo, VarNameRemap),
     proc_info_create(ProcContext, ProcVarSet, ProcVarTypes, ProcHeadVars,
         ProcInstVarSet, ProcHeadModes, ProcDetism, ProcGoal, ProcRttiVarMaps,
-        address_is_not_taken, NewProcInfo),
+        address_is_not_taken, VarNameRemap, NewProcInfo),
     ModuleName = pred_info_module(PredInfo),
     OrigPredName = pred_info_name(PredInfo),
     PredOrFunc = pred_info_is_pred_or_func(PredInfo),
-    pred_info_context(PredInfo, PredContext),
+    pred_info_get_context(PredInfo, PredContext),
     NewPredName = qualified(ModuleName, "OutlinedForIOTablingFrom_" ++
         OrigPredName),
     pred_info_get_arg_types(PredInfo, PredArgTypes),
@@ -1887,7 +1889,7 @@
     pred_info_create(ModuleName, NewPredName, PredOrFunc, PredContext,
         origin_created(io_tabling), status_local, Markers, PredArgTypes,
         PredTypeVarSet, PredExistQVars, PredClassContext, PredAssertions,
-        NewProcInfo, NewProcId, NewPredInfo),
+        VarNameRemap, NewProcInfo, NewProcId, NewPredInfo),
     module_info_get_predicate_table(!.ModuleInfo, PredicateTable0),
     predicate_table_insert(NewPredInfo, NewPredId,
         PredicateTable0, PredicateTable),
Index: compiler/term_constr_build.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/term_constr_build.m,v
retrieving revision 1.16
diff -u -b -r1.16 term_constr_build.m
--- compiler/term_constr_build.m	13 Apr 2007 04:56:41 -0000	1.16
+++ compiler/term_constr_build.m	14 May 2007 15:58:50 -0000
@@ -193,7 +193,7 @@
 %   io.nl(!IO),
 %   io.flush_output(!IO),
     module_info_pred_proc_info(Module, PPId, PredInfo, ProcInfo),
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
     proc_info_get_vartypes(ProcInfo, VarTypes),
     proc_info_get_headvars(ProcInfo, HeadProgVars),
     proc_info_get_argmodes(ProcInfo, ArgModes0),
Index: compiler/term_constr_initial.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/term_constr_initial.m,v
retrieving revision 1.17
diff -u -b -r1.17 term_constr_initial.m
--- compiler/term_constr_initial.m	19 Jan 2007 07:04:32 -0000	1.17
+++ compiler/term_constr_initial.m	14 May 2007 15:58:58 -0000
@@ -280,7 +280,7 @@
 process_builtin_procs(MakeOptInt, PredId, ModuleInfo, !PredInfo) :-
     pred_info_get_import_status(!.PredInfo, ImportStatus),
     pred_info_get_markers(!.PredInfo, Markers),
-    pred_info_context(!.PredInfo, Context),
+    pred_info_get_context(!.PredInfo, Context),
     some [!ProcTable] (
         pred_info_get_procedures(!.PredInfo, !:ProcTable),
         ProcIds = pred_info_procids(!.PredInfo),
Index: compiler/term_constr_main.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/term_constr_main.m,v
retrieving revision 1.13
diff -u -b -r1.13 term_constr_main.m
--- compiler/term_constr_main.m	19 Jan 2007 07:04:32 -0000	1.13
+++ compiler/term_constr_main.m	14 May 2007 15:59:05 -0000
@@ -536,7 +536,7 @@
         ->
             PredName   = pred_info_name(PredInfo),
             pred_info_get_procedures(PredInfo, ProcTable),
-            pred_info_context(PredInfo, Context),
+            pred_info_get_context(PredInfo, Context),
             PredOrFunc = pred_info_is_pred_or_func(PredInfo),   
             ModuleName = pred_info_module(PredInfo),
             ProcIds    = pred_info_procids(PredInfo),   
Index: compiler/term_pass1.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/term_pass1.m,v
retrieving revision 1.34
diff -u -b -r1.34 term_pass1.m
--- compiler/term_pass1.m	13 Apr 2007 04:56:41 -0000	1.34
+++ compiler/term_pass1.m	14 May 2007 15:59:12 -0000
@@ -218,7 +218,7 @@
 find_arg_sizes_pred(PPId, PassInfo, OutputSupplierMap0, Result,
         TermErrors, !ModuleInfo, !IO) :-
     module_info_pred_proc_info(!.ModuleInfo, PPId, PredInfo, ProcInfo),
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
     proc_info_get_headvars(ProcInfo, Args),
     proc_info_get_argmodes(ProcInfo, ArgModes),
     proc_info_get_vartypes(ProcInfo, VarTypes),
Index: compiler/term_pass2.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/term_pass2.m,v
retrieving revision 1.29
diff -u -b -r1.29 term_pass2.m
--- compiler/term_pass2.m	13 Apr 2007 04:56:41 -0000	1.29
+++ compiler/term_pass2.m	14 May 2007 15:59:22 -0000
@@ -377,7 +377,7 @@
         RecSupplierMap, NewRecSupplierMap0, CallInfo0, Result,
         !ModuleInfo, !IO) :-
     module_info_pred_proc_info(!.ModuleInfo, PPId, PredInfo, ProcInfo),
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
     proc_info_get_goal(ProcInfo, Goal0),
     % The pretest code we add for compiler-generated unification and comparison
     % predicates uses type casts. It uses them in a way that is guaranteed
@@ -562,7 +562,7 @@
     map.to_assoc_list(NeighboursMap, NeighboursList),
     PPId = proc(PredId, _ProcId),
     module_info_pred_info(Module, PredId, PredInfo),
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
     zero_or_positive_weight_cycles_from_neighbours(NeighboursList,
         PPId, Context, 0, [], CallWeights, Cycles).
 
Index: compiler/term_util.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/term_util.m,v
retrieving revision 1.54
diff -u -b -r1.54 term_util.m
--- compiler/term_util.m	1 Dec 2006 15:04:25 -0000	1.54
+++ compiler/term_util.m	14 May 2007 15:59:29 -0000
@@ -352,7 +352,7 @@
     (
         SCC = [proc(PredId, _) | _],
         module_info_pred_info(ModuleInfo, PredId, PredInfo),
-        pred_info_context(PredInfo, Context)
+        pred_info_get_context(PredInfo, Context)
     ;
         SCC = [],
         unexpected(this_file, "get_context_from_scc/3: empty SCC.")
Index: compiler/termination.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/termination.m,v
retrieving revision 1.73
diff -u -b -r1.73 termination.m
--- compiler/termination.m	19 Jan 2007 07:04:32 -0000	1.73
+++ compiler/termination.m	14 May 2007 15:59:41 -0000
@@ -591,7 +591,7 @@
     module_info_preds(!.ModuleInfo, PredTable0),
     map.lookup(PredTable0, PredId, PredInfo0),
     pred_info_get_import_status(PredInfo0, ImportStatus),
-    pred_info_context(PredInfo0, Context),
+    pred_info_get_context(PredInfo0, Context),
     pred_info_get_procedures(PredInfo0, ProcTable0),
     pred_info_get_markers(PredInfo0, Markers),
     ProcIds = pred_info_procids(PredInfo0),
@@ -764,7 +764,7 @@
         term_util.make_bool_list(HeadVars, [], UsedArgs),
         ArgSizeInfo = yes(finite(0, UsedArgs))
     ;
-        pred_info_context(PredInfo, Context),
+        pred_info_get_context(PredInfo, Context),
         Error = is_builtin(PredId),
         ArgSizeInfo = yes(infinite([Context - Error]))
     ),
@@ -902,7 +902,7 @@
         PredOrFunc = pred_info_is_pred_or_func(PredInfo),
         ModuleName = pred_info_module(PredInfo),
         pred_info_get_procedures(PredInfo, ProcTable),
-        pred_info_context(PredInfo, Context),
+        pred_info_get_context(PredInfo, Context),
         SymName = qualified(ModuleName, PredName),
         write_proc_termination_info(PredId, ProcIds, ProcTable,
             PredOrFunc, SymName, Context, !IO)
Index: compiler/tupling.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/tupling.m,v
retrieving revision 1.36
diff -u -b -r1.36 tupling.m
--- compiler/tupling.m	6 Jan 2007 10:56:17 -0000	1.36
+++ compiler/tupling.m	16 May 2007 01:09:48 -0000
@@ -747,6 +747,7 @@
     proc_info_get_inst_varset(ProcInfo, InstVarSet),
     pred_info_get_markers(PredInfo, Markers),
     pred_info_get_origin(PredInfo, OrigOrigin),
+    pred_info_get_var_name_remap(PredInfo, VarNameRemap),
 
     PredName = pred_info_name(PredInfo),
     PredOrFunc = pred_info_is_pred_or_func(PredInfo),
@@ -779,6 +780,7 @@
         InstVarSet,             % in
         Markers,                % in
         address_is_not_taken,   % in
+        VarNameRemap,           % in
         ModuleInfo0,
         ModuleInfo,
         AuxPredProcId
@@ -937,7 +939,7 @@
         pred_info_name(PredInfo),
         pred_info_orig_arity(PredInfo),
         proc_id_to_int(ProcId)),
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
     Context = context(FileName, _),
     ProcLabelInContext = proc_label_in_context(pred_info_module(PredInfo),
         FileName, ProcLabel),
Index: compiler/typecheck.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/typecheck.m,v
retrieving revision 1.422
diff -u -b -r1.422 typecheck.m
--- compiler/typecheck.m	14 May 2007 10:58:18 -0000	1.422
+++ compiler/typecheck.m	14 May 2007 16:04:43 -0000
@@ -232,7 +232,7 @@
     PredName = pred_info_name(PredInfo),
     PredOrFunc = pred_info_is_pred_or_func(PredInfo),
     Name = unqualified(PredName),
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
     pred_info_get_arg_types(PredInfo, VarSet, ExistQVars, Types0),
     strip_builtin_qualifiers_from_type_list(Types0, Types),
     pred_info_get_class_context(PredInfo, ClassContext),
@@ -345,7 +345,7 @@
             pred_info_is_builtin(!.PredInfo)
         )
     ->
-        pred_info_clauses_info(!.PredInfo, ClausesInfo0),
+        pred_info_get_clauses_info(!.PredInfo, ClausesInfo0),
         clauses_info_get_clauses_rep(ClausesInfo0, ClausesRep0),
         IsEmpty = clause_list_is_empty(ClausesRep0),
         (
@@ -382,7 +382,7 @@
     pred_info_get_arg_types(!.PredInfo, _ArgTypeVarSet, ExistQVars0,
         ArgTypes0),
     some [!ClausesInfo, !Info, !HeadTypeParams] (
-        pred_info_clauses_info(!.PredInfo, !:ClausesInfo),
+        pred_info_get_clauses_info(!.PredInfo, !:ClausesInfo),
         clauses_info_get_clauses_rep(!.ClausesInfo, ClausesRep0),
         clauses_info_get_headvar_list(!.ClausesInfo, HeadVars),
         clauses_info_get_varset(!.ClausesInfo, VarSet0),
@@ -679,7 +679,7 @@
     ;
         CalleeName = "no_clauses"
     ),
-    pred_info_context(!.PredInfo, Context),
+    pred_info_get_context(!.PredInfo, Context),
     generate_simple_call(mercury_private_builtin_module, CalleeName,
         pf_predicate, only_mode, detism_det, purity_pure, [PredNameVar], [], [],
         ModuleInfo, Context, CallGoal),
@@ -879,7 +879,7 @@
 
 maybe_add_field_access_function_clause(ModuleInfo, !PredInfo) :-
     pred_info_get_import_status(!.PredInfo, ImportStatus),
-    pred_info_clauses_info(!.PredInfo, ClausesInfo0),
+    pred_info_get_clauses_info(!.PredInfo, ClausesInfo0),
     clauses_info_get_clauses_rep(ClausesInfo0, ClausesRep0),
     (
         pred_info_is_field_access_function(ModuleInfo, !.PredInfo),
@@ -888,7 +888,7 @@
     ->
         clauses_info_get_headvars(ClausesInfo0, HeadVars),
         proc_arg_vector_to_func_args(HeadVars, FuncArgs, FuncRetVal),
-        pred_info_context(!.PredInfo, Context),
+        pred_info_get_context(!.PredInfo, Context),
         FuncModule = pred_info_module(!.PredInfo),
         FuncName = pred_info_name(!.PredInfo),
         PredArity = pred_info_orig_arity(!.PredInfo),
Index: compiler/typecheck_errors.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/typecheck_errors.m,v
retrieving revision 1.38
diff -u -b -r1.38 typecheck_errors.m
--- compiler/typecheck_errors.m	14 May 2007 08:20:12 -0000	1.38
+++ compiler/typecheck_errors.m	14 May 2007 15:55:30 -0000
@@ -317,7 +317,7 @@
     PredPieces = describe_one_pred_name(ModuleInfo, should_not_module_qualify,
         PredId),
     Pieces = [words("Error: no clauses for") | PredPieces] ++ [suffix(".")],
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
     % It is possible (and even likely) that the error that got the exit
     % status set was caused by a syntax error in a clause defining this
     % predicate or function. Reporting a missing clause could therefore
@@ -340,7 +340,7 @@
     PredPieces = describe_one_pred_name(ModuleInfo, should_not_module_qualify,
         PredId),
     Pieces = [words("Warning: no clauses for ") | PredPieces] ++ [suffix(".")],
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
     Msg = simple_msg(Context,
         [option_is_set(warn_stubs, yes, [always(Pieces)])]),
     Severity = severity_conditional(warn_stubs, yes, severity_warning, no),
Index: compiler/unify_proc.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/unify_proc.m,v
retrieving revision 1.185
diff -u -b -r1.185 unify_proc.m
--- compiler/unify_proc.m	13 Apr 2007 04:56:42 -0000	1.185
+++ compiler/unify_proc.m	15 May 2007 01:57:49 -0000
@@ -351,7 +351,7 @@
         % to the proc_info, and mark the procedure as one that
         % cannot be processed yet.
         pred_info_get_procedures(!.PredInfo, !:ProcMap),
-        pred_info_clauses_info(!.PredInfo, ClausesInfo),
+        pred_info_get_clauses_info(!.PredInfo, ClausesInfo),
         map.lookup(!.ProcMap, ProcId, !:ProcInfo),
         proc_info_set_can_process(no, !ProcInfo),
 
Index: compiler/untupling.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/untupling.m,v
retrieving revision 1.26
diff -u -b -r1.26 untupling.m
--- compiler/untupling.m	19 Jan 2007 07:04:35 -0000	1.26
+++ compiler/untupling.m	16 May 2007 01:10:07 -0000
@@ -422,6 +422,7 @@
     proc_info_get_inst_varset(ProcInfo, InstVarSet),
     pred_info_get_markers(PredInfo, Markers),
     pred_info_get_origin(PredInfo, OrigOrigin),
+    pred_info_get_var_name_remap(PredInfo, VarNameRemap),
 
     PredName = pred_info_name(PredInfo),
     PredOrFunc = pred_info_is_pred_or_func(PredInfo),
@@ -441,7 +442,7 @@
     hlds_pred.define_new_pred(Origin, Goal, CallAux, AuxHeadVars, _ExtraArgs,
         InitialAuxInstMap, AuxPredName, TVarSet, VarTypes, ClassContext,
         RttiVarMaps, VarSet, InstVarSet, Markers, address_is_not_taken,
-        !ModuleInfo, proc(AuxPredId, AuxProcId)),
+        VarNameRemap, !ModuleInfo, proc(AuxPredId, AuxProcId)),
 
     module_info_pred_proc_info(!.ModuleInfo, AuxPredId, AuxProcId,
         AuxPredInfo, AuxProcInfo).
Index: compiler/unused_args.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/unused_args.m,v
retrieving revision 1.142
diff -u -b -r1.142 unused_args.m
--- compiler/unused_args.m	19 Jan 2007 07:04:35 -0000	1.142
+++ compiler/unused_args.m	16 May 2007 01:10:22 -0000
@@ -1172,11 +1172,12 @@
     Arity = pred_info_orig_arity(!.PredInfo),
     pred_info_get_typevarset(!.PredInfo, TypeVars),
     remove_listof_elements(1, UnusedArgs, ArgTypes0, ArgTypes),
-    pred_info_context(!.PredInfo, Context),
-    pred_info_clauses_info(!.PredInfo, ClausesInfo),
+    pred_info_get_context(!.PredInfo, Context),
+    pred_info_get_clauses_info(!.PredInfo, ClausesInfo),
     pred_info_get_markers(!.PredInfo, Markers),
     pred_info_get_goal_type(!.PredInfo, GoalType),
     pred_info_get_class_context(!.PredInfo, ClassContext),
+    pred_info_get_var_name_remap(!.PredInfo, VarNameRemap),
 
     % Since this pred_info isn't built until after the polymorphism
     % transformation is complete, we just use dummy maps for the class
@@ -1188,7 +1189,7 @@
     pred_info_init(PredModule, Name, Arity, PredOrFunc, Context, Origin,
         Status, GoalType, Markers, ArgTypes, Tvars, ExistQVars,
         ClassContext, EmptyProofs, EmptyConstraintMap, ClausesInfo,
-        !:PredInfo),
+        VarNameRemap, !:PredInfo),
     pred_info_set_typevarset(TypeVars, !PredInfo).
 
     % Replace the goal in the procedure with one to call the given
@@ -1835,7 +1836,7 @@
 
 report_unused_args(_ModuleInfo, PredInfo, UnusedArgs) = Spec :-
     list.length(UnusedArgs, NumArgs),
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
     PredOrFunc = pred_info_is_pred_or_func(PredInfo),
     ModuleName = pred_info_module(PredInfo),
     PredName = pred_info_name(PredInfo),
Index: compiler/unused_imports.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/unused_imports.m,v
retrieving revision 1.9
diff -u -b -r1.9 unused_imports.m
--- compiler/unused_imports.m	19 Apr 2007 02:12:49 -0000	1.9
+++ compiler/unused_imports.m	14 May 2007 15:55:42 -0000
@@ -338,7 +338,7 @@
         pred_info_get_procedures(PredInfo, ProcTable),
         map.foldl(proc_info_used_modules(Visibility), ProcTable, !UsedModules),
 
-        pred_info_clauses_info(PredInfo, ClausesInfo),
+        pred_info_get_clauses_info(PredInfo, ClausesInfo),
         clauses_info_used_modules(ClausesInfo, !UsedModules)
     ;
         true
Index: compiler/xml_documentation.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/compiler/xml_documentation.m,v
retrieving revision 1.14
diff -u -b -r1.14 xml_documentation.m
--- compiler/xml_documentation.m	20 Apr 2007 03:46:26 -0000	1.14
+++ compiler/xml_documentation.m	14 May 2007 15:55:47 -0000
@@ -487,7 +487,7 @@
 
     Types = get_orig_arg_types(PredInfo),
     pred_info_get_class_context(PredInfo, Constraints),
-    pred_info_context(PredInfo, Context),
+    pred_info_get_context(PredInfo, Context),
     (
         IsPredOrFunc = pf_predicate,
         Tag = "predicate"
cvs diff: Diffing compiler/notes
cvs diff: Diffing debian
cvs diff: Diffing debian/patches
cvs diff: Diffing deep_profiler
cvs diff: Diffing deep_profiler/notes
cvs diff: Diffing doc
cvs diff: Diffing extras
cvs diff: Diffing extras/base64
cvs diff: Diffing extras/cgi
cvs diff: Diffing extras/complex_numbers
cvs diff: Diffing extras/complex_numbers/samples
cvs diff: Diffing extras/complex_numbers/tests
cvs diff: Diffing extras/concurrency
cvs diff: Diffing extras/curs
cvs diff: Diffing extras/curs/samples
cvs diff: Diffing extras/curses
cvs diff: Diffing extras/curses/sample
cvs diff: Diffing extras/dynamic_linking
cvs diff: Diffing extras/error
cvs diff: Diffing extras/fixed
cvs diff: Diffing extras/gator
cvs diff: Diffing extras/gator/generations
cvs diff: Diffing extras/gator/generations/1
cvs diff: Diffing extras/graphics
cvs diff: Diffing extras/graphics/easyx
cvs diff: Diffing extras/graphics/easyx/samples
cvs diff: Diffing extras/graphics/mercury_allegro
cvs diff: Diffing extras/graphics/mercury_allegro/examples
cvs diff: Diffing extras/graphics/mercury_allegro/samples
cvs diff: Diffing extras/graphics/mercury_allegro/samples/demo
cvs diff: Diffing extras/graphics/mercury_allegro/samples/mandel
cvs diff: Diffing extras/graphics/mercury_allegro/samples/pendulum2
cvs diff: Diffing extras/graphics/mercury_allegro/samples/speed
cvs diff: Diffing extras/graphics/mercury_glut
cvs diff: Diffing extras/graphics/mercury_opengl
cvs diff: Diffing extras/graphics/mercury_tcltk
cvs diff: Diffing extras/graphics/samples
cvs diff: Diffing extras/graphics/samples/calc
cvs diff: Diffing extras/graphics/samples/gears
cvs diff: Diffing extras/graphics/samples/maze
cvs diff: Diffing extras/graphics/samples/pent
cvs diff: Diffing extras/lazy_evaluation
cvs diff: Diffing extras/lex
cvs diff: Diffing extras/lex/samples
cvs diff: Diffing extras/lex/tests
cvs diff: Diffing extras/log4m
cvs diff: Diffing extras/logged_output
cvs diff: Diffing extras/moose
cvs diff: Diffing extras/moose/samples
cvs diff: Diffing extras/moose/tests
cvs diff: Diffing extras/mopenssl
cvs diff: Diffing extras/morphine
cvs diff: Diffing extras/morphine/non-regression-tests
cvs diff: Diffing extras/morphine/scripts
cvs diff: Diffing extras/morphine/source
cvs diff: Diffing extras/net
cvs diff: Diffing extras/odbc
cvs diff: Diffing extras/posix
cvs diff: Diffing extras/quickcheck
cvs diff: Diffing extras/quickcheck/tutes
cvs diff: Diffing extras/references
cvs diff: Diffing extras/references/samples
cvs diff: Diffing extras/references/tests
cvs diff: Diffing extras/solver_types
cvs diff: Diffing extras/solver_types/library
cvs diff: Diffing extras/trailed_update
cvs diff: Diffing extras/trailed_update/samples
cvs diff: Diffing extras/trailed_update/tests
cvs diff: Diffing extras/windows_installer_generator
cvs diff: Diffing extras/windows_installer_generator/sample
cvs diff: Diffing extras/windows_installer_generator/sample/images
cvs diff: Diffing extras/xml
cvs diff: Diffing extras/xml/samples
cvs diff: Diffing extras/xml_stylesheets
cvs diff: Diffing java
cvs diff: Diffing java/runtime
cvs diff: Diffing library
cvs diff: Diffing mdbcomp
cvs diff: Diffing profiler
cvs diff: Diffing robdd
cvs diff: Diffing runtime
cvs diff: Diffing runtime/GETOPT
cvs diff: Diffing runtime/machdeps
cvs diff: Diffing samples
cvs diff: Diffing samples/c_interface
cvs diff: Diffing samples/c_interface/c_calls_mercury
cvs diff: Diffing samples/c_interface/cplusplus_calls_mercury
cvs diff: Diffing samples/c_interface/mercury_calls_c
cvs diff: Diffing samples/c_interface/mercury_calls_cplusplus
cvs diff: Diffing samples/c_interface/mercury_calls_fortran
cvs diff: Diffing samples/c_interface/simpler_c_calls_mercury
cvs diff: Diffing samples/c_interface/simpler_cplusplus_calls_mercury
cvs diff: Diffing samples/c_interface/standalone_c
cvs diff: Diffing samples/diff
cvs diff: Diffing samples/muz
cvs diff: Diffing samples/rot13
cvs diff: Diffing samples/solutions
cvs diff: Diffing samples/solver_types
cvs diff: Diffing samples/tests
cvs diff: Diffing samples/tests/c_interface
cvs diff: Diffing samples/tests/c_interface/c_calls_mercury
cvs diff: Diffing samples/tests/c_interface/cplusplus_calls_mercury
cvs diff: Diffing samples/tests/c_interface/mercury_calls_c
cvs diff: Diffing samples/tests/c_interface/mercury_calls_cplusplus
cvs diff: Diffing samples/tests/c_interface/mercury_calls_fortran
cvs diff: Diffing samples/tests/c_interface/simpler_c_calls_mercury
cvs diff: Diffing samples/tests/c_interface/simpler_cplusplus_calls_mercury
cvs diff: Diffing samples/tests/diff
cvs diff: Diffing samples/tests/muz
cvs diff: Diffing samples/tests/rot13
cvs diff: Diffing samples/tests/solutions
cvs diff: Diffing samples/tests/toplevel
cvs diff: Diffing scripts
cvs diff: Diffing slice
cvs diff: Diffing tests
cvs diff: Diffing tests/benchmarks
cvs diff: Diffing tests/debugger
cvs diff: Diffing tests/debugger/declarative
cvs diff: Diffing tests/dppd
cvs diff: Diffing tests/general
cvs diff: Diffing tests/general/accumulator
cvs diff: Diffing tests/general/string_format
cvs diff: Diffing tests/general/structure_reuse
cvs diff: Diffing tests/grade_subdirs
cvs diff: Diffing tests/hard_coded
cvs diff: Diffing tests/hard_coded/exceptions
cvs diff: Diffing tests/hard_coded/purity
cvs diff: Diffing tests/hard_coded/sub-modules
cvs diff: Diffing tests/hard_coded/typeclasses
cvs diff: Diffing tests/invalid
Index: tests/invalid/ho_type_mode_bug.err_exp
===================================================================
RCS file: /home/mercury/mercury1/repository/tests/invalid/ho_type_mode_bug.err_exp,v
retrieving revision 1.7
diff -u -b -r1.7 ho_type_mode_bug.err_exp
--- tests/invalid/ho_type_mode_bug.err_exp	7 Sep 2006 05:51:28 -0000	1.7
+++ tests/invalid/ho_type_mode_bug.err_exp	16 May 2007 10:15:02 -0000
@@ -29,15 +29,16 @@
 ho_type_mode_bug.m:024:   In clause for `my_foldl2((pred(in, in, out) is det),
 ho_type_mode_bug.m:024:   in, in, out, in, out)':
 ho_type_mode_bug.m:024:   in argument 4 of clause head:
-ho_type_mode_bug.m:024:   mode error in unification of `FirstAcc' and
+ho_type_mode_bug.m:024:   mode error in unification of `HeadVar__4' and
 ho_type_mode_bug.m:024:   `FirstAcc'.
-ho_type_mode_bug.m:024:   Variable `FirstAcc' has instantiatedness `free',
+ho_type_mode_bug.m:024:   Variable `HeadVar__4' has instantiatedness `free',
 ho_type_mode_bug.m:024:   variable `FirstAcc' has instantiatedness `free'.
 ho_type_mode_bug.m:024:   In clause for `my_foldl2((pred(in, in, out) is det),
 ho_type_mode_bug.m:024:   in, in, out, in, out)':
 ho_type_mode_bug.m:024:   in argument 6 of clause head:
-ho_type_mode_bug.m:024:   mode error in unification of `SecAcc' and `SecAcc'.
-ho_type_mode_bug.m:024:   Variable `SecAcc' has instantiatedness `free',
+ho_type_mode_bug.m:024:   mode error in unification of `HeadVar__6' and
+ho_type_mode_bug.m:024:   `SecAcc'.
+ho_type_mode_bug.m:024:   Variable `HeadVar__6' has instantiatedness `free',
 ho_type_mode_bug.m:024:   variable `SecAcc' has instantiatedness `free'.
 ho_type_mode_bug.m:026: In clause for `my_foldl2((pred(in, in, out) is det),
 ho_type_mode_bug.m:026:   in, in, out, di, uo)':
@@ -70,13 +71,14 @@
 ho_type_mode_bug.m:024:   In clause for `my_foldl2((pred(in, in, out) is det),
 ho_type_mode_bug.m:024:   in, in, out, di, uo)':
 ho_type_mode_bug.m:024:   in argument 4 of clause head:
-ho_type_mode_bug.m:024:   mode error in unification of `FirstAcc' and
+ho_type_mode_bug.m:024:   mode error in unification of `HeadVar__4' and
 ho_type_mode_bug.m:024:   `FirstAcc'.
-ho_type_mode_bug.m:024:   Variable `FirstAcc' has instantiatedness `free',
+ho_type_mode_bug.m:024:   Variable `HeadVar__4' has instantiatedness `free',
 ho_type_mode_bug.m:024:   variable `FirstAcc' has instantiatedness `free'.
 ho_type_mode_bug.m:024:   In clause for `my_foldl2((pred(in, in, out) is det),
 ho_type_mode_bug.m:024:   in, in, out, di, uo)':
 ho_type_mode_bug.m:024:   in argument 6 of clause head:
-ho_type_mode_bug.m:024:   mode error in unification of `SecAcc' and `SecAcc'.
-ho_type_mode_bug.m:024:   Variable `SecAcc' has instantiatedness `free',
+ho_type_mode_bug.m:024:   mode error in unification of `HeadVar__6' and
+ho_type_mode_bug.m:024:   `SecAcc'.
+ho_type_mode_bug.m:024:   Variable `HeadVar__6' has instantiatedness `free',
 ho_type_mode_bug.m:024:   variable `SecAcc' has instantiatedness `free'.
Index: tests/invalid/merge_ground_any.err_exp
===================================================================
RCS file: /home/mercury/mercury1/repository/tests/invalid/merge_ground_any.err_exp,v
retrieving revision 1.9
diff -u -b -r1.9 merge_ground_any.err_exp
--- tests/invalid/merge_ground_any.err_exp	7 Sep 2006 05:51:29 -0000	1.9
+++ tests/invalid/merge_ground_any.err_exp	16 May 2007 10:15:19 -0000
@@ -3,7 +3,7 @@
 merge_ground_any.m:013:   out(merge_ground_any.hpair(ground, any)))':
 merge_ground_any.m:013:   mode error: argument 5 did not get sufficiently
 merge_ground_any.m:013:   instantiated.
-merge_ground_any.m:013:   Final instantiatedness of `X' was
+merge_ground_any.m:013:   Final instantiatedness of `HeadVar__3' was
 merge_ground_any.m:013:   `bound(merge_ground_any.'+'(ground, ground) ;
 merge_ground_any.m:013:   merge_ground_any.'-'(ground, any))',
 merge_ground_any.m:013:   expected final instantiatedness was
cvs diff: Diffing tests/invalid/purity
cvs diff: Diffing tests/misc_tests
cvs diff: Diffing tests/mmc_make
cvs diff: Diffing tests/mmc_make/lib
cvs diff: Diffing tests/par_conj
cvs diff: Diffing tests/recompilation
cvs diff: Diffing tests/tabling
cvs diff: Diffing tests/term
cvs diff: Diffing tests/trailing
cvs diff: Diffing tests/valid
cvs diff: Diffing tests/warnings
cvs diff: Diffing tools
cvs diff: Diffing trace
cvs diff: Diffing util
cvs diff: Diffing vim
cvs diff: Diffing vim/after
cvs diff: Diffing vim/ftplugin
cvs diff: Diffing vim/syntax
--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to:       mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions:          mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------



More information about the reviews mailing list