summaryrefslogtreecommitdiff
path: root/proc.c
diff options
context:
space:
mode:
authornormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-09-12 21:34:12 +0000
committernormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-09-12 21:34:12 +0000
commit1972a3136c52393b9597f2eb6262e9ccd11e84b8 (patch)
treef38c7c6f29fc699525069a7128292e891e6b9790 /proc.c
parentbb2cec10c0c0ea7c806204cb313db772f2607cb2 (diff)
proc/env DATA_PTR is never NULL
* proc.c (proc_free): remove, use RUBY_TYPED_DEFAULT_FREE (proc_mark, proc_memsize): remove needless branching * vm.c (env_free): remove, use RUBY_TYPED_DEFAULT_FREE (env_mark, env_memsize): remove needless branching This shows a tiny ~0.5% improvement in benchmark/bm_vm2_newlambda.rb but also removes a lot of code. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47564 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'proc.c')
-rw-r--r--proc.c31
1 files changed, 9 insertions, 22 deletions
diff --git a/proc.c b/proc.c
index 04ed7b71e8..a3882a9acd 100644
--- a/proc.c
+++ b/proc.c
@@ -40,29 +40,16 @@ static int method_min_max_arity(VALUE, int *max);
#define IS_METHOD_PROC_NODE(node) (nd_type(node) == NODE_IFUNC && (node)->nd_cfnc == bmcall)
static void
-proc_free(void *ptr)
-{
- RUBY_FREE_ENTER("proc");
- if (ptr) {
- ruby_xfree(ptr);
- }
- RUBY_FREE_LEAVE("proc");
-}
-
-static void
proc_mark(void *ptr)
{
- rb_proc_t *proc;
+ rb_proc_t *proc = ptr;
RUBY_MARK_ENTER("proc");
- if (ptr) {
- proc = ptr;
- RUBY_MARK_UNLESS_NULL(proc->envval);
- RUBY_MARK_UNLESS_NULL(proc->blockprocval);
- RUBY_MARK_UNLESS_NULL(proc->block.proc);
- RUBY_MARK_UNLESS_NULL(proc->block.self);
- if (proc->block.iseq && RUBY_VM_IFUNC_P(proc->block.iseq)) {
- RUBY_MARK_UNLESS_NULL((VALUE)(proc->block.iseq));
- }
+ RUBY_MARK_UNLESS_NULL(proc->envval);
+ RUBY_MARK_UNLESS_NULL(proc->blockprocval);
+ RUBY_MARK_UNLESS_NULL(proc->block.proc);
+ RUBY_MARK_UNLESS_NULL(proc->block.self);
+ if (proc->block.iseq && RUBY_VM_IFUNC_P(proc->block.iseq)) {
+ RUBY_MARK_UNLESS_NULL((VALUE)(proc->block.iseq));
}
RUBY_MARK_LEAVE("proc");
}
@@ -70,14 +57,14 @@ proc_mark(void *ptr)
static size_t
proc_memsize(const void *ptr)
{
- return ptr ? sizeof(rb_proc_t) : 0;
+ return sizeof(rb_proc_t);
}
static const rb_data_type_t proc_data_type = {
"proc",
{
proc_mark,
- proc_free,
+ RUBY_TYPED_DEFAULT_FREE,
proc_memsize,
},
NULL, NULL, RUBY_TYPED_FREE_IMMEDIATELY