|
@@ -863,13 +863,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor):
|
|
|
coder = io.BytesIO(m.code)
|
|
|
while True:
|
|
|
opcode = struct.unpack('!B', coder.read(1))[0]
|
|
|
- if opcode == 208: # getlocal_0
|
|
|
- stack.append(registers[0])
|
|
|
- elif opcode == 209: # getlocal_1
|
|
|
- stack.append(registers[1])
|
|
|
- elif opcode == 210: # getlocal_2
|
|
|
- stack.append(registers[2])
|
|
|
- elif opcode == 36: # pushbyte
|
|
|
+ if opcode == 36: # pushbyte
|
|
|
v = struct.unpack('!B', coder.read(1))[0]
|
|
|
stack.append(v)
|
|
|
elif opcode == 44: # pushstring
|
|
@@ -895,12 +889,41 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor):
|
|
|
else:
|
|
|
res = obj.split(args[0])
|
|
|
stack.append(res)
|
|
|
+ elif mname == u'slice':
|
|
|
+ assert len(args) == 1
|
|
|
+ assert isinstance(args[0], int)
|
|
|
+ assert isinstance(obj, list)
|
|
|
+ res = obj[args[0]:]
|
|
|
+ stack.append(res)
|
|
|
+ elif mname == u'join':
|
|
|
+ assert len(args) == 1
|
|
|
+ assert isinstance(args[0], compat_str)
|
|
|
+ assert isinstance(obj, list)
|
|
|
+ res = args[0].join(obj)
|
|
|
+ stack.append(res)
|
|
|
elif mname in method_pyfunctions:
|
|
|
stack.append(method_pyfunctions[mname](args))
|
|
|
else:
|
|
|
raise NotImplementedError(
|
|
|
u'Unsupported property %r on %r'
|
|
|
% (mname, obj))
|
|
|
+ elif opcode == 72: # returnvalue
|
|
|
+ res = stack.pop()
|
|
|
+ return res
|
|
|
+ elif opcode == 79: # callpropvoid
|
|
|
+ index = u30(coder)
|
|
|
+ mname = multinames[index]
|
|
|
+ arg_count = u30(coder)
|
|
|
+ args = list(reversed(
|
|
|
+ [stack.pop() for _ in range(arg_count)]))
|
|
|
+ obj = stack.pop()
|
|
|
+ if mname == u'reverse':
|
|
|
+ assert isinstance(obj, list)
|
|
|
+ obj.reverse()
|
|
|
+ else:
|
|
|
+ raise NotImplementedError(
|
|
|
+ u'Unsupported (void) property %r on %r'
|
|
|
+ % (mname, obj))
|
|
|
elif opcode == 93: # findpropstrict
|
|
|
index = u30(coder)
|
|
|
mname = multinames[index]
|
|
@@ -943,6 +966,14 @@ class YoutubeIE(YoutubeBaseInfoExtractor, SubtitlesInfoExtractor):
|
|
|
value1 = stack.pop()
|
|
|
res = value1 % value2
|
|
|
stack.append(res)
|
|
|
+ elif opcode == 208: # getlocal_0
|
|
|
+ stack.append(registers[0])
|
|
|
+ elif opcode == 209: # getlocal_1
|
|
|
+ stack.append(registers[1])
|
|
|
+ elif opcode == 210: # getlocal_2
|
|
|
+ stack.append(registers[2])
|
|
|
+ elif opcode == 211: # getlocal_3
|
|
|
+ stack.append(registers[3])
|
|
|
elif opcode == 214: # setlocal_2
|
|
|
registers[2] = stack.pop()
|
|
|
elif opcode == 215: # setlocal_3
|