[Swfdec] 3 commits - libswfdec/swfdec_js_net_stream.c libswfdec/swfdec_script.c test/trace

Benjamin Otte company at kemper.freedesktop.org
Wed Mar 21 04:50:35 PDT 2007


 libswfdec/swfdec_js_net_stream.c            |   42 +++++++++++++++++++++++-
 libswfdec/swfdec_script.c                   |    2 -
 test/trace/Makefile.am                      |    3 +
 test/trace/registerclass-previous.c         |   49 ++++++++++++++++++++++++++++
 test/trace/registerclass-previous.swf       |binary
 test/trace/registerclass-previous.swf.trace |    3 +
 6 files changed, 97 insertions(+), 2 deletions(-)

New commits:
diff-tree b12efb820117b62a7150d13359499678e7dcf31d (from fbd556ee977d205de43503fc43b47edb40bb07d1)
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Mar 21 12:50:06 2007 +0100

    add a test to confirm that registerClass does not effect previous instances

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 32583ec..3a7fd4c 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -145,6 +145,9 @@ EXTRA_DIST = \
 	preload.swf.trace \
 	prototypes.swf \
 	prototypes.swf.trace \
+	registerclass-previous.c \
+	registerclass-previous.swf \
+	registerclass-previous.swf.trace \
 	registerclass-properties.swf \
 	registerclass-properties.swf.trace \
 	rotation-5.swf \
diff --git a/test/trace/registerclass-previous.c b/test/trace/registerclass-previous.c
new file mode 100644
index 0000000..1ff084c
--- /dev/null
+++ b/test/trace/registerclass-previous.c
@@ -0,0 +1,49 @@
+/* gcc `pkg-config --libs --cflags libming` registerclass-previous.c -o registerclass-previous && ./registerclass-previous
+ */
+
+#include <ming.h>
+
+int
+main (int argc, char **argv)
+{
+  SWFMovie movie;
+  SWFMovieClip clip;
+  SWFDisplayItem item;
+
+  if (Ming_init ())
+    return 1;
+  Ming_useSWFVersion (7);
+
+  movie = newSWFMovie();
+  SWFMovie_setRate (movie, 1);
+  SWFMovie_setDimension (movie, 200, 150);
+
+  clip = newSWFMovieClip ();
+  SWFMovie_addExport (movie, (SWFBlock) clip, "export");
+  item = SWFMovie_add (movie, (SWFBlock) clip);
+  SWFDisplayItem_setName (item, "m");
+  SWFMovie_add (movie, (SWFBlock) compileSWFActionCode (""
+      "trace (\"Check that registerClass does not influence previously created instances\");"
+      "fun = function () {"
+      "  trace (this + \": Constructor\");"
+      "};"
+      "fun.prototype = new Object ();"
+      "fun.prototype.foo = function () {"
+      "  trace (\"foo called on \" + this);"
+      "};"
+      "Object.registerClass (\"export\", fun);"
+      "m.foo ();"
+      ""));
+  SWFMovie_nextFrame (movie);
+
+  item = SWFMovie_add (movie, (SWFBlock) clip);
+  SWFDisplayItem_setName (item, "m2");
+  SWFMovie_add (movie, (SWFBlock) compileSWFActionCode (""
+      "m.foo ();"
+      "m2.foo ();"
+      "stop ();"
+      ""));
+
+  SWFMovie_save (movie, "registerclass-previous.swf");
+  return 0;
+}
diff --git a/test/trace/registerclass-previous.swf b/test/trace/registerclass-previous.swf
new file mode 100644
index 0000000..c8c5475
Binary files /dev/null and b/test/trace/registerclass-previous.swf differ
diff --git a/test/trace/registerclass-previous.swf.trace b/test/trace/registerclass-previous.swf.trace
new file mode 100644
index 0000000..bdedf43
--- /dev/null
+++ b/test/trace/registerclass-previous.swf.trace
@@ -0,0 +1,3 @@
+Check that registerClass does not influence previously created instances
+_level0.m2: Constructor
+foo called on _level0.m2
diff-tree fbd556ee977d205de43503fc43b47edb40bb07d1 (from 9d7d1f6a72cfcbcc94184d350ca0932ca675ba07)
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Mar 21 12:06:22 2007 +0100

    implement NetStream::bytesLoaded and NetStream::bytesTotal

diff --git a/libswfdec/swfdec_js_net_stream.c b/libswfdec/swfdec_js_net_stream.c
index 2b91bfb..a977ea8 100644
--- a/libswfdec/swfdec_js_net_stream.c
+++ b/libswfdec/swfdec_js_net_stream.c
@@ -110,8 +110,48 @@ swfdec_js_net_stream_time (JSContext *cx
   return JS_NewNumberValue (cx, msecs / 1000., vp);
 }
 
+static JSBool
+swfdec_js_net_stream_bytes_loaded (JSContext *cx, JSObject *obj, jsval id, jsval *vp)
+{
+  SwfdecNetStream *stream;
+
+  stream = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_NET_STREAM);
+  if (stream == NULL)
+    return JS_TRUE;
+
+  if (stream->loader == NULL) {
+    *vp = INT_TO_JSVAL (0);
+    return JS_TRUE;
+  }
+
+  return JS_NewNumberValue (cx, swfdec_loader_get_loaded (stream->loader), vp);
+}
+
+static JSBool
+swfdec_js_net_stream_bytes_total (JSContext *cx, JSObject *obj, jsval id, jsval *vp)
+{
+  SwfdecNetStream *stream;
+  gulong bytes;
+
+  stream = swfdec_scriptable_from_object (cx, obj, SWFDEC_TYPE_NET_STREAM);
+  if (stream == NULL)
+    return JS_TRUE;
+
+  if (stream->loader == NULL) {
+    *vp = INT_TO_JSVAL (0);
+    return JS_TRUE;
+  }
+  bytes = swfdec_loader_get_size (stream->loader);
+  if (bytes == 0)
+    bytes = swfdec_loader_get_loaded (stream->loader);
+
+  return JS_NewNumberValue (cx, bytes, vp);
+}
+
 static JSPropertySpec net_stream_props[] = {
-  { "time",	-1,	JSPROP_PERMANENT|JSPROP_READONLY,	swfdec_js_net_stream_time,	NULL },
+  { "bytesLoaded",	-1,	JSPROP_PERMANENT|JSPROP_READONLY,	swfdec_js_net_stream_bytes_loaded,	NULL },
+  { "bytesTotal",	-1,	JSPROP_PERMANENT|JSPROP_READONLY,	swfdec_js_net_stream_bytes_total,	NULL },
+  { "time",		-1,	JSPROP_PERMANENT|JSPROP_READONLY,	swfdec_js_net_stream_time,		NULL },
   { NULL }
 };
 
diff-tree 9d7d1f6a72cfcbcc94184d350ca0932ca675ba07 (from badb4883c0eff1236bf7698b759b04355fa9999c)
Author: Benjamin Otte <otte at gnome.org>
Date:   Wed Mar 21 11:44:44 2007 +0100

    make named functions set varobj, not scopeChain

diff --git a/libswfdec/swfdec_script.c b/libswfdec/swfdec_script.c
index 4853d3c..06915d0 100644
--- a/libswfdec/swfdec_script.c
+++ b/libswfdec/swfdec_script.c
@@ -1795,7 +1795,7 @@ swfdec_action_define_function (JSContext
     *cx->fp->sp++ = OBJECT_TO_JSVAL (fun->object);
   } else {
     jsval val = OBJECT_TO_JSVAL (fun->object);
-    if (!JS_SetProperty (cx, cx->fp->scopeChain, function_name, &val))
+    if (!JS_SetProperty (cx, cx->fp->varobj, function_name, &val))
       return JS_FALSE;
   }
 


More information about the Swfdec mailing list