summaryrefslogtreecommitdiff
path: root/encoding.c
diff options
context:
space:
mode:
authorKoichi Sasada <ko1@atdot.net>2020-12-17 01:56:30 +0900
committerKoichi Sasada <ko1@atdot.net>2020-12-17 03:44:23 +0900
commit2a3324fcd2f9681e167b2619563a5c26e1a362fe (patch)
treeba8b8fde222250f8db8303282f98f9308264149b /encoding.c
parentc58142134cccdd31811f12aabf4f9dd3ce6a17f7 (diff)
No sync on ASCII/US_ASCCII/UTF-8
rb_enc_from_index(index) doesn't need locking if index specify ASCII/US_ASCCII/UTF-8. rb_enc_from_index() is called frequently so it has impact. user system total real r_parallel/miniruby 174 0.000209 0.000000 5.559872 ( 1.811501) r_parallel/master_mini 175 0.000238 0.000000 12.664707 ( 3.523641) (repeat x1000 `s.split(/,/)` where s = '0,,' * 1000)
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3916
Diffstat (limited to 'encoding.c')
-rw-r--r--encoding.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/encoding.c b/encoding.c
index 64748ceb27..330be29f4b 100644
--- a/encoding.c
+++ b/encoding.c
@@ -418,9 +418,16 @@ rb_encoding *
rb_enc_from_index(int index)
{
rb_encoding *enc;
- GLOBAL_ENC_TABLE_EVAL(enc_table,
- enc = enc_from_index(enc_table, index));
- return enc;
+
+ switch (index) {
+ case ENCINDEX_ASCII: return global_enc_ascii;
+ case ENCINDEX_UTF_8: return global_enc_utf_8;
+ case ENCINDEX_US_ASCII: return global_enc_us_ascii;
+ default:
+ GLOBAL_ENC_TABLE_EVAL(enc_table,
+ enc = enc_from_index(enc_table, index));
+ return enc;
+ }
}
int