Skip to content

Commit

Permalink
Merge pull request beeware#546 from Nurdok/feature/reversed
Browse files Browse the repository at this point in the history
Implement 'reversed' for custom __reversed__
  • Loading branch information
freakboy3742 committed May 25, 2017
2 parents 35fafaf + a946f8a commit e6af8ac
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 2 deletions.
5 changes: 4 additions & 1 deletion batavia/builtins/reversed.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
var exceptions = require('../core').exceptions
var types = require('../types')
var callables = require('../core').callables

function reversed(args, kwargs) {
var iterable = args[0]
if (types.isinstance(iterable, [types.List, types.Tuple])) {
if (iterable.__reversed__) {
return callables.call_method(iterable, '__reversed__', [])
} else if (iterable.__len__ && iterable.__getitem__) {
var new_iterable = iterable.slice(0)
new_iterable.reverse()
return new types.List(new_iterable)
Expand Down
12 changes: 11 additions & 1 deletion tests/builtins/test_reversed.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,21 @@

class ReversedTests(TranspileTestCase):

def test_reverse_list(self):
def test_reversed_list(self):
self.assertCodeExecution("""
print(list(reversed([1,2,3])))
""")

def test_reversed_dunder_reversed(self):
self.assertCodeExecution("""
class Foo(object):
def __reversed__(self):
return iter([1, 2, 3])
f = Foo()
print(list(reversed(f)))
""")


class BuiltinReversedFunctionTests(BuiltinFunctionTestCase, TranspileTestCase):
functions = ["reversed"]
Expand Down

0 comments on commit e6af8ac

Please sign in to comment.