2
// Copyright (C) 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
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.
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.
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
23
/// SWF format parsing classes
24
namespace SWF { // gnash::SWF
26
/// SWF tag types. Symbolc names copied from Ming
29
/// end of sprite or movie definition
39
SETBACKGROUNDCOLOR = 9,
46
/// See http://sswf.sourceforge.net/SWFalexref.html#tag_startsound
49
STOPSOUND = 16, // SWF 9
50
DEFINEBUTTONSOUND = 17,
53
/// See http://sswf.sourceforge.net/SWFalexref.html#tag_soundstreamhead
56
SOUNDSTREAMBLOCK = 19,
60
DEFINEBUTTONCXFORM = 23,
62
PATHSAREPOSTSCRIPT = 25,
75
/// Definition of a Sprite/MovieClip
80
DEFINETEXTFORMAT = 42,
82
DEFINEBEHAVIOR = 44, // SWF 9
85
/// See http://sswf.sourceforge.net/SWFalexref.html#tag_soundstreamhead2
86
SOUNDSTREAMHEAD2 = 45,
88
DEFINEMORPHSHAPE = 46,
92
DEFINECOMMANDOBJ = 50,
95
DEFINEFUNCTION = 53, // SWF 9
96
PLACEFUNCTION = 54, // SWF 9
97
GENTAGOBJECT = 55, // SWF 9
101
/// See http://sswf.sourceforge.net/SWFalexref.html#tag_protectdebug
104
/// For actions specified with initclip directive
107
DEFINEVIDEOSTREAM = 60,
110
/// DefineFontInfo2 (swf6)
111
DEFINEFONTINFO2 = 62,
113
DEBUGID = 63, // SWF 9
115
/// See http://flasm.sourceforge.net/#protect
116
/// See http://sswf.sourceforge.net/SWFalexref.html#tag_protectdebug
117
ENABLEDEBUGGER2 = 64,
120
/// See http://sswf.sourceforge.net/SWFalexref.html#tag_scriptlimits
123
SETTABINDEX = 66, // SWF 9
124
DEFINESHAPE4_ = 67, // SWF 9
125
DEFINEMORPHSHAPE2_ = 68, // SWF 9
127
/// http://sswf.sourceforge.net/SWFalexref.html#tag_fileattributes
130
/// http://sswf.sourceforge.net/SWFalexref.html#tag_placeobject3
133
/// http://sswf.sourceforge.net/SWFalexref.html#tag_import2
138
/// http://sswf.sourceforge.net/SWFalexref.html#tag_definefontalignzones
139
DEFINEALIGNZONES = 73,
141
/// http://sswf.sourceforge.net/SWFalexref.html#tag_csmtextsettings
142
CSMTEXTSETTINGS = 74,
144
/// http://sswf.sourceforge.net/SWFalexref.html#tag_definefont3
148
/// http://sswf.sourceforge.net/SWFalexref.html#tag_symbolclass
151
/// http://sswf.sourceforge.net/SWFalexref.html#tag_metadata
154
/// http://sswf.sourceforge.net/SWFalexref.html#tag_definescalinggrid
155
DEFINESCALINGGRID = 78,
158
/// http://sswf.sourceforge.net/SWFalexref.html#tag_doabcdefine
161
/// http://sswf.sourceforge.net/SWFalexref.html#tag_definemorphshape2
164
/// http://sswf.sourceforge.net/SWFalexref.html#tag_definemorphshape2
165
DEFINEMORPHSHAPE2 = 84,
167
DEFINESCENEANDFRAMELABELDATA = 86,
176
/// SWF action ids. Symbolic names copied from Ming.
178
/// For semantic of each action see:
179
/// http://sswf.sourceforge.net/SWFalexref.html
184
ACTION_NEXTFRAME = 0x04,
185
ACTION_PREVFRAME = 0x05,
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,
196
ACTION_SUBTRACT = 0x0B,
197
ACTION_MULTIPLY = 0x0C,
198
ACTION_DIVIDE = 0x0D,
200
/// Numeric equality (SWF4, replaced by ACTION_NEWEQUALS starting at SWF5)
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,
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,
221
ACTION_STARTDRAGMOVIE = 0x27,
222
ACTION_STOPDRAGMOVIE = 0x28,
223
ACTION_STRINGCOMPARE = 0x29,
227
/// http://sswf.sourceforge.net/SWFalexref.html#action_throw
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.
240
/// http://sswf.sourceforge.net/SWFalexref.html#action_cast_object
242
ACTION_CASTOP = 0x2B,
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
253
/// http://sswf.sourceforge.net/SWFalexref.html#action_implements
255
ACTION_IMPLEMENTSOP = 0x2C,
259
/// This action executes an fscommand.
261
/// i1 -- number of arguments (int)
262
/// s2 -- command string
263
/// [s3..sn] -- arguments, as many as specified in i1
268
/// http://sswf.sourceforge.net/SWFalexref.html#action_fscommand2
270
ACTION_FSCOMMAND2 = 0x2D,
272
ACTION_RANDOM = 0x30,
273
ACTION_MBLENGTH = 0x31,
276
ACTION_GETTIMER = 0x34,
277
ACTION_MBSUBSTRING = 0x35,
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,
288
/// http://sswf.sourceforge.net/SWFalexref.html#action_delete
289
ACTION_DELETE = 0x3A,
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,
295
ACTION_VAREQUALS = 0x3C, // DEFINELOCAL actually
296
ACTION_CALLFUNCTION = 0x3D,
297
ACTION_RETURN = 0x3E,
298
ACTION_MODULO = 0x3F,
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.
310
/// http://sswf.sourceforge.net/SWFalexref.html#action_new
315
ACTION_INITARRAY = 0x42,
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.
328
/// Also known as 'ACTION_DECLAREOBJECT'.
330
/// http://sswf.sourceforge.net/SWFalexref.html#action_declare_object
332
ACTION_INITOBJECT = 0x43,
334
ACTION_TYPEOF = 0x44,
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).
341
/// http://sswf.sourceforge.net/SWFalexref.html#action_get_target
343
ACTION_TARGETPATH = 0x45,
347
/// http://sswf.sourceforge.net/SWFalexref.html#action_enumerate
349
ACTION_ENUMERATE = 0x46,
353
/// http://sswf.sourceforge.net/SWFalexref.html#action_add_typed
355
ACTION_NEWADD = 0x47,
357
ACTION_NEWLESSTHAN = 0x48,
359
/// ECMA-262 "Abstract Equality Comparison"
361
/// See section 11.9.3 of the ECMA 262 spec
363
ACTION_NEWEQUALS = 0x49,
367
/// http://sswf.sourceforge.net/SWFalexref.html#action_number
369
ACTION_TONUMBER = 0x4A,
373
/// http://sswf.sourceforge.net/SWFalexref.html#action_string
375
ACTION_TOSTRING = 0x4B,
379
/// http://sswf.sourceforge.net/SWFalexref.html#action_duplicate
385
/// http://sswf.sourceforge.net/SWFalexref.html#action_swap
391
/// http://sswf.sourceforge.net/SWFalexref.html#action_get_member
393
ACTION_GETMEMBER = 0x4E,
397
/// http://sswf.sourceforge.net/SWFalexref.html#action_set_member
399
ACTION_SETMEMBER = 0x4F,
403
/// http://sswf.sourceforge.net/SWFalexref.html#action_increment
405
ACTION_INCREMENT = 0x50,
409
/// http://sswf.sourceforge.net/SWFalexref.html#action_decrement
411
ACTION_DECREMENT = 0x51,
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.
420
/// http://sswf.sourceforge.net/SWFalexref.html#action_call_method
422
ACTION_CALLMETHOD = 0x52,
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++.
434
/// http://sswf.sourceforge.net/SWFalexref.html#action_new_method
436
ACTION_NEWMETHOD = 0x53,
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.
449
/// http://sswf.sourceforge.net/SWFalexref.html#action_instance_of
451
ACTION_INSTANCEOF = 0x54,
455
/// Pops an object from the stack, push a null, then
456
/// push the name of each member on the stack.
458
/// http://sswf.sourceforge.net/SWFalexref.html#action_enumerate_object
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,
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.
477
/// http://sswf.sourceforge.net/SWFalexref.html#action_greater_than_typed
479
ACTION_GREATER = 0x67,
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.
488
/// http://sswf.sourceforge.net/SWFalexref.html#action_string_greater_than
490
ACTION_STRINGGREATER = 0x68,
495
/// The Extends action will be used to define a new object
496
/// which extends another object. The declaration in
499
/// class A extends B;
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.
506
/// Use this action whenever you need to inherit an object
507
/// without calling its constructor.
510
/// http://sswf.sourceforge.net/SWFalexref.html#action_extends
512
ACTION_EXTENDS = 0x69,
515
/// http://sswf.sourceforge.net/SWFalexref.html#action_declare_dictionary
516
ACTION_CONSTANTPOOL = 0x88,
522
/// http://sswf.sourceforge.net/SWFalexref.html#action_declare_function2
524
ACTION_DEFINEFUNCTION2 = 0x8E,
528
/// http://sswf.sourceforge.net/SWFalexref.html#action_try
533
ACTION_DEFINEFUNCTION = 0x9B,
535
ACTION_SETREGISTER = 0x87
541
/// AS3 Actions go below here.
543
/// Do: Enter the debugger if one has been invoked.
544
ABC_ACTION_BKPT = 0x01,
547
ABC_ACTION_NOP = 0x02,
553
/// Do: Throw obj as an exception
554
/// Equivalent: ACTIONTHROW
555
ABC_ACTION_THROW = 0X03,
558
/// name_id -- V32 index to multiname 'name'
561
/// [ns [n]] -- Namespace stuff.
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,
568
/// Stream: UV32 index to multiname 'name'
572
/// [ns [n]] -- Namespace stuff.
575
/// Do: Make val the super of obj.name ; throw ReferenceError if obj.name is
577
ABC_ACTION_SETSUPER = 0X05,
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,
585
/// nsname -- a string object
588
/// Do: Create a new public namespace with name nsname, but don't enter it.
589
ABC_ACTION_DXNSLATE = 0X07,
591
/// Stream: UV32 frame pointer offset 'offset'
594
/// Equivalent: ACTION_DELETE
595
ABC_ACTION_KILL = 0X08,
597
/// Do: Unknown purpose, Tamarin does nothing.
598
ABC_ACTION_LABEL = 0X09,
600
ABC_ACTION_0x0A = 0X0A,
601
ABC_ACTION_0X0B = 0X0B,
603
/// Stream: S24 jump offset 'jump'
609
/// Do: If !(a < b) move by jump in stream, as ABC_ACTION_JUMP does.
610
ABC_ACTION_IFNLT = 0X0C,
612
/// Stream: S24 jump offset 'jump'
618
/// Do: If !(a <= b) move by jump in stream, as ABC_ACTION_JUMP does.
619
ABC_ACTION_IFNLE = 0X0D,
621
/// Stream: S24 jump offset 'jump'
627
/// Do: If !(a > b) move by jump in stream, as ABC_ACTION_JUMP does.
628
ABC_ACTION_IFNGT = 0X0E,
630
/// Stream: S24 jump offset 'jump'
636
/// Do: If !(a >= b) move by jump in stream, as ABC_ACTION_JUMP does.
637
ABC_ACTION_IFNGE = 0X0F,
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,
644
/// Stream: S24 jump offset 'jump'
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,
653
/// Stream: S24 jump offset 'jump'
658
/// Do: If a is 'false', move by jump in stream, as ABC_ACTION_JUMP does.
659
ABC_ACTION_IFFALSE = 0X12,
661
/// Stream: S24 jump offset 'jump'
667
/// Do: If a == b (weakly), move by jump in stream, as ABC_ACTION_JUMP does.
668
ABC_ACTION_IFEQ = 0x13,
670
/// Stream: S24 jump offset 'jump'
676
/// Do: If a != b (weakly), move by jump in stream, as ABC_ACTION_JUMP does.
677
ABC_ACTION_IFNE = 0X14,
679
/// Stream: S24 jump offset 'jump'
685
/// Do: If a < b move by jump in stream, as ABC_ACTION_JUMP does.
686
ABC_ACTION_IFLT = 0X15,
688
/// Stream: S24 jump offset 'jump'
694
/// Do: If a <= b move by jump in stream, as ABC_ACTION_JUMP does.
695
ABC_ACTION_IFLE = 0x16,
697
/// Stream: S24 jump offset 'jump'
703
/// Do: If a > b move by jump in stream, as ABC_ACTION_JUMP does.
704
ABC_ACTION_IFGT = 0x17,
706
/// Stream: S24 jump offset 'jump'
712
/// Do: If a >= b move by jump in stream, as ABC_ACTION_JUMP does.
713
ABC_ACTION_IFGE = 0x18,
715
/// Stream: S24 jump offset 'jump'
721
/// Do: If a == b (strictly), move by jump in stream, as ABC_ACTION_JUMP
722
ABC_ACTION_IFSTRICTEQ = 0x19,
724
/// Stream: S24 jump offset 'jump'
730
/// Do: If a != b (strongly), move by jump in stream, as ABC_ACTION_JUMP
731
ABC_ACTION_IFSTRICTNE = 0x1A,
733
/// Stream: 3 bytes | V32 count as 'case_count - 1' | case_count of S24
736
/// index -- an integer object
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,
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,
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,
757
/// index -- an integer object
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,
765
ABC_ACTION_NEXTNAME = 0x1E,
769
/// index -- an integer object
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,
777
/// n -- a Null object.
778
ABC_ACTION_PUSHNULL = 0x20,
780
/// n -- an Undefined object.
781
ABC_ACTION_PUSHUNDEFINED = 0x21,
783
ABC_ACTION_0x22 = 0x22,
786
/// obj -- an object (namespaces okay)
787
/// index -- an integer object
789
/// value -- the value of the key value pair in obj at index.
790
ABC_ACTION_NEXTVALUE = 0x23,
792
/// Stream: S8 as 'byte'
794
/// byte -- as a raw byte
795
ABC_ACTION_PUSHBYTE = 0x24,
797
/// Stream: V32 as 'value'
799
/// value -- as a raw integer
800
ABC_ACTION_PUSHSHORT = 0x25,
803
/// true -- the True object
804
ABC_ACTION_PUSHTRUE = 0x26,
807
/// false -- the False object
808
ABC_ACTION_PUSHFALSE = 0x27,
811
/// NaN -- the NaN object
812
ABC_ACTION_PUSHNAN = 0x28,
818
ABC_ACTION_POP = 0x29,
825
ABC_ACTION_DUP = 0x2A,
833
ABC_ACTION_SWAP = 0x2B,
835
/// Stream: V32 string pool index 'index'
837
/// value -- String object from string_pool[index]
838
ABC_ACTION_PUSHSTRING = 0x2C,
840
/// Stream: V32 int pool index 'index'
842
/// value -- Integer object from integer_pool[index]
843
ABC_ACTION_PUSHINT = 0x2D,
845
/// Stream: V32 uint pool index 'index'
847
/// value -- Unsigned Integer object from unsigned_integer_pool[index]
848
ABC_ACTION_PUSHUINT = 0x2E,
850
/// Stream: V32 double pool index 'index'
852
/// value -- Double object from double_pool[index]
853
ABC_ACTION_PUSHDOUBLE = 0x2F,
859
/// Do: Enter scope without altering base.
860
ABC_ACTION_PUSHSCOPE = 0x30,
862
/// Stream: V32 namespace pool index 'index'
864
/// ns -- Namespace object from namespace_pool[index]
865
ABC_ACTION_PUSHNAMESPACE = 0x31,
867
/// Stream: V32 frame location 'objloc' | V32 frame location 'indexloc'
869
/// truth -- True if frame[objloc] has key/val pair after frame[indexloc],
870
/// following delagates (__proto__) objects if needed. False, otherwise.
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,
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,
890
/// Stream: V32 'index'
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,
897
/// Stream: V32 'arg_count'
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
903
/// value -- the value returned by obj->func(arg1, ...., argN)
904
ABC_ACTION_CALL = 0x41,
906
/// Stream: V32 'arg_count'
908
/// obj -- the object to be constructed
909
/// arg1 ... argN -- the arg_count arguments to pass
911
/// value -- obj after it has been constructed as obj(arg1, ..., argN)
912
ABC_ACTION_CONSTRUCT = 0x42,
914
/// Stream: V32 'method_id + 1' | V32 'arg_count'
916
/// obj -- the object to be called
917
/// arg1 ... argN -- the arg_count arguments to pass
919
/// value -- the value returned by obj::'method_id'(arg1, ..., argN)
920
ABC_ACTION_CALLMETHOD = 0x43,
922
/// Stream: V32 'method_id' | V32 'arg_count'
924
/// obj -- the object to act as a receiver for the static call
925
/// arg1 ... argN -- the arg_count arguments to pass
927
/// value -- the value returned by obj->ABC::'method_id'(arg1, ..., argN)
928
ABC_ACTION_CALLSTATIC = 0x44,
930
/// Stream: V32 'name_offset' | V32 'arg_count'
932
/// obj -- the object whose super is to be called
933
/// [ns [n]] -- Namespace stuff
934
/// arg1 ... argN -- the arg_count arguments to pass
936
/// value -- the value returned by obj::(resolve)'name_offset'::super(arg1,
938
ABC_ACTION_CALLSUPER = 0x45,
940
/// Stream: V32 'name_offset' | V32 'arg_count'
942
/// obj -- The object whose property is to be accessed.
943
/// [ns [n]] -- Namespace stuff
944
/// arg1 ... argN -- the arg_count arguments to pass
946
/// value -- the value from obj::(resolve)'name_offset'(arg1, ..., argN)
947
/// NB: Calls getter/setter if they exist.
948
ABC_ACTION_CALLPROPERTY = 0x46,
950
/// Do: Return an Undefined object up the callstack.
951
ABC_ACTION_RETURNVOID = 0x47,
954
/// value -- value to be returned
957
/// Do: Return value up the callstack.
958
ABC_ACTION_RETURNVALUE = 0x48,
960
/// Stream: V32 'arg_count'
962
/// obj -- the object whose super's constructor should be invoked
963
/// arg1 ... argN -- the arg_count arguments
965
/// value -- obj after obj::super(arg1, ..., argN) has been invoked
966
ABC_ACTION_CONSTRUCTSUPER = 0x49,
968
/// Stream: V32 'name_offset' | V32 'arg_count'
970
/// obj -- the object whose property should be constructed
971
/// [ns [n]] -- Namespace stuff
972
/// arg1 ... argN -- the arg_count arguments to pass
974
/// value -- the newly constructed prop from obj::(resolve)
975
/// 'name_offset'(arg1, ..., argN)
976
ABC_ACTION_CONSTRUCTPROP = 0x4A,
978
/// Do: Nothing, this is an intermediate code op, should not appear in ABC.
979
ABC_ACTION_CALLSUPERID = 0x4B,
981
/// Stream: V32 'name_offset' | V32 'arg_count'
983
/// obj -- The object whose property is to be accessed.
984
/// [ns [n]] -- Namespace stuff
985
/// arg1 ... argN -- the arg_count arguments to pass
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,
992
/// Do: Nothing, this is an intermediate code op, should not appear in ABC.
993
ABC_ACTION_CALLINTERFACE = 0x4D,
995
/// See: 0x45 (ABC_ACTION_CALLSUPER), but
998
ABC_ACTION_CALLSUPERVOID = 0x4E,
1000
/// See: 0x46 (ABC_ACTION_CALLPROPERTY), but
1003
ABC_ACTION_CALLPROPVOID = 0x4F,
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,
1011
/// Stream: V32 'arg_count'
1013
/// prop_name_1 -- a string
1014
/// prop_value_1 -- a value object
1016
/// . (arg_count name/value pairs in all)
1018
/// prop_name_n -- a string
1019
/// prop_value_n -- a value object
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,
1025
/// Stream: V32 'array_size'
1027
/// value_1 -- a value
1029
/// . (array_size of these)
1031
/// value_n -- a value
1033
/// array -- an array { value_1, value_2, ..., value_n }
1034
ABC_ACTION_NEWARRAY = 0x56,
1037
/// vtable -- A new virtual table, which has the previous one as a parent.
1038
ABC_ACTION_NEWACTIVATION = 0x57,
1040
/// Stream: V32 'class_id'
1042
/// obj -- An object to be turned into a class
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,
1049
/// Stream: V32 'name_id'
1051
/// value -- Whose descendants to get
1052
/// [ns [n]] -- Namespace stuff
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,
1060
/// Stream: V32 'catch_id'
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,
1066
ABC_ACTION_0x5B = 0x5B,
1067
ABC_ACTION_0x5C = 0x5C,
1069
/// Stream: V32 'name_id'
1071
/// [ns [n]] -- Namespace stuff
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,
1077
/// Stream: V32 'name_id'
1079
/// [ns [n]] -- Namespace stuff
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,
1085
/// Stream: V32 'name_id' (no ns expansion)
1087
/// def -- The definition of the name at name_id.
1088
ABC_ACTION_FINDDEF = 0x5F,
1090
/// Stream: V32 'name_id' (no ns expansion)
1092
/// property -- The result of 0x5D (ABC_ACTION_FINDPROPSTRICT)
1093
/// + 0x66 (ABC_ACTION_GETPROPERTY)
1094
ABC_ACTION_GETLEX = 0x60,
1096
/// Stream: V32 'name_id'
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
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,
1108
/// Stream: V32 'frame_index'
1109
/// Frame: value at frame_index is needed
1112
ABC_ACTION_GETLOCAL = 0x62,
1114
/// Stream: V32 'frame_index'
1115
/// Frame: obj at frame_index is set to value
1120
ABC_ACTION_SETLOCAL = 0x63,
1123
/// global -- The global scope object
1124
ABC_ACTION_GETGLOBALSCOPE = 0x64,
1126
/// Stream: S8 'depth'
1128
/// scope -- The scope object at depth
1129
ABC_ACTION_GETSCOPEOBJECT = 0x65,
1131
/// Stream: V32 'name_id'
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.
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,
1142
ABC_ACTION_0x67 = 0x67,
1144
/// Stream V32 'name_id'
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.
1152
/// Set obj::(resolve)'name_id' to value, set bindings from the context.
1153
ABC_ACTION_INITPROPERTY = 0x68,
1155
ABC_ACTION_0x69 = 0x69,
1157
/// Stream: V32 'name_id'
1159
/// obj -- The object whose property should be deleted.
1160
/// [ns [n]] -- Namespace stuff
1162
/// truth -- True if property was deleted or did not exist, else False.
1163
ABC_ACTION_DELETEPROPERTY = 0x6A,
1165
ABC_ACTION_0x6B = 0x6B,
1167
/// Stream: V32 'slot_index + 1'
1169
/// obj -- The object which owns the desired slot.
1171
/// slot -- obj.slots[slot_index]
1172
ABC_ACTION_GETSLOT = 0x6C,
1174
/// Stream: V32 'slot_index + 1'
1176
/// obj -- The object whose slot should be set.
1177
/// value -- The value intended for the slot.
1180
/// Do: obj.slots[slot_index] = value
1181
ABC_ACTION_SETSLOT = 0x6D,
1183
/// Stream: V32 'slot_index + 1'
1187
/// slot -- globals.slots[slot_index]
1189
ABC_ACTION_GETGLOBALSLOT = 0x6E,
1191
/// Stream: V32 'slot_index + 1'
1193
/// value -- The value to be placed into the slot.
1196
/// Do: globals[slot_index] = value
1198
ABC_ACTION_SETGLOBALSLOT = 0x6F,
1201
/// value -- An object
1203
/// str_value -- value as a string
1204
ABC_ACTION_CONVERT_S = 0x70,
1207
/// value -- An object to be escaped
1209
/// str_value -- value as a string, escaped suitably for an XML element.
1210
ABC_ACTION_ESC_XELEM = 0x71,
1213
/// value -- An object to be escaped
1215
/// str_value -- value as a string, escaped suitably for an XML attribute.
1216
ABC_ACTION_ESC_XATTR = 0x72,
1219
/// value -- An object to be converted to Integer
1221
/// int_value -- value as an integer object
1222
ABC_ACTION_CONVERT_I = 0x73,
1225
/// value -- An object to be converted to unsigned integer
1227
/// int_value -- value as an unsigned integer object
1228
ABC_ACTION_CONVERT_U = 0X74,
1231
/// value -- An object to be converted to a double
1233
/// double_value -- value as a double object
1234
ABC_ACTION_CONVERT_D = 0X75,
1237
/// value -- An object to be converted to a boolean
1239
/// bool_value -- value as a boolean object
1240
ABC_ACTION_CONVERT_B = 0X76,
1243
/// obj -- An object
1245
/// obj -- An object
1246
/// Do: If obj is Undefined or Null, throw TypeError
1247
ABC_ACTION_CONVERT_O = 0X77,
1250
/// obj -- An object
1252
/// obj -- An object
1253
/// Do: If obj is not XML based, throw TypeError
1254
ABC_ACTION_CHECKFILTER = 0x78,
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,
1264
/// Stream: V32 'name_index'
1266
/// obj -- An object to be converted
1268
/// coerced_obj -- The object as the desired (resolve)'name_index' type.
1269
ABC_ACTION_COERCE = 0x80,
1271
/// See: 0x76 (ABC_ACTION_CONVERT_B)
1273
ABC_ACTION_COERCE_B = 0x81,
1276
/// obj -- An object to be converted
1279
/// Do: Nothing. (The 'a' is for atom, and this already is.)
1280
ABC_ACTION_COERCE_A = 0x82,
1282
/// See: 0x73 ABC_ACTION_CONVERT_I
1284
/// NOMING 20 Aug 2007
1285
ABC_ACTION_COERCE_I = 0x83,
1287
/// See: 0x75 ABC_ACTION_CONVERT_D
1289
/// NOMING 20 Aug 2007
1290
ABC_ACTION_COERCE_D = 0x84,
1293
/// obj -- An object to be converted
1295
/// str_obj -- obj as string. nullString object if obj is Null or Undefined
1296
ABC_ACTION_COERCE_S = 0x85,
1298
/// Stream: V32 'name_index' (no namespace)
1300
/// obj -- An object to be checked
1302
/// cobj -- obj if obj is of type (resolve)'name_index', otherwise Null
1303
ABC_ACTION_ASTYPE = 0x86,
1306
/// obj -- An object to be checked
1307
/// valid -- The object whose type is to be matched
1309
/// cobj -- obj if type of obj is type of valid, otherwise Null
1310
ABC_ACTION_ASTYPELATE = 0x87,
1312
/// See: 0x74 (ABC_ACTION_CONVERT_U)
1314
ABC_ACTION_COERCE_U = 0x88,
1317
/// obj -- An object
1319
/// cobj -- obj if obj is not Undefined, otherwise Null
1320
ABC_ACTION_COERCE_O = 0x89,
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,
1330
/// obj -- An object
1332
/// negdouble -- -1.0 * (double) obj
1333
ABC_ACTION_NEGATE = 0x90,
1336
/// num -- A number, integer or double
1338
/// num2 -- The same value, but new object.
1340
/// num = num + 1 (post-increment)
1341
ABC_ACTION_INCREMENT = 0x91,
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,
1349
/// num -- A number, integer or double
1351
/// num2 -- The same value, but new object.
1353
/// num = num - 1 (post-decrement)
1354
ABC_ACTION_DECREMENT = 0x93,
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,
1362
/// obj -- An object
1364
/// type -- typeof(obj)
1365
ABC_ACTION_ABC_TYPEOF = 0x95,
1368
/// obj -- An object
1370
/// nobj -- A truth object with value !((Boolean) obj)
1371
ABC_ACTION_NOT = 0x96,
1374
/// obj -- An object
1376
/// nint -- ~((Int) obj)
1377
ABC_ACTION_BITNOT = 0x97,
1379
ABC_ACTION_0x98 = 0x98,
1380
ABC_ACTION_0x99 = 0x99,
1382
/// NB: It is an error for this to appear.
1383
ABC_ACTION_CONCAT = 0x9A,
1385
/// NB: It is an error for this to appear.
1386
ABC_ACTION_ADD_D = 0x9B,
1388
ABC_ACTION_0x9C = 0x9C,
1389
ABC_ACTION_0x9D = 0x9D,
1390
ABC_ACTION_0x9E = 0x9E,
1391
ABC_ACTION_0x9F = 0x9F,
1397
/// a + b (double if numeric)
1398
ABC_ACTION_ADD = 0xA0,
1400
/// Stack In: /// Stack In:
1405
ABC_ACTION_SUBTRACT = 0xA1,
1412
ABC_ACTION_MULTIPLY = 0xA2,
1419
ABC_ACTION_DIVIDE = 0xA3,
1426
ABC_ACTION_MODULO = 0xA4,
1433
ABC_ACTION_LSHIFT = 0xA5,
1440
ABC_ACTION_RSHIFT = 0xA6,
1446
/// ((unsigned) a) >> b
1447
ABC_ACTION_URSHIFT = 0xA7,
1453
ABC_ACTION_BITAND = 0xA8,
1460
ABC_ACTION_BITOR = 0xA9,
1467
ABC_ACTION_BITXOR = 0xAA,
1473
/// truth -- Truth of (a == b) (weakly)
1474
ABC_ACTION_EQUALS = 0xAB,
1480
/// truth -- Truth of (a == b) (strongly, as in
1481
/// 0x19 (ABC_ACTION_IFSTRICTEQ))
1482
ABC_ACTION_STRICTEQUALS = 0xAC,
1488
/// truth -- Truth of (a < b)
1489
ABC_ACTION_LESSTHAN = 0xAD,
1495
/// truth -- Truth of (a <= b)
1496
ABC_ACTION_LESSEQUALS = 0xAE,
1502
/// truth -- Truth of (a > b)
1503
ABC_ACTION_GREATERTHAN = 0xAF,
1509
/// truth -- Truth of (a >= b)
1510
ABC_ACTION_GREATEREQUALS = 0xB0,
1513
/// val -- An object
1514
/// super -- An object
1516
/// truth -- Truth of "val is an instance of super"
1517
ABC_ACTION_INSTANCEOF = 0xB1,
1519
/// Stream: V32 'name_id'
1521
/// obj -- An object
1523
/// truth -- Truth of "obj is of the type given in (resolve)'name_id'"
1524
ABC_ACTION_ISTYPE = 0xB2,
1527
/// obj -- An object
1528
/// type -- A type to match
1530
/// truth -- Truth of "obj is of type"
1531
ABC_ACTION_ISTYPELATE = 0xB3,
1534
/// name -- The name to find
1535
/// obj -- The object to search for it
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,
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,
1553
/// See: 0x91 (ABC_ACTION_INCREMENT), but forces types to int, not double
1554
ABC_ACTION_INCREMENT_I = 0xC0,
1556
/// See: 0x93 (ABC_ACTION_DECREMENT), but forces types to int, not double
1557
ABC_ACTION_DECREMENT_I = 0xC1,
1559
/// See: 0x92 (ABC_ACTION_INCLOCAL), but forces types to int, not double
1560
ABC_ACTION_INCLOCAL_I = 0xC2,
1562
/// See: 0x94 (ABC_ACTION_DECLOCAL), but forces types to int, not double
1563
ABC_ACTION_DECLOCAL_I = 0xC3,
1565
/// See: 0x90 (ABC_ACTION_NEGATE), but forces type to int, not double
1566
ABC_ACTION_NEGATE_I = 0xC4,
1568
/// See: 0xA0 (ABC_ACTION_ADD), but forces type to int
1569
ABC_ACTION_ADD_I = 0xC5,
1571
/// See: 0xA1 (ABC_ACTION_SUBTRACT), but forces type to int
1572
ABC_ACTION_SUBTRACT_I = 0xC6,
1574
/// See: 0xA2 (ABC_ACTION_MULTIPLY), but forces type to int
1575
ABC_ACTION_MULTIPLY_I = 0xC7,
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,
1586
/// Frame: Load frame[0] as val
1589
ABC_ACTION_GETLOCAL0 = 0xD0,
1591
/// Frame: Load frame[1] as val
1594
ABC_ACTION_GETLOCAL1 = 0xD1,
1596
/// Frame: Load frame[2] as val
1599
ABC_ACTION_GETLOCAL2 = 0xD2,
1601
/// Frame: Load frame[3] as val
1604
ABC_ACTION_GETLOCAL3 = 0xD3,
1606
/// Frame: Store val as frame[0]
1611
ABC_ACTION_SETLOCAL0 = 0xD4,
1613
/// Frame: Store val as frame[1]
1618
ABC_ACTION_SETLOCAL1 = 0xD5,
1620
/// Frame: Store val as frame[2]
1625
ABC_ACTION_SETLOCAL2 = 0xD6,
1627
/// Frame: Store val as frame[3]
1632
ABC_ACTION_SETLOCAL3 = 0xD7,
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,
1657
/// NB: It is an error for this to appear.
1658
ABC_ACTION_ABS_JUMP = 0xEE,
1660
/// Stream: 7 bytes of unknown stuff to be skipped
1661
/// Do: skip ahead 7 bytes in stream
1662
ABC_ACTION_DEBUG = 0xEF,
1664
/// Stream: V32 'line_number'
1665
/// Do: Nothing, but line_number is for the debugger if wanted.
1666
ABC_ACTION_DEBUGLINE = 0xF0,
1668
/// Stream: V32 'name_offset'
1669
/// Do: Nothing. 'name_offset' into string pool is the file name if wanted.
1670
ABC_ACTION_DEBUGFILE = 0xF1,
1672
/// Stream: V32 'line_number'
1673
/// Do: Enter debugger if present, line_number is the line number in source.
1674
ABC_ACTION_BKPTLINE = 0xF2,
1677
ABC_ACTION_TIMESTAMP = 0xF3,
1679
ABC_ACTION_0xF4 = 0xF4,
1681
/// NB: It seems an error for this to appear.
1682
ABC_ACTION_VERIFYPASS = 0xF5,
1684
/// NB: Error to appear in ABC
1685
ABC_ACTION_ALLOC = 0xF6,
1687
/// NB: Error to appear in ABC
1688
ABC_ACTION_MARK = 0xF7,
1690
/// NB: Error to appear in ABC
1691
ABC_ACTION_WB = 0xF8,
1693
/// NB: Error to appear in ABC
1694
ABC_ACTION_PROLOGUE = 0xF9,
1696
/// NB: Error to appear in ABC
1697
ABC_ACTION_SENDENTER = 0xFA,
1699
/// NB: Error to appear in ABC
1700
ABC_ACTION_DOUBLETOATOM = 0xFB,
1702
/// NB: Error to appear in ABC
1703
ABC_ACTION_SWEEP = 0xFC,
1705
/// NB: Error to appear in ABC
1706
ABC_ACTION_CODEGENOP = 0xFD,
1708
/// NB: Error to appear in ABC
1709
ABC_ACTION_VERIFYOP = 0xFE
1714
/// SWF fill style types. Symbolic names copied from Ming.
1716
/// For more info see:
1717
/// http://sswf.sourceforge.net/SWFalexref.html#swf_fill_style
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,
1727
/// swf7, hard edges
1728
FILL_TILED_BITMAP_HARD = 0x42,
1730
/// swf7, hard edges
1731
FILL_CLIPPED_BITMAP_HARD = 0x43
1736
GRADIENT_SPREAD_PAD,
1737
GRADIENT_SPREAD_REFLECT,
1738
GRADIENT_SPREAD_REPEAT
1739
} gradient_spread_mode;
1742
GRADIENT_INTERPOL_NORMAL,
1743
GRADIENT_INTERPOL_LINEAR
1744
} gradient_interpolation_mode;
1749
} // namespace gnash::SWF
1751
} // namespace gnash
1754
#endif // GNASH_SWF_H