summaryrefslogtreecommitdiff
path: root/string.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-03-05 05:22:17 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-03-05 05:22:17 +0000
commit39787ea14db33dd4265d7f6271cd2d59ccaeff37 (patch)
tree49743edd8a3dbb4fa4cfea6c472f3398edfe0639 /string.c
parent413db1b036083f76a2b34895af3c8a3204e174f2 (diff)
* numeric.c (fix_to_s): avoid rb_scan_args() when no argument
given. * bignum.c (rb_big_to_s): ditto. * enum.c (enum_first): ditto. * eval_jump.c (rb_f_catch): ditto. * io.c (rb_obj_display): ditto. * class.c (rb_obj_singleton_methods): ditto. * object.c (rb_class_initialize): ditto. * random.c (rb_f_srand): ditto. * range.c (range_step): ditto. * re.c (rb_reg_s_last_match): ditto. * string.c (rb_str_to_i): ditto. * string.c (rb_str_each_line): ditto. * string.c (rb_str_chomp_bang): ditto. * string.c (rb_str_sum): ditto. * string.c (str_modifiable): declare inline. * string.c (str_independent): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15691 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'string.c')
-rw-r--r--string.c32
1 files changed, 21 insertions, 11 deletions
diff --git a/string.c b/string.c
index b07337ca42..7add4f0361 100644
--- a/string.c
+++ b/string.c
@@ -667,7 +667,7 @@ rb_str_init(int argc, VALUE *argv, VALUE str)
{
VALUE orig;
- if (rb_scan_args(argc, argv, "01", &orig) == 1)
+ if (argc > 0 && rb_scan_args(argc, argv, "01", &orig) == 1)
rb_str_replace(str, orig);
return str;
}
@@ -950,7 +950,7 @@ rb_str_format_m(VALUE str, VALUE arg)
return rb_str_format(1, &arg, str);
}
-static void
+static inline void
str_modifiable(VALUE str)
{
if (FL_TEST(str, STR_TMPLOCK)) {
@@ -961,7 +961,7 @@ str_modifiable(VALUE str)
rb_raise(rb_eSecurityError, "Insecure: can't modify string");
}
-static int
+static inline int
str_independent(VALUE str)
{
str_modifiable(str);
@@ -3620,13 +3620,15 @@ rb_str_include(VALUE str, VALUE arg)
static VALUE
rb_str_to_i(int argc, VALUE *argv, VALUE str)
{
- VALUE b;
int base;
- rb_scan_args(argc, argv, "01", &b);
if (argc == 0) base = 10;
- else base = NUM2INT(b);
+ else {
+ VALUE b;
+ rb_scan_args(argc, argv, "01", &b);
+ base = NUM2INT(b);
+ }
if (base < 0) {
rb_raise(rb_eArgError, "invalid radix %d", base);
}
@@ -5028,9 +5030,12 @@ rb_str_each_line(int argc, VALUE *argv, VALUE str)
VALUE line;
int n;
- if (rb_scan_args(argc, argv, "01", &rs) == 0) {
+ if (argc == 0) {
rs = rb_rs;
}
+ else {
+ rb_scan_args(argc, argv, "01", &rs);
+ }
RETURN_ENUMERATOR(str, argc, argv);
if (NIL_P(rs)) {
rb_yield(str);
@@ -5281,7 +5286,7 @@ rb_str_chomp_bang(int argc, VALUE *argv, VALUE str)
if (len == 0) return Qnil;
p = RSTRING_PTR(str);
e = p + len;
- if (rb_scan_args(argc, argv, "01", &rs) == 0) {
+ if (argc == 0) {
rs = rb_rs;
if (rs == rb_default_rs) {
smart_chomp:
@@ -5324,6 +5329,9 @@ rb_str_chomp_bang(int argc, VALUE *argv, VALUE str)
return str;
}
}
+ else {
+ rb_scan_args(argc, argv, "01", &rs);
+ }
if (NIL_P(rs)) return Qnil;
StringValue(rs);
rslen = RSTRING_LEN(rs);
@@ -5812,11 +5820,13 @@ rb_str_sum(int argc, VALUE *argv, VALUE str)
char *ptr, *p, *pend;
long len;
- if (rb_scan_args(argc, argv, "01", &vbits) == 0) {
+ if (argc == 0) {
bits = 16;
}
- else bits = NUM2INT(vbits);
-
+ else {
+ rb_scan_args(argc, argv, "01", &vbits);
+ bits = NUM2INT(vbits);
+ }
ptr = p = RSTRING_PTR(str);
len = RSTRING_LEN(str);
pend = p + len;