[Swfdec] 11 commits - libswfdec/js libswfdec/swfdec_loader.c
libswfdec/swfdec_root_sprite.c libswfdec/swfdec_script.c
player/swfdebug.c player/swfdec_player_manager.c test/trace
Benjamin Otte
company at kemper.freedesktop.org
Mon Mar 12 16:03:07 PDT 2007
libswfdec/js/jsapi.c | 3
libswfdec/js/jsapi.h | 2
libswfdec/js/jsinterp.c | 2
libswfdec/js/jsobj.c | 4
libswfdec/swfdec_loader.c | 5
libswfdec/swfdec_root_sprite.c | 5
libswfdec/swfdec_script.c | 154 +++++-
player/swfdebug.c | 8
player/swfdec_player_manager.c | 2
test/trace/Makefile.am | 8
test/trace/and-or-5.swf |binary
test/trace/and-or-5.swf.trace | 801 ++++++++++++++++++++++++++++++++
test/trace/and-or-6.swf |binary
test/trace/and-or-6.swf.trace | 649 +++++++++++++++++++++++++
test/trace/and-or-7.swf |binary
test/trace/and-or-7.swf.trace | 801 ++++++++++++++++++++++++++++++++
test/trace/undefined-tostring.swf |binary
test/trace/undefined-tostring.swf.trace | 3
18 files changed, 2428 insertions(+), 19 deletions(-)
New commits:
diff-tree d569f40ce1d270b721fd0b1fb12ed77a512d6e74 (from ff920ea3ce2cdfa2e16d1a7ee993bd221b94316d)
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Mar 13 00:03:07 2007 +0100
put the sprite id of the init action into the script name
diff --git a/libswfdec/swfdec_root_sprite.c b/libswfdec/swfdec_root_sprite.c
index e8e868b..1b41237 100644
--- a/libswfdec/swfdec_root_sprite.c
+++ b/libswfdec/swfdec_root_sprite.c
@@ -147,6 +147,7 @@ tag_func_do_init_action (SwfdecSwfDecode
SwfdecBits *bits = &s->b;
guint id;
SwfdecSprite *sprite;
+ char *name;
id = swfdec_bits_get_u16 (bits);
SWFDEC_LOG (" id = %u", id);
@@ -159,8 +160,10 @@ tag_func_do_init_action (SwfdecSwfDecode
SWFDEC_ERROR ("sprite %u already has an init action", id);
return SWFDEC_STATUS_OK;
}
+ name = g_strdup_printf ("InitAction %u", id);
sprite->init_action = swfdec_script_new_for_player (SWFDEC_DECODER (s)->player,
- bits, "InitAction", s->version);
+ bits, name, s->version);
+ g_free (name);
if (sprite->init_action) {
swfdec_script_ref (sprite->init_action);
swfdec_root_sprite_add_root_action (SWFDEC_ROOT_SPRITE (s->main_sprite),
diff-tree ff920ea3ce2cdfa2e16d1a7ee993bd221b94316d (from 472626b9c0ecf18ec535c3fb105fb1508be6e817)
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Mar 13 00:02:07 2007 +0100
Try to reverse engineer the function name for anonymous functions
diff --git a/libswfdec/swfdec_script.c b/libswfdec/swfdec_script.c
index bb56c19..ac47a97 100644
--- a/libswfdec/swfdec_script.c
+++ b/libswfdec/swfdec_script.c
@@ -1715,12 +1715,26 @@ swfdec_action_define_function (JSContext
return FALSE;
} else {
/* create the script */
+ const char *name = NULL;
SwfdecBuffer *buffer = swfdec_buffer_new_subbuffer (script->buffer,
cx->fp->pc + 3 + len - script->buffer->data, size);
swfdec_bits_init (&bits, buffer);
+ if (*function_name) {
+ name = function_name;
+ } else if (cx->fp->sp > cx->fp->spbase) {
+ /* This is kind of a hack that uses a feature of the Adobe compiler:
+ * foo = function () {} is compiled as these actions:
+ * Push "foo", DefineFunction, SetVariable/SetMember
+ * With this knowledge we can inspect the topmost stack member, since
+ * it will contain the name this function will soon be assigned to.
+ */
+ if (JSVAL_IS_STRING (cx->fp->sp[-1]))
+ name = JS_GetStringBytes (JSVAL_TO_STRING (cx->fp->sp[-1]));
+ }
+ if (name == NULL)
+ name = "unnamed_function";
script = swfdec_script_new_for_player (JS_GetContextPrivate (cx),
- &bits, *function_name ? function_name : "<lambda>",
- ((SwfdecScript *) cx->fp->swf)->version);
+ &bits, name, ((SwfdecScript *) cx->fp->swf)->version);
swfdec_buffer_unref (buffer);
if (cx->fp->constant_pool) {
script->constant_pool = swfdec_constant_pool_get_area (cx->fp->swf,
diff-tree 472626b9c0ecf18ec535c3fb105fb1508be6e817 (from 373087a199e661915222e8e4fd6a9bcfe292c373)
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Mar 12 22:30:30 2007 +0100
print ConstantPool id next to the string
diff --git a/libswfdec/swfdec_script.c b/libswfdec/swfdec_script.c
index 3d6a836..bb56c19 100644
--- a/libswfdec/swfdec_script.c
+++ b/libswfdec/swfdec_script.c
@@ -2344,6 +2344,7 @@ swfdec_action_print_constant_pool (guint
for (i = 0; i < swfdec_constant_pool_size (pool); i++) {
g_string_append (string, i ? ", " : " ");
g_string_append (string, swfdec_constant_pool_get (pool, i));
+ g_string_append_printf (string, " (%u)", i);
}
return g_string_free (string, FALSE);
}
diff-tree 373087a199e661915222e8e4fd6a9bcfe292c373 (from abee6c3ca4c2bc3e6337896746a47f8a6b7cb406)
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Mar 12 22:29:29 2007 +0100
some small fixes
- make all areas have full scrollbars, so there's no bigger-than-fullscreen window
- don't set an automatic breakpoint on empty functions
diff --git a/player/swfdebug.c b/player/swfdebug.c
index f5aa12b..acb7490 100644
--- a/player/swfdebug.c
+++ b/player/swfdebug.c
@@ -270,14 +270,14 @@ view_swf (SwfdecPlayer *player, double s
scroll = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_box_pack_start (GTK_BOX (hbox), scroll, TRUE, TRUE, 0);
widget = swfdec_debug_stack_new (manager);
gtk_container_add (GTK_CONTAINER (scroll), widget);
scroll = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+ GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
gtk_box_pack_start (GTK_BOX (vbox), scroll, TRUE, TRUE, 0);
widget = gtk_text_view_new ();
gtk_text_view_set_editable (GTK_TEXT_VIEW (widget), FALSE);
@@ -303,7 +303,9 @@ view_swf (SwfdecPlayer *player, double s
static void
do_break_cb (SwfdecDebugger *debugger, SwfdecDebuggerScript *script, gpointer unused)
{
- swfdec_debugger_set_breakpoint (debugger, script, 0);
+ /* no need tobreak on scripts that don't do anything, so no special case needed */
+ if (script->n_commands > 0)
+ swfdec_debugger_set_breakpoint (debugger, script, 0);
}
static gboolean
diff-tree abee6c3ca4c2bc3e6337896746a47f8a6b7cb406 (from e69a7f78da02f87b10450ac20995412909d916fc)
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Mar 12 22:28:31 2007 +0100
for absolute URIs, print a warning and then load them relative
This is strictly a Youtube fix :)
diff --git a/libswfdec/swfdec_loader.c b/libswfdec/swfdec_loader.c
index 8c85d81..22f418b 100644
--- a/libswfdec/swfdec_loader.c
+++ b/libswfdec/swfdec_loader.c
@@ -183,8 +183,9 @@ swfdec_file_loader_load (SwfdecLoader *l
GError *error = NULL;
if (g_path_is_absolute (url)) {
- SWFDEC_ERROR ("absolute paths are not allowed");
- return NULL;
+ SWFDEC_ERROR ("\"%s\" is an absolute path - using relative instead", url);
+ while (*url == G_DIR_SEPARATOR)
+ url++;
}
/* FIXME: need to rework seperators on windows? */
diff-tree e69a7f78da02f87b10450ac20995412909d916fc (from 05fe373cc29797c23c99d67ae5d61e7b50c7c4f3)
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Mar 12 22:06:50 2007 +0100
JSIDArrays have an unsigned length now
diff --git a/player/swfdec_player_manager.c b/player/swfdec_player_manager.c
index 1f6831c..1307c32 100644
--- a/player/swfdec_player_manager.c
+++ b/player/swfdec_player_manager.c
@@ -591,7 +591,7 @@ command_enumerate (SwfdecPlayerManager *
JSObject *obj;
JSIdArray *array;
const char *s, *t;
- int i;
+ guint i;
if (!swfdec_js_run (manager->player, arg, &rval)) {
swfdec_player_manager_error (manager, "Invalid command");
diff-tree 05fe373cc29797c23c99d67ae5d61e7b50c7c4f3 (from 40df9ed037067d3fce3c5da2a918881b97497523)
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Mar 12 22:06:28 2007 +0100
use swfdec_js_is_movieclip to get around undefined symbols
diff --git a/libswfdec/js/jsobj.c b/libswfdec/js/jsobj.c
index 81ac409..0f825ff 100644
--- a/libswfdec/js/jsobj.c
+++ b/libswfdec/js/jsobj.c
@@ -905,7 +905,7 @@ js_obj_toSource(JSContext *cx, JSObject
}
#endif /* JS_HAS_INITIALIZERS || JS_HAS_TOSOURCE */
-extern const JSClass movieclip_class;
+extern int swfdec_js_is_movieclip (JSContext *cx, JSObject *obj);
extern char *swfdec_movie_get_path (void *movieclip);
extern void g_free (void *p);
JSBool
@@ -921,7 +921,7 @@ js_obj_toString(JSContext *cx, JSObject
*rval = STRING_TO_JSVAL(cx->runtime->emptyString);
return JS_TRUE;
}
- if (clasp == &movieclip_class) {
+ if (swfdec_js_is_movieclip (cx, obj)) {
void *p = JS_GetPrivate (cx, obj);
if (p) {
char *path = swfdec_movie_get_path (p);
diff-tree 40df9ed037067d3fce3c5da2a918881b97497523 (from a40742304fe1d37a295f11b806da4b5550a18f04)
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Mar 12 21:39:06 2007 +0100
check undefined to string conversions
diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 131989d..ed2582f 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -150,6 +150,8 @@ EXTRA_DIST = \
transform2.swf \
transform2.swf.trace \
transform2.swf.trace.org \
+ undefined-tostring.swf \
+ undefined-tostring.swf.trace \
undefined1.swf \
undefined1.swf.trace \
undefined2-6.swf \
diff --git a/test/trace/undefined-tostring.swf b/test/trace/undefined-tostring.swf
new file mode 100755
index 0000000..a971a58
Binary files /dev/null and b/test/trace/undefined-tostring.swf differ
diff --git a/test/trace/undefined-tostring.swf.trace b/test/trace/undefined-tostring.swf.trace
new file mode 100755
index 0000000..6c96480
--- /dev/null
+++ b/test/trace/undefined-tostring.swf.trace
@@ -0,0 +1,3 @@
+Check undefined gets converted to the empty string
+undefined
+
diff-tree a40742304fe1d37a295f11b806da4b5550a18f04 (from 77266adc81a3093449703572a6123d71d33277d4)
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Mar 12 21:38:16 2007 +0100
test And and Or actions
diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 1994892..131989d 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -9,6 +9,12 @@ trace_LDFLAGS = $(SWF_LIBS) $(CAIRO_LIBS
EXTRA_DIST = \
README \
+ and-or-5.swf \
+ and-or-5.swf.trace \
+ and-or-6.swf \
+ and-or-6.swf.trace \
+ and-or-7.swf \
+ and-or-7.swf.trace \
array.swf \
array.swf.trace \
callfunction-stack.as \
diff --git a/test/trace/and-or-5.swf b/test/trace/and-or-5.swf
new file mode 100755
index 0000000..bbbb692
Binary files /dev/null and b/test/trace/and-or-5.swf differ
diff --git a/test/trace/and-or-5.swf.trace b/test/trace/and-or-5.swf.trace
new file mode 100755
index 0000000..f174da0
--- /dev/null
+++ b/test/trace/and-or-5.swf.trace
@@ -0,0 +1,801 @@
+Check AND and OR logical operators with various values
+true (boolean) AND true (boolean) = true
+true (boolean) OR true (boolean) = true
+true (boolean) AND false (boolean) = false
+true (boolean) OR false (boolean) = true
+true (boolean) AND 1 (number) = true
+true (boolean) OR 1 (number) = true
+true (boolean) AND 0 (number) = false
+true (boolean) OR 0 (number) = true
+true (boolean) AND 42 (number) = true
+true (boolean) OR 42 (number) = true
+true (boolean) AND -100000 (number) = true
+true (boolean) OR -100000 (number) = true
+true (boolean) AND (undefined) = false
+true (boolean) OR (undefined) = true
+true (boolean) AND null (null) = false
+true (boolean) OR null (null) = true
+true (boolean) AND _level0 (movieclip) = true
+true (boolean) OR _level0 (movieclip) = true
+true (boolean) AND [object Object] (object) = true
+true (boolean) OR [object Object] (object) = true
+true (boolean) AND hi (string) = false
+true (boolean) OR hi (string) = true
+true (boolean) AND 1 (string) = true
+true (boolean) OR 1 (string) = true
+true (boolean) AND 0 (string) = false
+true (boolean) OR 0 (string) = true
+true (boolean) AND (string) = false
+true (boolean) OR (string) = true
+true (boolean) AND 1 (number) = true
+true (boolean) OR 1 (number) = true
+true (boolean) AND 0 (number) = false
+true (boolean) OR 0 (number) = true
+true (boolean) AND 0 (number) = false
+true (boolean) OR 0 (number) = true
+true (boolean) AND -0.2 (number) = true
+true (boolean) OR -0.2 (number) = true
+true (boolean) AND NaN (number) = false
+true (boolean) OR NaN (number) = true
+true (boolean) AND Infinity (number) = true
+true (boolean) OR Infinity (number) = true
+false (boolean) AND true (boolean) = false
+false (boolean) OR true (boolean) = true
+false (boolean) AND false (boolean) = false
+false (boolean) OR false (boolean) = false
+false (boolean) AND 1 (number) = false
+false (boolean) OR 1 (number) = true
+false (boolean) AND 0 (number) = false
+false (boolean) OR 0 (number) = false
+false (boolean) AND 42 (number) = false
+false (boolean) OR 42 (number) = true
+false (boolean) AND -100000 (number) = false
+false (boolean) OR -100000 (number) = true
+false (boolean) AND (undefined) = false
+false (boolean) OR (undefined) = false
+false (boolean) AND null (null) = false
+false (boolean) OR null (null) = false
+false (boolean) AND _level0 (movieclip) = false
+false (boolean) OR _level0 (movieclip) = true
+false (boolean) AND [object Object] (object) = false
+false (boolean) OR [object Object] (object) = true
+false (boolean) AND hi (string) = false
+false (boolean) OR hi (string) = false
+false (boolean) AND 1 (string) = false
+false (boolean) OR 1 (string) = true
+false (boolean) AND 0 (string) = false
+false (boolean) OR 0 (string) = false
+false (boolean) AND (string) = false
+false (boolean) OR (string) = false
+false (boolean) AND 1 (number) = false
+false (boolean) OR 1 (number) = true
+false (boolean) AND 0 (number) = false
+false (boolean) OR 0 (number) = false
+false (boolean) AND 0 (number) = false
+false (boolean) OR 0 (number) = false
+false (boolean) AND -0.2 (number) = false
+false (boolean) OR -0.2 (number) = true
+false (boolean) AND NaN (number) = false
+false (boolean) OR NaN (number) = false
+false (boolean) AND Infinity (number) = false
+false (boolean) OR Infinity (number) = true
+1 (number) AND true (boolean) = true
+1 (number) OR true (boolean) = true
+1 (number) AND false (boolean) = false
+1 (number) OR false (boolean) = true
+1 (number) AND 1 (number) = true
+1 (number) OR 1 (number) = true
+1 (number) AND 0 (number) = false
+1 (number) OR 0 (number) = true
+1 (number) AND 42 (number) = true
+1 (number) OR 42 (number) = true
+1 (number) AND -100000 (number) = true
+1 (number) OR -100000 (number) = true
+1 (number) AND (undefined) = false
+1 (number) OR (undefined) = true
+1 (number) AND null (null) = false
+1 (number) OR null (null) = true
+1 (number) AND _level0 (movieclip) = true
+1 (number) OR _level0 (movieclip) = true
+1 (number) AND [object Object] (object) = true
+1 (number) OR [object Object] (object) = true
+1 (number) AND hi (string) = false
+1 (number) OR hi (string) = true
+1 (number) AND 1 (string) = true
+1 (number) OR 1 (string) = true
+1 (number) AND 0 (string) = false
+1 (number) OR 0 (string) = true
+1 (number) AND (string) = false
+1 (number) OR (string) = true
+1 (number) AND 1 (number) = true
+1 (number) OR 1 (number) = true
+1 (number) AND 0 (number) = false
+1 (number) OR 0 (number) = true
+1 (number) AND 0 (number) = false
+1 (number) OR 0 (number) = true
+1 (number) AND -0.2 (number) = true
+1 (number) OR -0.2 (number) = true
+1 (number) AND NaN (number) = false
+1 (number) OR NaN (number) = true
+1 (number) AND Infinity (number) = true
+1 (number) OR Infinity (number) = true
+0 (number) AND true (boolean) = false
+0 (number) OR true (boolean) = true
+0 (number) AND false (boolean) = false
+0 (number) OR false (boolean) = false
+0 (number) AND 1 (number) = false
+0 (number) OR 1 (number) = true
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND 42 (number) = false
+0 (number) OR 42 (number) = true
+0 (number) AND -100000 (number) = false
+0 (number) OR -100000 (number) = true
+0 (number) AND (undefined) = false
+0 (number) OR (undefined) = false
+0 (number) AND null (null) = false
+0 (number) OR null (null) = false
+0 (number) AND _level0 (movieclip) = false
+0 (number) OR _level0 (movieclip) = true
+0 (number) AND [object Object] (object) = false
+0 (number) OR [object Object] (object) = true
+0 (number) AND hi (string) = false
+0 (number) OR hi (string) = false
+0 (number) AND 1 (string) = false
+0 (number) OR 1 (string) = true
+0 (number) AND 0 (string) = false
+0 (number) OR 0 (string) = false
+0 (number) AND (string) = false
+0 (number) OR (string) = false
+0 (number) AND 1 (number) = false
+0 (number) OR 1 (number) = true
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND -0.2 (number) = false
+0 (number) OR -0.2 (number) = true
+0 (number) AND NaN (number) = false
+0 (number) OR NaN (number) = false
+0 (number) AND Infinity (number) = false
+0 (number) OR Infinity (number) = true
+42 (number) AND true (boolean) = true
+42 (number) OR true (boolean) = true
+42 (number) AND false (boolean) = false
+42 (number) OR false (boolean) = true
+42 (number) AND 1 (number) = true
+42 (number) OR 1 (number) = true
+42 (number) AND 0 (number) = false
+42 (number) OR 0 (number) = true
+42 (number) AND 42 (number) = true
+42 (number) OR 42 (number) = true
+42 (number) AND -100000 (number) = true
+42 (number) OR -100000 (number) = true
+42 (number) AND (undefined) = false
+42 (number) OR (undefined) = true
+42 (number) AND null (null) = false
+42 (number) OR null (null) = true
+42 (number) AND _level0 (movieclip) = true
+42 (number) OR _level0 (movieclip) = true
+42 (number) AND [object Object] (object) = true
+42 (number) OR [object Object] (object) = true
+42 (number) AND hi (string) = false
+42 (number) OR hi (string) = true
+42 (number) AND 1 (string) = true
+42 (number) OR 1 (string) = true
+42 (number) AND 0 (string) = false
+42 (number) OR 0 (string) = true
+42 (number) AND (string) = false
+42 (number) OR (string) = true
+42 (number) AND 1 (number) = true
+42 (number) OR 1 (number) = true
+42 (number) AND 0 (number) = false
+42 (number) OR 0 (number) = true
+42 (number) AND 0 (number) = false
+42 (number) OR 0 (number) = true
+42 (number) AND -0.2 (number) = true
+42 (number) OR -0.2 (number) = true
+42 (number) AND NaN (number) = false
+42 (number) OR NaN (number) = true
+42 (number) AND Infinity (number) = true
+42 (number) OR Infinity (number) = true
+-100000 (number) AND true (boolean) = true
+-100000 (number) OR true (boolean) = true
+-100000 (number) AND false (boolean) = false
+-100000 (number) OR false (boolean) = true
+-100000 (number) AND 1 (number) = true
+-100000 (number) OR 1 (number) = true
+-100000 (number) AND 0 (number) = false
+-100000 (number) OR 0 (number) = true
+-100000 (number) AND 42 (number) = true
+-100000 (number) OR 42 (number) = true
+-100000 (number) AND -100000 (number) = true
+-100000 (number) OR -100000 (number) = true
+-100000 (number) AND (undefined) = false
+-100000 (number) OR (undefined) = true
+-100000 (number) AND null (null) = false
+-100000 (number) OR null (null) = true
+-100000 (number) AND _level0 (movieclip) = true
+-100000 (number) OR _level0 (movieclip) = true
+-100000 (number) AND [object Object] (object) = true
+-100000 (number) OR [object Object] (object) = true
+-100000 (number) AND hi (string) = false
+-100000 (number) OR hi (string) = true
+-100000 (number) AND 1 (string) = true
+-100000 (number) OR 1 (string) = true
+-100000 (number) AND 0 (string) = false
+-100000 (number) OR 0 (string) = true
+-100000 (number) AND (string) = false
+-100000 (number) OR (string) = true
+-100000 (number) AND 1 (number) = true
+-100000 (number) OR 1 (number) = true
+-100000 (number) AND 0 (number) = false
+-100000 (number) OR 0 (number) = true
+-100000 (number) AND 0 (number) = false
+-100000 (number) OR 0 (number) = true
+-100000 (number) AND -0.2 (number) = true
+-100000 (number) OR -0.2 (number) = true
+-100000 (number) AND NaN (number) = false
+-100000 (number) OR NaN (number) = true
+-100000 (number) AND Infinity (number) = true
+-100000 (number) OR Infinity (number) = true
+ (undefined) AND true (boolean) = false
+ (undefined) OR true (boolean) = true
+ (undefined) AND false (boolean) = false
+ (undefined) OR false (boolean) = false
+ (undefined) AND 1 (number) = false
+ (undefined) OR 1 (number) = true
+ (undefined) AND 0 (number) = false
+ (undefined) OR 0 (number) = false
+ (undefined) AND 42 (number) = false
+ (undefined) OR 42 (number) = true
+ (undefined) AND -100000 (number) = false
+ (undefined) OR -100000 (number) = true
+ (undefined) AND (undefined) = false
+ (undefined) OR (undefined) = false
+ (undefined) AND null (null) = false
+ (undefined) OR null (null) = false
+ (undefined) AND _level0 (movieclip) = false
+ (undefined) OR _level0 (movieclip) = true
+ (undefined) AND [object Object] (object) = false
+ (undefined) OR [object Object] (object) = true
+ (undefined) AND hi (string) = false
+ (undefined) OR hi (string) = false
+ (undefined) AND 1 (string) = false
+ (undefined) OR 1 (string) = true
+ (undefined) AND 0 (string) = false
+ (undefined) OR 0 (string) = false
+ (undefined) AND (string) = false
+ (undefined) OR (string) = false
+ (undefined) AND 1 (number) = false
+ (undefined) OR 1 (number) = true
+ (undefined) AND 0 (number) = false
+ (undefined) OR 0 (number) = false
+ (undefined) AND 0 (number) = false
+ (undefined) OR 0 (number) = false
+ (undefined) AND -0.2 (number) = false
+ (undefined) OR -0.2 (number) = true
+ (undefined) AND NaN (number) = false
+ (undefined) OR NaN (number) = false
+ (undefined) AND Infinity (number) = false
+ (undefined) OR Infinity (number) = true
+null (null) AND true (boolean) = false
+null (null) OR true (boolean) = true
+null (null) AND false (boolean) = false
+null (null) OR false (boolean) = false
+null (null) AND 1 (number) = false
+null (null) OR 1 (number) = true
+null (null) AND 0 (number) = false
+null (null) OR 0 (number) = false
+null (null) AND 42 (number) = false
+null (null) OR 42 (number) = true
+null (null) AND -100000 (number) = false
+null (null) OR -100000 (number) = true
+null (null) AND (undefined) = false
+null (null) OR (undefined) = false
+null (null) AND null (null) = false
+null (null) OR null (null) = false
+null (null) AND _level0 (movieclip) = false
+null (null) OR _level0 (movieclip) = true
+null (null) AND [object Object] (object) = false
+null (null) OR [object Object] (object) = true
+null (null) AND hi (string) = false
+null (null) OR hi (string) = false
+null (null) AND 1 (string) = false
+null (null) OR 1 (string) = true
+null (null) AND 0 (string) = false
+null (null) OR 0 (string) = false
+null (null) AND (string) = false
+null (null) OR (string) = false
+null (null) AND 1 (number) = false
+null (null) OR 1 (number) = true
+null (null) AND 0 (number) = false
+null (null) OR 0 (number) = false
+null (null) AND 0 (number) = false
+null (null) OR 0 (number) = false
+null (null) AND -0.2 (number) = false
+null (null) OR -0.2 (number) = true
+null (null) AND NaN (number) = false
+null (null) OR NaN (number) = false
+null (null) AND Infinity (number) = false
+null (null) OR Infinity (number) = true
+_level0 (movieclip) AND true (boolean) = true
+_level0 (movieclip) OR true (boolean) = true
+_level0 (movieclip) AND false (boolean) = false
+_level0 (movieclip) OR false (boolean) = true
+_level0 (movieclip) AND 1 (number) = true
+_level0 (movieclip) OR 1 (number) = true
+_level0 (movieclip) AND 0 (number) = false
+_level0 (movieclip) OR 0 (number) = true
+_level0 (movieclip) AND 42 (number) = true
+_level0 (movieclip) OR 42 (number) = true
+_level0 (movieclip) AND -100000 (number) = true
+_level0 (movieclip) OR -100000 (number) = true
+_level0 (movieclip) AND (undefined) = false
+_level0 (movieclip) OR (undefined) = true
+_level0 (movieclip) AND null (null) = false
+_level0 (movieclip) OR null (null) = true
+_level0 (movieclip) AND _level0 (movieclip) = true
+_level0 (movieclip) OR _level0 (movieclip) = true
+_level0 (movieclip) AND [object Object] (object) = true
+_level0 (movieclip) OR [object Object] (object) = true
+_level0 (movieclip) AND hi (string) = false
+_level0 (movieclip) OR hi (string) = true
+_level0 (movieclip) AND 1 (string) = true
+_level0 (movieclip) OR 1 (string) = true
+_level0 (movieclip) AND 0 (string) = false
+_level0 (movieclip) OR 0 (string) = true
+_level0 (movieclip) AND (string) = false
+_level0 (movieclip) OR (string) = true
+_level0 (movieclip) AND 1 (number) = true
+_level0 (movieclip) OR 1 (number) = true
+_level0 (movieclip) AND 0 (number) = false
+_level0 (movieclip) OR 0 (number) = true
+_level0 (movieclip) AND 0 (number) = false
+_level0 (movieclip) OR 0 (number) = true
+_level0 (movieclip) AND -0.2 (number) = true
+_level0 (movieclip) OR -0.2 (number) = true
+_level0 (movieclip) AND NaN (number) = false
+_level0 (movieclip) OR NaN (number) = true
+_level0 (movieclip) AND Infinity (number) = true
+_level0 (movieclip) OR Infinity (number) = true
+[object Object] (object) AND true (boolean) = true
+[object Object] (object) OR true (boolean) = true
+[object Object] (object) AND false (boolean) = false
+[object Object] (object) OR false (boolean) = true
+[object Object] (object) AND 1 (number) = true
+[object Object] (object) OR 1 (number) = true
+[object Object] (object) AND 0 (number) = false
+[object Object] (object) OR 0 (number) = true
+[object Object] (object) AND 42 (number) = true
+[object Object] (object) OR 42 (number) = true
+[object Object] (object) AND -100000 (number) = true
+[object Object] (object) OR -100000 (number) = true
+[object Object] (object) AND (undefined) = false
+[object Object] (object) OR (undefined) = true
+[object Object] (object) AND null (null) = false
+[object Object] (object) OR null (null) = true
+[object Object] (object) AND _level0 (movieclip) = true
+[object Object] (object) OR _level0 (movieclip) = true
+[object Object] (object) AND [object Object] (object) = true
+[object Object] (object) OR [object Object] (object) = true
+[object Object] (object) AND hi (string) = false
+[object Object] (object) OR hi (string) = true
+[object Object] (object) AND 1 (string) = true
+[object Object] (object) OR 1 (string) = true
+[object Object] (object) AND 0 (string) = false
+[object Object] (object) OR 0 (string) = true
+[object Object] (object) AND (string) = false
+[object Object] (object) OR (string) = true
+[object Object] (object) AND 1 (number) = true
+[object Object] (object) OR 1 (number) = true
+[object Object] (object) AND 0 (number) = false
+[object Object] (object) OR 0 (number) = true
+[object Object] (object) AND 0 (number) = false
+[object Object] (object) OR 0 (number) = true
+[object Object] (object) AND -0.2 (number) = true
+[object Object] (object) OR -0.2 (number) = true
+[object Object] (object) AND NaN (number) = false
+[object Object] (object) OR NaN (number) = true
+[object Object] (object) AND Infinity (number) = true
+[object Object] (object) OR Infinity (number) = true
+hi (string) AND true (boolean) = false
+hi (string) OR true (boolean) = true
+hi (string) AND false (boolean) = false
+hi (string) OR false (boolean) = false
+hi (string) AND 1 (number) = false
+hi (string) OR 1 (number) = true
+hi (string) AND 0 (number) = false
+hi (string) OR 0 (number) = false
+hi (string) AND 42 (number) = false
+hi (string) OR 42 (number) = true
+hi (string) AND -100000 (number) = false
+hi (string) OR -100000 (number) = true
+hi (string) AND (undefined) = false
+hi (string) OR (undefined) = false
+hi (string) AND null (null) = false
+hi (string) OR null (null) = false
+hi (string) AND _level0 (movieclip) = false
+hi (string) OR _level0 (movieclip) = true
+hi (string) AND [object Object] (object) = false
+hi (string) OR [object Object] (object) = true
+hi (string) AND hi (string) = false
+hi (string) OR hi (string) = false
+hi (string) AND 1 (string) = false
+hi (string) OR 1 (string) = true
+hi (string) AND 0 (string) = false
+hi (string) OR 0 (string) = false
+hi (string) AND (string) = false
+hi (string) OR (string) = false
+hi (string) AND 1 (number) = false
+hi (string) OR 1 (number) = true
+hi (string) AND 0 (number) = false
+hi (string) OR 0 (number) = false
+hi (string) AND 0 (number) = false
+hi (string) OR 0 (number) = false
+hi (string) AND -0.2 (number) = false
+hi (string) OR -0.2 (number) = true
+hi (string) AND NaN (number) = false
+hi (string) OR NaN (number) = false
+hi (string) AND Infinity (number) = false
+hi (string) OR Infinity (number) = true
+1 (string) AND true (boolean) = true
+1 (string) OR true (boolean) = true
+1 (string) AND false (boolean) = false
+1 (string) OR false (boolean) = true
+1 (string) AND 1 (number) = true
+1 (string) OR 1 (number) = true
+1 (string) AND 0 (number) = false
+1 (string) OR 0 (number) = true
+1 (string) AND 42 (number) = true
+1 (string) OR 42 (number) = true
+1 (string) AND -100000 (number) = true
+1 (string) OR -100000 (number) = true
+1 (string) AND (undefined) = false
+1 (string) OR (undefined) = true
+1 (string) AND null (null) = false
+1 (string) OR null (null) = true
+1 (string) AND _level0 (movieclip) = true
+1 (string) OR _level0 (movieclip) = true
+1 (string) AND [object Object] (object) = true
+1 (string) OR [object Object] (object) = true
+1 (string) AND hi (string) = false
+1 (string) OR hi (string) = true
+1 (string) AND 1 (string) = true
+1 (string) OR 1 (string) = true
+1 (string) AND 0 (string) = false
+1 (string) OR 0 (string) = true
+1 (string) AND (string) = false
+1 (string) OR (string) = true
+1 (string) AND 1 (number) = true
+1 (string) OR 1 (number) = true
+1 (string) AND 0 (number) = false
+1 (string) OR 0 (number) = true
+1 (string) AND 0 (number) = false
+1 (string) OR 0 (number) = true
+1 (string) AND -0.2 (number) = true
+1 (string) OR -0.2 (number) = true
+1 (string) AND NaN (number) = false
+1 (string) OR NaN (number) = true
+1 (string) AND Infinity (number) = true
+1 (string) OR Infinity (number) = true
+0 (string) AND true (boolean) = false
+0 (string) OR true (boolean) = true
+0 (string) AND false (boolean) = false
+0 (string) OR false (boolean) = false
+0 (string) AND 1 (number) = false
+0 (string) OR 1 (number) = true
+0 (string) AND 0 (number) = false
+0 (string) OR 0 (number) = false
+0 (string) AND 42 (number) = false
+0 (string) OR 42 (number) = true
+0 (string) AND -100000 (number) = false
+0 (string) OR -100000 (number) = true
+0 (string) AND (undefined) = false
+0 (string) OR (undefined) = false
+0 (string) AND null (null) = false
+0 (string) OR null (null) = false
+0 (string) AND _level0 (movieclip) = false
+0 (string) OR _level0 (movieclip) = true
+0 (string) AND [object Object] (object) = false
+0 (string) OR [object Object] (object) = true
+0 (string) AND hi (string) = false
+0 (string) OR hi (string) = false
+0 (string) AND 1 (string) = false
+0 (string) OR 1 (string) = true
+0 (string) AND 0 (string) = false
+0 (string) OR 0 (string) = false
+0 (string) AND (string) = false
+0 (string) OR (string) = false
+0 (string) AND 1 (number) = false
+0 (string) OR 1 (number) = true
+0 (string) AND 0 (number) = false
+0 (string) OR 0 (number) = false
+0 (string) AND 0 (number) = false
+0 (string) OR 0 (number) = false
+0 (string) AND -0.2 (number) = false
+0 (string) OR -0.2 (number) = true
+0 (string) AND NaN (number) = false
+0 (string) OR NaN (number) = false
+0 (string) AND Infinity (number) = false
+0 (string) OR Infinity (number) = true
+ (string) AND true (boolean) = false
+ (string) OR true (boolean) = true
+ (string) AND false (boolean) = false
+ (string) OR false (boolean) = false
+ (string) AND 1 (number) = false
+ (string) OR 1 (number) = true
+ (string) AND 0 (number) = false
+ (string) OR 0 (number) = false
+ (string) AND 42 (number) = false
+ (string) OR 42 (number) = true
+ (string) AND -100000 (number) = false
+ (string) OR -100000 (number) = true
+ (string) AND (undefined) = false
+ (string) OR (undefined) = false
+ (string) AND null (null) = false
+ (string) OR null (null) = false
+ (string) AND _level0 (movieclip) = false
+ (string) OR _level0 (movieclip) = true
+ (string) AND [object Object] (object) = false
+ (string) OR [object Object] (object) = true
+ (string) AND hi (string) = false
+ (string) OR hi (string) = false
+ (string) AND 1 (string) = false
+ (string) OR 1 (string) = true
+ (string) AND 0 (string) = false
+ (string) OR 0 (string) = false
+ (string) AND (string) = false
+ (string) OR (string) = false
+ (string) AND 1 (number) = false
+ (string) OR 1 (number) = true
+ (string) AND 0 (number) = false
+ (string) OR 0 (number) = false
+ (string) AND 0 (number) = false
+ (string) OR 0 (number) = false
+ (string) AND -0.2 (number) = false
+ (string) OR -0.2 (number) = true
+ (string) AND NaN (number) = false
+ (string) OR NaN (number) = false
+ (string) AND Infinity (number) = false
+ (string) OR Infinity (number) = true
+1 (number) AND true (boolean) = true
+1 (number) OR true (boolean) = true
+1 (number) AND false (boolean) = false
+1 (number) OR false (boolean) = true
+1 (number) AND 1 (number) = true
+1 (number) OR 1 (number) = true
+1 (number) AND 0 (number) = false
+1 (number) OR 0 (number) = true
+1 (number) AND 42 (number) = true
+1 (number) OR 42 (number) = true
+1 (number) AND -100000 (number) = true
+1 (number) OR -100000 (number) = true
+1 (number) AND (undefined) = false
+1 (number) OR (undefined) = true
+1 (number) AND null (null) = false
+1 (number) OR null (null) = true
+1 (number) AND _level0 (movieclip) = true
+1 (number) OR _level0 (movieclip) = true
+1 (number) AND [object Object] (object) = true
+1 (number) OR [object Object] (object) = true
+1 (number) AND hi (string) = false
+1 (number) OR hi (string) = true
+1 (number) AND 1 (string) = true
+1 (number) OR 1 (string) = true
+1 (number) AND 0 (string) = false
+1 (number) OR 0 (string) = true
+1 (number) AND (string) = false
+1 (number) OR (string) = true
+1 (number) AND 1 (number) = true
+1 (number) OR 1 (number) = true
+1 (number) AND 0 (number) = false
+1 (number) OR 0 (number) = true
+1 (number) AND 0 (number) = false
+1 (number) OR 0 (number) = true
+1 (number) AND -0.2 (number) = true
+1 (number) OR -0.2 (number) = true
+1 (number) AND NaN (number) = false
+1 (number) OR NaN (number) = true
+1 (number) AND Infinity (number) = true
+1 (number) OR Infinity (number) = true
+0 (number) AND true (boolean) = false
+0 (number) OR true (boolean) = true
+0 (number) AND false (boolean) = false
+0 (number) OR false (boolean) = false
+0 (number) AND 1 (number) = false
+0 (number) OR 1 (number) = true
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND 42 (number) = false
+0 (number) OR 42 (number) = true
+0 (number) AND -100000 (number) = false
+0 (number) OR -100000 (number) = true
+0 (number) AND (undefined) = false
+0 (number) OR (undefined) = false
+0 (number) AND null (null) = false
+0 (number) OR null (null) = false
+0 (number) AND _level0 (movieclip) = false
+0 (number) OR _level0 (movieclip) = true
+0 (number) AND [object Object] (object) = false
+0 (number) OR [object Object] (object) = true
+0 (number) AND hi (string) = false
+0 (number) OR hi (string) = false
+0 (number) AND 1 (string) = false
+0 (number) OR 1 (string) = true
+0 (number) AND 0 (string) = false
+0 (number) OR 0 (string) = false
+0 (number) AND (string) = false
+0 (number) OR (string) = false
+0 (number) AND 1 (number) = false
+0 (number) OR 1 (number) = true
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND -0.2 (number) = false
+0 (number) OR -0.2 (number) = true
+0 (number) AND NaN (number) = false
+0 (number) OR NaN (number) = false
+0 (number) AND Infinity (number) = false
+0 (number) OR Infinity (number) = true
+0 (number) AND true (boolean) = false
+0 (number) OR true (boolean) = true
+0 (number) AND false (boolean) = false
+0 (number) OR false (boolean) = false
+0 (number) AND 1 (number) = false
+0 (number) OR 1 (number) = true
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND 42 (number) = false
+0 (number) OR 42 (number) = true
+0 (number) AND -100000 (number) = false
+0 (number) OR -100000 (number) = true
+0 (number) AND (undefined) = false
+0 (number) OR (undefined) = false
+0 (number) AND null (null) = false
+0 (number) OR null (null) = false
+0 (number) AND _level0 (movieclip) = false
+0 (number) OR _level0 (movieclip) = true
+0 (number) AND [object Object] (object) = false
+0 (number) OR [object Object] (object) = true
+0 (number) AND hi (string) = false
+0 (number) OR hi (string) = false
+0 (number) AND 1 (string) = false
+0 (number) OR 1 (string) = true
+0 (number) AND 0 (string) = false
+0 (number) OR 0 (string) = false
+0 (number) AND (string) = false
+0 (number) OR (string) = false
+0 (number) AND 1 (number) = false
+0 (number) OR 1 (number) = true
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND -0.2 (number) = false
+0 (number) OR -0.2 (number) = true
+0 (number) AND NaN (number) = false
+0 (number) OR NaN (number) = false
+0 (number) AND Infinity (number) = false
+0 (number) OR Infinity (number) = true
+-0.2 (number) AND true (boolean) = true
+-0.2 (number) OR true (boolean) = true
+-0.2 (number) AND false (boolean) = false
+-0.2 (number) OR false (boolean) = true
+-0.2 (number) AND 1 (number) = true
+-0.2 (number) OR 1 (number) = true
+-0.2 (number) AND 0 (number) = false
+-0.2 (number) OR 0 (number) = true
+-0.2 (number) AND 42 (number) = true
+-0.2 (number) OR 42 (number) = true
+-0.2 (number) AND -100000 (number) = true
+-0.2 (number) OR -100000 (number) = true
+-0.2 (number) AND (undefined) = false
+-0.2 (number) OR (undefined) = true
+-0.2 (number) AND null (null) = false
+-0.2 (number) OR null (null) = true
+-0.2 (number) AND _level0 (movieclip) = true
+-0.2 (number) OR _level0 (movieclip) = true
+-0.2 (number) AND [object Object] (object) = true
+-0.2 (number) OR [object Object] (object) = true
+-0.2 (number) AND hi (string) = false
+-0.2 (number) OR hi (string) = true
+-0.2 (number) AND 1 (string) = true
+-0.2 (number) OR 1 (string) = true
+-0.2 (number) AND 0 (string) = false
+-0.2 (number) OR 0 (string) = true
+-0.2 (number) AND (string) = false
+-0.2 (number) OR (string) = true
+-0.2 (number) AND 1 (number) = true
+-0.2 (number) OR 1 (number) = true
+-0.2 (number) AND 0 (number) = false
+-0.2 (number) OR 0 (number) = true
+-0.2 (number) AND 0 (number) = false
+-0.2 (number) OR 0 (number) = true
+-0.2 (number) AND -0.2 (number) = true
+-0.2 (number) OR -0.2 (number) = true
+-0.2 (number) AND NaN (number) = false
+-0.2 (number) OR NaN (number) = true
+-0.2 (number) AND Infinity (number) = true
+-0.2 (number) OR Infinity (number) = true
+NaN (number) AND true (boolean) = false
+NaN (number) OR true (boolean) = true
+NaN (number) AND false (boolean) = false
+NaN (number) OR false (boolean) = false
+NaN (number) AND 1 (number) = false
+NaN (number) OR 1 (number) = true
+NaN (number) AND 0 (number) = false
+NaN (number) OR 0 (number) = false
+NaN (number) AND 42 (number) = false
+NaN (number) OR 42 (number) = true
+NaN (number) AND -100000 (number) = false
+NaN (number) OR -100000 (number) = true
+NaN (number) AND (undefined) = false
+NaN (number) OR (undefined) = false
+NaN (number) AND null (null) = false
+NaN (number) OR null (null) = false
+NaN (number) AND _level0 (movieclip) = false
+NaN (number) OR _level0 (movieclip) = true
+NaN (number) AND [object Object] (object) = false
+NaN (number) OR [object Object] (object) = true
+NaN (number) AND hi (string) = false
+NaN (number) OR hi (string) = false
+NaN (number) AND 1 (string) = false
+NaN (number) OR 1 (string) = true
+NaN (number) AND 0 (string) = false
+NaN (number) OR 0 (string) = false
+NaN (number) AND (string) = false
+NaN (number) OR (string) = false
+NaN (number) AND 1 (number) = false
+NaN (number) OR 1 (number) = true
+NaN (number) AND 0 (number) = false
+NaN (number) OR 0 (number) = false
+NaN (number) AND 0 (number) = false
+NaN (number) OR 0 (number) = false
+NaN (number) AND -0.2 (number) = false
+NaN (number) OR -0.2 (number) = true
+NaN (number) AND NaN (number) = false
+NaN (number) OR NaN (number) = false
+NaN (number) AND Infinity (number) = false
+NaN (number) OR Infinity (number) = true
+Infinity (number) AND true (boolean) = true
+Infinity (number) OR true (boolean) = true
+Infinity (number) AND false (boolean) = false
+Infinity (number) OR false (boolean) = true
+Infinity (number) AND 1 (number) = true
+Infinity (number) OR 1 (number) = true
+Infinity (number) AND 0 (number) = false
+Infinity (number) OR 0 (number) = true
+Infinity (number) AND 42 (number) = true
+Infinity (number) OR 42 (number) = true
+Infinity (number) AND -100000 (number) = true
+Infinity (number) OR -100000 (number) = true
+Infinity (number) AND (undefined) = false
+Infinity (number) OR (undefined) = true
+Infinity (number) AND null (null) = false
+Infinity (number) OR null (null) = true
+Infinity (number) AND _level0 (movieclip) = true
+Infinity (number) OR _level0 (movieclip) = true
+Infinity (number) AND [object Object] (object) = true
+Infinity (number) OR [object Object] (object) = true
+Infinity (number) AND hi (string) = false
+Infinity (number) OR hi (string) = true
+Infinity (number) AND 1 (string) = true
+Infinity (number) OR 1 (string) = true
+Infinity (number) AND 0 (string) = false
+Infinity (number) OR 0 (string) = true
+Infinity (number) AND (string) = false
+Infinity (number) OR (string) = true
+Infinity (number) AND 1 (number) = true
+Infinity (number) OR 1 (number) = true
+Infinity (number) AND 0 (number) = false
+Infinity (number) OR 0 (number) = true
+Infinity (number) AND 0 (number) = false
+Infinity (number) OR 0 (number) = true
+Infinity (number) AND -0.2 (number) = true
+Infinity (number) OR -0.2 (number) = true
+Infinity (number) AND NaN (number) = false
+Infinity (number) OR NaN (number) = true
+Infinity (number) AND Infinity (number) = true
+Infinity (number) OR Infinity (number) = true
diff --git a/test/trace/and-or-6.swf b/test/trace/and-or-6.swf
new file mode 100755
index 0000000..6bf0429
Binary files /dev/null and b/test/trace/and-or-6.swf differ
diff --git a/test/trace/and-or-6.swf.trace b/test/trace/and-or-6.swf.trace
new file mode 100755
index 0000000..0e31c9a
--- /dev/null
+++ b/test/trace/and-or-6.swf.trace
@@ -0,0 +1,649 @@
+Check AND and OR logical operators with various values
+true (boolean) AND true (boolean) = true
+true (boolean) OR true (boolean) = true
+true (boolean) AND false (boolean) = false
+true (boolean) OR false (boolean) = true
+true (boolean) AND 1 (number) = true
+true (boolean) OR 1 (number) = true
+true (boolean) AND 0 (number) = false
+true (boolean) OR 0 (number) = true
+true (boolean) AND 42 (number) = true
+true (boolean) OR 42 (number) = true
+true (boolean) AND -100000 (number) = true
+true (boolean) OR -100000 (number) = true
+true (boolean) AND (undefined) = false
+true (boolean) OR (undefined) = true
+true (boolean) AND null (null) = false
+true (boolean) OR null (null) = true
+true (boolean) AND _level0 (movieclip) = true
+true (boolean) OR _level0 (movieclip) = true
+true (boolean) AND [object Object] (object) = true
+true (boolean) OR [object Object] (object) = true
+true (boolean) AND hi (string) = false
+true (boolean) OR hi (string) = true
+true (boolean) AND 1 (string) = true
+true (boolean) OR 1 (string) = true
+true (boolean) AND 0 (string) = false
+true (boolean) OR 0 (string) = true
+true (boolean) AND (string) = false
+true (boolean) OR (string) = true
+true (boolean) AND 1 (number) = true
+true (boolean) OR 1 (number) = true
+true (boolean) AND 0 (number) = false
+true (boolean) OR 0 (number) = true
+true (boolean) AND 0 (number) = false
+true (boolean) OR 0 (number) = true
+true (boolean) AND -0.2 (number) = true
+true (boolean) OR -0.2 (number) = true
+false (boolean) AND true (boolean) = false
+false (boolean) OR true (boolean) = true
+false (boolean) AND false (boolean) = false
+false (boolean) OR false (boolean) = false
+false (boolean) AND 1 (number) = false
+false (boolean) OR 1 (number) = true
+false (boolean) AND 0 (number) = false
+false (boolean) OR 0 (number) = false
+false (boolean) AND 42 (number) = false
+false (boolean) OR 42 (number) = true
+false (boolean) AND -100000 (number) = false
+false (boolean) OR -100000 (number) = true
+false (boolean) AND (undefined) = false
+false (boolean) OR (undefined) = false
+false (boolean) AND null (null) = false
+false (boolean) OR null (null) = false
+false (boolean) AND _level0 (movieclip) = false
+false (boolean) OR _level0 (movieclip) = true
+false (boolean) AND [object Object] (object) = false
+false (boolean) OR [object Object] (object) = true
+false (boolean) AND hi (string) = false
+false (boolean) OR hi (string) = false
+false (boolean) AND 1 (string) = false
+false (boolean) OR 1 (string) = true
+false (boolean) AND 0 (string) = false
+false (boolean) OR 0 (string) = false
+false (boolean) AND (string) = false
+false (boolean) OR (string) = false
+false (boolean) AND 1 (number) = false
+false (boolean) OR 1 (number) = true
+false (boolean) AND 0 (number) = false
+false (boolean) OR 0 (number) = false
+false (boolean) AND 0 (number) = false
+false (boolean) OR 0 (number) = false
+false (boolean) AND -0.2 (number) = false
+false (boolean) OR -0.2 (number) = true
+1 (number) AND true (boolean) = true
+1 (number) OR true (boolean) = true
+1 (number) AND false (boolean) = false
+1 (number) OR false (boolean) = true
+1 (number) AND 1 (number) = true
+1 (number) OR 1 (number) = true
+1 (number) AND 0 (number) = false
+1 (number) OR 0 (number) = true
+1 (number) AND 42 (number) = true
+1 (number) OR 42 (number) = true
+1 (number) AND -100000 (number) = true
+1 (number) OR -100000 (number) = true
+1 (number) AND (undefined) = false
+1 (number) OR (undefined) = true
+1 (number) AND null (null) = false
+1 (number) OR null (null) = true
+1 (number) AND _level0 (movieclip) = true
+1 (number) OR _level0 (movieclip) = true
+1 (number) AND [object Object] (object) = true
+1 (number) OR [object Object] (object) = true
+1 (number) AND hi (string) = false
+1 (number) OR hi (string) = true
+1 (number) AND 1 (string) = true
+1 (number) OR 1 (string) = true
+1 (number) AND 0 (string) = false
+1 (number) OR 0 (string) = true
+1 (number) AND (string) = false
+1 (number) OR (string) = true
+1 (number) AND 1 (number) = true
+1 (number) OR 1 (number) = true
+1 (number) AND 0 (number) = false
+1 (number) OR 0 (number) = true
+1 (number) AND 0 (number) = false
+1 (number) OR 0 (number) = true
+1 (number) AND -0.2 (number) = true
+1 (number) OR -0.2 (number) = true
+0 (number) AND true (boolean) = false
+0 (number) OR true (boolean) = true
+0 (number) AND false (boolean) = false
+0 (number) OR false (boolean) = false
+0 (number) AND 1 (number) = false
+0 (number) OR 1 (number) = true
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND 42 (number) = false
+0 (number) OR 42 (number) = true
+0 (number) AND -100000 (number) = false
+0 (number) OR -100000 (number) = true
+0 (number) AND (undefined) = false
+0 (number) OR (undefined) = false
+0 (number) AND null (null) = false
+0 (number) OR null (null) = false
+0 (number) AND _level0 (movieclip) = false
+0 (number) OR _level0 (movieclip) = true
+0 (number) AND [object Object] (object) = false
+0 (number) OR [object Object] (object) = true
+0 (number) AND hi (string) = false
+0 (number) OR hi (string) = false
+0 (number) AND 1 (string) = false
+0 (number) OR 1 (string) = true
+0 (number) AND 0 (string) = false
+0 (number) OR 0 (string) = false
+0 (number) AND (string) = false
+0 (number) OR (string) = false
+0 (number) AND 1 (number) = false
+0 (number) OR 1 (number) = true
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND -0.2 (number) = false
+0 (number) OR -0.2 (number) = true
+42 (number) AND true (boolean) = true
+42 (number) OR true (boolean) = true
+42 (number) AND false (boolean) = false
+42 (number) OR false (boolean) = true
+42 (number) AND 1 (number) = true
+42 (number) OR 1 (number) = true
+42 (number) AND 0 (number) = false
+42 (number) OR 0 (number) = true
+42 (number) AND 42 (number) = true
+42 (number) OR 42 (number) = true
+42 (number) AND -100000 (number) = true
+42 (number) OR -100000 (number) = true
+42 (number) AND (undefined) = false
+42 (number) OR (undefined) = true
+42 (number) AND null (null) = false
+42 (number) OR null (null) = true
+42 (number) AND _level0 (movieclip) = true
+42 (number) OR _level0 (movieclip) = true
+42 (number) AND [object Object] (object) = true
+42 (number) OR [object Object] (object) = true
+42 (number) AND hi (string) = false
+42 (number) OR hi (string) = true
+42 (number) AND 1 (string) = true
+42 (number) OR 1 (string) = true
+42 (number) AND 0 (string) = false
+42 (number) OR 0 (string) = true
+42 (number) AND (string) = false
+42 (number) OR (string) = true
+42 (number) AND 1 (number) = true
+42 (number) OR 1 (number) = true
+42 (number) AND 0 (number) = false
+42 (number) OR 0 (number) = true
+42 (number) AND 0 (number) = false
+42 (number) OR 0 (number) = true
+42 (number) AND -0.2 (number) = true
+42 (number) OR -0.2 (number) = true
+-100000 (number) AND true (boolean) = true
+-100000 (number) OR true (boolean) = true
+-100000 (number) AND false (boolean) = false
+-100000 (number) OR false (boolean) = true
+-100000 (number) AND 1 (number) = true
+-100000 (number) OR 1 (number) = true
+-100000 (number) AND 0 (number) = false
+-100000 (number) OR 0 (number) = true
+-100000 (number) AND 42 (number) = true
+-100000 (number) OR 42 (number) = true
+-100000 (number) AND -100000 (number) = true
+-100000 (number) OR -100000 (number) = true
+-100000 (number) AND (undefined) = false
+-100000 (number) OR (undefined) = true
+-100000 (number) AND null (null) = false
+-100000 (number) OR null (null) = true
+-100000 (number) AND _level0 (movieclip) = true
+-100000 (number) OR _level0 (movieclip) = true
+-100000 (number) AND [object Object] (object) = true
+-100000 (number) OR [object Object] (object) = true
+-100000 (number) AND hi (string) = false
+-100000 (number) OR hi (string) = true
+-100000 (number) AND 1 (string) = true
+-100000 (number) OR 1 (string) = true
+-100000 (number) AND 0 (string) = false
+-100000 (number) OR 0 (string) = true
+-100000 (number) AND (string) = false
+-100000 (number) OR (string) = true
+-100000 (number) AND 1 (number) = true
+-100000 (number) OR 1 (number) = true
+-100000 (number) AND 0 (number) = false
+-100000 (number) OR 0 (number) = true
+-100000 (number) AND 0 (number) = false
+-100000 (number) OR 0 (number) = true
+-100000 (number) AND -0.2 (number) = true
+-100000 (number) OR -0.2 (number) = true
+ (undefined) AND true (boolean) = false
+ (undefined) OR true (boolean) = true
+ (undefined) AND false (boolean) = false
+ (undefined) OR false (boolean) = false
+ (undefined) AND 1 (number) = false
+ (undefined) OR 1 (number) = true
+ (undefined) AND 0 (number) = false
+ (undefined) OR 0 (number) = false
+ (undefined) AND 42 (number) = false
+ (undefined) OR 42 (number) = true
+ (undefined) AND -100000 (number) = false
+ (undefined) OR -100000 (number) = true
+ (undefined) AND (undefined) = false
+ (undefined) OR (undefined) = false
+ (undefined) AND null (null) = false
+ (undefined) OR null (null) = false
+ (undefined) AND _level0 (movieclip) = false
+ (undefined) OR _level0 (movieclip) = true
+ (undefined) AND [object Object] (object) = false
+ (undefined) OR [object Object] (object) = true
+ (undefined) AND hi (string) = false
+ (undefined) OR hi (string) = false
+ (undefined) AND 1 (string) = false
+ (undefined) OR 1 (string) = true
+ (undefined) AND 0 (string) = false
+ (undefined) OR 0 (string) = false
+ (undefined) AND (string) = false
+ (undefined) OR (string) = false
+ (undefined) AND 1 (number) = false
+ (undefined) OR 1 (number) = true
+ (undefined) AND 0 (number) = false
+ (undefined) OR 0 (number) = false
+ (undefined) AND 0 (number) = false
+ (undefined) OR 0 (number) = false
+ (undefined) AND -0.2 (number) = false
+ (undefined) OR -0.2 (number) = true
+null (null) AND true (boolean) = false
+null (null) OR true (boolean) = true
+null (null) AND false (boolean) = false
+null (null) OR false (boolean) = false
+null (null) AND 1 (number) = false
+null (null) OR 1 (number) = true
+null (null) AND 0 (number) = false
+null (null) OR 0 (number) = false
+null (null) AND 42 (number) = false
+null (null) OR 42 (number) = true
+null (null) AND -100000 (number) = false
+null (null) OR -100000 (number) = true
+null (null) AND (undefined) = false
+null (null) OR (undefined) = false
+null (null) AND null (null) = false
+null (null) OR null (null) = false
+null (null) AND _level0 (movieclip) = false
+null (null) OR _level0 (movieclip) = true
+null (null) AND [object Object] (object) = false
+null (null) OR [object Object] (object) = true
+null (null) AND hi (string) = false
+null (null) OR hi (string) = false
+null (null) AND 1 (string) = false
+null (null) OR 1 (string) = true
+null (null) AND 0 (string) = false
+null (null) OR 0 (string) = false
+null (null) AND (string) = false
+null (null) OR (string) = false
+null (null) AND 1 (number) = false
+null (null) OR 1 (number) = true
+null (null) AND 0 (number) = false
+null (null) OR 0 (number) = false
+null (null) AND 0 (number) = false
+null (null) OR 0 (number) = false
+null (null) AND -0.2 (number) = false
+null (null) OR -0.2 (number) = true
+_level0 (movieclip) AND true (boolean) = true
+_level0 (movieclip) OR true (boolean) = true
+_level0 (movieclip) AND false (boolean) = false
+_level0 (movieclip) OR false (boolean) = true
+_level0 (movieclip) AND 1 (number) = true
+_level0 (movieclip) OR 1 (number) = true
+_level0 (movieclip) AND 0 (number) = false
+_level0 (movieclip) OR 0 (number) = true
+_level0 (movieclip) AND 42 (number) = true
+_level0 (movieclip) OR 42 (number) = true
+_level0 (movieclip) AND -100000 (number) = true
+_level0 (movieclip) OR -100000 (number) = true
+_level0 (movieclip) AND (undefined) = false
+_level0 (movieclip) OR (undefined) = true
+_level0 (movieclip) AND null (null) = false
+_level0 (movieclip) OR null (null) = true
+_level0 (movieclip) AND _level0 (movieclip) = true
+_level0 (movieclip) OR _level0 (movieclip) = true
+_level0 (movieclip) AND [object Object] (object) = true
+_level0 (movieclip) OR [object Object] (object) = true
+_level0 (movieclip) AND hi (string) = false
+_level0 (movieclip) OR hi (string) = true
+_level0 (movieclip) AND 1 (string) = true
+_level0 (movieclip) OR 1 (string) = true
+_level0 (movieclip) AND 0 (string) = false
+_level0 (movieclip) OR 0 (string) = true
+_level0 (movieclip) AND (string) = false
+_level0 (movieclip) OR (string) = true
+_level0 (movieclip) AND 1 (number) = true
+_level0 (movieclip) OR 1 (number) = true
+_level0 (movieclip) AND 0 (number) = false
+_level0 (movieclip) OR 0 (number) = true
+_level0 (movieclip) AND 0 (number) = false
+_level0 (movieclip) OR 0 (number) = true
+_level0 (movieclip) AND -0.2 (number) = true
+_level0 (movieclip) OR -0.2 (number) = true
+[object Object] (object) AND true (boolean) = true
+[object Object] (object) OR true (boolean) = true
+[object Object] (object) AND false (boolean) = false
+[object Object] (object) OR false (boolean) = true
+[object Object] (object) AND 1 (number) = true
+[object Object] (object) OR 1 (number) = true
+[object Object] (object) AND 0 (number) = false
+[object Object] (object) OR 0 (number) = true
+[object Object] (object) AND 42 (number) = true
+[object Object] (object) OR 42 (number) = true
+[object Object] (object) AND -100000 (number) = true
+[object Object] (object) OR -100000 (number) = true
+[object Object] (object) AND (undefined) = false
+[object Object] (object) OR (undefined) = true
+[object Object] (object) AND null (null) = false
+[object Object] (object) OR null (null) = true
+[object Object] (object) AND _level0 (movieclip) = true
+[object Object] (object) OR _level0 (movieclip) = true
+[object Object] (object) AND [object Object] (object) = true
+[object Object] (object) OR [object Object] (object) = true
+[object Object] (object) AND hi (string) = false
+[object Object] (object) OR hi (string) = true
+[object Object] (object) AND 1 (string) = true
+[object Object] (object) OR 1 (string) = true
+[object Object] (object) AND 0 (string) = false
+[object Object] (object) OR 0 (string) = true
+[object Object] (object) AND (string) = false
+[object Object] (object) OR (string) = true
+[object Object] (object) AND 1 (number) = true
+[object Object] (object) OR 1 (number) = true
+[object Object] (object) AND 0 (number) = false
+[object Object] (object) OR 0 (number) = true
+[object Object] (object) AND 0 (number) = false
+[object Object] (object) OR 0 (number) = true
+[object Object] (object) AND -0.2 (number) = true
+[object Object] (object) OR -0.2 (number) = true
+hi (string) AND true (boolean) = false
+hi (string) OR true (boolean) = true
+hi (string) AND false (boolean) = false
+hi (string) OR false (boolean) = false
+hi (string) AND 1 (number) = false
+hi (string) OR 1 (number) = true
+hi (string) AND 0 (number) = false
+hi (string) OR 0 (number) = false
+hi (string) AND 42 (number) = false
+hi (string) OR 42 (number) = true
+hi (string) AND -100000 (number) = false
+hi (string) OR -100000 (number) = true
+hi (string) AND (undefined) = false
+hi (string) OR (undefined) = false
+hi (string) AND null (null) = false
+hi (string) OR null (null) = false
+hi (string) AND _level0 (movieclip) = false
+hi (string) OR _level0 (movieclip) = true
+hi (string) AND [object Object] (object) = false
+hi (string) OR [object Object] (object) = true
+hi (string) AND hi (string) = false
+hi (string) OR hi (string) = false
+hi (string) AND 1 (string) = false
+hi (string) OR 1 (string) = true
+hi (string) AND 0 (string) = false
+hi (string) OR 0 (string) = false
+hi (string) AND (string) = false
+hi (string) OR (string) = false
+hi (string) AND 1 (number) = false
+hi (string) OR 1 (number) = true
+hi (string) AND 0 (number) = false
+hi (string) OR 0 (number) = false
+hi (string) AND 0 (number) = false
+hi (string) OR 0 (number) = false
+hi (string) AND -0.2 (number) = false
+hi (string) OR -0.2 (number) = true
+1 (string) AND true (boolean) = true
+1 (string) OR true (boolean) = true
+1 (string) AND false (boolean) = false
+1 (string) OR false (boolean) = true
+1 (string) AND 1 (number) = true
+1 (string) OR 1 (number) = true
+1 (string) AND 0 (number) = false
+1 (string) OR 0 (number) = true
+1 (string) AND 42 (number) = true
+1 (string) OR 42 (number) = true
+1 (string) AND -100000 (number) = true
+1 (string) OR -100000 (number) = true
+1 (string) AND (undefined) = false
+1 (string) OR (undefined) = true
+1 (string) AND null (null) = false
+1 (string) OR null (null) = true
+1 (string) AND _level0 (movieclip) = true
+1 (string) OR _level0 (movieclip) = true
+1 (string) AND [object Object] (object) = true
+1 (string) OR [object Object] (object) = true
+1 (string) AND hi (string) = false
+1 (string) OR hi (string) = true
+1 (string) AND 1 (string) = true
+1 (string) OR 1 (string) = true
+1 (string) AND 0 (string) = false
+1 (string) OR 0 (string) = true
+1 (string) AND (string) = false
+1 (string) OR (string) = true
+1 (string) AND 1 (number) = true
+1 (string) OR 1 (number) = true
+1 (string) AND 0 (number) = false
+1 (string) OR 0 (number) = true
+1 (string) AND 0 (number) = false
+1 (string) OR 0 (number) = true
+1 (string) AND -0.2 (number) = true
+1 (string) OR -0.2 (number) = true
+0 (string) AND true (boolean) = false
+0 (string) OR true (boolean) = true
+0 (string) AND false (boolean) = false
+0 (string) OR false (boolean) = false
+0 (string) AND 1 (number) = false
+0 (string) OR 1 (number) = true
+0 (string) AND 0 (number) = false
+0 (string) OR 0 (number) = false
+0 (string) AND 42 (number) = false
+0 (string) OR 42 (number) = true
+0 (string) AND -100000 (number) = false
+0 (string) OR -100000 (number) = true
+0 (string) AND (undefined) = false
+0 (string) OR (undefined) = false
+0 (string) AND null (null) = false
+0 (string) OR null (null) = false
+0 (string) AND _level0 (movieclip) = false
+0 (string) OR _level0 (movieclip) = true
+0 (string) AND [object Object] (object) = false
+0 (string) OR [object Object] (object) = true
+0 (string) AND hi (string) = false
+0 (string) OR hi (string) = false
+0 (string) AND 1 (string) = false
+0 (string) OR 1 (string) = true
+0 (string) AND 0 (string) = false
+0 (string) OR 0 (string) = false
+0 (string) AND (string) = false
+0 (string) OR (string) = false
+0 (string) AND 1 (number) = false
+0 (string) OR 1 (number) = true
+0 (string) AND 0 (number) = false
+0 (string) OR 0 (number) = false
+0 (string) AND 0 (number) = false
+0 (string) OR 0 (number) = false
+0 (string) AND -0.2 (number) = false
+0 (string) OR -0.2 (number) = true
+ (string) AND true (boolean) = false
+ (string) OR true (boolean) = true
+ (string) AND false (boolean) = false
+ (string) OR false (boolean) = false
+ (string) AND 1 (number) = false
+ (string) OR 1 (number) = true
+ (string) AND 0 (number) = false
+ (string) OR 0 (number) = false
+ (string) AND 42 (number) = false
+ (string) OR 42 (number) = true
+ (string) AND -100000 (number) = false
+ (string) OR -100000 (number) = true
+ (string) AND (undefined) = false
+ (string) OR (undefined) = false
+ (string) AND null (null) = false
+ (string) OR null (null) = false
+ (string) AND _level0 (movieclip) = false
+ (string) OR _level0 (movieclip) = true
+ (string) AND [object Object] (object) = false
+ (string) OR [object Object] (object) = true
+ (string) AND hi (string) = false
+ (string) OR hi (string) = false
+ (string) AND 1 (string) = false
+ (string) OR 1 (string) = true
+ (string) AND 0 (string) = false
+ (string) OR 0 (string) = false
+ (string) AND (string) = false
+ (string) OR (string) = false
+ (string) AND 1 (number) = false
+ (string) OR 1 (number) = true
+ (string) AND 0 (number) = false
+ (string) OR 0 (number) = false
+ (string) AND 0 (number) = false
+ (string) OR 0 (number) = false
+ (string) AND -0.2 (number) = false
+ (string) OR -0.2 (number) = true
+1 (number) AND true (boolean) = true
+1 (number) OR true (boolean) = true
+1 (number) AND false (boolean) = false
+1 (number) OR false (boolean) = true
+1 (number) AND 1 (number) = true
+1 (number) OR 1 (number) = true
+1 (number) AND 0 (number) = false
+1 (number) OR 0 (number) = true
+1 (number) AND 42 (number) = true
+1 (number) OR 42 (number) = true
+1 (number) AND -100000 (number) = true
+1 (number) OR -100000 (number) = true
+1 (number) AND (undefined) = false
+1 (number) OR (undefined) = true
+1 (number) AND null (null) = false
+1 (number) OR null (null) = true
+1 (number) AND _level0 (movieclip) = true
+1 (number) OR _level0 (movieclip) = true
+1 (number) AND [object Object] (object) = true
+1 (number) OR [object Object] (object) = true
+1 (number) AND hi (string) = false
+1 (number) OR hi (string) = true
+1 (number) AND 1 (string) = true
+1 (number) OR 1 (string) = true
+1 (number) AND 0 (string) = false
+1 (number) OR 0 (string) = true
+1 (number) AND (string) = false
+1 (number) OR (string) = true
+1 (number) AND 1 (number) = true
+1 (number) OR 1 (number) = true
+1 (number) AND 0 (number) = false
+1 (number) OR 0 (number) = true
+1 (number) AND 0 (number) = false
+1 (number) OR 0 (number) = true
+1 (number) AND -0.2 (number) = true
+1 (number) OR -0.2 (number) = true
+0 (number) AND true (boolean) = false
+0 (number) OR true (boolean) = true
+0 (number) AND false (boolean) = false
+0 (number) OR false (boolean) = false
+0 (number) AND 1 (number) = false
+0 (number) OR 1 (number) = true
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND 42 (number) = false
+0 (number) OR 42 (number) = true
+0 (number) AND -100000 (number) = false
+0 (number) OR -100000 (number) = true
+0 (number) AND (undefined) = false
+0 (number) OR (undefined) = false
+0 (number) AND null (null) = false
+0 (number) OR null (null) = false
+0 (number) AND _level0 (movieclip) = false
+0 (number) OR _level0 (movieclip) = true
+0 (number) AND [object Object] (object) = false
+0 (number) OR [object Object] (object) = true
+0 (number) AND hi (string) = false
+0 (number) OR hi (string) = false
+0 (number) AND 1 (string) = false
+0 (number) OR 1 (string) = true
+0 (number) AND 0 (string) = false
+0 (number) OR 0 (string) = false
+0 (number) AND (string) = false
+0 (number) OR (string) = false
+0 (number) AND 1 (number) = false
+0 (number) OR 1 (number) = true
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND -0.2 (number) = false
+0 (number) OR -0.2 (number) = true
+0 (number) AND true (boolean) = false
+0 (number) OR true (boolean) = true
+0 (number) AND false (boolean) = false
+0 (number) OR false (boolean) = false
+0 (number) AND 1 (number) = false
+0 (number) OR 1 (number) = true
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND 42 (number) = false
+0 (number) OR 42 (number) = true
+0 (number) AND -100000 (number) = false
+0 (number) OR -100000 (number) = true
+0 (number) AND (undefined) = false
+0 (number) OR (undefined) = false
+0 (number) AND null (null) = false
+0 (number) OR null (null) = false
+0 (number) AND _level0 (movieclip) = false
+0 (number) OR _level0 (movieclip) = true
+0 (number) AND [object Object] (object) = false
+0 (number) OR [object Object] (object) = true
+0 (number) AND hi (string) = false
+0 (number) OR hi (string) = false
+0 (number) AND 1 (string) = false
+0 (number) OR 1 (string) = true
+0 (number) AND 0 (string) = false
+0 (number) OR 0 (string) = false
+0 (number) AND (string) = false
+0 (number) OR (string) = false
+0 (number) AND 1 (number) = false
+0 (number) OR 1 (number) = true
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND -0.2 (number) = false
+0 (number) OR -0.2 (number) = true
+-0.2 (number) AND true (boolean) = true
+-0.2 (number) OR true (boolean) = true
+-0.2 (number) AND false (boolean) = false
+-0.2 (number) OR false (boolean) = true
+-0.2 (number) AND 1 (number) = true
+-0.2 (number) OR 1 (number) = true
+-0.2 (number) AND 0 (number) = false
+-0.2 (number) OR 0 (number) = true
+-0.2 (number) AND 42 (number) = true
+-0.2 (number) OR 42 (number) = true
+-0.2 (number) AND -100000 (number) = true
+-0.2 (number) OR -100000 (number) = true
+-0.2 (number) AND (undefined) = false
+-0.2 (number) OR (undefined) = true
+-0.2 (number) AND null (null) = false
+-0.2 (number) OR null (null) = true
+-0.2 (number) AND _level0 (movieclip) = true
+-0.2 (number) OR _level0 (movieclip) = true
+-0.2 (number) AND [object Object] (object) = true
+-0.2 (number) OR [object Object] (object) = true
+-0.2 (number) AND hi (string) = false
+-0.2 (number) OR hi (string) = true
+-0.2 (number) AND 1 (string) = true
+-0.2 (number) OR 1 (string) = true
+-0.2 (number) AND 0 (string) = false
+-0.2 (number) OR 0 (string) = true
+-0.2 (number) AND (string) = false
+-0.2 (number) OR (string) = true
+-0.2 (number) AND 1 (number) = true
+-0.2 (number) OR 1 (number) = true
+-0.2 (number) AND 0 (number) = false
+-0.2 (number) OR 0 (number) = true
+-0.2 (number) AND 0 (number) = false
+-0.2 (number) OR 0 (number) = true
+-0.2 (number) AND -0.2 (number) = true
+-0.2 (number) OR -0.2 (number) = true
diff --git a/test/trace/and-or-7.swf b/test/trace/and-or-7.swf
new file mode 100755
index 0000000..7640f7e
Binary files /dev/null and b/test/trace/and-or-7.swf differ
diff --git a/test/trace/and-or-7.swf.trace b/test/trace/and-or-7.swf.trace
new file mode 100755
index 0000000..57f0b5f
--- /dev/null
+++ b/test/trace/and-or-7.swf.trace
@@ -0,0 +1,801 @@
+Check AND and OR logical operators with various values
+true (boolean) AND true (boolean) = true
+true (boolean) OR true (boolean) = true
+true (boolean) AND false (boolean) = false
+true (boolean) OR false (boolean) = true
+true (boolean) AND 1 (number) = true
+true (boolean) OR 1 (number) = true
+true (boolean) AND 0 (number) = false
+true (boolean) OR 0 (number) = true
+true (boolean) AND 42 (number) = true
+true (boolean) OR 42 (number) = true
+true (boolean) AND -100000 (number) = true
+true (boolean) OR -100000 (number) = true
+true (boolean) AND undefined (undefined) = false
+true (boolean) OR undefined (undefined) = true
+true (boolean) AND null (null) = false
+true (boolean) OR null (null) = true
+true (boolean) AND _level0 (movieclip) = true
+true (boolean) OR _level0 (movieclip) = true
+true (boolean) AND [object Object] (object) = true
+true (boolean) OR [object Object] (object) = true
+true (boolean) AND hi (string) = true
+true (boolean) OR hi (string) = true
+true (boolean) AND 1 (string) = true
+true (boolean) OR 1 (string) = true
+true (boolean) AND 0 (string) = true
+true (boolean) OR 0 (string) = true
+true (boolean) AND (string) = false
+true (boolean) OR (string) = true
+true (boolean) AND 1 (number) = true
+true (boolean) OR 1 (number) = true
+true (boolean) AND 0 (number) = false
+true (boolean) OR 0 (number) = true
+true (boolean) AND 0 (number) = false
+true (boolean) OR 0 (number) = true
+true (boolean) AND -0.2 (number) = true
+true (boolean) OR -0.2 (number) = true
+true (boolean) AND NaN (number) = false
+true (boolean) OR NaN (number) = true
+true (boolean) AND Infinity (number) = true
+true (boolean) OR Infinity (number) = true
+false (boolean) AND true (boolean) = false
+false (boolean) OR true (boolean) = true
+false (boolean) AND false (boolean) = false
+false (boolean) OR false (boolean) = false
+false (boolean) AND 1 (number) = false
+false (boolean) OR 1 (number) = true
+false (boolean) AND 0 (number) = false
+false (boolean) OR 0 (number) = false
+false (boolean) AND 42 (number) = false
+false (boolean) OR 42 (number) = true
+false (boolean) AND -100000 (number) = false
+false (boolean) OR -100000 (number) = true
+false (boolean) AND undefined (undefined) = false
+false (boolean) OR undefined (undefined) = false
+false (boolean) AND null (null) = false
+false (boolean) OR null (null) = false
+false (boolean) AND _level0 (movieclip) = false
+false (boolean) OR _level0 (movieclip) = true
+false (boolean) AND [object Object] (object) = false
+false (boolean) OR [object Object] (object) = true
+false (boolean) AND hi (string) = false
+false (boolean) OR hi (string) = true
+false (boolean) AND 1 (string) = false
+false (boolean) OR 1 (string) = true
+false (boolean) AND 0 (string) = false
+false (boolean) OR 0 (string) = true
+false (boolean) AND (string) = false
+false (boolean) OR (string) = false
+false (boolean) AND 1 (number) = false
+false (boolean) OR 1 (number) = true
+false (boolean) AND 0 (number) = false
+false (boolean) OR 0 (number) = false
+false (boolean) AND 0 (number) = false
+false (boolean) OR 0 (number) = false
+false (boolean) AND -0.2 (number) = false
+false (boolean) OR -0.2 (number) = true
+false (boolean) AND NaN (number) = false
+false (boolean) OR NaN (number) = false
+false (boolean) AND Infinity (number) = false
+false (boolean) OR Infinity (number) = true
+1 (number) AND true (boolean) = true
+1 (number) OR true (boolean) = true
+1 (number) AND false (boolean) = false
+1 (number) OR false (boolean) = true
+1 (number) AND 1 (number) = true
+1 (number) OR 1 (number) = true
+1 (number) AND 0 (number) = false
+1 (number) OR 0 (number) = true
+1 (number) AND 42 (number) = true
+1 (number) OR 42 (number) = true
+1 (number) AND -100000 (number) = true
+1 (number) OR -100000 (number) = true
+1 (number) AND undefined (undefined) = false
+1 (number) OR undefined (undefined) = true
+1 (number) AND null (null) = false
+1 (number) OR null (null) = true
+1 (number) AND _level0 (movieclip) = true
+1 (number) OR _level0 (movieclip) = true
+1 (number) AND [object Object] (object) = true
+1 (number) OR [object Object] (object) = true
+1 (number) AND hi (string) = true
+1 (number) OR hi (string) = true
+1 (number) AND 1 (string) = true
+1 (number) OR 1 (string) = true
+1 (number) AND 0 (string) = true
+1 (number) OR 0 (string) = true
+1 (number) AND (string) = false
+1 (number) OR (string) = true
+1 (number) AND 1 (number) = true
+1 (number) OR 1 (number) = true
+1 (number) AND 0 (number) = false
+1 (number) OR 0 (number) = true
+1 (number) AND 0 (number) = false
+1 (number) OR 0 (number) = true
+1 (number) AND -0.2 (number) = true
+1 (number) OR -0.2 (number) = true
+1 (number) AND NaN (number) = false
+1 (number) OR NaN (number) = true
+1 (number) AND Infinity (number) = true
+1 (number) OR Infinity (number) = true
+0 (number) AND true (boolean) = false
+0 (number) OR true (boolean) = true
+0 (number) AND false (boolean) = false
+0 (number) OR false (boolean) = false
+0 (number) AND 1 (number) = false
+0 (number) OR 1 (number) = true
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND 42 (number) = false
+0 (number) OR 42 (number) = true
+0 (number) AND -100000 (number) = false
+0 (number) OR -100000 (number) = true
+0 (number) AND undefined (undefined) = false
+0 (number) OR undefined (undefined) = false
+0 (number) AND null (null) = false
+0 (number) OR null (null) = false
+0 (number) AND _level0 (movieclip) = false
+0 (number) OR _level0 (movieclip) = true
+0 (number) AND [object Object] (object) = false
+0 (number) OR [object Object] (object) = true
+0 (number) AND hi (string) = false
+0 (number) OR hi (string) = true
+0 (number) AND 1 (string) = false
+0 (number) OR 1 (string) = true
+0 (number) AND 0 (string) = false
+0 (number) OR 0 (string) = true
+0 (number) AND (string) = false
+0 (number) OR (string) = false
+0 (number) AND 1 (number) = false
+0 (number) OR 1 (number) = true
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND -0.2 (number) = false
+0 (number) OR -0.2 (number) = true
+0 (number) AND NaN (number) = false
+0 (number) OR NaN (number) = false
+0 (number) AND Infinity (number) = false
+0 (number) OR Infinity (number) = true
+42 (number) AND true (boolean) = true
+42 (number) OR true (boolean) = true
+42 (number) AND false (boolean) = false
+42 (number) OR false (boolean) = true
+42 (number) AND 1 (number) = true
+42 (number) OR 1 (number) = true
+42 (number) AND 0 (number) = false
+42 (number) OR 0 (number) = true
+42 (number) AND 42 (number) = true
+42 (number) OR 42 (number) = true
+42 (number) AND -100000 (number) = true
+42 (number) OR -100000 (number) = true
+42 (number) AND undefined (undefined) = false
+42 (number) OR undefined (undefined) = true
+42 (number) AND null (null) = false
+42 (number) OR null (null) = true
+42 (number) AND _level0 (movieclip) = true
+42 (number) OR _level0 (movieclip) = true
+42 (number) AND [object Object] (object) = true
+42 (number) OR [object Object] (object) = true
+42 (number) AND hi (string) = true
+42 (number) OR hi (string) = true
+42 (number) AND 1 (string) = true
+42 (number) OR 1 (string) = true
+42 (number) AND 0 (string) = true
+42 (number) OR 0 (string) = true
+42 (number) AND (string) = false
+42 (number) OR (string) = true
+42 (number) AND 1 (number) = true
+42 (number) OR 1 (number) = true
+42 (number) AND 0 (number) = false
+42 (number) OR 0 (number) = true
+42 (number) AND 0 (number) = false
+42 (number) OR 0 (number) = true
+42 (number) AND -0.2 (number) = true
+42 (number) OR -0.2 (number) = true
+42 (number) AND NaN (number) = false
+42 (number) OR NaN (number) = true
+42 (number) AND Infinity (number) = true
+42 (number) OR Infinity (number) = true
+-100000 (number) AND true (boolean) = true
+-100000 (number) OR true (boolean) = true
+-100000 (number) AND false (boolean) = false
+-100000 (number) OR false (boolean) = true
+-100000 (number) AND 1 (number) = true
+-100000 (number) OR 1 (number) = true
+-100000 (number) AND 0 (number) = false
+-100000 (number) OR 0 (number) = true
+-100000 (number) AND 42 (number) = true
+-100000 (number) OR 42 (number) = true
+-100000 (number) AND -100000 (number) = true
+-100000 (number) OR -100000 (number) = true
+-100000 (number) AND undefined (undefined) = false
+-100000 (number) OR undefined (undefined) = true
+-100000 (number) AND null (null) = false
+-100000 (number) OR null (null) = true
+-100000 (number) AND _level0 (movieclip) = true
+-100000 (number) OR _level0 (movieclip) = true
+-100000 (number) AND [object Object] (object) = true
+-100000 (number) OR [object Object] (object) = true
+-100000 (number) AND hi (string) = true
+-100000 (number) OR hi (string) = true
+-100000 (number) AND 1 (string) = true
+-100000 (number) OR 1 (string) = true
+-100000 (number) AND 0 (string) = true
+-100000 (number) OR 0 (string) = true
+-100000 (number) AND (string) = false
+-100000 (number) OR (string) = true
+-100000 (number) AND 1 (number) = true
+-100000 (number) OR 1 (number) = true
+-100000 (number) AND 0 (number) = false
+-100000 (number) OR 0 (number) = true
+-100000 (number) AND 0 (number) = false
+-100000 (number) OR 0 (number) = true
+-100000 (number) AND -0.2 (number) = true
+-100000 (number) OR -0.2 (number) = true
+-100000 (number) AND NaN (number) = false
+-100000 (number) OR NaN (number) = true
+-100000 (number) AND Infinity (number) = true
+-100000 (number) OR Infinity (number) = true
+undefined (undefined) AND true (boolean) = false
+undefined (undefined) OR true (boolean) = true
+undefined (undefined) AND false (boolean) = false
+undefined (undefined) OR false (boolean) = false
+undefined (undefined) AND 1 (number) = false
+undefined (undefined) OR 1 (number) = true
+undefined (undefined) AND 0 (number) = false
+undefined (undefined) OR 0 (number) = false
+undefined (undefined) AND 42 (number) = false
+undefined (undefined) OR 42 (number) = true
+undefined (undefined) AND -100000 (number) = false
+undefined (undefined) OR -100000 (number) = true
+undefined (undefined) AND undefined (undefined) = false
+undefined (undefined) OR undefined (undefined) = false
+undefined (undefined) AND null (null) = false
+undefined (undefined) OR null (null) = false
+undefined (undefined) AND _level0 (movieclip) = false
+undefined (undefined) OR _level0 (movieclip) = true
+undefined (undefined) AND [object Object] (object) = false
+undefined (undefined) OR [object Object] (object) = true
+undefined (undefined) AND hi (string) = false
+undefined (undefined) OR hi (string) = true
+undefined (undefined) AND 1 (string) = false
+undefined (undefined) OR 1 (string) = true
+undefined (undefined) AND 0 (string) = false
+undefined (undefined) OR 0 (string) = true
+undefined (undefined) AND (string) = false
+undefined (undefined) OR (string) = false
+undefined (undefined) AND 1 (number) = false
+undefined (undefined) OR 1 (number) = true
+undefined (undefined) AND 0 (number) = false
+undefined (undefined) OR 0 (number) = false
+undefined (undefined) AND 0 (number) = false
+undefined (undefined) OR 0 (number) = false
+undefined (undefined) AND -0.2 (number) = false
+undefined (undefined) OR -0.2 (number) = true
+undefined (undefined) AND NaN (number) = false
+undefined (undefined) OR NaN (number) = false
+undefined (undefined) AND Infinity (number) = false
+undefined (undefined) OR Infinity (number) = true
+null (null) AND true (boolean) = false
+null (null) OR true (boolean) = true
+null (null) AND false (boolean) = false
+null (null) OR false (boolean) = false
+null (null) AND 1 (number) = false
+null (null) OR 1 (number) = true
+null (null) AND 0 (number) = false
+null (null) OR 0 (number) = false
+null (null) AND 42 (number) = false
+null (null) OR 42 (number) = true
+null (null) AND -100000 (number) = false
+null (null) OR -100000 (number) = true
+null (null) AND undefined (undefined) = false
+null (null) OR undefined (undefined) = false
+null (null) AND null (null) = false
+null (null) OR null (null) = false
+null (null) AND _level0 (movieclip) = false
+null (null) OR _level0 (movieclip) = true
+null (null) AND [object Object] (object) = false
+null (null) OR [object Object] (object) = true
+null (null) AND hi (string) = false
+null (null) OR hi (string) = true
+null (null) AND 1 (string) = false
+null (null) OR 1 (string) = true
+null (null) AND 0 (string) = false
+null (null) OR 0 (string) = true
+null (null) AND (string) = false
+null (null) OR (string) = false
+null (null) AND 1 (number) = false
+null (null) OR 1 (number) = true
+null (null) AND 0 (number) = false
+null (null) OR 0 (number) = false
+null (null) AND 0 (number) = false
+null (null) OR 0 (number) = false
+null (null) AND -0.2 (number) = false
+null (null) OR -0.2 (number) = true
+null (null) AND NaN (number) = false
+null (null) OR NaN (number) = false
+null (null) AND Infinity (number) = false
+null (null) OR Infinity (number) = true
+_level0 (movieclip) AND true (boolean) = true
+_level0 (movieclip) OR true (boolean) = true
+_level0 (movieclip) AND false (boolean) = false
+_level0 (movieclip) OR false (boolean) = true
+_level0 (movieclip) AND 1 (number) = true
+_level0 (movieclip) OR 1 (number) = true
+_level0 (movieclip) AND 0 (number) = false
+_level0 (movieclip) OR 0 (number) = true
+_level0 (movieclip) AND 42 (number) = true
+_level0 (movieclip) OR 42 (number) = true
+_level0 (movieclip) AND -100000 (number) = true
+_level0 (movieclip) OR -100000 (number) = true
+_level0 (movieclip) AND undefined (undefined) = false
+_level0 (movieclip) OR undefined (undefined) = true
+_level0 (movieclip) AND null (null) = false
+_level0 (movieclip) OR null (null) = true
+_level0 (movieclip) AND _level0 (movieclip) = true
+_level0 (movieclip) OR _level0 (movieclip) = true
+_level0 (movieclip) AND [object Object] (object) = true
+_level0 (movieclip) OR [object Object] (object) = true
+_level0 (movieclip) AND hi (string) = true
+_level0 (movieclip) OR hi (string) = true
+_level0 (movieclip) AND 1 (string) = true
+_level0 (movieclip) OR 1 (string) = true
+_level0 (movieclip) AND 0 (string) = true
+_level0 (movieclip) OR 0 (string) = true
+_level0 (movieclip) AND (string) = false
+_level0 (movieclip) OR (string) = true
+_level0 (movieclip) AND 1 (number) = true
+_level0 (movieclip) OR 1 (number) = true
+_level0 (movieclip) AND 0 (number) = false
+_level0 (movieclip) OR 0 (number) = true
+_level0 (movieclip) AND 0 (number) = false
+_level0 (movieclip) OR 0 (number) = true
+_level0 (movieclip) AND -0.2 (number) = true
+_level0 (movieclip) OR -0.2 (number) = true
+_level0 (movieclip) AND NaN (number) = false
+_level0 (movieclip) OR NaN (number) = true
+_level0 (movieclip) AND Infinity (number) = true
+_level0 (movieclip) OR Infinity (number) = true
+[object Object] (object) AND true (boolean) = true
+[object Object] (object) OR true (boolean) = true
+[object Object] (object) AND false (boolean) = false
+[object Object] (object) OR false (boolean) = true
+[object Object] (object) AND 1 (number) = true
+[object Object] (object) OR 1 (number) = true
+[object Object] (object) AND 0 (number) = false
+[object Object] (object) OR 0 (number) = true
+[object Object] (object) AND 42 (number) = true
+[object Object] (object) OR 42 (number) = true
+[object Object] (object) AND -100000 (number) = true
+[object Object] (object) OR -100000 (number) = true
+[object Object] (object) AND undefined (undefined) = false
+[object Object] (object) OR undefined (undefined) = true
+[object Object] (object) AND null (null) = false
+[object Object] (object) OR null (null) = true
+[object Object] (object) AND _level0 (movieclip) = true
+[object Object] (object) OR _level0 (movieclip) = true
+[object Object] (object) AND [object Object] (object) = true
+[object Object] (object) OR [object Object] (object) = true
+[object Object] (object) AND hi (string) = true
+[object Object] (object) OR hi (string) = true
+[object Object] (object) AND 1 (string) = true
+[object Object] (object) OR 1 (string) = true
+[object Object] (object) AND 0 (string) = true
+[object Object] (object) OR 0 (string) = true
+[object Object] (object) AND (string) = false
+[object Object] (object) OR (string) = true
+[object Object] (object) AND 1 (number) = true
+[object Object] (object) OR 1 (number) = true
+[object Object] (object) AND 0 (number) = false
+[object Object] (object) OR 0 (number) = true
+[object Object] (object) AND 0 (number) = false
+[object Object] (object) OR 0 (number) = true
+[object Object] (object) AND -0.2 (number) = true
+[object Object] (object) OR -0.2 (number) = true
+[object Object] (object) AND NaN (number) = false
+[object Object] (object) OR NaN (number) = true
+[object Object] (object) AND Infinity (number) = true
+[object Object] (object) OR Infinity (number) = true
+hi (string) AND true (boolean) = true
+hi (string) OR true (boolean) = true
+hi (string) AND false (boolean) = false
+hi (string) OR false (boolean) = true
+hi (string) AND 1 (number) = true
+hi (string) OR 1 (number) = true
+hi (string) AND 0 (number) = false
+hi (string) OR 0 (number) = true
+hi (string) AND 42 (number) = true
+hi (string) OR 42 (number) = true
+hi (string) AND -100000 (number) = true
+hi (string) OR -100000 (number) = true
+hi (string) AND undefined (undefined) = false
+hi (string) OR undefined (undefined) = true
+hi (string) AND null (null) = false
+hi (string) OR null (null) = true
+hi (string) AND _level0 (movieclip) = true
+hi (string) OR _level0 (movieclip) = true
+hi (string) AND [object Object] (object) = true
+hi (string) OR [object Object] (object) = true
+hi (string) AND hi (string) = true
+hi (string) OR hi (string) = true
+hi (string) AND 1 (string) = true
+hi (string) OR 1 (string) = true
+hi (string) AND 0 (string) = true
+hi (string) OR 0 (string) = true
+hi (string) AND (string) = false
+hi (string) OR (string) = true
+hi (string) AND 1 (number) = true
+hi (string) OR 1 (number) = true
+hi (string) AND 0 (number) = false
+hi (string) OR 0 (number) = true
+hi (string) AND 0 (number) = false
+hi (string) OR 0 (number) = true
+hi (string) AND -0.2 (number) = true
+hi (string) OR -0.2 (number) = true
+hi (string) AND NaN (number) = false
+hi (string) OR NaN (number) = true
+hi (string) AND Infinity (number) = true
+hi (string) OR Infinity (number) = true
+1 (string) AND true (boolean) = true
+1 (string) OR true (boolean) = true
+1 (string) AND false (boolean) = false
+1 (string) OR false (boolean) = true
+1 (string) AND 1 (number) = true
+1 (string) OR 1 (number) = true
+1 (string) AND 0 (number) = false
+1 (string) OR 0 (number) = true
+1 (string) AND 42 (number) = true
+1 (string) OR 42 (number) = true
+1 (string) AND -100000 (number) = true
+1 (string) OR -100000 (number) = true
+1 (string) AND undefined (undefined) = false
+1 (string) OR undefined (undefined) = true
+1 (string) AND null (null) = false
+1 (string) OR null (null) = true
+1 (string) AND _level0 (movieclip) = true
+1 (string) OR _level0 (movieclip) = true
+1 (string) AND [object Object] (object) = true
+1 (string) OR [object Object] (object) = true
+1 (string) AND hi (string) = true
+1 (string) OR hi (string) = true
+1 (string) AND 1 (string) = true
+1 (string) OR 1 (string) = true
+1 (string) AND 0 (string) = true
+1 (string) OR 0 (string) = true
+1 (string) AND (string) = false
+1 (string) OR (string) = true
+1 (string) AND 1 (number) = true
+1 (string) OR 1 (number) = true
+1 (string) AND 0 (number) = false
+1 (string) OR 0 (number) = true
+1 (string) AND 0 (number) = false
+1 (string) OR 0 (number) = true
+1 (string) AND -0.2 (number) = true
+1 (string) OR -0.2 (number) = true
+1 (string) AND NaN (number) = false
+1 (string) OR NaN (number) = true
+1 (string) AND Infinity (number) = true
+1 (string) OR Infinity (number) = true
+0 (string) AND true (boolean) = true
+0 (string) OR true (boolean) = true
+0 (string) AND false (boolean) = false
+0 (string) OR false (boolean) = true
+0 (string) AND 1 (number) = true
+0 (string) OR 1 (number) = true
+0 (string) AND 0 (number) = false
+0 (string) OR 0 (number) = true
+0 (string) AND 42 (number) = true
+0 (string) OR 42 (number) = true
+0 (string) AND -100000 (number) = true
+0 (string) OR -100000 (number) = true
+0 (string) AND undefined (undefined) = false
+0 (string) OR undefined (undefined) = true
+0 (string) AND null (null) = false
+0 (string) OR null (null) = true
+0 (string) AND _level0 (movieclip) = true
+0 (string) OR _level0 (movieclip) = true
+0 (string) AND [object Object] (object) = true
+0 (string) OR [object Object] (object) = true
+0 (string) AND hi (string) = true
+0 (string) OR hi (string) = true
+0 (string) AND 1 (string) = true
+0 (string) OR 1 (string) = true
+0 (string) AND 0 (string) = true
+0 (string) OR 0 (string) = true
+0 (string) AND (string) = false
+0 (string) OR (string) = true
+0 (string) AND 1 (number) = true
+0 (string) OR 1 (number) = true
+0 (string) AND 0 (number) = false
+0 (string) OR 0 (number) = true
+0 (string) AND 0 (number) = false
+0 (string) OR 0 (number) = true
+0 (string) AND -0.2 (number) = true
+0 (string) OR -0.2 (number) = true
+0 (string) AND NaN (number) = false
+0 (string) OR NaN (number) = true
+0 (string) AND Infinity (number) = true
+0 (string) OR Infinity (number) = true
+ (string) AND true (boolean) = false
+ (string) OR true (boolean) = true
+ (string) AND false (boolean) = false
+ (string) OR false (boolean) = false
+ (string) AND 1 (number) = false
+ (string) OR 1 (number) = true
+ (string) AND 0 (number) = false
+ (string) OR 0 (number) = false
+ (string) AND 42 (number) = false
+ (string) OR 42 (number) = true
+ (string) AND -100000 (number) = false
+ (string) OR -100000 (number) = true
+ (string) AND undefined (undefined) = false
+ (string) OR undefined (undefined) = false
+ (string) AND null (null) = false
+ (string) OR null (null) = false
+ (string) AND _level0 (movieclip) = false
+ (string) OR _level0 (movieclip) = true
+ (string) AND [object Object] (object) = false
+ (string) OR [object Object] (object) = true
+ (string) AND hi (string) = false
+ (string) OR hi (string) = true
+ (string) AND 1 (string) = false
+ (string) OR 1 (string) = true
+ (string) AND 0 (string) = false
+ (string) OR 0 (string) = true
+ (string) AND (string) = false
+ (string) OR (string) = false
+ (string) AND 1 (number) = false
+ (string) OR 1 (number) = true
+ (string) AND 0 (number) = false
+ (string) OR 0 (number) = false
+ (string) AND 0 (number) = false
+ (string) OR 0 (number) = false
+ (string) AND -0.2 (number) = false
+ (string) OR -0.2 (number) = true
+ (string) AND NaN (number) = false
+ (string) OR NaN (number) = false
+ (string) AND Infinity (number) = false
+ (string) OR Infinity (number) = true
+1 (number) AND true (boolean) = true
+1 (number) OR true (boolean) = true
+1 (number) AND false (boolean) = false
+1 (number) OR false (boolean) = true
+1 (number) AND 1 (number) = true
+1 (number) OR 1 (number) = true
+1 (number) AND 0 (number) = false
+1 (number) OR 0 (number) = true
+1 (number) AND 42 (number) = true
+1 (number) OR 42 (number) = true
+1 (number) AND -100000 (number) = true
+1 (number) OR -100000 (number) = true
+1 (number) AND undefined (undefined) = false
+1 (number) OR undefined (undefined) = true
+1 (number) AND null (null) = false
+1 (number) OR null (null) = true
+1 (number) AND _level0 (movieclip) = true
+1 (number) OR _level0 (movieclip) = true
+1 (number) AND [object Object] (object) = true
+1 (number) OR [object Object] (object) = true
+1 (number) AND hi (string) = true
+1 (number) OR hi (string) = true
+1 (number) AND 1 (string) = true
+1 (number) OR 1 (string) = true
+1 (number) AND 0 (string) = true
+1 (number) OR 0 (string) = true
+1 (number) AND (string) = false
+1 (number) OR (string) = true
+1 (number) AND 1 (number) = true
+1 (number) OR 1 (number) = true
+1 (number) AND 0 (number) = false
+1 (number) OR 0 (number) = true
+1 (number) AND 0 (number) = false
+1 (number) OR 0 (number) = true
+1 (number) AND -0.2 (number) = true
+1 (number) OR -0.2 (number) = true
+1 (number) AND NaN (number) = false
+1 (number) OR NaN (number) = true
+1 (number) AND Infinity (number) = true
+1 (number) OR Infinity (number) = true
+0 (number) AND true (boolean) = false
+0 (number) OR true (boolean) = true
+0 (number) AND false (boolean) = false
+0 (number) OR false (boolean) = false
+0 (number) AND 1 (number) = false
+0 (number) OR 1 (number) = true
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND 42 (number) = false
+0 (number) OR 42 (number) = true
+0 (number) AND -100000 (number) = false
+0 (number) OR -100000 (number) = true
+0 (number) AND undefined (undefined) = false
+0 (number) OR undefined (undefined) = false
+0 (number) AND null (null) = false
+0 (number) OR null (null) = false
+0 (number) AND _level0 (movieclip) = false
+0 (number) OR _level0 (movieclip) = true
+0 (number) AND [object Object] (object) = false
+0 (number) OR [object Object] (object) = true
+0 (number) AND hi (string) = false
+0 (number) OR hi (string) = true
+0 (number) AND 1 (string) = false
+0 (number) OR 1 (string) = true
+0 (number) AND 0 (string) = false
+0 (number) OR 0 (string) = true
+0 (number) AND (string) = false
+0 (number) OR (string) = false
+0 (number) AND 1 (number) = false
+0 (number) OR 1 (number) = true
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND -0.2 (number) = false
+0 (number) OR -0.2 (number) = true
+0 (number) AND NaN (number) = false
+0 (number) OR NaN (number) = false
+0 (number) AND Infinity (number) = false
+0 (number) OR Infinity (number) = true
+0 (number) AND true (boolean) = false
+0 (number) OR true (boolean) = true
+0 (number) AND false (boolean) = false
+0 (number) OR false (boolean) = false
+0 (number) AND 1 (number) = false
+0 (number) OR 1 (number) = true
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND 42 (number) = false
+0 (number) OR 42 (number) = true
+0 (number) AND -100000 (number) = false
+0 (number) OR -100000 (number) = true
+0 (number) AND undefined (undefined) = false
+0 (number) OR undefined (undefined) = false
+0 (number) AND null (null) = false
+0 (number) OR null (null) = false
+0 (number) AND _level0 (movieclip) = false
+0 (number) OR _level0 (movieclip) = true
+0 (number) AND [object Object] (object) = false
+0 (number) OR [object Object] (object) = true
+0 (number) AND hi (string) = false
+0 (number) OR hi (string) = true
+0 (number) AND 1 (string) = false
+0 (number) OR 1 (string) = true
+0 (number) AND 0 (string) = false
+0 (number) OR 0 (string) = true
+0 (number) AND (string) = false
+0 (number) OR (string) = false
+0 (number) AND 1 (number) = false
+0 (number) OR 1 (number) = true
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND 0 (number) = false
+0 (number) OR 0 (number) = false
+0 (number) AND -0.2 (number) = false
+0 (number) OR -0.2 (number) = true
+0 (number) AND NaN (number) = false
+0 (number) OR NaN (number) = false
+0 (number) AND Infinity (number) = false
+0 (number) OR Infinity (number) = true
+-0.2 (number) AND true (boolean) = true
+-0.2 (number) OR true (boolean) = true
+-0.2 (number) AND false (boolean) = false
+-0.2 (number) OR false (boolean) = true
+-0.2 (number) AND 1 (number) = true
+-0.2 (number) OR 1 (number) = true
+-0.2 (number) AND 0 (number) = false
+-0.2 (number) OR 0 (number) = true
+-0.2 (number) AND 42 (number) = true
+-0.2 (number) OR 42 (number) = true
+-0.2 (number) AND -100000 (number) = true
+-0.2 (number) OR -100000 (number) = true
+-0.2 (number) AND undefined (undefined) = false
+-0.2 (number) OR undefined (undefined) = true
+-0.2 (number) AND null (null) = false
+-0.2 (number) OR null (null) = true
+-0.2 (number) AND _level0 (movieclip) = true
+-0.2 (number) OR _level0 (movieclip) = true
+-0.2 (number) AND [object Object] (object) = true
+-0.2 (number) OR [object Object] (object) = true
+-0.2 (number) AND hi (string) = true
+-0.2 (number) OR hi (string) = true
+-0.2 (number) AND 1 (string) = true
+-0.2 (number) OR 1 (string) = true
+-0.2 (number) AND 0 (string) = true
+-0.2 (number) OR 0 (string) = true
+-0.2 (number) AND (string) = false
+-0.2 (number) OR (string) = true
+-0.2 (number) AND 1 (number) = true
+-0.2 (number) OR 1 (number) = true
+-0.2 (number) AND 0 (number) = false
+-0.2 (number) OR 0 (number) = true
+-0.2 (number) AND 0 (number) = false
+-0.2 (number) OR 0 (number) = true
+-0.2 (number) AND -0.2 (number) = true
+-0.2 (number) OR -0.2 (number) = true
+-0.2 (number) AND NaN (number) = false
+-0.2 (number) OR NaN (number) = true
+-0.2 (number) AND Infinity (number) = true
+-0.2 (number) OR Infinity (number) = true
+NaN (number) AND true (boolean) = false
+NaN (number) OR true (boolean) = true
+NaN (number) AND false (boolean) = false
+NaN (number) OR false (boolean) = false
+NaN (number) AND 1 (number) = false
+NaN (number) OR 1 (number) = true
+NaN (number) AND 0 (number) = false
+NaN (number) OR 0 (number) = false
+NaN (number) AND 42 (number) = false
+NaN (number) OR 42 (number) = true
+NaN (number) AND -100000 (number) = false
+NaN (number) OR -100000 (number) = true
+NaN (number) AND undefined (undefined) = false
+NaN (number) OR undefined (undefined) = false
+NaN (number) AND null (null) = false
+NaN (number) OR null (null) = false
+NaN (number) AND _level0 (movieclip) = false
+NaN (number) OR _level0 (movieclip) = true
+NaN (number) AND [object Object] (object) = false
+NaN (number) OR [object Object] (object) = true
+NaN (number) AND hi (string) = false
+NaN (number) OR hi (string) = true
+NaN (number) AND 1 (string) = false
+NaN (number) OR 1 (string) = true
+NaN (number) AND 0 (string) = false
+NaN (number) OR 0 (string) = true
+NaN (number) AND (string) = false
+NaN (number) OR (string) = false
+NaN (number) AND 1 (number) = false
+NaN (number) OR 1 (number) = true
+NaN (number) AND 0 (number) = false
+NaN (number) OR 0 (number) = false
+NaN (number) AND 0 (number) = false
+NaN (number) OR 0 (number) = false
+NaN (number) AND -0.2 (number) = false
+NaN (number) OR -0.2 (number) = true
+NaN (number) AND NaN (number) = false
+NaN (number) OR NaN (number) = false
+NaN (number) AND Infinity (number) = false
+NaN (number) OR Infinity (number) = true
+Infinity (number) AND true (boolean) = true
+Infinity (number) OR true (boolean) = true
+Infinity (number) AND false (boolean) = false
+Infinity (number) OR false (boolean) = true
+Infinity (number) AND 1 (number) = true
+Infinity (number) OR 1 (number) = true
+Infinity (number) AND 0 (number) = false
+Infinity (number) OR 0 (number) = true
+Infinity (number) AND 42 (number) = true
+Infinity (number) OR 42 (number) = true
+Infinity (number) AND -100000 (number) = true
+Infinity (number) OR -100000 (number) = true
+Infinity (number) AND undefined (undefined) = false
+Infinity (number) OR undefined (undefined) = true
+Infinity (number) AND null (null) = false
+Infinity (number) OR null (null) = true
+Infinity (number) AND _level0 (movieclip) = true
+Infinity (number) OR _level0 (movieclip) = true
+Infinity (number) AND [object Object] (object) = true
+Infinity (number) OR [object Object] (object) = true
+Infinity (number) AND hi (string) = true
+Infinity (number) OR hi (string) = true
+Infinity (number) AND 1 (string) = true
+Infinity (number) OR 1 (string) = true
+Infinity (number) AND 0 (string) = true
+Infinity (number) OR 0 (string) = true
+Infinity (number) AND (string) = false
+Infinity (number) OR (string) = true
+Infinity (number) AND 1 (number) = true
+Infinity (number) OR 1 (number) = true
+Infinity (number) AND 0 (number) = false
+Infinity (number) OR 0 (number) = true
+Infinity (number) AND 0 (number) = false
+Infinity (number) OR 0 (number) = true
+Infinity (number) AND -0.2 (number) = true
+Infinity (number) OR -0.2 (number) = true
+Infinity (number) AND NaN (number) = false
+Infinity (number) OR NaN (number) = true
+Infinity (number) AND Infinity (number) = true
+Infinity (number) OR Infinity (number) = true
diff-tree 77266adc81a3093449703572a6123d71d33277d4 (from da61842ce18333f525b5f18f790cebf68141d11a)
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Mar 12 21:37:21 2007 +0100
implement ToString, Add and Or actions
NB: And and Or are not implemented for Flash4 because I was to lazy to write tests.
diff --git a/libswfdec/swfdec_script.c b/libswfdec/swfdec_script.c
index ac4921c..3d6a836 100644
--- a/libswfdec/swfdec_script.c
+++ b/libswfdec/swfdec_script.c
@@ -191,6 +191,55 @@ swfdec_action_push_string (JSContext *cx
return JS_TRUE;
}
+static JSBool
+swfdec_value_to_boolean_5 (JSContext *cx, jsval val)
+{
+ if (JSVAL_IS_BOOLEAN (val)) {
+ return JSVAL_TO_BOOLEAN (val);
+ } else if (JSVAL_IS_INT (val)) {
+ return JSVAL_TO_INT (val) != 0;
+ } else if (JSVAL_IS_DOUBLE (val)) {
+ double d = *JSVAL_TO_DOUBLE (val);
+ return d != 0.0 && !isnan (d);
+ } else if (JSVAL_IS_STRING (val)) {
+ double d;
+ if (!JS_ValueToNumber (cx, val, &d))
+ return 0;
+ return d != 0.0 && !isnan (d);
+ } else if (JSVAL_IS_NULL (val)) {
+ return JS_FALSE;
+ } else if (JSVAL_IS_VOID (val)) {
+ return JS_FALSE;
+ } else if (JSVAL_IS_OBJECT (val)) {
+ return JS_TRUE;
+ }
+ g_assert_not_reached ();
+ return JS_FALSE;
+}
+
+static JSBool
+swfdec_value_to_boolean_7 (JSContext *cx, jsval val)
+{
+ if (JSVAL_IS_BOOLEAN (val)) {
+ return JSVAL_TO_BOOLEAN (val);
+ } else if (JSVAL_IS_INT (val)) {
+ return JSVAL_TO_INT (val) != 0;
+ } else if (JSVAL_IS_DOUBLE (val)) {
+ double d = *JSVAL_TO_DOUBLE (val);
+ return d != 0.0 && !isnan (d);
+ } else if (JSVAL_IS_STRING (val)) {
+ return JS_GetStringLength (JSVAL_TO_STRING (val)) > 0;
+ } else if (JSVAL_IS_NULL (val)) {
+ return JS_FALSE;
+ } else if (JSVAL_IS_VOID (val)) {
+ return JS_FALSE;
+ } else if (JSVAL_IS_OBJECT (val)) {
+ return JS_TRUE;
+ }
+ g_assert_not_reached ();
+ return JS_FALSE;
+}
+
static double
swfdec_value_to_number (JSContext *cx, jsval val)
{
@@ -930,7 +979,7 @@ swfdec_action_binary (JSContext *cx, gui
static JSString *
swfdec_action_to_string_5 (JSContext *cx, jsval val)
{
- if (JSVAL_IS_VOID (val) || JSVAL_IS_NULL (val))
+ if (JSVAL_IS_VOID (val))
return cx->runtime->emptyString;
return js_ValueToString (cx, val);
}
@@ -1936,6 +1985,17 @@ swfdec_action_to_number (JSContext *cx,
}
static JSBool
+swfdec_action_to_string (JSContext *cx, guint action, const guint8 *data, guint len)
+{
+ JSString *s;
+ s = JS_ValueToString(cx, cx->fp->sp[-1]);
+ if (!s)
+ return JS_FALSE;
+ cx->fp->sp[-1] = STRING_TO_JSVAL (s);
+ return JS_TRUE;
+}
+
+static JSBool
swfdec_action_type_of (JSContext *cx, guint action, const guint8 *data, guint len)
{
jsval val;
@@ -2010,6 +2070,71 @@ swfdec_action_extends (JSContext *cx, gu
return JS_TRUE;
}
+static JSBool
+swfdec_action_enumerate2 (JSContext *cx, guint action, const guint8 *data, guint len)
+{
+ JSObject *obj;
+ JSIdArray *array;
+ guint i;
+
+ if (!JSVAL_IS_OBJECT (cx->fp->sp[-1]) || cx->fp->sp[-1] == JSVAL_NULL) {
+ SWFDEC_ERROR ("Enumerate2 called without an object");
+ cx->fp->sp[-1] = JSVAL_NULL;
+ return JS_TRUE;
+ }
+ obj = JSVAL_TO_OBJECT (cx->fp->sp[-1]);
+ cx->fp->sp[-1] = JSVAL_NULL;
+ array = JS_Enumerate (cx, obj);
+ if (!array)
+ return JS_FALSE;
+ if ((guint) (cx->fp->spend - cx->fp->sp) < array->length) {
+ SWFDEC_ERROR ("FIXME: not enough stack space, need %u, got %d",
+ array->length, cx->fp->spend - cx->fp->sp);
+ JS_DestroyIdArray (cx, array);
+ return JS_FALSE;
+ }
+ for (i = 0; i < array->length; i++) {
+ if (!JS_IdToValue (cx, array->vector[i], cx->fp->sp++)) {
+ JS_DestroyIdArray (cx, array);
+ return JS_FALSE;
+ }
+ }
+ JS_DestroyIdArray (cx, array);
+ return JS_TRUE;
+}
+
+static JSBool
+swfdec_action_logical_5 (JSContext *cx, guint action, const guint8 *data, guint len)
+{
+ JSBool l, r;
+
+ l = swfdec_value_to_boolean_5 (cx, cx->fp->sp[-1]);
+ r = swfdec_value_to_boolean_5 (cx, cx->fp->sp[-2]);
+
+ cx->fp->sp--;
+ if (action == 0x10)
+ cx->fp->sp[-1] = l && r ? JSVAL_TRUE : JSVAL_FALSE;
+ else
+ cx->fp->sp[-1] = l || r ? JSVAL_TRUE : JSVAL_FALSE;
+ return JS_TRUE;
+}
+
+static JSBool
+swfdec_action_logical_7 (JSContext *cx, guint action, const guint8 *data, guint len)
+{
+ JSBool l, r;
+
+ l = swfdec_value_to_boolean_7 (cx, cx->fp->sp[-1]);
+ r = swfdec_value_to_boolean_7 (cx, cx->fp->sp[-2]);
+
+ cx->fp->sp--;
+ if (action == 0x10)
+ cx->fp->sp[-1] = l && r ? JSVAL_TRUE : JSVAL_FALSE;
+ else
+ cx->fp->sp[-1] = l || r ? JSVAL_TRUE : JSVAL_FALSE;
+ return JS_TRUE;
+}
+
/*** PRINT FUNCTIONS ***/
static char *
@@ -2321,8 +2446,8 @@ static const SwfdecActionSpec actions[25
[0x0d] = { "Divide", NULL, 2, 1, { NULL, swfdec_action_binary, swfdec_action_binary, swfdec_action_binary, swfdec_action_binary } },
[0x0e] = { "Equals", NULL, 2, 1, { NULL, swfdec_action_old_compare, swfdec_action_old_compare, swfdec_action_old_compare, swfdec_action_old_compare } },
[0x0f] = { "Less", NULL, 2, 1, { NULL, swfdec_action_old_compare, swfdec_action_old_compare, swfdec_action_old_compare, swfdec_action_old_compare } },
- [0x10] = { "And", NULL },
- [0x11] = { "Or", NULL },
+ [0x10] = { "And", NULL, 2, 1, { NULL, /* FIXME */NULL, swfdec_action_logical_5, swfdec_action_logical_5, swfdec_action_logical_7 } },
+ [0x11] = { "Or", NULL, 2, 1, { NULL, /* FIXME */NULL, swfdec_action_logical_5, swfdec_action_logical_5, swfdec_action_logical_7 } },
[0x12] = { "Not", NULL, 1, 1, { NULL, swfdec_action_not_4, swfdec_action_not_5, swfdec_action_not_5, swfdec_action_not_5 } },
[0x13] = { "StringEquals", NULL },
[0x14] = { "StringLength", NULL },
@@ -2372,7 +2497,7 @@ static const SwfdecActionSpec actions[25
[0x48] = { "Less2", NULL, 2, 1, { NULL, NULL, swfdec_action_new_comparison_6, swfdec_action_new_comparison_6, swfdec_action_new_comparison_7 } },
[0x49] = { "Equals2", NULL, 2, 1, { NULL, NULL, swfdec_action_equals2, swfdec_action_equals2, swfdec_action_equals2 } },
[0x4a] = { "ToNumber", NULL, 1, 1, { NULL, NULL, swfdec_action_to_number, swfdec_action_to_number, swfdec_action_to_number } },
- [0x4b] = { "ToString", NULL },
+ [0x4b] = { "ToString", NULL, 1, 1, { NULL, NULL, swfdec_action_to_string, swfdec_action_to_string, swfdec_action_to_string } },
[0x4c] = { "PushDuplicate", NULL, 1, 2, { NULL, NULL, swfdec_action_push_duplicate, swfdec_action_push_duplicate, swfdec_action_push_duplicate } },
[0x4d] = { "Swap", NULL, 2, 2, { NULL, NULL, swfdec_action_swap, swfdec_action_swap, swfdec_action_swap } },
[0x4e] = { "GetMember", NULL, 2, 1, { NULL, swfdec_action_get_member, swfdec_action_get_member, swfdec_action_get_member, swfdec_action_get_member } },
@@ -2383,7 +2508,7 @@ static const SwfdecActionSpec actions[25
[0x53] = { "NewMethod", NULL, -1, 1, { NULL, NULL, swfdec_action_new_method, swfdec_action_new_method, swfdec_action_new_method } },
/* version 6 */
[0x54] = { "InstanceOf", NULL },
- [0x55] = { "Enumerate2", NULL },
+ [0x55] = { "Enumerate2", NULL, 1, -1, { NULL, NULL, NULL, swfdec_action_enumerate2, swfdec_action_enumerate2 } },
/* version 5 */
[0x60] = { "BitAnd", NULL, 2, 1, { NULL, NULL, swfdec_action_bitwise, swfdec_action_bitwise, swfdec_action_bitwise } },
[0x61] = { "BitOr", NULL, 2, 1, { NULL, NULL, swfdec_action_bitwise, swfdec_action_bitwise, swfdec_action_bitwise } },
diff-tree da61842ce18333f525b5f18f790cebf68141d11a (from a4707072b71463188e6fa49a397f893fc9ad5b89)
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Mar 12 21:36:37 2007 +0100
JSIdArray length should be unsigned
diff --git a/libswfdec/js/jsapi.c b/libswfdec/js/jsapi.c
index e33b846..7485350 100644
--- a/libswfdec/js/jsapi.c
+++ b/libswfdec/js/jsapi.c
@@ -2845,7 +2845,8 @@ JS_ClearScope(JSContext *cx, JSObject *o
JS_PUBLIC_API(JSIdArray *)
JS_Enumerate(JSContext *cx, JSObject *obj)
{
- jsint i, n;
+ jsuint i;
+ jsint n;
jsval iter_state, num_properties;
jsid id;
JSIdArray *ida;
diff --git a/libswfdec/js/jsapi.h b/libswfdec/js/jsapi.h
index 9cc1dd0..28dcbfa 100644
--- a/libswfdec/js/jsapi.h
+++ b/libswfdec/js/jsapi.h
@@ -813,7 +813,7 @@ struct JSProperty {
};
struct JSIdArray {
- jsint length;
+ jsuint length;
jsid vector[1]; /* actually, length jsid words */
};
diff --git a/libswfdec/js/jsinterp.c b/libswfdec/js/jsinterp.c
index 121962f..fbf54b8 100644
--- a/libswfdec/js/jsinterp.c
+++ b/libswfdec/js/jsinterp.c
@@ -1205,7 +1205,7 @@ ImportProperty(JSContext *cx, JSObject *
JSObject *obj2, *target, *funobj, *closure;
JSString *str;
uintN attrs;
- jsint i;
+ jsuint i;
jsval value;
if (JSVAL_IS_VOID(id)) {
More information about the Swfdec
mailing list