wingo pushed a commit to branch wip-whippet in repository guile. commit 6ba6fbdf64bb9dba1ade6979b0b16ec5e1d03ee8 Author: Andy Wingo <wi...@pobox.com> AuthorDate: Wed Jun 18 10:58:08 2025 +0200
Fix GOOPS for <regexp> * module/oop/goops.scm (<regexp>): * libguile/goops.c: (scm_class_of): Give regexps their own class; it doesn't come from smobs. --- libguile/goops.c | 4 ++++ module/oop/goops.scm | 10 ++-------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/libguile/goops.c b/libguile/goops.c index 5825c3732..80e0b3040 100644 --- a/libguile/goops.c +++ b/libguile/goops.c @@ -144,6 +144,7 @@ static SCM class_continuation; static SCM class_directory; static SCM class_macro; static SCM class_random_state; +static SCM class_regexp; static struct scm_ephemeron_table *vtable_class_map; static SCM pre_goops_vtables = SCM_EOL; @@ -357,6 +358,8 @@ SCM_DEFINE (scm_class_of, "class-of", 1, 0, 0, return class_macro; case scm_tc16_random_state: return class_random_state; + case scm_tc16_regexp: + return class_regexp; default: abort (); } @@ -998,6 +1001,7 @@ SCM_DEFINE (scm_sys_goops_early_init, "%goops-early-init", 0, 0, 0, class_directory = scm_variable_ref (scm_c_lookup ("<directory>")); class_macro = scm_variable_ref (scm_c_lookup ("<macro>")); class_random_state = scm_variable_ref (scm_c_lookup ("<random-state>")); + class_regexp = scm_variable_ref (scm_c_lookup ("<regexp>")); create_smob_classes (); create_struct_classes (); diff --git a/module/oop/goops.scm b/module/oop/goops.scm index 89cc69da1..6a18b9691 100644 --- a/module/oop/goops.scm +++ b/module/oop/goops.scm @@ -72,7 +72,7 @@ <keyword> <syntax> <atomic-box> <thread> <bitvector> <finalizer> <ephemeron> <ephemeron-table> <character-set> <mutex> <condition-variable> <continuation> <directory> - <array> <random-state> + <array> <random-state> <regexp> ;; Numbers. <number> <complex> <real> <integer> <fraction> @@ -84,7 +84,6 @@ ;; have corresponding classes, which may be obtained via ;; class-of, once you have an instance. Perhaps FIXME to ;; provide a smob-type-name->class procedure. - <regexp> <dynamic-object> ;; Modules. @@ -1089,6 +1088,7 @@ slots as we go." (define-standard-class <directory> (<top>)) (define-standard-class <macro> (<top>)) (define-standard-class <random-state> (<top>)) +(define-standard-class <regexp> (<top>)) (define-standard-class <thread> (<top>)) (define-standard-class <number> (<top>)) (define-standard-class <complex> (<number>)) @@ -3532,12 +3532,6 @@ var{initargs}." -;;; -;;; {SMOB and port classes} -;;; - -(define <regexp> (find-subclass <top> '<regexp>)) - ;; <dynamic-object> used to be a SMOB type, albeit not exported even to ;; C. However now it's a record type, though still private. Cross our ;; fingers that nobody is using it in anger!