[Swfdec-commits] 12 commits - swfdec/swfdec_as_array.c swfdec/swfdec_as_array.h swfdec/swfdec_as_types.c swfdec/swfdec_load_object_as.c swfdec/swfdec_xml.c test/trace
Pekka Lampila
medar at kemper.freedesktop.org
Fri Feb 15 03:29:51 PST 2008
swfdec/swfdec_as_array.c | 79 +-
swfdec/swfdec_as_array.h | 4
swfdec/swfdec_as_types.c | 3
swfdec/swfdec_load_object_as.c | 5
swfdec/swfdec_xml.c | 36 +
test/trace/Makefile.am | 27
test/trace/array-sort-tostring-5.swf |binary
test/trace/array-sort-tostring-5.swf.trace | 750 ++++++++++++++++++++++++++
test/trace/array-sort-tostring-6.swf |binary
test/trace/array-sort-tostring-6.swf.trace | 750 ++++++++++++++++++++++++++
test/trace/array-sort-tostring-7.swf |binary
test/trace/array-sort-tostring-7.swf.trace | 750 ++++++++++++++++++++++++++
test/trace/array-sort-tostring-8.swf |binary
test/trace/array-sort-tostring-8.swf.trace | 750 ++++++++++++++++++++++++++
test/trace/array-sort-tostring.as | 28
test/trace/string-object-tostring-5.swf |binary
test/trace/string-object-tostring-5.swf.trace | 5
test/trace/string-object-tostring-6.swf |binary
test/trace/string-object-tostring-6.swf.trace | 5
test/trace/string-object-tostring-7.swf |binary
test/trace/string-object-tostring-7.swf.trace | 5
test/trace/string-object-tostring-8.swf |binary
test/trace/string-object-tostring-8.swf.trace | 5
test/trace/string-object-tostring.as | 25
24 files changed, 3192 insertions(+), 35 deletions(-)
New commits:
commit df21d2f8d518bb16738204e519528d329f3c2b90
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Fri Feb 15 13:16:43 2008 +0200
Add support for parsing XML's CDATA sections
diff --git a/swfdec/swfdec_xml.c b/swfdec/swfdec_xml.c
index e5331c6..6630906 100644
--- a/swfdec/swfdec_xml.c
+++ b/swfdec/swfdec_xml.c
@@ -667,6 +667,40 @@ swfdec_xml_parse_tag (SwfdecXml *xml, SwfdecXmlNode **node, const char *p)
}
static const char *
+swfdec_xml_parse_cdata (SwfdecXml *xml, SwfdecXmlNode *node, const char *p)
+{
+ SwfdecXmlNode *child;
+ const char *end;
+ char *text;
+
+ g_assert (p != NULL);
+ g_return_val_if_fail (strncmp (p, "<![CDATA[", strlen ("<![CDATA[")) == 0,
+ strchr (p, '\0'));
+ g_return_val_if_fail (SWFDEC_IS_XML (xml), strchr (p, '\0'));
+
+ p += strlen ("<![CDATA[");
+
+ end = strstr (p, "]]>");
+
+ if (end == NULL) {
+ xml->status = XML_PARSE_STATUS_CDATA_NOT_TERMINATED;
+ return strchr (p, '\0');
+ }
+
+ text = g_strndup (p, end - p);
+
+ child = swfdec_xml_node_new_no_properties (
+ SWFDEC_AS_OBJECT (node)->context, SWFDEC_XML_NODE_TEXT,
+ swfdec_as_context_give_string (SWFDEC_AS_OBJECT (xml)->context, text));
+
+ end += strlen("]]>");
+
+ g_return_val_if_fail (end > p, strchr (p, '\0'));
+
+ return end;
+}
+
+static const char *
swfdec_xml_parse_text (SwfdecXml *xml, SwfdecXmlNode *node,
const char *p, gboolean ignore_white)
{
@@ -733,6 +767,8 @@ swfdec_xml_parseXML (SwfdecXml *xml, const char *value)
p = swfdec_xml_parse_docTypeDecl (xml, node, p);
} else if (strncmp (p + 1, "!--", strlen ("!--")) == 0) {
p = swfdec_xml_parse_comment (xml, p);
+ } else if (g_ascii_strncasecmp (p + 1, "![CDATA", strlen ("![CDATA")) == 0) {
+ p = swfdec_xml_parse_cdata (xml, node, p);
} else {
p = swfdec_xml_parse_tag (xml, &node, p);
}
commit 38bcd1c7ec2564a042bb39957acd28c52f788a44
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Fri Feb 15 07:10:28 2008 +0200
Apparently we don't want to send the terminating null in sendAndLoad
diff --git a/swfdec/swfdec_load_object_as.c b/swfdec/swfdec_load_object_as.c
index 012249e..b697e6a 100644
--- a/swfdec/swfdec_load_object_as.c
+++ b/swfdec/swfdec_load_object_as.c
@@ -121,8 +121,9 @@ swfdec_load_object_as_sendAndLoad (SwfdecAsContext *cx, SwfdecAsObject *object,
}
SWFDEC_AS_VALUE_SET_OBJECT (&val, object);
data = swfdec_as_value_to_string (cx, &val);
- buffer = swfdec_buffer_new_for_data (g_memdup (data, strlen (data) + 1),
- strlen (data) + 1);
+ // don't send the nul-byte
+ buffer = swfdec_buffer_new_for_data (g_memdup (data, strlen (data)),
+ strlen (data));
swfdec_load_object_create (target, url, method, buffer,
swfdec_load_object_on_progress, swfdec_load_object_on_finish);
commit 5d52a0f17105e746e68a3595bde36ff2ab50644d
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Fri Feb 15 00:38:32 2008 +0200
That code duplication wasn't duplication after all, revert and comment it
diff --git a/swfdec/swfdec_as_array.c b/swfdec/swfdec_as_array.c
index 13adba9..acbedb0 100644
--- a/swfdec/swfdec_as_array.c
+++ b/swfdec/swfdec_as_array.c
@@ -513,7 +513,13 @@ static void
swfdec_as_array_set (SwfdecAsObject *object, const char *variable,
const SwfdecAsValue *val, guint flags)
{
- gint32 l = swfdec_as_array_to_index (variable);
+ gboolean indexvar;
+ char *end;
+ gint32 l;
+
+ // we have to allow negative values here
+ l = strtoul (variable, &end, 10);
+ indexvar = (*end == 0);
// if we changed to smaller length, destroy all values that are outside it
//
@@ -534,7 +540,7 @@ swfdec_as_array_set (SwfdecAsObject *object, const char *variable,
val, flags);
// if we added new value outside the current length, set a bigger length
- if (l != -1 && ++l > swfdec_as_array_length_as_integer (object))
+ if (indexvar && ++l > swfdec_as_array_length_as_integer (object))
swfdec_as_array_set_length_object (object, l);
}
commit 8711bd2d6688d069df74a01bdfeef4dea98754f4
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Fri Feb 15 00:36:41 2008 +0200
Some length handling fixes to array
diff --git a/swfdec/swfdec_as_array.c b/swfdec/swfdec_as_array.c
index 3750bee..13adba9 100644
--- a/swfdec/swfdec_as_array.c
+++ b/swfdec/swfdec_as_array.c
@@ -123,9 +123,15 @@ swfdec_as_array_set_length_object (SwfdecAsObject *object, gint32 length)
g_return_if_fail (SWFDEC_IS_AS_OBJECT (object));
+ if (SWFDEC_IS_AS_ARRAY (object))
+ SWFDEC_AS_ARRAY (object)->check_length = FALSE;
+
SWFDEC_AS_VALUE_SET_INT (&val, length);
swfdec_as_object_set_variable_and_flags (object, SWFDEC_AS_STR_length, &val,
SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
+
+ if (SWFDEC_IS_AS_ARRAY (object))
+ SWFDEC_AS_ARRAY (object)->check_length = TRUE;
}
/**
@@ -139,10 +145,15 @@ swfdec_as_array_set_length_object (SwfdecAsObject *object, gint32 length)
void
swfdec_as_array_set_length (SwfdecAsArray *array, gint32 length)
{
+ SwfdecAsValue val;
+
g_return_if_fail (SWFDEC_IS_AS_ARRAY (array));
g_return_if_fail (length >= 0);
- swfdec_as_array_set_length_object (SWFDEC_AS_OBJECT (array), length);
+ SWFDEC_AS_VALUE_SET_INT (&val, length);
+ swfdec_as_object_set_variable_and_flags (SWFDEC_AS_OBJECT (array),
+ SWFDEC_AS_STR_length, &val,
+ SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
}
typedef struct {
@@ -480,8 +491,6 @@ swfdec_as_array_append_array_range (SwfdecAsArray *array_to,
fdata.start_index = start_index;
fdata.num = num;
- g_return_if_fail (start_index + num <= fdata.offset);
-
swfdec_as_array_set_length_object (fdata.object_to,
fdata.offset + fdata.num);
swfdec_as_object_foreach (object_from,
@@ -508,8 +517,10 @@ swfdec_as_array_set (SwfdecAsObject *object, const char *variable,
// if we changed to smaller length, destroy all values that are outside it
//
- if (!swfdec_strcmp (object->context->version, variable,
- SWFDEC_AS_STR_length)) {
+ if (SWFDEC_AS_ARRAY (object)->check_length &&
+ !swfdec_strcmp (object->context->version, variable,
+ SWFDEC_AS_STR_length))
+ {
gint32 length_old = swfdec_as_array_length (object);
gint32 length_new = swfdec_as_value_to_integer (object->context, val);
length_new = MAX (0, length_new);
@@ -523,10 +534,8 @@ swfdec_as_array_set (SwfdecAsObject *object, const char *variable,
val, flags);
// if we added new value outside the current length, set a bigger length
- if (l != -1) {
- if (++l > swfdec_as_array_length_as_integer (object))
- swfdec_as_array_set_length_object (object, l);
- }
+ if (l != -1 && ++l > swfdec_as_array_length_as_integer (object))
+ swfdec_as_array_set_length_object (object, l);
}
static void
@@ -540,6 +549,7 @@ swfdec_as_array_class_init (SwfdecAsArrayClass *klass)
static void
swfdec_as_array_init (SwfdecAsArray *array)
{
+ array->check_length = TRUE;
}
/*
@@ -666,13 +676,12 @@ swfdec_as_array_do_pop (SwfdecAsContext *cx, SwfdecAsObject *object,
var = swfdec_as_integer_to_string (object->context, length - 1);
swfdec_as_object_get_variable (object, var, ret);
- // if Array, the length is reduced by one (which destroys the variable also)
+ swfdec_as_object_delete_variable (object, var);
+
+ // if Array, the length is reduced by one
// else the length is not reduced at all, but the variable is still deleted
- if (SWFDEC_IS_AS_ARRAY (object)) {
+ if (SWFDEC_IS_AS_ARRAY (object))
swfdec_as_array_set_length_object (object, length - 1);
- } else {
- swfdec_as_object_delete_variable (object, var);
- }
}
SWFDEC_AS_NATIVE (252, 5, swfdec_as_array_do_unshift)
diff --git a/swfdec/swfdec_as_array.h b/swfdec/swfdec_as_array.h
index 22665a0..2d422d8 100644
--- a/swfdec/swfdec_as_array.h
+++ b/swfdec/swfdec_as_array.h
@@ -38,6 +38,10 @@ typedef struct _SwfdecAsArrayClass SwfdecAsArrayClass;
struct _SwfdecAsArray {
/*< private >*/
SwfdecAsObject object;
+
+ // whether to remove elements if length property is changed
+ // disabled internally sometimes to not create extra valueOf calls
+ gboolean check_length;
};
struct _SwfdecAsArrayClass {
commit fe427d915b2370927fd8ebd55c1936045e3c6c6c
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Thu Feb 14 09:42:20 2008 +0200
Get rid of little code duplication in array stuff
diff --git a/swfdec/swfdec_as_array.c b/swfdec/swfdec_as_array.c
index 9a90333..3750bee 100644
--- a/swfdec/swfdec_as_array.c
+++ b/swfdec/swfdec_as_array.c
@@ -504,12 +504,7 @@ static void
swfdec_as_array_set (SwfdecAsObject *object, const char *variable,
const SwfdecAsValue *val, guint flags)
{
- char *end;
- gboolean indexvar = TRUE;
- gint32 l = strtoul (variable, &end, 10);
-
- if (*end != 0 || l > G_MAXINT32)
- indexvar = FALSE;
+ gint32 l = swfdec_as_array_to_index (variable);
// if we changed to smaller length, destroy all values that are outside it
//
@@ -528,7 +523,7 @@ swfdec_as_array_set (SwfdecAsObject *object, const char *variable,
val, flags);
// if we added new value outside the current length, set a bigger length
- if (indexvar) {
+ if (l != -1) {
if (++l > swfdec_as_array_length_as_integer (object))
swfdec_as_array_set_length_object (object, l);
}
commit ff50548ecb754e92551de3873f3b1d1bd42accf9
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Thu Feb 14 04:52:02 2008 +0200
Few fixes to the handling of array's length property
diff --git a/swfdec/swfdec_as_array.c b/swfdec/swfdec_as_array.c
index 32913d7..9a90333 100644
--- a/swfdec/swfdec_as_array.c
+++ b/swfdec/swfdec_as_array.c
@@ -34,6 +34,7 @@
#include "swfdec_as_string.h"
#include "swfdec_as_strings.h"
#include "swfdec_movie.h"
+#include "swfdec_utils.h"
#include "swfdec_debug.h"
G_DEFINE_TYPE (SwfdecAsArray, swfdec_as_array, SWFDEC_TYPE_AS_OBJECT)
@@ -511,10 +512,12 @@ swfdec_as_array_set (SwfdecAsObject *object, const char *variable,
indexvar = FALSE;
// if we changed to smaller length, destroy all values that are outside it
- if (!strcmp (variable, SWFDEC_AS_STR_length)) {
+ //
+ if (!swfdec_strcmp (object->context->version, variable,
+ SWFDEC_AS_STR_length)) {
gint32 length_old = swfdec_as_array_length (object);
- gint32 length_new = MAX (0,
- swfdec_as_value_to_integer (object->context, val));
+ gint32 length_new = swfdec_as_value_to_integer (object->context, val);
+ length_new = MAX (0, length_new);
if (length_old > length_new) {
swfdec_as_array_remove_range (SWFDEC_AS_ARRAY (object), length_new,
length_old - length_new);
@@ -585,7 +588,7 @@ void
swfdec_as_array_join (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *ret)
{
- int i, length;
+ int i;
const char *var, *str, *sep;
SwfdecAsValue val;
@@ -598,13 +601,13 @@ swfdec_as_array_join (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
sep = SWFDEC_AS_STR_COMMA;
}
- length = swfdec_as_array_length (object);
- if (length > 0) {
+ // note: we don't cache length
+ if (swfdec_as_array_length (object) > 0) {
GString *string;
swfdec_as_object_get_variable (object, SWFDEC_AS_STR_0, &val);
str = swfdec_as_value_to_string (cx, &val);
string = g_string_new (str);
- for (i = 1; i < length; i++) {
+ for (i = 1; i < swfdec_as_array_length (object); i++) {
var = swfdec_as_integer_to_string (cx, i);
swfdec_as_object_get_variable (object, var, &val);
var = swfdec_as_value_to_string (cx, &val);
commit 5622d0b4fb9a6fe6ac49ab252c07e6bf26d968e5
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Thu Feb 14 03:30:35 2008 +0200
Remove checking for length in bunch of asserts in array
Since it does get_variable and value_to_integer, oops
diff --git a/swfdec/swfdec_as_array.c b/swfdec/swfdec_as_array.c
index f6b0d25..32913d7 100644
--- a/swfdec/swfdec_as_array.c
+++ b/swfdec/swfdec_as_array.c
@@ -175,7 +175,6 @@ swfdec_as_array_remove_range (SwfdecAsArray *array, gint32 start_index,
g_return_if_fail (SWFDEC_IS_AS_ARRAY (array));
g_return_if_fail (start_index >= 0);
g_return_if_fail (num >= 0);
- g_return_if_fail (start_index + num <= swfdec_as_array_length (object));
if (num == 0)
return;
@@ -227,7 +226,6 @@ swfdec_as_array_move_range (SwfdecAsObject *object, gint32 from_index,
g_return_if_fail (SWFDEC_IS_AS_OBJECT (object));
g_return_if_fail (from_index >= 0);
g_return_if_fail (num >= 0);
- g_return_if_fail (from_index + num <= swfdec_as_array_length (object));
g_return_if_fail (to_index >= 0);
if (num == 0 || from_index == to_index)
@@ -472,8 +470,6 @@ swfdec_as_array_append_array_range (SwfdecAsArray *array_to,
g_return_if_fail (SWFDEC_IS_AS_ARRAY (array_to));
g_return_if_fail (SWFDEC_IS_AS_OBJECT (object_from));
g_return_if_fail (start_index >= 0);
- g_return_if_fail (
- start_index + num <= swfdec_as_array_length (object_from));
if (num == 0)
return;
@@ -483,6 +479,8 @@ swfdec_as_array_append_array_range (SwfdecAsArray *array_to,
fdata.start_index = start_index;
fdata.num = num;
+ g_return_if_fail (start_index + num <= fdata.offset);
+
swfdec_as_array_set_length_object (fdata.object_to,
fdata.offset + fdata.num);
swfdec_as_object_foreach (object_from,
commit 702c27e6e3499d314aafd532efadb2b4c8cad73c
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Thu Feb 14 01:31:57 2008 +0200
Add a test to see what toString calls array sort does
diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index d2b0ac6..29e92b4 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -182,6 +182,15 @@ EXTRA_DIST = \
array-sort-order-7.swf.trace \
array-sort-order-8.swf \
array-sort-order-8.swf.trace \
+ array-sort-tostring.as \
+ array-sort-tostring-5.swf \
+ array-sort-tostring-5.swf.trace \
+ array-sort-tostring-6.swf \
+ array-sort-tostring-6.swf.trace \
+ array-sort-tostring-7.swf \
+ array-sort-tostring-7.swf.trace \
+ array-sort-tostring-8.swf \
+ array-sort-tostring-8.swf.trace \
array-sort-unique-abort.as \
array-sort-unique-abort-5.swf \
array-sort-unique-abort-5.swf.trace \
diff --git a/test/trace/array-sort-tostring-5.swf b/test/trace/array-sort-tostring-5.swf
new file mode 100644
index 0000000..2d47502
Binary files /dev/null and b/test/trace/array-sort-tostring-5.swf differ
diff --git a/test/trace/array-sort-tostring-5.swf.trace b/test/trace/array-sort-tostring-5.swf.trace
new file mode 100644
index 0000000..0867535
--- /dev/null
+++ b/test/trace/array-sort-tostring-5.swf.trace
@@ -0,0 +1,750 @@
+toString called for 3 @ÃÂ 0
+toString called for 3 @ÃÂ 1
+toString called for 8 @ÃÂ 2
+toString called for 7 @ÃÂ 3
+toString called for 5 @ÃÂ 4
+toString called for 5 @ÃÂ 5
+toString called for 9 @ÃÂ 6
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 8
+toString called for 8 @ÃÂ 9
+toString called for 9 @ÃÂ 10
+toString called for 4 @ÃÂ 11
+toString called for 2 @ÃÂ 12
+toString called for 3 @ÃÂ 13
+toString called for 8 @ÃÂ 14
+toString called for 1 @ÃÂ 15
+toString called for 6 @ÃÂ 16
+toString called for 6 @ÃÂ 17
+toString called for 3 @ÃÂ 18
+toString called for 3 @ÃÂ 19
+3,3,8,7,5,5,9,8,8,8,9,4,2,3,8,1,6,6,3,3
+toString called for 3 @ÃÂ 0
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 0
+toString called for 3 @ÃÂ 19
+toString called for 3 @ÃÂ 0
+toString called for 3 @ÃÂ 18
+toString called for 3 @ÃÂ 0
+toString called for 6 @ÃÂ 17
+toString called for 3 @ÃÂ 0
+toString called for 6 @ÃÂ 16
+toString called for 3 @ÃÂ 0
+toString called for 1 @ÃÂ 15
+toString called for 3 @ÃÂ 0
+toString called for 1 @ÃÂ 15
+toString called for 3 @ÃÂ 0
+toString called for 8 @ÃÂ 2
+toString called for 3 @ÃÂ 0
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 0
+toString called for 8 @ÃÂ 14
+toString called for 3 @ÃÂ 0
+toString called for 3 @ÃÂ 13
+toString called for 3 @ÃÂ 0
+toString called for 2 @ÃÂ 12
+toString called for 3 @ÃÂ 0
+toString called for 2 @ÃÂ 12
+toString called for 3 @ÃÂ 0
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 0
+toString called for 8 @ÃÂ 2
+toString called for 3 @ÃÂ 0
+toString called for 4 @ÃÂ 11
+toString called for 3 @ÃÂ 0
+toString called for 9 @ÃÂ 10
+toString called for 3 @ÃÂ 0
+toString called for 8 @ÃÂ 9
+toString called for 3 @ÃÂ 0
+toString called for 8 @ÃÂ 8
+toString called for 3 @ÃÂ 0
+toString called for 8 @ÃÂ 7
+toString called for 3 @ÃÂ 0
+toString called for 9 @ÃÂ 6
+toString called for 3 @ÃÂ 0
+toString called for 5 @ÃÂ 5
+toString called for 3 @ÃÂ 0
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 0
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 0
+toString called for 2 @ÃÂ 12
+toString called for 2 @ÃÂ 12
+toString called for 1 @ÃÂ 15
+toString called for 7 @ÃÂ 3
+toString called for 5 @ÃÂ 4
+toString called for 7 @ÃÂ 3
+toString called for 5 @ÃÂ 5
+toString called for 7 @ÃÂ 3
+toString called for 9 @ÃÂ 6
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 19
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 19
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 7
+toString called for 7 @ÃÂ 3
+toString called for 9 @ÃÂ 6
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 18
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 18
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 8
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 7
+toString called for 7 @ÃÂ 3
+toString called for 6 @ÃÂ 17
+toString called for 7 @ÃÂ 3
+toString called for 6 @ÃÂ 17
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 9
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 8
+toString called for 7 @ÃÂ 3
+toString called for 6 @ÃÂ 16
+toString called for 7 @ÃÂ 3
+toString called for 6 @ÃÂ 16
+toString called for 7 @ÃÂ 3
+toString called for 9 @ÃÂ 10
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 9
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 1
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 1
+toString called for 7 @ÃÂ 3
+toString called for 4 @ÃÂ 11
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 2
+toString called for 7 @ÃÂ 3
+toString called for 9 @ÃÂ 10
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 14
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 13
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 13
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 2
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 13
+toString called for 3 @ÃÂ 13
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 13
+toString called for 4 @ÃÂ 11
+toString called for 3 @ÃÂ 13
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 13
+toString called for 6 @ÃÂ 16
+toString called for 3 @ÃÂ 13
+toString called for 6 @ÃÂ 17
+toString called for 3 @ÃÂ 13
+toString called for 3 @ÃÂ 18
+toString called for 3 @ÃÂ 13
+toString called for 3 @ÃÂ 19
+toString called for 3 @ÃÂ 13
+toString called for 5 @ÃÂ 5
+toString called for 3 @ÃÂ 13
+toString called for 5 @ÃÂ 4
+toString called for 5 @ÃÂ 4
+toString called for 5 @ÃÂ 5
+toString called for 5 @ÃÂ 4
+toString called for 4 @ÃÂ 11
+toString called for 5 @ÃÂ 4
+toString called for 4 @ÃÂ 11
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 19
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 18
+toString called for 5 @ÃÂ 4
+toString called for 6 @ÃÂ 17
+toString called for 5 @ÃÂ 4
+toString called for 5 @ÃÂ 5
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 1
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 1
+toString called for 5 @ÃÂ 4
+toString called for 6 @ÃÂ 16
+toString called for 5 @ÃÂ 4
+toString called for 6 @ÃÂ 17
+toString called for 5 @ÃÂ 4
+toString called for 6 @ÃÂ 16
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 1
+toString called for 4 @ÃÂ 11
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 18
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 19
+toString called for 3 @ÃÂ 1
+toString called for 4 @ÃÂ 11
+toString called for 4 @ÃÂ 11
+toString called for 3 @ÃÂ 19
+toString called for 4 @ÃÂ 11
+toString called for 3 @ÃÂ 18
+toString called for 3 @ÃÂ 18
+toString called for 3 @ÃÂ 19
+toString called for 6 @ÃÂ 16
+toString called for 6 @ÃÂ 17
+toString called for 6 @ÃÂ 16
+toString called for 5 @ÃÂ 5
+toString called for 6 @ÃÂ 16
+toString called for 5 @ÃÂ 5
+toString called for 6 @ÃÂ 16
+toString called for 6 @ÃÂ 17
+toString called for 6 @ÃÂ 16
+toString called for 5 @ÃÂ 5
+toString called for 8 @ÃÂ 2
+toString called for 8 @ÃÂ 14
+toString called for 8 @ÃÂ 2
+toString called for 9 @ÃÂ 6
+toString called for 8 @ÃÂ 2
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 2
+toString called for 8 @ÃÂ 8
+toString called for 8 @ÃÂ 2
+toString called for 8 @ÃÂ 9
+toString called for 8 @ÃÂ 2
+toString called for 9 @ÃÂ 10
+toString called for 8 @ÃÂ 2
+toString called for 8 @ÃÂ 14
+toString called for 8 @ÃÂ 14
+toString called for 9 @ÃÂ 10
+toString called for 8 @ÃÂ 14
+toString called for 9 @ÃÂ 6
+toString called for 8 @ÃÂ 14
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 14
+toString called for 8 @ÃÂ 8
+toString called for 8 @ÃÂ 14
+toString called for 8 @ÃÂ 9
+toString called for 8 @ÃÂ 14
+toString called for 9 @ÃÂ 10
+toString called for 9 @ÃÂ 10
+toString called for 8 @ÃÂ 9
+toString called for 9 @ÃÂ 10
+toString called for 8 @ÃÂ 8
+toString called for 9 @ÃÂ 10
+toString called for 8 @ÃÂ 7
+toString called for 9 @ÃÂ 10
+toString called for 9 @ÃÂ 6
+toString called for 9 @ÃÂ 10
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 9
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 8
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 9
+toString called for 8 @ÃÂ 9
+toString called for 8 @ÃÂ 8
+toString called for 1 @ÃÂ 15
+toString called for 2 @ÃÂ 12
+toString called for 3 @ÃÂ 0
+toString called for 3 @ÃÂ 13
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 18
+toString called for 3 @ÃÂ 19
+toString called for 4 @ÃÂ 11
+toString called for 5 @ÃÂ 4
+toString called for 5 @ÃÂ 5
+toString called for 6 @ÃÂ 16
+toString called for 6 @ÃÂ 17
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 2
+toString called for 8 @ÃÂ 14
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 9
+toString called for 8 @ÃÂ 8
+toString called for 9 @ÃÂ 10
+toString called for 9 @ÃÂ 6
+1,2,3,3,3,3,3,4,5,5,6,6,7,8,8,8,8,8,9,9
+toString called for 3 @ÃÂ 0
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 0
+toString called for 3 @ÃÂ 19
+toString called for 3 @ÃÂ 0
+toString called for 3 @ÃÂ 18
+toString called for 3 @ÃÂ 0
+toString called for 6 @ÃÂ 17
+toString called for 3 @ÃÂ 0
+toString called for 6 @ÃÂ 16
+toString called for 3 @ÃÂ 0
+toString called for 1 @ÃÂ 15
+toString called for 3 @ÃÂ 0
+toString called for 1 @ÃÂ 15
+toString called for 3 @ÃÂ 0
+toString called for 8 @ÃÂ 2
+toString called for 3 @ÃÂ 0
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 0
+toString called for 8 @ÃÂ 14
+toString called for 3 @ÃÂ 0
+toString called for 3 @ÃÂ 13
+toString called for 3 @ÃÂ 0
+toString called for 2 @ÃÂ 12
+toString called for 3 @ÃÂ 0
+toString called for 2 @ÃÂ 12
+toString called for 3 @ÃÂ 0
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 0
+toString called for 8 @ÃÂ 2
+toString called for 3 @ÃÂ 0
+toString called for 4 @ÃÂ 11
+toString called for 3 @ÃÂ 0
+toString called for 9 @ÃÂ 10
+toString called for 3 @ÃÂ 0
+toString called for 8 @ÃÂ 9
+toString called for 3 @ÃÂ 0
+toString called for 8 @ÃÂ 8
+toString called for 3 @ÃÂ 0
+toString called for 8 @ÃÂ 7
+toString called for 3 @ÃÂ 0
+toString called for 9 @ÃÂ 6
+toString called for 3 @ÃÂ 0
+toString called for 5 @ÃÂ 5
+toString called for 3 @ÃÂ 0
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 0
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 0
+toString called for 2 @ÃÂ 12
+toString called for 2 @ÃÂ 12
+toString called for 1 @ÃÂ 15
+toString called for 7 @ÃÂ 3
+toString called for 5 @ÃÂ 4
+toString called for 7 @ÃÂ 3
+toString called for 5 @ÃÂ 5
+toString called for 7 @ÃÂ 3
+toString called for 9 @ÃÂ 6
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 19
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 19
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 7
+toString called for 7 @ÃÂ 3
+toString called for 9 @ÃÂ 6
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 18
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 18
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 8
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 7
+toString called for 7 @ÃÂ 3
+toString called for 6 @ÃÂ 17
+toString called for 7 @ÃÂ 3
+toString called for 6 @ÃÂ 17
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 9
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 8
+toString called for 7 @ÃÂ 3
+toString called for 6 @ÃÂ 16
+toString called for 7 @ÃÂ 3
+toString called for 6 @ÃÂ 16
+toString called for 7 @ÃÂ 3
+toString called for 9 @ÃÂ 10
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 9
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 1
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 1
+toString called for 7 @ÃÂ 3
+toString called for 4 @ÃÂ 11
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 2
+toString called for 7 @ÃÂ 3
+toString called for 9 @ÃÂ 10
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 14
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 13
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 13
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 2
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 13
+toString called for 3 @ÃÂ 13
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 13
+toString called for 4 @ÃÂ 11
+toString called for 3 @ÃÂ 13
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 13
+toString called for 6 @ÃÂ 16
+toString called for 3 @ÃÂ 13
+toString called for 6 @ÃÂ 17
+toString called for 3 @ÃÂ 13
+toString called for 3 @ÃÂ 18
+toString called for 3 @ÃÂ 13
+toString called for 3 @ÃÂ 19
+toString called for 3 @ÃÂ 13
+toString called for 5 @ÃÂ 5
+toString called for 3 @ÃÂ 13
+toString called for 5 @ÃÂ 4
+toString called for 5 @ÃÂ 4
+toString called for 5 @ÃÂ 5
+toString called for 5 @ÃÂ 4
+toString called for 4 @ÃÂ 11
+toString called for 5 @ÃÂ 4
+toString called for 4 @ÃÂ 11
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 19
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 18
+toString called for 5 @ÃÂ 4
+toString called for 6 @ÃÂ 17
+toString called for 5 @ÃÂ 4
+toString called for 5 @ÃÂ 5
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 1
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 1
+toString called for 5 @ÃÂ 4
+toString called for 6 @ÃÂ 16
+toString called for 5 @ÃÂ 4
+toString called for 6 @ÃÂ 17
+toString called for 5 @ÃÂ 4
+toString called for 6 @ÃÂ 16
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 1
+toString called for 4 @ÃÂ 11
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 18
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 19
+toString called for 3 @ÃÂ 1
+toString called for 4 @ÃÂ 11
+toString called for 4 @ÃÂ 11
+toString called for 3 @ÃÂ 19
+toString called for 4 @ÃÂ 11
+toString called for 3 @ÃÂ 18
+toString called for 3 @ÃÂ 18
+toString called for 3 @ÃÂ 19
+toString called for 6 @ÃÂ 16
+toString called for 6 @ÃÂ 17
+toString called for 6 @ÃÂ 16
+toString called for 5 @ÃÂ 5
+toString called for 6 @ÃÂ 16
+toString called for 5 @ÃÂ 5
+toString called for 6 @ÃÂ 16
+toString called for 6 @ÃÂ 17
+toString called for 6 @ÃÂ 16
+toString called for 5 @ÃÂ 5
+toString called for 8 @ÃÂ 2
+toString called for 8 @ÃÂ 14
+toString called for 8 @ÃÂ 2
+toString called for 9 @ÃÂ 6
+toString called for 8 @ÃÂ 2
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 2
+toString called for 8 @ÃÂ 8
+toString called for 8 @ÃÂ 2
+toString called for 8 @ÃÂ 9
+toString called for 8 @ÃÂ 2
+toString called for 9 @ÃÂ 10
+toString called for 8 @ÃÂ 2
+toString called for 8 @ÃÂ 14
+toString called for 8 @ÃÂ 14
+toString called for 9 @ÃÂ 10
+toString called for 8 @ÃÂ 14
+toString called for 9 @ÃÂ 6
+toString called for 8 @ÃÂ 14
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 14
+toString called for 8 @ÃÂ 8
+toString called for 8 @ÃÂ 14
+toString called for 8 @ÃÂ 9
+toString called for 8 @ÃÂ 14
+toString called for 9 @ÃÂ 10
+toString called for 9 @ÃÂ 10
+toString called for 8 @ÃÂ 9
+toString called for 9 @ÃÂ 10
+toString called for 8 @ÃÂ 8
+toString called for 9 @ÃÂ 10
+toString called for 8 @ÃÂ 7
+toString called for 9 @ÃÂ 10
+toString called for 9 @ÃÂ 6
+toString called for 9 @ÃÂ 10
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 9
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 8
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 9
+toString called for 8 @ÃÂ 9
+toString called for 8 @ÃÂ 8
+toString called for 1 @ÃÂ 15
+toString called for 2 @ÃÂ 12
+toString called for 3 @ÃÂ 0
+toString called for 3 @ÃÂ 13
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 18
+toString called for 3 @ÃÂ 19
+toString called for 4 @ÃÂ 11
+toString called for 5 @ÃÂ 4
+toString called for 5 @ÃÂ 5
+toString called for 6 @ÃÂ 16
+toString called for 6 @ÃÂ 17
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 2
+toString called for 8 @ÃÂ 14
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 9
+toString called for 8 @ÃÂ 8
+toString called for 9 @ÃÂ 10
+toString called for 9 @ÃÂ 6
+1,2,3,3,3,3,3,4,5,5,6,6,7,8,8,8,8,8,9,9
+toString called for 3 @ÃÂ 0
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 0
+toString called for 3 @ÃÂ 19
+toString called for 3 @ÃÂ 0
+toString called for 3 @ÃÂ 18
+toString called for 3 @ÃÂ 0
+toString called for 6 @ÃÂ 17
+toString called for 3 @ÃÂ 0
+toString called for 6 @ÃÂ 16
+toString called for 3 @ÃÂ 0
+toString called for 1 @ÃÂ 15
+toString called for 3 @ÃÂ 0
+toString called for 1 @ÃÂ 15
+toString called for 3 @ÃÂ 0
+toString called for 8 @ÃÂ 2
+toString called for 3 @ÃÂ 0
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 0
+toString called for 8 @ÃÂ 14
+toString called for 3 @ÃÂ 0
+toString called for 3 @ÃÂ 13
+toString called for 3 @ÃÂ 0
+toString called for 2 @ÃÂ 12
+toString called for 3 @ÃÂ 0
+toString called for 2 @ÃÂ 12
+toString called for 3 @ÃÂ 0
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 0
+toString called for 8 @ÃÂ 2
+toString called for 3 @ÃÂ 0
+toString called for 4 @ÃÂ 11
+toString called for 3 @ÃÂ 0
+toString called for 9 @ÃÂ 10
+toString called for 3 @ÃÂ 0
+toString called for 8 @ÃÂ 9
+toString called for 3 @ÃÂ 0
+toString called for 8 @ÃÂ 8
+toString called for 3 @ÃÂ 0
+toString called for 8 @ÃÂ 7
+toString called for 3 @ÃÂ 0
+toString called for 9 @ÃÂ 6
+toString called for 3 @ÃÂ 0
+toString called for 5 @ÃÂ 5
+toString called for 3 @ÃÂ 0
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 0
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 0
+toString called for 2 @ÃÂ 12
+toString called for 2 @ÃÂ 12
+toString called for 1 @ÃÂ 15
+toString called for 7 @ÃÂ 3
+toString called for 5 @ÃÂ 4
+toString called for 7 @ÃÂ 3
+toString called for 5 @ÃÂ 5
+toString called for 7 @ÃÂ 3
+toString called for 9 @ÃÂ 6
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 19
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 19
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 7
+toString called for 7 @ÃÂ 3
+toString called for 9 @ÃÂ 6
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 18
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 18
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 8
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 7
+toString called for 7 @ÃÂ 3
+toString called for 6 @ÃÂ 17
+toString called for 7 @ÃÂ 3
+toString called for 6 @ÃÂ 17
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 9
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 8
+toString called for 7 @ÃÂ 3
+toString called for 6 @ÃÂ 16
+toString called for 7 @ÃÂ 3
+toString called for 6 @ÃÂ 16
+toString called for 7 @ÃÂ 3
+toString called for 9 @ÃÂ 10
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 9
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 1
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 1
+toString called for 7 @ÃÂ 3
+toString called for 4 @ÃÂ 11
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 2
+toString called for 7 @ÃÂ 3
+toString called for 9 @ÃÂ 10
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 14
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 13
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 13
+toString called for 7 @ÃÂ 3
+toString called for 8 @ÃÂ 2
+toString called for 7 @ÃÂ 3
+toString called for 3 @ÃÂ 13
+toString called for 3 @ÃÂ 13
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 13
+toString called for 4 @ÃÂ 11
+toString called for 3 @ÃÂ 13
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 13
+toString called for 6 @ÃÂ 16
+toString called for 3 @ÃÂ 13
+toString called for 6 @ÃÂ 17
+toString called for 3 @ÃÂ 13
+toString called for 3 @ÃÂ 18
+toString called for 3 @ÃÂ 13
+toString called for 3 @ÃÂ 19
+toString called for 3 @ÃÂ 13
+toString called for 5 @ÃÂ 5
+toString called for 3 @ÃÂ 13
+toString called for 5 @ÃÂ 4
+toString called for 5 @ÃÂ 4
+toString called for 5 @ÃÂ 5
+toString called for 5 @ÃÂ 4
+toString called for 4 @ÃÂ 11
+toString called for 5 @ÃÂ 4
+toString called for 4 @ÃÂ 11
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 19
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 18
+toString called for 5 @ÃÂ 4
+toString called for 6 @ÃÂ 17
+toString called for 5 @ÃÂ 4
+toString called for 5 @ÃÂ 5
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 1
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 1
+toString called for 5 @ÃÂ 4
+toString called for 6 @ÃÂ 16
+toString called for 5 @ÃÂ 4
+toString called for 6 @ÃÂ 17
+toString called for 5 @ÃÂ 4
+toString called for 6 @ÃÂ 16
+toString called for 5 @ÃÂ 4
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 1
+toString called for 4 @ÃÂ 11
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 18
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 19
+toString called for 3 @ÃÂ 1
+toString called for 4 @ÃÂ 11
+toString called for 4 @ÃÂ 11
+toString called for 3 @ÃÂ 19
+toString called for 4 @ÃÂ 11
+toString called for 3 @ÃÂ 18
+toString called for 3 @ÃÂ 18
+toString called for 3 @ÃÂ 19
+toString called for 6 @ÃÂ 16
+toString called for 6 @ÃÂ 17
+toString called for 6 @ÃÂ 16
+toString called for 5 @ÃÂ 5
+toString called for 6 @ÃÂ 16
+toString called for 5 @ÃÂ 5
+toString called for 6 @ÃÂ 16
+toString called for 6 @ÃÂ 17
+toString called for 6 @ÃÂ 16
+toString called for 5 @ÃÂ 5
+toString called for 8 @ÃÂ 2
+toString called for 8 @ÃÂ 14
+toString called for 8 @ÃÂ 2
+toString called for 9 @ÃÂ 6
+toString called for 8 @ÃÂ 2
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 2
+toString called for 8 @ÃÂ 8
+toString called for 8 @ÃÂ 2
+toString called for 8 @ÃÂ 9
+toString called for 8 @ÃÂ 2
+toString called for 9 @ÃÂ 10
+toString called for 8 @ÃÂ 2
+toString called for 8 @ÃÂ 14
+toString called for 8 @ÃÂ 14
+toString called for 9 @ÃÂ 10
+toString called for 8 @ÃÂ 14
+toString called for 9 @ÃÂ 6
+toString called for 8 @ÃÂ 14
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 14
+toString called for 8 @ÃÂ 8
+toString called for 8 @ÃÂ 14
+toString called for 8 @ÃÂ 9
+toString called for 8 @ÃÂ 14
+toString called for 9 @ÃÂ 10
+toString called for 9 @ÃÂ 10
+toString called for 8 @ÃÂ 9
+toString called for 9 @ÃÂ 10
+toString called for 8 @ÃÂ 8
+toString called for 9 @ÃÂ 10
+toString called for 8 @ÃÂ 7
+toString called for 9 @ÃÂ 10
+toString called for 9 @ÃÂ 6
+toString called for 9 @ÃÂ 10
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 9
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 8
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 9
+toString called for 8 @ÃÂ 9
+toString called for 8 @ÃÂ 8
+toString called for 9 @ÃÂ 6
+toString called for 9 @ÃÂ 10
+toString called for 8 @ÃÂ 8
+toString called for 8 @ÃÂ 9
+toString called for 8 @ÃÂ 7
+toString called for 8 @ÃÂ 14
+toString called for 8 @ÃÂ 2
+toString called for 7 @ÃÂ 3
+toString called for 6 @ÃÂ 17
+toString called for 6 @ÃÂ 16
+toString called for 5 @ÃÂ 5
+toString called for 5 @ÃÂ 4
+toString called for 4 @ÃÂ 11
+toString called for 3 @ÃÂ 19
+toString called for 3 @ÃÂ 18
+toString called for 3 @ÃÂ 1
+toString called for 3 @ÃÂ 13
+toString called for 3 @ÃÂ 0
+toString called for 2 @ÃÂ 12
+toString called for 1 @ÃÂ 15
+9,9,8,8,8,8,8,7,6,6,5,5,4,3,3,3,3,3,2,1
diff --git a/test/trace/array-sort-tostring-6.swf b/test/trace/array-sort-tostring-6.swf
new file mode 100644
index 0000000..2a96ea2
Binary files /dev/null and b/test/trace/array-sort-tostring-6.swf differ
diff --git a/test/trace/array-sort-tostring-6.swf.trace b/test/trace/array-sort-tostring-6.swf.trace
new file mode 100644
index 0000000..ccc5620
--- /dev/null
+++ b/test/trace/array-sort-tostring-6.swf.trace
@@ -0,0 +1,750 @@
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 9 @Â 6
+toString called for 8 @Â 7
+toString called for 8 @Â 8
+toString called for 8 @Â 9
+toString called for 9 @Â 10
+toString called for 4 @Â 11
+toString called for 2 @Â 12
+toString called for 3 @Â 13
+toString called for 8 @Â 14
+toString called for 1 @Â 15
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 3 @Â 18
+toString called for 3 @Â 19
+3,3,8,7,5,5,9,8,8,8,9,4,2,3,8,1,6,6,3,3
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 3 @Â 0
+toString called for 3 @Â 19
+toString called for 3 @Â 0
+toString called for 3 @Â 18
+toString called for 3 @Â 0
+toString called for 6 @Â 17
+toString called for 3 @Â 0
+toString called for 6 @Â 16
+toString called for 3 @Â 0
+toString called for 1 @Â 15
+toString called for 3 @Â 0
+toString called for 1 @Â 15
+toString called for 3 @Â 0
+toString called for 8 @Â 2
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 3 @Â 0
+toString called for 8 @Â 14
+toString called for 3 @Â 0
+toString called for 3 @Â 13
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 7 @Â 3
+toString called for 3 @Â 0
+toString called for 8 @Â 2
+toString called for 3 @Â 0
+toString called for 4 @Â 11
+toString called for 3 @Â 0
+toString called for 9 @Â 10
+toString called for 3 @Â 0
+toString called for 8 @Â 9
+toString called for 3 @Â 0
+toString called for 8 @Â 8
+toString called for 3 @Â 0
+toString called for 8 @Â 7
+toString called for 3 @Â 0
+toString called for 9 @Â 6
+toString called for 3 @Â 0
+toString called for 5 @Â 5
+toString called for 3 @Â 0
+toString called for 5 @Â 4
+toString called for 3 @Â 0
+toString called for 7 @Â 3
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 2 @Â 12
+toString called for 1 @Â 15
+toString called for 7 @Â 3
+toString called for 5 @Â 4
+toString called for 7 @Â 3
+toString called for 5 @Â 5
+toString called for 7 @Â 3
+toString called for 9 @Â 6
+toString called for 7 @Â 3
+toString called for 3 @Â 19
+toString called for 7 @Â 3
+toString called for 3 @Â 19
+toString called for 7 @Â 3
+toString called for 8 @Â 7
+toString called for 7 @Â 3
+toString called for 9 @Â 6
+toString called for 7 @Â 3
+toString called for 3 @Â 18
+toString called for 7 @Â 3
+toString called for 3 @Â 18
+toString called for 7 @Â 3
+toString called for 8 @Â 8
+toString called for 7 @Â 3
+toString called for 8 @Â 7
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 8 @Â 9
+toString called for 7 @Â 3
+toString called for 8 @Â 8
+toString called for 7 @Â 3
+toString called for 6 @Â 16
+toString called for 7 @Â 3
+toString called for 6 @Â 16
+toString called for 7 @Â 3
+toString called for 9 @Â 10
+toString called for 7 @Â 3
+toString called for 8 @Â 9
+toString called for 7 @Â 3
+toString called for 3 @Â 1
+toString called for 7 @Â 3
+toString called for 3 @Â 1
+toString called for 7 @Â 3
+toString called for 4 @Â 11
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 9 @Â 10
+toString called for 7 @Â 3
+toString called for 8 @Â 14
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 3 @Â 13
+toString called for 5 @Â 4
+toString called for 3 @Â 13
+toString called for 4 @Â 11
+toString called for 3 @Â 13
+toString called for 3 @Â 1
+toString called for 3 @Â 13
+toString called for 6 @Â 16
+toString called for 3 @Â 13
+toString called for 6 @Â 17
+toString called for 3 @Â 13
+toString called for 3 @Â 18
+toString called for 3 @Â 13
+toString called for 3 @Â 19
+toString called for 3 @Â 13
+toString called for 5 @Â 5
+toString called for 3 @Â 13
+toString called for 5 @Â 4
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 3 @Â 19
+toString called for 5 @Â 4
+toString called for 3 @Â 18
+toString called for 5 @Â 4
+toString called for 6 @Â 17
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 5 @Â 4
+toString called for 6 @Â 16
+toString called for 5 @Â 4
+toString called for 6 @Â 17
+toString called for 5 @Â 4
+toString called for 6 @Â 16
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 3 @Â 1
+toString called for 4 @Â 11
+toString called for 3 @Â 1
+toString called for 3 @Â 18
+toString called for 3 @Â 1
+toString called for 3 @Â 19
+toString called for 3 @Â 1
+toString called for 4 @Â 11
+toString called for 4 @Â 11
+toString called for 3 @Â 19
+toString called for 4 @Â 11
+toString called for 3 @Â 18
+toString called for 3 @Â 18
+toString called for 3 @Â 19
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 2
+toString called for 9 @Â 6
+toString called for 8 @Â 2
+toString called for 8 @Â 7
+toString called for 8 @Â 2
+toString called for 8 @Â 8
+toString called for 8 @Â 2
+toString called for 8 @Â 9
+toString called for 8 @Â 2
+toString called for 9 @Â 10
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 14
+toString called for 9 @Â 10
+toString called for 8 @Â 14
+toString called for 9 @Â 6
+toString called for 8 @Â 14
+toString called for 8 @Â 7
+toString called for 8 @Â 14
+toString called for 8 @Â 8
+toString called for 8 @Â 14
+toString called for 8 @Â 9
+toString called for 8 @Â 14
+toString called for 9 @Â 10
+toString called for 9 @Â 10
+toString called for 8 @Â 9
+toString called for 9 @Â 10
+toString called for 8 @Â 8
+toString called for 9 @Â 10
+toString called for 8 @Â 7
+toString called for 9 @Â 10
+toString called for 9 @Â 6
+toString called for 9 @Â 10
+toString called for 8 @Â 7
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 7
+toString called for 8 @Â 8
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 9
+toString called for 8 @Â 8
+toString called for 1 @Â 15
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 3 @Â 13
+toString called for 3 @Â 1
+toString called for 3 @Â 18
+toString called for 3 @Â 19
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 8
+toString called for 9 @Â 10
+toString called for 9 @Â 6
+1,2,3,3,3,3,3,4,5,5,6,6,7,8,8,8,8,8,9,9
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 3 @Â 0
+toString called for 3 @Â 19
+toString called for 3 @Â 0
+toString called for 3 @Â 18
+toString called for 3 @Â 0
+toString called for 6 @Â 17
+toString called for 3 @Â 0
+toString called for 6 @Â 16
+toString called for 3 @Â 0
+toString called for 1 @Â 15
+toString called for 3 @Â 0
+toString called for 1 @Â 15
+toString called for 3 @Â 0
+toString called for 8 @Â 2
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 3 @Â 0
+toString called for 8 @Â 14
+toString called for 3 @Â 0
+toString called for 3 @Â 13
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 7 @Â 3
+toString called for 3 @Â 0
+toString called for 8 @Â 2
+toString called for 3 @Â 0
+toString called for 4 @Â 11
+toString called for 3 @Â 0
+toString called for 9 @Â 10
+toString called for 3 @Â 0
+toString called for 8 @Â 9
+toString called for 3 @Â 0
+toString called for 8 @Â 8
+toString called for 3 @Â 0
+toString called for 8 @Â 7
+toString called for 3 @Â 0
+toString called for 9 @Â 6
+toString called for 3 @Â 0
+toString called for 5 @Â 5
+toString called for 3 @Â 0
+toString called for 5 @Â 4
+toString called for 3 @Â 0
+toString called for 7 @Â 3
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 2 @Â 12
+toString called for 1 @Â 15
+toString called for 7 @Â 3
+toString called for 5 @Â 4
+toString called for 7 @Â 3
+toString called for 5 @Â 5
+toString called for 7 @Â 3
+toString called for 9 @Â 6
+toString called for 7 @Â 3
+toString called for 3 @Â 19
+toString called for 7 @Â 3
+toString called for 3 @Â 19
+toString called for 7 @Â 3
+toString called for 8 @Â 7
+toString called for 7 @Â 3
+toString called for 9 @Â 6
+toString called for 7 @Â 3
+toString called for 3 @Â 18
+toString called for 7 @Â 3
+toString called for 3 @Â 18
+toString called for 7 @Â 3
+toString called for 8 @Â 8
+toString called for 7 @Â 3
+toString called for 8 @Â 7
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 8 @Â 9
+toString called for 7 @Â 3
+toString called for 8 @Â 8
+toString called for 7 @Â 3
+toString called for 6 @Â 16
+toString called for 7 @Â 3
+toString called for 6 @Â 16
+toString called for 7 @Â 3
+toString called for 9 @Â 10
+toString called for 7 @Â 3
+toString called for 8 @Â 9
+toString called for 7 @Â 3
+toString called for 3 @Â 1
+toString called for 7 @Â 3
+toString called for 3 @Â 1
+toString called for 7 @Â 3
+toString called for 4 @Â 11
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 9 @Â 10
+toString called for 7 @Â 3
+toString called for 8 @Â 14
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 3 @Â 13
+toString called for 5 @Â 4
+toString called for 3 @Â 13
+toString called for 4 @Â 11
+toString called for 3 @Â 13
+toString called for 3 @Â 1
+toString called for 3 @Â 13
+toString called for 6 @Â 16
+toString called for 3 @Â 13
+toString called for 6 @Â 17
+toString called for 3 @Â 13
+toString called for 3 @Â 18
+toString called for 3 @Â 13
+toString called for 3 @Â 19
+toString called for 3 @Â 13
+toString called for 5 @Â 5
+toString called for 3 @Â 13
+toString called for 5 @Â 4
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 3 @Â 19
+toString called for 5 @Â 4
+toString called for 3 @Â 18
+toString called for 5 @Â 4
+toString called for 6 @Â 17
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 5 @Â 4
+toString called for 6 @Â 16
+toString called for 5 @Â 4
+toString called for 6 @Â 17
+toString called for 5 @Â 4
+toString called for 6 @Â 16
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 3 @Â 1
+toString called for 4 @Â 11
+toString called for 3 @Â 1
+toString called for 3 @Â 18
+toString called for 3 @Â 1
+toString called for 3 @Â 19
+toString called for 3 @Â 1
+toString called for 4 @Â 11
+toString called for 4 @Â 11
+toString called for 3 @Â 19
+toString called for 4 @Â 11
+toString called for 3 @Â 18
+toString called for 3 @Â 18
+toString called for 3 @Â 19
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 2
+toString called for 9 @Â 6
+toString called for 8 @Â 2
+toString called for 8 @Â 7
+toString called for 8 @Â 2
+toString called for 8 @Â 8
+toString called for 8 @Â 2
+toString called for 8 @Â 9
+toString called for 8 @Â 2
+toString called for 9 @Â 10
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 14
+toString called for 9 @Â 10
+toString called for 8 @Â 14
+toString called for 9 @Â 6
+toString called for 8 @Â 14
+toString called for 8 @Â 7
+toString called for 8 @Â 14
+toString called for 8 @Â 8
+toString called for 8 @Â 14
+toString called for 8 @Â 9
+toString called for 8 @Â 14
+toString called for 9 @Â 10
+toString called for 9 @Â 10
+toString called for 8 @Â 9
+toString called for 9 @Â 10
+toString called for 8 @Â 8
+toString called for 9 @Â 10
+toString called for 8 @Â 7
+toString called for 9 @Â 10
+toString called for 9 @Â 6
+toString called for 9 @Â 10
+toString called for 8 @Â 7
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 7
+toString called for 8 @Â 8
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 9
+toString called for 8 @Â 8
+toString called for 1 @Â 15
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 3 @Â 13
+toString called for 3 @Â 1
+toString called for 3 @Â 18
+toString called for 3 @Â 19
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 8
+toString called for 9 @Â 10
+toString called for 9 @Â 6
+1,2,3,3,3,3,3,4,5,5,6,6,7,8,8,8,8,8,9,9
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 3 @Â 0
+toString called for 3 @Â 19
+toString called for 3 @Â 0
+toString called for 3 @Â 18
+toString called for 3 @Â 0
+toString called for 6 @Â 17
+toString called for 3 @Â 0
+toString called for 6 @Â 16
+toString called for 3 @Â 0
+toString called for 1 @Â 15
+toString called for 3 @Â 0
+toString called for 1 @Â 15
+toString called for 3 @Â 0
+toString called for 8 @Â 2
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 3 @Â 0
+toString called for 8 @Â 14
+toString called for 3 @Â 0
+toString called for 3 @Â 13
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 7 @Â 3
+toString called for 3 @Â 0
+toString called for 8 @Â 2
+toString called for 3 @Â 0
+toString called for 4 @Â 11
+toString called for 3 @Â 0
+toString called for 9 @Â 10
+toString called for 3 @Â 0
+toString called for 8 @Â 9
+toString called for 3 @Â 0
+toString called for 8 @Â 8
+toString called for 3 @Â 0
+toString called for 8 @Â 7
+toString called for 3 @Â 0
+toString called for 9 @Â 6
+toString called for 3 @Â 0
+toString called for 5 @Â 5
+toString called for 3 @Â 0
+toString called for 5 @Â 4
+toString called for 3 @Â 0
+toString called for 7 @Â 3
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 2 @Â 12
+toString called for 1 @Â 15
+toString called for 7 @Â 3
+toString called for 5 @Â 4
+toString called for 7 @Â 3
+toString called for 5 @Â 5
+toString called for 7 @Â 3
+toString called for 9 @Â 6
+toString called for 7 @Â 3
+toString called for 3 @Â 19
+toString called for 7 @Â 3
+toString called for 3 @Â 19
+toString called for 7 @Â 3
+toString called for 8 @Â 7
+toString called for 7 @Â 3
+toString called for 9 @Â 6
+toString called for 7 @Â 3
+toString called for 3 @Â 18
+toString called for 7 @Â 3
+toString called for 3 @Â 18
+toString called for 7 @Â 3
+toString called for 8 @Â 8
+toString called for 7 @Â 3
+toString called for 8 @Â 7
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 8 @Â 9
+toString called for 7 @Â 3
+toString called for 8 @Â 8
+toString called for 7 @Â 3
+toString called for 6 @Â 16
+toString called for 7 @Â 3
+toString called for 6 @Â 16
+toString called for 7 @Â 3
+toString called for 9 @Â 10
+toString called for 7 @Â 3
+toString called for 8 @Â 9
+toString called for 7 @Â 3
+toString called for 3 @Â 1
+toString called for 7 @Â 3
+toString called for 3 @Â 1
+toString called for 7 @Â 3
+toString called for 4 @Â 11
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 9 @Â 10
+toString called for 7 @Â 3
+toString called for 8 @Â 14
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 3 @Â 13
+toString called for 5 @Â 4
+toString called for 3 @Â 13
+toString called for 4 @Â 11
+toString called for 3 @Â 13
+toString called for 3 @Â 1
+toString called for 3 @Â 13
+toString called for 6 @Â 16
+toString called for 3 @Â 13
+toString called for 6 @Â 17
+toString called for 3 @Â 13
+toString called for 3 @Â 18
+toString called for 3 @Â 13
+toString called for 3 @Â 19
+toString called for 3 @Â 13
+toString called for 5 @Â 5
+toString called for 3 @Â 13
+toString called for 5 @Â 4
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 3 @Â 19
+toString called for 5 @Â 4
+toString called for 3 @Â 18
+toString called for 5 @Â 4
+toString called for 6 @Â 17
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 5 @Â 4
+toString called for 6 @Â 16
+toString called for 5 @Â 4
+toString called for 6 @Â 17
+toString called for 5 @Â 4
+toString called for 6 @Â 16
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 3 @Â 1
+toString called for 4 @Â 11
+toString called for 3 @Â 1
+toString called for 3 @Â 18
+toString called for 3 @Â 1
+toString called for 3 @Â 19
+toString called for 3 @Â 1
+toString called for 4 @Â 11
+toString called for 4 @Â 11
+toString called for 3 @Â 19
+toString called for 4 @Â 11
+toString called for 3 @Â 18
+toString called for 3 @Â 18
+toString called for 3 @Â 19
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 2
+toString called for 9 @Â 6
+toString called for 8 @Â 2
+toString called for 8 @Â 7
+toString called for 8 @Â 2
+toString called for 8 @Â 8
+toString called for 8 @Â 2
+toString called for 8 @Â 9
+toString called for 8 @Â 2
+toString called for 9 @Â 10
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 14
+toString called for 9 @Â 10
+toString called for 8 @Â 14
+toString called for 9 @Â 6
+toString called for 8 @Â 14
+toString called for 8 @Â 7
+toString called for 8 @Â 14
+toString called for 8 @Â 8
+toString called for 8 @Â 14
+toString called for 8 @Â 9
+toString called for 8 @Â 14
+toString called for 9 @Â 10
+toString called for 9 @Â 10
+toString called for 8 @Â 9
+toString called for 9 @Â 10
+toString called for 8 @Â 8
+toString called for 9 @Â 10
+toString called for 8 @Â 7
+toString called for 9 @Â 10
+toString called for 9 @Â 6
+toString called for 9 @Â 10
+toString called for 8 @Â 7
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 7
+toString called for 8 @Â 8
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 9
+toString called for 8 @Â 8
+toString called for 9 @Â 6
+toString called for 9 @Â 10
+toString called for 8 @Â 8
+toString called for 8 @Â 9
+toString called for 8 @Â 7
+toString called for 8 @Â 14
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 3 @Â 19
+toString called for 3 @Â 18
+toString called for 3 @Â 1
+toString called for 3 @Â 13
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 1 @Â 15
+9,9,8,8,8,8,8,7,6,6,5,5,4,3,3,3,3,3,2,1
diff --git a/test/trace/array-sort-tostring-7.swf b/test/trace/array-sort-tostring-7.swf
new file mode 100644
index 0000000..a2538eb
Binary files /dev/null and b/test/trace/array-sort-tostring-7.swf differ
diff --git a/test/trace/array-sort-tostring-7.swf.trace b/test/trace/array-sort-tostring-7.swf.trace
new file mode 100644
index 0000000..ccc5620
--- /dev/null
+++ b/test/trace/array-sort-tostring-7.swf.trace
@@ -0,0 +1,750 @@
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 9 @Â 6
+toString called for 8 @Â 7
+toString called for 8 @Â 8
+toString called for 8 @Â 9
+toString called for 9 @Â 10
+toString called for 4 @Â 11
+toString called for 2 @Â 12
+toString called for 3 @Â 13
+toString called for 8 @Â 14
+toString called for 1 @Â 15
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 3 @Â 18
+toString called for 3 @Â 19
+3,3,8,7,5,5,9,8,8,8,9,4,2,3,8,1,6,6,3,3
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 3 @Â 0
+toString called for 3 @Â 19
+toString called for 3 @Â 0
+toString called for 3 @Â 18
+toString called for 3 @Â 0
+toString called for 6 @Â 17
+toString called for 3 @Â 0
+toString called for 6 @Â 16
+toString called for 3 @Â 0
+toString called for 1 @Â 15
+toString called for 3 @Â 0
+toString called for 1 @Â 15
+toString called for 3 @Â 0
+toString called for 8 @Â 2
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 3 @Â 0
+toString called for 8 @Â 14
+toString called for 3 @Â 0
+toString called for 3 @Â 13
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 7 @Â 3
+toString called for 3 @Â 0
+toString called for 8 @Â 2
+toString called for 3 @Â 0
+toString called for 4 @Â 11
+toString called for 3 @Â 0
+toString called for 9 @Â 10
+toString called for 3 @Â 0
+toString called for 8 @Â 9
+toString called for 3 @Â 0
+toString called for 8 @Â 8
+toString called for 3 @Â 0
+toString called for 8 @Â 7
+toString called for 3 @Â 0
+toString called for 9 @Â 6
+toString called for 3 @Â 0
+toString called for 5 @Â 5
+toString called for 3 @Â 0
+toString called for 5 @Â 4
+toString called for 3 @Â 0
+toString called for 7 @Â 3
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 2 @Â 12
+toString called for 1 @Â 15
+toString called for 7 @Â 3
+toString called for 5 @Â 4
+toString called for 7 @Â 3
+toString called for 5 @Â 5
+toString called for 7 @Â 3
+toString called for 9 @Â 6
+toString called for 7 @Â 3
+toString called for 3 @Â 19
+toString called for 7 @Â 3
+toString called for 3 @Â 19
+toString called for 7 @Â 3
+toString called for 8 @Â 7
+toString called for 7 @Â 3
+toString called for 9 @Â 6
+toString called for 7 @Â 3
+toString called for 3 @Â 18
+toString called for 7 @Â 3
+toString called for 3 @Â 18
+toString called for 7 @Â 3
+toString called for 8 @Â 8
+toString called for 7 @Â 3
+toString called for 8 @Â 7
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 8 @Â 9
+toString called for 7 @Â 3
+toString called for 8 @Â 8
+toString called for 7 @Â 3
+toString called for 6 @Â 16
+toString called for 7 @Â 3
+toString called for 6 @Â 16
+toString called for 7 @Â 3
+toString called for 9 @Â 10
+toString called for 7 @Â 3
+toString called for 8 @Â 9
+toString called for 7 @Â 3
+toString called for 3 @Â 1
+toString called for 7 @Â 3
+toString called for 3 @Â 1
+toString called for 7 @Â 3
+toString called for 4 @Â 11
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 9 @Â 10
+toString called for 7 @Â 3
+toString called for 8 @Â 14
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 3 @Â 13
+toString called for 5 @Â 4
+toString called for 3 @Â 13
+toString called for 4 @Â 11
+toString called for 3 @Â 13
+toString called for 3 @Â 1
+toString called for 3 @Â 13
+toString called for 6 @Â 16
+toString called for 3 @Â 13
+toString called for 6 @Â 17
+toString called for 3 @Â 13
+toString called for 3 @Â 18
+toString called for 3 @Â 13
+toString called for 3 @Â 19
+toString called for 3 @Â 13
+toString called for 5 @Â 5
+toString called for 3 @Â 13
+toString called for 5 @Â 4
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 3 @Â 19
+toString called for 5 @Â 4
+toString called for 3 @Â 18
+toString called for 5 @Â 4
+toString called for 6 @Â 17
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 5 @Â 4
+toString called for 6 @Â 16
+toString called for 5 @Â 4
+toString called for 6 @Â 17
+toString called for 5 @Â 4
+toString called for 6 @Â 16
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 3 @Â 1
+toString called for 4 @Â 11
+toString called for 3 @Â 1
+toString called for 3 @Â 18
+toString called for 3 @Â 1
+toString called for 3 @Â 19
+toString called for 3 @Â 1
+toString called for 4 @Â 11
+toString called for 4 @Â 11
+toString called for 3 @Â 19
+toString called for 4 @Â 11
+toString called for 3 @Â 18
+toString called for 3 @Â 18
+toString called for 3 @Â 19
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 2
+toString called for 9 @Â 6
+toString called for 8 @Â 2
+toString called for 8 @Â 7
+toString called for 8 @Â 2
+toString called for 8 @Â 8
+toString called for 8 @Â 2
+toString called for 8 @Â 9
+toString called for 8 @Â 2
+toString called for 9 @Â 10
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 14
+toString called for 9 @Â 10
+toString called for 8 @Â 14
+toString called for 9 @Â 6
+toString called for 8 @Â 14
+toString called for 8 @Â 7
+toString called for 8 @Â 14
+toString called for 8 @Â 8
+toString called for 8 @Â 14
+toString called for 8 @Â 9
+toString called for 8 @Â 14
+toString called for 9 @Â 10
+toString called for 9 @Â 10
+toString called for 8 @Â 9
+toString called for 9 @Â 10
+toString called for 8 @Â 8
+toString called for 9 @Â 10
+toString called for 8 @Â 7
+toString called for 9 @Â 10
+toString called for 9 @Â 6
+toString called for 9 @Â 10
+toString called for 8 @Â 7
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 7
+toString called for 8 @Â 8
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 9
+toString called for 8 @Â 8
+toString called for 1 @Â 15
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 3 @Â 13
+toString called for 3 @Â 1
+toString called for 3 @Â 18
+toString called for 3 @Â 19
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 8
+toString called for 9 @Â 10
+toString called for 9 @Â 6
+1,2,3,3,3,3,3,4,5,5,6,6,7,8,8,8,8,8,9,9
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 3 @Â 0
+toString called for 3 @Â 19
+toString called for 3 @Â 0
+toString called for 3 @Â 18
+toString called for 3 @Â 0
+toString called for 6 @Â 17
+toString called for 3 @Â 0
+toString called for 6 @Â 16
+toString called for 3 @Â 0
+toString called for 1 @Â 15
+toString called for 3 @Â 0
+toString called for 1 @Â 15
+toString called for 3 @Â 0
+toString called for 8 @Â 2
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 3 @Â 0
+toString called for 8 @Â 14
+toString called for 3 @Â 0
+toString called for 3 @Â 13
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 7 @Â 3
+toString called for 3 @Â 0
+toString called for 8 @Â 2
+toString called for 3 @Â 0
+toString called for 4 @Â 11
+toString called for 3 @Â 0
+toString called for 9 @Â 10
+toString called for 3 @Â 0
+toString called for 8 @Â 9
+toString called for 3 @Â 0
+toString called for 8 @Â 8
+toString called for 3 @Â 0
+toString called for 8 @Â 7
+toString called for 3 @Â 0
+toString called for 9 @Â 6
+toString called for 3 @Â 0
+toString called for 5 @Â 5
+toString called for 3 @Â 0
+toString called for 5 @Â 4
+toString called for 3 @Â 0
+toString called for 7 @Â 3
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 2 @Â 12
+toString called for 1 @Â 15
+toString called for 7 @Â 3
+toString called for 5 @Â 4
+toString called for 7 @Â 3
+toString called for 5 @Â 5
+toString called for 7 @Â 3
+toString called for 9 @Â 6
+toString called for 7 @Â 3
+toString called for 3 @Â 19
+toString called for 7 @Â 3
+toString called for 3 @Â 19
+toString called for 7 @Â 3
+toString called for 8 @Â 7
+toString called for 7 @Â 3
+toString called for 9 @Â 6
+toString called for 7 @Â 3
+toString called for 3 @Â 18
+toString called for 7 @Â 3
+toString called for 3 @Â 18
+toString called for 7 @Â 3
+toString called for 8 @Â 8
+toString called for 7 @Â 3
+toString called for 8 @Â 7
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 8 @Â 9
+toString called for 7 @Â 3
+toString called for 8 @Â 8
+toString called for 7 @Â 3
+toString called for 6 @Â 16
+toString called for 7 @Â 3
+toString called for 6 @Â 16
+toString called for 7 @Â 3
+toString called for 9 @Â 10
+toString called for 7 @Â 3
+toString called for 8 @Â 9
+toString called for 7 @Â 3
+toString called for 3 @Â 1
+toString called for 7 @Â 3
+toString called for 3 @Â 1
+toString called for 7 @Â 3
+toString called for 4 @Â 11
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 9 @Â 10
+toString called for 7 @Â 3
+toString called for 8 @Â 14
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 3 @Â 13
+toString called for 5 @Â 4
+toString called for 3 @Â 13
+toString called for 4 @Â 11
+toString called for 3 @Â 13
+toString called for 3 @Â 1
+toString called for 3 @Â 13
+toString called for 6 @Â 16
+toString called for 3 @Â 13
+toString called for 6 @Â 17
+toString called for 3 @Â 13
+toString called for 3 @Â 18
+toString called for 3 @Â 13
+toString called for 3 @Â 19
+toString called for 3 @Â 13
+toString called for 5 @Â 5
+toString called for 3 @Â 13
+toString called for 5 @Â 4
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 3 @Â 19
+toString called for 5 @Â 4
+toString called for 3 @Â 18
+toString called for 5 @Â 4
+toString called for 6 @Â 17
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 5 @Â 4
+toString called for 6 @Â 16
+toString called for 5 @Â 4
+toString called for 6 @Â 17
+toString called for 5 @Â 4
+toString called for 6 @Â 16
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 3 @Â 1
+toString called for 4 @Â 11
+toString called for 3 @Â 1
+toString called for 3 @Â 18
+toString called for 3 @Â 1
+toString called for 3 @Â 19
+toString called for 3 @Â 1
+toString called for 4 @Â 11
+toString called for 4 @Â 11
+toString called for 3 @Â 19
+toString called for 4 @Â 11
+toString called for 3 @Â 18
+toString called for 3 @Â 18
+toString called for 3 @Â 19
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 2
+toString called for 9 @Â 6
+toString called for 8 @Â 2
+toString called for 8 @Â 7
+toString called for 8 @Â 2
+toString called for 8 @Â 8
+toString called for 8 @Â 2
+toString called for 8 @Â 9
+toString called for 8 @Â 2
+toString called for 9 @Â 10
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 14
+toString called for 9 @Â 10
+toString called for 8 @Â 14
+toString called for 9 @Â 6
+toString called for 8 @Â 14
+toString called for 8 @Â 7
+toString called for 8 @Â 14
+toString called for 8 @Â 8
+toString called for 8 @Â 14
+toString called for 8 @Â 9
+toString called for 8 @Â 14
+toString called for 9 @Â 10
+toString called for 9 @Â 10
+toString called for 8 @Â 9
+toString called for 9 @Â 10
+toString called for 8 @Â 8
+toString called for 9 @Â 10
+toString called for 8 @Â 7
+toString called for 9 @Â 10
+toString called for 9 @Â 6
+toString called for 9 @Â 10
+toString called for 8 @Â 7
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 7
+toString called for 8 @Â 8
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 9
+toString called for 8 @Â 8
+toString called for 1 @Â 15
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 3 @Â 13
+toString called for 3 @Â 1
+toString called for 3 @Â 18
+toString called for 3 @Â 19
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 8
+toString called for 9 @Â 10
+toString called for 9 @Â 6
+1,2,3,3,3,3,3,4,5,5,6,6,7,8,8,8,8,8,9,9
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 3 @Â 0
+toString called for 3 @Â 19
+toString called for 3 @Â 0
+toString called for 3 @Â 18
+toString called for 3 @Â 0
+toString called for 6 @Â 17
+toString called for 3 @Â 0
+toString called for 6 @Â 16
+toString called for 3 @Â 0
+toString called for 1 @Â 15
+toString called for 3 @Â 0
+toString called for 1 @Â 15
+toString called for 3 @Â 0
+toString called for 8 @Â 2
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 3 @Â 0
+toString called for 8 @Â 14
+toString called for 3 @Â 0
+toString called for 3 @Â 13
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 7 @Â 3
+toString called for 3 @Â 0
+toString called for 8 @Â 2
+toString called for 3 @Â 0
+toString called for 4 @Â 11
+toString called for 3 @Â 0
+toString called for 9 @Â 10
+toString called for 3 @Â 0
+toString called for 8 @Â 9
+toString called for 3 @Â 0
+toString called for 8 @Â 8
+toString called for 3 @Â 0
+toString called for 8 @Â 7
+toString called for 3 @Â 0
+toString called for 9 @Â 6
+toString called for 3 @Â 0
+toString called for 5 @Â 5
+toString called for 3 @Â 0
+toString called for 5 @Â 4
+toString called for 3 @Â 0
+toString called for 7 @Â 3
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 2 @Â 12
+toString called for 1 @Â 15
+toString called for 7 @Â 3
+toString called for 5 @Â 4
+toString called for 7 @Â 3
+toString called for 5 @Â 5
+toString called for 7 @Â 3
+toString called for 9 @Â 6
+toString called for 7 @Â 3
+toString called for 3 @Â 19
+toString called for 7 @Â 3
+toString called for 3 @Â 19
+toString called for 7 @Â 3
+toString called for 8 @Â 7
+toString called for 7 @Â 3
+toString called for 9 @Â 6
+toString called for 7 @Â 3
+toString called for 3 @Â 18
+toString called for 7 @Â 3
+toString called for 3 @Â 18
+toString called for 7 @Â 3
+toString called for 8 @Â 8
+toString called for 7 @Â 3
+toString called for 8 @Â 7
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 8 @Â 9
+toString called for 7 @Â 3
+toString called for 8 @Â 8
+toString called for 7 @Â 3
+toString called for 6 @Â 16
+toString called for 7 @Â 3
+toString called for 6 @Â 16
+toString called for 7 @Â 3
+toString called for 9 @Â 10
+toString called for 7 @Â 3
+toString called for 8 @Â 9
+toString called for 7 @Â 3
+toString called for 3 @Â 1
+toString called for 7 @Â 3
+toString called for 3 @Â 1
+toString called for 7 @Â 3
+toString called for 4 @Â 11
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 9 @Â 10
+toString called for 7 @Â 3
+toString called for 8 @Â 14
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 3 @Â 13
+toString called for 5 @Â 4
+toString called for 3 @Â 13
+toString called for 4 @Â 11
+toString called for 3 @Â 13
+toString called for 3 @Â 1
+toString called for 3 @Â 13
+toString called for 6 @Â 16
+toString called for 3 @Â 13
+toString called for 6 @Â 17
+toString called for 3 @Â 13
+toString called for 3 @Â 18
+toString called for 3 @Â 13
+toString called for 3 @Â 19
+toString called for 3 @Â 13
+toString called for 5 @Â 5
+toString called for 3 @Â 13
+toString called for 5 @Â 4
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 3 @Â 19
+toString called for 5 @Â 4
+toString called for 3 @Â 18
+toString called for 5 @Â 4
+toString called for 6 @Â 17
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 5 @Â 4
+toString called for 6 @Â 16
+toString called for 5 @Â 4
+toString called for 6 @Â 17
+toString called for 5 @Â 4
+toString called for 6 @Â 16
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 3 @Â 1
+toString called for 4 @Â 11
+toString called for 3 @Â 1
+toString called for 3 @Â 18
+toString called for 3 @Â 1
+toString called for 3 @Â 19
+toString called for 3 @Â 1
+toString called for 4 @Â 11
+toString called for 4 @Â 11
+toString called for 3 @Â 19
+toString called for 4 @Â 11
+toString called for 3 @Â 18
+toString called for 3 @Â 18
+toString called for 3 @Â 19
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 2
+toString called for 9 @Â 6
+toString called for 8 @Â 2
+toString called for 8 @Â 7
+toString called for 8 @Â 2
+toString called for 8 @Â 8
+toString called for 8 @Â 2
+toString called for 8 @Â 9
+toString called for 8 @Â 2
+toString called for 9 @Â 10
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 14
+toString called for 9 @Â 10
+toString called for 8 @Â 14
+toString called for 9 @Â 6
+toString called for 8 @Â 14
+toString called for 8 @Â 7
+toString called for 8 @Â 14
+toString called for 8 @Â 8
+toString called for 8 @Â 14
+toString called for 8 @Â 9
+toString called for 8 @Â 14
+toString called for 9 @Â 10
+toString called for 9 @Â 10
+toString called for 8 @Â 9
+toString called for 9 @Â 10
+toString called for 8 @Â 8
+toString called for 9 @Â 10
+toString called for 8 @Â 7
+toString called for 9 @Â 10
+toString called for 9 @Â 6
+toString called for 9 @Â 10
+toString called for 8 @Â 7
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 7
+toString called for 8 @Â 8
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 9
+toString called for 8 @Â 8
+toString called for 9 @Â 6
+toString called for 9 @Â 10
+toString called for 8 @Â 8
+toString called for 8 @Â 9
+toString called for 8 @Â 7
+toString called for 8 @Â 14
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 3 @Â 19
+toString called for 3 @Â 18
+toString called for 3 @Â 1
+toString called for 3 @Â 13
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 1 @Â 15
+9,9,8,8,8,8,8,7,6,6,5,5,4,3,3,3,3,3,2,1
diff --git a/test/trace/array-sort-tostring-8.swf b/test/trace/array-sort-tostring-8.swf
new file mode 100644
index 0000000..075e1e9
Binary files /dev/null and b/test/trace/array-sort-tostring-8.swf differ
diff --git a/test/trace/array-sort-tostring-8.swf.trace b/test/trace/array-sort-tostring-8.swf.trace
new file mode 100644
index 0000000..ccc5620
--- /dev/null
+++ b/test/trace/array-sort-tostring-8.swf.trace
@@ -0,0 +1,750 @@
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 9 @Â 6
+toString called for 8 @Â 7
+toString called for 8 @Â 8
+toString called for 8 @Â 9
+toString called for 9 @Â 10
+toString called for 4 @Â 11
+toString called for 2 @Â 12
+toString called for 3 @Â 13
+toString called for 8 @Â 14
+toString called for 1 @Â 15
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 3 @Â 18
+toString called for 3 @Â 19
+3,3,8,7,5,5,9,8,8,8,9,4,2,3,8,1,6,6,3,3
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 3 @Â 0
+toString called for 3 @Â 19
+toString called for 3 @Â 0
+toString called for 3 @Â 18
+toString called for 3 @Â 0
+toString called for 6 @Â 17
+toString called for 3 @Â 0
+toString called for 6 @Â 16
+toString called for 3 @Â 0
+toString called for 1 @Â 15
+toString called for 3 @Â 0
+toString called for 1 @Â 15
+toString called for 3 @Â 0
+toString called for 8 @Â 2
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 3 @Â 0
+toString called for 8 @Â 14
+toString called for 3 @Â 0
+toString called for 3 @Â 13
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 7 @Â 3
+toString called for 3 @Â 0
+toString called for 8 @Â 2
+toString called for 3 @Â 0
+toString called for 4 @Â 11
+toString called for 3 @Â 0
+toString called for 9 @Â 10
+toString called for 3 @Â 0
+toString called for 8 @Â 9
+toString called for 3 @Â 0
+toString called for 8 @Â 8
+toString called for 3 @Â 0
+toString called for 8 @Â 7
+toString called for 3 @Â 0
+toString called for 9 @Â 6
+toString called for 3 @Â 0
+toString called for 5 @Â 5
+toString called for 3 @Â 0
+toString called for 5 @Â 4
+toString called for 3 @Â 0
+toString called for 7 @Â 3
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 2 @Â 12
+toString called for 1 @Â 15
+toString called for 7 @Â 3
+toString called for 5 @Â 4
+toString called for 7 @Â 3
+toString called for 5 @Â 5
+toString called for 7 @Â 3
+toString called for 9 @Â 6
+toString called for 7 @Â 3
+toString called for 3 @Â 19
+toString called for 7 @Â 3
+toString called for 3 @Â 19
+toString called for 7 @Â 3
+toString called for 8 @Â 7
+toString called for 7 @Â 3
+toString called for 9 @Â 6
+toString called for 7 @Â 3
+toString called for 3 @Â 18
+toString called for 7 @Â 3
+toString called for 3 @Â 18
+toString called for 7 @Â 3
+toString called for 8 @Â 8
+toString called for 7 @Â 3
+toString called for 8 @Â 7
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 8 @Â 9
+toString called for 7 @Â 3
+toString called for 8 @Â 8
+toString called for 7 @Â 3
+toString called for 6 @Â 16
+toString called for 7 @Â 3
+toString called for 6 @Â 16
+toString called for 7 @Â 3
+toString called for 9 @Â 10
+toString called for 7 @Â 3
+toString called for 8 @Â 9
+toString called for 7 @Â 3
+toString called for 3 @Â 1
+toString called for 7 @Â 3
+toString called for 3 @Â 1
+toString called for 7 @Â 3
+toString called for 4 @Â 11
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 9 @Â 10
+toString called for 7 @Â 3
+toString called for 8 @Â 14
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 3 @Â 13
+toString called for 5 @Â 4
+toString called for 3 @Â 13
+toString called for 4 @Â 11
+toString called for 3 @Â 13
+toString called for 3 @Â 1
+toString called for 3 @Â 13
+toString called for 6 @Â 16
+toString called for 3 @Â 13
+toString called for 6 @Â 17
+toString called for 3 @Â 13
+toString called for 3 @Â 18
+toString called for 3 @Â 13
+toString called for 3 @Â 19
+toString called for 3 @Â 13
+toString called for 5 @Â 5
+toString called for 3 @Â 13
+toString called for 5 @Â 4
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 3 @Â 19
+toString called for 5 @Â 4
+toString called for 3 @Â 18
+toString called for 5 @Â 4
+toString called for 6 @Â 17
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 5 @Â 4
+toString called for 6 @Â 16
+toString called for 5 @Â 4
+toString called for 6 @Â 17
+toString called for 5 @Â 4
+toString called for 6 @Â 16
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 3 @Â 1
+toString called for 4 @Â 11
+toString called for 3 @Â 1
+toString called for 3 @Â 18
+toString called for 3 @Â 1
+toString called for 3 @Â 19
+toString called for 3 @Â 1
+toString called for 4 @Â 11
+toString called for 4 @Â 11
+toString called for 3 @Â 19
+toString called for 4 @Â 11
+toString called for 3 @Â 18
+toString called for 3 @Â 18
+toString called for 3 @Â 19
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 2
+toString called for 9 @Â 6
+toString called for 8 @Â 2
+toString called for 8 @Â 7
+toString called for 8 @Â 2
+toString called for 8 @Â 8
+toString called for 8 @Â 2
+toString called for 8 @Â 9
+toString called for 8 @Â 2
+toString called for 9 @Â 10
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 14
+toString called for 9 @Â 10
+toString called for 8 @Â 14
+toString called for 9 @Â 6
+toString called for 8 @Â 14
+toString called for 8 @Â 7
+toString called for 8 @Â 14
+toString called for 8 @Â 8
+toString called for 8 @Â 14
+toString called for 8 @Â 9
+toString called for 8 @Â 14
+toString called for 9 @Â 10
+toString called for 9 @Â 10
+toString called for 8 @Â 9
+toString called for 9 @Â 10
+toString called for 8 @Â 8
+toString called for 9 @Â 10
+toString called for 8 @Â 7
+toString called for 9 @Â 10
+toString called for 9 @Â 6
+toString called for 9 @Â 10
+toString called for 8 @Â 7
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 7
+toString called for 8 @Â 8
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 9
+toString called for 8 @Â 8
+toString called for 1 @Â 15
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 3 @Â 13
+toString called for 3 @Â 1
+toString called for 3 @Â 18
+toString called for 3 @Â 19
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 8
+toString called for 9 @Â 10
+toString called for 9 @Â 6
+1,2,3,3,3,3,3,4,5,5,6,6,7,8,8,8,8,8,9,9
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 3 @Â 0
+toString called for 3 @Â 19
+toString called for 3 @Â 0
+toString called for 3 @Â 18
+toString called for 3 @Â 0
+toString called for 6 @Â 17
+toString called for 3 @Â 0
+toString called for 6 @Â 16
+toString called for 3 @Â 0
+toString called for 1 @Â 15
+toString called for 3 @Â 0
+toString called for 1 @Â 15
+toString called for 3 @Â 0
+toString called for 8 @Â 2
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 3 @Â 0
+toString called for 8 @Â 14
+toString called for 3 @Â 0
+toString called for 3 @Â 13
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 7 @Â 3
+toString called for 3 @Â 0
+toString called for 8 @Â 2
+toString called for 3 @Â 0
+toString called for 4 @Â 11
+toString called for 3 @Â 0
+toString called for 9 @Â 10
+toString called for 3 @Â 0
+toString called for 8 @Â 9
+toString called for 3 @Â 0
+toString called for 8 @Â 8
+toString called for 3 @Â 0
+toString called for 8 @Â 7
+toString called for 3 @Â 0
+toString called for 9 @Â 6
+toString called for 3 @Â 0
+toString called for 5 @Â 5
+toString called for 3 @Â 0
+toString called for 5 @Â 4
+toString called for 3 @Â 0
+toString called for 7 @Â 3
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 2 @Â 12
+toString called for 1 @Â 15
+toString called for 7 @Â 3
+toString called for 5 @Â 4
+toString called for 7 @Â 3
+toString called for 5 @Â 5
+toString called for 7 @Â 3
+toString called for 9 @Â 6
+toString called for 7 @Â 3
+toString called for 3 @Â 19
+toString called for 7 @Â 3
+toString called for 3 @Â 19
+toString called for 7 @Â 3
+toString called for 8 @Â 7
+toString called for 7 @Â 3
+toString called for 9 @Â 6
+toString called for 7 @Â 3
+toString called for 3 @Â 18
+toString called for 7 @Â 3
+toString called for 3 @Â 18
+toString called for 7 @Â 3
+toString called for 8 @Â 8
+toString called for 7 @Â 3
+toString called for 8 @Â 7
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 8 @Â 9
+toString called for 7 @Â 3
+toString called for 8 @Â 8
+toString called for 7 @Â 3
+toString called for 6 @Â 16
+toString called for 7 @Â 3
+toString called for 6 @Â 16
+toString called for 7 @Â 3
+toString called for 9 @Â 10
+toString called for 7 @Â 3
+toString called for 8 @Â 9
+toString called for 7 @Â 3
+toString called for 3 @Â 1
+toString called for 7 @Â 3
+toString called for 3 @Â 1
+toString called for 7 @Â 3
+toString called for 4 @Â 11
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 9 @Â 10
+toString called for 7 @Â 3
+toString called for 8 @Â 14
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 3 @Â 13
+toString called for 5 @Â 4
+toString called for 3 @Â 13
+toString called for 4 @Â 11
+toString called for 3 @Â 13
+toString called for 3 @Â 1
+toString called for 3 @Â 13
+toString called for 6 @Â 16
+toString called for 3 @Â 13
+toString called for 6 @Â 17
+toString called for 3 @Â 13
+toString called for 3 @Â 18
+toString called for 3 @Â 13
+toString called for 3 @Â 19
+toString called for 3 @Â 13
+toString called for 5 @Â 5
+toString called for 3 @Â 13
+toString called for 5 @Â 4
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 3 @Â 19
+toString called for 5 @Â 4
+toString called for 3 @Â 18
+toString called for 5 @Â 4
+toString called for 6 @Â 17
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 5 @Â 4
+toString called for 6 @Â 16
+toString called for 5 @Â 4
+toString called for 6 @Â 17
+toString called for 5 @Â 4
+toString called for 6 @Â 16
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 3 @Â 1
+toString called for 4 @Â 11
+toString called for 3 @Â 1
+toString called for 3 @Â 18
+toString called for 3 @Â 1
+toString called for 3 @Â 19
+toString called for 3 @Â 1
+toString called for 4 @Â 11
+toString called for 4 @Â 11
+toString called for 3 @Â 19
+toString called for 4 @Â 11
+toString called for 3 @Â 18
+toString called for 3 @Â 18
+toString called for 3 @Â 19
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 2
+toString called for 9 @Â 6
+toString called for 8 @Â 2
+toString called for 8 @Â 7
+toString called for 8 @Â 2
+toString called for 8 @Â 8
+toString called for 8 @Â 2
+toString called for 8 @Â 9
+toString called for 8 @Â 2
+toString called for 9 @Â 10
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 14
+toString called for 9 @Â 10
+toString called for 8 @Â 14
+toString called for 9 @Â 6
+toString called for 8 @Â 14
+toString called for 8 @Â 7
+toString called for 8 @Â 14
+toString called for 8 @Â 8
+toString called for 8 @Â 14
+toString called for 8 @Â 9
+toString called for 8 @Â 14
+toString called for 9 @Â 10
+toString called for 9 @Â 10
+toString called for 8 @Â 9
+toString called for 9 @Â 10
+toString called for 8 @Â 8
+toString called for 9 @Â 10
+toString called for 8 @Â 7
+toString called for 9 @Â 10
+toString called for 9 @Â 6
+toString called for 9 @Â 10
+toString called for 8 @Â 7
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 7
+toString called for 8 @Â 8
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 9
+toString called for 8 @Â 8
+toString called for 1 @Â 15
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 3 @Â 13
+toString called for 3 @Â 1
+toString called for 3 @Â 18
+toString called for 3 @Â 19
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 8
+toString called for 9 @Â 10
+toString called for 9 @Â 6
+1,2,3,3,3,3,3,4,5,5,6,6,7,8,8,8,8,8,9,9
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 3 @Â 0
+toString called for 3 @Â 19
+toString called for 3 @Â 0
+toString called for 3 @Â 18
+toString called for 3 @Â 0
+toString called for 6 @Â 17
+toString called for 3 @Â 0
+toString called for 6 @Â 16
+toString called for 3 @Â 0
+toString called for 1 @Â 15
+toString called for 3 @Â 0
+toString called for 1 @Â 15
+toString called for 3 @Â 0
+toString called for 8 @Â 2
+toString called for 3 @Â 0
+toString called for 3 @Â 1
+toString called for 3 @Â 0
+toString called for 8 @Â 14
+toString called for 3 @Â 0
+toString called for 3 @Â 13
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 3 @Â 0
+toString called for 7 @Â 3
+toString called for 3 @Â 0
+toString called for 8 @Â 2
+toString called for 3 @Â 0
+toString called for 4 @Â 11
+toString called for 3 @Â 0
+toString called for 9 @Â 10
+toString called for 3 @Â 0
+toString called for 8 @Â 9
+toString called for 3 @Â 0
+toString called for 8 @Â 8
+toString called for 3 @Â 0
+toString called for 8 @Â 7
+toString called for 3 @Â 0
+toString called for 9 @Â 6
+toString called for 3 @Â 0
+toString called for 5 @Â 5
+toString called for 3 @Â 0
+toString called for 5 @Â 4
+toString called for 3 @Â 0
+toString called for 7 @Â 3
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 2 @Â 12
+toString called for 1 @Â 15
+toString called for 7 @Â 3
+toString called for 5 @Â 4
+toString called for 7 @Â 3
+toString called for 5 @Â 5
+toString called for 7 @Â 3
+toString called for 9 @Â 6
+toString called for 7 @Â 3
+toString called for 3 @Â 19
+toString called for 7 @Â 3
+toString called for 3 @Â 19
+toString called for 7 @Â 3
+toString called for 8 @Â 7
+toString called for 7 @Â 3
+toString called for 9 @Â 6
+toString called for 7 @Â 3
+toString called for 3 @Â 18
+toString called for 7 @Â 3
+toString called for 3 @Â 18
+toString called for 7 @Â 3
+toString called for 8 @Â 8
+toString called for 7 @Â 3
+toString called for 8 @Â 7
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 7 @Â 3
+toString called for 8 @Â 9
+toString called for 7 @Â 3
+toString called for 8 @Â 8
+toString called for 7 @Â 3
+toString called for 6 @Â 16
+toString called for 7 @Â 3
+toString called for 6 @Â 16
+toString called for 7 @Â 3
+toString called for 9 @Â 10
+toString called for 7 @Â 3
+toString called for 8 @Â 9
+toString called for 7 @Â 3
+toString called for 3 @Â 1
+toString called for 7 @Â 3
+toString called for 3 @Â 1
+toString called for 7 @Â 3
+toString called for 4 @Â 11
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 9 @Â 10
+toString called for 7 @Â 3
+toString called for 8 @Â 14
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 7 @Â 3
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 3 @Â 13
+toString called for 3 @Â 13
+toString called for 5 @Â 4
+toString called for 3 @Â 13
+toString called for 4 @Â 11
+toString called for 3 @Â 13
+toString called for 3 @Â 1
+toString called for 3 @Â 13
+toString called for 6 @Â 16
+toString called for 3 @Â 13
+toString called for 6 @Â 17
+toString called for 3 @Â 13
+toString called for 3 @Â 18
+toString called for 3 @Â 13
+toString called for 3 @Â 19
+toString called for 3 @Â 13
+toString called for 5 @Â 5
+toString called for 3 @Â 13
+toString called for 5 @Â 4
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 5 @Â 4
+toString called for 3 @Â 19
+toString called for 5 @Â 4
+toString called for 3 @Â 18
+toString called for 5 @Â 4
+toString called for 6 @Â 17
+toString called for 5 @Â 4
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 5 @Â 4
+toString called for 6 @Â 16
+toString called for 5 @Â 4
+toString called for 6 @Â 17
+toString called for 5 @Â 4
+toString called for 6 @Â 16
+toString called for 5 @Â 4
+toString called for 3 @Â 1
+toString called for 3 @Â 1
+toString called for 4 @Â 11
+toString called for 3 @Â 1
+toString called for 3 @Â 18
+toString called for 3 @Â 1
+toString called for 3 @Â 19
+toString called for 3 @Â 1
+toString called for 4 @Â 11
+toString called for 4 @Â 11
+toString called for 3 @Â 19
+toString called for 4 @Â 11
+toString called for 3 @Â 18
+toString called for 3 @Â 18
+toString called for 3 @Â 19
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 6 @Â 16
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 2
+toString called for 9 @Â 6
+toString called for 8 @Â 2
+toString called for 8 @Â 7
+toString called for 8 @Â 2
+toString called for 8 @Â 8
+toString called for 8 @Â 2
+toString called for 8 @Â 9
+toString called for 8 @Â 2
+toString called for 9 @Â 10
+toString called for 8 @Â 2
+toString called for 8 @Â 14
+toString called for 8 @Â 14
+toString called for 9 @Â 10
+toString called for 8 @Â 14
+toString called for 9 @Â 6
+toString called for 8 @Â 14
+toString called for 8 @Â 7
+toString called for 8 @Â 14
+toString called for 8 @Â 8
+toString called for 8 @Â 14
+toString called for 8 @Â 9
+toString called for 8 @Â 14
+toString called for 9 @Â 10
+toString called for 9 @Â 10
+toString called for 8 @Â 9
+toString called for 9 @Â 10
+toString called for 8 @Â 8
+toString called for 9 @Â 10
+toString called for 8 @Â 7
+toString called for 9 @Â 10
+toString called for 9 @Â 6
+toString called for 9 @Â 10
+toString called for 8 @Â 7
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 7
+toString called for 8 @Â 8
+toString called for 8 @Â 7
+toString called for 8 @Â 9
+toString called for 8 @Â 9
+toString called for 8 @Â 8
+toString called for 9 @Â 6
+toString called for 9 @Â 10
+toString called for 8 @Â 8
+toString called for 8 @Â 9
+toString called for 8 @Â 7
+toString called for 8 @Â 14
+toString called for 8 @Â 2
+toString called for 7 @Â 3
+toString called for 6 @Â 17
+toString called for 6 @Â 16
+toString called for 5 @Â 5
+toString called for 5 @Â 4
+toString called for 4 @Â 11
+toString called for 3 @Â 19
+toString called for 3 @Â 18
+toString called for 3 @Â 1
+toString called for 3 @Â 13
+toString called for 3 @Â 0
+toString called for 2 @Â 12
+toString called for 1 @Â 15
+9,9,8,8,8,8,8,7,6,6,5,5,4,3,3,3,3,3,2,1
diff --git a/test/trace/array-sort-tostring.as b/test/trace/array-sort-tostring.as
new file mode 100644
index 0000000..7c0fdce
--- /dev/null
+++ b/test/trace/array-sort-tostring.as
@@ -0,0 +1,28 @@
+// makeswf -v 7 -r 1 -o array-sort-tostring-7.swf array-sort-tostring.as
+
+function trace_toString () {
+ trace ("toString called for " + this.value + " @Â " + this.position);
+ return "" + this.value;
+}
+
+function trace_valueOf () {
+ trace ("valueOf called for " + this.value + " @Â " + this.position);
+ return this.value;
+}
+
+var values = [ 3, 3, 8, 7, 5, 5, 9, 8, 8, 8, 9, 4, 2, 3, 8, 1, 6, 6, 3, 3 ];
+var a = [];
+for (var i = 0; i < values.length; i++) {
+ a[i] = new Object ();
+ a[i].position = i;
+ a[i].value = values[i];
+ a[i].toString = trace_toString;
+ a[i].valueOf = trace_valueOf;
+}
+
+trace (a);
+trace (a.concat ().sort ());
+trace (a.concat ().sort (Array.NUMERIC));
+trace (a.concat ().sort (Array.DESCENDING));
+
+loadMovie ("FSCommand:quit", "");
commit ef59b6185fa2252e91cb3aff2de30f7082136028
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Thu Feb 14 01:27:06 2008 +0200
Fix the order of toString calls in sort's compare function
diff --git a/swfdec/swfdec_as_array.c b/swfdec/swfdec_as_array.c
index 65ce033..f6b0d25 100644
--- a/swfdec/swfdec_as_array.c
+++ b/swfdec/swfdec_as_array.c
@@ -602,7 +602,6 @@ swfdec_as_array_join (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
length = swfdec_as_array_length (object);
if (length > 0) {
- /* FIXME: implement this with the StringBuilder class */
GString *string;
swfdec_as_object_get_variable (object, SWFDEC_AS_STR_0, &val);
str = swfdec_as_value_to_string (cx, &val);
@@ -948,15 +947,18 @@ swfdec_as_array_sort_compare_values (SwfdecAsContext *cx,
retval = (an < bn ? -1 : (an > bn ? 1 : 0));
}
}
- else if (options & SORT_OPTION_CASEINSENSITIVE)
- {
- retval = g_strcasecmp (swfdec_as_value_to_string (cx, a),
- swfdec_as_value_to_string (cx, b));
- }
else
{
- retval = strcmp (swfdec_as_value_to_string (cx, a),
- swfdec_as_value_to_string (cx, b));
+ // can't pass swfdec_as_value_to_string calls directly to compare
+ // functions, since the order of these is important
+ const char *a_str = swfdec_as_value_to_string (cx, a);
+ const char *b_str = swfdec_as_value_to_string (cx, b);
+
+ if (options & SORT_OPTION_CASEINSENSITIVE) {
+ retval = g_strcasecmp (a_str, b_str);
+ } else {
+ retval = strcmp (a_str, b_str);
+ }
}
if (options & SORT_OPTION_DESCENDING)
commit 5b65608f1a46e64d0872d3906f8ba1deb7e1bfd1
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Thu Feb 14 00:05:05 2008 +0200
Add a test to see if toString is called for string objects
diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 1f7d35c..d2b0ac6 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -2761,6 +2761,15 @@ EXTRA_DIST = \
string-lastIndexOf-7.swf.trace \
string-lastIndexOf-8.swf \
string-lastIndexOf-8.swf.trace \
+ string-object-tostring.as \
+ string-object-tostring-5.swf \
+ string-object-tostring-5.swf.trace \
+ string-object-tostring-6.swf \
+ string-object-tostring-6.swf.trace \
+ string-object-tostring-7.swf \
+ string-object-tostring-7.swf.trace \
+ string-object-tostring-8.swf \
+ string-object-tostring-8.swf.trace \
string-old-upperlowercase.as \
string-old-upperlowercase-5.swf \
string-old-upperlowercase-5.swf.trace \
diff --git a/test/trace/string-object-tostring-5.swf b/test/trace/string-object-tostring-5.swf
new file mode 100644
index 0000000..ec6be38
Binary files /dev/null and b/test/trace/string-object-tostring-5.swf differ
diff --git a/test/trace/string-object-tostring-5.swf.trace b/test/trace/string-object-tostring-5.swf.trace
new file mode 100644
index 0000000..e8e2c6b
--- /dev/null
+++ b/test/trace/string-object-tostring-5.swf.trace
@@ -0,0 +1,5 @@
+str
+strstr
+str
+<str />
+str
diff --git a/test/trace/string-object-tostring-6.swf b/test/trace/string-object-tostring-6.swf
new file mode 100644
index 0000000..9eeb394
Binary files /dev/null and b/test/trace/string-object-tostring-6.swf differ
diff --git a/test/trace/string-object-tostring-6.swf.trace b/test/trace/string-object-tostring-6.swf.trace
new file mode 100644
index 0000000..e8e2c6b
--- /dev/null
+++ b/test/trace/string-object-tostring-6.swf.trace
@@ -0,0 +1,5 @@
+str
+strstr
+str
+<str />
+str
diff --git a/test/trace/string-object-tostring-7.swf b/test/trace/string-object-tostring-7.swf
new file mode 100644
index 0000000..cfef635
Binary files /dev/null and b/test/trace/string-object-tostring-7.swf differ
diff --git a/test/trace/string-object-tostring-7.swf.trace b/test/trace/string-object-tostring-7.swf.trace
new file mode 100644
index 0000000..e8e2c6b
--- /dev/null
+++ b/test/trace/string-object-tostring-7.swf.trace
@@ -0,0 +1,5 @@
+str
+strstr
+str
+<str />
+str
diff --git a/test/trace/string-object-tostring-8.swf b/test/trace/string-object-tostring-8.swf
new file mode 100644
index 0000000..3e56596
Binary files /dev/null and b/test/trace/string-object-tostring-8.swf differ
diff --git a/test/trace/string-object-tostring-8.swf.trace b/test/trace/string-object-tostring-8.swf.trace
new file mode 100644
index 0000000..e8e2c6b
--- /dev/null
+++ b/test/trace/string-object-tostring-8.swf.trace
@@ -0,0 +1,5 @@
+str
+strstr
+str
+<str />
+str
diff --git a/test/trace/string-object-tostring.as b/test/trace/string-object-tostring.as
new file mode 100644
index 0000000..1cefc5c
--- /dev/null
+++ b/test/trace/string-object-tostring.as
@@ -0,0 +1,25 @@
+// makeswf -v 7 -r 1 -o string-object-tostring-7.swf string-object-tostring.as
+
+// check whether toString method is called for string objects when they are
+// converted to strings in various places
+
+var str = new String ("str");
+str.toString = function () {
+ trace ("str toString called");
+ return "str.toString";
+};
+str.valueOf = function () {
+ trace ("str valueOf called");
+ return "str.valueOf";
+};
+
+trace (new String (str));
+trace (str.concat (str));
+
+var x = new XML (str);
+trace (x);
+trace (x.createElement (str));
+
+trace ([str]);
+
+loadMovie ("FSCommand:quit", "");
commit c9d6af6d8b7b8878bfc92440f724b0cb108d1c48
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Thu Feb 14 00:02:46 2008 +0200
Forgot to update test/trace/Makefile.am earlier
diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index e422d7b..1f7d35c 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -173,6 +173,15 @@ EXTRA_DIST = \
array-sort-on-options-7.swf.trace \
array-sort-on-options-8.swf \
array-sort-on-options-8.swf.trace \
+ array-sort-order.as \
+ array-sort-order-5.swf \
+ array-sort-order-5.swf.trace \
+ array-sort-order-6.swf \
+ array-sort-order-6.swf.trace \
+ array-sort-order-7.swf \
+ array-sort-order-7.swf.trace \
+ array-sort-order-8.swf \
+ array-sort-order-8.swf.trace \
array-sort-unique-abort.as \
array-sort-unique-abort-5.swf \
array-sort-unique-abort-5.swf.trace \
commit 8a1988135d410b14f6a734f44f4d4c6d46386664
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Thu Feb 14 00:02:29 2008 +0200
Don't call toString for string objects in swfdec_as_value_to_string
diff --git a/swfdec/swfdec_as_types.c b/swfdec/swfdec_as_types.c
index e5253d3..8ecfbd8 100644
--- a/swfdec/swfdec_as_types.c
+++ b/swfdec/swfdec_as_types.c
@@ -30,6 +30,7 @@
#include "swfdec_as_function.h"
#include "swfdec_as_number.h"
#include "swfdec_as_stack.h"
+#include "swfdec_as_string.h"
#include "swfdec_as_strings.h"
#include "swfdec_as_super.h"
#include "swfdec_debug.h"
@@ -391,6 +392,8 @@ swfdec_as_value_to_string (SwfdecAsContext *context, const SwfdecAsValue *value)
char *str = swfdec_movie_get_path (SWFDEC_MOVIE (object), TRUE);
return swfdec_as_context_give_string (context, str);
}
+ } else if (SWFDEC_IS_AS_STRING (object)) {
+ return SWFDEC_AS_STRING (object)->string;
} else {
SwfdecAsValue ret;
swfdec_as_object_call (object, SWFDEC_AS_STR_toString, 0, NULL, &ret);
More information about the Swfdec-commits
mailing list