diff options
-rw-r--r-- | enumerator.c | 18 | ||||
-rw-r--r-- | include/ruby/intern.h | 8 |
2 files changed, 16 insertions, 10 deletions
diff --git a/enumerator.c b/enumerator.c index 436541070f..d2d3b29369 100644 --- a/enumerator.c +++ b/enumerator.c @@ -2778,20 +2778,20 @@ arith_seq_exclude_end_p(VALUE self) } int -rb_arithmetic_sequence_extract(VALUE obj, VALUE *begin, VALUE *end, VALUE *step, int *exclude_end) +rb_arithmetic_sequence_extract(VALUE obj, rb_arithmetic_sequence_components_t *component) { if (rb_obj_is_kind_of(obj, rb_cArithSeq)) { - *begin = arith_seq_begin(obj); - *end = arith_seq_end(obj); - *step = arith_seq_step(obj); - *exclude_end = arith_seq_exclude_end_p(obj); + component->begin = arith_seq_begin(obj); + component->end = arith_seq_end(obj); + component->step = arith_seq_step(obj); + component->exclude_end = arith_seq_exclude_end_p(obj); return 1; } else if (rb_obj_is_kind_of(obj, rb_cRange)) { - *begin = RANGE_BEG(obj); - *end = RANGE_END(obj); - *step = INT2FIX(1); - *exclude_end = RTEST(RANGE_EXCL(obj)); + component->begin = RANGE_BEG(obj); + component->end = RANGE_END(obj); + component->step = INT2FIX(1); + component->exclude_end = RTEST(RANGE_EXCL(obj)); return 1; } diff --git a/include/ruby/intern.h b/include/ruby/intern.h index 2a90ab2272..61e930da56 100644 --- a/include/ruby/intern.h +++ b/include/ruby/intern.h @@ -244,7 +244,13 @@ VALUE rb_enumeratorize_with_size(VALUE, VALUE, int, const VALUE *, rb_enumerator return SIZED_ENUMERATOR(obj, argc, argv, size_fn); \ } while (0) #define RETURN_ENUMERATOR(obj, argc, argv) RETURN_SIZED_ENUMERATOR(obj, argc, argv, 0) -int rb_arithmetic_sequence_extract(VALUE, VALUE *, VALUE *, VALUE *, int *); +typedef struct { + VALUE begin; + VALUE end; + VALUE step; + int exclude_end; +} rb_arithmetic_sequence_components_t; +int rb_arithmetic_sequence_extract(VALUE, rb_arithmetic_sequence_components_t *); /* error.c */ VALUE rb_exc_new(VALUE, const char*, long); VALUE rb_exc_new_cstr(VALUE, const char*); |