rem: if (!(SCHEME_HASHTP(argv[0]) || SCHEME_BUCKTP(argv[0])) || SCHEME_IMMUTABLEP(argv[0]))
add: if (!(SCHEME_HASHTP(argv[0]) && SCHEME_MUTABLEP(argv[0])) && !SCHEME_BUCKTP(argv[0]))
context: static Scheme_Object *hash_table_remove(int argc, Scheme_Object *argv[]){  if (!(SCHEME_HASHTP(argv[0]) || SCHEME_BUCKTP(argv[0])) || SCHEME_IMMUTABLEP(argv[0]))    scheme_wrong_type("hash-table-remove!", "mutable hash-table", 0, argc, argv);  if (SCHEME_BUCKTP(argv[0])) {    Scheme_Bucket *b;    Scheme_Bucket_Table *t = (Scheme_Bucket_Table *)argv[0];    if (t->mutex) scheme_wait_sema(t->mutex, 0);    b = scheme_bucket_or_null_from_table((Scheme_Bucket_Table *)argv[0], (char *)argv[1], 0);    if (b) {      HT_EXTRACT_WEAK(b->key) = NULL;      b->val = NULL;    }    if (t->mutex) scheme_post_sema(t->mutex);  } else{    Scheme_Hash_Table *t = (Scheme_Hash_Table *)argv[0];    if (t->mutex) scheme_wait_sema(t->mutex, 0);    scheme_hash_set(t, argv[1], NULL);    if (t->mutex) scheme_post_sema(t->mutex);  }  return scheme_void;}