[Swfdec] 4 commits - libswfdec/swfdec_as_boolean.c libswfdec/swfdec_as_boolean.h libswfdec/swfdec_as_context.c libswfdec/swfdec_as_initialize.as libswfdec/swfdec_as_initialize.h libswfdec/swfdec_as_interpret.c test/trace
Benjamin Otte
company at kemper.freedesktop.org
Mon Sep 3 08:38:08 PDT 2007
libswfdec/swfdec_as_boolean.c | 49 ++++++++---------------
libswfdec/swfdec_as_boolean.h | 3 -
libswfdec/swfdec_as_context.c | 2
libswfdec/swfdec_as_initialize.as | 4 +
libswfdec/swfdec_as_initialize.h | 58 +++++++++++++++-------------
libswfdec/swfdec_as_interpret.c | 44 +++++++++++++++++----
test/trace/Makefile.am | 9 ++++
test/trace/foreach-proto-simple-5.swf |binary
test/trace/foreach-proto-simple-5.swf.trace | 4 +
test/trace/foreach-proto-simple-6.swf |binary
test/trace/foreach-proto-simple-6.swf.trace | 4 +
test/trace/foreach-proto-simple-7.swf |binary
test/trace/foreach-proto-simple-7.swf.trace | 4 +
test/trace/foreach-proto-simple-8.swf |binary
test/trace/foreach-proto-simple-8.swf.trace | 4 +
test/trace/foreach-proto-simple.as | 17 ++++++++
test/trace/trace.c | 1
17 files changed, 133 insertions(+), 70 deletions(-)
New commits:
diff-tree b8da9da8a7a5ebd58cb38cf4c981d809ad6fd5ab (from e4f9bfc6dbbf8aefe0cef9d4c9d8f000931ace9e)
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Sep 3 17:37:55 2007 +0200
init Boolean class via script
diff --git a/libswfdec/swfdec_as_boolean.c b/libswfdec/swfdec_as_boolean.c
index 5d3a90b..6764cbe 100644
--- a/libswfdec/swfdec_as_boolean.c
+++ b/libswfdec/swfdec_as_boolean.c
@@ -28,6 +28,7 @@
#include "swfdec_as_native_function.h"
#include "swfdec_as_strings.h"
#include "swfdec_debug.h"
+#include "swfdec_player_internal.h"
G_DEFINE_TYPE (SwfdecAsBoolean, swfdec_as_boolean, SWFDEC_TYPE_AS_OBJECT)
@@ -43,7 +44,8 @@ swfdec_as_boolean_init (SwfdecAsBoolean
/*** AS CODE ***/
-static void
+SWFDEC_AS_CONSTRUCTOR (107, 2, swfdec_as_boolean_construct, swfdec_as_boolean_get_type)
+void
swfdec_as_boolean_construct (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
{
@@ -63,48 +65,31 @@ swfdec_as_boolean_construct (SwfdecAsCon
}
}
-static void
+SWFDEC_AS_NATIVE (107, 1, swfdec_as_boolean_toString)
+void
swfdec_as_boolean_toString (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
{
- SwfdecAsBoolean *b = SWFDEC_AS_BOOLEAN (object);
+ SwfdecAsBoolean *b;
+
+ if (!SWFDEC_IS_AS_BOOLEAN (object))
+ return;
+ b = SWFDEC_AS_BOOLEAN (object);
SWFDEC_AS_VALUE_SET_STRING (ret, b->boolean ? SWFDEC_AS_STR_true : SWFDEC_AS_STR_false);
}
-static void
+SWFDEC_AS_NATIVE (107, 0, swfdec_as_boolean_valueOf)
+void
swfdec_as_boolean_valueOf (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret)
{
- SwfdecAsBoolean *b = SWFDEC_AS_BOOLEAN (object);
-
- SWFDEC_AS_VALUE_SET_BOOLEAN (ret, b->boolean);
-}
-
-void
-swfdec_as_boolean_init_context (SwfdecAsContext *context, guint version)
-{
- SwfdecAsObject *boolean, *proto;
- SwfdecAsValue val;
+ SwfdecAsBoolean *b;
- g_return_if_fail (SWFDEC_IS_AS_CONTEXT (context));
-
- proto = swfdec_as_object_new_empty (context);
- if (proto == NULL)
- return;
- boolean = SWFDEC_AS_OBJECT (swfdec_as_object_add_constructor (context->global,
- SWFDEC_AS_STR_Boolean, 0, SWFDEC_TYPE_AS_BOOLEAN,
- swfdec_as_boolean_construct, 0, proto));
- if (!boolean)
+ if (!SWFDEC_IS_AS_BOOLEAN (object))
return;
- /* set the right properties on the Boolean.prototype object */
- SWFDEC_AS_VALUE_SET_OBJECT (&val, boolean);
- swfdec_as_object_set_variable_and_flags (proto, SWFDEC_AS_STR_constructor,
- &val, SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
- swfdec_as_object_add_function (proto, SWFDEC_AS_STR_toString, SWFDEC_TYPE_AS_BOOLEAN, swfdec_as_boolean_toString, 0);
- swfdec_as_object_add_function (proto, SWFDEC_AS_STR_valueOf, SWFDEC_TYPE_AS_BOOLEAN, swfdec_as_boolean_valueOf, 0);
- SWFDEC_AS_VALUE_SET_OBJECT (&val, context->Object_prototype);
- swfdec_as_object_set_variable_and_flags (proto, SWFDEC_AS_STR___proto__, &val,
- SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
+ b = SWFDEC_AS_BOOLEAN (object);
+
+ SWFDEC_AS_VALUE_SET_BOOLEAN (ret, b->boolean);
}
diff --git a/libswfdec/swfdec_as_boolean.h b/libswfdec/swfdec_as_boolean.h
index 16bdebd..723f076 100644
--- a/libswfdec/swfdec_as_boolean.h
+++ b/libswfdec/swfdec_as_boolean.h
@@ -47,9 +47,6 @@ struct _SwfdecAsBooleanClass {
GType swfdec_as_boolean_get_type (void);
-void swfdec_as_boolean_init_context (SwfdecAsContext * context,
- guint version);
-
G_END_DECLS
#endif
diff --git a/libswfdec/swfdec_as_context.c b/libswfdec/swfdec_as_context.c
index 3b0ec12..3ce9356 100644
--- a/libswfdec/swfdec_as_context.c
+++ b/libswfdec/swfdec_as_context.c
@@ -25,7 +25,6 @@
#include <string.h>
#include "swfdec_as_context.h"
#include "swfdec_as_array.h"
-#include "swfdec_as_boolean.h"
#include "swfdec_as_frame_internal.h"
#include "swfdec_as_function.h"
#include "swfdec_as_initialize.h"
@@ -1227,7 +1226,6 @@ swfdec_as_context_startup (SwfdecAsConte
swfdec_as_context_init_global (context, version);
swfdec_as_array_init_context (context, version);
/* define the type objects */
- swfdec_as_boolean_init_context (context, version);
swfdec_as_string_init_context (context, version);
/* define the rest */
swfdec_as_math_init_context (context, version);
diff --git a/libswfdec/swfdec_as_initialize.as b/libswfdec/swfdec_as_initialize.as
index 4085c91..8ded5bb 100644
--- a/libswfdec/swfdec_as_initialize.as
+++ b/libswfdec/swfdec_as_initialize.as
@@ -24,6 +24,10 @@ ASSetNativeAccessor = ASnative (4, 1);
/*** BASE OBJECTS ***/
+Boolean = ASconstructor(107, 2);
+ASSetNative(Boolean.prototype, 107, "valueOf,toString");
+ASSetPropFlags(Boolean.prototype, null, 3);
+
Number = ASconstructor (106, 2);
ASSetNative (Number.prototype, 106, "valueOf,toString");
ASSetPropFlags(Number.prototype, null, 3);
diff --git a/libswfdec/swfdec_as_initialize.h b/libswfdec/swfdec_as_initialize.h
index 64fd129..fec8c25 100644
--- a/libswfdec/swfdec_as_initialize.h
+++ b/libswfdec/swfdec_as_initialize.h
@@ -2,32 +2,38 @@
/* compiled from swfdec_as_initialize.as */
const unsigned char swfdec_as_initialize[] = {
- 0x88, 0xAF, 0x00, 0x0E, 0x00, 0x41, 0x53, 0x53, 0x65, 0x74, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65,
+ 0x88, 0xB7, 0x00, 0x0F, 0x00, 0x41, 0x53, 0x53, 0x65, 0x74, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65,
0x00, 0x41, 0x53, 0x6E, 0x61, 0x74, 0x69, 0x76, 0x65, 0x00, 0x41, 0x53, 0x53, 0x65, 0x74, 0x4E,
- 0x61, 0x74, 0x69, 0x76, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72, 0x00, 0x4E, 0x75,
- 0x6D, 0x62, 0x65, 0x72, 0x00, 0x41, 0x53, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74,
- 0x6F, 0x72, 0x00, 0x70, 0x72, 0x6F, 0x74, 0x6F, 0x74, 0x79, 0x70, 0x65, 0x00, 0x76, 0x61, 0x6C,
- 0x75, 0x65, 0x4F, 0x66, 0x2C, 0x74, 0x6F, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x41, 0x53,
- 0x53, 0x65, 0x74, 0x50, 0x72, 0x6F, 0x70, 0x46, 0x6C, 0x61, 0x67, 0x73, 0x00, 0x4E, 0x61, 0x4E,
- 0x00, 0x50, 0x4F, 0x53, 0x49, 0x54, 0x49, 0x56, 0x45, 0x5F, 0x49, 0x4E, 0x46, 0x49, 0x4E, 0x49,
- 0x54, 0x59, 0x00, 0x49, 0x6E, 0x66, 0x69, 0x6E, 0x69, 0x74, 0x79, 0x00, 0x4E, 0x45, 0x47, 0x41,
- 0x54, 0x49, 0x56, 0x45, 0x5F, 0x49, 0x4E, 0x46, 0x49, 0x4E, 0x49, 0x54, 0x59, 0x00, 0x4D, 0x49,
- 0x4E, 0x5F, 0x56, 0x41, 0x4C, 0x55, 0x45, 0x00, 0x4D, 0x41, 0x58, 0x5F, 0x56, 0x41, 0x4C, 0x55,
- 0x45, 0x00, 0x96, 0x13, 0x00, 0x08, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00,
- 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x13, 0x00, 0x08, 0x02, 0x07,
- 0x01, 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01,
- 0x3D, 0x1D, 0x96, 0x13, 0x00, 0x08, 0x03, 0x07, 0x02, 0x00, 0x00, 0x00, 0x07, 0x6A, 0x00, 0x00,
- 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x04, 0x3D, 0x1D, 0x96, 0x09, 0x00, 0x08, 0x06, 0x07,
- 0x6A, 0x00, 0x00, 0x00, 0x08, 0x03, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x05, 0x4E, 0x96, 0x07, 0x00,
- 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x03, 0x00, 0x00,
- 0x00, 0x02, 0x08, 0x03, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x05, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03,
- 0x00, 0x00, 0x00, 0x08, 0x07, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x03, 0x1C, 0x96, 0x04, 0x00,
- 0x08, 0x08, 0x08, 0x08, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x03, 0x1C, 0x96, 0x04, 0x00, 0x08,
- 0x09, 0x08, 0x0A, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x03, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x0B,
- 0x08, 0x0A, 0x1C, 0x96, 0x05, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C, 0x4F, 0x96, 0x02, 0x00,
- 0x08, 0x03, 0x1C, 0x96, 0x07, 0x00, 0x08, 0x0C, 0x07, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x96, 0x02,
- 0x00, 0x08, 0x03, 0x1C, 0x96, 0x0B, 0x00, 0x08, 0x0D, 0x06, 0xFF, 0xFF, 0xEF, 0x7F, 0xE2, 0xFF,
- 0xFF, 0xFF, 0x4F, 0x96, 0x08, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x03, 0x1C, 0x96,
- 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x07, 0x3D, 0x17, 0x00
+ 0x61, 0x74, 0x69, 0x76, 0x65, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72, 0x00, 0x42, 0x6F,
+ 0x6F, 0x6C, 0x65, 0x61, 0x6E, 0x00, 0x41, 0x53, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x72, 0x75, 0x63,
+ 0x74, 0x6F, 0x72, 0x00, 0x70, 0x72, 0x6F, 0x74, 0x6F, 0x74, 0x79, 0x70, 0x65, 0x00, 0x76, 0x61,
+ 0x6C, 0x75, 0x65, 0x4F, 0x66, 0x2C, 0x74, 0x6F, 0x53, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x00, 0x41,
+ 0x53, 0x53, 0x65, 0x74, 0x50, 0x72, 0x6F, 0x70, 0x46, 0x6C, 0x61, 0x67, 0x73, 0x00, 0x4E, 0x75,
+ 0x6D, 0x62, 0x65, 0x72, 0x00, 0x4E, 0x61, 0x4E, 0x00, 0x50, 0x4F, 0x53, 0x49, 0x54, 0x49, 0x56,
+ 0x45, 0x5F, 0x49, 0x4E, 0x46, 0x49, 0x4E, 0x49, 0x54, 0x59, 0x00, 0x49, 0x6E, 0x66, 0x69, 0x6E,
+ 0x69, 0x74, 0x79, 0x00, 0x4E, 0x45, 0x47, 0x41, 0x54, 0x49, 0x56, 0x45, 0x5F, 0x49, 0x4E, 0x46,
+ 0x49, 0x4E, 0x49, 0x54, 0x59, 0x00, 0x4D, 0x49, 0x4E, 0x5F, 0x56, 0x41, 0x4C, 0x55, 0x45, 0x00,
+ 0x4D, 0x41, 0x58, 0x5F, 0x56, 0x41, 0x4C, 0x55, 0x45, 0x00, 0x96, 0x13, 0x00, 0x08, 0x00, 0x07,
+ 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01,
+ 0x3D, 0x1D, 0x96, 0x13, 0x00, 0x08, 0x02, 0x07, 0x01, 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00,
+ 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x01, 0x3D, 0x1D, 0x96, 0x13, 0x00, 0x08, 0x03, 0x07,
+ 0x02, 0x00, 0x00, 0x00, 0x07, 0x6B, 0x00, 0x00, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x08, 0x04,
+ 0x3D, 0x1D, 0x96, 0x09, 0x00, 0x08, 0x06, 0x07, 0x6B, 0x00, 0x00, 0x00, 0x08, 0x03, 0x1C, 0x96,
+ 0x02, 0x00, 0x08, 0x05, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x3D,
+ 0x17, 0x96, 0x08, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x02, 0x08, 0x03, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0x05, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x08, 0x07, 0x3D, 0x17, 0x96,
+ 0x13, 0x00, 0x08, 0x08, 0x07, 0x02, 0x00, 0x00, 0x00, 0x07, 0x6A, 0x00, 0x00, 0x00, 0x07, 0x02,
+ 0x00, 0x00, 0x00, 0x08, 0x04, 0x3D, 0x1D, 0x96, 0x09, 0x00, 0x08, 0x06, 0x07, 0x6A, 0x00, 0x00,
+ 0x00, 0x08, 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x05, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00,
+ 0x00, 0x00, 0x08, 0x00, 0x3D, 0x17, 0x96, 0x08, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00, 0x02, 0x08,
+ 0x08, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x05, 0x4E, 0x96, 0x07, 0x00, 0x07, 0x03, 0x00, 0x00, 0x00,
+ 0x08, 0x07, 0x3D, 0x17, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x09, 0x08,
+ 0x09, 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x0A, 0x08, 0x0B,
+ 0x1C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C, 0x96, 0x04, 0x00, 0x08, 0x0C, 0x08, 0x0B, 0x1C,
+ 0x96, 0x05, 0x00, 0x07, 0xFF, 0xFF, 0xFF, 0xFF, 0x0C, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x08, 0x1C,
+ 0x96, 0x07, 0x00, 0x08, 0x0D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x08,
+ 0x1C, 0x96, 0x0B, 0x00, 0x08, 0x0E, 0x06, 0xFF, 0xFF, 0xEF, 0x7F, 0xE2, 0xFF, 0xFF, 0xFF, 0x4F,
+ 0x96, 0x08, 0x00, 0x07, 0x07, 0x00, 0x00, 0x00, 0x02, 0x08, 0x08, 0x1C, 0x96, 0x07, 0x00, 0x07,
+ 0x03, 0x00, 0x00, 0x00, 0x08, 0x07, 0x3D, 0x17, 0x00
};
diff-tree e4f9bfc6dbbf8aefe0cef9d4c9d8f000931ace9e (from e33c93491cd56f9db52b0390106b2340b7f34e89)
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Sep 3 17:37:20 2007 +0200
check that prototype properties get included in foreach
diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 70c60e3..7dec009 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -438,6 +438,15 @@ EXTRA_DIST = \
extends-simple.swf.trace \
extends-super.swf \
extends-super.swf.trace \
+ foreach-proto-simple.as \
+ foreach-proto-simple-5.swf \
+ foreach-proto-simple-5.swf.trace \
+ foreach-proto-simple-6.swf \
+ foreach-proto-simple-6.swf.trace \
+ foreach-proto-simple-7.swf \
+ foreach-proto-simple-7.swf.trace \
+ foreach-proto-simple-8.swf \
+ foreach-proto-simple-8.swf.trace \
fromcharcode.as \
fromcharcode-5.swf \
fromcharcode-5.swf.trace \
diff --git a/test/trace/foreach-proto-simple-5.swf b/test/trace/foreach-proto-simple-5.swf
new file mode 100644
index 0000000..16b6c92
Binary files /dev/null and b/test/trace/foreach-proto-simple-5.swf differ
diff --git a/test/trace/foreach-proto-simple-5.swf.trace b/test/trace/foreach-proto-simple-5.swf.trace
new file mode 100644
index 0000000..635389b
--- /dev/null
+++ b/test/trace/foreach-proto-simple-5.swf.trace
@@ -0,0 +1,4 @@
+Run for in loop with properties on parent
+x
+y
+z
diff --git a/test/trace/foreach-proto-simple-6.swf b/test/trace/foreach-proto-simple-6.swf
new file mode 100644
index 0000000..1a57e04
Binary files /dev/null and b/test/trace/foreach-proto-simple-6.swf differ
diff --git a/test/trace/foreach-proto-simple-6.swf.trace b/test/trace/foreach-proto-simple-6.swf.trace
new file mode 100644
index 0000000..635389b
--- /dev/null
+++ b/test/trace/foreach-proto-simple-6.swf.trace
@@ -0,0 +1,4 @@
+Run for in loop with properties on parent
+x
+y
+z
diff --git a/test/trace/foreach-proto-simple-7.swf b/test/trace/foreach-proto-simple-7.swf
new file mode 100644
index 0000000..e1c7b0c
Binary files /dev/null and b/test/trace/foreach-proto-simple-7.swf differ
diff --git a/test/trace/foreach-proto-simple-7.swf.trace b/test/trace/foreach-proto-simple-7.swf.trace
new file mode 100644
index 0000000..635389b
--- /dev/null
+++ b/test/trace/foreach-proto-simple-7.swf.trace
@@ -0,0 +1,4 @@
+Run for in loop with properties on parent
+x
+y
+z
diff --git a/test/trace/foreach-proto-simple-8.swf b/test/trace/foreach-proto-simple-8.swf
new file mode 100644
index 0000000..0bcbaee
Binary files /dev/null and b/test/trace/foreach-proto-simple-8.swf differ
diff --git a/test/trace/foreach-proto-simple-8.swf.trace b/test/trace/foreach-proto-simple-8.swf.trace
new file mode 100644
index 0000000..635389b
--- /dev/null
+++ b/test/trace/foreach-proto-simple-8.swf.trace
@@ -0,0 +1,4 @@
+Run for in loop with properties on parent
+x
+y
+z
diff --git a/test/trace/foreach-proto-simple.as b/test/trace/foreach-proto-simple.as
new file mode 100644
index 0000000..f04edf3
--- /dev/null
+++ b/test/trace/foreach-proto-simple.as
@@ -0,0 +1,17 @@
+// makeswf -v 7 -s 200x150 -r 1 -o foreach-proto-simple.swf foreach-proto-simple.as
+
+trace ("Run for in loop with properties on parent");
+o = new Object ();
+o.z = 42;
+p = new Object;
+p.y = 21;
+p.__proto__ = o;
+o.x = 842;
+a = [];
+for (i in p)
+ a.push (i);
+a.sort();
+for (i = 0; i < a.length; i++)
+ trace (a[i]);
+
+loadMovie ("FSCommand:quit", "");
diff-tree e33c93491cd56f9db52b0390106b2340b7f34e89 (from 649c77ee37b7d290023c20b546b3b6a29a390359)
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Sep 3 17:36:17 2007 +0200
make enumerate actions include prototype stuff
diff --git a/libswfdec/swfdec_as_interpret.c b/libswfdec/swfdec_as_interpret.c
index 32613a2..fcbd035 100644
--- a/libswfdec/swfdec_as_interpret.c
+++ b/libswfdec/swfdec_as_interpret.c
@@ -1896,19 +1896,49 @@ fail:
}
static gboolean
-swfdec_action_do_enumerate (SwfdecAsObject *object, const char *variable,
- SwfdecAsValue *value, guint flags, gpointer cxp)
+swfdec_action_enumerate_foreach (SwfdecAsObject *object, const char *variable,
+ SwfdecAsValue *value, guint flags, gpointer listp)
{
- SwfdecAsContext *cx = cxp;
+ GSList **list = listp;
if (flags & SWFDEC_AS_VARIABLE_HIDDEN)
return TRUE;
- swfdec_as_stack_ensure_free (cx, 1);
- SWFDEC_AS_VALUE_SET_STRING (swfdec_as_stack_push (cx), variable);
+
+ *list = g_slist_remove (*list, variable);
+ *list = g_slist_prepend (*list, (gpointer) variable);
return TRUE;
}
static void
+swfdec_action_do_enumerate (SwfdecAsContext *cx, SwfdecAsObject *object)
+{
+ guint i;
+ GSList *walk, *list = NULL;
+
+ for (i = 0; i < 256 && object; i++) {
+ swfdec_as_object_foreach (object, swfdec_action_enumerate_foreach, &list);
+ object = object->prototype;
+ }
+ if (i == 256) {
+ swfdec_as_context_abort (object->context, "Prototype recursion limit exceeded");
+ g_slist_free (list);
+ return;
+ }
+ list = g_slist_reverse (list);
+ i = 0;
+ for (walk = list; walk; walk = walk->next) {
+ /* 8 is an arbitrary value */
+ if (i % 8 == 0) {
+ swfdec_as_stack_ensure_free (cx, 8);
+ i = 0;
+ }
+ i++;
+ SWFDEC_AS_VALUE_SET_STRING (swfdec_as_stack_push (cx), walk->data);
+ }
+ g_slist_free (list);
+}
+
+static void
swfdec_action_enumerate (SwfdecAsContext *cx, guint action, const guint8 *data, guint len)
{
SwfdecAsValue *val;
@@ -1924,7 +1954,7 @@ swfdec_action_enumerate (SwfdecAsContext
}
obj = SWFDEC_AS_VALUE_GET_OBJECT (val);
SWFDEC_AS_VALUE_SET_NULL (val);
- swfdec_as_object_foreach (obj, swfdec_action_do_enumerate, cx);
+ swfdec_action_do_enumerate (cx, obj);
}
static void
@@ -1941,7 +1971,7 @@ swfdec_action_enumerate2 (SwfdecAsContex
}
obj = SWFDEC_AS_VALUE_GET_OBJECT (val);
SWFDEC_AS_VALUE_SET_NULL (val);
- swfdec_as_object_foreach (obj, swfdec_action_do_enumerate, cx);
+ swfdec_action_do_enumerate (cx, obj);
}
static void
diff-tree 649c77ee37b7d290023c20b546b3b6a29a390359 (from 635b7b3bfceaa763cd502b478f122b39c27bd040)
Author: Benjamin Otte <otte at gnome.org>
Date: Mon Sep 3 17:34:36 2007 +0200
fix memleak
diff --git a/test/trace/trace.c b/test/trace/trace.c
index f42fb0f..bd31799 100644
--- a/test/trace/trace.c
+++ b/test/trace/trace.c
@@ -175,6 +175,7 @@ run_test (gpointer testp, gpointer unuse
g_error_free (error);
} else {
g_string_append (output, result);
+ g_free (result);
}
}
g_string_free (string, TRUE);
More information about the Swfdec
mailing list