summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-02-11 17:46:52 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-02-11 17:46:52 +0000
commit0472db84c5e2b3e4e8f253cb304d5360de2a6a4a (patch)
tree641874edebfc4982c6ffac04db4eb5f8a01ee5fe /parse.y
parent9d968bc2219318ea4f8bd2df877f026c9625a2df (diff)
* range.c (range_include): specialize single character string
case (e.g. (?a ..?z).include(?x)) for performance. [ruby-core:15481] * string.c (rb_str_upto): specialize single character case. * string.c (rb_str_hash): omit coderange scan for performance. * object.c (rb_check_to_integer): check Fixnum first. * object.c (rb_to_integer): ditto. * string.c (rb_str_equal): inline memcmp to avoid unnecessary rb_str_comparable(). * parse.y (rb_intern2): use US-ASCII encoding. * parse.y (rb_intern_str): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15433 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y16
1 files changed, 9 insertions, 7 deletions
diff --git a/parse.y b/parse.y
index 39cd51df9d..8ca7c86270 100644
--- a/parse.y
+++ b/parse.y
@@ -271,7 +271,7 @@ struct parser_params {
#define STR_NEW0() rb_enc_str_new(0,0,rb_usascii_encoding())
#define STR_NEW2(p) rb_enc_str_new((p),strlen(p),parser->enc)
#define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),parser->enc)
-#define STR_ENC(m) ((m)?parser->enc:rb_ascii8bit_encoding())
+#define STR_ENC(m) ((m)?parser->enc:rb_usascii_encoding())
#define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT)
#define TOK_INTERN(mb) rb_intern3(tok(), toklen(), STR_ENC(mb))
@@ -9043,7 +9043,7 @@ rb_intern3(const char *name, long len, rb_encoding *enc)
ID
rb_intern2(const char *name, long len)
{
- return rb_intern3(name, len, rb_ascii8bit_encoding());
+ return rb_intern3(name, len, rb_usascii_encoding());
}
#undef rb_intern
@@ -9056,14 +9056,16 @@ rb_intern(const char *name)
ID
rb_intern_str(VALUE str)
{
- int idx = 0;
+ rb_encoding *enc;
ID id;
- if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
- idx = rb_enc_get_index(str);
+ if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
+ enc = rb_usascii_encoding();
+ }
+ else {
+ enc = rb_enc_get(str);
}
- id = rb_intern3(RSTRING_PTR(str), RSTRING_LEN(str),
- rb_enc_from_index(idx));
+ id = rb_intern3(RSTRING_PTR(str), RSTRING_LEN(str), enc);
RB_GC_GUARD(str);
return id;
}