[Swfdec-commits] 9 commits - swfdec/swfdec_as_array.c swfdec/swfdec_as_object.c test/trace

Pekka Lampila medar at kemper.freedesktop.org
Fri Jul 4 08:29:51 PDT 2008


 swfdec/swfdec_as_array.c                          |   32 +
 swfdec/swfdec_as_object.c                         |    4 
 test/trace/Makefile.am                            |   27 +
 test/trace/array-sort-custom-tostring-5.swf       |binary
 test/trace/array-sort-custom-tostring-5.swf.trace |  544 ++++++++++++++++++++++
 test/trace/array-sort-custom-tostring-6.swf       |binary
 test/trace/array-sort-custom-tostring-6.swf.trace |  544 ++++++++++++++++++++++
 test/trace/array-sort-custom-tostring-7.swf       |binary
 test/trace/array-sort-custom-tostring-7.swf.trace |  544 ++++++++++++++++++++++
 test/trace/array-sort-custom-tostring-8.swf       |binary
 test/trace/array-sort-custom-tostring-8.swf.trace |  544 ++++++++++++++++++++++
 test/trace/array-sort-custom-tostring.as          |   52 ++
 test/trace/array-sort-custom-unique-5.swf         |binary
 test/trace/array-sort-custom-unique-5.swf.trace   |  276 +++++++++++
 test/trace/array-sort-custom-unique-6.swf         |binary
 test/trace/array-sort-custom-unique-6.swf.trace   |  276 +++++++++++
 test/trace/array-sort-custom-unique-7.swf         |binary
 test/trace/array-sort-custom-unique-7.swf.trace   |  276 +++++++++++
 test/trace/array-sort-custom-unique-8.swf         |binary
 test/trace/array-sort-custom-unique-8.swf.trace   |  276 +++++++++++
 test/trace/array-sort-custom-unique.as            |   81 +++
 test/trace/crash-0.6.6-variable-leak-5.swf        |binary
 test/trace/crash-0.6.6-variable-leak-5.swf.trace  |    1 
 test/trace/crash-0.6.6-variable-leak-6.swf        |binary
 test/trace/crash-0.6.6-variable-leak-6.swf.trace  |    1 
 test/trace/crash-0.6.6-variable-leak-7.swf        |binary
 test/trace/crash-0.6.6-variable-leak-7.swf.trace  |    1 
 test/trace/crash-0.6.6-variable-leak-8.swf        |binary
 test/trace/crash-0.6.6-variable-leak-8.swf.trace  |    1 
 test/trace/crash-0.6.6-variable-leak.as           |    7 
 30 files changed, 3480 insertions(+), 7 deletions(-)

New commits:
commit bf989476b2e7153f1551520df06bc19fe59c67ae
Merge: 17c5630... 9cd7004...
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Jul 4 18:27:15 2008 +0300

    Merge branch '0.6'

commit 9cd7004614ac0fa80297607ba3451da1b5bc7cfa
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Jul 4 18:04:21 2008 +0300

    Add a test for the crash caused by the bug in swfdec_as_object_hash_create

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index f511dcd..66c0f97 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -833,6 +833,15 @@ EXTRA_DIST = \
 	crash-0.6.6-date-8.swf \
 	crash-0.6.6-date-8.swf.trace \
 	crash-0.6.6-date.as \
+	crash-0.6.6-variable-leak-5.swf \
+	crash-0.6.6-variable-leak-5.swf.trace \
+	crash-0.6.6-variable-leak-6.swf \
+	crash-0.6.6-variable-leak-6.swf.trace \
+	crash-0.6.6-variable-leak-7.swf \
+	crash-0.6.6-variable-leak-7.swf.trace \
+	crash-0.6.6-variable-leak-8.swf \
+	crash-0.6.6-variable-leak-8.swf.trace \
+	crash-0.6.6-variable-leak.as \
 	crash-0.6.6-xmlsocket-5.swf \
 	crash-0.6.6-xmlsocket-5.swf.trace \
 	crash-0.6.6-xmlsocket-6.swf \
diff --git a/test/trace/crash-0.6.6-variable-leak-5.swf b/test/trace/crash-0.6.6-variable-leak-5.swf
new file mode 100644
index 0000000..cc23fe1
Binary files /dev/null and b/test/trace/crash-0.6.6-variable-leak-5.swf differ
diff --git a/test/trace/crash-0.6.6-variable-leak-5.swf.trace b/test/trace/crash-0.6.6-variable-leak-5.swf.trace
new file mode 100644
index 0000000..d86bac9
--- /dev/null
+++ b/test/trace/crash-0.6.6-variable-leak-5.swf.trace
@@ -0,0 +1 @@
+OK
diff --git a/test/trace/crash-0.6.6-variable-leak-6.swf b/test/trace/crash-0.6.6-variable-leak-6.swf
new file mode 100644
index 0000000..d7fdbad
Binary files /dev/null and b/test/trace/crash-0.6.6-variable-leak-6.swf differ
diff --git a/test/trace/crash-0.6.6-variable-leak-6.swf.trace b/test/trace/crash-0.6.6-variable-leak-6.swf.trace
new file mode 100644
index 0000000..d86bac9
--- /dev/null
+++ b/test/trace/crash-0.6.6-variable-leak-6.swf.trace
@@ -0,0 +1 @@
+OK
diff --git a/test/trace/crash-0.6.6-variable-leak-7.swf b/test/trace/crash-0.6.6-variable-leak-7.swf
new file mode 100644
index 0000000..25e4bfa
Binary files /dev/null and b/test/trace/crash-0.6.6-variable-leak-7.swf differ
diff --git a/test/trace/crash-0.6.6-variable-leak-7.swf.trace b/test/trace/crash-0.6.6-variable-leak-7.swf.trace
new file mode 100644
index 0000000..d86bac9
--- /dev/null
+++ b/test/trace/crash-0.6.6-variable-leak-7.swf.trace
@@ -0,0 +1 @@
+OK
diff --git a/test/trace/crash-0.6.6-variable-leak-8.swf b/test/trace/crash-0.6.6-variable-leak-8.swf
new file mode 100644
index 0000000..ea7d787
Binary files /dev/null and b/test/trace/crash-0.6.6-variable-leak-8.swf differ
diff --git a/test/trace/crash-0.6.6-variable-leak-8.swf.trace b/test/trace/crash-0.6.6-variable-leak-8.swf.trace
new file mode 100644
index 0000000..d86bac9
--- /dev/null
+++ b/test/trace/crash-0.6.6-variable-leak-8.swf.trace
@@ -0,0 +1 @@
+OK
diff --git a/test/trace/crash-0.6.6-variable-leak.as b/test/trace/crash-0.6.6-variable-leak.as
new file mode 100644
index 0000000..bc28e70
--- /dev/null
+++ b/test/trace/crash-0.6.6-variable-leak.as
@@ -0,0 +1,7 @@
+// makeswf -v 7 -s 100x150 -r 15 -o crash-0.6.6-variable-leak-7.swf crash-0.6.6-variable-leak.as
+
+var x = new Array ();
+ASSetNativeAccessor (x, 666, "1,2,3,4,5,6", 1);
+trace ("OK");
+
+getURL ("fscommand:quit", "");
commit 823975ef2e1a97467b82cff64eb29a81c1e0facd
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Jul 4 17:59:21 2008 +0300

    Fix swfdec_as_object_hash_create with invalid variable registering memory
    
    It registered the memory before failing because of the invalid name, so the
    memory was never released again. Lead to assert when disposing the context.

diff --git a/swfdec/swfdec_as_object.c b/swfdec/swfdec_as_object.c
index df90ccd..1c379c6 100644
--- a/swfdec/swfdec_as_object.c
+++ b/swfdec/swfdec_as_object.c
@@ -206,10 +206,10 @@ swfdec_as_object_hash_create (SwfdecAsObject *object, const char *variable, guin
 {
   SwfdecAsVariable *var;
 
-  if (!swfdec_as_context_use_mem (object->context, sizeof (SwfdecAsVariable)))
-    return NULL;
   if (!swfdec_as_variable_name_is_valid (variable))
     return NULL;
+  if (!swfdec_as_context_use_mem (object->context, sizeof (SwfdecAsVariable)))
+    return NULL;
   var = g_slice_new0 (SwfdecAsVariable);
   var->flags = flags;
   g_hash_table_insert (object->properties, (gpointer) variable, var);
commit 17c5630153a96d2daa7021c71571eb7757ed4b88
Merge: 992ceb4... 5aa4ba2...
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Jul 4 18:26:32 2008 +0300

    Merge branch 'master' of ssh://medar@git.freedesktop.org/git/swfdec/swfdec

commit 992ceb4e3c2c253b9fa80e4b96f097cfb946733e
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Jul 4 15:48:28 2008 +0300

    Add a test to see how Array.sort works when both custom func and unique is used

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 3f96f35..43fbe42 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -176,6 +176,15 @@ EXTRA_DIST = \
 	array-sort-custom-tostring-7.swf.trace \
 	array-sort-custom-tostring-8.swf \
 	array-sort-custom-tostring-8.swf.trace \
+	array-sort-custom-unique.as \
+	array-sort-custom-unique-5.swf \
+	array-sort-custom-unique-5.swf.trace \
+	array-sort-custom-unique-6.swf \
+	array-sort-custom-unique-6.swf.trace \
+	array-sort-custom-unique-7.swf \
+	array-sort-custom-unique-7.swf.trace \
+	array-sort-custom-unique-8.swf \
+	array-sort-custom-unique-8.swf.trace \
 	array-sort-on.as \
 	array-sort-on-5.swf \
 	array-sort-on-5.swf.trace \
diff --git a/test/trace/array-sort-custom-unique-5.swf b/test/trace/array-sort-custom-unique-5.swf
new file mode 100644
index 0000000..773ea70
Binary files /dev/null and b/test/trace/array-sort-custom-unique-5.swf differ
diff --git a/test/trace/array-sort-custom-unique-5.swf.trace b/test/trace/array-sort-custom-unique-5.swf.trace
new file mode 100644
index 0000000..7316b24
--- /dev/null
+++ b/test/trace/array-sort-custom-unique-5.swf.trace
@@ -0,0 +1,276 @@
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (c, b)
+1
+custom (c, d)
+-1
+custom (c, b)
+1
+a,b,c,d
+custom (a, c)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (c, b)
+1
+custom (c, d)
+-1
+custom (c, c)
+0
+custom (c, d)
+-1
+custom (c, b)
+1
+custom (d, c)
+1
+0
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (c, b)
+1
+custom (c, d)
+-1
+custom (c, b)
+1
+a,b,c,d
+custom (a, c)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (c, b)
+1
+custom (c, d)
+-1
+custom (c, c)
+1 instead of 0
+custom (c, c)
+1 instead of 0
+custom (c, d)
+-1
+custom (c, c)
+1 instead of 0
+custom (c, b)
+1
+0
+custom (a, c)
+-1
+custom (a, C)
+1
+custom (a, C)
+1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, C)
+1
+custom (b, d)
+-1
+custom (b, c)
+-1
+custom (b, d)
+-1
+custom (d, c)
+1
+C,a,b,c,d
+custom (a, c)
+-1
+custom (a, C)
+1
+custom (a, C)
+1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, C)
+1
+custom (b, d)
+-1
+custom (b, c)
+-1
+custom (b, d)
+-1
+custom (d, c)
+1
+C,a,b,c,d
+custom (a, c)
+-1
+custom (a, C)
+1
+custom (a, C)
+1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, C)
+1
+custom (b, d)
+-1
+custom (b, c)
+-1
+custom (b, d)
+-1
+custom (d, c)
+1
+C,a,b,c,d
+custom (a, c)
+-1
+custom (a, C)
+1
+custom (a, C)
+1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, C)
+1
+custom (b, d)
+-1
+custom (b, c)
+-1
+custom (b, d)
+-1
+custom (d, c)
+1
+C,a,b,c,d
+custom (a, 01)
+1
+custom (a, b)
+-1
+custom (a, 1)
+1
+custom (a, 1)
+1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, d)
+-1
+custom (a, 1)
+1
+custom (1, 01)
+1
+custom (d, b)
+1
+01,1,a,b,d
+custom (a, 01)
+1
+custom (a, b)
+-1
+custom (a, 1)
+1
+custom (a, 1)
+1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, d)
+-1
+custom (a, 1)
+1
+custom (1, 01)
+1
+custom (d, b)
+1
+01,1,a,b,d
+custom (a, 01)
+1
+custom (a, b)
+-1
+custom (a, 1)
+1
+custom (a, 1)
+1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, d)
+-1
+custom (a, 1)
+1
+custom (1, 01)
+1
+custom (d, b)
+1
+01,1,a,b,d
+custom (a, 01)
+1
+custom (a, b)
+-1
+custom (a, 1)
+1
+custom (a, 1)
+1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, d)
+-1
+custom (a, 1)
+1
+custom (1, 01)
+1
+custom (d, b)
+1
+01,1,a,b,d
+custom (a, b)
+-1
+custom (a, a)
+0
+custom (a, b)
+-1
+custom (b, a)
+1
+0
+custom (a, b)
+custom (a, a)
+custom (a, b)
+custom (b, a)
+a,b,a
diff --git a/test/trace/array-sort-custom-unique-6.swf b/test/trace/array-sort-custom-unique-6.swf
new file mode 100644
index 0000000..02301c4
Binary files /dev/null and b/test/trace/array-sort-custom-unique-6.swf differ
diff --git a/test/trace/array-sort-custom-unique-6.swf.trace b/test/trace/array-sort-custom-unique-6.swf.trace
new file mode 100644
index 0000000..7316b24
--- /dev/null
+++ b/test/trace/array-sort-custom-unique-6.swf.trace
@@ -0,0 +1,276 @@
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (c, b)
+1
+custom (c, d)
+-1
+custom (c, b)
+1
+a,b,c,d
+custom (a, c)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (c, b)
+1
+custom (c, d)
+-1
+custom (c, c)
+0
+custom (c, d)
+-1
+custom (c, b)
+1
+custom (d, c)
+1
+0
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (c, b)
+1
+custom (c, d)
+-1
+custom (c, b)
+1
+a,b,c,d
+custom (a, c)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (c, b)
+1
+custom (c, d)
+-1
+custom (c, c)
+1 instead of 0
+custom (c, c)
+1 instead of 0
+custom (c, d)
+-1
+custom (c, c)
+1 instead of 0
+custom (c, b)
+1
+0
+custom (a, c)
+-1
+custom (a, C)
+1
+custom (a, C)
+1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, C)
+1
+custom (b, d)
+-1
+custom (b, c)
+-1
+custom (b, d)
+-1
+custom (d, c)
+1
+C,a,b,c,d
+custom (a, c)
+-1
+custom (a, C)
+1
+custom (a, C)
+1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, C)
+1
+custom (b, d)
+-1
+custom (b, c)
+-1
+custom (b, d)
+-1
+custom (d, c)
+1
+C,a,b,c,d
+custom (a, c)
+-1
+custom (a, C)
+1
+custom (a, C)
+1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, C)
+1
+custom (b, d)
+-1
+custom (b, c)
+-1
+custom (b, d)
+-1
+custom (d, c)
+1
+C,a,b,c,d
+custom (a, c)
+-1
+custom (a, C)
+1
+custom (a, C)
+1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, C)
+1
+custom (b, d)
+-1
+custom (b, c)
+-1
+custom (b, d)
+-1
+custom (d, c)
+1
+C,a,b,c,d
+custom (a, 01)
+1
+custom (a, b)
+-1
+custom (a, 1)
+1
+custom (a, 1)
+1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, d)
+-1
+custom (a, 1)
+1
+custom (1, 01)
+1
+custom (d, b)
+1
+01,1,a,b,d
+custom (a, 01)
+1
+custom (a, b)
+-1
+custom (a, 1)
+1
+custom (a, 1)
+1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, d)
+-1
+custom (a, 1)
+1
+custom (1, 01)
+1
+custom (d, b)
+1
+01,1,a,b,d
+custom (a, 01)
+1
+custom (a, b)
+-1
+custom (a, 1)
+1
+custom (a, 1)
+1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, d)
+-1
+custom (a, 1)
+1
+custom (1, 01)
+1
+custom (d, b)
+1
+01,1,a,b,d
+custom (a, 01)
+1
+custom (a, b)
+-1
+custom (a, 1)
+1
+custom (a, 1)
+1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, d)
+-1
+custom (a, 1)
+1
+custom (1, 01)
+1
+custom (d, b)
+1
+01,1,a,b,d
+custom (a, b)
+-1
+custom (a, a)
+0
+custom (a, b)
+-1
+custom (b, a)
+1
+0
+custom (a, b)
+custom (a, a)
+custom (a, b)
+custom (b, a)
+a,b,a
diff --git a/test/trace/array-sort-custom-unique-7.swf b/test/trace/array-sort-custom-unique-7.swf
new file mode 100644
index 0000000..dee139b
Binary files /dev/null and b/test/trace/array-sort-custom-unique-7.swf differ
diff --git a/test/trace/array-sort-custom-unique-7.swf.trace b/test/trace/array-sort-custom-unique-7.swf.trace
new file mode 100644
index 0000000..7316b24
--- /dev/null
+++ b/test/trace/array-sort-custom-unique-7.swf.trace
@@ -0,0 +1,276 @@
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (c, b)
+1
+custom (c, d)
+-1
+custom (c, b)
+1
+a,b,c,d
+custom (a, c)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (c, b)
+1
+custom (c, d)
+-1
+custom (c, c)
+0
+custom (c, d)
+-1
+custom (c, b)
+1
+custom (d, c)
+1
+0
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (c, b)
+1
+custom (c, d)
+-1
+custom (c, b)
+1
+a,b,c,d
+custom (a, c)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (c, b)
+1
+custom (c, d)
+-1
+custom (c, c)
+1 instead of 0
+custom (c, c)
+1 instead of 0
+custom (c, d)
+-1
+custom (c, c)
+1 instead of 0
+custom (c, b)
+1
+0
+custom (a, c)
+-1
+custom (a, C)
+1
+custom (a, C)
+1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, C)
+1
+custom (b, d)
+-1
+custom (b, c)
+-1
+custom (b, d)
+-1
+custom (d, c)
+1
+C,a,b,c,d
+custom (a, c)
+-1
+custom (a, C)
+1
+custom (a, C)
+1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, C)
+1
+custom (b, d)
+-1
+custom (b, c)
+-1
+custom (b, d)
+-1
+custom (d, c)
+1
+C,a,b,c,d
+custom (a, c)
+-1
+custom (a, C)
+1
+custom (a, C)
+1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, C)
+1
+custom (b, d)
+-1
+custom (b, c)
+-1
+custom (b, d)
+-1
+custom (d, c)
+1
+C,a,b,c,d
+custom (a, c)
+-1
+custom (a, C)
+1
+custom (a, C)
+1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, C)
+1
+custom (b, d)
+-1
+custom (b, c)
+-1
+custom (b, d)
+-1
+custom (d, c)
+1
+C,a,b,c,d
+custom (a, 01)
+1
+custom (a, b)
+-1
+custom (a, 1)
+1
+custom (a, 1)
+1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, d)
+-1
+custom (a, 1)
+1
+custom (1, 01)
+1
+custom (d, b)
+1
+01,1,a,b,d
+custom (a, 01)
+1
+custom (a, b)
+-1
+custom (a, 1)
+1
+custom (a, 1)
+1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, d)
+-1
+custom (a, 1)
+1
+custom (1, 01)
+1
+custom (d, b)
+1
+01,1,a,b,d
+custom (a, 01)
+1
+custom (a, b)
+-1
+custom (a, 1)
+1
+custom (a, 1)
+1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, d)
+-1
+custom (a, 1)
+1
+custom (1, 01)
+1
+custom (d, b)
+1
+01,1,a,b,d
+custom (a, 01)
+1
+custom (a, b)
+-1
+custom (a, 1)
+1
+custom (a, 1)
+1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, d)
+-1
+custom (a, 1)
+1
+custom (1, 01)
+1
+custom (d, b)
+1
+01,1,a,b,d
+custom (a, b)
+-1
+custom (a, a)
+0
+custom (a, b)
+-1
+custom (b, a)
+1
+0
+custom (a, b)
+custom (a, a)
+custom (a, b)
+custom (b, a)
+a,b,a
diff --git a/test/trace/array-sort-custom-unique-8.swf b/test/trace/array-sort-custom-unique-8.swf
new file mode 100644
index 0000000..b01cdae
Binary files /dev/null and b/test/trace/array-sort-custom-unique-8.swf differ
diff --git a/test/trace/array-sort-custom-unique-8.swf.trace b/test/trace/array-sort-custom-unique-8.swf.trace
new file mode 100644
index 0000000..7316b24
--- /dev/null
+++ b/test/trace/array-sort-custom-unique-8.swf.trace
@@ -0,0 +1,276 @@
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (c, b)
+1
+custom (c, d)
+-1
+custom (c, b)
+1
+a,b,c,d
+custom (a, c)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (c, b)
+1
+custom (c, d)
+-1
+custom (c, c)
+0
+custom (c, d)
+-1
+custom (c, b)
+1
+custom (d, c)
+1
+0
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (c, b)
+1
+custom (c, d)
+-1
+custom (c, b)
+1
+a,b,c,d
+custom (a, c)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (c, b)
+1
+custom (c, d)
+-1
+custom (c, c)
+1 instead of 0
+custom (c, c)
+1 instead of 0
+custom (c, d)
+-1
+custom (c, c)
+1 instead of 0
+custom (c, b)
+1
+0
+custom (a, c)
+-1
+custom (a, C)
+1
+custom (a, C)
+1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, C)
+1
+custom (b, d)
+-1
+custom (b, c)
+-1
+custom (b, d)
+-1
+custom (d, c)
+1
+C,a,b,c,d
+custom (a, c)
+-1
+custom (a, C)
+1
+custom (a, C)
+1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, C)
+1
+custom (b, d)
+-1
+custom (b, c)
+-1
+custom (b, d)
+-1
+custom (d, c)
+1
+C,a,b,c,d
+custom (a, c)
+-1
+custom (a, C)
+1
+custom (a, C)
+1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, C)
+1
+custom (b, d)
+-1
+custom (b, c)
+-1
+custom (b, d)
+-1
+custom (d, c)
+1
+C,a,b,c,d
+custom (a, c)
+-1
+custom (a, C)
+1
+custom (a, C)
+1
+custom (a, b)
+-1
+custom (a, c)
+-1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, C)
+1
+custom (b, d)
+-1
+custom (b, c)
+-1
+custom (b, d)
+-1
+custom (d, c)
+1
+C,a,b,c,d
+custom (a, 01)
+1
+custom (a, b)
+-1
+custom (a, 1)
+1
+custom (a, 1)
+1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, d)
+-1
+custom (a, 1)
+1
+custom (1, 01)
+1
+custom (d, b)
+1
+01,1,a,b,d
+custom (a, 01)
+1
+custom (a, b)
+-1
+custom (a, 1)
+1
+custom (a, 1)
+1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, d)
+-1
+custom (a, 1)
+1
+custom (1, 01)
+1
+custom (d, b)
+1
+01,1,a,b,d
+custom (a, 01)
+1
+custom (a, b)
+-1
+custom (a, 1)
+1
+custom (a, 1)
+1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, d)
+-1
+custom (a, 1)
+1
+custom (1, 01)
+1
+custom (d, b)
+1
+01,1,a,b,d
+custom (a, 01)
+1
+custom (a, b)
+-1
+custom (a, 1)
+1
+custom (a, 1)
+1
+custom (a, d)
+-1
+custom (a, b)
+-1
+custom (a, d)
+-1
+custom (a, 1)
+1
+custom (1, 01)
+1
+custom (d, b)
+1
+01,1,a,b,d
+custom (a, b)
+-1
+custom (a, a)
+0
+custom (a, b)
+-1
+custom (b, a)
+1
+0
+custom (a, b)
+custom (a, a)
+custom (a, b)
+custom (b, a)
+a,b,a
diff --git a/test/trace/array-sort-custom-unique.as b/test/trace/array-sort-custom-unique.as
new file mode 100644
index 0000000..b674baf
--- /dev/null
+++ b/test/trace/array-sort-custom-unique.as
@@ -0,0 +1,81 @@
+// makeswf -v 7 -r 1 -o array-sort-custom-unique-7.swf array-sort-custom-unique.as
+
+function custom (a, b)
+{
+  trace ("custom (" + a + ", " + b + ")");
+  if (a < b) {
+    trace (-1);
+    return -1;
+  } else if (b < a) {
+    trace (1);
+    return 1;
+  } else {
+    trace (0);
+    return 0;
+  }
+}
+
+function custom_not_equal (a, b)
+{
+  trace ("custom (" + a + ", " + b + ")");
+  if (a < b) {
+    trace (-1);
+    return -1;
+  } else if (b < a) {
+    trace (1);
+    return 1;
+  } else {
+    trace ("1 instead of 0");
+    return 1;
+  }
+}
+
+var a = ["a", "c", "b", "d"];
+trace (a.sort (custom, Array.UNIQUESORT));
+
+var a = ["a", "c", "b", "d", "c"];
+trace (a.sort (custom, Array.UNIQUESORT));
+
+var a = ["a", "c", "b", "d"];
+trace (a.sort (custom_not_equal, Array.UNIQUESORT));
+
+var a = ["a", "c", "b", "d", "c"];
+trace (a.sort (custom_not_equal, Array.UNIQUESORT));
+
+var a = ["a", "c", "b", "d", "C"];
+trace (a.sort (custom, Array.UNIQUESORT));
+
+var a = ["a", "c", "b", "d", "C"];
+trace (a.sort (custom_not_equal, Array.UNIQUESORT));
+
+var a = ["a", "c", "b", "d", "C"];
+trace (a.sort (custom, Array.UNIQUESORT | Array.CASEINSENSITIVE));
+
+var a = ["a", "c", "b", "d", "C"];
+trace (a.sort (custom_not_equal, Array.UNIQUESORT | Array.CASEINSENSITIVE));
+
+var a = ["a", "01", "b", "d", "1"];
+trace (a.sort (custom, Array.UNIQUESORT));
+
+var a = ["a", "01", "b", "d", "1"];
+trace (a.sort (custom_not_equal, Array.UNIQUESORT));
+
+var a = ["a", "01", "b", "d", "1"];
+trace (a.sort (custom, Array.UNIQUESORT | Array.NUMERIC));
+
+var a = ["a", "01", "b", "d", "1"];
+trace (a.sort (custom_not_equal, Array.UNIQUESORT | Array.NUMERIC));
+
+function custom_zero (a, b)
+{
+  trace ("custom (" + a + ", " + b + ")");
+  return 0;
+}
+
+var a = ["a", "b", "a"];
+trace (a.sort (custom, Array.UNIQUESORT));
+
+var a = ["a", "b", "a"];
+trace (a.sort (custom_zero, Array.UNIQUESORT));
+
+getURL ("FSCommand:quit", "");
commit bb5fd7e16d38ac9de05f37593953ac4ede78a788
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Jul 4 15:45:13 2008 +0300

    Add a test to see how toString is called when using Array.sort with custom func

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index f511dcd..3f96f35 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -167,6 +167,15 @@ EXTRA_DIST = \
 	array-sort-custom-call-7.swf.trace \
 	array-sort-custom-call-8.swf \
 	array-sort-custom-call-8.swf.trace \
+	array-sort-custom-tostring.as \
+	array-sort-custom-tostring-5.swf \
+	array-sort-custom-tostring-5.swf.trace \
+	array-sort-custom-tostring-6.swf \
+	array-sort-custom-tostring-6.swf.trace \
+	array-sort-custom-tostring-7.swf \
+	array-sort-custom-tostring-7.swf.trace \
+	array-sort-custom-tostring-8.swf \
+	array-sort-custom-tostring-8.swf.trace \
 	array-sort-on.as \
 	array-sort-on-5.swf \
 	array-sort-on-5.swf.trace \
diff --git a/test/trace/array-sort-custom-tostring-5.swf b/test/trace/array-sort-custom-tostring-5.swf
new file mode 100644
index 0000000..b42c16d
Binary files /dev/null and b/test/trace/array-sort-custom-tostring-5.swf differ
diff --git a/test/trace/array-sort-custom-tostring-5.swf.trace b/test/trace/array-sort-custom-tostring-5.swf.trace
new file mode 100644
index 0000000..50cb7d5
--- /dev/null
+++ b/test/trace/array-sort-custom-tostring-5.swf.trace
@@ -0,0 +1,544 @@
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+a toString
+b toString
+c toString
+d toString
+a,b,c,d
+c valueOf
+a valueOf
+custom (c, a)
+c valueOf
+a valueOf
+a valueOf
+c valueOf
+1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+b valueOf
+a valueOf
+custom (b, a)
+b valueOf
+a valueOf
+a valueOf
+b valueOf
+1
+a toString
+b toString
+b toString
+c toString
+c toString
+c toString
+0
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+a toString
+b toString
+c toString
+d toString
+a,b,c,d
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+a toString
+b toString
+b toString
+c toString
+c toString
+d toString
+a toString
+b toString
+c toString
+d toString
+a,b,c,d
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+d valueOf
+c valueOf
+custom (d, c)
+d valueOf
+c valueOf
+c valueOf
+d valueOf
+1
+a toString
+b toString
+c toString
+c toString
+d toString
+a,b,c,c,d
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+d valueOf
+c valueOf
+custom (d, c)
+d valueOf
+c valueOf
+c valueOf
+d valueOf
+1
+a toString
+b toString
+b toString
+c toString
+c toString
+c toString
+0
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+d valueOf
+c valueOf
+custom (d, c)
+d valueOf
+c valueOf
+c valueOf
+d valueOf
+1
+a toString
+b toString
+c toString
+c toString
+d toString
+a,b,c,c,d
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+d valueOf
+c valueOf
+custom (d, c)
+d valueOf
+c valueOf
+c valueOf
+d valueOf
+1
+a toString
+b toString
+b toString
+c toString
+c toString
+c toString
+0
diff --git a/test/trace/array-sort-custom-tostring-6.swf b/test/trace/array-sort-custom-tostring-6.swf
new file mode 100644
index 0000000..a641251
Binary files /dev/null and b/test/trace/array-sort-custom-tostring-6.swf differ
diff --git a/test/trace/array-sort-custom-tostring-6.swf.trace b/test/trace/array-sort-custom-tostring-6.swf.trace
new file mode 100644
index 0000000..50cb7d5
--- /dev/null
+++ b/test/trace/array-sort-custom-tostring-6.swf.trace
@@ -0,0 +1,544 @@
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+a toString
+b toString
+c toString
+d toString
+a,b,c,d
+c valueOf
+a valueOf
+custom (c, a)
+c valueOf
+a valueOf
+a valueOf
+c valueOf
+1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+b valueOf
+a valueOf
+custom (b, a)
+b valueOf
+a valueOf
+a valueOf
+b valueOf
+1
+a toString
+b toString
+b toString
+c toString
+c toString
+c toString
+0
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+a toString
+b toString
+c toString
+d toString
+a,b,c,d
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+a toString
+b toString
+b toString
+c toString
+c toString
+d toString
+a toString
+b toString
+c toString
+d toString
+a,b,c,d
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+d valueOf
+c valueOf
+custom (d, c)
+d valueOf
+c valueOf
+c valueOf
+d valueOf
+1
+a toString
+b toString
+c toString
+c toString
+d toString
+a,b,c,c,d
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+d valueOf
+c valueOf
+custom (d, c)
+d valueOf
+c valueOf
+c valueOf
+d valueOf
+1
+a toString
+b toString
+b toString
+c toString
+c toString
+c toString
+0
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+d valueOf
+c valueOf
+custom (d, c)
+d valueOf
+c valueOf
+c valueOf
+d valueOf
+1
+a toString
+b toString
+c toString
+c toString
+d toString
+a,b,c,c,d
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+d valueOf
+c valueOf
+custom (d, c)
+d valueOf
+c valueOf
+c valueOf
+d valueOf
+1
+a toString
+b toString
+b toString
+c toString
+c toString
+c toString
+0
diff --git a/test/trace/array-sort-custom-tostring-7.swf b/test/trace/array-sort-custom-tostring-7.swf
new file mode 100644
index 0000000..6ffb089
Binary files /dev/null and b/test/trace/array-sort-custom-tostring-7.swf differ
diff --git a/test/trace/array-sort-custom-tostring-7.swf.trace b/test/trace/array-sort-custom-tostring-7.swf.trace
new file mode 100644
index 0000000..50cb7d5
--- /dev/null
+++ b/test/trace/array-sort-custom-tostring-7.swf.trace
@@ -0,0 +1,544 @@
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+a toString
+b toString
+c toString
+d toString
+a,b,c,d
+c valueOf
+a valueOf
+custom (c, a)
+c valueOf
+a valueOf
+a valueOf
+c valueOf
+1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+b valueOf
+a valueOf
+custom (b, a)
+b valueOf
+a valueOf
+a valueOf
+b valueOf
+1
+a toString
+b toString
+b toString
+c toString
+c toString
+c toString
+0
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+a toString
+b toString
+c toString
+d toString
+a,b,c,d
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+a toString
+b toString
+b toString
+c toString
+c toString
+d toString
+a toString
+b toString
+c toString
+d toString
+a,b,c,d
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+d valueOf
+c valueOf
+custom (d, c)
+d valueOf
+c valueOf
+c valueOf
+d valueOf
+1
+a toString
+b toString
+c toString
+c toString
+d toString
+a,b,c,c,d
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+d valueOf
+c valueOf
+custom (d, c)
+d valueOf
+c valueOf
+c valueOf
+d valueOf
+1
+a toString
+b toString
+b toString
+c toString
+c toString
+c toString
+0
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+d valueOf
+c valueOf
+custom (d, c)
+d valueOf
+c valueOf
+c valueOf
+d valueOf
+1
+a toString
+b toString
+c toString
+c toString
+d toString
+a,b,c,c,d
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+d valueOf
+c valueOf
+custom (d, c)
+d valueOf
+c valueOf
+c valueOf
+d valueOf
+1
+a toString
+b toString
+b toString
+c toString
+c toString
+c toString
+0
diff --git a/test/trace/array-sort-custom-tostring-8.swf b/test/trace/array-sort-custom-tostring-8.swf
new file mode 100644
index 0000000..3f58f1f
Binary files /dev/null and b/test/trace/array-sort-custom-tostring-8.swf differ
diff --git a/test/trace/array-sort-custom-tostring-8.swf.trace b/test/trace/array-sort-custom-tostring-8.swf.trace
new file mode 100644
index 0000000..50cb7d5
--- /dev/null
+++ b/test/trace/array-sort-custom-tostring-8.swf.trace
@@ -0,0 +1,544 @@
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+a toString
+b toString
+c toString
+d toString
+a,b,c,d
+c valueOf
+a valueOf
+custom (c, a)
+c valueOf
+a valueOf
+a valueOf
+c valueOf
+1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+b valueOf
+a valueOf
+custom (b, a)
+b valueOf
+a valueOf
+a valueOf
+b valueOf
+1
+a toString
+b toString
+b toString
+c toString
+c toString
+c toString
+0
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+a toString
+b toString
+c toString
+d toString
+a,b,c,d
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+a toString
+b toString
+b toString
+c toString
+c toString
+d toString
+a toString
+b toString
+c toString
+d toString
+a,b,c,d
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+d valueOf
+c valueOf
+custom (d, c)
+d valueOf
+c valueOf
+c valueOf
+d valueOf
+1
+a toString
+b toString
+c toString
+c toString
+d toString
+a,b,c,c,d
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+d valueOf
+c valueOf
+custom (d, c)
+d valueOf
+c valueOf
+c valueOf
+d valueOf
+1
+a toString
+b toString
+b toString
+c toString
+c toString
+c toString
+0
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+d valueOf
+c valueOf
+custom (d, c)
+d valueOf
+c valueOf
+c valueOf
+d valueOf
+1
+a toString
+b toString
+c toString
+c toString
+d toString
+a,b,c,c,d
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+a valueOf
+d valueOf
+custom (a, d)
+a valueOf
+d valueOf
+-1
+a valueOf
+b valueOf
+custom (a, b)
+a valueOf
+b valueOf
+-1
+a valueOf
+c valueOf
+custom (a, c)
+a valueOf
+c valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+c valueOf
+custom (c, c)
+c valueOf
+c valueOf
+c valueOf
+c valueOf
+0
+c valueOf
+d valueOf
+custom (c, d)
+c valueOf
+d valueOf
+-1
+c valueOf
+b valueOf
+custom (c, b)
+c valueOf
+b valueOf
+b valueOf
+c valueOf
+1
+d valueOf
+c valueOf
+custom (d, c)
+d valueOf
+c valueOf
+c valueOf
+d valueOf
+1
+a toString
+b toString
+b toString
+c toString
+c toString
+c toString
+0
diff --git a/test/trace/array-sort-custom-tostring.as b/test/trace/array-sort-custom-tostring.as
new file mode 100644
index 0000000..122c741
--- /dev/null
+++ b/test/trace/array-sort-custom-tostring.as
@@ -0,0 +1,52 @@
+// makeswf -v 7 -r 1 -o array-sort-custom-unique-7.swf array-sort-custom-unique.as
+
+function custom (a, b)
+{
+  trace ("custom (" + a + ", " + b + ")");
+  if (a < b) {
+    trace (-1);
+    return -1;
+  } else if (b < a) {
+    trace (1);
+    return 1;
+  } else {
+    trace (0);
+    return 0;
+  }
+}
+
+var a = {};
+a.toString = function () { trace ("a toString"); return "a"; };
+a.valueOf = function () { trace ("a valueOf"); return "a"; };
+
+var b = {};
+b.toString = function () { trace ("b toString"); return "b"; };
+b.valueOf = function () { trace ("b valueOf"); return "b"; };
+
+var c = {};
+c.toString = function () { trace ("c toString"); return "c"; };
+c.valueOf = function () { trace ("c valueOf"); return "c"; };
+
+var d = {};
+d.toString = function () { trace ("d toString"); return "d"; };
+d.valueOf = function () { trace ("d valueOf"); return "d"; };
+
+var x = [a, c, b, d];
+trace (x.sort (custom));
+var x = [c, a, c, b];
+trace (x.sort (custom, Array.UNIQUESORT));
+var x = [a, c, b, d];
+trace (x.sort (custom, Array.NUMERIC));
+var x = [a, c, b, d];
+trace (x.sort (custom, Array.UNIQUESORT | Array.NUMERIC));
+
+var x = [a, c, b, d, c];
+trace (x.sort (custom));
+var x = [a, c, b, d, c];
+trace (x.sort (custom, Array.UNIQUESORT));
+var x = [a, c, b, d, c];
+trace (x.sort (custom, Array.NUMERIC));
+var x = [a, c, b, d, c];
+trace (x.sort (custom, Array.UNIQUESORT | Array.NUMERIC));
+
+getURL ("FSCommand:quit", "");
commit c8b4b8716c9652a7152108b726e2bb157fd62a8d
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Jul 4 15:39:14 2008 +0300

    Fix Array.sort behavior using custom function and unique sort at the same time
    
    The array that is created by sorting with the custom function is used to
    compare elements next to each other with Array.sort's default comparison, and
    that is used to decide uniqueness

diff --git a/swfdec/swfdec_as_array.c b/swfdec/swfdec_as_array.c
index c8b029e..070f0ab 100644
--- a/swfdec/swfdec_as_array.c
+++ b/swfdec/swfdec_as_array.c
@@ -1193,9 +1193,26 @@ swfdec_as_array_do_sort (SwfdecAsContext *cx, SwfdecAsObject *object,
       &compare_data);
 
   // check unique sort
-  if ((options[0] & SORT_OPTION_UNIQUESORT) && compare_data.equal_found) {
-    SWFDEC_AS_VALUE_SET_INT (ret, 0);
-    goto done;
+  if (options[0] & SORT_OPTION_UNIQUESORT) {
+    if (fields == NULL && custom_function != NULL) {
+      // if we used custom_function for comparision, we shall now go trough the
+      // sorted array and compare them using the default array sort comparision
+      // and use that to decide if it's unique (no it doesn't make too much
+      // sense)
+      for (i = 0; i < length - 1; i++) {
+	SwfdecAsValue *a = &array[i].value;
+	SwfdecAsValue *b = &array[i + 1].value;
+	if (swfdec_as_array_sort_compare_values (cx, a, b, 0, NULL) == 0)
+	  break;
+      }
+      if (i < length - 1) {
+	SWFDEC_AS_VALUE_SET_INT (ret, 0);
+	goto done;
+      }
+    } else if (compare_data.equal_found) {
+      SWFDEC_AS_VALUE_SET_INT (ret, 0);
+      goto done;
+    }
   }
 
   if (options[0] & SORT_OPTION_RETURNINDEXEDARRAY) {
commit ac3d42aaa1a8733b2ae7dbec8fd4bc996c2c1399
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Jul 4 15:37:40 2008 +0300

    Make Array.splice return undefined when given length is negative

diff --git a/swfdec/swfdec_as_array.c b/swfdec/swfdec_as_array.c
index 5e7663e..c8b029e 100644
--- a/swfdec/swfdec_as_array.c
+++ b/swfdec/swfdec_as_array.c
@@ -882,8 +882,10 @@ swfdec_as_array_splice (SwfdecAsContext *cx, SwfdecAsObject *object,
   start_index = CLAMP (start_index, 0, length);
 
   if (argc > 1) {
-    num_remove = CLAMP (swfdec_as_value_to_integer (cx, &argv[1]), 0,
-	length - start_index);
+    int tmp = swfdec_as_value_to_integer (cx, &argv[1]);
+    if (tmp < 0)
+      return;
+    num_remove = MIN (tmp, length - start_index);
   } else {
     num_remove = length - start_index;
   }
commit 59fb60db58ee0e5a7f0865b7743d9f15e3760d6e
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri Jul 4 15:37:11 2008 +0300

    Respect propflag preventing deletion in swfdec_as_array_foreach_remove_range

diff --git a/swfdec/swfdec_as_array.c b/swfdec/swfdec_as_array.c
index 1038a02..5e7663e 100644
--- a/swfdec/swfdec_as_array.c
+++ b/swfdec/swfdec_as_array.c
@@ -172,6 +172,9 @@ swfdec_as_array_foreach_remove_range (SwfdecAsObject *object,
   if (idx == -1)
     return FALSE;
 
+  if (flags & SWFDEC_AS_VARIABLE_PERMANENT)
+    return FALSE;
+
   if (idx >= fdata->start_index && idx < fdata->start_index + fdata->num)
     return TRUE;
 


More information about the Swfdec-commits mailing list