Benjamin Otte
2007-Mar-16 13:13 UTC
[Swfdec] 4 commits - libswfdec/swfdec_script.c test/image test/trace
libswfdec/swfdec_script.c | 15 ++++++++++--- test/image/Makefile.am | 6 ++++- test/image/bw.jpg |binary test/image/image.c | 1 test/image/negative-color-transform.c | 32 ++++++++++++++++++++++++++++ test/image/negative-color-transform.swf |binary test/image/negative-color-transform.swf.png |binary test/trace/Makefile.am | 7 ++++++ test/trace/function-scope-5.swf |binary test/trace/function-scope-5.swf.trace | 3 ++ test/trace/function-scope-6.swf |binary test/trace/function-scope-6.swf.trace | 3 ++ test/trace/function-scope-7.swf |binary test/trace/function-scope-7.swf.trace | 3 ++ test/trace/function-scope.as | 18 +++++++++++++++ 15 files changed, 84 insertions(+), 4 deletions(-) New commits: diff-tree 852a195c76af81618bc0b4ebf3bc820ac03bbb95 (from e61b375e9d7e9921d312bdb98d303db45ef1c8db) Author: Benjamin Otte <otte@gnome.org> Date: Fri Mar 16 21:08:22 2007 +0100 print "OK" when a test succeeded diff --git a/test/image/image.c b/test/image/image.c index 85c00e1..29b96a3 100644 --- a/test/image/image.c +++ b/test/image/image.c @@ -189,6 +189,7 @@ run_test (const char *filename) } cairo_surface_destroy (surface); g_object_unref (player); + g_print (" OK\n"); return TRUE; error: diff-tree e61b375e9d7e9921d312bdb98d303db45ef1c8db (from 5bcd6f8b43f4587911f5c34c77e33d00e7c00e67) Author: Benjamin Otte <otte@gnome.org> Date: Fri Mar 16 21:07:09 2007 +0100 add a test for negative color transforms diff --git a/test/image/Makefile.am b/test/image/Makefile.am index e9eec1f..84bed85 100644 --- a/test/image/Makefile.am +++ b/test/image/Makefile.am @@ -7,6 +7,7 @@ image_LDFLAGS = $(SWF_LIBS) $(CAIRO_LIBS EXTRA_DIST = \ README \ + bw.jpg \ color-transform-add80.swf \ color-transform-add80.swf.png \ color-transform-add80-alpha.swf \ @@ -14,4 +15,7 @@ EXTRA_DIST = \ image-jpeg-alpha.swf \ image-jpeg-alpha.swf.png \ image-lossless-alpha.swf \ - image-lossless-alpha.swf.png + image-lossless-alpha.swf.png \ + negative-color-transform.c \ + negative-color-transform.swf \ + negative-color-transform.swf.png diff --git a/test/image/bw.jpg b/test/image/bw.jpg new file mode 100644 index 0000000..bd428a5 Binary files /dev/null and b/test/image/bw.jpg differ diff --git a/test/image/negative-color-transform.c b/test/image/negative-color-transform.c new file mode 100644 index 0000000..1e18c7d --- /dev/null +++ b/test/image/negative-color-transform.c @@ -0,0 +1,32 @@ +/* gcc `pkg-config --libs --cflags libming` negative-color-transform.c -o negative-color-transform && ./negative-color-transform + */ + +#include <ming.h> +#include <stdio.h> + +int +main (int argc, char **argv) +{ + SWFMovie movie; + SWFDisplayItem item; + SWFJpegBitmap image; + SWFShape shape; + + if (Ming_init ()) + return 1; + Ming_useSWFVersion (7); + + movie = newSWFMovie(); + SWFMovie_setRate (movie, 1); + SWFMovie_setDimension (movie, 10, 10); + + image = newSWFJpegBitmap (fopen ("bw.jpg", "r+")); + shape = newSWFShapeFromBitmap ((SWFBitmap) image, SWFFILL_BITMAP); + + item = SWFMovie_add (movie, (SWFBlock) shape); + SWFDisplayItem_setCXform (item, newSWFCXform (100, 0, 0, 0, -90./256, 1.0, 1.0, 1.0)); + SWFMovie_nextFrame (movie); + + SWFMovie_save (movie, "negative-color-transform.swf"); + return 0; +} diff --git a/test/image/negative-color-transform.swf b/test/image/negative-color-transform.swf new file mode 100644 index 0000000..7c9eebe Binary files /dev/null and b/test/image/negative-color-transform.swf differ diff --git a/test/image/negative-color-transform.swf.png b/test/image/negative-color-transform.swf.png new file mode 100644 index 0000000..886809e Binary files /dev/null and b/test/image/negative-color-transform.swf.png differ diff-tree 5bcd6f8b43f4587911f5c34c77e33d00e7c00e67 (from 685b09b065232899527707ac18ddba292cb6459e) Author: Benjamin Otte <otte@gnome.org> Date: Fri Mar 16 18:00:46 2007 +0100 add function scope tests diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am index 20e4684..c72b19b 100644 --- a/test/trace/Makefile.am +++ b/test/trace/Makefile.am @@ -75,6 +75,13 @@ EXTRA_DIST = \ function2.swf.trace \ function-prototype-chain.swf \ function-prototype-chain.swf.trace \ + function-scope.as \ + function-scope-5.swf \ + function-scope-5.swf.trace \ + function-scope-6.swf \ + function-scope-6.swf.trace \ + function-scope-7.swf \ + function-scope-7.swf.trace \ function-undefined.swf \ function-undefined.swf.trace \ goto1.swf \ diff --git a/test/trace/function-scope-5.swf b/test/trace/function-scope-5.swf new file mode 100644 index 0000000..aad1665 Binary files /dev/null and b/test/trace/function-scope-5.swf differ diff --git a/test/trace/function-scope-5.swf.trace b/test/trace/function-scope-5.swf.trace new file mode 100644 index 0000000..a17a92e --- /dev/null +++ b/test/trace/function-scope-5.swf.trace @@ -0,0 +1,3 @@ +Check the function scope chain works +outermost scope +outermost scope diff --git a/test/trace/function-scope-6.swf b/test/trace/function-scope-6.swf new file mode 100644 index 0000000..6847e4d Binary files /dev/null and b/test/trace/function-scope-6.swf differ diff --git a/test/trace/function-scope-6.swf.trace b/test/trace/function-scope-6.swf.trace new file mode 100644 index 0000000..a2c85f2 --- /dev/null +++ b/test/trace/function-scope-6.swf.trace @@ -0,0 +1,3 @@ +Check the function scope chain works +inner scope +innermost scope diff --git a/test/trace/function-scope-7.swf b/test/trace/function-scope-7.swf new file mode 100644 index 0000000..3bba0db Binary files /dev/null and b/test/trace/function-scope-7.swf differ diff --git a/test/trace/function-scope-7.swf.trace b/test/trace/function-scope-7.swf.trace new file mode 100644 index 0000000..a2c85f2 --- /dev/null +++ b/test/trace/function-scope-7.swf.trace @@ -0,0 +1,3 @@ +Check the function scope chain works +inner scope +innermost scope diff --git a/test/trace/function-scope.as b/test/trace/function-scope.as new file mode 100644 index 0000000..ae89edb --- /dev/null +++ b/test/trace/function-scope.as @@ -0,0 +1,18 @@ +// makeswf -v 7 -s 200x150 -r 1 -o function-scope.swf function-scope.as + +trace ("Check the function scope chain works"); +Foo = function () { + var bla = "inner scope"; + this.bla = "this"; + this.func = function () { + trace (bla); + var bla = "innermost scope"; + this.func = function () { + trace (bla); + }; + }; +}; +bla = "outermost scope"; +x = new Foo (); +x.func (); +x.func (); diff-tree 685b09b065232899527707ac18ddba292cb6459e (from 0c7b304d2eb371c85616808e083f353e174bf263) Author: Benjamin Otte <otte@gnome.org> Date: Fri Mar 16 17:58:30 2007 +0100 fix scope chains in Flash 5 diff --git a/libswfdec/swfdec_script.c b/libswfdec/swfdec_script.c index 7b520eb..5c6a0c2 100644 --- a/libswfdec/swfdec_script.c +++ b/libswfdec/swfdec_script.c @@ -1647,6 +1647,7 @@ swfdec_action_define_function (JSContext SwfdecBits bits; JSFunction *fun; SwfdecScript *script; + JSObject *scope; gboolean has_preloads = FALSE; guint flags = 0; guint8 *preloads = NULL; @@ -1659,14 +1660,23 @@ swfdec_action_define_function (JSContext return JS_FALSE; } n_args = swfdec_bits_get_u16 (&bits); + scope = cx->fp->scopeChain; + script = cx->fp->swf; + if (script->version == 5) { + /* In Flash 5 there's only the root scope as a parent scope */ + JSObject *parent; + /* FIXME: this implementation is hacky (but it works) */ + while (JS_GetClass (scope) == &js_CallClass && (parent = JS_GetParent (cx, scope))) + scope = parent; + } if (*function_name == '\0') { /* anonymous function */ fun = JS_NewFunction (cx, NULL, n_args, JSFUN_LAMBDA | JSFUN_HEAVYWEIGHT, - cx->fp->scopeChain, NULL); + scope, NULL); } else { /* named function */ fun = JS_NewFunction (cx, NULL, n_args, JSFUN_HEAVYWEIGHT, - cx->fp->scopeChain, function_name); + scope, function_name); } if (fun == NULL) return JS_FALSE; @@ -1716,7 +1726,6 @@ swfdec_action_define_function (JSContext } size = swfdec_bits_get_u16 (&bits); /* check the script can be created */ - script = cx->fp->swf; if (script->buffer->data + script->buffer->length < cx->fp->pc + 3 + len + size) { SWFDEC_ERROR ("size of function is too big"); return FALSE;
Reasonably Related Threads
- 22 commits - libswfdec/js libswfdec/swfdec_debugger.c libswfdec/swfdec_js.c libswfdec/swfdec_js_global.c libswfdec/swfdec_js_movie.c libswfdec/swfdec_movie.c libswfdec/swfdec_player.c libswfdec/swfdec_player_internal.h libswfdec/swfdec_script.c
- 11 commits - libswfdec/swfdec_font.c libswfdec/swfdec_font.h libswfdec/swfdec_js_movie.c libswfdec/swfdec_script.c libswfdec/swfdec_script.h test/.gitignore test/trace
- 3 commits - libswfdec/swfdec_js.c libswfdec/swfdec_js_movie.c libswfdec/swfdec_script.c
- Branch 'interpreter' - 9 commits - libswfdec/js libswfdec/swfdec_script.c libswfdec/swfdec_script.h player/swfdec_debug_stack.c test/trace
- 10 commits - libswfdec/js libswfdec/swfdec_js_color.c libswfdec/swfdec_js_connection.c libswfdec/swfdec_js_movie.c libswfdec/swfdec_js_net_stream.c libswfdec/swfdec_js_video.c libswfdec/swfdec_js_xml.c libswfdec/swfdec_script.c player/.gitignore