[Swfdec-commits] 9 commits - swfdec-gtk/swfdec_gtk_system.c swfdec/swfdec_as_interpret.c swfdec/swfdec_as_string.c swfdec/swfdec_player.c swfdec/swfdec_url.c test/custom test/trace
Benjamin Otte
company at kemper.freedesktop.org
Tue Feb 19 04:31:20 PST 2008
swfdec-gtk/swfdec_gtk_system.c | 2
swfdec/swfdec_as_interpret.c | 26 ++++-
swfdec/swfdec_as_string.c | 9 -
swfdec/swfdec_player.c | 76 +++++++-------
swfdec/swfdec_url.c | 2
test/custom/Makefile.am | 7 +
test/custom/crash-0.5.90-up-to-date.as | 12 ++
test/custom/crash-0.5.90-up-to-date.stas | 64 ++++++++++++
test/custom/crash-0.5.90-up-to-date.sts |binary
test/custom/crash-0.5.90-up-to-date.swf |binary
test/trace/Makefile.am | 9 +
test/trace/add2-different-objects-5.swf |binary
test/trace/add2-different-objects-5.swf.trace | 132 ++++++++++++++++++++++++++
test/trace/add2-different-objects-6.swf |binary
test/trace/add2-different-objects-6.swf.trace | 108 +++++++++++++++++++++
test/trace/add2-different-objects-7.swf |binary
test/trace/add2-different-objects-7.swf.trace | 108 +++++++++++++++++++++
test/trace/add2-different-objects-8.swf |binary
test/trace/add2-different-objects-8.swf.trace | 108 +++++++++++++++++++++
test/trace/add2-different-objects.as | 32 ++++++
test/trace/values.as | 3
21 files changed, 643 insertions(+), 55 deletions(-)
New commits:
commit 8f349e3e49be6604326b1f991fb3c69765d7fc96
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Feb 19 12:39:08 2008 +0100
add testcase for recent fix
diff --git a/test/custom/Makefile.am b/test/custom/Makefile.am
index 4b2bc0c..e9d0a93 100644
--- a/test/custom/Makefile.am
+++ b/test/custom/Makefile.am
@@ -34,6 +34,11 @@ EXTRA_DIST = \
button-hittest.c \
button-hittest.stas \
button-hittest.sts \
+ crash-0.5.90-up-to-date.as \
+ crash-0.5.90-up-to-date.stas \
+ crash-0.5.90-up-to-date.sts \
+ crash-0.5.90-up-to-date.swf \
+ crash-0.5.90-up-to-date.swf.trace
definebutton-5.swf \
definebutton-5.swf.trace \
definebutton-6.swf \
diff --git a/test/custom/crash-0.5.90-up-to-date.as b/test/custom/crash-0.5.90-up-to-date.as
new file mode 100644
index 0000000..e4fd071
--- /dev/null
+++ b/test/custom/crash-0.5.90-up-to-date.as
@@ -0,0 +1,12 @@
+// makeswf -v 7 -s 200x150 -r 1 -o crash-0.5.90-up-to-date.swf crash-0.5.90-up-to-date.as
+
+createEmptyMovieClip ("a", 0);
+a.beginFill (0);
+a.lineTo (0, 10);
+a.lineTo (10, 10);
+a.lineTo (10, 0);
+a.lineTo (0, 0);
+a.endFill ();
+a._xscale = 50;
+Mouse.addListener ({ onMouseMove: function () { trace ("hi"); a._xscale = 10000 / a._xscale; } });
+startDrag (a, 1);
diff --git a/test/custom/crash-0.5.90-up-to-date.stas b/test/custom/crash-0.5.90-up-to-date.stas
new file mode 100644
index 0000000..865329d
--- /dev/null
+++ b/test/custom/crash-0.5.90-up-to-date.stas
@@ -0,0 +1,64 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+run_test = function (t, file) {
+ var e;
+ print ("Testing " + file);
+ try {
+ t.reset (file);
+ t.trace (file + ".trace");
+ t.advance (1000);
+ t.mouse_move (50, 50);
+ t.advance (1000);
+ t.mouse_press (50, 50);
+ t.advance (1000);
+ t.mouse_move (140, 140);
+ t.advance (1000);
+ t.mouse_move (50, 50);
+ t.advance (1000);
+ t.mouse_release (50, 50);
+ t.advance (1000);
+ t.mouse_press (50, 50);
+ t.advance (1000);
+ t.mouse_move (140, 140);
+ t.advance (1000);
+ t.mouse_release (140, 140);
+ t.advance (1000);
+ t.trace ();
+ } catch (e) {
+ if (e) {
+ error (e);
+ return false;
+ }
+ };
+ Native.print (" OK\n");
+ return true;
+};
+
+filenames.sort ();
+t = new Test ();
+fail = [];
+for (var i = 0; i < filenames.length; i++) {
+ if (!run_test (t, filenames[i]))
+ fail.push (filenames[i]);
+};
+if (fail.length > 0) {
+ error (fail.join ("\n "));
+ throw (fail.length + " failures");
+}
diff --git a/test/custom/crash-0.5.90-up-to-date.sts b/test/custom/crash-0.5.90-up-to-date.sts
new file mode 100644
index 0000000..378773f
Binary files /dev/null and b/test/custom/crash-0.5.90-up-to-date.sts differ
diff --git a/test/custom/crash-0.5.90-up-to-date.swf b/test/custom/crash-0.5.90-up-to-date.swf
new file mode 100644
index 0000000..1484cd9
Binary files /dev/null and b/test/custom/crash-0.5.90-up-to-date.swf differ
diff --git a/test/custom/crash-0.5.90-up-to-date.swf.trace b/test/custom/crash-0.5.90-up-to-date.swf.trace
new file mode 100644
index 0000000..e69de29
commit 0ef290706934ca486aa9d2de7e7fc4e0aaeff750
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Feb 19 12:37:59 2008 +0100
don't crash when Mouse.onMouseMove modifies the dragged movie
diff --git a/swfdec/swfdec_player.c b/swfdec/swfdec_player.c
index bab43c3..e056149 100644
--- a/swfdec/swfdec_player.c
+++ b/swfdec/swfdec_player.c
@@ -1070,40 +1070,6 @@ swfdec_player_update_mouse_cursor (SwfdecPlayer *player)
}
}
-static void
-swfdec_player_update_drag_movie (SwfdecPlayer *player)
-{
- SwfdecPlayerPrivate *priv = player->priv;
- double x, y;
- SwfdecMovie *movie;
-
- if (priv->mouse_drag == NULL)
- return;
-
- movie = priv->mouse_drag;
- g_assert (movie->cache_state == SWFDEC_MOVIE_UP_TO_DATE);
- x = priv->mouse_x;
- y = priv->mouse_y;
- swfdec_player_stage_to_global (player, &x, &y);
- if (movie->parent)
- swfdec_movie_global_to_local (movie->parent, &x, &y);
- if (priv->mouse_drag_center) {
- x -= (movie->extents.x1 - movie->extents.x0) / 2;
- y -= (movie->extents.y1 - movie->extents.y0) / 2;
- } else {
- x -= priv->mouse_drag_x;
- y -= priv->mouse_drag_y;
- }
- x = CLAMP (x, priv->mouse_drag_rect.x0, priv->mouse_drag_rect.x1);
- y = CLAMP (y, priv->mouse_drag_rect.y0, priv->mouse_drag_rect.y1);
- SWFDEC_LOG ("mouse is at %g %g, originally (%g %g)", x, y, priv->mouse_x, priv->mouse_y);
- if (x != movie->matrix.x0 || y != movie->matrix.y0) {
- swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_MATRIX);
- movie->matrix.x0 = x;
- movie->matrix.y0 = y;
- }
-}
-
/**
* swfdec_player_set_drag_movie:
* @player: a #SwfdecPlayer
@@ -1148,12 +1114,8 @@ swfdec_player_set_drag_movie (SwfdecPlayer *player, SwfdecMovie *drag, gboolean
SWFDEC_DEBUG ("starting drag in %g %g %g %g",
priv->mouse_drag_rect.x0, priv->mouse_drag_rect.y0,
priv->mouse_drag_rect.x1, priv->mouse_drag_rect.y1);
- /* FIXME: need a way to make sure we get updated */
- if (drag) {
- swfdec_movie_update (drag);
+ if (drag)
drag->modified = TRUE;
- swfdec_player_update_drag_movie (player);
- }
}
static void
@@ -1227,7 +1189,6 @@ swfdec_player_do_mouse_move (SwfdecPlayer *player, double x, double y)
swfdec_player_broadcast (player, SWFDEC_AS_STR_Mouse, SWFDEC_AS_STR_onMouseMove);
}
swfdec_player_grab_mouse_movie (player);
- swfdec_player_update_drag_movie (player);
/* FIXME: allow events to pass through */
return TRUE;
@@ -1544,6 +1505,40 @@ swfdec_player_lock (SwfdecPlayer *player)
return TRUE;
}
+static void
+swfdec_player_update_drag_movie (SwfdecPlayer *player)
+{
+ SwfdecPlayerPrivate *priv = player->priv;
+ double x, y;
+ SwfdecMovie *movie;
+
+ if (priv->mouse_drag == NULL)
+ return;
+
+ movie = priv->mouse_drag;
+ swfdec_movie_update (movie);
+ x = priv->mouse_x;
+ y = priv->mouse_y;
+ swfdec_player_stage_to_global (player, &x, &y);
+ if (movie->parent)
+ swfdec_movie_global_to_local (movie->parent, &x, &y);
+ if (priv->mouse_drag_center) {
+ x -= (movie->extents.x1 - movie->extents.x0) / 2;
+ y -= (movie->extents.y1 - movie->extents.y0) / 2;
+ } else {
+ x -= priv->mouse_drag_x;
+ y -= priv->mouse_drag_y;
+ }
+ x = CLAMP (x, priv->mouse_drag_rect.x0, priv->mouse_drag_rect.x1);
+ y = CLAMP (y, priv->mouse_drag_rect.y0, priv->mouse_drag_rect.y1);
+ SWFDEC_LOG ("mouse is at %g %g, originally (%g %g)", x, y, priv->mouse_x, priv->mouse_y);
+ if (x != movie->matrix.x0 || y != movie->matrix.y0) {
+ swfdec_movie_queue_update (movie, SWFDEC_MOVIE_INVALID_MATRIX);
+ movie->matrix.x0 = x;
+ movie->matrix.y0 = y;
+ }
+}
+
/* runs queued invalidations for all movies and resets the movies */
static void
swfdec_player_update_movies (SwfdecPlayer *player)
@@ -1551,6 +1546,7 @@ swfdec_player_update_movies (SwfdecPlayer *player)
SwfdecMovie *movie;
GList *walk;
+ swfdec_player_update_drag_movie (player);
/* FIXME: This g_list_last could be slow */
for (walk = g_list_last (player->priv->movies); walk; walk = walk->prev) {
movie = walk->data;
commit 0c651629b9ca08257a9bf56d5883d0bff66043b5
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Feb 19 12:37:35 2008 +0100
remove useless comment
diff --git a/swfdec/swfdec_as_string.c b/swfdec/swfdec_as_string.c
index 1b284a4..3468e37 100644
--- a/swfdec/swfdec_as_string.c
+++ b/swfdec/swfdec_as_string.c
@@ -342,15 +342,6 @@ swfdec_as_string_valueOf (SwfdecAsContext *cx, SwfdecAsObject *object,
SWFDEC_AS_VALUE_SET_STRING (ret, SWFDEC_AS_STRING (object)->string);
}
-#if 0
-charAt(index:Number) : String
-charCodeAt(index:Number) : Number
-concat(value:Object) : String
-indexOf(value:String, [startIndex:Number]) : Number
-slice(start:Number, end:Number) : String
-split(delimiter:String, [limit:Number]) : Array
-#endif
-
static void
swfdec_as_string_split_5 (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
commit e9f03754837dca8c40b5058ee9d5673d0e6243f6
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Feb 19 12:32:32 2008 +0100
actually exit on failure (whoopee)
diff --git a/test/custom/Makefile.am b/test/custom/Makefile.am
index 11b2d82..4b2bc0c 100644
--- a/test/custom/Makefile.am
+++ b/test/custom/Makefile.am
@@ -1,6 +1,6 @@
check-local:
for file in $(srcdir)/*.sts; do \
- ../swfdec-test --script $$file $(srcdir)/`basename $$file .sts`*.swf; \
+ ../swfdec-test --script $$file $(srcdir)/`basename $$file .sts`*.swf || exit $?; \
done
EXTRA_DIST = \
commit f6e192706f105e677b6a858c90a023ab772b89ae
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Feb 19 10:50:44 2008 +0100
one slash too much for absolute urls
diff --git a/swfdec/swfdec_url.c b/swfdec/swfdec_url.c
index 5e86632..3a041d3 100644
--- a/swfdec/swfdec_url.c
+++ b/swfdec/swfdec_url.c
@@ -646,7 +646,7 @@ swfdec_url_new_from_input (const char *input)
/* FIXME: split at '?' for query? */
if (g_path_is_absolute (input)) {
url = swfdec_url_new_components ("file", NULL, 0,
- input, NULL);
+ input[0] == '/' ? &input[1] : &input[0], NULL);
} else {
char *absolute, *cur;
cur = g_get_current_dir ();
commit 9a8be7124accd34e02a637493ec9099f0ce222a1
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Feb 18 16:19:24 2008 +0100
add testcase for recent commit
diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 86d3f08..850d742 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -30,6 +30,15 @@ EXTRA_DIST = \
add2-7.swf.trace \
add2-8.swf \
add2-8.swf.trace \
+ add2-different-objects-5.swf \
+ add2-different-objects-5.swf.trace \
+ add2-different-objects-6.swf \
+ add2-different-objects-6.swf.trace \
+ add2-different-objects-7.swf \
+ add2-different-objects-7.swf.trace \
+ add2-different-objects-8.swf \
+ add2-different-objects-8.swf.trace \
+ add2-different-objects.as \
addProperty.as \
addProperty-5.swf \
addProperty-5.swf.trace \
diff --git a/test/trace/add2-different-objects-5.swf b/test/trace/add2-different-objects-5.swf
new file mode 100644
index 0000000..ec7666d
Binary files /dev/null and b/test/trace/add2-different-objects-5.swf differ
diff --git a/test/trace/add2-different-objects-5.swf.trace b/test/trace/add2-different-objects-5.swf.trace
new file mode 100644
index 0000000..0ff75c7
--- /dev/null
+++ b/test/trace/add2-different-objects-5.swf.trace
@@ -0,0 +1,132 @@
+>>> Date
+valueOf:
+toString:
+String: [type Object]
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+valueOf:
+== "hi": false
+valueOf:
+valueOf:
+== 1: false
+valueOf:
+valueOf:
+== self: true
+>>> Number
+valueOf:
+toString:
+String: [type Object]
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+valueOf:
+== "hi": false
+valueOf:
+valueOf:
+== 1: false
+valueOf:
+valueOf:
+== self: true
+>>> String
+valueOf:
+String:
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+valueOf:
+== "hi": false
+valueOf:
+valueOf:
+== 1: false
+valueOf:
+valueOf:
+== self: true
+>>> Object
+valueOf:
+toString:
+String: [type Object]
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+valueOf:
+== "hi": false
+valueOf:
+valueOf:
+== 1: false
+valueOf:
+valueOf:
+== self: true
+>>> XML
+valueOf:
+toString:
+String: [type Object]
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+valueOf:
+== "hi": false
+valueOf:
+valueOf:
+== 1: false
+valueOf:
+valueOf:
+== self: true
+>>> Boolean
+valueOf:
+toString:
+String: [type Object]
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+valueOf:
+== "hi": false
+valueOf:
+valueOf:
+== 1: false
+valueOf:
+valueOf:
+== self: true
+>>> MovieClip
+String: _level0
+Number: NaN
+Self: NaN
+== "hi": false
+== 1: false
+== self: true
diff --git a/test/trace/add2-different-objects-6.swf b/test/trace/add2-different-objects-6.swf
new file mode 100644
index 0000000..4bbc189
Binary files /dev/null and b/test/trace/add2-different-objects-6.swf differ
diff --git a/test/trace/add2-different-objects-6.swf.trace b/test/trace/add2-different-objects-6.swf.trace
new file mode 100644
index 0000000..700c7d3
--- /dev/null
+++ b/test/trace/add2-different-objects-6.swf.trace
@@ -0,0 +1,108 @@
+>>> Date
+toString:
+toString:
+String: [type Object]
+toString:
+valueOf:
+Number: NaN
+toString:
+toString:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+== "hi": false
+valueOf:
+== 1: false
+== self: true
+>>> Number
+valueOf:
+toString:
+String: [type Object]
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+== "hi": false
+valueOf:
+== 1: false
+== self: true
+>>> String
+valueOf:
+String:
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+== "hi": false
+valueOf:
+== 1: false
+== self: true
+>>> Object
+valueOf:
+toString:
+String: [type Object]
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+== "hi": false
+valueOf:
+== 1: false
+== self: true
+>>> XML
+valueOf:
+toString:
+String: [type Object]
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+== "hi": false
+valueOf:
+== 1: false
+== self: true
+>>> Boolean
+valueOf:
+toString:
+String: [type Object]
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+== "hi": false
+valueOf:
+== 1: false
+== self: true
+>>> MovieClip
+String: _level0
+Number: NaN
+Self: NaN
+== "hi": false
+== 1: false
+== self: true
diff --git a/test/trace/add2-different-objects-7.swf b/test/trace/add2-different-objects-7.swf
new file mode 100644
index 0000000..a87ba09
Binary files /dev/null and b/test/trace/add2-different-objects-7.swf differ
diff --git a/test/trace/add2-different-objects-7.swf.trace b/test/trace/add2-different-objects-7.swf.trace
new file mode 100644
index 0000000..700c7d3
--- /dev/null
+++ b/test/trace/add2-different-objects-7.swf.trace
@@ -0,0 +1,108 @@
+>>> Date
+toString:
+toString:
+String: [type Object]
+toString:
+valueOf:
+Number: NaN
+toString:
+toString:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+== "hi": false
+valueOf:
+== 1: false
+== self: true
+>>> Number
+valueOf:
+toString:
+String: [type Object]
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+== "hi": false
+valueOf:
+== 1: false
+== self: true
+>>> String
+valueOf:
+String:
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+== "hi": false
+valueOf:
+== 1: false
+== self: true
+>>> Object
+valueOf:
+toString:
+String: [type Object]
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+== "hi": false
+valueOf:
+== 1: false
+== self: true
+>>> XML
+valueOf:
+toString:
+String: [type Object]
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+== "hi": false
+valueOf:
+== 1: false
+== self: true
+>>> Boolean
+valueOf:
+toString:
+String: [type Object]
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+== "hi": false
+valueOf:
+== 1: false
+== self: true
+>>> MovieClip
+String: _level0
+Number: NaN
+Self: NaN
+== "hi": false
+== 1: false
+== self: true
diff --git a/test/trace/add2-different-objects-8.swf b/test/trace/add2-different-objects-8.swf
new file mode 100644
index 0000000..10392c4
Binary files /dev/null and b/test/trace/add2-different-objects-8.swf differ
diff --git a/test/trace/add2-different-objects-8.swf.trace b/test/trace/add2-different-objects-8.swf.trace
new file mode 100644
index 0000000..700c7d3
--- /dev/null
+++ b/test/trace/add2-different-objects-8.swf.trace
@@ -0,0 +1,108 @@
+>>> Date
+toString:
+toString:
+String: [type Object]
+toString:
+valueOf:
+Number: NaN
+toString:
+toString:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+== "hi": false
+valueOf:
+== 1: false
+== self: true
+>>> Number
+valueOf:
+toString:
+String: [type Object]
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+== "hi": false
+valueOf:
+== 1: false
+== self: true
+>>> String
+valueOf:
+String:
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+== "hi": false
+valueOf:
+== 1: false
+== self: true
+>>> Object
+valueOf:
+toString:
+String: [type Object]
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+== "hi": false
+valueOf:
+== 1: false
+== self: true
+>>> XML
+valueOf:
+toString:
+String: [type Object]
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+== "hi": false
+valueOf:
+== 1: false
+== self: true
+>>> Boolean
+valueOf:
+toString:
+String: [type Object]
+valueOf:
+valueOf:
+Number: NaN
+valueOf:
+valueOf:
+valueOf:
+valueOf:
+Self: NaN
+valueOf:
+== "hi": false
+valueOf:
+== 1: false
+== self: true
+>>> MovieClip
+String: _level0
+Number: NaN
+Self: NaN
+== "hi": false
+== 1: false
+== self: true
diff --git a/test/trace/add2-different-objects.as b/test/trace/add2-different-objects.as
new file mode 100644
index 0000000..ac3645a
--- /dev/null
+++ b/test/trace/add2-different-objects.as
@@ -0,0 +1,32 @@
+// makeswf -v 7 -s 200x150 -r 1 -o add2-different-objects.swf add2-different-objects.as
+
+classes = [ "Date", "Number", "String", "Object", "XML", "Boolean" ];
+
+function test (x)
+{
+ x.valueOf = function () { trace ("valueOf: " + arguments); return x; };
+ x.toString = function () { trace ("toString:" + arguments); return x; };
+ trace ("String: " + x);
+ trace ("Number: " + (0 + x));
+ trace ("Self: " + (x + x));
+ trace ("== \"hi\": " + (x == "hi"));
+ trace ("== 1: " + (x == 1));
+ trace ("== self: " + (x == x));
+};
+
+for (i = 0; i < classes.length; i++) {
+ trace (">>> " + classes[i]);
+ x = classes[i];
+ asm {
+ push "x", "x"
+ getvariable
+ getvariable
+ setvariable
+ };
+ test (new x ());
+}
+
+trace (">>> MovieClip");
+test (this);
+
+loadMovie ("fscommand:quit", "");
commit 32f4bf91cdb5cc4810c012db274853a7f1c29729
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Feb 18 16:17:10 2008 +0100
add2 calls toString instead of valueOf for Date objects if version >= 6
don't ask me why...
diff --git a/swfdec/swfdec_as_interpret.c b/swfdec/swfdec_as_interpret.c
index da2ba77..d9030d3 100644
--- a/swfdec/swfdec_as_interpret.c
+++ b/swfdec/swfdec_as_interpret.c
@@ -1,5 +1,5 @@
/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ * Copyright (C) 2007-2008 Benjamin Otte <otte at gnome.org>
* 2007 Pekka Lampila <pekka.lampila at iki.fi>
*
* This library is free software; you can redistribute it and/or
@@ -24,6 +24,7 @@
#include "swfdec_as_interpret.h"
#include "swfdec_as_array.h"
#include "swfdec_as_context.h"
+#include "swfdec_as_date.h"
#include "swfdec_as_frame_internal.h"
#include "swfdec_as_function.h"
#include "swfdec_as_internal.h"
@@ -960,6 +961,25 @@ swfdec_action_binary (SwfdecAsContext *cx, guint action, const guint8 *data, gui
}
static void
+swfdec_action_add2_to_primitive (SwfdecAsValue *value)
+{
+ SwfdecAsObject *object;
+ const char *name;
+
+ if (!SWFDEC_AS_VALUE_IS_OBJECT (value))
+ return;
+ object = SWFDEC_AS_VALUE_GET_OBJECT (value);
+ if (SWFDEC_IS_MOVIE (object))
+ return;
+
+ if (SWFDEC_IS_AS_DATE (object) && object->context->version > 5)
+ name = SWFDEC_AS_STR_toString;
+ else
+ name = SWFDEC_AS_STR_valueOf;
+ swfdec_as_object_call (SWFDEC_AS_VALUE_GET_OBJECT (value), name, 0, NULL, value);
+}
+
+static void
swfdec_action_add2 (SwfdecAsContext *cx, guint action, const guint8 *data, guint len)
{
SwfdecAsValue *rval, *lval, rtmp, ltmp;
@@ -968,10 +988,10 @@ swfdec_action_add2 (SwfdecAsContext *cx, guint action, const guint8 *data, guint
lval = swfdec_as_stack_peek (cx, 2);
rtmp = *rval;
ltmp = *lval;
- swfdec_as_value_to_primitive (&rtmp);
+ swfdec_action_add2_to_primitive (&rtmp);
if (!SWFDEC_AS_VALUE_IS_OBJECT (&rtmp) || SWFDEC_IS_MOVIE (SWFDEC_AS_VALUE_GET_OBJECT (&rtmp)))
rval = &rtmp;
- swfdec_as_value_to_primitive (<mp);
+ swfdec_action_add2_to_primitive (<mp);
if (!SWFDEC_AS_VALUE_IS_OBJECT (<mp) || SWFDEC_IS_MOVIE (SWFDEC_AS_VALUE_GET_OBJECT (<mp)))
lval = <mp;
commit c3783a43dbe309182c75cc36862cbc537abf011c
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Feb 18 16:13:56 2008 +0100
Date and String are somewhat special it seems
diff --git a/test/trace/values.as b/test/trace/values.as
index b6f19be..3121ed1 100644
--- a/test/trace/values.as
+++ b/test/trace/values.as
@@ -36,7 +36,8 @@ values = [
true, false,
0, 1, 0.5, -1, -0.5, Infinity, -Infinity, NaN,
"", "0", "-0", "0.0", "1", "Hello World!", "true", "_level0", "äöü",
- this, new Object (), Function, printall, printtostring, printvalueof, nothing ];
+ this, new Object (), new Date (), new String (),
+ Function, printall, printtostring, printvalueof, nothing ];
var l = values.length;
var v = function () {
commit 0249fa5fa7d5a6846dfbf8bd7c292d3ead17a1d6
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Feb 18 12:46:49 2008 +0100
compute pixel aspect ratio, too
diff --git a/swfdec-gtk/swfdec_gtk_system.c b/swfdec-gtk/swfdec_gtk_system.c
index 1c94bc1..c54feb7 100644
--- a/swfdec-gtk/swfdec_gtk_system.c
+++ b/swfdec-gtk/swfdec_gtk_system.c
@@ -149,6 +149,8 @@ swfdec_gtk_system_new (GdkScreen *screen)
"language", lang, "utc-offset", swfdec_gtk_system_get_utc_offset (),
"dpi", dpi, "screen-height", gdk_screen_get_height (screen),
"screen-width", gdk_screen_get_width (screen),
+ "pixel-aspect-ratio", (double) gdk_screen_get_width (screen) * gdk_screen_get_height_mm (screen)
+ / (gdk_screen_get_width_mm (screen) * gdk_screen_get_height (screen)),
NULL);
SWFDEC_GTK_SYSTEM (system)->priv->screen = g_object_ref (screen);
More information about the Swfdec-commits
mailing list