minor SCM_DEBUG patch

View: New views
4 Messages — Rating Filter:   Alert me  

minor SCM_DEBUG patch

by Ken Raeburn-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

The SCM_GC_MARK_P macro doesn't exist any more, but is still mentioned  
in a few places.  With SCM_DEBUG defined, one of them actually gets  
compiled.  While looking at this, I also noticed three macros in  
deprecated.h (which were there in 1.8) which use non-existent macros  
including SCM_GC_MARK_P, and deleted those too.  I didn't touch the  
other uses of SCM_GC_MARK_P in futures.c.

With this, and my pair-checking patches for objects.c and eval.i.c  
(sent September 5, still awaiting review from a developer familiar  
enough with the code), I can build a version with SCM_DEBUG that  
passes tests.

Related but not addressed here: Several places still check  
scm_gc_running_p and conditionally execute code (or not), but it's now  
defined as a macro always expanding to 0.

     Clean up some uses of old GC macros that don't exist any more.

     * libguile/deprecated.h (SCM_GC8MARKP, SCM_SETGC8MARK,  
SCM_CLRGC8MARK):
       Delete.
     * libguile/gc.c (scm_assert_cell_valid): Remove check of  
SCM_GC_MARK_P.

diff --git a/libguile/deprecated.h b/libguile/deprecated.h
index ed1a105..5680d09 100644
--- a/libguile/deprecated.h
+++ b/libguile/deprecated.h
@@ -120,9 +120,6 @@ SCM_DEPRECATED SCM scm_unprotect_object (SCM obj);
    (SCM_SETCDR ((x), SCM_PACK (SCM_UNPACK (SCM_CDR (x)) | (y))))
  #define SCM_FREEP(x) (0)
  #define SCM_NFREEP(x) (1)
-#define SCM_GC8MARKP(x) SCM_GC_MARK_P (x)
-#define SCM_SETGC8MARK(x) SCM_SET_GC_MARK (x)
-#define SCM_CLRGC8MARK(x) SCM_CLEAR_GC_MARK (x)
  #define SCM_GCTYP16(x) SCM_TYP16 (x)
  #define SCM_GCCDR(x) SCM_CDR (x)
  SCM_DEPRECATED void scm_remember (SCM * ptr);
diff --git a/libguile/gc.c b/libguile/gc.c
index 9c56d04..96e3c30 100644
--- a/libguile/gc.c
+++ b/libguile/gc.c
@@ -146,18 +146,7 @@ scm_assert_cell_valid (SCM cell)
        */
        if (scm_expensive_debug_cell_accesses_p)
  scm_i_expensive_validation_check (cell);
-#if (SCM_DEBUG_MARKING_API == 0)
-      if (!SCM_GC_MARK_P (cell))
- {
-  fprintf (stderr,
-   "scm_assert_cell_valid: this object is unmarked. \n"
-   "It has been garbage-collected in the last GC run: "
-   "%lux\n",
-                   (unsigned long) SCM_UNPACK (cell));
-  abort ();
- }
-#endif /* SCM_DEBUG_MARKING_API */
-
+
        scm_i_cell_validation_already_running = 0;  /* re-enable */
      }
  }




Re: minor SCM_DEBUG patch

by Neil Jerram :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Ken Raeburn <raeburn@...> writes:

> The SCM_GC_MARK_P macro doesn't exist any more, but is still mentioned
> in a few places.  With SCM_DEBUG defined, one of them actually gets
> compiled.  While looking at this, I also noticed three macros in
> deprecated.h (which were there in 1.8) which use non-existent macros
> including SCM_GC_MARK_P, and deleted those too.  I didn't touch the
> other uses of SCM_GC_MARK_P in futures.c.

This patch looks good to me too.

> Related but not addressed here: Several places still check
> scm_gc_running_p and conditionally execute code (or not), but it's now
> defined as a macro always expanding to 0.

After reviewing them, I'm pretty sure it would be OK to remove all of
those too.  They're mostly to do with not being able to generate a
libguile exception during GC, and I believe that that possibility just
doesn't exist now.  (Because the within-GC code is nothing to do with
libguile.)

Regards,
        Neil



Re: minor SCM_DEBUG patch

by Ludovic Courtès-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hello,

Ken Raeburn <raeburn@...> writes:

> The SCM_GC_MARK_P macro doesn't exist any more, but is still mentioned
> in a few places.  With SCM_DEBUG defined, one of them actually gets
> compiled.  While looking at this, I also noticed three macros in
> deprecated.h (which were there in 1.8) which use non-existent macros
> including SCM_GC_MARK_P, and deleted those too.  I didn't touch the
> other uses of SCM_GC_MARK_P in futures.c.

Looks good to me.  In addition we could add this to ‘deprecated.h’:

  #define SCM_GC_MARK_P  scm_gc_mark_p
  SCM_DEPRECATED int scm_gc_mark_p (SCM obj);

and:

  int
  scm_gc_mark_p (SCM obj)
  {
    /* `GC_is_visible ()' aborts if the given pointer is
        not visible to the GC.  */
    GC_is_visible (SCM2PTR (obj));
    return 1;
  }
 
What do you think?

> Related but not addressed here: Several places still check
> scm_gc_running_p and conditionally execute code (or not), but it's now
> defined as a macro always expanding to 0.

Likewise, we could leave it as a deprecated thing (always 0) and also
remove its internal uses.

Thanks,
Ludo’.




Re: minor SCM_DEBUG patch

by Ken Raeburn-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Oct 31, 2009, at 19:11, Ludovic Courtès wrote:
> Looks good to me.  In addition we could add this to  
> ‘deprecated.h’: ...SCM_GC_MARK_P...

SCM_GC_MARK_P wasn't deprecated in 1.8.0, so, yeah, if someone might  
actually be using it (optimization within a smob mark function?), it  
should probably be supplied and marked deprecated.

>> ...scm_gc_running_p...
>
> Likewise, we could leave it as a deprecated thing (always 0) and also
> remove its internal uses.

Yep.

Ken