diff options
-rw-r--r-- | libguile/weak-table.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/libguile/weak-table.c b/libguile/weak-table.c index f6f8dd68b..1bb513b17 100644 --- a/libguile/weak-table.c +++ b/libguile/weak-table.c @@ -686,6 +686,16 @@ weak_table_put_x (scm_t_weak_table *table, unsigned long hash, } } + /* Fast path for updated values for existing entries of weak-key + tables. */ + if (table->kind == SCM_WEAK_TABLE_KIND_KEY && + entries[k].hash == hash && + entries[k].key == SCM_UNPACK (key)) + { + entries[k].value = SCM_UNPACK (value); + return; + } + if (entries[k].hash) unregister_disappearing_links (&entries[k], table->kind); else |