[m-rev.] diff: head variable numer vector

Zoltan Somogyi zs at cs.mu.OZ.AU
Fri Apr 12 17:25:52 AEST 2002


To handle the tracing of dependencies in polymorphic predicates, the
declarative debugger will soon need to know, for each procedure,
the full list of that procedure's head variables, not just the list of
programmer-created head variables.

To this end, we add to each procedure's layout structure a vector
of the head variables' variable numbers.

Code to make use of this new vector will be in a later change.

compiler/layout.m;
	Add a way to refer to the head variable number vector.

compiler/layout_out.m;
compiler/opt_debug.m;
	Add code to output the head variable number vector.

compiler/stack_layout.m;
	Add code to generate the head variable number vector.

	Fix some old variable names.

runtime/mercury_stack_layout.h;
	Add the head variable number vector to procedure layouts.

	Add some missing documentation.

Zoltan.

cvs diff: Diffing .
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/tests
cvs diff: Diffing browser
cvs diff: Diffing bytecode
cvs diff: Diffing compiler
Index: compiler/layout.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/layout.m,v
retrieving revision 1.5
diff -u -b -r1.5 layout.m
--- compiler/layout.m	20 Mar 2002 12:36:28 -0000	1.5
+++ compiler/layout.m	12 Apr 2002 06:45:20 -0000
@@ -140,7 +140,17 @@
 			call_label_layout	:: layout_name,
 			proc_body		:: maybe(rval),
 			maybe_table_io_decl	:: maybe(layout_name),
-			var_names		:: list(int), % offsets
+			head_var_nums		:: list(int),
+						% The variable numbers of the
+						% head variables, including the
+						% ones added by the compiler,
+						% in order. The length of the
+						% list must be the same as the
+						% procedure's arity.
+			var_names		:: list(int),
+						% Each variable name is an
+						% offset into the module's
+						% string table.
 			max_var_num		:: int,
 			max_r_num		:: int,
 			maybe_from_full_slot	:: maybe(int),
@@ -165,6 +175,10 @@
 	;	proc_layout(proc_label, proc_layout_kind)
 		% A proc layout structure for stack tracing, accurate gc
 		% and/or execution tracing.
+	;	proc_layout_head_var_nums(proc_label)
+		% A vector of variable numbers, containing the numbers of the
+		% procedure's head variables, including the ones generated by
+		% the compiler.
 	;	proc_layout_var_names(proc_label)
 		% A vector of variable names (represented as offsets into
 		% the string table) for a procedure layout structure.
Index: compiler/layout_out.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/layout_out.m,v
retrieving revision 1.8
diff -u -b -r1.8 layout_out.m
--- compiler/layout_out.m	20 Mar 2002 12:36:28 -0000	1.8
+++ compiler/layout_out.m	12 Apr 2002 07:09:54 -0000
@@ -195,6 +195,10 @@
 	io__write_string(mercury_data_prefix),
 	io__write_string("_proc_layout__"),
 	output_proc_label(ProcLabel).
+output_layout_name(proc_layout_head_var_nums(ProcLabel)) -->
+	io__write_string(mercury_data_prefix),
+	io__write_string("_head_var_nums__"),
+	output_proc_label(ProcLabel).
 output_layout_name(proc_layout_var_names(ProcLabel)) -->
 	io__write_string(mercury_data_prefix),
 	io__write_string("_var_names__"),
@@ -274,6 +278,12 @@
 	io__write_string(kind_to_type(Kind)),
 	io__write_string(" "),
 	output_layout_name(proc_layout(ProcLabel, Kind)).
+output_layout_name_storage_type_name(proc_layout_head_var_nums(ProcLabel),
+		_BeingDefined) -->
+	io__write_string("static const "),
+	io__write_string("MR_int_least16_t "),
+	output_layout_name(proc_layout_head_var_nums(ProcLabel)),
+	io__write_string("[]").
 output_layout_name_storage_type_name(proc_layout_var_names(ProcLabel),
 		_BeingDefined) -->
 	io__write_string("static const "),
@@ -355,6 +365,7 @@
 
 layout_name_would_include_code_addr(label_layout(_, _)) = no.
 layout_name_would_include_code_addr(proc_layout(_, _)) = yes.
+layout_name_would_include_code_addr(proc_layout_head_var_nums(_)) = no.
 layout_name_would_include_code_addr(proc_layout_var_names(_)) = no.
 layout_name_would_include_code_addr(closure_proc_id(_, _, _)) = no.
 layout_name_would_include_code_addr(file_layout(_, _)) = no.
@@ -477,33 +488,36 @@
 	{ Kind = maybe_proc_layout_and_exec_trace_kind(MaybeRest, ProcLabel) },
 	(
 		{ MaybeRest = no_proc_id },
-		output_layout_traversal_decls(Traversal, DeclSet0, DeclSet3),
+		output_layout_traversal_decls(Traversal, DeclSet0, DeclSet4),
 		output_proc_layout_data_defn_start(ProcLabel, Kind, Traversal),
 		output_layout_no_proc_id_group,
 		output_proc_layout_data_defn_end
 	;
 		{ MaybeRest = proc_id_only },
-		output_layout_traversal_decls(Traversal, DeclSet0, DeclSet3),
+		output_layout_traversal_decls(Traversal, DeclSet0, DeclSet4),
 		output_proc_layout_data_defn_start(ProcLabel, Kind, Traversal),
 		output_layout_proc_id_group(ProcLabel),
 		output_layout_no_exec_trace_group,
 		output_proc_layout_data_defn_end
 	;
 		{ MaybeRest = proc_id_and_exec_trace(ExecTrace) },
+		{ HeadVarNums = ExecTrace ^ head_var_nums },
+		output_proc_layout_head_var_nums(ProcLabel, HeadVarNums,
+			DeclSet0, DeclSet1),
 		{ VarNames = ExecTrace ^ var_names },
 		{ MaxVarNum = ExecTrace ^ max_var_num },
 		output_proc_layout_var_names(ProcLabel, VarNames, MaxVarNum,
-			DeclSet0, DeclSet1),
-		output_layout_traversal_decls(Traversal, DeclSet1, DeclSet2),
+			DeclSet1, DeclSet2),
+		output_layout_traversal_decls(Traversal, DeclSet2, DeclSet3),
 		output_layout_exec_trace_decls(ProcLabel, ExecTrace,
-			DeclSet2, DeclSet3),
+			DeclSet3, DeclSet4),
 
 		output_proc_layout_data_defn_start(ProcLabel, Kind, Traversal),
 		output_layout_proc_id_group(ProcLabel),
 		output_layout_exec_trace_group(ProcLabel, ExecTrace),
 		output_proc_layout_data_defn_end
 	),
-	{ decl_set_insert(DeclSet3, data_addr(
+	{ decl_set_insert(DeclSet4, data_addr(
 		layout_addr(proc_layout(ProcLabel, Kind))), DeclSet) }.
 
 :- func maybe_proc_layout_and_exec_trace_kind(maybe_proc_id_and_exec_trace,
@@ -617,10 +631,10 @@
 
 output_layout_exec_trace_decls(ProcLabel, ExecTrace, DeclSet0, DeclSet) -->
 	{ ExecTrace = proc_layout_exec_trace(CallLabelLayout, MaybeProcBody,
-		MaybeTableIoDecl, _VarNames, _MaxVarNum, _MaxRegNum,
-		_MaybeFromFullSlot, _MaybeIoSeqSlot, _MaybeTrailSlot,
-		_MaybeMaxfrSlot, _EvalMethod, _MaybeCallTableSlot,
-		_MaybeDeclDebugSlot) },
+		MaybeTableIoDecl, _HeadVarNums, _VarNames, _MaxVarNum,
+		_MaxRegNum, _MaybeFromFullSlot, _MaybeIoSeqSlot,
+		_MaybeTrailSlot, _MaybeMaxfrSlot, _EvalMethod,
+		_MaybeCallTableSlot, _MaybeDeclDebugSlot) },
 	{ ModuleName = get_defining_module_name(ProcLabel) },
 	output_layout_decl(CallLabelLayout, DeclSet0, DeclSet1),
 	output_layout_decl(module_layout(ModuleName), DeclSet1, DeclSet2),
@@ -644,8 +658,8 @@
 
 output_layout_exec_trace_group(ProcLabel, ExecTrace) -->
 	{ ExecTrace = proc_layout_exec_trace(CallLabelLayout, MaybeProcBody,
-		MaybeTableIoDecl, _VarNames, MaxVarNum, MaxRegNum,
-		MaybeFromFullSlot, MaybeIoSeqSlot, MaybeTrailSlot,
+		MaybeTableIoDecl, _VarNames, HeadVarNums, MaxVarNum,
+		MaxRegNum, MaybeFromFullSlot, MaybeIoSeqSlot, MaybeTrailSlot,
 		MaybeMaxfrSlot, EvalMethod, MaybeCallTableSlot,
 		MaybeDeclDebugSlot) },
 	io__write_string("\t{\n\t(const MR_Label_Layout *) &"),
@@ -671,8 +685,12 @@
 		io__write_string("NULL")
 	),
 	io__write_string(",\n\t"),
+	output_layout_name(proc_layout_head_var_nums(ProcLabel)),
+	io__write_string(",\n\t"),
 	output_layout_name(proc_layout_var_names(ProcLabel)),
 	io__write_string(",\n\t"),
+	io__write_int(list__length(HeadVarNums)),
+	io__write_string(",\n\t"),
 	io__write_int(MaxVarNum),
 	io__write_string(",\n\t"),
 	io__write_int(MaxRegNum),
@@ -708,6 +726,25 @@
 eval_method_to_c_string(eval_table_io) =      "MR_EVAL_METHOD_TABLE_IO".
 eval_method_to_c_string(eval_table_io_decl) = "MR_EVAL_METHOD_TABLE_IO_DECL".
 eval_method_to_c_string(eval_minimal) =	      "MR_EVAL_METHOD_MINIMAL".
+
+:- pred output_proc_layout_head_var_nums(proc_label::in, list(int)::in,
+	decl_set::in, decl_set::out, io__state::di, io__state::uo) is det.
+
+output_proc_layout_head_var_nums(ProcLabel, HeadVarNums, DeclSet0, DeclSet) -->
+	io__write_string("\n"),
+	output_layout_name_storage_type_name(
+		proc_layout_head_var_nums(ProcLabel), yes),
+	io__write_string(" = {\n"),
+	( { HeadVarNums = [] } ->
+			% ANSI/ISO C doesn't allow empty arrays, so
+			% place a dummy value in the array.
+		io__write_string("\t0\n")
+	;
+		list__foldl(output_number_in_vector, HeadVarNums)
+	),
+	io__write_string("};\n"),
+	{ decl_set_insert(DeclSet0, data_addr(
+		layout_addr(proc_layout_head_var_nums(ProcLabel))), DeclSet) }.
 
 :- pred output_proc_layout_var_names(proc_label::in, list(int)::in, int::in,
 	decl_set::in, decl_set::out, io__state::di, io__state::uo) is det.
Index: compiler/llds_common.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/llds_common.m,v
retrieving revision 1.41
diff -u -b -r1.41 llds_common.m
--- compiler/llds_common.m	20 Mar 2002 12:36:33 -0000	1.41
+++ compiler/llds_common.m	12 Apr 2002 07:10:07 -0000
@@ -204,14 +204,14 @@
 
 llds_common__process_exec_trace(ExecTrace0, ExecTrace, Info0, Info) :-
 	ExecTrace0 = proc_layout_exec_trace(CallLabel, MaybeProcBody0,
-		MaybeTableIoDecl, VarNames, MaxVarNum, MaxReg,
+		MaybeTableIoDecl, HeadVarNums, VarNames, MaxVarNum, MaxReg,
 		MaybeFromFullSlot, MaybeIoSeqSlot, MaybeTrailSlot,
 		MaybeMaxfrSlot, EvalMethod, MaybeCallTableSlot,
 		MaybeDeclDebugSlot),
 	llds_common__process_maybe_rval(MaybeProcBody0, MaybeProcBody,
 		Info0, Info),
 	ExecTrace = proc_layout_exec_trace(CallLabel, MaybeProcBody,
-		MaybeTableIoDecl, VarNames, MaxVarNum, MaxReg,
+		MaybeTableIoDecl, HeadVarNums, VarNames, MaxVarNum, MaxReg,
 		MaybeFromFullSlot, MaybeIoSeqSlot, MaybeTrailSlot,
 		MaybeMaxfrSlot, EvalMethod, MaybeCallTableSlot,
 		MaybeDeclDebugSlot).
Index: compiler/opt_debug.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/opt_debug.m,v
retrieving revision 1.120
diff -u -b -r1.120 opt_debug.m
--- compiler/opt_debug.m	20 Mar 2002 12:37:02 -0000	1.120
+++ compiler/opt_debug.m	12 Apr 2002 07:10:48 -0000
@@ -432,6 +432,10 @@
 opt_debug__dump_layout_name(proc_layout(ProcLabel, _), Str) :-
 	opt_debug__dump_proclabel(ProcLabel, ProcLabelStr),
 	string__append_list(["proc_layout(", ProcLabelStr, ")"], Str).
+opt_debug__dump_layout_name(proc_layout_head_var_nums(ProcLabel), Str) :-
+	opt_debug__dump_proclabel(ProcLabel, ProcLabelStr),
+	string__append_list(["proc_layout_head_var_nums(", ProcLabelStr, ")"],
+		Str).
 opt_debug__dump_layout_name(proc_layout_var_names(ProcLabel), Str) :-
 	opt_debug__dump_proclabel(ProcLabel, ProcLabelStr),
 	string__append_list(["proc_layout_var_names(", ProcLabelStr, ")"],
Index: compiler/stack_layout.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/stack_layout.m,v
retrieving revision 1.66
diff -u -b -r1.66 stack_layout.m
--- compiler/stack_layout.m	4 Apr 2002 06:00:10 -0000	1.66
+++ compiler/stack_layout.m	12 Apr 2002 07:11:57 -0000
@@ -486,20 +486,21 @@
 		VarTypes, UsedVarNameMap, MaybeTableIoDecl, ExecTrace) -->
 	stack_layout__construct_var_name_vector(VarSet, UsedVarNameMap,
 		MaxVarNum, VarNameVector),
+	{ list__map(term__var_to_int, HeadVars, HeadVarNumVector) },
 	stack_layout__get_trace_level(TraceLevel),
 	stack_layout__get_trace_suppress(TraceSuppress),
 	{ BodyReps = trace_needs_proc_body_reps(TraceLevel, TraceSuppress) },
 	(
 		{ BodyReps = no },
-		{ MaybeGoalRepRval = no }
+		{ MaybeProcRepRval = no }
 	;
 		{ BodyReps = yes },
 		stack_layout__get_module_info(ModuleInfo),
 		{ prog_rep__represent_proc(HeadVars, Goal, InstMap, VarTypes,
-			ModuleInfo, GoalRep) },
-		{ type_to_univ(GoalRep, GoalRepUniv) },
+			ModuleInfo, ProcRep) },
+		{ type_to_univ(ProcRep, ProcRepUniv) },
 		stack_layout__get_cell_counter(CellCounter0),
-		{ static_term__term_to_rval(GoalRepUniv, MaybeGoalRepRval,
+		{ static_term__term_to_rval(ProcRepUniv, MaybeProcRepRval,
 			CellCounter0, CellCounter) },
 		stack_layout__set_cell_counter(CellCounter)
 	),
@@ -522,11 +523,11 @@
 		MaybeTableIoDecl = yes(_),
 		MaybeTableIoDeclName = yes(table_io_decl(RttiProcLabel))
 	},
-	{ ExecTrace = proc_layout_exec_trace(CallLabelLayout, MaybeGoalRepRval,
-		MaybeTableIoDeclName, VarNameVector, MaxVarNum, MaxTraceReg,
-		MaybeFromFullSlot, MaybeIoSeqSlot, MaybeTrailSlots,
-		MaybeMaxfrSlot, EvalMethod, MaybeCallTableSlot,
-		MaybeDeclSlots) }.
+	{ ExecTrace = proc_layout_exec_trace(CallLabelLayout, MaybeProcRepRval,
+		MaybeTableIoDeclName, VarNameVector, HeadVarNumVector,
+		MaxVarNum, MaxTraceReg, MaybeFromFullSlot, MaybeIoSeqSlot,
+		MaybeTrailSlots, MaybeMaxfrSlot, EvalMethod,
+		MaybeCallTableSlot, MaybeDeclSlots) }.
 
 :- pred stack_layout__construct_var_name_vector(prog_varset::in,
 	map(int, string)::in, int::out, list(int)::out,
cvs diff: Diffing compiler/notes
cvs diff: Diffing debian
cvs diff: Diffing deep_profiler
cvs diff: Diffing deep_profiler/notes
cvs diff: Diffing doc
cvs diff: Diffing extras
cvs diff: Diffing extras/aditi
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/graphics
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/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/logged_output
cvs diff: Diffing extras/moose
cvs diff: Diffing extras/moose/samples
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/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/stream
cvs diff: Diffing extras/trailed_update
cvs diff: Diffing extras/trailed_update/samples
cvs diff: Diffing extras/trailed_update/tests
cvs diff: Diffing extras/xml
cvs diff: Diffing extras/xml/samples
cvs diff: Diffing java
cvs diff: Diffing java/library
cvs diff: Diffing java/runtime
cvs diff: Diffing library
cvs diff: Diffing profiler
cvs diff: Diffing robdd
cvs diff: Diffing runtime
Index: runtime/mercury_stack_layout.h
===================================================================
RCS file: /home/mercury1/repository/mercury/runtime/mercury_stack_layout.h,v
retrieving revision 1.58
diff -u -b -r1.58 mercury_stack_layout.h
--- runtime/mercury_stack_layout.h	4 Apr 2002 06:00:12 -0000	1.58
+++ runtime/mercury_stack_layout.h	12 Apr 2002 06:45:20 -0000
@@ -245,7 +245,9 @@
 ** The MR_sll_goal_path field contains an offset into the module-wide string
 ** table, leading to a string that gives the goal path associated with the
 ** label. If there is no meaningful goal path associated with the label,
-** the offset will be zero, leading to the empty string.
+** the offset will be zero, leading to the empty string. You can use the macro
+** MR_label_goal_path to convert the value in the MR_sll_goal_path field to a
+** string.
 **
 ** The remaining fields give information about the values live at the given
 ** label, if this information is available. If it is available, the
@@ -614,7 +616,9 @@
 	const MR_Module_Layout	*MR_exec_module_layout;
 	MR_Word			*MR_exec_proc_rep;
 	const MR_Table_Io_Decl	*MR_exec_table_io_decl;
+	const MR_int_least16_t	*MR_exec_head_var_nums;
 	const MR_int_least16_t	*MR_exec_used_var_names;
+	MR_int_least16_t	MR_exec_num_head_vars;
 	MR_int_least16_t	MR_exec_max_named_var_num;
 	MR_int_least16_t	MR_exec_max_r_num;
 	MR_int_least8_t		MR_exec_maybe_from_full;
@@ -728,6 +732,8 @@
 #define	MR_sle_call_label	MR_sle_exec_trace.MR_exec_call_label
 #define	MR_sle_module_layout	MR_sle_exec_trace.MR_exec_module_layout
 #define	MR_sle_proc_rep	MR_sle_exec_trace.MR_exec_proc_rep
+#define	MR_sle_head_var_nums	MR_sle_exec_trace.MR_exec_head_var_nums
+#define	MR_sle_num_head_vars	MR_sle_exec_trace.MR_exec_num_head_vars
 #define	MR_sle_used_var_names	MR_sle_exec_trace.MR_exec_used_var_names
 #define	MR_sle_max_named_var_num MR_sle_exec_trace.MR_exec_max_named_var_num
 #define	MR_sle_max_r_num	MR_sle_exec_trace.MR_exec_max_r_num
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/diff
cvs diff: Diffing samples/muz
cvs diff: Diffing samples/rot13
cvs diff: Diffing samples/solutions
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 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/structure_reuse
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
cvs diff: Diffing tests/invalid/purity
cvs diff: Diffing tests/misc_tests
cvs diff: Diffing tests/recompilation
cvs diff: Diffing tests/tabling
cvs diff: Diffing tests/term
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:  mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the reviews mailing list