~ubuntu-branches/ubuntu/karmic/gnash/karmic

« back to all changes in this revision

Viewing changes to libcore/swf.h

  • Committer: Bazaar Package Importer
  • Author(s): Alexander Sack
  • Date: 2008-10-13 14:29:49 UTC
  • mfrom: (1.1.9 upstream)
  • Revision ID: james.westby@ubuntu.com-20081013142949-f6qdvnu4mn05ltdc
Tags: 0.8.4~~bzr9980-0ubuntu1
* new upstream release 0.8.4 (LP: #240325)
* ship new lib usr/lib/gnash/libmozsdk.so.* in mozilla-plugin-gnash
  - update debian/mozilla-plugin-gnash.install
* ship new lib usr/lib/gnash/libgnashnet.so.* in gnash-common
  - update debian/gnash-common.install
* add basic debian/build_head script to build latest CVS head packages.
  - add debian/build_head
* new sound architecture requires build depend on libsdl1.2-dev
  - update debian/control
* head build script now has been completely migrated to bzr (upstream +
  ubuntu)
  - update debian/build_head
* disable kde gui until klash/qt4 has been fixed; keep kde packages as empty
  packages for now.
  - update debian/rules
  - debian/klash.install
  - debian/klash.links
  - debian/klash.manpages
  - debian/konqueror-plugin-gnash.install
* drop libkonq5-dev build dependency accordingly
  - update debian/control
* don't install headers manually anymore. gnash doesnt provide a -dev
  package after all
  - update debian/rules
* update libs installed in gnash-common; libgnashserver-*.so is not available
  anymore (removed); in turn we add the new libgnashcore-*.so
  - update debian/gnash-common.install
* use -Os for optimization and properly pass CXXFLAGS=$(CFLAGS) to configure
  - update debian/rules
* touch firefox .autoreg in postinst of mozilla plugin
  - update debian/mozilla-plugin-gnash.postinst
* link gnash in ubufox plugins directory for the plugin alternative switcher
  - add debian/mozilla-plugin-gnash.links
* suggest ubufox accordingly
  - update debian/control
* add new required build-depends on libgif-dev
  - update debian/control
* add Xb-Npp-Description and Xb-Npp-File as new plugin database meta data
  - update debian/control

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// 
 
2
//   Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
 
3
// 
 
4
// This program is free software; you can redistribute it and/or modify
 
5
// it under the terms of the GNU General Public License as published by
 
6
// the Free Software Foundation; either version 3 of the License, or
 
7
// (at your option) any later version.
 
8
// 
 
9
// This program is distributed in the hope that it will be useful,
 
10
// but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
12
// GNU General Public License for more details.
 
13
// 
 
14
// You should have received a copy of the GNU General Public License
 
15
// along with this program; if not, write to the Free Software
 
16
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
17
 
 
18
#ifndef GNASH_SWF_H
 
19
#define GNASH_SWF_H
 
20
 
 
21
namespace gnash {
 
22
 
 
23
/// SWF format parsing classes
 
24
namespace SWF { // gnash::SWF
 
25
 
 
26
/// SWF tag types. Symbolc names copied from Ming
 
27
typedef enum
 
28
{
 
29
    /// end of sprite or movie definition
 
30
    END                   =  0,
 
31
    SHOWFRAME             =  1,
 
32
    DEFINESHAPE           =  2,
 
33
    FREECHARACTER         =  3,
 
34
    PLACEOBJECT           =  4,
 
35
    REMOVEOBJECT          =  5,
 
36
    DEFINEBITS            =  6,
 
37
    DEFINEBUTTON          =  7,
 
38
    JPEGTABLES            =  8,
 
39
    SETBACKGROUNDCOLOR    =  9,
 
40
    DEFINEFONT            = 10,
 
41
    DEFINETEXT            = 11,
 
42
    DOACTION              = 12,
 
43
    DEFINEFONTINFO        = 13,
 
44
    DEFINESOUND           = 14,
 
45
 
 
46
    /// See http://sswf.sourceforge.net/SWFalexref.html#tag_startsound
 
47
    STARTSOUND            = 15,
 
48
 
 
49
    STOPSOUND             = 16, // SWF 9
 
50
    DEFINEBUTTONSOUND     = 17,
 
51
 
 
52
    /// SWF2
 
53
    /// See http://sswf.sourceforge.net/SWFalexref.html#tag_soundstreamhead
 
54
    SOUNDSTREAMHEAD       = 18,
 
55
 
 
56
    SOUNDSTREAMBLOCK      = 19,
 
57
    DEFINELOSSLESS        = 20,
 
58
    DEFINEBITSJPEG2       = 21,
 
59
    DEFINESHAPE2          = 22,
 
60
    DEFINEBUTTONCXFORM    = 23,
 
61
    PROTECT               = 24,
 
62
    PATHSAREPOSTSCRIPT    = 25,
 
63
    PLACEOBJECT2          = 26,
 
64
    REMOVEOBJECT2         = 28,
 
65
    SYNCFRAME             = 29,
 
66
    FREEALL               = 31,
 
67
    DEFINESHAPE3          = 32,
 
68
    DEFINETEXT2           = 33,
 
69
    DEFINEBUTTON2         = 34,
 
70
    DEFINEBITSJPEG3       = 35,
 
71
    DEFINELOSSLESS2       = 36,
 
72
    DEFINEEDITTEXT        = 37,
 
73
    DEFINEVIDEO           = 38,
 
74
 
 
75
    /// Definition of a Sprite/MovieClip
 
76
    DEFINESPRITE          = 39,
 
77
 
 
78
    NAMECHARACTER         = 40,
 
79
    SERIALNUMBER          = 41,
 
80
    DEFINETEXTFORMAT      = 42,
 
81
    FRAMELABEL            = 43,
 
82
    DEFINEBEHAVIOR        = 44, // SWF 9
 
83
 
 
84
    /// SWF3
 
85
    /// See http://sswf.sourceforge.net/SWFalexref.html#tag_soundstreamhead2
 
86
    SOUNDSTREAMHEAD2      = 45,
 
87
 
 
88
    DEFINEMORPHSHAPE      = 46,
 
89
    FRAMETAG              = 47,
 
90
    DEFINEFONT2           = 48,
 
91
    GENCOMMAND            = 49,
 
92
    DEFINECOMMANDOBJ      = 50,
 
93
    CHARACTERSET          = 51,
 
94
    FONTREF               = 52,
 
95
    DEFINEFUNCTION        = 53, // SWF 9
 
96
    PLACEFUNCTION         = 54, // SWF 9
 
97
    GENTAGOBJECT          = 55, // SWF 9
 
98
    EXPORTASSETS          = 56,
 
99
    IMPORTASSETS          = 57,
 
100
 
 
101
    /// See http://sswf.sourceforge.net/SWFalexref.html#tag_protectdebug
 
102
    ENABLEDEBUGGER        = 58,
 
103
 
 
104
    /// For actions specified with initclip directive
 
105
    INITACTION            = 59,
 
106
 
 
107
    DEFINEVIDEOSTREAM     = 60,
 
108
    VIDEOFRAME            = 61,
 
109
 
 
110
    /// DefineFontInfo2 (swf6)
 
111
    DEFINEFONTINFO2       = 62,
 
112
 
 
113
    DEBUGID               = 63, // SWF 9
 
114
 
 
115
    /// See http://flasm.sourceforge.net/#protect
 
116
    /// See http://sswf.sourceforge.net/SWFalexref.html#tag_protectdebug
 
117
    ENABLEDEBUGGER2       = 64,
 
118
 
 
119
    /// SWF_version  >= 7 
 
120
    /// See http://sswf.sourceforge.net/SWFalexref.html#tag_scriptlimits
 
121
    SCRIPTLIMITS          = 65, 
 
122
 
 
123
    SETTABINDEX           = 66, // SWF 9
 
124
    DEFINESHAPE4_         = 67, // SWF 9
 
125
    DEFINEMORPHSHAPE2_    = 68, // SWF 9
 
126
 
 
127
    /// http://sswf.sourceforge.net/SWFalexref.html#tag_fileattributes
 
128
    FILEATTRIBUTES        = 69,
 
129
 
 
130
    /// http://sswf.sourceforge.net/SWFalexref.html#tag_placeobject3
 
131
    PLACEOBJECT3          = 70,
 
132
 
 
133
    /// http://sswf.sourceforge.net/SWFalexref.html#tag_import2
 
134
    IMPORTASSETS2         = 71,
 
135
 
 
136
    DOABC                 = 72,
 
137
 
 
138
    /// http://sswf.sourceforge.net/SWFalexref.html#tag_definefontalignzones
 
139
    DEFINEALIGNZONES      = 73,
 
140
 
 
141
    /// http://sswf.sourceforge.net/SWFalexref.html#tag_csmtextsettings
 
142
    CSMTEXTSETTINGS       = 74,
 
143
 
 
144
    /// http://sswf.sourceforge.net/SWFalexref.html#tag_definefont3
 
145
    DEFINEFONT3           = 75,
 
146
 
 
147
    /// SWF9
 
148
    /// http://sswf.sourceforge.net/SWFalexref.html#tag_symbolclass
 
149
    SYMBOLCLASS           = 76,
 
150
 
 
151
    /// http://sswf.sourceforge.net/SWFalexref.html#tag_metadata
 
152
    METADATA              = 77,
 
153
 
 
154
    /// http://sswf.sourceforge.net/SWFalexref.html#tag_definescalinggrid
 
155
    DEFINESCALINGGRID     = 78,
 
156
 
 
157
    /// SWF9
 
158
    /// http://sswf.sourceforge.net/SWFalexref.html#tag_doabcdefine
 
159
    DOABCDEFINE           = 82,
 
160
 
 
161
    /// http://sswf.sourceforge.net/SWFalexref.html#tag_definemorphshape2
 
162
    DEFINESHAPE4          = 83,
 
163
 
 
164
    /// http://sswf.sourceforge.net/SWFalexref.html#tag_definemorphshape2
 
165
    DEFINEMORPHSHAPE2     = 84,
 
166
 
 
167
    DEFINESCENEANDFRAMELABELDATA = 86,
 
168
 
 
169
    DEFINEFONTNAME        = 88, 
 
170
 
 
171
    REFLEX                = 777,
 
172
 
 
173
    DEFINEBITSPTR         = 1023
 
174
} tag_type;
 
175
 
 
176
/// SWF action ids. Symbolic names copied from Ming.
 
177
//
 
178
/// For semantic of each action see:
 
179
/// http://sswf.sourceforge.net/SWFalexref.html
 
180
///
 
181
typedef enum
 
182
{
 
183
    ACTION_END                     = 0x00,
 
184
    ACTION_NEXTFRAME               = 0x04,
 
185
    ACTION_PREVFRAME               = 0x05,
 
186
    ACTION_PLAY                    = 0x06,
 
187
    ACTION_STOP                    = 0x07,
 
188
    ACTION_TOGGLEQUALITY           = 0x08,
 
189
    ACTION_STOPSOUNDS              = 0x09,
 
190
    ACTION_GOTOFRAME               = 0x81, /* >= 0x80 means record has args */
 
191
    ACTION_GETURL                  = 0x83,
 
192
    ACTION_WAITFORFRAME            = 0x8A,
 
193
    ACTION_SETTARGET               = 0x8B,
 
194
    ACTION_GOTOLABEL               = 0x8C,
 
195
    ACTION_ADD                     = 0x0A,
 
196
    ACTION_SUBTRACT                = 0x0B,
 
197
    ACTION_MULTIPLY                = 0x0C,
 
198
    ACTION_DIVIDE                  = 0x0D,
 
199
 
 
200
    /// Numeric equality (SWF4, replaced by ACTION_NEWEQUALS starting at SWF5)
 
201
    ACTION_EQUAL                   = 0x0E,
 
202
 
 
203
    ACTION_LESSTHAN                = 0x0F,
 
204
    ACTION_LOGICALAND              = 0x10,
 
205
    ACTION_LOGICALOR               = 0x11,
 
206
    ACTION_LOGICALNOT              = 0x12,
 
207
    ACTION_STRINGEQ                = 0x13,
 
208
    ACTION_STRINGLENGTH            = 0x14,
 
209
    ACTION_SUBSTRING               = 0x15,
 
210
    ACTION_POP                     = 0x17,
 
211
    ACTION_INT                     = 0x18,
 
212
    ACTION_GETVARIABLE             = 0x1C,
 
213
    ACTION_SETVARIABLE             = 0x1D,
 
214
    ACTION_SETTARGETEXPRESSION     = 0x20,
 
215
    ACTION_STRINGCONCAT            = 0x21,
 
216
    ACTION_GETPROPERTY             = 0x22,
 
217
    ACTION_SETPROPERTY             = 0x23,
 
218
    ACTION_DUPLICATECLIP           = 0x24,
 
219
    ACTION_REMOVECLIP              = 0x25,
 
220
    ACTION_TRACE                   = 0x26,
 
221
    ACTION_STARTDRAGMOVIE          = 0x27,
 
222
    ACTION_STOPDRAGMOVIE           = 0x28,
 
223
    ACTION_STRINGCOMPARE           = 0x29,
 
224
 
 
225
    /// SWF7
 
226
    ///
 
227
    /// http://sswf.sourceforge.net/SWFalexref.html#action_throw
 
228
    ///
 
229
    ACTION_THROW                   = 0x2A,
 
230
 
 
231
    /// SWF7
 
232
    ///
 
233
    /// The Cast Object action makes sure that the object
 
234
    /// o1 is an instance of the class s2. If it is the case,
 
235
    /// then o1 is pushed back onto the stack. Otherwise Null is
 
236
    /// pushed back onto the stack. The comparison is identical
 
237
    /// to the one applied by the Instance Of  action.
 
238
    ///
 
239
    /// See:
 
240
    /// http://sswf.sourceforge.net/SWFalexref.html#action_cast_object
 
241
    ///
 
242
    ACTION_CASTOP                  = 0x2B,
 
243
 
 
244
    /// SWF7
 
245
    ///
 
246
    /// This action declares an object as a sub-class of
 
247
    /// one or more interfaces. The number of interfaces has to
 
248
    /// be indicated by i2. An interface is referenced by its
 
249
    /// name (which happens to be the same as the constructor
 
250
    /// function name.)
 
251
    ///
 
252
    /// See:
 
253
    /// http://sswf.sourceforge.net/SWFalexref.html#action_implements
 
254
    ///
 
255
    ACTION_IMPLEMENTSOP            = 0x2C,
 
256
 
 
257
    /// SWF7
 
258
    ///
 
259
    /// This action executes an fscommand.
 
260
    /// Stack In:
 
261
    ///  i1            -- number of arguments (int)
 
262
    ///  s2            -- command string
 
263
    ///  [s3..sn]      -- arguments, as many as specified in i1
 
264
    /// Stack Out:
 
265
    ///  not known
 
266
    ///
 
267
    /// See:
 
268
    /// http://sswf.sourceforge.net/SWFalexref.html#action_fscommand2
 
269
    ///
 
270
    ACTION_FSCOMMAND2              = 0x2D,
 
271
 
 
272
    ACTION_RANDOM                  = 0x30,
 
273
    ACTION_MBLENGTH                = 0x31,
 
274
    ACTION_ORD                     = 0x32,
 
275
    ACTION_CHR                     = 0x33,
 
276
    ACTION_GETTIMER                = 0x34,
 
277
    ACTION_MBSUBSTRING             = 0x35,
 
278
    ACTION_MBORD                   = 0x36,
 
279
    ACTION_MBCHR                   = 0x37,
 
280
    ACTION_WAITFORFRAMEEXPRESSION  = 0x8D,
 
281
    ACTION_PUSHDATA                = 0x96,
 
282
    ACTION_BRANCHALWAYS            = 0x99,
 
283
    ACTION_GETURL2                 = 0x9A,
 
284
    ACTION_BRANCHIFTRUE            = 0x9D,
 
285
    ACTION_CALLFRAME               = 0x9E,
 
286
    ACTION_GOTOEXPRESSION          = 0x9F,
 
287
 
 
288
    /// http://sswf.sourceforge.net/SWFalexref.html#action_delete
 
289
    ACTION_DELETE                  = 0x3A,
 
290
 
 
291
    /// http://sswf.sourceforge.net/SWFalexref.html#action_delete_all
 
292
    /// The information in SWFalexref is pretty confusing, not sure it is correct...
 
293
    ACTION_DELETE2                 = 0x3B,
 
294
 
 
295
    ACTION_VAREQUALS               = 0x3C, // DEFINELOCAL actually
 
296
    ACTION_CALLFUNCTION            = 0x3D,
 
297
    ACTION_RETURN                  = 0x3E,
 
298
    ACTION_MODULO                  = 0x3F,
 
299
 
 
300
    /// SWF5
 
301
    ///
 
302
    /// Pop the number of arguments. Pop each argument.
 
303
    /// Create an object of class s1. Call the
 
304
    /// constructor function (which has the same name as
 
305
    /// the object class: s1). The result of the
 
306
    /// constructor is discarded. Push the created object
 
307
    /// on the stack. The object should then be saved in
 
308
    /// a variable or object method.
 
309
    ///
 
310
    /// http://sswf.sourceforge.net/SWFalexref.html#action_new
 
311
    ///
 
312
    ACTION_NEW                     = 0x40,
 
313
 
 
314
    ACTION_VAR                     = 0x41,
 
315
    ACTION_INITARRAY               = 0x42,
 
316
 
 
317
 
 
318
    /// SWF5
 
319
    ///
 
320
    /// Pops the number of members in the object. Pop
 
321
    /// one value and one name per member and set the
 
322
    /// corresponding member in the object. The resulting
 
323
    /// object is pushed on the stack. It can later be sent
 
324
    /// to a function or set in a variable. Note: the member
 
325
    /// names are converted to strings; they certainly should
 
326
    /// be strings thought anything is supported.
 
327
    ///
 
328
    /// Also known as 'ACTION_DECLAREOBJECT'.
 
329
    ///
 
330
    /// http://sswf.sourceforge.net/SWFalexref.html#action_declare_object
 
331
    ///
 
332
    ACTION_INITOBJECT              = 0x43,
 
333
 
 
334
    ACTION_TYPEOF                  = 0x44,
 
335
 
 
336
    /// SWF5
 
337
    ///
 
338
    /// Pop a value from the stack. If it is a valid movieclip push
 
339
    /// it's target back on the stack (example: _level0.sprite1.sprite2).
 
340
    ///
 
341
    /// http://sswf.sourceforge.net/SWFalexref.html#action_get_target
 
342
    ///
 
343
    ACTION_TARGETPATH              = 0x45,
 
344
 
 
345
    /// SWF5
 
346
    ///
 
347
    /// http://sswf.sourceforge.net/SWFalexref.html#action_enumerate
 
348
    ///
 
349
    ACTION_ENUMERATE               = 0x46,
 
350
 
 
351
    /// SWF5
 
352
    ///
 
353
    /// http://sswf.sourceforge.net/SWFalexref.html#action_add_typed
 
354
    ///
 
355
    ACTION_NEWADD                  = 0x47,
 
356
 
 
357
    ACTION_NEWLESSTHAN             = 0x48,
 
358
 
 
359
    /// ECMA-262 "Abstract Equality Comparison"
 
360
    //
 
361
    /// See section 11.9.3 of the ECMA 262 spec
 
362
    ///
 
363
    ACTION_NEWEQUALS               = 0x49,
 
364
 
 
365
    /// SWF5
 
366
    ///
 
367
    /// http://sswf.sourceforge.net/SWFalexref.html#action_number
 
368
    ///
 
369
    ACTION_TONUMBER                = 0x4A,
 
370
 
 
371
    /// SWF5
 
372
    ///
 
373
    /// http://sswf.sourceforge.net/SWFalexref.html#action_string
 
374
    ///
 
375
    ACTION_TOSTRING                = 0x4B,
 
376
 
 
377
    /// SWF5
 
378
    ///
 
379
    /// http://sswf.sourceforge.net/SWFalexref.html#action_duplicate
 
380
    ///
 
381
    ACTION_DUP                     = 0x4C,
 
382
 
 
383
    /// SWF5
 
384
    ///
 
385
    /// http://sswf.sourceforge.net/SWFalexref.html#action_swap
 
386
    ///
 
387
    ACTION_SWAP                    = 0x4D,
 
388
 
 
389
    /// SWF5
 
390
    ///
 
391
    /// http://sswf.sourceforge.net/SWFalexref.html#action_get_member
 
392
    ///
 
393
    ACTION_GETMEMBER               = 0x4E,
 
394
 
 
395
    /// SWF5
 
396
    ///
 
397
    /// http://sswf.sourceforge.net/SWFalexref.html#action_set_member
 
398
    ///
 
399
    ACTION_SETMEMBER               = 0x4F,
 
400
 
 
401
    /// SWF5
 
402
    ///
 
403
    /// http://sswf.sourceforge.net/SWFalexref.html#action_increment
 
404
    ///
 
405
    ACTION_INCREMENT               = 0x50,
 
406
 
 
407
    /// SWF5
 
408
    ///
 
409
    /// http://sswf.sourceforge.net/SWFalexref.html#action_decrement
 
410
    ///
 
411
    ACTION_DECREMENT               = 0x51,
 
412
 
 
413
    /// SWF5
 
414
    ///
 
415
    /// Pops the name of a method (can be the empty string),
 
416
    /// pop an object, pop the number of arguments, pop each
 
417
    /// argument, call the method (function) of the object,
 
418
    /// push the returned value on the stack.
 
419
    ///
 
420
    /// http://sswf.sourceforge.net/SWFalexref.html#action_call_method
 
421
    ///
 
422
    ACTION_CALLMETHOD              = 0x52,
 
423
 
 
424
    /// SWF5
 
425
    ///
 
426
    /// Pops the name of a method (can be the empty string),
 
427
    /// pop an object (created with the Declare Object,)
 
428
    /// pop the number of arguments, pop each argument,
 
429
    /// create a new object, then call the specified method
 
430
    /// (function) as the constructor function of the object,
 
431
    /// push the returned value on the stack. This allows
 
432
    /// for overloaded constructors as in C++.
 
433
    ///
 
434
    /// http://sswf.sourceforge.net/SWFalexref.html#action_new_method
 
435
    ///
 
436
    ACTION_NEWMETHOD               = 0x53, 
 
437
 
 
438
    /// SWF6
 
439
    ///
 
440
    /// Pops the name of a constructor (s1 - ie. "Color")
 
441
    /// then the name of an object (s2). Checks whether the
 
442
    /// named object is part of the class defined by the
 
443
    /// constructor. If so, then true is push on the stack,
 
444
    /// otherwise false. Since SWF version 7, it is possible
 
445
    /// to cast an object to another using the Cast Object
 
446
    /// action. This action returns a copy of the object or
 
447
    /// Null, which in many cases can be much more practical.
 
448
    ///
 
449
    /// http://sswf.sourceforge.net/SWFalexref.html#action_instance_of
 
450
    ///
 
451
    ACTION_INSTANCEOF              = 0x54,
 
452
 
 
453
    /// SWF6
 
454
    ///
 
455
    /// Pops an object from the stack, push a null, then
 
456
    /// push the name of each member on the stack.
 
457
    ///
 
458
    /// http://sswf.sourceforge.net/SWFalexref.html#action_enumerate_object
 
459
    ///
 
460
    ACTION_ENUM2                   = 0x55,
 
461
 
 
462
    ACTION_BITWISEAND              = 0x60,
 
463
    ACTION_BITWISEOR               = 0x61,
 
464
    ACTION_BITWISEXOR              = 0x62,
 
465
    ACTION_SHIFTLEFT               = 0x63,
 
466
    ACTION_SHIFTRIGHT              = 0x64,
 
467
    ACTION_SHIFTRIGHT2             = 0x65,
 
468
    ACTION_STRICTEQ                = 0x66,
 
469
 
 
470
    /// SWF6
 
471
    ///
 
472
    /// Similar to Swap + Less Than. It checks whether the
 
473
    /// second parameter is greater than the first and return
 
474
    /// the boolean result on the stack.
 
475
    ///
 
476
    /// See:
 
477
    /// http://sswf.sourceforge.net/SWFalexref.html#action_greater_than_typed
 
478
    ///
 
479
    ACTION_GREATER                 = 0x67,
 
480
 
 
481
    /// SWF6
 
482
    ///
 
483
    /// Similar to Swap + String Less Than. It checks whether
 
484
    /// the second string is greater than the first and
 
485
    /// return the boolean result on the stack.
 
486
    ///
 
487
    /// See:
 
488
    /// http://sswf.sourceforge.net/SWFalexref.html#action_string_greater_than
 
489
    ///
 
490
    ACTION_STRINGGREATER           = 0x68,
 
491
 
 
492
    ///
 
493
    /// SWF7
 
494
    ///
 
495
    /// The Extends action will be used to define a new object
 
496
    /// which extends another object. The declaration in
 
497
    /// ActionScript is:
 
498
    ///
 
499
    /// class A extends B;
 
500
    ///
 
501
    /// In an SWF action script, you don't exactly declare
 
502
    /// objects, you actually instantiate them and define their
 
503
    /// functions. This action creates a new object named s2
 
504
    /// which is an extension of the object s1.
 
505
    ///
 
506
    /// Use this action whenever you need to inherit an object
 
507
    /// without calling its constructor.
 
508
    ///
 
509
    /// See:
 
510
    /// http://sswf.sourceforge.net/SWFalexref.html#action_extends
 
511
    ///
 
512
    ACTION_EXTENDS                 = 0x69,
 
513
 
 
514
    /// See:
 
515
    /// http://sswf.sourceforge.net/SWFalexref.html#action_declare_dictionary
 
516
    ACTION_CONSTANTPOOL            = 0x88,
 
517
 
 
518
 
 
519
    /// SWF7
 
520
    ///
 
521
    /// See:
 
522
    /// http://sswf.sourceforge.net/SWFalexref.html#action_declare_function2
 
523
    ///
 
524
    ACTION_DEFINEFUNCTION2         = 0x8E,
 
525
 
 
526
    /// SWF7
 
527
    ///
 
528
    /// http://sswf.sourceforge.net/SWFalexref.html#action_try
 
529
    ///
 
530
    ACTION_TRY                     = 0x8F,
 
531
 
 
532
    ACTION_WITH                    = 0x94,
 
533
    ACTION_DEFINEFUNCTION          = 0x9B,
 
534
 
 
535
    ACTION_SETREGISTER             = 0x87
 
536
 
 
537
} action_type;
 
538
 
 
539
typedef enum
 
540
{
 
541
    /// AS3 Actions go below here.
 
542
 
 
543
    /// Do: Enter the debugger if one has been invoked.
 
544
    ABC_ACTION_BKPT                = 0x01,
 
545
 
 
546
    /// Do: Nothing.
 
547
    ABC_ACTION_NOP                 = 0x02,
 
548
 
 
549
    /// Stack In:
 
550
    ///  obj -- an object
 
551
    /// Stack Out:
 
552
    ///  .
 
553
    /// Do: Throw obj as an exception
 
554
    /// Equivalent: ACTIONTHROW
 
555
    ABC_ACTION_THROW               = 0X03,
 
556
 
 
557
    /// Stream:
 
558
    ///  name_id -- V32 index to multiname 'name'
 
559
    /// Stack In:
 
560
    ///  obj -- an object
 
561
    ///  [ns [n]] -- Namespace stuff.
 
562
    /// Stack Out:
 
563
    ///  super -- if obj.name is a method, the super of that method.
 
564
    ///        -- if obj.name is write-only data, throw ReferenceError.
 
565
    ///        -- if obj.name is readable, the return of the getter of super.
 
566
    ABC_ACTION_GETSUPER            = 0X04,
 
567
 
 
568
    /// Stream: UV32 index to multiname 'name'
 
569
    /// Stack In:
 
570
    ///  obj -- an object
 
571
    ///  val -- an object
 
572
    ///  [ns [n]] -- Namespace stuff.
 
573
    /// Stack Out:
 
574
    ///  .
 
575
    /// Do: Make val the super of obj.name ; throw ReferenceError if obj.name is
 
576
    ///  not writable.
 
577
    ABC_ACTION_SETSUPER            = 0X05,
 
578
 
 
579
    /// Dynamically eXtend Name Space?
 
580
    /// Stream: UV32 index to string pool 'nsname'
 
581
    /// Do: Create a new public namespace with name nsname, enter the namespace.
 
582
    ABC_ACTION_DXNS                = 0X06,
 
583
 
 
584
    /// Stack In:
 
585
    ///  nsname -- a string object
 
586
    /// Stack Out:
 
587
    ///  .
 
588
    /// Do: Create a new public namespace with name nsname, but don't enter it.
 
589
    ABC_ACTION_DXNSLATE            = 0X07,
 
590
 
 
591
    /// Stream: UV32 frame pointer offset 'offset'
 
592
    /// Frame: 
 
593
    ///  Kill at offset
 
594
    /// Equivalent: ACTION_DELETE
 
595
    ABC_ACTION_KILL                = 0X08,
 
596
 
 
597
    /// Do: Unknown purpose, Tamarin does nothing.
 
598
    ABC_ACTION_LABEL               = 0X09,
 
599
 
 
600
    ABC_ACTION_0x0A                = 0X0A,
 
601
    ABC_ACTION_0X0B                = 0X0B,
 
602
 
 
603
    /// Stream: S24 jump offset 'jump'
 
604
    /// Stack In:
 
605
    ///  a -- an object
 
606
    ///  b -- an object
 
607
    /// Stack Out:
 
608
    ///  .
 
609
    /// Do: If !(a < b) move by jump in stream, as ABC_ACTION_JUMP does.
 
610
    ABC_ACTION_IFNLT               = 0X0C,
 
611
 
 
612
    /// Stream: S24 jump offset 'jump'
 
613
    /// Stack In:
 
614
    ///  a -- an object
 
615
    ///  b -- an object
 
616
    /// Stack Out:
 
617
    ///  .
 
618
    /// Do: If !(a <= b) move by jump in stream, as ABC_ACTION_JUMP does.
 
619
    ABC_ACTION_IFNLE               = 0X0D,
 
620
 
 
621
    /// Stream: S24 jump offset 'jump'
 
622
    /// Stack In:
 
623
    ///  a -- an object
 
624
    ///  b -- an object
 
625
    /// Stack Out:
 
626
    ///  .
 
627
    /// Do: If !(a > b) move by jump in stream, as ABC_ACTION_JUMP does.
 
628
    ABC_ACTION_IFNGT               = 0X0E,
 
629
 
 
630
    /// Stream: S24 jump offset 'jump'
 
631
    /// Stack In:
 
632
    ///  a -- an object
 
633
    ///  b -- an object
 
634
    /// Stack Out:
 
635
    ///  .
 
636
    /// Do: If !(a >= b) move by jump in stream, as ABC_ACTION_JUMP does.
 
637
    ABC_ACTION_IFNGE               = 0X0F,
 
638
 
 
639
    /// Stream: S24 jump offset 'jump'
 
640
    /// Do: If jump is negative, check for interrupts. Move by jump in stream.
 
641
    /// Equivalent: ACTION_BRANCHALWAYS
 
642
    ABC_ACTION_JUMP                = 0X10,
 
643
 
 
644
    /// Stream: S24 jump offset 'jump'
 
645
    /// Stack In:
 
646
    ///  a -- an object
 
647
    /// Stack Out:
 
648
    ///  .
 
649
    /// Do: If a is 'true', move by jump in stream, as ABC_ACTION_JUMP does.
 
650
    /// Equivalent: ACTION_BRANCHIFTRUE
 
651
    ABC_ACTION_IFTRUE              = 0X11,
 
652
 
 
653
    /// Stream: S24 jump offset 'jump'
 
654
    /// Stack In:
 
655
    ///  a -- an object
 
656
    /// Stack Out:
 
657
    ///  .
 
658
    /// Do: If a is 'false', move by jump in stream, as ABC_ACTION_JUMP does.
 
659
    ABC_ACTION_IFFALSE             = 0X12,
 
660
 
 
661
    /// Stream: S24 jump offset 'jump'
 
662
    /// Stack In:
 
663
    ///  a -- an object
 
664
    ///  b -- an object
 
665
    /// Stack Out:
 
666
    ///  .
 
667
    /// Do: If a == b (weakly), move by jump in stream, as ABC_ACTION_JUMP does.
 
668
    ABC_ACTION_IFEQ                = 0x13,
 
669
 
 
670
    /// Stream: S24 jump offset 'jump'
 
671
    /// Stack In:
 
672
    ///  a -- an object
 
673
    ///  b -- an object
 
674
    /// Stack Out:
 
675
    ///  .
 
676
    /// Do: If a != b (weakly), move by jump in stream, as ABC_ACTION_JUMP does.
 
677
    ABC_ACTION_IFNE                = 0X14,
 
678
 
 
679
    /// Stream: S24 jump offset 'jump'
 
680
    /// Stack In:
 
681
    ///  a -- an object
 
682
    ///  b -- an object
 
683
    /// Stack Out:
 
684
    ///  .
 
685
    /// Do: If a < b move by jump in stream, as ABC_ACTION_JUMP does.
 
686
    ABC_ACTION_IFLT                = 0X15,
 
687
    
 
688
    /// Stream: S24 jump offset 'jump'
 
689
    /// Stack In:
 
690
    ///  a -- an object
 
691
    ///  b -- an object
 
692
    /// Stack Out:
 
693
    ///  .
 
694
    /// Do: If a <= b move by jump in stream, as ABC_ACTION_JUMP does.
 
695
    ABC_ACTION_IFLE                 = 0x16,
 
696
 
 
697
    /// Stream: S24 jump offset 'jump'
 
698
    /// Stack In:
 
699
    ///  a -- an object
 
700
    ///  b -- an object
 
701
    /// Stack Out:
 
702
    ///  .
 
703
    /// Do: If a > b move by jump in stream, as ABC_ACTION_JUMP does.
 
704
    ABC_ACTION_IFGT                 = 0x17,
 
705
 
 
706
    /// Stream: S24 jump offset 'jump'
 
707
    /// Stack In:
 
708
    ///  a -- an object
 
709
    ///  b -- an object
 
710
    /// Stack Out:
 
711
    ///  .
 
712
    /// Do: If a >= b move by jump in stream, as ABC_ACTION_JUMP does.
 
713
    ABC_ACTION_IFGE                 = 0x18,
 
714
 
 
715
    /// Stream: S24 jump offset 'jump'
 
716
    /// Stack In:
 
717
    ///  a -- an object
 
718
    ///  b -- an object
 
719
    /// Stack Out:
 
720
    ///  .
 
721
    /// Do: If a == b (strictly), move by jump in stream, as ABC_ACTION_JUMP
 
722
    ABC_ACTION_IFSTRICTEQ           = 0x19,
 
723
 
 
724
    /// Stream: S24 jump offset 'jump'
 
725
    /// Stack In:
 
726
    ///  a -- an object
 
727
    ///  b -- an object
 
728
    /// Stack Out:
 
729
    ///  .
 
730
    /// Do: If a != b (strongly), move by jump in stream, as ABC_ACTION_JUMP
 
731
    ABC_ACTION_IFSTRICTNE           = 0x1A,
 
732
 
 
733
    /// Stream: 3 bytes | V32 count as 'case_count - 1' | case_count of S24
 
734
    ///  as 'cases'
 
735
    /// Stack In:
 
736
    ///  index -- an integer object
 
737
    /// Stack Out:
 
738
    ///  .
 
739
    /// Do: If index >= case_count, reset stream to position on op entry.
 
740
    ///  Otherwise, move by cases[index] - 1 from stream position on op entry.
 
741
    ABC_ACTION_LOOKUPSWITCH         = 0x1B,
 
742
 
 
743
    /// Stack In:
 
744
    ///  scope -- a scope
 
745
    /// Stack Out:
 
746
    ///  .
 
747
    /// Do: Enter scope with previous scope as its base, unless it already had
 
748
    ///  a base, in which case leave that alone.
 
749
    ABC_ACTION_PUSHWITH             = 0x1C,
 
750
 
 
751
    /// Do: exit current scope. Clear the base if the depth is now 
 
752
    ///  shallower than the base's depth.
 
753
    ABC_ACTION_POPSCOPE             = 0x1D,
 
754
 
 
755
    /// Stack In:
 
756
    ///  obj -- an object
 
757
    ///  index -- an integer object
 
758
    /// Stack Out:
 
759
    ///  name -- the key name at index in obj (not next after index).
 
760
    /// Do: If obj is a namespace index 1 is the uri of the namespace, 
 
761
    ///  index 2 is the prefix of the namespace, and any other value is a
 
762
    ///  null string object. If obj is an immutable object, like a number,
 
763
    ///  operate on its prototype instead. If there is no such index,
 
764
    ///  name is null.
 
765
    ABC_ACTION_NEXTNAME             = 0x1E,
 
766
 
 
767
    /// Stack In:
 
768
    ///  obj -- an object
 
769
    ///  index -- an integer object
 
770
    /// Stack Out:
 
771
    ///  next_index -- next index after index in obj, or 0 if none.
 
772
    /// Do: If there is a key/val pair after index, make next_index as it.
 
773
    ///  Otherwise, make next_index 0.
 
774
    ABC_ACTION_HASNEXT              = 0x1F,
 
775
 
 
776
    /// Stack Out:
 
777
    ///  n -- a Null object.
 
778
    ABC_ACTION_PUSHNULL             = 0x20,
 
779
 
 
780
    ///  n -- an Undefined object.
 
781
    ABC_ACTION_PUSHUNDEFINED        = 0x21,
 
782
 
 
783
    ABC_ACTION_0x22                 = 0x22,
 
784
 
 
785
    /// Stack In:
 
786
    ///  obj -- an object (namespaces okay)
 
787
    ///  index -- an integer object
 
788
    /// Stack Out:
 
789
    ///  value -- the value of the key value pair in obj at index.
 
790
    ABC_ACTION_NEXTVALUE            = 0x23,
 
791
 
 
792
    /// Stream: S8 as 'byte'
 
793
    /// Stack Out:
 
794
    ///  byte -- as a raw byte
 
795
    ABC_ACTION_PUSHBYTE             = 0x24,
 
796
 
 
797
    /// Stream: V32 as 'value'
 
798
    /// Stack Out:
 
799
    ///  value -- as a raw integer
 
800
    ABC_ACTION_PUSHSHORT            = 0x25,
 
801
 
 
802
    /// Stack Out:
 
803
    ///  true -- the True object
 
804
    ABC_ACTION_PUSHTRUE             = 0x26,
 
805
 
 
806
    /// Stack Out:
 
807
    ///  false -- the False object
 
808
    ABC_ACTION_PUSHFALSE            = 0x27,
 
809
 
 
810
    /// Stack Out:
 
811
    ///  NaN -- the NaN object
 
812
    ABC_ACTION_PUSHNAN              = 0x28,
 
813
 
 
814
    /// Stack In:
 
815
    ///  a -- anything
 
816
    /// Stack Out:
 
817
    ///  .
 
818
    ABC_ACTION_POP                  = 0x29,
 
819
 
 
820
    /// Stack In:
 
821
    ///  a -- anything
 
822
    /// Stack Out:
 
823
    ///  a
 
824
    ///  a
 
825
    ABC_ACTION_DUP                  = 0x2A,
 
826
 
 
827
    /// Stack In:
 
828
    ///  a -- anything
 
829
    ///  b -- anything
 
830
    /// Stack Out:
 
831
    ///  b
 
832
    ///  a
 
833
    ABC_ACTION_SWAP                 = 0x2B,
 
834
 
 
835
    /// Stream: V32 string pool index 'index'
 
836
    /// Stack Out:
 
837
    ///  value -- String object from string_pool[index]
 
838
    ABC_ACTION_PUSHSTRING           = 0x2C,
 
839
 
 
840
    /// Stream: V32 int pool index 'index'
 
841
    /// Stack Out:
 
842
    ///  value -- Integer object from integer_pool[index]
 
843
    ABC_ACTION_PUSHINT              = 0x2D,
 
844
 
 
845
    /// Stream: V32 uint pool index 'index'
 
846
    /// Stack Out:
 
847
    ///  value -- Unsigned Integer object from unsigned_integer_pool[index]
 
848
    ABC_ACTION_PUSHUINT             = 0x2E,
 
849
 
 
850
    /// Stream: V32 double pool index 'index'
 
851
    /// Stack Out:
 
852
    ///  value -- Double object from double_pool[index]
 
853
    ABC_ACTION_PUSHDOUBLE           = 0x2F,
 
854
 
 
855
    /// Stack In:
 
856
    ///  scope -- a scope
 
857
    /// Stack Out:
 
858
    ///  .
 
859
    /// Do: Enter scope without altering base.
 
860
    ABC_ACTION_PUSHSCOPE            = 0x30,
 
861
 
 
862
    /// Stream: V32 namespace pool index 'index'
 
863
    /// Stack Out:
 
864
    ///  ns -- Namespace object from namespace_pool[index]
 
865
    ABC_ACTION_PUSHNAMESPACE        = 0x31,
 
866
 
 
867
    /// Stream: V32 frame location 'objloc' | V32 frame location 'indexloc'
 
868
    /// Stack Out:
 
869
    ///  truth -- True if frame[objloc] has key/val pair after frame[indexloc],
 
870
    ///   following delagates (__proto__) objects if needed. False, otherwise.
 
871
    /// Frame:
 
872
    ///  Change at objloc to object which possessed next value.
 
873
    ///  Change at indexloc to index (as object) of the next value.
 
874
    ABC_ACTION_HASNEXT2             = 0x32,
 
875
 
 
876
    ABC_ACTION_0x33                 = 0x33,
 
877
    ABC_ACTION_0x34                 = 0x34,
 
878
    ABC_ACTION_0x35                 = 0x35,
 
879
    ABC_ACTION_0x36                 = 0x36,
 
880
    ABC_ACTION_0x37                 = 0x37,
 
881
    ABC_ACTION_0x38                 = 0x38,
 
882
    ABC_ACTION_0x39                 = 0x39,
 
883
    ABC_ACTION_0x3A                 = 0x3A,
 
884
    ABC_ACTION_0x3B                 = 0x3B,
 
885
    ABC_ACTION_0x3C                 = 0x3C,
 
886
    ABC_ACTION_0x3D                 = 0x3D,
 
887
    ABC_ACTION_0x3E                 = 0x3E,
 
888
    ABC_ACTION_0x3F                 = 0x3F,
 
889
 
 
890
    /// Stream: V32 'index'
 
891
    /// Stack Out:
 
892
    ///  func -- the function object
 
893
    /// Do: Information about function is in the pool at index. Construct the
 
894
    ///  function from this information, current scope, and base of the scope.
 
895
    ABC_ACTION_NEWFUNCTION          = 0x40,
 
896
 
 
897
    /// Stream: V32 'arg_count'
 
898
    /// Stack In:
 
899
    ///  func -- the function to be called
 
900
    ///  obj -- the object to which the function belongs
 
901
    ///  arg1 ... argN -- the arg_count arguments to pass
 
902
    /// Stack Out:
 
903
    ///  value -- the value returned by obj->func(arg1, ...., argN)
 
904
    ABC_ACTION_CALL                = 0x41,
 
905
 
 
906
    /// Stream: V32 'arg_count'
 
907
    /// Stack In:
 
908
    ///  obj -- the object to be constructed
 
909
    ///  arg1 ... argN -- the arg_count arguments to pass
 
910
    /// Stack Out:
 
911
    ///  value -- obj after it has been constructed as obj(arg1, ..., argN)
 
912
    ABC_ACTION_CONSTRUCT           = 0x42,
 
913
 
 
914
    /// Stream: V32 'method_id + 1' | V32 'arg_count'
 
915
    /// Stack In:
 
916
    ///  obj -- the object to be called
 
917
    ///  arg1 ... argN -- the arg_count arguments to pass
 
918
    /// Stack Out:
 
919
    ///  value -- the value returned by obj::'method_id'(arg1, ..., argN)
 
920
    ABC_ACTION_CALLMETHOD          = 0x43,
 
921
 
 
922
    /// Stream: V32 'method_id' | V32 'arg_count'
 
923
    /// Stack In:
 
924
    ///  obj -- the object to act as a receiver for the static call
 
925
    ///  arg1 ... argN -- the arg_count arguments to pass
 
926
    /// Stack Out:
 
927
    ///  value -- the value returned by obj->ABC::'method_id'(arg1, ..., argN)
 
928
    ABC_ACTION_CALLSTATIC          = 0x44,
 
929
 
 
930
    /// Stream: V32 'name_offset' | V32 'arg_count'
 
931
    /// Stack In:
 
932
    ///  obj -- the object whose super is to be called
 
933
    ///  [ns [n]] -- Namespace stuff
 
934
    ///  arg1 ... argN -- the arg_count arguments to pass
 
935
    /// Stack Out:
 
936
    ///  value -- the value returned by obj::(resolve)'name_offset'::super(arg1,
 
937
    ///   ..., argN)
 
938
    ABC_ACTION_CALLSUPER           = 0x45,
 
939
 
 
940
    /// Stream: V32 'name_offset' | V32 'arg_count'
 
941
    /// Stack In:
 
942
    ///  obj -- The object whose property is to be accessed.
 
943
    ///  [ns [n]] -- Namespace stuff
 
944
    ///  arg1 ... argN -- the arg_count arguments to pass
 
945
    /// Stack Out:
 
946
    ///  value -- the value from obj::(resolve)'name_offset'(arg1, ..., argN)
 
947
    /// NB: Calls getter/setter if they exist.
 
948
    ABC_ACTION_CALLPROPERTY        = 0x46,
 
949
 
 
950
    /// Do: Return an Undefined object up the callstack.
 
951
    ABC_ACTION_RETURNVOID           = 0x47,
 
952
 
 
953
    /// Stack In:
 
954
    ///  value -- value to be returned
 
955
    /// Stack Out:
 
956
    ///  .
 
957
    /// Do: Return value up the callstack.
 
958
    ABC_ACTION_RETURNVALUE          = 0x48,
 
959
 
 
960
    /// Stream: V32 'arg_count'
 
961
    /// Stack In:
 
962
    ///  obj -- the object whose super's constructor should be invoked
 
963
    ///  arg1 ... argN -- the arg_count arguments
 
964
    /// Stack Out:
 
965
    ///  value -- obj after obj::super(arg1, ..., argN) has been invoked
 
966
    ABC_ACTION_CONSTRUCTSUPER      = 0x49,
 
967
 
 
968
    /// Stream: V32 'name_offset' | V32 'arg_count'
 
969
    /// Stack In:
 
970
    ///  obj -- the object whose property should be constructed
 
971
    ///  [ns [n]] -- Namespace stuff
 
972
    ///  arg1 ... argN -- the arg_count arguments to pass
 
973
    /// Stack Out:
 
974
    ///  value -- the newly constructed prop from obj::(resolve)
 
975
    ///   'name_offset'(arg1, ..., argN)
 
976
    ABC_ACTION_CONSTRUCTPROP       = 0x4A,
 
977
 
 
978
    /// Do: Nothing, this is an intermediate code op, should not appear in ABC.
 
979
    ABC_ACTION_CALLSUPERID          = 0x4B,
 
980
 
 
981
    /// Stream: V32 'name_offset' | V32 'arg_count'
 
982
    /// Stack In:
 
983
    ///  obj -- The object whose property is to be accessed.
 
984
    ///  [ns [n]] -- Namespace stuff
 
985
    ///  arg1 ... argN -- the arg_count arguments to pass
 
986
    /// Stack Out:
 
987
    ///  value -- the value from by obj::(resolve)'name_offset'(arg1, ..., argN)
 
988
    /// NB: It seems like this does _not_ call getter/setter if they exist,
 
989
    ///  but is otherwise identical to ABC_ACTION_CALLPROPERTY
 
990
    ABC_ACTION_CALLPROPLEX         = 0x4C,
 
991
 
 
992
    /// Do: Nothing, this is an intermediate code op, should not appear in ABC.
 
993
    ABC_ACTION_CALLINTERFACE        = 0x4D,
 
994
 
 
995
    /// See: 0x45 (ABC_ACTION_CALLSUPER), but
 
996
    /// Stack Out:
 
997
    ///  .
 
998
    ABC_ACTION_CALLSUPERVOID       = 0x4E,
 
999
 
 
1000
    /// See: 0x46 (ABC_ACTION_CALLPROPERTY), but
 
1001
    /// Stack Out:
 
1002
    ///  .
 
1003
    ABC_ACTION_CALLPROPVOID        = 0x4F,
 
1004
 
 
1005
    ABC_ACTION_0x50                 = 0x50,
 
1006
    ABC_ACTION_0x51                 = 0x51,
 
1007
    ABC_ACTION_0x52                 = 0x52,
 
1008
    ABC_ACTION_0x53                 = 0x53,
 
1009
    ABC_ACTION_0x54                 = 0x54,
 
1010
 
 
1011
    /// Stream: V32 'arg_count'
 
1012
    /// Stack In:
 
1013
    ///  prop_name_1 -- a string
 
1014
    ///  prop_value_1 -- a value object
 
1015
    ///  .
 
1016
    ///  . (arg_count name/value pairs in all)
 
1017
    ///  .
 
1018
    ///  prop_name_n -- a string
 
1019
    ///  prop_value_n -- a value object
 
1020
    /// Stack Out:
 
1021
    ///  obj -- A new object which contains all of the given properties.
 
1022
    /// NB: This builds an object from its properties, it's not a constructor.
 
1023
    ABC_ACTION_NEWOBJECT            = 0x55,
 
1024
 
 
1025
    /// Stream: V32 'array_size'
 
1026
    /// Stack In:
 
1027
    ///  value_1 -- a value
 
1028
    ///  .
 
1029
    ///  . (array_size of these)
 
1030
    ///  .
 
1031
    ///  value_n -- a value
 
1032
    /// Stack Out:
 
1033
    ///  array -- an array { value_1, value_2, ..., value_n }
 
1034
    ABC_ACTION_NEWARRAY             = 0x56,
 
1035
 
 
1036
    /// Stack Out:
 
1037
    ///  vtable -- A new virtual table, which has the previous one as a parent.
 
1038
    ABC_ACTION_NEWACTIVATION        = 0x57,
 
1039
 
 
1040
    /// Stream: V32 'class_id'
 
1041
    /// Stack In:
 
1042
    ///  obj -- An object to be turned into a class
 
1043
    /// Stack Out:
 
1044
    ///  class -- The newly made class, made from obj and the information at
 
1045
    ///   cinits_pool[class_id]
 
1046
    /// NB: This depends on scope and scope base (to determine base class)
 
1047
    ABC_ACTION_NEWCLASS             = 0x58,
 
1048
 
 
1049
    /// Stream: V32 'name_id'
 
1050
    /// Stack In:
 
1051
    ///  value -- Whose descendants to get
 
1052
    ///  [ns [n]] -- Namespace stuff
 
1053
    /// Stack Out:
 
1054
    ///  ?
 
1055
    /// NB: This op seems to always throw a TypeError in Tamarin, though I
 
1056
    /// assume that it ought to do something to yield a list of
 
1057
    /// descendants of a class.
 
1058
    ABC_ACTION_GETDESCENDANTS       = 0x59,
 
1059
 
 
1060
    /// Stream: V32 'catch_id'
 
1061
    /// Stack Out:
 
1062
    ///  vtable -- vtable suitable to catch an exception of type in catch_id.
 
1063
    /// NB: Need more information on how exceptions are set up.
 
1064
    ABC_ACTION_NEWCATCH             = 0x5A,
 
1065
 
 
1066
    ABC_ACTION_0x5B                 = 0x5B,
 
1067
    ABC_ACTION_0x5C                 = 0x5C,
 
1068
 
 
1069
    /// Stream: V32 'name_id'
 
1070
    /// Stack In:
 
1071
    ///  [ns [n]] -- Namespace stuff
 
1072
    /// Stack Out:
 
1073
    ///  owner -- object which owns property given by looking up the name_id,
 
1074
    ///   or throw a ReferenceError if none exists.
 
1075
    ABC_ACTION_FINDPROPSTRICT       = 0x5D,
 
1076
 
 
1077
    /// Stream: V32 'name_id'
 
1078
    /// Stack In:
 
1079
    ///  [ns [n]] -- Namespace stuff
 
1080
    /// Stack Out:
 
1081
    ///  owner -- object which owns property given by looking up the name_id,
 
1082
    ///   or an Undefined object if none exists.
 
1083
    ABC_ACTION_FINDPROPERTY         = 0x5E,
 
1084
 
 
1085
    /// Stream: V32 'name_id' (no ns expansion)
 
1086
    /// Stack Out:
 
1087
    ///  def -- The definition of the name at name_id.
 
1088
    ABC_ACTION_FINDDEF              = 0x5F,
 
1089
 
 
1090
    /// Stream: V32 'name_id' (no ns expansion)
 
1091
    /// Stack Out:
 
1092
    ///  property -- The result of 0x5D (ABC_ACTION_FINDPROPSTRICT)
 
1093
    ///   + 0x66 (ABC_ACTION_GETPROPERTY)
 
1094
    ABC_ACTION_GETLEX               = 0x60,
 
1095
 
 
1096
    /// Stream: V32 'name_id'
 
1097
    /// Stack In:
 
1098
    ///  obj -- The object whose property is to be set
 
1099
    ///  [ns [n]] -- Namespace stuff
 
1100
    ///  [key] -- Key name for property. Will not have both Namespace and key.
 
1101
    ///  value -- The value to be used
 
1102
    /// Stack Out:
 
1103
    ///  .
 
1104
    /// Do: Set obj::(resolve)'name_id' to value, or set obj::key to value.
 
1105
    /// NB: I'm not yet clear which should be used when. (Chad)
 
1106
    ABC_ACTION_SETPROPERTY          = 0x61,
 
1107
 
 
1108
    /// Stream: V32 'frame_index'
 
1109
    /// Frame: value at frame_index is needed
 
1110
    /// Stack Out:
 
1111
    ///  value
 
1112
    ABC_ACTION_GETLOCAL             = 0x62,
 
1113
 
 
1114
    /// Stream: V32 'frame_index'
 
1115
    /// Frame: obj at frame_index is set to value
 
1116
    /// Stack In:
 
1117
    ///  value
 
1118
    /// Stack Out:
 
1119
    ///  .
 
1120
    ABC_ACTION_SETLOCAL             = 0x63,
 
1121
 
 
1122
    /// Stack Out:
 
1123
    ///  global -- The global scope object
 
1124
    ABC_ACTION_GETGLOBALSCOPE       = 0x64,
 
1125
 
 
1126
    /// Stream: S8 'depth'
 
1127
    /// Stack Out:
 
1128
    ///  scope -- The scope object at depth
 
1129
    ABC_ACTION_GETSCOPEOBJECT       = 0x65,
 
1130
 
 
1131
    /// Stream: V32 'name_id'
 
1132
    /// Stack In:
 
1133
    ///  obj -- The object whose property is to be retrieved
 
1134
    ///  [ns [n]] -- Namespace stuff
 
1135
    ///  [key] -- Key name for property. Will not have both Namespace and key.
 
1136
    /// Stack Out:
 
1137
    ///  prop -- The requested property.
 
1138
    /// NB: As with 0x61 (ABC_ACTION_SETPROPERTY) it's unclear to me when
 
1139
    /// key gets used and when the namespace (or nothing) is used.
 
1140
    ABC_ACTION_GETPROPERTY          = 0x66,
 
1141
 
 
1142
    ABC_ACTION_0x67                 = 0x67,
 
1143
 
 
1144
    /// Stream V32 'name_id'
 
1145
    /// Stack In:
 
1146
    ///  obj -- The object whose property is to be initialized
 
1147
    ///  [ns [n]] -- Namespace stuff
 
1148
    ///  value -- The value to be put into the property.
 
1149
    /// Stack Out:
 
1150
    ///  .
 
1151
    /// Do:
 
1152
    ///  Set obj::(resolve)'name_id' to value, set bindings from the context.
 
1153
    ABC_ACTION_INITPROPERTY         = 0x68,
 
1154
 
 
1155
    ABC_ACTION_0x69                 = 0x69,
 
1156
 
 
1157
    /// Stream: V32 'name_id'
 
1158
    /// Stack In:
 
1159
    ///  obj -- The object whose property should be deleted.
 
1160
    ///  [ns [n]] -- Namespace stuff
 
1161
    /// Stack Out:
 
1162
    ///  truth -- True if property was deleted or did not exist, else False.
 
1163
    ABC_ACTION_DELETEPROPERTY       = 0x6A,
 
1164
 
 
1165
    ABC_ACTION_0x6B                = 0x6B,
 
1166
 
 
1167
    /// Stream: V32 'slot_index + 1'
 
1168
    /// Stack In:
 
1169
    ///  obj -- The object which owns the desired slot.
 
1170
    /// Stack Out:
 
1171
    ///  slot -- obj.slots[slot_index]
 
1172
    ABC_ACTION_GETSLOT              = 0x6C,
 
1173
 
 
1174
    /// Stream: V32 'slot_index + 1'
 
1175
    /// Stack In:
 
1176
    ///  obj -- The object whose slot should be set.
 
1177
    ///  value -- The value intended for the slot.
 
1178
    /// Stack Out:
 
1179
    ///  .
 
1180
    /// Do: obj.slots[slot_index] = value
 
1181
    ABC_ACTION_SETSLOT              = 0x6D,
 
1182
 
 
1183
    /// Stream: V32 'slot_index + 1'
 
1184
    /// Stack In:
 
1185
    ///  .
 
1186
    /// Stack Out:
 
1187
    ///  slot -- globals.slots[slot_index]
 
1188
    /// NB: Deprecated
 
1189
    ABC_ACTION_GETGLOBALSLOT        = 0x6E,
 
1190
 
 
1191
    /// Stream: V32 'slot_index + 1'
 
1192
    /// Stack In:
 
1193
    ///  value -- The value to be placed into the slot.
 
1194
    /// Stack Out:
 
1195
    ///  .
 
1196
    /// Do: globals[slot_index] = value
 
1197
    /// NB: Deprecated
 
1198
    ABC_ACTION_SETGLOBALSLOT        = 0x6F,
 
1199
 
 
1200
    /// Stack In:
 
1201
    ///  value -- An object
 
1202
    /// Stack Out:
 
1203
    ///  str_value -- value as a string
 
1204
    ABC_ACTION_CONVERT_S           = 0x70,
 
1205
 
 
1206
    /// Stack In:
 
1207
    ///  value -- An object to be escaped
 
1208
    /// Stack Out:
 
1209
    ///  str_value -- value as a string, escaped suitably for an XML element.
 
1210
    ABC_ACTION_ESC_XELEM           = 0x71,
 
1211
 
 
1212
    /// Stack In:
 
1213
    ///  value -- An object to be escaped
 
1214
    /// Stack Out:
 
1215
    ///  str_value -- value as a string, escaped suitably for an XML attribute.
 
1216
    ABC_ACTION_ESC_XATTR           = 0x72,
 
1217
 
 
1218
    /// Stack In:
 
1219
    ///  value -- An object to be converted to Integer
 
1220
    /// Stack Out:
 
1221
    ///  int_value -- value as an integer object
 
1222
    ABC_ACTION_CONVERT_I           = 0x73,
 
1223
 
 
1224
    /// Stack In:
 
1225
    ///  value -- An object to be converted to unsigned integer
 
1226
    /// Stack Out:
 
1227
    ///  int_value -- value as an unsigned integer object
 
1228
    ABC_ACTION_CONVERT_U           = 0X74,
 
1229
 
 
1230
    /// Stack In:
 
1231
    ///  value -- An object to be converted to a double
 
1232
    /// Stack Out:
 
1233
    ///  double_value -- value as a double object
 
1234
    ABC_ACTION_CONVERT_D           = 0X75,
 
1235
 
 
1236
    /// Stack In:
 
1237
    ///  value -- An object to be converted to a boolean
 
1238
    /// Stack Out:
 
1239
    ///  bool_value -- value as a boolean object
 
1240
    ABC_ACTION_CONVERT_B           = 0X76,
 
1241
 
 
1242
    /// Stack In:
 
1243
    ///  obj -- An object
 
1244
    /// Stack Out:
 
1245
    ///  obj -- An object
 
1246
    /// Do: If obj is Undefined or Null, throw TypeError
 
1247
    ABC_ACTION_CONVERT_O           = 0X77,
 
1248
 
 
1249
    /// Stack In:
 
1250
    ///  obj -- An object
 
1251
    /// Stack Out:
 
1252
    ///  obj -- An object
 
1253
    /// Do: If obj is not XML based, throw TypeError
 
1254
    ABC_ACTION_CHECKFILTER         = 0x78,
 
1255
 
 
1256
    ABC_ACTION_0x79                = 0x79,
 
1257
    ABC_ACTION_0x7A                 = 0x7A,
 
1258
    ABC_ACTION_0x7B                 = 0x7B,
 
1259
    ABC_ACTION_0x7C                 = 0x7C,
 
1260
    ABC_ACTION_0x7D                 = 0x7D,
 
1261
    ABC_ACTION_0x7E                 = 0x7E,
 
1262
    ABC_ACTION_0x7F                 = 0x7F,
 
1263
 
 
1264
    /// Stream: V32 'name_index'
 
1265
    /// Stack In:
 
1266
    ///  obj -- An object to be converted
 
1267
    /// Stack Out:
 
1268
    ///  coerced_obj -- The object as the desired (resolve)'name_index' type.
 
1269
    ABC_ACTION_COERCE              = 0x80,
 
1270
 
 
1271
    /// See: 0x76 (ABC_ACTION_CONVERT_B)
 
1272
    /// NB: Deprecated
 
1273
    ABC_ACTION_COERCE_B             = 0x81,
 
1274
 
 
1275
    /// Stack In:
 
1276
    ///  obj -- An object to be converted
 
1277
    /// Stack Out:
 
1278
    ///  obj
 
1279
    /// Do: Nothing. (The 'a' is for atom, and this already is.)
 
1280
    ABC_ACTION_COERCE_A            = 0x82,
 
1281
 
 
1282
    /// See: 0x73 ABC_ACTION_CONVERT_I
 
1283
    /// NB: Deprecated
 
1284
    /// NOMING 20 Aug 2007
 
1285
    ABC_ACTION_COERCE_I            = 0x83,
 
1286
 
 
1287
    /// See: 0x75 ABC_ACTION_CONVERT_D
 
1288
    /// NB: Deprecated
 
1289
    /// NOMING 20 Aug 2007
 
1290
    ABC_ACTION_COERCE_D            = 0x84,
 
1291
 
 
1292
    /// Stack In:
 
1293
    ///  obj -- An object to be converted
 
1294
    /// Stack Out:
 
1295
    ///  str_obj -- obj as string. nullString object if obj is Null or Undefined
 
1296
    ABC_ACTION_COERCE_S            = 0x85,
 
1297
 
 
1298
    /// Stream: V32 'name_index' (no namespace)
 
1299
    /// Stack In:
 
1300
    ///  obj -- An object to be checked
 
1301
    /// Stack Out:
 
1302
    ///  cobj -- obj if obj is of type (resolve)'name_index', otherwise Null
 
1303
    ABC_ACTION_ASTYPE              = 0x86,
 
1304
 
 
1305
    /// Stack In:
 
1306
    ///  obj -- An object to be checked
 
1307
    ///  valid -- The object whose type is to be matched
 
1308
    /// Stack Out:
 
1309
    ///  cobj -- obj if type of obj is type of valid, otherwise Null
 
1310
    ABC_ACTION_ASTYPELATE          = 0x87,
 
1311
 
 
1312
    /// See: 0x74 (ABC_ACTION_CONVERT_U)
 
1313
    /// NB: Deprecated
 
1314
    ABC_ACTION_COERCE_U             = 0x88,
 
1315
 
 
1316
    /// Stack In:
 
1317
    ///  obj -- An object
 
1318
    /// Stack Out:
 
1319
    ///  cobj -- obj if obj is not Undefined, otherwise Null
 
1320
    ABC_ACTION_COERCE_O             = 0x89,
 
1321
 
 
1322
    ABC_ACTION_0x8A                 = 0x8A,
 
1323
    ABC_ACTION_0x8B                 = 0x8B,
 
1324
    ABC_ACTION_0x8C                 = 0x8C,
 
1325
    ABC_ACTION_0x8D                 = 0x8D,
 
1326
    ABC_ACTION_0x8E                 = 0x8E,
 
1327
    ABC_ACTION_0x8F                 = 0x8F,
 
1328
 
 
1329
    /// Stack In:
 
1330
    ///  obj -- An object
 
1331
    /// Stack Out:
 
1332
    ///  negdouble -- -1.0 * (double) obj
 
1333
    ABC_ACTION_NEGATE               = 0x90,
 
1334
 
 
1335
    /// Stack In:
 
1336
    ///  num -- A number, integer or double
 
1337
    /// Stack Out:
 
1338
    ///  num2 -- The same value, but new object.
 
1339
    /// Do:
 
1340
    ///  num = num + 1 (post-increment)
 
1341
    ABC_ACTION_INCREMENT            = 0x91,
 
1342
 
 
1343
    /// Stream: V32 'frame_addr'
 
1344
    /// Frame: Load i from frame_addr. Store clone(i) at frame_addr. i = i + 1
 
1345
    ///  (post-increment in frame)
 
1346
    ABC_ACTION_INCLOCAL             = 0x92,
 
1347
 
 
1348
    /// Stack In:
 
1349
    ///  num -- A number, integer or double
 
1350
    /// Stack Out:
 
1351
    ///  num2 -- The same value, but new object.
 
1352
    /// Do:
 
1353
    ///  num = num - 1 (post-decrement)
 
1354
    ABC_ACTION_DECREMENT            = 0x93,
 
1355
 
 
1356
    /// Stream: V32 'frame_addr'
 
1357
    /// Frame: Load i from frame_addr. Store clone(i) at frame_addr. i = i - 1
 
1358
    ///  (post-decrement in frame)
 
1359
    ABC_ACTION_DECLOCAL             = 0x94,
 
1360
 
 
1361
    /// Stack In:
 
1362
    ///  obj -- An object
 
1363
    /// Stack Out:
 
1364
    ///  type -- typeof(obj)
 
1365
    ABC_ACTION_ABC_TYPEOF               = 0x95,
 
1366
 
 
1367
    /// Stack In:
 
1368
    ///  obj -- An object
 
1369
    /// Stack Out:
 
1370
    ///  nobj -- A truth object with value !((Boolean) obj)
 
1371
    ABC_ACTION_NOT                  = 0x96,
 
1372
 
 
1373
    /// Stack In:
 
1374
    ///  obj -- An object
 
1375
    /// Stack Out:
 
1376
    ///  nint -- ~((Int) obj)
 
1377
    ABC_ACTION_BITNOT              = 0x97,
 
1378
 
 
1379
    ABC_ACTION_0x98                 = 0x98,
 
1380
    ABC_ACTION_0x99                 = 0x99,
 
1381
 
 
1382
    /// NB: It is an error for this to appear.
 
1383
    ABC_ACTION_CONCAT               = 0x9A,
 
1384
 
 
1385
    /// NB: It is an error for this to appear.
 
1386
    ABC_ACTION_ADD_D                = 0x9B,
 
1387
 
 
1388
    ABC_ACTION_0x9C                 = 0x9C,
 
1389
    ABC_ACTION_0x9D                 = 0x9D,
 
1390
    ABC_ACTION_0x9E                 = 0x9E,
 
1391
    ABC_ACTION_0x9F                 = 0x9F,
 
1392
 
 
1393
    /// Stack In:
 
1394
    /// a
 
1395
    /// b
 
1396
    /// Stack Out:
 
1397
    /// a + b (double if numeric)
 
1398
    ABC_ACTION_ADD                 = 0xA0,
 
1399
 
 
1400
    /// Stack In:    /// Stack In:
 
1401
    ///  a
 
1402
    ///  b
 
1403
    /// Stack Out:
 
1404
    ///  a - b (double)
 
1405
    ABC_ACTION_SUBTRACT             = 0xA1,
 
1406
 
 
1407
    /// Stack In:
 
1408
    ///  a
 
1409
    ///  b
 
1410
    /// Stack Out:
 
1411
    ///  a * b (double)
 
1412
    ABC_ACTION_MULTIPLY             = 0xA2,
 
1413
 
 
1414
    /// Stack In:
 
1415
    ///  a
 
1416
    ///  b
 
1417
    /// Stack Out:
 
1418
    ///  a / b (double)
 
1419
    ABC_ACTION_DIVIDE               = 0xA3,
 
1420
 
 
1421
    /// Stack In:
 
1422
    ///  a
 
1423
    ///  b
 
1424
    /// Stack Out:
 
1425
    ///  a % b
 
1426
    ABC_ACTION_MODULO               = 0xA4,
 
1427
 
 
1428
    /// Stack In:
 
1429
    ///  a
 
1430
    ///  b
 
1431
    /// Stack Out:
 
1432
    ///  a << b
 
1433
    ABC_ACTION_LSHIFT               = 0xA5,
 
1434
 
 
1435
    /// Stack In:
 
1436
    ///  a
 
1437
    ///  b
 
1438
    /// Stack Out:
 
1439
    ///  a >> b
 
1440
    ABC_ACTION_RSHIFT               = 0xA6,
 
1441
 
 
1442
    /// Stack In:
 
1443
    ///  a
 
1444
    ///  b
 
1445
    /// Stack Out:
 
1446
    ///  ((unsigned) a) >> b
 
1447
    ABC_ACTION_URSHIFT              = 0xA7,
 
1448
 
 
1449
    ///  a
 
1450
    ///  b
 
1451
    /// Stack Out:
 
1452
    ///  a & b
 
1453
    ABC_ACTION_BITAND              = 0xA8,
 
1454
 
 
1455
    /// Stack In:
 
1456
    ///  a
 
1457
    ///  b
 
1458
    /// Stack Out:
 
1459
    ///  a | b
 
1460
    ABC_ACTION_BITOR               = 0xA9,
 
1461
 
 
1462
    /// Stack In:
 
1463
    ///  a
 
1464
    ///  b
 
1465
    /// Stack Out:
 
1466
    ///  a ^ b
 
1467
    ABC_ACTION_BITXOR              = 0xAA,
 
1468
 
 
1469
    /// Stack In:
 
1470
    ///  a
 
1471
    ///  b
 
1472
    /// Stack Out:
 
1473
    ///  truth -- Truth of (a == b) (weakly)
 
1474
    ABC_ACTION_EQUALS               = 0xAB,
 
1475
 
 
1476
    /// Stack In:
 
1477
    ///  a
 
1478
    ///  b
 
1479
    /// Stack Out:
 
1480
    ///  truth -- Truth of (a == b) (strongly, as in 
 
1481
    ///   0x19 (ABC_ACTION_IFSTRICTEQ))
 
1482
    ABC_ACTION_STRICTEQUALS         = 0xAC,
 
1483
 
 
1484
    /// Stack In:
 
1485
    ///  a
 
1486
    ///  b
 
1487
    /// Stack Out:
 
1488
    ///  truth -- Truth of (a < b)
 
1489
    ABC_ACTION_LESSTHAN             = 0xAD,
 
1490
 
 
1491
    /// Stack In:
 
1492
    ///  a
 
1493
    ///  b
 
1494
    /// Stack Out:
 
1495
    ///  truth -- Truth of (a <= b)
 
1496
    ABC_ACTION_LESSEQUALS           = 0xAE,
 
1497
 
 
1498
    /// Stack In:
 
1499
    ///  a
 
1500
    ///  b
 
1501
    /// Stack Out:
 
1502
    ///  truth -- Truth of (a > b)
 
1503
    ABC_ACTION_GREATERTHAN          = 0xAF,
 
1504
 
 
1505
    /// Stack In:
 
1506
    ///  a
 
1507
    ///  b
 
1508
    /// Stack Out:
 
1509
    ///  truth -- Truth of (a >= b)
 
1510
    ABC_ACTION_GREATEREQUALS        = 0xB0,
 
1511
 
 
1512
    /// Stack In:
 
1513
    ///  val -- An object
 
1514
    ///  super -- An object
 
1515
    /// Stack Out:
 
1516
    ///  truth -- Truth of "val is an instance of super"
 
1517
    ABC_ACTION_INSTANCEOF           = 0xB1,
 
1518
 
 
1519
    /// Stream: V32 'name_id'
 
1520
    /// Stack In:
 
1521
    ///  obj -- An object
 
1522
    /// Stack Out:
 
1523
    ///  truth -- Truth of "obj is of the type given in (resolve)'name_id'"
 
1524
    ABC_ACTION_ISTYPE               = 0xB2,
 
1525
 
 
1526
    /// Stack In:
 
1527
    ///  obj -- An object
 
1528
    ///  type -- A type to match
 
1529
    /// Stack Out:
 
1530
    ///  truth -- Truth of "obj is of type"
 
1531
    ABC_ACTION_ISTYPELATE           = 0xB3,
 
1532
 
 
1533
    /// Stack In:
 
1534
    ///  name -- The name to find
 
1535
    ///  obj -- The object to search for it
 
1536
    /// Stack Out:
 
1537
    ///  truth -- True if name is in current namespace or anywhere in object.
 
1538
    ///   Don't look in the namespace if obj is a dictionary.
 
1539
    ABC_ACTION_IN                   = 0xB4,
 
1540
 
 
1541
    ABC_ACTION_0xB5                 = 0xB5,
 
1542
    ABC_ACTION_0xB6                 = 0xB6,
 
1543
    ABC_ACTION_0xB7                 = 0xB7,
 
1544
    ABC_ACTION_0xB8                 = 0xB8,
 
1545
    ABC_ACTION_0xB9                 = 0xB9,
 
1546
    ABC_ACTION_0xBA                 = 0xBA,
 
1547
    ABC_ACTION_0xBB                 = 0xBB,
 
1548
    ABC_ACTION_0xBC                 = 0xBC,
 
1549
    ABC_ACTION_0xBD                 = 0xBD,
 
1550
    ABC_ACTION_0xBE                 = 0xBE,
 
1551
    ABC_ACTION_0xBF                 = 0xBF,
 
1552
 
 
1553
    /// See: 0x91 (ABC_ACTION_INCREMENT), but forces types to int, not double
 
1554
    ABC_ACTION_INCREMENT_I          = 0xC0,
 
1555
 
 
1556
    /// See: 0x93 (ABC_ACTION_DECREMENT), but forces types to int, not double
 
1557
    ABC_ACTION_DECREMENT_I          = 0xC1,
 
1558
 
 
1559
    /// See: 0x92 (ABC_ACTION_INCLOCAL), but forces types to int, not double
 
1560
    ABC_ACTION_INCLOCAL_I           = 0xC2,
 
1561
 
 
1562
    /// See: 0x94 (ABC_ACTION_DECLOCAL), but forces types to int, not double
 
1563
    ABC_ACTION_DECLOCAL_I           = 0xC3,
 
1564
 
 
1565
    /// See: 0x90 (ABC_ACTION_NEGATE), but forces type to int, not double
 
1566
    ABC_ACTION_NEGATE_I             = 0xC4,
 
1567
 
 
1568
    /// See: 0xA0 (ABC_ACTION_ADD), but forces type to int
 
1569
    ABC_ACTION_ADD_I                = 0xC5,
 
1570
 
 
1571
    /// See: 0xA1 (ABC_ACTION_SUBTRACT), but forces type to int
 
1572
    ABC_ACTION_SUBTRACT_I           = 0xC6,
 
1573
 
 
1574
    /// See: 0xA2 (ABC_ACTION_MULTIPLY), but forces type to int
 
1575
    ABC_ACTION_MULTIPLY_I           = 0xC7,
 
1576
 
 
1577
    ABC_ACTION_0xC8                 = 0xC8,
 
1578
    ABC_ACTION_0xC9                 = 0xC9,
 
1579
    ABC_ACTION_0xCA                 = 0xCA,
 
1580
    ABC_ACTION_0xCB                 = 0xCB,
 
1581
    ABC_ACTION_0xCC                 = 0xCC,
 
1582
    ABC_ACTION_0xCD                 = 0xCD,
 
1583
    ABC_ACTION_0xCE                 = 0xCE,
 
1584
    ABC_ACTION_0xCF                 = 0xCF,
 
1585
 
 
1586
    /// Frame: Load frame[0] as val
 
1587
    /// Stack Out:
 
1588
    ///  val
 
1589
    ABC_ACTION_GETLOCAL0            = 0xD0,
 
1590
 
 
1591
    /// Frame: Load frame[1] as val
 
1592
    /// Stack Out:
 
1593
    ///  val
 
1594
    ABC_ACTION_GETLOCAL1            = 0xD1,
 
1595
 
 
1596
    /// Frame: Load frame[2] as val
 
1597
    /// Stack Out:
 
1598
    ///  val
 
1599
    ABC_ACTION_GETLOCAL2            = 0xD2,
 
1600
 
 
1601
    /// Frame: Load frame[3] as val
 
1602
    /// Stack Out:
 
1603
    ///  val
 
1604
    ABC_ACTION_GETLOCAL3            = 0xD3,
 
1605
 
 
1606
    /// Frame: Store val as frame[0]
 
1607
    /// Stack In:
 
1608
    ///  val
 
1609
    /// Stack Out:
 
1610
    ///  .
 
1611
    ABC_ACTION_SETLOCAL0            = 0xD4,
 
1612
 
 
1613
    /// Frame: Store val as frame[1]
 
1614
    /// Stack In:
 
1615
    ///  val
 
1616
    /// Stack Out:
 
1617
    ///  .
 
1618
    ABC_ACTION_SETLOCAL1            = 0xD5,
 
1619
 
 
1620
    /// Frame: Store val as frame[2]
 
1621
    /// Stack In:
 
1622
    ///  val
 
1623
    /// Stack Out:
 
1624
    ///  .
 
1625
    ABC_ACTION_SETLOCAL2            = 0xD6,
 
1626
 
 
1627
    /// Frame: Store val as frame[3]
 
1628
    /// Stack In:
 
1629
    ///  val
 
1630
    /// Stack Out:
 
1631
    ///  .
 
1632
    ABC_ACTION_SETLOCAL3            = 0xD7,
 
1633
 
 
1634
    ABC_ACTION_0xD8                 = 0xD8,
 
1635
    ABC_ACTION_0xD9                 = 0xD9,
 
1636
    ABC_ACTION_0xDA                 = 0xDA,
 
1637
    ABC_ACTION_0xDB                 = 0xDB,
 
1638
    ABC_ACTION_0xDC                 = 0xDC,
 
1639
    ABC_ACTION_0xDD                 = 0xDD,
 
1640
    ABC_ACTION_0xDE                 = 0xDE,
 
1641
    ABC_ACTION_0xDF                 = 0xDF,
 
1642
    ABC_ACTION_0xE0                 = 0xE0,
 
1643
    ABC_ACTION_0xE1                 = 0xE1,
 
1644
    ABC_ACTION_0xE2                 = 0xE2,
 
1645
    ABC_ACTION_0xE3                 = 0xE3,
 
1646
    ABC_ACTION_0xE4                 = 0xE4,
 
1647
    ABC_ACTION_0xE5                 = 0xE5,
 
1648
    ABC_ACTION_0xE6                 = 0xE6,
 
1649
    ABC_ACTION_0xE7                 = 0xE7,
 
1650
    ABC_ACTION_0xE8                 = 0xE8,
 
1651
    ABC_ACTION_0xE9                 = 0xE9,
 
1652
    ABC_ACTION_0xEA                 = 0xEA,
 
1653
    ABC_ACTION_0xEB                 = 0xEB,
 
1654
    ABC_ACTION_0xEC                 = 0xEC,
 
1655
    ABC_ACTION_0xED                 = 0xED,
 
1656
 
 
1657
    /// NB: It is an error for this to appear.
 
1658
    ABC_ACTION_ABS_JUMP             = 0xEE,
 
1659
 
 
1660
    /// Stream: 7 bytes of unknown stuff to be skipped
 
1661
    /// Do: skip ahead 7 bytes in stream
 
1662
    ABC_ACTION_DEBUG                = 0xEF,
 
1663
 
 
1664
    /// Stream: V32 'line_number'
 
1665
    /// Do: Nothing, but line_number is for the debugger if wanted.
 
1666
    ABC_ACTION_DEBUGLINE            = 0xF0,
 
1667
 
 
1668
    /// Stream: V32 'name_offset'
 
1669
    /// Do: Nothing. 'name_offset' into string pool is the file name if wanted.
 
1670
    ABC_ACTION_DEBUGFILE            = 0xF1,
 
1671
 
 
1672
    /// Stream: V32 'line_number'
 
1673
    /// Do: Enter debugger if present, line_number is the line number in source.
 
1674
    ABC_ACTION_BKPTLINE             = 0xF2,
 
1675
 
 
1676
    /// Do: Nothing.
 
1677
    ABC_ACTION_TIMESTAMP            = 0xF3,
 
1678
 
 
1679
    ABC_ACTION_0xF4                 = 0xF4,
 
1680
 
 
1681
    /// NB: It seems an error for this to appear.
 
1682
    ABC_ACTION_VERIFYPASS           = 0xF5,
 
1683
 
 
1684
    /// NB: Error to appear in ABC
 
1685
    ABC_ACTION_ALLOC                = 0xF6,
 
1686
 
 
1687
    /// NB: Error to appear in ABC
 
1688
    ABC_ACTION_MARK                 = 0xF7,
 
1689
 
 
1690
    /// NB: Error to appear in ABC
 
1691
    ABC_ACTION_WB                   = 0xF8,
 
1692
 
 
1693
    /// NB: Error to appear in ABC
 
1694
    ABC_ACTION_PROLOGUE             = 0xF9,
 
1695
 
 
1696
    /// NB: Error to appear in ABC
 
1697
    ABC_ACTION_SENDENTER            = 0xFA,
 
1698
 
 
1699
    /// NB: Error to appear in ABC
 
1700
    ABC_ACTION_DOUBLETOATOM         = 0xFB,
 
1701
 
 
1702
    /// NB: Error to appear in ABC
 
1703
    ABC_ACTION_SWEEP                = 0xFC,
 
1704
 
 
1705
    /// NB: Error to appear in ABC
 
1706
    ABC_ACTION_CODEGENOP            = 0xFD,
 
1707
 
 
1708
    /// NB: Error to appear in ABC
 
1709
    ABC_ACTION_VERIFYOP             = 0xFE
 
1710
 
 
1711
} abc_action_type;
 
1712
 
 
1713
 
 
1714
/// SWF fill style types. Symbolic names copied from Ming.
 
1715
//
 
1716
/// For more info see:
 
1717
/// http://sswf.sourceforge.net/SWFalexref.html#swf_fill_style
 
1718
///
 
1719
typedef enum {
 
1720
        FILL_SOLID                   = 0x00,
 
1721
        FILL_LINEAR_GRADIENT         = 0x10,
 
1722
        FILL_RADIAL_GRADIENT         = 0x12,
 
1723
        FILL_FOCAL_GRADIENT          = 0x13,
 
1724
        FILL_TILED_BITMAP            = 0x40,
 
1725
        FILL_CLIPPED_BITMAP          = 0x41,
 
1726
 
 
1727
        /// swf7, hard edges
 
1728
        FILL_TILED_BITMAP_HARD       = 0x42, 
 
1729
 
 
1730
        /// swf7, hard edges
 
1731
        FILL_CLIPPED_BITMAP_HARD     = 0x43
 
1732
 
 
1733
} fill_style_type;
 
1734
 
 
1735
typedef enum {
 
1736
        GRADIENT_SPREAD_PAD,
 
1737
        GRADIENT_SPREAD_REFLECT,
 
1738
        GRADIENT_SPREAD_REPEAT
 
1739
} gradient_spread_mode;
 
1740
 
 
1741
typedef enum {
 
1742
        GRADIENT_INTERPOL_NORMAL,
 
1743
        GRADIENT_INTERPOL_LINEAR
 
1744
} gradient_interpolation_mode;
 
1745
 
 
1746
 
 
1747
 
 
1748
 
 
1749
} // namespace gnash::SWF
 
1750
 
 
1751
} // namespace gnash
 
1752
 
 
1753
 
 
1754
#endif // GNASH_SWF_H