22 #ifndef GNASH_ABC_BLOCK_H
23 #define GNASH_ABC_BLOCK_H
42 class ClasstHierarchy;
123 return finalize(block, _classTarget, _static);
134 std::uint32_t _slotID;
135 std::uint32_t _typeIndex;
136 std::uint32_t _classInfoIndex;
158 inline void checkBounds(
size_t i,
const T& container)
160 if (i >= container.size()) {
161 throw std::range_error(
"Attempt to access pool out of range");
271 const std::vector<abc::Class*>&
scripts()
const {
276 checkBounds(i, _uIntegerPool);
277 return _uIntegerPool[
i];
281 checkBounds(i, _stringPool);
282 return _stringPool[
i];
286 checkBounds(i, _integerPool);
287 return _integerPool[
i];
291 checkBounds(i, _doublePool);
292 return _doublePool[
i];
296 checkBounds(i, _methods);
301 checkBounds(i, _multinamePool);
302 return _multinamePool[
i];
306 checkBounds(i, _classes);
311 checkBounds(i, _namespacePool);
312 return _namespacePool[
i];
324 bool read_integer_constants();
325 bool read_unsigned_integer_constants();
326 bool read_double_constants();
327 bool read_string_constants();
328 bool read_namespaces();
329 bool read_namespace_sets();
330 bool read_multinames();
331 bool read_method_infos();
332 bool skip_metadata();
333 bool read_instances();
336 bool read_method_bodies();
338 void check_multiname_name(std::uint32_t
name);
340 void check_multiname_namespace(std::uint32_t ns);
342 void check_multiname_namespaceset(std::uint32_t nsset);
348 std::vector<std::int32_t> _integerPool;
349 std::vector<std::uint32_t> _uIntegerPool;
350 std::vector<double> _doublePool;
351 std::vector<std::string> _stringPool;
352 std::vector<Namespace*> _namespacePool;
353 std::vector<NamespaceSet> _namespaceSetPool;
355 std::vector<MultiName> _multinamePool;
356 std::vector<Class*> _classes;
357 std::vector<Class*> _scripts;
365 std::uint32_t mVersion;
bool finalize_mbody(AbcBlock *block, Method *m)
Definition: AbcBlock.cpp:115
Definition: AbcBlock.h:226
Trait()
Definition: AbcBlock.h:86
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:235
size_t URI
This type should always be used for the index of AbcBlocks' names.
Definition: MultiName.h:42
Definition: AbcBlock.h:228
Definition: AbcBlock.h:218
Definition: AbcBlock.h:252
bool read(SWFStream &in)
Definition: AbcBlock.cpp:1294
NamespaceConstant
Definition: AbcBlock.h:212
The ActionScript bytecode of a single ABC tag in a SWF.
Definition: AbcBlock.h:208
Class describing a static property.
Definition: AbcBlock.h:71
void set_target(Method *m)
Definition: AbcBlock.h:115
Definition: AbcBlock.h:83
Definition: AbcBlock.h:237
Definition: AbcBlock.h:232
Kind
Definition: AbcBlock.h:75
PoolConstant
Definition: AbcBlock.h:244
double doublePoolAt(size_t i) const
Definition: AbcBlock.h:290
std::map< NPIdentifier, NPInvokeFunctionPtr > _methods
Definition: gshell.cpp:402
ActionScript value type.
Definition: as_value.h:94
Definition: AbcBlock.h:81
Method * methodPoolAt(size_t i) const
Definition: AbcBlock.h:295
const std::vector< abc::Class * > & scripts() const
Scripts can contain several classes.
Definition: AbcBlock.h:271
void set_target(abc::Class *cl, bool do_static)
Definition: AbcBlock.h:110
Definition: AbcBlock.h:229
Definition: AbcBlock.h:239
std::vector< Namespace * > NamespaceSet
Definition: AbcBlock.h:256
Definition: AbcBlock.h:249
Definition: GnashKey.h:157
MultiName multinamePoolAt(size_t i) const
Definition: AbcBlock.h:300
Definition: AbcBlock.h:77
Anonymous namespace for callbacks, local functions, event handlers etc.
Definition: dbus_ext.cpp:40
Definition: AbcBlock.h:217
Definition: AbcBlock.h:227
Definition: AbcBlock.h:78
type
Definition: GnashKey.h:329
Represent an ActionScript Namespace.
Definition: Namespace.h:48
Definition: AbcBlock.h:215
Definition: GnashKey.h:149
Definition: AbcBlock.h:240
Definition: GnashKey.h:161
void prepare(Machine *mach)
Definition: AbcBlock.cpp:322
Definition: AbcBlock.h:79
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:241
const std::string & stringPoolAt(size_t i) const
Definition: AbcBlock.h:280
Definition: AbcBlock.h:251
Definition: AbcBlock.h:231
A class to represent AS3 Classes.
Definition: Class.h:75
Definition: AbcBlock.h:80
Definition: AbcBlock.h:220
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:216
tuple v
Definition: test.py:11
Definition: AbcBlock.h:230
abc::Class * locateClass(MultiName &m)
Definition: AbcBlock.cpp:437
Definition: AbcBlock.h:246
Definition: AbcBlock.h:248
Definition: AbcBlock.h:219
The virtual machine for executing ABC (ActionScript Bytecode).
Definition: Machine.h:73
Definition: AbcBlock.h:247
Definition: GnashKey.h:132
Definition: GnashKey.h:155
bool finalize(AbcBlock *block)
Definition: AbcBlock.h:120
std::int32_t integerPoolAt(size_t i) const
Definition: AbcBlock.h:285
Definition: AbcBlock.h:214
Definition: AbcBlock.h:253
An MultiName represents a single ABC multiname.
Definition: MultiName.h:51
Definition: AbcBlock.h:250
Definition: AbcBlock.h:238
Definition: GnashKey.h:159
std::uint32_t uIntegerPoolAt(size_t i) const
Definition: AbcBlock.h:275
void update_global_name(unsigned int multiname_index)
Definition: AbcBlock.cpp:1346
const ObjectURI & _name
Definition: DisplayList.cpp:111
Definition: AbcBlock.h:82
std::size_t key
Definition: string_table.h:83
std::string name
Definition: LocalConnection_as.cpp:149
AbcBlock()
Definition: AbcBlock.cpp:311
SWF stream wrapper class.
Definition: SWFStream.h:58
Definition: AbcBlock.h:225
abc::Class * classPoolAt(size_t i) const
Definition: AbcBlock.h:305
Namespace * namespacePoolAt(size_t i) const
Definition: AbcBlock.h:310
MethodConstant
Definition: AbcBlock.h:223