for review: bug fixes & cleanups in runtime/*
Fergus Henderson
fjh at cs.mu.OZ.AU
Mon Nov 9 23:58:02 AEDT 1998
Hi,
Could someone please review this one?
--------------------
Estimated hours taken: 2
Various bug fixes and cleanups for the code in the runtime directory.
runtime/mercury_bootstrap.h:
runtime/mercury_regs.h:
runtime/mercury_stacks.h:
runtime/mercury_type_info.h:
Move #defines that are there just for backwards compatibility
into mercury_bootstrap.h.
runtime/process_getopt:
Add MR_ prefixes to the names `_GETOPT_H', `no_arguments',
and `required_argument' which are defined by mercury_getopt.h,
to make mercury_getopt.h macro-namespace-clean.
runtime/mercury_getopt.h:
Apply the new version of the process_getopt script.
runtime/mercury_imp.h:
Make mercury_bootstrap the first header file that is #included,
in case some of the macros defined in it are used in declarations
in other header files.
runtime/mercury_memory.h:
Delete duplicate definitions of MAX_REAL_REG, NUM_SPECIAL_REG,
and MAX_VIRTUAL_REG -- these are all already defined in
mercury_memory_zones.h.
runtime/mercury_memory_zones.h:
Delete definition of NUM_SPECIAL_REG, since mercury_regorder.h
already defines MR_NUM_SPECIAL_REG, which should be used instead
of NUM_SPECIAL_REG. The value of NUM_SPECIAL_REG was long
obsolete.
runtime/mercury_regorder.h:
Fix some bugs in the definition of MR_min_sol_hp_rec -- it was
using `mr40', which is undefined, instead of `mr(40)'.
Also add some comments.
runtime/mercury_regs.h:
Fix a bug: use MR_NUM_SPECIAL_REGS instead of NUM_SPECIAL_REGS.
Note that this bug fix unfortunately breaks backwards compatibility,
at least for procedures with more than 32 arguments, since it
affects the mapping from r(N) to the fake_reg array.
However, there was no alternative, since the old mapping was
broken: for example, the old mapping used the same fake_reg
slot for both r(41) and MR_global_hp.
runtime/mercury_bootstrap.h:
Change MR_GRADE_PART_0 from `redofr' to `v1', and document that
that part of the grade is a binary compatibility version number.
The reason for changing the grade is to ensure that the change
in binary backwards compatibility resulting from the changes
to runtime/mercury_regs.h will cause link errors rather
than just random behaviour for procedures with >32 arguments.
runtime/mercury_agc_debug.c:
Use MR_NUM_SPECIAL_REGS instead of NUM_SPECIAL_REGS.
Also add some XXX comments, since all of the places where
NUM_SPECIAL_REGS was used are broken anyway -- they should be
using MAX_FAKE_REG instead of MAX_REAL_REG + NUM_SPECIAL_REG.
But I think the current definition is put there for efficiency,
even though it's known to be broken for procedures with >32
arguments, so I didn't change the code to use MAX_FAKE_REG.
Index: runtime/mercury_agc_debug.c
===================================================================
RCS file: /home/mercury1/repository/mercury/runtime/mercury_agc_debug.c,v
retrieving revision 1.6
diff -u -r1.6 mercury_agc_debug.c
--- mercury_agc_debug.c 1998/10/23 00:41:24 1.6
+++ mercury_agc_debug.c 1998/11/09 12:47:35
@@ -44,7 +44,8 @@
** the saved registers).
*/
restore_registers();
- MR_copy_regs_to_saved_regs(MAX_REAL_REG + NUM_SPECIAL_REG,
+ /* XXX this is unsafe -- should use MAX_FAKE_REG */
+ MR_copy_regs_to_saved_regs(MAX_REAL_REG + MR_NUM_SPECIAL_REG,
saved_regs);
MR_hp = MR_ENGINE(debug_heap_zone->min);
@@ -55,7 +56,8 @@
fflush(NULL);
fprintf(stderr, "\n");
- MR_copy_saved_regs_to_regs(MAX_REAL_REG + NUM_SPECIAL_REG,
+ /* XXX this is unsafe -- should use MAX_FAKE_REG */
+ MR_copy_saved_regs_to_regs(MAX_REAL_REG + MR_NUM_SPECIAL_REG,
saved_regs);
save_registers();
roots = roots->next;
@@ -126,8 +128,9 @@
** registers).
*/
restore_registers();
+ /* XXX this is unsafe -- should use MAX_FAKE_REG */
MR_copy_regs_to_saved_regs(MAX_REAL_REG +
- NUM_SPECIAL_REG, saved_regs);
+ MR_NUM_SPECIAL_REG, saved_regs);
MR_hp = MR_ENGINE(debug_heap_zone->min);
MR_virtual_hp = MR_ENGINE(debug_heap_zone->min);
@@ -146,8 +149,9 @@
printf("\n");
}
+ /* XXX this is unsafe -- should use MAX_FAKE_REG */
MR_copy_saved_regs_to_regs(MAX_REAL_REG +
- NUM_SPECIAL_REG, saved_regs);
+ MR_NUM_SPECIAL_REG, saved_regs);
save_registers();
#endif /* MR_DEBUG_AGC_PRINT_VARS */
Index: runtime/mercury_bootstrap.h
===================================================================
RCS file: /home/mercury1/repository/mercury/runtime/mercury_bootstrap.h,v
retrieving revision 1.1
diff -u -r1.1 mercury_bootstrap.h
--- mercury_bootstrap.h 1998/11/05 06:27:41 1.1
+++ mercury_bootstrap.h 1998/11/09 11:18:21
@@ -7,12 +7,37 @@
/*
** mercury_bootstrap.h
**
-** Temporary definitions only needed for bootstrapping.
+** Temporary definitions only needed for bootstrapping and/or
+** for backwards compatibility. All of the definitions here
+** will go away eventually, so don't use them!
+**
+** This file should contain MACROS ONLY -- see mercury_imp.h for why.
*/
#ifndef MERCURY_BOOTSTRAP_H
#define MERCURY_BOOTSTRAP_H
#define NONDET_FIXED_SIZE MR_NONDET_FIXED_SIZE
+
+#define succip MR_succip
+#define hp MR_hp
+#define sp MR_sp
+#define curfr MR_curfr
+#define maxfr MR_maxfr
+
+#define TYPELAYOUT_UNASSIGNED_VALUE (MR_TYPELAYOUT_UNASSIGNED_VALUE)
+#define TYPELAYOUT_UNUSED_VALUE (MR_TYPELAYOUT_UNUSED_VALUE)
+#define TYPELAYOUT_STRING_VALUE (MR_TYPELAYOUT_STRING_VALUE)
+#define TYPELAYOUT_FLOAT_VALUE (MR_TYPELAYOUT_FLOAT_VALUE)
+#define TYPELAYOUT_INT_VALUE (MR_TYPELAYOUT_INT_VALUE)
+#define TYPELAYOUT_CHARACTER_VALUE (MR_TYPELAYOUT_CHARACTER_VALUE)
+#define TYPELAYOUT_UNIV_VALUE (MR_TYPELAYOUT_UNIV_VALUE)
+#define TYPELAYOUT_PREDICATE_VALUE (MR_TYPELAYOUT_PREDICATE_VALUE)
+#define TYPELAYOUT_VOID_VALUE (MR_TYPELAYOUT_VOID_VALUE)
+#define TYPELAYOUT_ARRAY_VALUE (MR_TYPELAYOUT_ARRAY_VALUE)
+#define TYPELAYOUT_TYPEINFO_VALUE (MR_TYPELAYOUT_TYPEINFO_VALUE)
+#define TYPELAYOUT_C_POINTER_VALUE (MR_TYPELAYOUT_C_POINTER_VALUE)
+
+#define framevar(n) MR_framevar((n) + 1)
#endif /* MERCURY_BOOTSTRAP_H */
Index: runtime/mercury_getopt.h
===================================================================
RCS file: /home/mercury1/repository/mercury/runtime/mercury_getopt.h,v
retrieving revision 1.4
diff -u -r1.4 mercury_getopt.h
--- mercury_getopt.h 1998/08/11 06:23:04 1.4
+++ mercury_getopt.h 1998/11/09 12:56:34
@@ -19,8 +19,8 @@
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
-#ifndef _GETOPT_H
-#define _GETOPT_H 1
+#ifndef MERCURY_GETOPT_H
+#define MERCURY_GETOPT_H 1
#ifdef __cplusplus
extern "C" {
@@ -63,8 +63,8 @@
zero.
The field `has_arg' is:
- no_argument (or 0) if the MR_option does not take an argument,
- required_argument (or 1) if the MR_option requires an argument,
+ MR_no_argument (or 0) if the MR_option does not take an argument,
+ MR_required_argument (or 1) if the MR_option requires an argument,
MR_optional_argument (or 2) if the MR_option takes an MR_optional argument.
If the field `flag' is not NULL, it points to a variable that is set
@@ -94,8 +94,8 @@
/* Names for the values of the `has_arg' field of `struct MR_option'. */
-#define no_argument 0
-#define required_argument 1
+#define MR_no_argument 0
+#define MR_required_argument 1
#define MR_optional_argument 2
#if defined (__STDC__) && __STDC__
@@ -130,4 +130,4 @@
}
#endif
-#endif /* _GETOPT_H */
+#endif /* MERCURY_GETOPT_H */
Index: runtime/mercury_imp.h
===================================================================
RCS file: /home/mercury1/repository/mercury/runtime/mercury_imp.h,v
retrieving revision 1.12
diff -u -r1.12 mercury_imp.h
--- mercury_imp.h 1998/11/05 03:53:40 1.12
+++ mercury_imp.h 1998/11/09 12:00:17
@@ -20,6 +20,12 @@
#define MERCURY_IMP_H
/*
+** mercury_bootstrap.h should come first, since may defines macros
+** used in other header files.
+*/
+#include "mercury_bootstrap.h"
+
+/*
** The #include of "mercury_conf.h" must come before the `#ifdef USE_DLLS',
** because mercury_conf.h defines the USE_DLLS macro.
*/
@@ -73,8 +79,6 @@
#include "mercury_misc.h"
#include "mercury_tabling.h"
-
-#include "mercury_bootstrap.h"
#include "mercury_grade.h"
Index: runtime/mercury_memory.h
===================================================================
RCS file: /home/mercury1/repository/mercury/runtime/mercury_memory.h,v
retrieving revision 1.8
diff -u -r1.8 mercury_memory.h
--- mercury_memory.h 1998/09/21 09:08:18 1.8
+++ mercury_memory.h 1998/11/09 10:54:22
@@ -26,15 +26,6 @@
#include "mercury_std.h" /* for bool */
-/* these cannot be changed without lots of modifications elsewhere */
-#define MAX_REAL_REG 32 /* r1 .. r32 */
-#define NUM_SPECIAL_REG 5 /* succip, sp, hp, maxfr, curfr */
-
-/* this can be changed at will, including by -D options to the C compiler */
-#ifndef MAX_VIRTUAL_REG
-#define MAX_VIRTUAL_REG 1024
-#endif
-
#ifdef MR_LOWLEVEL_DEBUG
extern MemoryZone *dumpstack_zone;
extern int dumpindex;
Index: runtime/mercury_memory_zones.h
===================================================================
RCS file: /home/mercury1/repository/mercury/runtime/mercury_memory_zones.h,v
retrieving revision 1.3
diff -u -r1.3 mercury_memory_zones.h
--- mercury_memory_zones.h 1998/06/09 02:08:09 1.3
+++ mercury_memory_zones.h 1998/11/09 11:31:46
@@ -28,7 +28,6 @@
/* these cannot be changed without lots of modifications elsewhere */
#define MAX_REAL_REG 32 /* r1 .. r32 */
-#define NUM_SPECIAL_REG 5 /* succip, sp, hp, maxfr, curfr */
/* this can be changed at will, including by -D options to the C compiler */
#ifndef MAX_VIRTUAL_REG
@@ -37,8 +36,8 @@
/* allocate enough fake_regs to hold both the special regs */
/* and all the virtual registers */
-#define MAX_FAKE_REG (NUM_SPECIAL_REG + MAX_VIRTUAL_REG)
- /* mr0 .. mr36, mr(37) ... mr(1028) */
+#define MAX_FAKE_REG (MR_NUM_SPECIAL_REG + MAX_VIRTUAL_REG)
+ /* mr0 .. mr37, mr(38) ... mr(1000) ... */
/* used to lookup the fake_reg for a given real reg */
extern Word virtual_reg_map[MAX_REAL_REG];
Index: runtime/mercury_regorder.h
===================================================================
RCS file: /home/mercury1/repository/mercury/runtime/mercury_regorder.h,v
retrieving revision 1.9
diff -u -r1.9 mercury_regorder.h
--- mercury_regorder.h 1998/07/22 07:53:01 1.9
+++ mercury_regorder.h 1998/11/09 12:10:40
@@ -23,17 +23,20 @@
#define MERCURY_REGORDER_H
/*
+** If we are using an engine base register, then shift all
+** the machine registers across by 1, and allocate mr0 to
+** MR_engine_base
+*/
+#if defined(MR_THREAD_SAFE) && NUM_REAL_REGS > 0
+
+
+/*
+** r1 .. r32: the general-purpose Mercury registers.
+**
** If you modify the r<N> to mr<N> mapping, make sure that you update
** the definition of MR_VIRTUAL_REG_MAP_BODY below and BOTH copies of
** the definitions of r1-r32.
*/
-#if defined(MR_THREAD_SAFE) && NUM_REAL_REGS > 0
-
- /*
- ** If we are using an engine base register, then shift all
- ** the machine registers across by 1, and allocate mr0 to
- ** MR_engine_base
- */
#define r1 count_usage(R_RN(1), mr3)
#define r2 count_usage(R_RN(2), mr4)
#define r3 count_usage(R_RN(3), mr5)
@@ -70,22 +73,32 @@
/* Keep this in sync with the actual defintions below */
#define MR_real_reg_number_sp MR_real_reg_number_mr1
-#define MR_engine_base LVALUE_CAST(Word *, count_usage(MR_SP_RN, mr0))
-
/*
+** The special-purpose Mercury registers:
+** hp, sp, succip, etc.
+**
** If you modify the following block, make sure that you update
** the definitions of MR_NUM_SPECIAL_REG, MR_MAX_SPECIAL_REG_MR,
** and MR_saved_*.
*/
+
+/*
+** first, the "very special" registers -- these may go in real machine regs
+*/
+#define MR_engine_base LVALUE_CAST(Word *, count_usage(MR_SP_RN, mr0))
#define MR_succip LVALUE_CAST(Code *, count_usage(MR_SI_RN, mr2))
#define MR_hp LVALUE_CAST(Word *, count_usage(MR_HP_RN, mr6))
#define MR_sp LVALUE_CAST(Word *, count_usage(MR_SP_RN, mr1))
#define MR_curfr LVALUE_CAST(Word *, count_usage(MR_CF_RN, mr9))
#define MR_maxfr LVALUE_CAST(Word *, count_usage(MR_MF_RN, mr10))
+/*
+** next, the remainder of the special registers -- these go in the
+** fake_reg array, or in some cases in ordinary global variables.
+*/
#define MR_sol_hp LVALUE_CAST(Word *, count_usage(MR_SOL_HP_RN, mr(38)))
#define MR_min_hp_rec LVALUE_CAST(Word *, count_usage(MR_MIN_HP_REC, mr(39)))
#define MR_min_sol_hp_rec LVALUE_CAST(Word *, \
- count_usage(MR_MIN_HP_REC, mr40))
+ count_usage(MR_MIN_HP_REC, mr(40)))
#define MR_global_hp LVALUE_CAST(Word *, \
count_usage(MR_GLOBAL_HP_RN, mr(41)))
@@ -93,10 +106,17 @@
#define MR_ticket_counter \
count_usage(MR_TICKET_COUNTER_RN, MR_ticket_counter_var)
-/* the number of special, non rN registers */
+/*
+** the number of "very special" registers, i.e. special registers that can
+** be allocated in real machine registers:
+** MR_engine_base, MR_succip, MR_hp, MR_sp, MR_curfr, MR_maxfr
+*/
+#define MR_NUM_VERY_SPECIAL_REG 6
+
+/* the number of special-purpose Mercury registers */
#define MR_NUM_SPECIAL_REG 12
-/* the maximum mrN number of special, non rN registers */
+/* the maximum mrN number of special registers */
#define MR_MAX_SPECIAL_REG_MR 41
/*
@@ -152,6 +172,11 @@
#else /* !MR_THREAD_SAFE or NUM_REAL_REGS == 0 */
+/*
+** If you modify the r<N> to mr<N> mapping, make sure that you update
+** the definition of MR_VIRTUAL_REG_MAP_BODY below and BOTH copies of
+** the definitions of r1-r32.
+*/
#define r1 count_usage(R_RN(1), mr2)
#define r2 count_usage(R_RN(2), mr3)
#define r3 count_usage(R_RN(3), mr4)
@@ -185,29 +210,48 @@
#define r31 count_usage(R_RN(31), mr35)
#define r32 count_usage(R_RN(32), mr36)
+ /* Keep this in sync with the actual defintions below */
+#define MR_real_reg_number_sp MR_real_reg_number_mr0
+
/*
+** The special-purpose Mercury registers:
+** hp, sp, succip, etc.
+**
** If you modify the following block, make sure that you update
** the definitions of MR_NUM_SPECIAL_REG, MR_MAX_SPECIAL_REG_MR,
** and MR_saved_*.
*/
-#define MR_real_reg_number_sp MR_real_reg_number_mr0
+/*
+** first, the "very special" registers -- these may go in real machine regs
+*/
#define MR_succip LVALUE_CAST(Code *, count_usage(MR_SI_RN, mr1))
#define MR_hp LVALUE_CAST(Word *, count_usage(MR_HP_RN, mr5))
#define MR_sp LVALUE_CAST(Word *, count_usage(MR_SP_RN, mr0))
#define MR_curfr LVALUE_CAST(Word *, count_usage(MR_CF_RN, mr8))
#define MR_maxfr LVALUE_CAST(Word *, count_usage(MR_MF_RN, mr9))
+/*
+** next, the remainder of the special registers -- these go in the
+** fake_reg array, or in some cases in ordinary global variables.
+*/
#define MR_sol_hp LVALUE_CAST(Word *, count_usage(MR_SOL_HP_RN, mr(37)))
#define MR_min_hp_rec LVALUE_CAST(Word *, count_usage(MR_MIN_HP_REC, mr(38)))
#define MR_min_sol_hp_rec LVALUE_CAST(Word *, \
- count_usage(MR_MIN_HP_REC, mr39))
+ count_usage(MR_MIN_HP_REC, mr(39)))
#define MR_global_hp LVALUE_CAST(Word *, \
count_usage(MR_GLOBAL_HP_RN, mr(40)))
#define MR_trail_ptr count_usage(MR_TRAIL_PTR_RN, MR_trail_ptr_var)
#define MR_ticket_counter \
count_usage(MR_TICKET_COUNTER_RN, MR_ticket_counter_var)
-/* the number of special, non rN registers */
+/*
+** the number of "very special" registers, i.e. special registers that can
+** be allocated in real machine registers:
+** MR_succip, MR_hp, MR_sp, MR_curfr, MR_maxfr
+*/
+#define MR_NUM_VERY_SPECIAL_REG 5
+
+/* the number of special registers */
#define MR_NUM_SPECIAL_REG 11
/* the maximum mrN number of special, non rN registers */
@@ -265,12 +309,5 @@
}
#endif
-
-/* for backwards compatibility */
-#define succip MR_succip
-#define hp MR_hp
-#define sp MR_sp
-#define curfr MR_curfr
-#define maxfr MR_maxfr
#endif /* not MERCURY_REGORDER_H */
Index: runtime/mercury_regs.h
===================================================================
RCS file: /home/mercury1/repository/mercury/runtime/mercury_regs.h,v
retrieving revision 1.10
diff -u -r1.10 mercury_regs.h
--- mercury_regs.h 1998/07/03 05:51:24 1.10
+++ mercury_regs.h 1998/11/09 11:55:57
@@ -69,7 +69,7 @@
** MR_succip, MR_hp, MR_sp, MR_curfr, MR_maxfr and
** r1, ..., r32, r(33), ..., r(MAX_VIRTUAL_REG)
**
-** to the set mr0..mr36, mr(37), mr(38), ..., mr(MAX_FAKE_REG-1)
+** to the set mr0..mr37, mr(38), mr(39), ..., mr(MAX_FAKE_REG-1)
** which were provided by the hardware abstraction layer.
** It also provides MR_virtual_r(), MR_virtual_succip, MR_virtual_hp, etc.,
** which are similar to mr<N>, MR_succip, MR_hp, etc. except that they
@@ -114,9 +114,9 @@
** Extra stuff for the hardware abstraction layer
*/
-/* The machdeps header defines mr0 .. mr36; now define mr(n) for n > 36 */
+/* The machdeps header defines mr0 .. mr37; now define mr(n) for n > 37 */
-#define mr(n) LVALUE_SEQ(MR_assert((n) >= MAX_REAL_REG + NUM_SPECIAL_REG && \
+#define mr(n) LVALUE_SEQ(MR_assert((n) > 37 && \
(n) < MAX_FAKE_REG),\
MR_fake_reg[n])
@@ -182,7 +182,7 @@
/* mercury_regorder.h defines r1 .. r32; now define r(n) for n > 32 */
-#define r(n) mr((n) + NUM_SPECIAL_REG - 1)
+#define r(n) mr((n) + MR_NUM_SPECIAL_REG - 1)
/*
** saved_reg(save_area, n) accesses the underlying slot in save_area
@@ -190,7 +190,7 @@
*/
#define saved_reg(save_area, n) \
LVALUE_COND((n) > MAX_REAL_REG, \
- save_area[(n) + NUM_SPECIAL_REG - 1], \
+ save_area[(n) + MR_NUM_SPECIAL_REG - 1], \
save_area[virtual_reg_map[(n) - 1]])
/* virtual_reg(n) accesses the underlying fake_reg for register n */
Index: runtime/mercury_stacks.h
===================================================================
RCS file: /home/mercury1/repository/mercury/runtime/mercury_stacks.h,v
retrieving revision 1.11
diff -u -r1.11 mercury_stacks.h
--- mercury_stacks.h 1998/10/27 16:32:16 1.11
+++ mercury_stacks.h 1998/11/09 11:17:35
@@ -123,7 +123,6 @@
#define curprednm bt_prednm(MR_curfr)
#define MR_framevar(n) MR_based_framevar(MR_curfr, n)
-#define framevar(n) MR_framevar((n) + 1)
/* DEFINITIONS FOR MANIPULATING THE NONDET STACK */
Index: runtime/mercury_type_info.h
===================================================================
RCS file: /home/mercury1/repository/mercury/runtime/mercury_type_info.h,v
retrieving revision 1.14
diff -u -r1.14 mercury_type_info.h
--- mercury_type_info.h 1998/11/03 10:58:32 1.14
+++ mercury_type_info.h 1998/11/09 11:12:54
@@ -234,25 +234,6 @@
**
*/
-
-/*
-** Defintions for backwards compatibility.
-** These will go away eventually.
-*/
-
-#define TYPELAYOUT_UNASSIGNED_VALUE (MR_TYPELAYOUT_UNASSIGNED_VALUE)
-#define TYPELAYOUT_UNUSED_VALUE (MR_TYPELAYOUT_UNUSED_VALUE)
-#define TYPELAYOUT_STRING_VALUE (MR_TYPELAYOUT_STRING_VALUE)
-#define TYPELAYOUT_FLOAT_VALUE (MR_TYPELAYOUT_FLOAT_VALUE)
-#define TYPELAYOUT_INT_VALUE (MR_TYPELAYOUT_INT_VALUE)
-#define TYPELAYOUT_CHARACTER_VALUE (MR_TYPELAYOUT_CHARACTER_VALUE)
-#define TYPELAYOUT_UNIV_VALUE (MR_TYPELAYOUT_UNIV_VALUE)
-#define TYPELAYOUT_PREDICATE_VALUE (MR_TYPELAYOUT_PREDICATE_VALUE)
-#define TYPELAYOUT_VOID_VALUE (MR_TYPELAYOUT_VOID_VALUE)
-#define TYPELAYOUT_ARRAY_VALUE (MR_TYPELAYOUT_ARRAY_VALUE)
-#define TYPELAYOUT_TYPEINFO_VALUE (MR_TYPELAYOUT_TYPEINFO_VALUE)
-#define TYPELAYOUT_C_POINTER_VALUE (MR_TYPELAYOUT_C_POINTER_VALUE)
-
enum MR_TypeLayoutValue {
MR_TYPELAYOUT_UNASSIGNED_VALUE,
MR_TYPELAYOUT_UNUSED_VALUE,
Index: runtime/process_getopt
===================================================================
RCS file: /home/mercury1/repository/mercury/runtime/process_getopt,v
retrieving revision 1.2
diff -u -r1.2 process_getopt
--- process_getopt 1998/08/11 06:23:16 1.2
+++ process_getopt 1998/11/09 12:56:12
@@ -15,6 +15,9 @@
g/\<optopt/s//MR_optopt/g
g/\<option/s//MR_option/g
g/\<_getopt/s//MR__getopt/g
+ g/\<_GETOPT/s//MERCURY_GETOPT/g
+ g/no_argument/s//MR_no_argument/g
+ g/required_argument/s//MR_required_argument/g
g/#ifndef/s/ELIDE_CODE/XXXELIDE_CODEXXX/
w
q
--
Fergus Henderson <fjh at cs.mu.oz.au> | "Binaries may die
WWW: <http://www.cs.mu.oz.au/~fjh> | but source code lives forever"
PGP: finger fjh at 128.250.37.3 | -- leaked Microsoft memo.
More information about the developers
mailing list