Benjamin Otte
2007-Mar-12 16:35 UTC
[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
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@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@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@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@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@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@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@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@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@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@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@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)) {
Seemingly Similar Threads
- 11 commits - libswfdec/swfdec_color.c libswfdec/swfdec_flv_decoder.c libswfdec/swfdec_js_net_stream.c libswfdec/swfdec_movie.c libswfdec/swfdec_net_stream.c libswfdec/swfdec_net_stream.h libswfdec/swfdec_pattern.c libswfdec/swfdec_script.c NEWS test/trace
- 8 commits - libswfdec/swfdec_as_interpret.c libswfdec/swfdec_sound.c libswfdec/swfdec_sound.h test/trace
- 9 commits - libswfdec/swfdec_as_string.c libswfdec/swfdec_color_as.c libswfdec/swfdec_interval.c test/image test/trace
- 4 commits - libswfdec/swfdec_as_interpret.c test/trace
- 6 commits - libswfdec/swfdec_as_strings.c libswfdec/swfdec_initialize.as libswfdec/swfdec_initialize.h libswfdec/swfdec_text_field_movie_as.c libswfdec/swfdec_text_field_movie.c libswfdec/swfdec_text_field_movie.h test/trace