Author: Andrews Medina <andrewsmed...@gmail.com> Branch: Changeset: r382:b90fd00e0981 Date: 2013-05-17 00:41 -0300 http://bitbucket.org/pypy/lang-js/changeset/b90fd00e0981/
Log: implemented [].lastIndexOf diff --git a/js/builtins/array.py b/js/builtins/array.py --- a/js/builtins/array.py +++ b/js/builtins/array.py @@ -44,6 +44,8 @@ put_native_function(w_ArrayPrototype, u'indexOf', index_of) + put_native_function(w_ArrayPrototype, u'lastIndexOf', last_index_of) + # 15.4.4.7 @w_return @@ -167,6 +169,28 @@ @w_return +def last_index_of(this, args): + obj = this + elem = get_arg(args, 0) + length = this.get(u'length').ToUInt32() + from_index = length + + if len(args) > 1: + findex = get_arg(args, 1).ToInt32() + if findex < 0: + from_index = length + findex + else: + from_index = findex + + from js.jsobj import W_IntNumber + for i in xrange(from_index, -1, -1): + y = obj.get(unicode(i)) + if elem == y: + return W_IntNumber(i) + return W_IntNumber(-1) + + +@w_return def index_of(this, args): obj = this length = this.get(u'length').ToUInt32() diff --git a/test/test_array.py b/test/test_array.py --- a/test/test_array.py +++ b/test/test_array.py @@ -1,6 +1,15 @@ from test.test_interp import assertv, assertp +def test_arrya_last_index_of(capsys): + assertp("var a = [2, 5, 9, 2]; print(a.lastIndexOf(2));", "3", capsys) + assertp("var a = [2, 5, 9, 2]; print(a.lastIndexOf(7));", "-1", capsys) + assertp("var a = [2, 5, 9, 2]; print(a.lastIndexOf(2, 3));", "3", capsys) + assertp("var a = [2, 5, 9, 2]; print(a.lastIndexOf(2, 2));", "0", capsys) + assertp("var a = [2, 5, 9, 2]; print(a.lastIndexOf(2, -2));", "0", capsys) + assertp("var a = [2, 5, 9, 2]; print(a.lastIndexOf(2, -1));", "3", capsys) + + def test_array_index_of(capsys): assertp("var a = [1,2,3]; print(a.indexOf(1));", "0", capsys) assertp("var a = [1,2,3]; print(a.indexOf(3));", "2", capsys) _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit