Browse Source

[swfinterp] Intepret more multinames

master
Philipp Hagemeister 10 years ago
parent
commit
4baafa229d
2 changed files with 19 additions and 0 deletions
  1. 10
      test/swftests/DictCall.as
  2. 9
      youtube_dl/swfinterp.py

10
test/swftests/DictCall.as

@ -0,0 +1,10 @@
// input: [{"x": 1, "y": 2}]
// output: 3
package {
public class DictCall {
public static function main(d:Object):int{
return d.x + d.y;
}
}
}

9
youtube_dl/swfinterp.py

@ -213,6 +213,10 @@ class SWFInterpreter(object):
u30() # namespace_idx
name_idx = u30()
self.multinames.append(self.constant_strings[name_idx])
elif kind == 0x09:
name_idx = u30()
u30()
self.multinames.append(self.constant_strings[name_idx])
else:
self.multinames.append(_Multiname(kind))
for _c2 in range(MULTINAME_SIZES[kind]):
@ -557,6 +561,11 @@ class SWFInterpreter(object):
obj = stack.pop()
assert isinstance(obj, list)
stack.append(len(obj))
elif isinstance(pname, compat_str): # Member access
obj = stack.pop()
assert isinstance(obj, (dict, _ScopeDict)), \
'Accessing member on %r' % obj
stack.append(obj[pname])
else: # Assume attribute access
idx = stack.pop()
assert isinstance(idx, int)

Loading…
Cancel
Save