This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH 6/9] Remove Guile GDB object property mechanism
- From: Andy Wingo <wingo at igalia dot com>
- To: gdb-patches at sourceware dot org
- Cc: Andy Wingo <wingo at igalia dot com>
- Date: Wed, 9 Apr 2014 18:08:39 +0200
- Subject: [PATCH 6/9] Remove Guile GDB object property mechanism
- Authentication-results: sourceware.org; auth=none
- References: <1397059725-18066-1-git-send-email-wingo at igalia dot com>
* gdb/guile/guile-internal.h: Remove scm_gsmob / GDB_SMOB_HEAD base
type; it only served as something to which object properties could be
attached: a use case already served by Guile's own object properties.
(gdbscm_init_gsmob, gdbscm_mark_gsmob, gdbscm_mark_chained_gsmob)
(gdbscm_mark_eqable_gsmob): Remove these now-unneeded functions.
* gdb/guile/scm-gsmob.c (gdbscm_init_gsmob, gdbscm_mark_gsmob)
(gdbscm_mark_chained_gsmob, gdbscm_mark_eqable_gsmob): Remove.
(gdbscm_gsmob_property, gdbscm_set_gsmob_property_x)
(gdbscm_gsmob_has_property_p, add_property_name)
(gdbscm_gsmob_properties): Remove these public interfaces, and remove
them from gsmob_functions.
* gdb/guile/scm-arch.c:
* gdb/guile/scm-block.c:
* gdb/guile/scm-breakpoint.c:
* gdb/guile/scm-exception.c:
* gdb/guile/scm-frame.c:
* gdb/guile/scm-iterator.c:
* gdb/guile/scm-lazy-string.c:
* gdb/guile/scm-objfile.c:
* gdb/guile/scm-pretty-print.c:
* gdb/guile/scm-symbol.c:
* gdb/guile/scm-symtab.c:
* gdb/guile/scm-type.c:
* gdb/guile/scm-value.c: Adapt to not include a gdb_gsmob base member,
for basic gsmobs, and to not call init/mark functions.
* gdb/doc/guile.texi (GDB Scheme Data Types): Update.
* gdb/guile/lib/gdb.scm (gdb-object-property, set-gdb-object-property)
(gdb-object-has-property?, gdb-object-properties): Remove.
* gdb/testsuite/gdb.guile/scm-breakpoint.exp:
* gdb/testsuite/gdb.guile/scm-gsmob.exp: Update to use plain old object
properties instead of gdb-object-properties.
---
gdb/doc/guile.texi | 27 ----
gdb/guile/guile-internal.h | 43 +-----
gdb/guile/lib/gdb.scm | 4 -
gdb/guile/scm-arch.c | 9 +-
gdb/guile/scm-block.c | 15 +-
gdb/guile/scm-breakpoint.c | 9 +-
gdb/guile/scm-exception.c | 8 +-
gdb/guile/scm-frame.c | 5 +-
gdb/guile/scm-gsmob.c | 216 +----------------------------
gdb/guile/scm-iterator.c | 8 +-
gdb/guile/scm-lazy-string.c | 9 +-
gdb/guile/scm-objfile.c | 9 +-
gdb/guile/scm-pretty-print.c | 16 +--
gdb/guile/scm-symbol.c | 5 +-
gdb/guile/scm-symtab.c | 14 +-
gdb/guile/scm-type.c | 13 +-
gdb/guile/scm-value.c | 8 +-
gdb/testsuite/gdb.guile/scm-breakpoint.exp | 14 +-
gdb/testsuite/gdb.guile/scm-gsmob.exp | 20 ++-
19 files changed, 47 insertions(+), 405 deletions(-)
diff --git a/gdb/doc/guile.texi b/gdb/doc/guile.texi
index f7204e9..be3176b 100644
--- a/gdb/doc/guile.texi
+++ b/gdb/doc/guile.texi
@@ -342,33 +342,6 @@ Return the kind of the @value{GDBN} object, e.g., @code{<gdb:breakpoint>},
as a symbol.
@end deffn
-Every @value{GDBN} object provides a common set of functions for
-extending them in simple ways. Each @value{GDBN} object has a list of
-properties, initially empty. These properties are akin to Guile's
-object properties, but are stored with the @value{GDBN} object
-(@pxref{Object Properties,,, guile, GNU Guile Reference Manual}).
-Property names can be any @code{eq?}-able value, but it is recommended
-that they be symbols.
-
-@deffn {Scheme Procedure} set-gdb-object-property! object property-name value
-Set the value of property @code{property-name} to value @code{value}.
-The result is unspecified.
-@end deffn
-
-@deffn {Scheme Procedure} gdb-object-property object property-name
-Return the value of property @code{property-name}.
-If the property isn't present then @code{#f} is returned.
-@end deffn
-
-@deffn {Scheme Procedure} gdb-object-has-property? object property-name
-Return @code{#t} if @value{GDBN} object has property @code{property-name}.
-Otherwise return @code{#f}.
-@end deffn
-
-@deffn {Scheme Procedure} gdb-object-properties object
-Return an unsorted list of names of properties.
-@end deffn
-
@value{GDBN} defines the following object types:
@table @code
diff --git a/gdb/guile/guile-internal.h b/gdb/guile/guile-internal.h
index f95f092..bc3f55d 100644
--- a/gdb/guile/guile-internal.h
+++ b/gdb/guile/guile-internal.h
@@ -155,42 +155,23 @@ extern int gdbscm_is_procedure (SCM proc);
/* GDB smobs, from scm-smob.c */
-/* All gdb smobs must contain one of the following as the first member:
- gdb_smob, chained_gdb_smob, or eqable_gdb_smob.
+/* Chained GDB smobs should have chained_gdb_smob as their first member. The
+ next,prev members of chained_gdb_smob allow for chaining gsmobs together so
+ that, for example, when an objfile is deleted we can clean up all smobs that
+ reference it.
- The next,prev members of chained_gdb_smob allow for chaining gsmobs
- together so that, for example, when an objfile is deleted we can clean up
- all smobs that reference it.
-
- The containing_scm member of eqable_gdb_smob allows for returning the
- same gsmob instead of creating a new one, allowing them to be eq?-able.
-
- IMPORTANT: chained_gdb_smob and eqable_gdb-smob are a "subclasses" of
- gdb_smob. The layout of chained_gdb_smob,eqable_gdb_smob must match
- gdb_smob as if it is a subclass. To that end we use macro GDB_SMOB_HEAD
- to ensure this. */
-
-#define GDB_SMOB_HEAD \
- /* Property list for externally added fields. */ \
- SCM properties;
-
-typedef struct
-{
- GDB_SMOB_HEAD
-} gdb_smob;
+ Eq-able GDB smobs should have eqable_gdb_smob as their first member. The
+ containing_scm member of eqable_gdb_smob allows for returning the same gsmob
+ instead of creating a new one, allowing them to be eq?-able. */
typedef struct _chained_gdb_smob
{
- GDB_SMOB_HEAD
-
struct _chained_gdb_smob *prev;
struct _chained_gdb_smob *next;
} chained_gdb_smob;
typedef struct _eqable_gdb_smob
{
- GDB_SMOB_HEAD
-
/* The object we are contained in.
This can be used for several purposes.
This is used by the eq? machinery: We need to be able to see if we have
@@ -204,8 +185,6 @@ typedef struct _eqable_gdb_smob
SCM containing_scm;
} eqable_gdb_smob;
-#undef GDB_SMOB_HEAD
-
struct objfile;
struct objfile_data;
@@ -215,19 +194,11 @@ typedef int (gsmob_pred_func) (SCM);
extern scm_t_bits gdbscm_make_smob_type (const char *name, size_t size);
-extern void gdbscm_init_gsmob (gdb_smob *base);
-
extern void gdbscm_init_chained_gsmob (chained_gdb_smob *base);
extern void gdbscm_init_eqable_gsmob (eqable_gdb_smob *base,
SCM containing_scm);
-extern SCM gdbscm_mark_gsmob (gdb_smob *base);
-
-extern SCM gdbscm_mark_chained_gsmob (chained_gdb_smob *base);
-
-extern SCM gdbscm_mark_eqable_gsmob (eqable_gdb_smob *base);
-
extern void gdbscm_add_objfile_ref (struct objfile *objfile,
const struct objfile_data *data_key,
chained_gdb_smob *g_smob);
diff --git a/gdb/guile/lib/gdb.scm b/gdb/guile/lib/gdb.scm
index 396ccd2..a3245f8 100644
--- a/gdb/guile/lib/gdb.scm
+++ b/gdb/guile/lib/gdb.scm
@@ -273,10 +273,6 @@
;; scm-gsmob.c
gdb-object-kind
- gdb-object-property
- set-gdb-object-property!
- gdb-object-has-property?
- gdb-object-properties
<gdb:value>
<gdb:block>
diff --git a/gdb/guile/scm-arch.c b/gdb/guile/scm-arch.c
index fa578f3..6a805c6 100644
--- a/gdb/guile/scm-arch.c
+++ b/gdb/guile/scm-arch.c
@@ -31,9 +31,6 @@
struct _arch_smob
{
- /* This always appears first. */
- gdb_smob base;
-
struct gdbarch *gdbarch;
};
@@ -53,10 +50,7 @@ static int arscm_is_arch (SCM);
static SCM
arscm_mark_arch_smob (SCM self)
{
- arch_smob *a_smob = (arch_smob *) SCM_SMOB_DATA (self);
-
- /* Do this last. */
- return gdbscm_mark_gsmob (&a_smob->base);
+ return SCM_BOOL_F;
}
/* The smob "print" function for <gdb:arch>. */
@@ -88,7 +82,6 @@ arscm_make_arch_smob (struct gdbarch *gdbarch)
a_smob->gdbarch = gdbarch;
a_scm = scm_new_smob (arch_smob_tag, (scm_t_bits) a_smob);
- gdbscm_init_gsmob (&a_smob->base);
return a_scm;
}
diff --git a/gdb/guile/scm-block.c b/gdb/guile/scm-block.c
index 4e1748e..8f39e7c 100644
--- a/gdb/guile/scm-block.c
+++ b/gdb/guile/scm-block.c
@@ -56,9 +56,6 @@ typedef struct _block_smob
typedef struct
{
- /* This always appears first. */
- gdb_smob base;
-
/* The iterator for that block. */
struct block_iterator iter;
@@ -125,10 +122,7 @@ bkscm_objfile_block_map (struct objfile *objfile)
static SCM
bkscm_mark_block_smob (SCM self)
{
- block_smob *b_smob = (block_smob *) SCM_SMOB_DATA (self);
-
- /* Do this last. */
- return gdbscm_mark_eqable_gsmob (&b_smob->base);
+ return SCM_BOOL_F;
}
/* The smob "free" function for <gdb:block>. */
@@ -540,11 +534,7 @@ gdbscm_block_symbols (SCM self)
static SCM
bkscm_mark_block_syms_progress_smob (SCM self)
{
- block_syms_progress_smob *i_smob
- = (block_syms_progress_smob *) SCM_SMOB_DATA (self);
-
- /* Do this last. */
- return gdbscm_mark_gsmob (&i_smob->base);
+ return SCM_BOOL_F;
}
/* The smob "print" function for <gdb:block-symbols-iterator>. */
@@ -607,7 +597,6 @@ bkscm_make_block_syms_progress_smob (void)
memset (&i_smob->iter, 0, sizeof (i_smob->iter));
i_smob->initialized_p = 0;
smob = scm_new_smob (block_syms_progress_smob_tag, (scm_t_bits) i_smob);
- gdbscm_init_gsmob (&i_smob->base);
return smob;
}
diff --git a/gdb/guile/scm-breakpoint.c b/gdb/guile/scm-breakpoint.c
index d022377..a66b82e 100644
--- a/gdb/guile/scm-breakpoint.c
+++ b/gdb/guile/scm-breakpoint.c
@@ -38,9 +38,6 @@
typedef struct gdbscm_breakpoint_object
{
- /* This always appears first. */
- gdb_smob base;
-
/* The breakpoint number according to gdb.
This is recorded here because BP will be NULL when deleted. */
int number;
@@ -83,10 +80,7 @@ bpscm_mark_breakpoint_smob (SCM self)
/* We don't mark containing_scm here. It is just a backlink to our
container, and is gc'protected until the breakpoint is deleted. */
- scm_gc_mark (bp_smob->stop);
-
- /* Do this last. */
- return gdbscm_mark_gsmob (&bp_smob->base);
+ return bp_smob->stop;
}
/* The smob "free" function for <gdb:breakpoint>. */
@@ -192,7 +186,6 @@ bpscm_make_breakpoint_smob (void)
bp_smob->stop = SCM_BOOL_F;
bp_scm = scm_new_smob (breakpoint_smob_tag, (scm_t_bits) bp_smob);
bp_smob->containing_scm = bp_scm;
- gdbscm_init_gsmob (&bp_smob->base);
return bp_scm;
}
diff --git a/gdb/guile/scm-exception.c b/gdb/guile/scm-exception.c
index a96a350..316f0b4 100644
--- a/gdb/guile/scm-exception.c
+++ b/gdb/guile/scm-exception.c
@@ -40,9 +40,6 @@
typedef struct
{
- /* This always appears first. */
- gdb_smob base;
-
/* The key and args parameters to "throw". */
SCM key;
SCM args;
@@ -109,9 +106,7 @@ exscm_mark_exception_smob (SCM self)
exception_smob *e_smob = (exception_smob *) SCM_SMOB_DATA (self);
scm_gc_mark (e_smob->key);
- scm_gc_mark (e_smob->args);
- /* Do this last. */
- return gdbscm_mark_gsmob (&e_smob->base);
+ return e_smob->args;
}
/* The smob "print" function for <gdb:exception>. */
@@ -145,7 +140,6 @@ gdbscm_make_exception (SCM key, SCM args)
e_smob->key = key;
e_smob->args = args;
smob = scm_new_smob (exception_smob_tag, (scm_t_bits) e_smob);
- gdbscm_init_gsmob (&e_smob->base);
++gdbscm_exception_count;
diff --git a/gdb/guile/scm-frame.c b/gdb/guile/scm-frame.c
index 6031a7f..ee30597 100644
--- a/gdb/guile/scm-frame.c
+++ b/gdb/guile/scm-frame.c
@@ -135,10 +135,7 @@ frscm_inferior_frame_map (struct inferior *inferior)
static SCM
frscm_mark_frame_smob (SCM self)
{
- frame_smob *f_smob = (frame_smob *) SCM_SMOB_DATA (self);
-
- /* Do this last. */
- return gdbscm_mark_eqable_gsmob (&f_smob->base);
+ return SCM_BOOL_F;
}
/* The smob "free" function for <gdb:frame>. */
diff --git a/gdb/guile/scm-gsmob.c b/gdb/guile/scm-gsmob.c
index 1ca6af3..ef9ecb9 100644
--- a/gdb/guile/scm-gsmob.c
+++ b/gdb/guile/scm-gsmob.c
@@ -30,25 +30,16 @@
specify the gdb smob kind, that is left for another day if it ever is
needed.
- We want the objects we export to Scheme to be extensible by the user.
- A gsmob (gdb smob) adds a simple API on top of smobs to support this.
- This allows GDB objects to be easily extendable in a useful manner.
- To that end, all smobs in gdb have gdb_smob as the first member.
-
- On top of gsmobs there are "chained gsmobs". They are used to assist with
- life-time tracking of GDB objects vs Scheme objects. Gsmobs can "subclass"
+ Some GDB smobs are "chained gsmobs". They are used to assist with life-time
+ tracking of GDB objects vs Scheme objects. Gsmobs can "subclass"
chained_gdb_smob, which contains a doubly-linked list to assist with
life-time tracking.
- On top of gsmobs there are also "eqable gsmobs". Gsmobs can "subclass"
- eqable_gdb_smob instead of gdb_smob, and is used to make gsmobs eq?-able.
- This is done by recording all gsmobs in a hash table and before creating a
- gsmob first seeing if it's already in the table. Eqable gsmobs can also be
- used where lifetime-tracking is required.
-
- Gsmobs (and chained/eqable gsmobs) add an extra field that is used to
- record extra data: "properties". It is a table of key/value pairs
- that can be set with set-gdb-object-property!, gdb-object-property. */
+ Some other GDB smobs are "eqable gsmobs". Gsmob implementations can
+ "subclass" eqable_gdb_smob to make gsmobs eq?-able. This is done by
+ recording all gsmobs in a hash table and before creating a gsmob first seeing
+ if it's already in the table. Eqable gsmobs can also be used where
+ lifetime-tracking is required. */
#include "defs.h"
#include "hashtab.h"
@@ -61,15 +52,6 @@
static htab_t registered_gsmobs;
-/* Gsmob properties are initialize stored as an alist to minimize space
- usage: GDB can be used to debug some really big programs, and property
- lists generally have very few elements. Once the list grows to this
- many elements then we switch to a hash table.
- The smallest Guile hashtable in 2.0 uses a vector of 31 elements.
- The value we use here is large enough to hold several expected uses,
- without being so large that we might as well just use a hashtable. */
-#define SMOB_PROP_HTAB_THRESHOLD 7
-
/* Hash function for registered_gsmobs hash table. */
static hashval_t
@@ -136,14 +118,6 @@ gdbscm_make_smob_type (const char *name, size_t size)
return result;
}
-/* Initialize a gsmob. */
-
-void
-gdbscm_init_gsmob (gdb_smob *base)
-{
- base->properties = SCM_EOL;
-}
-
/* Initialize a chained_gdb_smob.
This is the same as gdbscm_init_gsmob except that it also sets prev,next
to NULL. */
@@ -151,7 +125,6 @@ gdbscm_init_gsmob (gdb_smob *base)
void
gdbscm_init_chained_gsmob (chained_gdb_smob *base)
{
- gdbscm_init_gsmob ((gdb_smob *) base);
base->prev = NULL;
base->next = NULL;
}
@@ -163,50 +136,9 @@ gdbscm_init_chained_gsmob (chained_gdb_smob *base)
void
gdbscm_init_eqable_gsmob (eqable_gdb_smob *base, SCM containing_scm)
{
- gdbscm_init_gsmob ((gdb_smob *) base);
base->containing_scm = containing_scm;
}
-/* Call this from each smob's "mark" routine.
- In general, this should be called as:
- return gdbscm_mark_gsmob (base); */
-
-SCM
-gdbscm_mark_gsmob (gdb_smob *base)
-{
- /* Return the last one to mark as an optimization.
- The marking infrastructure will mark it for us. */
- return base->properties;
-}
-
-/* Call this from each smob's "mark" routine.
- In general, this should be called as:
- return gdbscm_mark_chained_gsmob (base); */
-
-SCM
-gdbscm_mark_chained_gsmob (chained_gdb_smob *base)
-{
- /* Return the last one to mark as an optimization.
- The marking infrastructure will mark it for us. */
- return base->properties;
-}
-
-/* Call this from each smob's "mark" routine.
- In general, this should be called as:
- return gdbscm_mark_eqable_gsmob (base); */
-
-SCM
-gdbscm_mark_eqable_gsmob (eqable_gdb_smob *base)
-{
- /* There's no need to mark containing_scm.
- Any references to it either come from Scheme in which case it will be
- marked through them, or there's a reference to the smob from gdb in
- which case the smob is GC-protected. */
-
- /* Return the last one to mark as an optimization.
- The marking infrastructure will mark it for us. */
- return base->properties;
-}
/* gsmob accessors */
@@ -246,124 +178,6 @@ gdbscm_gsmob_kind (SCM self)
return result;
}
-/* (gdb-object-property gsmob property) -> object
- If property isn't present then #f is returned. */
-
-static SCM
-gdbscm_gsmob_property (SCM self, SCM property)
-{
- SCM smob;
- gdb_smob *base;
-
- smob = gsscm_get_gsmob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
- base = (gdb_smob *) SCM_SMOB_DATA (self);
-
- /* Have we switched to a hash table? */
- if (gdbscm_is_true (scm_hash_table_p (base->properties)))
- return scm_hashq_ref (base->properties, property, SCM_BOOL_F);
-
- return scm_assq_ref (base->properties, property);
-}
-
-/* (set-gdb-object-property! gsmob property new-value) -> unspecified */
-
-static SCM
-gdbscm_set_gsmob_property_x (SCM self, SCM property, SCM new_value)
-{
- SCM smob, alist;
- gdb_smob *base;
-
- smob = gsscm_get_gsmob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
- base = (gdb_smob *) SCM_SMOB_DATA (self);
-
- /* Have we switched to a hash table? */
- if (gdbscm_is_true (scm_hash_table_p (base->properties)))
- {
- scm_hashq_set_x (base->properties, property, new_value);
- return SCM_UNSPECIFIED;
- }
-
- alist = scm_assq_set_x (base->properties, property, new_value);
-
- /* Did we grow the list? */
- if (!scm_is_eq (alist, base->properties))
- {
- /* If we grew the list beyond a threshold in size,
- switch to a hash table. */
- if (scm_ilength (alist) >= SMOB_PROP_HTAB_THRESHOLD)
- {
- SCM elm, htab;
-
- htab = scm_c_make_hash_table (SMOB_PROP_HTAB_THRESHOLD);
- for (elm = alist; elm != SCM_EOL; elm = scm_cdr (elm))
- scm_hashq_set_x (htab, scm_caar (elm), scm_cdar (elm));
- base->properties = htab;
- return SCM_UNSPECIFIED;
- }
- }
-
- base->properties = alist;
- return SCM_UNSPECIFIED;
-}
-
-/* (gdb-object-has-property? gsmob property) -> boolean */
-
-static SCM
-gdbscm_gsmob_has_property_p (SCM self, SCM property)
-{
- SCM smob, handle;
- gdb_smob *base;
-
- smob = gsscm_get_gsmob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
- base = (gdb_smob *) SCM_SMOB_DATA (self);
-
- if (gdbscm_is_true (scm_hash_table_p (base->properties)))
- handle = scm_hashq_get_handle (base->properties, property);
- else
- handle = scm_assq (property, base->properties);
-
- return scm_from_bool (gdbscm_is_true (handle));
-}
-
-/* Helper function for gdbscm_gsmob_properties. */
-
-static SCM
-add_property_name (void *closure, SCM handle)
-{
- SCM *resultp = closure;
-
- *resultp = scm_cons (scm_car (handle), *resultp);
- return SCM_UNSPECIFIED;
-}
-
-/* (gdb-object-properties gsmob) -> list
- The list is unsorted. */
-
-static SCM
-gdbscm_gsmob_properties (SCM self)
-{
- SCM smob, handle, result;
- gdb_smob *base;
-
- smob = gsscm_get_gsmob_arg_unsafe (self, SCM_ARG1, FUNC_NAME);
- base = (gdb_smob *) SCM_SMOB_DATA (self);
-
- result = SCM_EOL;
- if (gdbscm_is_true (scm_hash_table_p (base->properties)))
- {
- scm_internal_hash_for_each_handle (add_property_name, &result,
- base->properties);
- }
- else
- {
- SCM elm;
-
- for (elm = base->properties; elm != SCM_EOL; elm = scm_cdr (elm))
- result = scm_cons (scm_caar (elm), result);
- }
-
- return result;
-}
/* When underlying gdb data structures are deleted, we need to update any
smobs with references to them. There are several smobs that reference
@@ -463,22 +277,6 @@ static const scheme_function gsmob_functions[] =
"\
Return the kind of the GDB object, e.g., <gdb:breakpoint>, as a symbol." },
- { "gdb-object-property", 2, 0, 0, gdbscm_gsmob_property,
- "\
-Return the specified property of the GDB object." },
-
- { "set-gdb-object-property!", 3, 0, 0, gdbscm_set_gsmob_property_x,
- "\
-Set the specified property of the GDB object." },
-
- { "gdb-object-has-property?", 2, 0, 0, gdbscm_gsmob_has_property_p,
- "\
-Return #t if the specified property is present." },
-
- { "gdb-object-properties", 1, 0, 0, gdbscm_gsmob_properties,
- "\
-Return an unsorted list of names of properties." },
-
END_FUNCTIONS
};
diff --git a/gdb/guile/scm-iterator.c b/gdb/guile/scm-iterator.c
index a6deb84..080339b 100644
--- a/gdb/guile/scm-iterator.c
+++ b/gdb/guile/scm-iterator.c
@@ -60,9 +60,6 @@
struct _iterator_smob
{
- /* This always appears first. */
- gdb_smob base;
-
/* The object being iterated over. */
SCM object;
@@ -119,9 +116,7 @@ itscm_mark_iterator_smob (SCM self)
scm_gc_mark (i_smob->object);
scm_gc_mark (i_smob->progress);
- scm_gc_mark (i_smob->next_x);
- /* Do this last. */
- return gdbscm_mark_gsmob (&i_smob->base);
+ return i_smob->next_x;
}
/* The smob "print" function for <gdb:iterator>. */
@@ -160,7 +155,6 @@ itscm_make_iterator_smob (SCM object, SCM progress, SCM next)
i_smob->progress = progress;
i_smob->next_x = next;
i_scm = scm_new_smob (iterator_smob_tag, (scm_t_bits) i_smob);
- gdbscm_init_gsmob (&i_smob->base);
return i_scm;
}
diff --git a/gdb/guile/scm-lazy-string.c b/gdb/guile/scm-lazy-string.c
index e965d01..9409379 100644
--- a/gdb/guile/scm-lazy-string.c
+++ b/gdb/guile/scm-lazy-string.c
@@ -33,9 +33,6 @@
typedef struct
{
- /* This always appears first. */
- gdb_smob base;
-
/* Holds the address of the lazy string. */
CORE_ADDR address;
@@ -68,10 +65,7 @@ static scm_t_bits lazy_string_smob_tag;
static SCM
lsscm_mark_lazy_string_smob (SCM self)
{
- lazy_string_smob *ls_smob = (lazy_string_smob *) SCM_SMOB_DATA (self);
-
- /* Do this last. */
- return gdbscm_mark_gsmob (&ls_smob->base);
+ return SCM_BOOL_F;
}
/* The smob "free" function for <gdb:lazy-string>. */
@@ -132,7 +126,6 @@ lsscm_make_lazy_string_smob (CORE_ADDR address, int length,
ls_smob->type = type;
ls_scm = scm_new_smob (lazy_string_smob_tag, (scm_t_bits) ls_smob);
- gdbscm_init_gsmob (&ls_smob->base);
return ls_scm;
}
diff --git a/gdb/guile/scm-objfile.c b/gdb/guile/scm-objfile.c
index 70f7e33..693d404 100644
--- a/gdb/guile/scm-objfile.c
+++ b/gdb/guile/scm-objfile.c
@@ -30,9 +30,6 @@
struct _objfile_smob
{
- /* This always appears first. */
- gdb_smob base;
-
/* The corresponding objfile. */
struct objfile *objfile;
@@ -69,13 +66,10 @@ ofscm_mark_objfile_smob (SCM self)
{
objfile_smob *o_smob = (objfile_smob *) SCM_SMOB_DATA (self);
- scm_gc_mark (o_smob->pretty_printers);
-
/* We don't mark containing_scm here. It is just a backlink to our
container, and is gc-protected until the objfile is deleted. */
- /* Do this last. */
- return gdbscm_mark_gsmob (&o_smob->base);
+ return o_smob->pretty_printers;
}
/* The smob "print" function for <gdb:objfile>. */
@@ -113,7 +107,6 @@ ofscm_make_objfile_smob (void)
o_smob->pretty_printers = SCM_EOL;
o_scm = scm_new_smob (objfile_smob_tag, (scm_t_bits) o_smob);
o_smob->containing_scm = o_scm;
- gdbscm_init_gsmob (&o_smob->base);
return o_scm;
}
diff --git a/gdb/guile/scm-pretty-print.c b/gdb/guile/scm-pretty-print.c
index 1b9902f4..f25eac3 100644
--- a/gdb/guile/scm-pretty-print.c
+++ b/gdb/guile/scm-pretty-print.c
@@ -62,9 +62,6 @@ enum display_hint
typedef struct
{
- /* This must appear first. */
- gdb_smob base;
-
/* A string representing the name of the printer. */
SCM name;
@@ -84,9 +81,6 @@ typedef struct
typedef struct
{
- /* This must appear first. */
- gdb_smob base;
-
/* Either #f or one of the supported display hints: map, array, string.
If neither of those then the display hint is ignored (treated as #f). */
SCM display_hint;
@@ -136,9 +130,7 @@ ppscm_mark_pretty_printer_smob (SCM self)
scm_gc_mark (pp_smob->name);
scm_gc_mark (pp_smob->enabled);
- scm_gc_mark (pp_smob->lookup);
- /* Do this last. */
- return gdbscm_mark_gsmob (&pp_smob->base);
+ return pp_smob->lookup;
}
/* The smob "print" function for <gdb:pretty-printer>. */
@@ -179,7 +171,6 @@ gdbscm_make_pretty_printer (SCM name, SCM lookup)
pp_smob->lookup = lookup;
pp_smob->enabled = SCM_BOOL_T;
smob = scm_new_smob (pretty_printer_smob_tag, (scm_t_bits) pp_smob);
- gdbscm_init_gsmob (&pp_smob->base);
return smob;
}
@@ -267,9 +258,7 @@ ppscm_mark_pretty_printer_worker_smob (SCM self)
scm_gc_mark (w_smob->display_hint);
scm_gc_mark (w_smob->to_string);
- scm_gc_mark (w_smob->children);
- /* Do this last. */
- return gdbscm_mark_gsmob (&w_smob->base);
+ return w_smob->children;
}
/* The smob "print" function for <gdb:pretty-printer-worker>. */
@@ -311,7 +300,6 @@ gdbscm_make_pretty_printer_worker (SCM display_hint, SCM to_string,
w_smob->to_string = to_string;
w_smob->children = children;
w_scm = scm_new_smob (pretty_printer_worker_smob_tag, (scm_t_bits) w_smob);
- gdbscm_init_gsmob (&w_smob->base);
return w_scm;
}
diff --git a/gdb/guile/scm-symbol.c b/gdb/guile/scm-symbol.c
index 0c5cc05..b6a92a4 100644
--- a/gdb/guile/scm-symbol.c
+++ b/gdb/guile/scm-symbol.c
@@ -100,10 +100,7 @@ syscm_objfile_symbol_map (struct symbol *symbol)
static SCM
syscm_mark_symbol_smob (SCM self)
{
- symbol_smob *s_smob = (symbol_smob *) SCM_SMOB_DATA (self);
-
- /* Do this last. */
- return gdbscm_mark_eqable_gsmob (&s_smob->base);
+ return SCM_BOOL_F;
}
/* The smob "free" function for <gdb:symbol>. */
diff --git a/gdb/guile/scm-symtab.c b/gdb/guile/scm-symtab.c
index 7294fea..9c7f51c 100644
--- a/gdb/guile/scm-symtab.c
+++ b/gdb/guile/scm-symtab.c
@@ -52,9 +52,6 @@ typedef struct
typedef struct
{
- /* This always appears first. */
- gdb_smob base;
-
/* The <gdb:symtab> object of the symtab.
We store this instead of a pointer to the symtab_smob because it's not
clear GC will know the symtab_smob is referenced by us otherwise, and we
@@ -127,10 +124,7 @@ stscm_objfile_symtab_map (struct symtab *symtab)
static SCM
stscm_mark_symtab_smob (SCM self)
{
- symtab_smob *st_smob = (symtab_smob *) SCM_SMOB_DATA (self);
-
- /* Do this last. */
- return gdbscm_mark_eqable_gsmob (&st_smob->base);
+ return SCM_BOOL_F;
}
/* The smob "free" function for <gdb:symtab>. */
@@ -407,10 +401,7 @@ stscm_mark_sal_smob (SCM self)
{
sal_smob *s_smob = (sal_smob *) SCM_SMOB_DATA (self);
- scm_gc_mark (s_smob->symtab_scm);
-
- /* Do this last. */
- return gdbscm_mark_gsmob (&s_smob->base);
+ return s_smob->symtab_scm;
}
/* The smob "free" function for <gdb:sal>. */
@@ -458,7 +449,6 @@ stscm_make_sal_smob (void)
s_smob->symtab_scm = SCM_BOOL_F;
memset (&s_smob->sal, 0, sizeof (s_smob->sal));
s_scm = scm_new_smob (sal_smob_tag, (scm_t_bits) s_smob);
- gdbscm_init_gsmob (&s_smob->base);
return s_scm;
}
diff --git a/gdb/guile/scm-type.c b/gdb/guile/scm-type.c
index 9345c28..b65c06a 100644
--- a/gdb/guile/scm-type.c
+++ b/gdb/guile/scm-type.c
@@ -55,9 +55,6 @@ typedef struct _type_smob
typedef struct
{
- /* This always appears first. */
- gdb_smob base;
-
/* Backlink to the containing <gdb:type> object. */
SCM type_scm;
@@ -186,10 +183,7 @@ tyscm_type_map (struct type *type)
static SCM
tyscm_mark_type_smob (SCM self)
{
- type_smob *t_smob = (type_smob *) SCM_SMOB_DATA (self);
-
- /* Do this last. */
- return gdbscm_mark_eqable_gsmob (&t_smob->base);
+ return SCM_BOOL_F;
}
/* The smob "free" function for <gdb:type>. */
@@ -422,9 +416,7 @@ tyscm_mark_field_smob (SCM self)
{
field_smob *f_smob = (field_smob *) SCM_SMOB_DATA (self);
- scm_gc_mark (f_smob->type_scm);
- /* Do this last. */
- return gdbscm_mark_gsmob (&f_smob->base);
+ return f_smob->type_scm;
}
/* The smob "print" function for <gdb:field>. */
@@ -458,7 +450,6 @@ tyscm_make_field_smob (SCM type_scm, int field_num)
f_smob->type_scm = type_scm;
f_smob->field_num = field_num;
result = scm_new_smob (field_smob_tag, (scm_t_bits) f_smob);
- gdbscm_init_gsmob (&f_smob->base);
return result;
}
diff --git a/gdb/guile/scm-value.c b/gdb/guile/scm-value.c
index 8ca0762..70cc7d0 100644
--- a/gdb/guile/scm-value.c
+++ b/gdb/guile/scm-value.c
@@ -36,9 +36,6 @@
typedef struct _value_smob
{
- /* This always appears first. */
- gdb_smob base;
-
/* Doubly linked list of values in values_in_scheme.
IWBN to use a chained_gdb_smob instead, which is doable, it just requires
a bit more casting than normal. */
@@ -132,9 +129,7 @@ vlscm_mark_value_smob (SCM self)
scm_gc_mark (v_smob->address);
scm_gc_mark (v_smob->type);
- scm_gc_mark (v_smob->dynamic_type);
- /* Do this last. */
- return gdbscm_mark_gsmob (&v_smob->base);
+ return v_smob->dynamic_type;
}
/* The smob "free" function for <gdb:value>. */
@@ -238,7 +233,6 @@ vlscm_make_value_smob (void)
v_smob->dynamic_type = SCM_UNDEFINED;
v_scm = scm_new_smob (value_smob_tag, (scm_t_bits) v_smob);
- gdbscm_init_gsmob (&v_smob->base);
return v_scm;
}
diff --git a/gdb/testsuite/gdb.guile/scm-breakpoint.exp b/gdb/testsuite/gdb.guile/scm-breakpoint.exp
index 4e78791..fd7c970 100644
--- a/gdb/testsuite/gdb.guile/scm-breakpoint.exp
+++ b/gdb/testsuite/gdb.guile/scm-breakpoint.exp
@@ -310,14 +310,14 @@ proc test_bkpt_eval_funcs { } {
"(define set-bp-data-count! set-car!)" "" \
"(define bp-data-inf-i cdr)" "" \
"(define set-bp-data-inf-i! set-cdr!)" "" \
- "(define (bp-eval-count bkpt) (bp-data-count (gdb-object-property bkpt 'bp-data)))" "" \
- "(define (bp-eval-inf-i bkpt) (bp-data-inf-i (gdb-object-property bkpt 'bp-data)))" "" \
+ "(define (bp-eval-count bkpt) (bp-data-count (object-property bkpt 'bp-data)))" "" \
+ "(define (bp-eval-inf-i bkpt) (bp-data-inf-i (object-property bkpt 'bp-data)))" "" \
"(define (make-bp-eval location)" "" \
" (let ((bp (create-breakpoint! location)))" "" \
- " (set-gdb-object-property! bp 'bp-data (make-bp-data))" "" \
+ " (set-object-property! bp 'bp-data (make-bp-data))" "" \
" (set-breakpoint-stop! bp" "" \
" (lambda (bkpt)" "" \
- " (let ((data (gdb-object-property bkpt 'bp-data))" "" \
+ " (let ((data (object-property bkpt 'bp-data))" "" \
" (inf-i (parse-and-eval \"i\")))" "" \
" (set-bp-data-count! data (+ (bp-data-count data) 1))" "" \
" (set-bp-data-inf-i! data inf-i)" "" \
@@ -329,10 +329,10 @@ proc test_bkpt_eval_funcs { } {
"guile" "" \
"(define (make-bp-also-eval location)" "" \
" (let ((bp (create-breakpoint! location)))" "" \
- " (set-gdb-object-property! bp 'bp-data (make-bp-data))" "" \
+ " (set-object-property! bp 'bp-data (make-bp-data))" "" \
" (set-breakpoint-stop! bp" "" \
" (lambda (bkpt)" "" \
- " (let* ((data (gdb-object-property bkpt 'bp-data))" "" \
+ " (let* ((data (object-property bkpt 'bp-data))" "" \
" (count (+ (bp-data-count data) 1)))" "" \
" (set-bp-data-count! data count)" "" \
" (= count 9))))" "" \
@@ -343,7 +343,7 @@ proc test_bkpt_eval_funcs { } {
"guile" "" \
"(define (make-bp-basic location)" "" \
" (let ((bp (create-breakpoint! location)))" "" \
- " (set-gdb-object-property! bp 'bp-data (make-bp-data))" "" \
+ " (set-object-property! bp 'bp-data (make-bp-data))" "" \
" bp))" "" \
"end" ""
diff --git a/gdb/testsuite/gdb.guile/scm-gsmob.exp b/gdb/testsuite/gdb.guile/scm-gsmob.exp
index e33d0e1..70c3a65 100644
--- a/gdb/testsuite/gdb.guile/scm-gsmob.exp
+++ b/gdb/testsuite/gdb.guile/scm-gsmob.exp
@@ -45,26 +45,24 @@ proc prop_name { i } {
# Set and ref the properties in separate loops to verify previously set
# properties are not lost when we set a new property or switch to htabs.
for {set i 0} {$i <= $SMOB_PROP_HTAB_THRESHOLD} {incr i} {
- gdb_test "gu (print (gdb-object-has-property? arch '[prop_name $i]))" \
+ gdb_test "gu (print (object-property arch '[prop_name $i]))" \
"= #f" "property prop$i not present before set"
- gdb_test_no_output "gu (set-gdb-object-property! arch '[prop_name $i] $i)" \
- "set prop $i"
- gdb_test "gu (print (gdb-object-has-property? arch '[prop_name $i]))" \
- "= #t" "property prop$i present after set"
+ gdb_test "gu (print (set-object-property! arch '[prop_name $i] $i))" \
+ "= $i" "set prop $i"
+ gdb_test "gu (print (object-property arch '[prop_name $i]))" \
+ "= $i" "property prop$i present after set"
}
for {set i 0} {$i <= $SMOB_PROP_HTAB_THRESHOLD} {incr i} {
- gdb_test "gu (print (gdb-object-has-property? arch '[prop_name $i]))" \
- "= #t" "property prop$i present after all set"
- gdb_test "gu (print (gdb-object-property arch '[prop_name $i]))" \
+ gdb_test "gu (print (object-property arch '[prop_name $i]))" \
"= $i" "ref prop $i"
}
-# Verify gsmob-properties.
+# Verify properties.
set prop_list ""
for {set i 0} {$i <= $SMOB_PROP_HTAB_THRESHOLD} {incr i} {
set prop_list "$prop_list [prop_name $i]"
}
set prop_list [lsort $prop_list]
verbose -log "prop_list: $prop_list"
-gdb_test "gu (print (sort (gdb-object-properties arch) (lambda (a b) (string<? (symbol->string a) (symbol->string b)))))" \
- "= \\($prop_list\\)" "gdb-object-properties"
+gdb_test "gu (print (sort (map car (object-properties arch)) (lambda (a b) (string<? (symbol->string a) (symbol->string b)))))" \
+ "= \\($prop_list\\)" "object-properties"
--
1.9.1