aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--benchmark/mjit_class.yml11
-rw-r--r--benchmark/mjit_send_cfunc.yml7
-rw-r--r--common.mk2
-rw-r--r--kernel.rb21
-rw-r--r--object.c17
5 files changed, 34 insertions, 24 deletions
diff --git a/benchmark/mjit_class.yml b/benchmark/mjit_class.yml
new file mode 100644
index 0000000000..22f95c2d4d
--- /dev/null
+++ b/benchmark/mjit_class.yml
@@ -0,0 +1,11 @@
+type: lib/benchmark_driver/runner/mjit
+prelude: |
+ def mjit_class(obj)
+ obj.class
+ end
+
+benchmark:
+ - mjit_class(self)
+ - mjit_class(1)
+
+loop_count: 40000000
diff --git a/benchmark/mjit_send_cfunc.yml b/benchmark/mjit_send_cfunc.yml
deleted file mode 100644
index 8caa62ce81..0000000000
--- a/benchmark/mjit_send_cfunc.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-type: lib/benchmark_driver/runner/mjit
-prelude: |
- def mjit_send_cfunc
- self.class
- end
-benchmark: mjit_send_cfunc
-loop_count: 100000000
diff --git a/common.mk b/common.mk
index 6f829c9a4d..8438089272 100644
--- a/common.mk
+++ b/common.mk
@@ -8514,6 +8514,7 @@ mjit_compile.$(OBJEXT): $(top_srcdir)/internal/compilers.h
mjit_compile.$(OBJEXT): $(top_srcdir)/internal/gc.h
mjit_compile.$(OBJEXT): $(top_srcdir)/internal/hash.h
mjit_compile.$(OBJEXT): $(top_srcdir)/internal/imemo.h
+mjit_compile.$(OBJEXT): $(top_srcdir)/internal/object.h
mjit_compile.$(OBJEXT): $(top_srcdir)/internal/serial.h
mjit_compile.$(OBJEXT): $(top_srcdir)/internal/static_assert.h
mjit_compile.$(OBJEXT): $(top_srcdir)/internal/variable.h
@@ -9266,6 +9267,7 @@ object.$(OBJEXT): {$(VPATH)}internal/value_type.h
object.$(OBJEXT): {$(VPATH)}internal/variable.h
object.$(OBJEXT): {$(VPATH)}internal/warning_push.h
object.$(OBJEXT): {$(VPATH)}internal/xmalloc.h
+object.$(OBJEXT): {$(VPATH)}kernel.rb
object.$(OBJEXT): {$(VPATH)}kernel.rbinc
object.$(OBJEXT): {$(VPATH)}missing.h
object.$(OBJEXT): {$(VPATH)}object.c
diff --git a/kernel.rb b/kernel.rb
index e7d955fe45..d00ba3a809 100644
--- a/kernel.rb
+++ b/kernel.rb
@@ -1,6 +1,27 @@
module Kernel
#
# call-seq:
+ # obj.class -> class
+ #
+ # Returns the class of <i>obj</i>. This method must always be called
+ # with an explicit receiver, as #class is also a reserved word in
+ # Ruby.
+ #
+ # 1.class #=> Integer
+ # self.class #=> Object
+ #--
+ # Equivalent to \c Object\#class in Ruby.
+ #
+ # Returns the class of \c obj, skipping singleton classes or module inclusions.
+ #++
+ #
+ def class
+ Primitive.attr! 'inline'
+ Primitive.cexpr! 'rb_obj_class(self)'
+ end
+
+ #
+ # call-seq:
# obj.clone(freeze: nil) -> an_object
#
# Produces a shallow copy of <i>obj</i>---the instance variables of
diff --git a/object.c b/object.c
index dafbcd0531..03cc51a473 100644
--- a/object.c
+++ b/object.c
@@ -291,22 +291,6 @@ rb_class_real(VALUE cl)
return cl;
}
-/**
- * call-seq:
- * obj.class -> class
- *
- * Returns the class of <i>obj</i>. This method must always be called
- * with an explicit receiver, as #class is also a reserved word in
- * Ruby.
- *
- * 1.class #=> Integer
- * self.class #=> Object
- *--
- * Equivalent to \c Object\#class in Ruby.
- *
- * Returns the class of \c obj, skipping singleton classes or module inclusions.
- *++
- */
VALUE
rb_obj_class(VALUE obj)
{
@@ -4606,7 +4590,6 @@ InitVM_Object(void)
rb_define_method(rb_mKernel, "hash", rb_obj_hash, 0); /* in hash.c */
rb_define_method(rb_mKernel, "<=>", rb_obj_cmp, 1);
- rb_define_method(rb_mKernel, "class", rb_obj_class, 0);
rb_define_method(rb_mKernel, "singleton_class", rb_obj_singleton_class, 0);
rb_define_method(rb_mKernel, "dup", rb_obj_dup, 0);
rb_define_method(rb_mKernel, "itself", rb_obj_itself, 0);