summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-04-14 05:19:12 (GMT)
committermrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-04-14 05:19:12 (GMT)
commit8561baf3407ec1ac2a2660143df2355da0be1326 (patch)
treea431a5078fd5460fed9f01ab59b2c96f1b132c87
parent3c547e11298e9b51e1952e47202afe3a6d7bc0d4 (diff)
Improve performance of type conversion using to_r
* object.c: Add to_r in conv_method_tbl. * defs/id.def: add to_r. * benchmark/bm_int_quo.rb: added. * benchmark/bm_time_subsec.rb: added. [Bug #13426] [ruby-core:80665] [Fix GH-1582] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58347 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--benchmark/bm_int_quo.rb1
-rw-r--r--benchmark/bm_time_subsec.rb2
-rw-r--r--defs/id.def1
-rw-r--r--object.c1
4 files changed, 5 insertions, 0 deletions
diff --git a/benchmark/bm_int_quo.rb b/benchmark/bm_int_quo.rb
new file mode 100644
index 0000000..e22a3f8
--- /dev/null
+++ b/benchmark/bm_int_quo.rb
@@ -0,0 +1 @@
+5000000.times { 42.quo(3) }
diff --git a/benchmark/bm_time_subsec.rb b/benchmark/bm_time_subsec.rb
new file mode 100644
index 0000000..505021c
--- /dev/null
+++ b/benchmark/bm_time_subsec.rb
@@ -0,0 +1,2 @@
+t = Time.now
+4000000.times { t.subsec }
diff --git a/defs/id.def b/defs/id.def
index b5815b7..f30b993 100644
--- a/defs/id.def
+++ b/defs/id.def
@@ -38,6 +38,7 @@ firstline, predefined = __LINE__+1, %[\
to_a
to_s
to_i
+ to_r
bt
bt_locations
call
diff --git a/object.c b/object.c
index 88b4c56..92cea14 100644
--- a/object.c
+++ b/object.c
@@ -2619,6 +2619,7 @@ static const struct conv_method_tbl {
M(a),
M(s),
M(i),
+ M(r),
#undef M
};
#define IMPLICIT_CONVERSIONS 7