summaryrefslogtreecommitdiff
path: root/vm_method.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-03-24 10:43:37 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-03-24 10:43:37 +0000
commitcedfed5e8d6371c66f9f664e0c49f5d051dad033 (patch)
tree23c7f704309ef30f52bf2a4ecc954d254e161f89 /vm_method.c
parent014236612a0be2f07ac6e645bd5a32ddbe4c8b0f (diff)
* vm_method.c (rb_sweep_method_entry): simplify code to unlink.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39904 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_method.c')
-rw-r--r--vm_method.c14
1 files changed, 4 insertions, 10 deletions
diff --git a/vm_method.c b/vm_method.c
index 6d0865f9d8..b4c45180d6 100644
--- a/vm_method.c
+++ b/vm_method.c
@@ -122,26 +122,20 @@ void
rb_sweep_method_entry(void *pvm)
{
rb_vm_t *vm = pvm;
- struct unlinked_method_entry_list_entry *ume = vm->unlinked_method_entry_list, *prev_ume = 0, *curr_ume;
+ struct unlinked_method_entry_list_entry **prev_ume = &vm->unlinked_method_entry_list, *ume = *prev_ume, *curr_ume;
while (ume) {
if (ume->me->mark) {
ume->me->mark = 0;
- prev_ume = ume;
- ume = ume->next;
+ prev_ume = &ume->next;
+ ume = *prev_ume;
}
else {
rb_free_method_entry(ume->me);
- if (prev_ume == 0) {
- vm->unlinked_method_entry_list = ume->next;
- }
- else {
- prev_ume->next = ume->next;
- }
-
curr_ume = ume;
ume = ume->next;
+ *prev_ume = ume;
xfree(curr_ume);
}
}