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

Reply via email to