[m-rev.] for post commit review by Quan: region headers

Zoltan Somogyi zs at csse.unimelb.edu.au
Thu Dec 20 18:37:44 AEDT 2007


runtime/mercury_region.[ch]:
	Misc cleanups of rbmm stuff.

runtime/mercury_types.h:
library/region_builtin.m:
	Conform to the changes in mercury_region.h.

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
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/posix/samples
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
Index: library/region_builtin.m
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/library/region_builtin.m,v
retrieving revision 1.5
diff -u -r1.5 region_builtin.m
--- library/region_builtin.m	8 Dec 2007 11:37:05 -0000	1.5
+++ library/region_builtin.m	20 Dec 2007 07:09:08 -0000
@@ -49,7 +49,7 @@
 
 :- pragma foreign_decl("C", "#include \"mercury_region.h\"").
 
-:- pragma foreign_type("C", region, "MR_Region *",
+:- pragma foreign_type("C", region, "MR_RegionHeader *",
     [can_pass_as_mercury_type]).
 
 :- pragma foreign_proc("C",
cvs diff: Diffing mdbcomp
cvs diff: Diffing profiler
cvs diff: Diffing robdd
cvs diff: Diffing runtime
Index: runtime/mercury_region.c
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/runtime/mercury_region.c,v
retrieving revision 1.6
diff -u -r1.6 mercury_region.c
--- runtime/mercury_region.c	19 Dec 2007 16:35:24 -0000	1.6
+++ runtime/mercury_region.c	20 Dec 2007 07:10:10 -0000
@@ -20,7 +20,7 @@
 #define word_sizeof(s) (sizeof(s) / sizeof(MR_Word))
 
 MR_RegionPage       *MR_region_free_page_list;
-MR_Region           *MR_live_region_list;
+MR_RegionHeader     *MR_live_region_list;
 
 MR_RegionIteFixedFrame      *MR_region_ite_sp = NULL;
 MR_RegionDisjFixedFrame     *MR_region_disj_sp = NULL;
@@ -59,13 +59,14 @@
 static MR_RegionPage    *MR_region_get_free_page(void);
 
 static void             MR_region_nullify_entries_in_commit_stack(
-                            MR_Region *region);
+                            MR_RegionHeader *region);
 static void             MR_region_nullify_in_commit_frame(
                             MR_RegionCommitFixedFrame *frame,
-                            MR_Region *region);
-static void             MR_region_nullify_in_ite_frame(MR_Region *region);
+                            MR_RegionHeader *region);
+static void             MR_region_nullify_in_ite_frame(
+                            MR_RegionHeader *region);
 
-static void             MR_region_extend_region(MR_Region *);
+static void             MR_region_extend_region(MR_RegionHeader *);
 
 #ifdef  MR_RBMM_DEBUG
 static int              MR_region_get_frame_number(MR_Word *);
@@ -79,11 +80,12 @@
 static void             MR_region_get_new_pages_and_new_words(
                             MR_RegionSnapshot *snapshot, int *new_pages,
                             int *new_words);
+
 /*---------------------------------------------------------------------------*/
 /* Page operations. */
 
 static MR_RegionPage *
-MR_region_request_pages()
+MR_region_request_pages(void)
 {
     MR_RegionPage   *pages;
     int             bytes_to_request;
@@ -139,23 +141,23 @@
 ** Region_Struct.
 */
 
-MR_Region *
+MR_RegionHeader *
 MR_region_create_region(void)
 {
     MR_RegionPage   *page;
-    MR_Region       *region;
+    MR_RegionHeader *region;
 
     /* This is the first page of the region. */
     page = MR_region_get_free_page();
 
     /*
     ** In the first page, we will store the region header, which occupies
-    ** word_sizeof(MR_Region) words from the start of the data area of the
-    ** page.
+    ** word_sizeof(MR_RegionHeader) words from the start of the data area
+    ** of the page.
     */
-    region = (MR_Region *) (page->MR_regionpage_space);
+    region = (MR_RegionHeader *) (page->MR_regionpage_space);
     region->MR_region_next_available_word = (MR_Word *)
-        (page->MR_regionpage_space + word_sizeof(MR_Region));
+        (page->MR_regionpage_space + word_sizeof(MR_RegionHeader));
     region->MR_region_last_page = page;
     region->MR_region_removal_counter = 1;
     region->MR_region_sequence_number = MR_region_sequence_number++;
@@ -183,7 +185,7 @@
 }
 
 static void
-MR_region_nullify_entries_in_commit_stack(MR_Region *region)
+MR_region_nullify_entries_in_commit_stack(MR_RegionHeader *region)
 {
     MR_RegionCommitFixedFrame *frame;
 
@@ -196,13 +198,13 @@
 
 static void
 MR_region_nullify_in_commit_frame(MR_RegionCommitFixedFrame *commit_frame,
-    MR_Region *region)
+    MR_RegionHeader *region)
 {
-    MR_RegionCommitSave     *commit_save;
-    int     i;
+    MR_RegionCommitSave *commit_save;
+    int                 i;
 
     commit_save = ( MR_RegionCommitSave *) (
-        ( MR_Word *) commit_frame + MR_REGION_COMMIT_FRAME_FIXED_SIZE);
+        (MR_Word *) commit_frame + MR_REGION_COMMIT_FRAME_FIXED_SIZE);
 
     /*
     ** Loop through the saved regions and nullify the entry of the input
@@ -210,7 +212,8 @@
     */
     for (i = 0; i < commit_frame->MR_rcff_num_saved_regions; i++) {
         if (commit_save != NULL &&
-                commit_save->MR_commit_save_region == region) {
+            commit_save->MR_commit_save_region == region)
+        {
             commit_save->MR_commit_save_region = NULL;
             break;
         } else {
@@ -220,7 +223,7 @@
 }
 
 static void
-MR_region_nullify_in_ite_frame(MR_Region *region)
+MR_region_nullify_in_ite_frame(MR_RegionHeader *region)
 {
     MR_RegionIteFixedFrame      *ite_frame;
     MR_RegionIteProtect         *ite_prot;
@@ -247,7 +250,7 @@
 }
 
 void
-MR_region_destroy_region(MR_Region *region)
+MR_region_destroy_region(MR_RegionHeader *region)
 {
     if (region->MR_region_commit_frame != NULL) {
         MR_region_nullify_entries_in_commit_stack(region);
@@ -279,7 +282,7 @@
 ** This method is to be called at the start of the then part of an ite with
 ** semidet condition (most of the times).
 ** XXX At that point we will only check if the region is disj-protected or not.
-** At that point we do not have to check whether this ite-protected region is 
+** At that point we do not have to check whether this ite-protected region is
 ** disj-protected or not. It is because the region is protected for this ite
 ** only if it has not been protected before the ite and from the start of
 ** this ite to the point when this method is called, i.e., the condition, the
@@ -288,7 +291,7 @@
 */
 
 void
-MR_remove_undisjprotected_region_ite_then_semidet(MR_Region *region)
+MR_remove_undisjprotected_region_ite_then_semidet(MR_RegionHeader *region)
 {
     /*
     MR_region_debug_try_remove_region(region);
@@ -312,7 +315,7 @@
 */
 
 void
-MR_remove_undisjprotected_region_ite_then_nondet(MR_Region *region)
+MR_remove_undisjprotected_region_ite_then_nondet(MR_RegionHeader *region)
 {
     MR_region_debug_try_remove_region(region);
 
@@ -327,7 +330,7 @@
 }
 
 void
-MR_region_remove_region(MR_Region *region)
+MR_region_remove_region(MR_RegionHeader *region)
 {
     MR_region_debug_try_remove_region(region);
 
@@ -340,12 +343,13 @@
 
         /*
         ** This logical removal happens in a commit operation. If the region
-        ** is *new* since the start of the commit we mark the region so that it
-        ** will be destroyed at the commit point.
+        ** is *new* since the start of the commit we mark the region so that
+        ** it will be destroyed at the commit point.
         */
         if (MR_region_commit_sp != NULL &&
-                MR_region_commit_sp->MR_rcff_saved_sequence_number <=
-                region->MR_region_sequence_number) {
+            MR_region_commit_sp->MR_rcff_saved_sequence_number <=
+                region->MR_region_sequence_number)
+        {
             region->MR_region_destroy_at_commit = 1;
         }
         /*if (MR_region_commit_sp != NULL) {
@@ -357,12 +361,13 @@
 }
 
 MR_Word *
-MR_region_alloc(MR_Region *region, unsigned int words)
+MR_region_alloc(MR_RegionHeader *region, unsigned int words)
 {
     MR_Word *allocated_cell;
 
     if (MR_region_available_space(region->MR_region_last_page,
-                region->MR_region_next_available_word) < words) {
+            region->MR_region_next_available_word) < words)
+    {
         MR_region_extend_region(region);
     }
 
@@ -378,9 +383,10 @@
 }
 
 static void
-MR_region_extend_region(MR_Region *region)
+MR_region_extend_region(MR_RegionHeader *region)
 {
     MR_RegionPage   *page;
+
     page = MR_region_get_free_page();
     region->MR_region_last_page->MR_regionpage_next = page;
     region->MR_region_last_page = page;
@@ -393,7 +399,7 @@
     MR_RegionCommitSave *first_commit_save)
 {
     MR_RegionCommitSave     *commit_save;
-    MR_Region               *region;
+    MR_RegionHeader         *region;
     int                     i;
 
     commit_save = first_commit_save;
@@ -405,7 +411,7 @@
             ** XXX Because we save only regions that are live at entry, not
             ** live at exit, and not protected at entry, at the commit point it
             ** must be the case that a logical removal has happened to the
-            ** region, So just need to destroy it at commit. 
+            ** region, So just need to destroy it at commit.
             */
             MR_region_destroy_region(region);
         }
@@ -419,7 +425,7 @@
 void
 MR_commit_success_destroy_marked_new_regions(MR_Word saved_region_seq_number)
 {
-    MR_Region   *region;
+    MR_RegionHeader *region;
 
     region = MR_live_region_list;
     while (region != NULL &&
@@ -438,13 +444,14 @@
 }
 
 int
-MR_region_is_disj_protected(MR_Region *region) 
+MR_region_is_disj_protected(MR_RegionHeader *region)
 {
     if (MR_region_disj_sp != NULL &&
-            MR_region_disj_sp->MR_rdff_saved_sequence_number >
-                region->MR_region_sequence_number) {
+        MR_region_disj_sp->MR_rdff_saved_sequence_number >
+            region->MR_region_sequence_number)
+    {
        return MR_TRUE;
-    } 
+    }
     return MR_FALSE;
 }
 /*---------------------------------------------------------------------------*/
@@ -467,34 +474,34 @@
 }
 
 void
-MR_region_create_region_msg(MR_Region *region)
+MR_region_create_region_msg(MR_RegionHeader *region)
 {
     printf("Create region #%d (%d).\n", region->MR_region_sequence_number,
         region);
 }
 
 void
-MR_region_try_remove_region_msg(MR_Region *region)
+MR_region_try_remove_region_msg(MR_RegionHeader *region)
 {
     printf("Try removing region ");
     MR_region_region_struct_removal_info_msg(region);
 }
 
 void
-MR_region_destroy_region_msg(MR_Region *region)
+MR_region_destroy_region_msg(MR_RegionHeader *region)
 {
     printf("Destroy region #%d.\n", region->MR_region_sequence_number);
 }
 
 void
-MR_region_logically_remove_region_msg(MR_Region *region)
+MR_region_logically_remove_region_msg(MR_RegionHeader *region)
 {
     printf("Logically remove region #%d.\n",
         region->MR_region_sequence_number);
 }
 
 void
-MR_region_region_struct_removal_info_msg(MR_Region *region)
+MR_region_region_struct_removal_info_msg(MR_RegionHeader *region)
 {
     printf("#%d (%d)\n", region->MR_region_sequence_number, region);
     printf("\tLogically removed: %d\n", region->MR_region_logical_removed);
@@ -516,7 +523,7 @@
 void
 MR_region_push_ite_frame_msg(MR_RegionIteFixedFrame *ite_frame)
 {
-    int             frame_number;
+    int frame_number;
 
     frame_number = MR_region_get_frame_number( (MR_Word *) ite_frame);
     printf("Push ite frame #%d: %d\n", frame_number, ite_frame);
@@ -538,7 +545,7 @@
             (MR_Word *) (ite_frame->MR_riff_previous_ite_frame)),
             ite_frame->MR_riff_previous_ite_frame);
     printf("\tSaved sequence number: %d\n",
-            ite_frame->MR_riff_saved_sequence_number);
+        ite_frame->MR_riff_saved_sequence_number);
     MR_region_ite_frame_protected_regions_msg(ite_frame);
     MR_region_ite_frame_snapshots_msg(ite_frame);
 }
@@ -618,8 +625,8 @@
 void
 MR_region_disj_frame_snapshots_msg(MR_RegionDisjFixedFrame *disj_frame)
 {
-    MR_RegionSnapshot *snapshot;
-    int     i;
+    MR_RegionSnapshot   *snapshot;
+    int                 i;
 
     if (disj_frame->MR_rdff_num_snapshots > 10) {
         printf("Number of snapshots: %d\n", disj_frame->MR_rdff_num_snapshots);
@@ -657,7 +664,7 @@
 MR_region_commit_frame_msg(MR_RegionCommitFixedFrame *commit_frame)
 {
     MR_RegionCommitSave     *commit_save;
-    int     i;
+    int                     i;
 
     printf("Commit frame #%d: %d\n",
         MR_region_get_frame_number((MR_Word *)commit_frame), commit_frame);
@@ -680,8 +687,8 @@
 
     printf("\tNumber of saved regions: %d\n",
         commit_frame->MR_rcff_num_saved_regions);
-    for (i = 0; i < commit_frame->MR_rcff_num_saved_regions; i++,
-            commit_save++)
+    for (i = 0; i < commit_frame->MR_rcff_num_saved_regions;
+        i++, commit_save++)
     {
         printf("Slot: %d, region: %d\n", commit_save,
             commit_save->MR_commit_save_region);
@@ -693,7 +700,7 @@
         MR_RegionCommitFixedFrame *commit_frame)
 {
     MR_RegionCommitSave *commit_save;
-    int     i;
+    int                 i;
 
     /*
     ** This check is for development, when it becomes more stable, the
@@ -713,7 +720,6 @@
         printf("\tAt slot: %d, saved region: %d\n", commit_save,
             commit_save->MR_commit_save_region);
     }
-
 }
 
 void
@@ -730,7 +736,7 @@
 
 void
 MR_region_fill_ite_protect_msg(MR_RegionIteProtect *ite_prot,
-    MR_Region *region)
+    MR_RegionHeader *region)
 {
     if (ite_prot == NULL) {
         printf("\tNot protect region #%d.\n",
@@ -738,12 +744,12 @@
     } else {
         printf("\tAt slot: %d, protect region #%d.\n", ite_prot,
             region->MR_region_sequence_number);
-    } 
+    }
 }
 
 void
 MR_region_fill_ite_snapshot_removed_msg(MR_RegionSnapshot *snapshot,
-    MR_Region *region)
+    MR_RegionHeader *region)
 {
     if (snapshot == NULL) {
         printf("\tNot take snapshot of region #%d.\n",
@@ -751,12 +757,12 @@
     } else {
         printf("\tAt slot: %d, save snapshot of region #%d.\n", snapshot,
             region->MR_region_sequence_number);
-    } 
+    }
 }
 
 void
 MR_region_fill_ite_snapshot_not_removed_msg(MR_RegionSnapshot *snapshot,
-    MR_Region *region)
+    MR_RegionHeader *region)
 {
     printf("\tAt slot: %d, save snapshot of region #%d.\n", snapshot,
         region->MR_region_sequence_number);
@@ -764,7 +770,7 @@
 
 void
 MR_region_fill_disj_snapshot_msg(MR_RegionSnapshot *snapshot,
-    MR_Region *region)
+    MR_RegionHeader *region)
 {
     printf("\tAt slot: %d, save snapshot of region #%d.\n", snapshot,
         region->MR_region_sequence_number);
@@ -772,18 +778,18 @@
 
 void
 MR_region_fill_commit_msg(MR_RegionCommitSave *commit_save,
-    MR_Region *region)
+    MR_RegionHeader *region)
 {
     if (commit_save == NULL) {
         printf("\tNot save region #%d.\n", region->MR_region_sequence_number);
     } else {
         printf("\tAt slot: %d, save region #%d.\n", commit_save,
             region->MR_region_sequence_number);
-    } 
+    }
 }
 
 void
-MR_region_ite_unprotect_msg(MR_Region *region)
+MR_region_ite_unprotect_msg(MR_RegionHeader *region)
 {
     MR_RegionIteFixedFrame      *old_ite_frame;
     MR_RegionIteFixedFrame      *new_ite_frame;
@@ -831,7 +837,7 @@
 }
 
 void
-MR_region_profile_destroyed_region(MR_Region *region)
+MR_region_profile_destroyed_region(MR_RegionHeader *region)
 {
     int allocated_size_of_region;
 
@@ -853,7 +859,7 @@
 {
     int             new_words;
     int             new_pages;
-    MR_Region       *restoring_region;
+    MR_RegionHeader *restoring_region;
 
     MR_region_get_new_pages_and_new_words(snapshot, &new_pages, &new_words);
     MR_region_update_profiling_unit(&MR_rbmmp_pages_used, -new_pages);
@@ -957,17 +963,17 @@
     printf("Pages instant reclaimed thanks to snapshot: %d.\n",
         MR_rbmmp_pages_snapshot_instant_reclaimed);
     MR_region_print_profiling_unit("Ite frames used:",
-            &MR_rbmmp_num_ite_frames);
+        &MR_rbmmp_num_ite_frames);
     MR_region_print_profiling_unit("Disj frames used:",
-            &MR_rbmmp_num_disj_frames);
+        &MR_rbmmp_num_disj_frames);
     MR_region_print_profiling_unit("Commit frames used:",
-            &MR_rbmmp_num_commit_frames);
+        &MR_rbmmp_num_commit_frames);
     MR_region_print_profiling_unit("Words used by ite frames:",
-            &MR_rbmmp_words_used_by_ite_frames);
+        &MR_rbmmp_words_used_by_ite_frames);
     MR_region_print_profiling_unit("Words used by disj frames:",
-            &MR_rbmmp_words_used_by_disj_frames);
+        &MR_rbmmp_words_used_by_disj_frames);
     MR_region_print_profiling_unit("Words used by commit frames:",
-            &MR_rbmmp_words_used_by_commit_frames);
+        &MR_rbmmp_words_used_by_commit_frames);
 }
 
 #else /* Not define MR_RBMM_PROFILING. */
@@ -979,7 +985,7 @@
 }
 
 void
-MR_region_profile_destroyed_region(MR_Region *r)
+MR_region_profile_destroyed_region(MR_RegionHeader *r)
 {
     /* do nothing */
 }
@@ -1013,7 +1019,7 @@
 MR_region_get_new_pages_and_new_words(MR_RegionSnapshot *snapshot,
     int *new_pages, int *new_words)
 {
-    MR_Region       *restoring_region;
+    MR_RegionHeader *restoring_region;
     MR_RegionPage   *first_new_page;
 
     restoring_region = snapshot->MR_snapshot_region;
@@ -1029,7 +1035,7 @@
                  snapshot->MR_snapshot_saved_next_available_word));
     } else {
         *new_pages = 0;
-        *new_words = restoring_region->MR_region_next_available_word - 
+        *new_words = restoring_region->MR_region_next_available_word -
             snapshot->MR_snapshot_saved_next_available_word;
     }
 }
Index: runtime/mercury_region.h
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/runtime/mercury_region.h,v
retrieving revision 1.7
diff -u -r1.7 mercury_region.h
--- runtime/mercury_region.h	19 Dec 2007 16:35:24 -0000	1.7
+++ runtime/mercury_region.h	20 Dec 2007 07:06:18 -0000
@@ -51,7 +51,7 @@
 #define     MR_REGION_ITE_SNAPSHOT_SIZE                     3
 /*
 ** XXX The MR_REGION_DISJ_PROT_SIZE is no longer used. It should be removed
-** when the runtime support for RBMM becomes more stable. When removing it
+** when the runtime support for RBMM becomes more stable. When removing it,
 ** remember to make the compiler/options.m consistent with the removal here.
 */
 #define     MR_REGION_DISJ_PROT_SIZE                        0
@@ -80,11 +80,12 @@
 };
 
 /*
-** A region is implemented as a single-linked list of (region) pages.
-** The information of the region itself (pointer to next available word,
-** removal counter, some other operational data) is stored in its first page.
+** A region is implemented as a singly-linked list of region pages.
+** All the information about the region itself is contained in the
+** region's header, which is stored at the start of the region's first page.
 */
-struct MR_Region_Struct {
+
+struct MR_RegionHeader_Struct {
     /*
     ** Pointer to the last page of the region, i.e., the newest or last added
     ** page. This is needed when we need to enlarge the region.
@@ -128,8 +129,8 @@
     */
     MR_Word                             MR_region_destroy_at_commit;
 
-    MR_Region                           *MR_region_previous_region;
-    MR_Region                           *MR_region_next_region;
+    MR_RegionHeader                     *MR_region_previous_region;
+    MR_RegionHeader                     *MR_region_next_region;
 };
 
 /*---------------------------------------------------------------------------*/
@@ -167,24 +168,24 @@
 */
 
 struct MR_RegionSnapshot_Struct {
-    MR_Region           *MR_snapshot_region;
+    MR_RegionHeader     *MR_snapshot_region;
     MR_RegionPage       *MR_snapshot_saved_last_page;
     MR_Word             *MR_snapshot_saved_next_available_word;
 };
 
 /* Protection information in an ite frame. */
 struct MR_RegionIteProtect_Struct {
-    MR_Region           *MR_ite_prot_region;
+    MR_RegionHeader     *MR_ite_prot_region;
 };
 
 /* Protection information in a disj frame. */
 struct MR_RegionDisjProtect_Struct {
-    MR_Region           *MR_disj_prot_region;
+    MR_RegionHeader     *MR_disj_prot_region;
 };
 
 /* Save information in a commit frame */
 struct MR_RegionCommitSave_Struct {
-    MR_Region           *MR_commit_save_region;
+    MR_RegionHeader     *MR_commit_save_region;
 };
 
 /*---------------------------------------------------------------------------*/
@@ -196,7 +197,7 @@
 extern MR_RegionPage    *MR_region_free_page_list;
 
 /* The live regions are linked in a list. */
-extern MR_Region        *MR_live_region_list;
+extern MR_RegionHeader  *MR_live_region_list;
 
 extern MR_Word          MR_region_sequence_number;
 
@@ -208,10 +209,10 @@
 /*---------------------------------------------------------------------------*/
 
 /* Create a region. */
-extern  MR_Region       *MR_region_create_region(void);
+extern  MR_RegionHeader *MR_region_create_region(void);
 
 /* Destroy a region, i.e., physically deallocate the region. */
-extern  void            MR_region_destroy_region(MR_Region *);
+extern  void            MR_region_destroy_region(MR_RegionHeader *);
 
 /*
 ** Remove a region.
@@ -219,14 +220,14 @@
 ** logically removed, i.e., we mark it as removed but not actually deallocate.
 */
 
-extern  void            MR_region_remove_region(MR_Region *);
+extern  void            MR_region_remove_region(MR_RegionHeader *);
 extern  void            MR_remove_undisjprotected_region_ite_then_semidet(
-                            MR_Region *);
+                            MR_RegionHeader *);
 extern  void            MR_remove_undisjprotected_region_ite_then_nondet(
-                            MR_Region *);
+                            MR_RegionHeader *);
 
 /* Allocate a number of words into a region. */
-extern  MR_Word         *MR_region_alloc(MR_Region *, unsigned int);
+extern  MR_Word         *MR_region_alloc(MR_RegionHeader *, unsigned int);
 
 #define     MR_alloc_in_region(dest, region, num)                           \
             MR_tag_alloc_in_region(dest, 0, region, num)                    \
@@ -234,14 +235,16 @@
 #define     MR_tag_alloc_in_region(dest, tag, region, num)                  \
             do {                                                            \
                 (dest) = (MR_Word) MR_mkword((tag), (MR_Word)               \
-                    MR_region_alloc((MR_Region *) (region), (num)));        \
+                    MR_region_alloc((MR_RegionHeader *) (region), (num)));  \
             } while (0)
 
+#define     MR_region_page_end(region_page)                                 \
+            ((region_page)->MR_regionpage_space + MR_REGION_PAGE_SPACE_SIZE)
+
 #define     MR_region_available_space(region_last_page, next_available_word)\
-            ((region_last_page->MR_regionpage_space) +                      \
-             MR_REGION_PAGE_SPACE_SIZE - next_available_word)               \
+            (MR_region_page_end(region_last_page) - next_available_word)
 
-extern  int             MR_region_is_disj_protected(MR_Region *region);
+extern  int             MR_region_is_disj_protected(MR_RegionHeader *region);
 
 /*---------------------------------------------------------------------------*/
 /*
@@ -306,11 +309,11 @@
 #define     MR_region_fill_ite_protect(ite_sp, region_ptr,                  \
                 num_protected_regions, region_slot_reg)                     \
             do {                                                            \
-                MR_Region               *region;                            \
+                MR_RegionHeader         *region;                            \
                 MR_RegionIteProtect     *ite_prot;                          \
                                                                             \
                 MR_region_debug_start("fill_ite_protect");                  \
-                region = (MR_Region *) (region_ptr);                        \
+                region = (MR_RegionHeader *) (region_ptr);                  \
                 if (!MR_region_is_disj_protected(region) &&                 \
                     region->MR_region_ite_protected == NULL)                \
                 {                                                           \
@@ -347,12 +350,12 @@
 #define     MR_region_fill_ite_snapshot_removed(ite_sp, region_ptr,         \
                 num_snapshots, snapshot_block)                              \
             do {                                                            \
-                MR_Region               *region;                            \
+                MR_RegionHeader         *region;                            \
                 MR_RegionSnapshot       *snapshot;                          \
                                                                             \
                 MR_region_debug_start(                                      \
                     "fill_ite_snapshot_removed");                           \
-                region = (MR_Region *) (region_ptr);                        \
+                region = (MR_RegionHeader *) (region_ptr);                  \
                 snapshot = (MR_RegionSnapshot *) (snapshot_block);          \
                 if (region->MR_region_ite_protected != NULL ||              \
                     MR_region_is_disj_protected(region))                    \
@@ -373,12 +376,12 @@
 #define     MR_region_fill_ite_snapshot_not_removed(ite_sp, region_ptr,     \
                 num_snapshots, snapshot_block)                              \
             do {                                                            \
-                MR_Region               *region;                            \
+                MR_RegionHeader         *region;                            \
                 MR_RegionSnapshot       *snapshot;                          \
                                                                             \
                 MR_region_debug_start(                                      \
                     "fill_ite_snapshot_not_removed");                       \
-                region = (MR_Region *) (region_ptr);                        \
+                region = (MR_RegionHeader *) (region_ptr);                  \
                 snapshot = (MR_RegionSnapshot *) (snapshot_block);          \
                 MR_save_snapshot(region, snapshot);                         \
                 MR_region_profile_fill_ite_snapshot;                        \
@@ -398,11 +401,11 @@
 #define     MR_region_fill_disj_snapshot(disj_sp, region_ptr,               \
                 num_snapshots, snapshot_block)                              \
             do {                                                            \
-                MR_Region               *region;                            \
+                MR_RegionHeader         *region;                            \
                 MR_RegionSnapshot       *snapshot;                          \
                                                                             \
                 MR_region_debug_start("fill_disj_snapshot");                \
-                region = (MR_Region *) (region_ptr);                        \
+                region = (MR_RegionHeader *) (region_ptr);                  \
                 snapshot = (MR_RegionSnapshot *) (snapshot_block);          \
                 MR_save_snapshot(region, snapshot);                         \
                 MR_region_profile_fill_disj_snapshot;                       \
@@ -420,11 +423,11 @@
 #define     MR_region_fill_commit(commit_sp, region_ptr,                    \
                     num_saved_region_reg, region_slot_reg)                  \
             do {                                                            \
-                MR_Region               *region;                            \
+                MR_RegionHeader         *region;                            \
                 MR_RegionCommitSave     *commit_save;                       \
                                                                             \
                 MR_region_debug_start("fill_commit");                       \
-                region = (MR_Region *) (region_ptr);                        \
+                region = (MR_RegionHeader *) (region_ptr);                  \
                 if (!MR_region_is_disj_protected(region) &&                 \
                     region->MR_region_ite_protected == NULL)                \
                 {                                                           \
@@ -642,7 +645,7 @@
             do {                                                            \
                 MR_RegionCommitFixedFrame       *top_commit_frame;          \
                 MR_RegionCommitSave             *commit_save;               \
-                MR_Region                       *region;                    \
+                MR_RegionHeader                 *region;                    \
                 int                             i;                          \
                                                                             \
                 MR_region_debug_start("use_region_commit_failure");         \
@@ -716,7 +719,7 @@
 #define     MR_region_ite_unprotect(top_ite_frame)                          \
             do {                                                            \
                 MR_RegionIteProtect     *ite_prot;                          \
-                MR_Region               *protected_region;                  \
+                MR_RegionHeader         *protected_region;                  \
                 int                     i;                                  \
                                                                             \
                 MR_region_debug_start("ite_unprotect");                     \
@@ -821,7 +824,7 @@
 #define     MR_restore_snapshots(num_snapshots, first_snapshot)             \
             do {                                                            \
                 MR_RegionSnapshot   *snapshot;                              \
-                MR_Region           *restoring_region;                      \
+                MR_RegionHeader     *restoring_region;                      \
                 MR_RegionPage       *saved_last_page;                       \
                 MR_RegionPage       *first_new_page;                        \
                 int                 i;                                      \
@@ -848,7 +851,7 @@
 
 #define     MR_region_frame_destroy_new_regions(saved_sequence_number)      \
             do {                                                            \
-                MR_Region       *region;                                    \
+                MR_RegionHeader *region;                                    \
                                                                             \
                 region = MR_live_region_list;                               \
                 while (region != NULL &&                                    \
@@ -1030,11 +1033,11 @@
 
 #endif /* End of not define MR_RBMM_DEBUG */
 
-extern  void    MR_region_create_region_msg(MR_Region *region);
-extern  void    MR_region_try_remove_region_msg(MR_Region *region);
-extern  void    MR_region_region_struct_removal_info_msg(MR_Region *region);
-extern  void    MR_region_destroy_region_msg(MR_Region *region);
-extern  void    MR_region_logically_remove_region_msg(MR_Region *region);
+extern  void    MR_region_create_region_msg(MR_RegionHeader *region);
+extern  void    MR_region_try_remove_region_msg(MR_RegionHeader *region);
+extern  void    MR_region_region_struct_removal_info_msg(MR_RegionHeader *region);
+extern  void    MR_region_destroy_region_msg(MR_RegionHeader *region);
+extern  void    MR_region_logically_remove_region_msg(MR_RegionHeader *region);
 
 extern  void    MR_region_push_ite_frame_msg(MR_RegionIteFixedFrame *ite_frame);
 extern  void    MR_region_ite_frame_msg(MR_RegionIteFixedFrame *ite_frame);
@@ -1063,15 +1066,16 @@
 extern  void    MR_region_end_msg(const char *);
 
 extern  void    MR_region_fill_ite_protect_msg(MR_RegionIteProtect *,
-                    MR_Region *);
+                    MR_RegionHeader *);
 extern  void    MR_region_fill_ite_snapshot_not_removed_msg(
-                    MR_RegionSnapshot *, MR_Region *);
+                    MR_RegionSnapshot *, MR_RegionHeader *);
 extern  void    MR_region_fill_ite_snapshot_removed_msg(MR_RegionSnapshot *,
-                    MR_Region *);
+                    MR_RegionHeader *);
 extern  void    MR_region_fill_disj_snapshot_msg(MR_RegionSnapshot *,
-                    MR_Region *);
-extern  void    MR_region_fill_commit_msg(MR_RegionCommitSave *, MR_Region *);
-extern  void    MR_region_ite_unprotect_msg(MR_Region *);
+                    MR_RegionHeader *);
+extern  void    MR_region_fill_commit_msg(MR_RegionCommitSave *,
+                    MR_RegionHeader *);
+extern  void    MR_region_ite_unprotect_msg(MR_RegionHeader *);
 extern  void    MR_region_restore_from_snapshot_msg(MR_RegionSnapshot *);
 
 /*---------------------------------------------------------------------------*/
@@ -1262,7 +1266,7 @@
 
 extern  void    MR_region_update_profiling_unit(
                     MR_RegionProfUnit *profiling_unit, int quantity);
-extern  void    MR_region_profile_destroyed_region(MR_Region *);
+extern  void    MR_region_profile_destroyed_region(MR_RegionHeader *);
 extern  void    MR_region_profile_restore_from_snapshot(MR_RegionSnapshot *);
 extern  void    MR_region_profile_increase_counter(unsigned int *);
 extern  int     MR_region_get_number_of_pages(MR_RegionPage *,
Index: runtime/mercury_types.h
===================================================================
RCS file: /home/mercury/mercury1/repository/mercury/runtime/mercury_types.h,v
retrieving revision 1.53
diff -u -r1.53 mercury_types.h
--- runtime/mercury_types.h	15 Oct 2007 08:14:56 -0000	1.53
+++ runtime/mercury_types.h	20 Dec 2007 06:21:16 -0000
@@ -295,7 +295,7 @@
 typedef struct MR_ProcTableInfo_Struct          MR_ProcTableInfo;
 typedef MR_ProcTableInfo                        *MR_ProcTableInfoPtr;
 
-typedef struct MR_Region_Struct                 MR_Region;
+typedef struct MR_RegionHeader_Struct           MR_RegionHeader;
 typedef struct MR_RegionPage_Struct             MR_RegionPage;
 typedef struct MR_RegionSnapshot_Struct         MR_RegionSnapshot;
 typedef struct MR_RegionIteFixedFrame_Struct    MR_RegionIteFixedFrame;
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 ssdb
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
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