22 #ifndef GNASH_ABC_BLOCK_H
23 #define GNASH_ABC_BLOCK_H
32 #include <boost/scoped_array.hpp>
43 class ClasstHierarchy;
124 return finalize(block, _classTarget, _static);
135 boost::uint32_t _slotID;
136 boost::uint32_t _typeIndex;
137 boost::uint32_t _classInfoIndex;
159 inline void checkBounds(
size_t i,
const T& container)
161 if (i >= container.size()) {
162 throw std::range_error(
"Attempt to access pool out of range");
272 const std::vector<abc::Class*>&
scripts()
const {
277 checkBounds(i, _uIntegerPool);
278 return _uIntegerPool[
i];
282 checkBounds(i, _stringPool);
283 return _stringPool[
i];
287 checkBounds(i, _integerPool);
288 return _integerPool[
i];
292 checkBounds(i, _doublePool);
293 return _doublePool[
i];
297 checkBounds(i, _methods);
302 checkBounds(i, _multinamePool);
303 return _multinamePool[
i];
307 checkBounds(i, _classes);
312 checkBounds(i, _namespacePool);
313 return _namespacePool[
i];
325 bool read_integer_constants();
326 bool read_unsigned_integer_constants();
327 bool read_double_constants();
328 bool read_string_constants();
329 bool read_namespaces();
330 bool read_namespace_sets();
331 bool read_multinames();
332 bool read_method_infos();
333 bool skip_metadata();
334 bool read_instances();
337 bool read_method_bodies();
339 void check_multiname_name(boost::uint32_t
name);
341 void check_multiname_namespace(boost::uint32_t ns);
343 void check_multiname_namespaceset(boost::uint32_t nsset);
349 std::vector<boost::int32_t> _integerPool;
350 std::vector<boost::uint32_t> _uIntegerPool;
351 std::vector<double> _doublePool;
352 std::vector<std::string> _stringPool;
353 std::vector<Namespace*> _namespacePool;
354 std::vector<NamespaceSet> _namespaceSetPool;
356 std::vector<MultiName> _multinamePool;
357 std::vector<Class*> _classes;
358 std::vector<Class*> _scripts;
366 boost::uint32_t mVersion;
bool finalize_mbody(AbcBlock *block, Method *m)
Definition: AbcBlock.cpp:115
Definition: AbcBlock.h:227
Trait()
Definition: AbcBlock.h:87
std::ostream & operator<<(std::ostream &o, const Trait::Kind k)
Output stream operator for abc::Trait::Kind.
Definition: AbcBlock.cpp:289
InstanceConstant
Definition: AbcBlock.h:236
size_t URI
This type should always be used for the index of AbcBlocks' names.
Definition: MultiName.h:42
Definition: AbcBlock.h:229
Definition: AbcBlock.h:219
Definition: AbcBlock.h:253
bool read(SWFStream &in)
Definition: AbcBlock.cpp:1294
NamespaceConstant
Definition: AbcBlock.h:213
The ActionScript bytecode of a single ABC tag in a SWF.
Definition: AbcBlock.h:209
Class describing a static property.
Definition: AbcBlock.h:72
void set_target(Method *m)
Definition: AbcBlock.h:116
Definition: AbcBlock.h:84
Definition: AbcBlock.h:238
Definition: AbcBlock.h:233
Kind
Definition: AbcBlock.h:76
PoolConstant
Definition: AbcBlock.h:245
double doublePoolAt(size_t i) const
Definition: AbcBlock.h:291
std::map< NPIdentifier, NPInvokeFunctionPtr > _methods
Definition: gshell.cpp:402
ActionScript value type.
Definition: as_value.h:95
Definition: AbcBlock.h:82
Method * methodPoolAt(size_t i) const
Definition: AbcBlock.h:296
const std::vector< abc::Class * > & scripts() const
Scripts can contain several classes.
Definition: AbcBlock.h:272
void set_target(abc::Class *cl, bool do_static)
Definition: AbcBlock.h:111
Definition: AbcBlock.h:230
Definition: AbcBlock.h:240
std::vector< Namespace * > NamespaceSet
Definition: AbcBlock.h:257
Definition: AbcBlock.h:250
Definition: GnashKey.h:157
MultiName multinamePoolAt(size_t i) const
Definition: AbcBlock.h:301
Definition: AbcBlock.h:78
Definition: AbcBlock.h:218
Definition: AbcBlock.h:228
Definition: AbcBlock.h:79
type
Definition: GnashKey.h:329
Represent an ActionScript Namespace.
Definition: Namespace.h:48
Definition: AbcBlock.h:216
Definition: GnashKey.h:149
Definition: AbcBlock.h:241
Definition: GnashKey.h:161
void prepare(Machine *mach)
Definition: AbcBlock.cpp:322
Definition: AbcBlock.h:80
Register all of the ActionScript classes, with their dependencies.
Definition: ClassHierarchy.h:40
A general use string table.
Definition: string_table.h:41
Definition: GnashKey.h:160
Definition: AbcBlock.h:242
const std::string & stringPoolAt(size_t i) const
Definition: AbcBlock.h:281
Definition: AbcBlock.h:252
Definition: AbcBlock.h:232
A class to represent AS3 Classes.
Definition: Class.h:75
Definition: AbcBlock.h:81
Definition: AbcBlock.h:221
boost::uint32_t uIntegerPoolAt(size_t i) const
Definition: AbcBlock.h:276
bool finalize(AbcBlock *block, abc::Class *cl, bool do_static)
Definition: AbcBlock.cpp:42
bool read(SWFStream *in, AbcBlock *block)
Read an AS3 'trait'.
Definition: AbcBlock.cpp:183
Definition: AbcBlock.h:217
tuple v
Definition: test.py:11
Definition: AbcBlock.h:231
abc::Class * locateClass(MultiName &m)
Definition: AbcBlock.cpp:437
Definition: AbcBlock.h:247
Definition: AbcBlock.h:249
Definition: AbcBlock.h:220
The virtual machine for executing ABC (ActionScript Bytecode).
Definition: Machine.h:73
Definition: AbcBlock.h:248
Definition: GnashKey.h:132
Definition: GnashKey.h:155
bool finalize(AbcBlock *block)
Definition: AbcBlock.h:121
Definition: AbcBlock.h:215
Definition: AbcBlock.h:254
An MultiName represents a single ABC multiname.
Definition: MultiName.h:51
Definition: AbcBlock.h:251
Definition: AbcBlock.h:239
Definition: GnashKey.h:159
void update_global_name(unsigned int multiname_index)
Definition: AbcBlock.cpp:1346
boost::int32_t integerPoolAt(size_t i) const
Definition: AbcBlock.h:286
const ObjectURI & _name
Definition: DisplayList.cpp:109
Definition: AbcBlock.h:83
std::size_t key
Definition: string_table.h:83
std::string name
Definition: LocalConnection_as.cpp:151
AbcBlock()
Definition: AbcBlock.cpp:311
SWF stream wrapper class.
Definition: SWFStream.h:58
Definition: AbcBlock.h:226
abc::Class * classPoolAt(size_t i) const
Definition: AbcBlock.h:306
Namespace * namespacePoolAt(size_t i) const
Definition: AbcBlock.h:311
MethodConstant
Definition: AbcBlock.h:224