1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-07 20:50:17 +02:00

Move weak table implementation to Scheme

* libguile/weak-table.c:
* libguile/weak-table.h: Remove.

* libguile.h: Remove weak-table.h include.
* libguile/Makefile.am (libguile_@GUILE_EFFECTIVE_VERSION@_la_SOURCES):
(DOT_X_FILES):
(DOT_DOC_FILES):
(modinclude_HEADERS): Remove weak-table.[ch].

* libguile/evalext.c:
* libguile/fluids.c:
* libguile/hash.c:
* libguile/init.c:
* libguile/print.c:
* libguile/scm.h: Remove uses of weak-table.h and free up the tc7.

* libguile/hashtab.c:
* libguile/hashtab.h: Add deprecated shims to dispatch to (ice-9
weak-tables) when working on weak tables.

* module/ice-9/weak-tables.scm: New implementation.  Embeds the hash and
equality functions in the table itself.

* module/ice-9/object-properties.scm:
* module/ice-9/poe.scm:
* module/ice-9/popen.scm:
* module/ice-9/source-properties.scm:
* module/language/cps/compile-bytecode.scm:
* module/language/ecmascript/array.scm:
* module/language/ecmascript/function.scm:
* module/oop/goops/save.scm:
* module/srfi/srfi-18.scm:
* module/srfi/srfi-69.scm:
* module/system/base/types.scm:
* module/system/base/types/internal.scm:
* module/system/foreign.scm:
* module/system/vm/assembler.scm:
* test-suite/tests/gc.test:
* test-suite/tests/hash.test:
* test-suite/tests/srfi-69.test:
* test-suite/tests/types.test:
* test-suite/tests/weaks.test: Update to use new, non-deprecated weak
tables API.
This commit is contained in:
Andy Wingo 2025-05-13 14:57:31 +02:00
parent d457aaa57d
commit 8280c8485f
32 changed files with 1092 additions and 1167 deletions

View file

@ -52,28 +52,28 @@
(apply (js-value this) args))))
(define-method (pget (o <applicable>) p)
(let ((wrapper (hashq-ref *program-wrappers* o)))
(let ((wrapper (doubly-weak-hash-table-ref *program-wrappers* o)))
(if wrapper
(pget wrapper p)
(pget *function-prototype* p))))
(define-method (pput (o <applicable>) p v)
(let ((wrapper (hashq-ref *program-wrappers* o)))
(let ((wrapper (doubly-weak-hash-table-ref *program-wrappers* o)))
(if wrapper
(pput wrapper p v)
(let ((wrapper (make <js-program-wrapper> #:value o #:class "Function"
#:prototype *function-prototype*)))
(hashq-set! *program-wrappers* o wrapper)
(doubly-weak-hash-table-set! *program-wrappers* o wrapper)
(pput wrapper p v)))))
(define-method (js-prototype (o <applicable>))
(let ((wrapper (hashq-ref *program-wrappers* o)))
(let ((wrapper (doubly-weak-hash-table-ref *program-wrappers* o)))
(if wrapper
(js-prototype wrapper)
#f)))
(define-method (js-constructor (o <applicable>))
(let ((wrapper (hashq-ref *program-wrappers* o)))
(let ((wrapper (doubly-weak-hash-table-ref *program-wrappers* o)))
(if wrapper
(js-constructor wrapper)
#f)))