From 6b4132724aeb5cf25307a04fd7001065526873c9 Mon Sep 17 00:00:00 2001 From: naruse Date: Sun, 15 May 2016 07:17:46 +0000 Subject: * array.c (rb_ary_entry): extract rb_ary_elt to organize if-conditions and check whether is is embdeded at once. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55007 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- array.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'array.c') diff --git a/array.c b/array.c index 8b68320fa0..11fba55029 100644 --- a/array.c +++ b/array.c @@ -1195,10 +1195,17 @@ rb_ary_elt(VALUE ary, long offset) VALUE rb_ary_entry(VALUE ary, long offset) { + long len = RARRAY_LEN(ary); + const VALUE *ptr = RARRAY_CONST_PTR(ary); + if (len == 0) return Qnil; if (offset < 0) { - offset += RARRAY_LEN(ary); + offset += len; + if (offset < 0) return Qnil; + } + else if (len <= offset) { + return Qnil; } - return rb_ary_elt(ary, offset); + return ptr[offset]; } VALUE -- cgit v1.2.3