|
|
@ -504,6 +504,9 @@ class SWFInterpreter(object): |
|
|
|
raise NotImplementedError( |
|
|
|
'Unsupported property %r on %r' |
|
|
|
% (mname, obj)) |
|
|
|
elif opcode == 71: # returnvoid |
|
|
|
res = None |
|
|
|
return res |
|
|
|
elif opcode == 72: # returnvalue |
|
|
|
res = stack.pop() |
|
|
|
return res |
|
|
@ -527,6 +530,17 @@ class SWFInterpreter(object): |
|
|
|
args = list(reversed( |
|
|
|
[stack.pop() for _ in range(arg_count)])) |
|
|
|
obj = stack.pop() |
|
|
|
if isinstance(obj, _AVMClass_Object): |
|
|
|
func = self.extract_function(obj.avm_class, mname) |
|
|
|
res = func(args) |
|
|
|
assert res is None |
|
|
|
continue |
|
|
|
if isinstance(obj, _ScopeDict): |
|
|
|
assert mname in obj.avm_class.method_names |
|
|
|
func = self.extract_function(obj.avm_class, mname) |
|
|
|
res = func(args) |
|
|
|
assert res is None |
|
|
|
continue |
|
|
|
if mname == 'reverse': |
|
|
|
assert isinstance(obj, list) |
|
|
|
obj.reverse() |
|
|
@ -603,7 +617,8 @@ class SWFInterpreter(object): |
|
|
|
obj = stack.pop() |
|
|
|
assert isinstance(obj, (dict, _ScopeDict)), \ |
|
|
|
'Accessing member %r on %r' % (pname, obj) |
|
|
|
stack.append(obj[pname]) |
|
|
|
res = obj.get(pname, None) |
|
|
|
stack.append(res) |
|
|
|
else: # Assume attribute access |
|
|
|
idx = stack.pop() |
|
|
|
assert isinstance(idx, int) |
|
|
|