From adac7792180d678d7ca47a9aa523efff2b1ed4c3 Mon Sep 17 00:00:00 2001 From: nobu Date: Sun, 3 Sep 2017 02:08:55 +0000 Subject: string.c: enumerator_wantarray * string.c (enumerator_wantarray): show warnings at method functions for proper method names. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59732 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- string.c | 135 ++++++++++++++--------------------------------- test/ruby/test_string.rb | 39 ++++++++++++-- 2 files changed, 75 insertions(+), 99 deletions(-) diff --git a/string.c b/string.c index 518fcb9e0b..b11ffe8244 100644 --- a/string.c +++ b/string.c @@ -7568,6 +7568,22 @@ rb_str_split(VALUE str, const char *sep0) return rb_str_split_m(1, &sep, str); } +static int +enumerator_wantarray(const char *method) +{ + if (rb_block_given_p()) { +#if STRING_ENUMERATORS_WANTARRAY + rb_warn("given block not used"); +#else + rb_warning("passing a block to String#%s is deprecated", method); + return 0; +#endif + } + return 1; +} + +#define WANTARRAY(m) enumerator_wantarray(m) + static const char * chomp_newline(const char *p, const char *e, rb_encoding *enc) { @@ -7602,23 +7618,8 @@ rb_str_enumerate_lines(int argc, VALUE *argv, VALUE str, int wantarray) chomp = (chomp != Qundef && RTEST(chomp)); } - if (rb_block_given_p()) { - if (wantarray) { -#if STRING_ENUMERATORS_WANTARRAY - rb_warn("given block not used"); - ary = rb_ary_new(); -#else - rb_warning("passing a block to String#lines is deprecated"); - wantarray = 0; -#endif - } - } - else { - if (wantarray) - ary = rb_ary_new(); - else - return SIZED_ENUMERATOR(str, argc, argv, 0); - } + if (wantarray) + ary = rb_ary_new(); if (NIL_P(rs)) { if (wantarray) { @@ -7780,6 +7781,7 @@ rb_str_enumerate_lines(int argc, VALUE *argv, VALUE str, int wantarray) static VALUE rb_str_each_line(int argc, VALUE *argv, VALUE str) { + RETURN_SIZED_ENUMERATOR(str, argc, argv, 0); return rb_str_enumerate_lines(argc, argv, str, 0); } @@ -7798,7 +7800,7 @@ rb_str_each_line(int argc, VALUE *argv, VALUE str) static VALUE rb_str_lines(int argc, VALUE *argv, VALUE str) { - return rb_str_enumerate_lines(argc, argv, str, 1); + return rb_str_enumerate_lines(argc, argv, str, WANTARRAY("lines")); } static VALUE @@ -7811,25 +7813,10 @@ static VALUE rb_str_enumerate_bytes(VALUE str, int wantarray) { long i; - VALUE MAYBE_UNUSED(ary); + VALUE ary; - if (rb_block_given_p()) { - if (wantarray) { -#if STRING_ENUMERATORS_WANTARRAY - rb_warn("given block not used"); - ary = rb_ary_new(); -#else - rb_warning("passing a block to String#bytes is deprecated"); - wantarray = 0; -#endif - } - } - else { - if (wantarray) - ary = rb_ary_new2(RSTRING_LEN(str)); - else - return SIZED_ENUMERATOR(str, 0, 0, rb_str_each_byte_size); - } + if (wantarray) + ary = rb_ary_new2(RSTRING_LEN(str)); for (i=0; i