[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