summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libguile/struct.c17
-rw-r--r--libguile/struct.h2
2 files changed, 6 insertions, 13 deletions
diff --git a/libguile/struct.c b/libguile/struct.c
index 4a9455517..c28a76d48 100644
--- a/libguile/struct.c
+++ b/libguile/struct.c
@@ -180,18 +180,13 @@ set_vtable_layout_flags (SCM vtable)
{
case 'w':
case 'W':
- if (!(flags & SCM_VTABLE_FLAG_SIMPLE_RW) && field > 0)
- /* There's a mixture of `w' and `r' flags. */
- flags = 0;
- else
+ if (field == 0)
flags |= SCM_VTABLE_FLAG_SIMPLE_RW;
break;
case 'r':
case 'R':
- if (flags & SCM_VTABLE_FLAG_SIMPLE_RW)
- /* There's a mixture of `w' and `r' flags. */
- flags = 0;
+ flags &= ~SCM_VTABLE_FLAG_SIMPLE_RW;
break;
default:
@@ -711,10 +706,8 @@ SCM_DEFINE (scm_struct_ref, "struct-ref", 2, 0, 0,
if (SCM_LIKELY (SCM_VTABLE_FLAG_IS_SET (vtable, SCM_VTABLE_FLAG_SIMPLE)
&& p < SCM_STRUCT_DATA_REF (vtable, scm_vtable_index_size)))
- {
- /* The fast path: HANDLE is a struct with only "p" fields. */
- answer = SCM_PACK (data[p]);
- }
+ /* The fast path: HANDLE is a struct with only "p" fields. */
+ answer = SCM_PACK (data[p]);
else
{
SCM layout;
@@ -801,7 +794,7 @@ SCM_DEFINE (scm_struct_set_x, "struct-set!", 3, 0, 0,
if (SCM_LIKELY (SCM_VTABLE_FLAG_IS_SET (vtable, SCM_VTABLE_FLAG_SIMPLE)
&& SCM_VTABLE_FLAG_IS_SET (vtable, SCM_VTABLE_FLAG_SIMPLE_RW)
&& p < SCM_STRUCT_DATA_REF (vtable, scm_vtable_index_size)))
- /* The fast path: HANDLE is a struct with only "p" fields. */
+ /* The fast path: HANDLE is a struct with only "pw" fields. */
data[p] = SCM_UNPACK (val);
else
{
diff --git a/libguile/struct.h b/libguile/struct.h
index 374a5ce74..d2a05af2a 100644
--- a/libguile/struct.h
+++ b/libguile/struct.h
@@ -107,7 +107,7 @@
#define SCM_VTABLE_FLAG_APPLICABLE (1L << 2) /* instances of this vtable are applicable? */
#define SCM_VTABLE_FLAG_SETTER_VTABLE (1L << 3) /* instances of this vtable are applicable-with-setter vtables? */
#define SCM_VTABLE_FLAG_SETTER (1L << 4) /* instances of this vtable are applicable-with-setters? */
-#define SCM_VTABLE_FLAG_SIMPLE (1L << 5) /* instances of this vtable have only "pr" fields */
+#define SCM_VTABLE_FLAG_SIMPLE (1L << 5) /* instances of this vtable have only "p" fields */
#define SCM_VTABLE_FLAG_SIMPLE_RW (1L << 6) /* instances of this vtable have only "pw" fields */
#define SCM_VTABLE_FLAG_SMOB_0 (1L << 7)
#define SCM_VTABLE_FLAG_GOOPS_0 (1L << 8)