Author: Andrews Medina <[email protected]>
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
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit