1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-01 01:40:21 +02:00

Add new vtable reserved unboxed field

* libguile/struct.h (SCM_VTABLE_BASE_LAYOUT)
  (scm_vtable_index_reserved_6): Add a reserved field.
* module/oop/goops.scm (fold-class-slots, unboxed-slot?): Reserve a new
  unboxed field.
This commit is contained in:
Andy Wingo 2017-09-26 20:47:27 +02:00
parent c3a8112847
commit f32500acca
2 changed files with 7 additions and 4 deletions

View file

@ -61,6 +61,7 @@
"pw" /* printer */ \ "pw" /* printer */ \
"ph" /* name (hidden from make-struct for back-compat reasons) */ \ "ph" /* name (hidden from make-struct for back-compat reasons) */ \
"uh" /* size */ \ "uh" /* size */ \
"uh" /* reserved */ \
"uh" /* reserved */ "uh" /* reserved */
#define scm_vtable_index_layout 0 /* A symbol describing the physical arrangement of this type. */ #define scm_vtable_index_layout 0 /* A symbol describing the physical arrangement of this type. */
@ -69,8 +70,9 @@
#define scm_vtable_index_instance_printer 3 /* A printer for this struct type. */ #define scm_vtable_index_instance_printer 3 /* A printer for this struct type. */
#define scm_vtable_index_name 4 /* Name of this vtable. */ #define scm_vtable_index_name 4 /* Name of this vtable. */
#define scm_vtable_index_size 5 /* Number of fields, for simple structs. */ #define scm_vtable_index_size 5 /* Number of fields, for simple structs. */
#define scm_vtable_index_reserved_7 6 #define scm_vtable_index_reserved_6 6
#define scm_vtable_offset_user 7 /* Where do user fields start in the vtable? */ #define scm_vtable_index_reserved_7 7
#define scm_vtable_offset_user 8 /* Where do user fields start in the vtable? */
/* All applicable structs have the following fields. */ /* All applicable structs have the following fields. */
#define SCM_APPLICABLE_BASE_LAYOUT \ #define SCM_APPLICABLE_BASE_LAYOUT \

View file

@ -190,7 +190,8 @@
(print) (print)
(name #:class <protected-hidden-slot>) (name #:class <protected-hidden-slot>)
(nfields #:class <hidden-slot>) (nfields #:class <hidden-slot>)
(%reserved #:class <hidden-slot>) (%reserved-6 #:class <hidden-slot>)
(%reserved-7 #:class <hidden-slot>)
(direct-supers) (direct-supers)
(direct-slots) (direct-slots)
(direct-subclasses) (direct-subclasses)
@ -739,7 +740,7 @@ followed by its associated value. If @var{l} does not hold a value for
(define (read-only-slot? slot) #f) (define (read-only-slot? slot) #f)
(define (unboxed-slot? slot) (define (unboxed-slot? slot)
(memq (%slot-definition-name slot) (memq (%slot-definition-name slot)
'(flags instance-finalizer nfields %reserved))) '(flags instance-finalizer nfields %reserved-6 %reserved-7)))
(define (allocate-slots class slots) (define (allocate-slots class slots)
"Transform the computed list of direct slot definitions @var{slots} "Transform the computed list of direct slot definitions @var{slots}