Merge remote-tracking branch 'lenaten/8tracks'
[youtube-dl] / youtube_dl / jsinterp.py
index 34e5307faeda30f7f7fb560c8d84027777e17a7b..b4617fbad0fc40323a129ce1218f9f97590c89bb 100644 (file)
@@ -61,7 +61,7 @@ class JSInterpreter(object):
             pass
 
         m = re.match(
-            r'^(?P<var>[a-z]+)\.(?P<member>[^(]+)(?:\(+(?P<args>[^()]*)\))?$',
+            r'^(?P<var>[$a-zA-Z0-9_]+)\.(?P<member>[^(]+)(?:\(+(?P<args>[^()]*)\))?$',
             expr)
         if m:
             variable = m.group('var')
@@ -98,7 +98,8 @@ class JSInterpreter(object):
                 return argvals[0].join(obj)
             if member == 'reverse':
                 assert len(argvals) == 0
-                return obj[::-1]
+                obj.reverse()
+                return obj
             if member == 'slice':
                 assert len(argvals) == 1
                 return obj[argvals[0]:]
@@ -107,7 +108,7 @@ class JSInterpreter(object):
                 index, howMany = argvals
                 res = []
                 for i in range(index, min(index + howMany, len(obj))):
-                    res.append(obj.pop(i))
+                    res.append(obj.pop(index))
                 return res
 
             return obj[member](argvals)
@@ -129,7 +130,7 @@ class JSInterpreter(object):
             return a % b
 
         m = re.match(
-            r'^(?P<func>[.a-zA-Z$]+)\((?P<args>[a-z0-9,]+)\)$', expr)
+            r'^(?P<func>[a-zA-Z$]+)\((?P<args>[a-z0-9,]+)\)$', expr)
         if m:
             fname = m.group('func')
             argvals = tuple([