[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