summaryrefslogtreecommitdiff
path: root/string.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-01-31 03:15:33 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-01-31 03:15:33 +0000
commitf758195486cbe49c647140a9e1c5623eeebbeaac (patch)
tree7d2c78d56467677cf1787452c3e630229c9bf4bb /string.c
parente13bfb15096a9d12e93055fbe6526d15bc54e20c (diff)
* parse.y (yylex): remove EXPR_CMDARG according to the RHG book.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3425 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'string.c')
-rw-r--r--string.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/string.c b/string.c
index 47026d40f3..cc82c7fb57 100644
--- a/string.c
+++ b/string.c
@@ -892,10 +892,6 @@ rb_str_index_m(argc, argv, str)
pos = rb_reg_search(sub, str, pos, 0);
break;
- case T_STRING:
- pos = rb_str_index(str, sub, pos);
- break;
-
case T_FIXNUM:
{
int c = FIX2INT(sub);
@@ -908,9 +904,20 @@ rb_str_index_m(argc, argv, str)
return Qnil;
}
- default:
- rb_raise(rb_eTypeError, "type mismatch: %s given",
- rb_class2name(CLASS_OF(sub)));
+ default: {
+ VALUE tmp;
+
+ tmp = rb_check_string_type(sub);
+ if (NIL_P(tmp)) {
+ rb_raise(rb_eTypeError, "type mismatch: %s given",
+ rb_class2name(CLASS_OF(sub)));
+ }
+ sub = tmp;
+ }
+ /* fall through */
+ case T_STRING:
+ pos = rb_str_index(str, sub, pos);
+ break;
}
if (pos == -1) return Qnil;