[Swfdec-commits] 16 commits - swfdec/Makefile.am swfdec/swfdec_as_context.c swfdec/swfdec_as_internal.h swfdec/swfdec_as_native_function.c swfdec/swfdec_as_native_function.h swfdec/swfdec_as_object.c swfdec/swfdec_as_object.h swfdec/swfdec_as_relay.c swfdec/swfdec_audio_load.c swfdec/swfdec.h swfdec/swfdec_net_stream_as.c swfdec/swfdec_net_stream.c swfdec/swfdec_net_stream.h swfdec/swfdec_video_movie_as.c test/swfdec_test_buffer.c test/swfdec_test_buffer.h test/swfdec_test_function.c test/swfdec_test_function.h test/swfdec_test_global.c test/swfdec_test_http_request.c test/swfdec_test_http_server.c test/swfdec_test_image.c test/swfdec_test_image.h test/swfdec_test_plugin.c test/swfdec_test_socket.c test/swfdec_test_test.c test/swfdec_test_test.h vivified/core
Benjamin Otte
company at kemper.freedesktop.org
Sat Oct 25 08:28:55 PDT 2008
swfdec/Makefile.am | 2
swfdec/swfdec.h | 3
swfdec/swfdec_as_context.c | 3
swfdec/swfdec_as_internal.h | 8 -
swfdec/swfdec_as_native_function.c | 27 ------
swfdec/swfdec_as_native_function.h | 7 -
swfdec/swfdec_as_object.c | 80 ++-----------------
swfdec/swfdec_as_object.h | 8 +
swfdec/swfdec_as_relay.c | 2
swfdec/swfdec_audio_load.c | 18 ----
swfdec/swfdec_net_stream.c | 81 +-------------------
swfdec/swfdec_net_stream.h | 8 -
swfdec/swfdec_net_stream_as.c | 149 +++++++++++++++++++++++++++++++++++--
swfdec/swfdec_video_movie_as.c | 4
test/swfdec_test_buffer.c | 58 +++++++-------
test/swfdec_test_buffer.h | 16 +--
test/swfdec_test_function.c | 12 +-
test/swfdec_test_function.h | 2
test/swfdec_test_global.c | 2
test/swfdec_test_http_request.c | 22 ++---
test/swfdec_test_http_server.c | 4
test/swfdec_test_image.c | 45 ++++++-----
test/swfdec_test_image.h | 12 +-
test/swfdec_test_plugin.c | 2
test/swfdec_test_socket.c | 13 +--
test/swfdec_test_test.c | 55 +++++++------
test/swfdec_test_test.h | 4
vivified/core/vivi_breakpoint.c | 4
vivified/core/vivi_breakpoint.h | 6 -
vivified/core/vivi_function.c | 11 --
30 files changed, 321 insertions(+), 347 deletions(-)
New commits:
commit 2f4a66c50c89beeb11634806274a0e757e661dea
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Oct 25 17:27:17 2008 +0200
reenable GCing every frame
This costs roughly 20% performance, but catches bugs. (like the last 3
commits). Ergo: enable
diff --git a/test/swfdec_test_plugin.c b/test/swfdec_test_plugin.c
index bb5a013..679aac6 100644
--- a/test/swfdec_test_plugin.c
+++ b/test/swfdec_test_plugin.c
@@ -145,7 +145,7 @@ swfdec_test_plugin_swfdec_new (SwfdecTestPlugin *plugin)
plugin->data = player = g_object_new (SWFDEC_TYPE_PLAYER, "random-seed", 0,
"loader-type", SWFDEC_TYPE_FILE_LOADER, "socket-type", SWFDEC_TYPE_TEST_SWFDEC_SOCKET,
"max-runtime", 0, "start-time", &the_beginning, "allow-fullscreen", TRUE,
- NULL);
+ "memory-until-gc", 0, NULL);
g_object_set_data (G_OBJECT (player), "plugin", plugin);
g_signal_connect (player, "fscommand", G_CALLBACK (swfdec_test_plugin_swfdec_fscommand), plugin);
commit 03688ad0378d6ce0841c09153a38376da92da7e5
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Oct 25 17:19:59 2008 +0200
avoid cyclic references
SwfdecAudioLoad and SwfdecLoadSound were referencing each other
diff --git a/swfdec/swfdec_audio_load.c b/swfdec/swfdec_audio_load.c
index d63da2d..f8365be 100644
--- a/swfdec/swfdec_audio_load.c
+++ b/swfdec/swfdec_audio_load.c
@@ -30,19 +30,6 @@
G_DEFINE_TYPE (SwfdecAudioLoad, swfdec_audio_load, SWFDEC_TYPE_AUDIO_STREAM)
-static void
-swfdec_audio_load_dispose (GObject *object)
-{
- SwfdecAudioLoad *stream = SWFDEC_AUDIO_LOAD (object);
-
- if (stream->load != NULL) {
- g_object_unref (stream->load);
- stream->load = NULL;
- }
-
- G_OBJECT_CLASS (swfdec_audio_load_parent_class)->dispose (object);
-}
-
static SwfdecBuffer *
swfdec_audio_load_pull (SwfdecAudioStream *audio)
{
@@ -60,11 +47,8 @@ swfdec_audio_load_pull (SwfdecAudioStream *audio)
static void
swfdec_audio_load_class_init (SwfdecAudioLoadClass *klass)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
SwfdecAudioStreamClass *stream_class = SWFDEC_AUDIO_STREAM_CLASS (klass);
- object_class->dispose = swfdec_audio_load_dispose;
-
stream_class->pull = swfdec_audio_load_pull;
}
@@ -82,7 +66,7 @@ swfdec_audio_load_new (SwfdecPlayer *player, SwfdecLoadSound *load)
g_return_val_if_fail (SWFDEC_IS_LOAD_SOUND (load), NULL);
stream = g_object_new (SWFDEC_TYPE_AUDIO_LOAD, NULL);
- stream->load = g_object_ref (load);
+ stream->load = load;
swfdec_audio_stream_use_decoder (SWFDEC_AUDIO_STREAM (stream),
SWFDEC_AUDIO_CODEC_MP3, swfdec_audio_format_new (44100, TRUE, 2));
commit 34adacae3f98c02f34faa292d5af3cfc48ca8854
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Oct 25 17:09:11 2008 +0200
call parent mark function
diff --git a/swfdec/swfdec_as_relay.c b/swfdec/swfdec_as_relay.c
index b0ee439..85c5527 100644
--- a/swfdec/swfdec_as_relay.c
+++ b/swfdec/swfdec_as_relay.c
@@ -36,6 +36,8 @@ swfdec_as_relay_mark (SwfdecGcObject *object)
if (relay->relay)
swfdec_gc_object_mark (relay->relay);
+
+ SWFDEC_GC_OBJECT_CLASS (swfdec_as_relay_parent_class)->mark (object);
}
static void
commit 87f126e329bcfd04daaa2f06140bbc445b2e9272
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Oct 25 16:43:15 2008 +0200
remove collected strings from our interned strings hash
This was a cause for lots of random invalid read/write issues
diff --git a/swfdec/swfdec_as_context.c b/swfdec/swfdec_as_context.c
index adda5b8..6726536 100644
--- a/swfdec/swfdec_as_context.c
+++ b/swfdec/swfdec_as_context.c
@@ -274,6 +274,9 @@ swfdec_as_context_collect_string (SwfdecAsContext *context, gpointer gc)
SwfdecAsStringValue *string;
string = gc;
+ if (!g_hash_table_remove (context->interned_strings, string->string)) {
+ g_assert_not_reached ();
+ }
swfdec_as_gcable_free (context, gc, sizeof (SwfdecAsStringValue) + string->length + 1);
}
commit 9534c9aba28615d2b08fab67d9a3b14b7ce16e01
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Oct 25 15:52:43 2008 +0200
properly mark the relay during GC
diff --git a/swfdec/swfdec_as_object.c b/swfdec/swfdec_as_object.c
index 84f7a8a..92f7dc8 100644
--- a/swfdec/swfdec_as_object.c
+++ b/swfdec/swfdec_as_object.c
@@ -245,6 +245,8 @@ swfdec_as_object_mark (SwfdecGcObject *gc)
g_hash_table_foreach (object->properties, swfdec_gc_object_mark_property, NULL);
if (object->watches)
g_hash_table_foreach (object->watches, swfdec_gc_object_mark_watch, NULL);
+ if (object->relay)
+ swfdec_gc_object_mark (object->relay);
g_slist_foreach (object->interfaces, (GFunc) swfdec_gc_object_mark, NULL);
}
commit fc90f9aeb4f89083443ed951ffd16bd65ef37277
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Oct 25 15:27:38 2008 +0200
make Vivified compile again
I'd be surprised if it still worked
diff --git a/vivified/core/vivi_breakpoint.c b/vivified/core/vivi_breakpoint.c
index df47627..d83ab6e 100644
--- a/vivified/core/vivi_breakpoint.c
+++ b/vivified/core/vivi_breakpoint.c
@@ -1,5 +1,5 @@
/* Vivified
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ * Copyright (C) 2007-2008 Benjamin Otte <otte at gnome.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -26,7 +26,7 @@
#include "vivi_function.h"
#include "vivi_wrap.h"
-G_DEFINE_TYPE (ViviBreakpoint, vivi_breakpoint, SWFDEC_TYPE_AS_OBJECT)
+G_DEFINE_TYPE (ViviBreakpoint, vivi_breakpoint, SWFDEC_TYPE_AS_RELAY)
static gboolean
vivi_breakpoint_step (ViviDebugger *debugger, ViviBreakpoint *breakpoint)
diff --git a/vivified/core/vivi_breakpoint.h b/vivified/core/vivi_breakpoint.h
index ed9af66..3b25274 100644
--- a/vivified/core/vivi_breakpoint.h
+++ b/vivified/core/vivi_breakpoint.h
@@ -1,5 +1,5 @@
/* Vivified
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ * Copyright (C) 2007-2008 Benjamin Otte <otte at gnome.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -38,7 +38,7 @@ typedef struct _ViviBreakpointClass ViviBreakpointClass;
struct _ViviBreakpoint
{
- SwfdecAsObject object;
+ SwfdecAsRelay relay;
gboolean active; /* only active breakpoints receive events */
gulong handlers[5]; /* handlers for every signal of the debugger or 0 */
@@ -46,7 +46,7 @@ struct _ViviBreakpoint
struct _ViviBreakpointClass
{
- SwfdecAsObjectClass object_class;
+ SwfdecAsRelayClass relay_class;
};
GType vivi_breakpoint_get_type (void);
diff --git a/vivified/core/vivi_function.c b/vivified/core/vivi_function.c
index f61ce9a..0c7c73d 100644
--- a/vivified/core/vivi_function.c
+++ b/vivified/core/vivi_function.c
@@ -53,7 +53,6 @@ void
vivi_function_init_context (ViviApplication *app)
{
SwfdecAsContext *cx = SWFDEC_AS_CONTEXT (app);
- SwfdecAsFunction *fun;
SwfdecAsObject *obj;
SwfdecAsValue val;
guint i;
@@ -68,16 +67,6 @@ vivi_function_init_context (ViviApplication *app)
swfdec_as_context_get_string (cx, functions[i].name),
functions[i].fun);
}
- /* FIXME: find a better solution than this */
- fun = swfdec_as_object_add_function (obj,
- swfdec_as_context_get_string (cx, "Breakpoint"),
- functions[i].fun);
- swfdec_as_native_function_set_construct_type (SWFDEC_AS_NATIVE_FUNCTION (fun),
- VIVI_TYPE_BREAKPOINT);
- obj = swfdec_as_object_new (cx, NULL);
- SWFDEC_AS_VALUE_SET_OBJECT (&val, obj);
- swfdec_as_object_set_variable (SWFDEC_AS_OBJECT (fun),
- swfdec_as_context_get_string (cx, "prototype"), &val);
g_signal_connect (app, "message", G_CALLBACK (vivi_function_not_reached), NULL);
vivi_application_execute (app, vivi_initialize);
commit 1f026438ec921dd86f7c436985694255d2ca365d
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Oct 25 15:18:58 2008 +0200
get rid of support for construction types
diff --git a/swfdec/swfdec_as_native_function.c b/swfdec/swfdec_as_native_function.c
index 0bac0e3..4daea74 100644
--- a/swfdec/swfdec_as_native_function.c
+++ b/swfdec/swfdec_as_native_function.c
@@ -63,12 +63,6 @@ swfdec_as_native_function_call (SwfdecAsFunction *function, SwfdecAsObject *this
SwfdecAsValue rval = { 0, };
SwfdecAsValue *argv;
- if (construct && native->construct_type != 0 &&
- !g_type_is_a (G_OBJECT_TYPE (thisp), native->construct_type)) {
- SWFDEC_FIXME ("Swfdec can't handle call to native constructor with invalid type");
- return;
- }
-
g_assert (native->name);
swfdec_as_frame_init_native (&frame, cx);
@@ -198,27 +192,6 @@ swfdec_as_native_function_new (SwfdecAsContext *context, const char *name,
}
/**
- * swfdec_as_native_function_set_construct_type:
- * @function: a #SwfdecAsNativeFunction
- * @type: #GType used when constructing an object with @function
- *
- * Sets the @type to be used when using @function as a constructor. If this is
- * not set, using @function as a constructor will create a #SwfdecAsObject.
- **/
-void
-swfdec_as_native_function_set_construct_type (SwfdecAsNativeFunction *function, GType type)
-{
- GTypeQuery query;
-
- g_return_if_fail (SWFDEC_IS_AS_NATIVE_FUNCTION (function));
- g_return_if_fail (g_type_is_a (type, SWFDEC_TYPE_AS_OBJECT));
-
- g_type_query (type, &query);
- function->construct_type = type;
- function->construct_size = query.instance_size;
-}
-
-/**
* SWFDEC_AS_CHECK:
* @type: required type of this object or 0 for ignoring
* @result: converted this object
diff --git a/swfdec/swfdec_as_native_function.h b/swfdec/swfdec_as_native_function.h
index 283d3cc..a8f7d35 100644
--- a/swfdec/swfdec_as_native_function.h
+++ b/swfdec/swfdec_as_native_function.h
@@ -42,9 +42,6 @@ struct _SwfdecAsNativeFunction {
SwfdecAsNative native; /* native call or NULL when script */
char * name; /* function name */
- /* constructor info */
- GType construct_type; /* type used when used as a constructor or 0 */
- guint construct_size; /* instance size of type */
};
struct _SwfdecAsNativeFunctionClass {
@@ -58,10 +55,6 @@ SwfdecAsFunction *swfdec_as_native_function_new (SwfdecAsContext * context,
SwfdecAsNative native,
SwfdecAsObject * prototype);
-void swfdec_as_native_function_set_construct_type
- (SwfdecAsNativeFunction *function,
- GType type);
-
gboolean swfdec_as_native_function_check (SwfdecAsContext * cx,
SwfdecAsObject * object,
GType type,
diff --git a/swfdec/swfdec_as_object.c b/swfdec/swfdec_as_object.c
index 20cf7c2..84f7a8a 100644
--- a/swfdec/swfdec_as_object.c
+++ b/swfdec/swfdec_as_object.c
@@ -1192,50 +1192,24 @@ swfdec_as_object_do_nothing (SwfdecAsContext *cx, SwfdecAsObject *object,
SwfdecAsFunction *
swfdec_as_object_add_function (SwfdecAsObject *object, const char *name, SwfdecAsNative native)
{
- g_return_val_if_fail (SWFDEC_IS_AS_OBJECT (object), NULL);
- g_return_val_if_fail (name != NULL, NULL);
-
- return swfdec_as_object_add_constructor (object, name, 0, native, NULL);
-}
-
-/**
- * swfdec_as_object_add_constructor:
- * @object: a #SwfdecAsObject
- * @name: name of the function. The string does not have to be
- * garbage-collected.
- * @construct_type: type used when using this function as a constructor. May
- * be 0 to use the default type.
- * @native: a native function or %NULL to just not do anything
- * @prototype: An optional object to be set as the "prototype" property of the
- * new function. The prototype will be hidden and constant.
- *
- * Adds @native as a constructor named @name to @object. The newly added variable
- * will not be enumerated.
- *
- * Returns: the newly created #SwfdecAsFunction
- **/
-SwfdecAsFunction *
-swfdec_as_object_add_constructor (SwfdecAsObject *object, const char *name,
- GType construct_type, SwfdecAsNative native, SwfdecAsObject *prototype)
-{
SwfdecAsFunction *function;
+ SwfdecAsContext *cx;
SwfdecAsValue val;
g_return_val_if_fail (SWFDEC_IS_AS_OBJECT (object), NULL);
g_return_val_if_fail (name != NULL, NULL);
- g_return_val_if_fail (construct_type == 0 || g_type_is_a (construct_type, SWFDEC_TYPE_AS_OBJECT), NULL);
- g_return_val_if_fail (prototype == NULL || SWFDEC_IS_AS_OBJECT (prototype), NULL);
+ cx = swfdec_gc_object_get_context (object);
if (!native)
native = swfdec_as_object_do_nothing;
- function = swfdec_as_native_function_new (swfdec_gc_object_get_context (object), name, native, prototype);
- if (construct_type != 0)
- swfdec_as_native_function_set_construct_type (SWFDEC_AS_NATIVE_FUNCTION (function), construct_type);
- name = swfdec_as_context_get_string (swfdec_gc_object_get_context (object), name);
+ function = swfdec_as_native_function_new (cx, name, native, NULL);
+
+ name = swfdec_as_context_get_string (cx, name);
SWFDEC_AS_VALUE_SET_OBJECT (&val, SWFDEC_AS_OBJECT (function));
/* FIXME: I'd like to make sure no such property exists yet */
swfdec_as_object_set_variable_and_flags (object, name, &val,
SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
+
return function;
}
@@ -1324,48 +1298,12 @@ swfdec_as_object_create (SwfdecAsFunction *fun, guint n_args,
SwfdecAsValue val;
SwfdecAsObject *new;
SwfdecAsContext *context;
- SwfdecAsFunction *cur;
- guint i, size = 0;
- GType type = 0;
g_return_if_fail (SWFDEC_IS_AS_FUNCTION (fun));
- // FIXME: The way we decide object's type is wrong
- // It seems to be actually possible to change the type inside a constructor
- // (many times) by changing this.__proto__.__constructor__ and calling super
-
context = swfdec_gc_object_get_context (fun);
- cur = fun;
- i = 0;
- do {
- if (SWFDEC_IS_AS_NATIVE_FUNCTION (cur)) {
- SwfdecAsNativeFunction *native = SWFDEC_AS_NATIVE_FUNCTION (cur);
- if (native->construct_size) {
- type = native->construct_type;
- size = native->construct_size;
- break;
- }
- }
- i++;
- swfdec_as_object_get_variable (SWFDEC_AS_OBJECT (cur), SWFDEC_AS_STR_prototype, &val);
- if (SWFDEC_AS_VALUE_IS_OBJECT (&val)) {
- SwfdecAsObject *proto = SWFDEC_AS_VALUE_GET_OBJECT (&val);
- swfdec_as_object_get_variable (proto, SWFDEC_AS_STR___constructor__, &val);
- if (SWFDEC_AS_VALUE_IS_OBJECT (&val)) {
- cur = (SwfdecAsFunction *) SWFDEC_AS_VALUE_GET_OBJECT (&val);
- if (SWFDEC_IS_AS_FUNCTION (cur)) {
- continue;
- }
- }
- }
- cur = NULL;
- } while (type == 0 && cur != NULL && i < SWFDEC_AS_OBJECT_PROTOTYPE_RECURSION_LIMIT);
- if (type == 0) {
- type = SWFDEC_TYPE_AS_OBJECT;
- size = sizeof (SwfdecAsObject);
- }
- new = g_object_new (type, "context", context, NULL);
+ new = g_object_new (SWFDEC_TYPE_AS_OBJECT, "context", context, NULL);
/* set initial variables */
if (swfdec_as_object_get_variable (SWFDEC_AS_OBJECT (fun), SWFDEC_AS_STR_prototype, &val)) {
swfdec_as_object_set_variable_and_flags (new, SWFDEC_AS_STR___proto__,
commit ec271e23796c19fa530986b5e1cab6e5afedf2b4
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Oct 25 15:03:40 2008 +0200
get rid of constuct function types in the test runner
diff --git a/test/swfdec_test_buffer.c b/test/swfdec_test_buffer.c
index e26fc97..07928c9 100644
--- a/test/swfdec_test_buffer.c
+++ b/test/swfdec_test_buffer.c
@@ -136,7 +136,7 @@ swfdec_test_diff_buffers (SwfdecBuffer *buf1, SwfdecBuffer *buf2, GError **error
return diff;
}
-SWFDEC_TEST_FUNCTION ("Buffer_diff", swfdec_test_buffer_diff, 0)
+SWFDEC_TEST_FUNCTION ("Buffer_diff", swfdec_test_buffer_diff)
void
swfdec_test_buffer_diff (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -169,7 +169,7 @@ swfdec_test_buffer_diff (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc
}
}
-SWFDEC_TEST_FUNCTION ("Buffer_find", swfdec_test_buffer_find, 0)
+SWFDEC_TEST_FUNCTION ("Buffer_find", swfdec_test_buffer_find)
void
swfdec_test_buffer_find (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -187,7 +187,7 @@ swfdec_test_buffer_find (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc
swfdec_as_value_set_integer (cx, retval, found - buffer->buffer->data);
}
-SWFDEC_TEST_FUNCTION ("Buffer_load", swfdec_test_buffer_load, 0)
+SWFDEC_TEST_FUNCTION ("Buffer_load", swfdec_test_buffer_load)
void
swfdec_test_buffer_load (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -210,7 +210,7 @@ swfdec_test_buffer_load (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc
SWFDEC_AS_VALUE_SET_OBJECT (retval, swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (buffer)));
}
-SWFDEC_TEST_FUNCTION ("Buffer_sub", swfdec_test_buffer_sub, 0)
+SWFDEC_TEST_FUNCTION ("Buffer_sub", swfdec_test_buffer_sub)
void
swfdec_test_buffer_sub (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -233,7 +233,7 @@ swfdec_test_buffer_sub (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SWFDEC_AS_VALUE_SET_OBJECT (retval, swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (sub)));
}
-SWFDEC_TEST_FUNCTION ("Buffer_toString", swfdec_test_buffer_toString, 0)
+SWFDEC_TEST_FUNCTION ("Buffer_toString", swfdec_test_buffer_toString)
void
swfdec_test_buffer_toString (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -292,7 +292,7 @@ swfdec_test_buffer_from_args (SwfdecAsContext *cx, guint argc, SwfdecAsValue *ar
return buffer;
}
-SWFDEC_TEST_FUNCTION ("Buffer", swfdec_test_buffer_create, NULL)
+SWFDEC_TEST_FUNCTION ("Buffer", swfdec_test_buffer_create)
void
swfdec_test_buffer_create (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
diff --git a/test/swfdec_test_function.c b/test/swfdec_test_function.c
index aa997e5..6d686b1 100644
--- a/test/swfdec_test_function.c
+++ b/test/swfdec_test_function.c
@@ -38,15 +38,14 @@
/* include swfdec_test_function_list with special macro definition, so we get a nice
* way to initialize it */
#undef SWFDEC_TEST_FUNCTION
-#define SWFDEC_TEST_FUNCTION(name, fun, type) \
- { name, fun, type },
+#define SWFDEC_TEST_FUNCTION(name, fun) \
+ { name, fun },
static const struct {
const char * name;
SwfdecAsNative fun;
- GType (* type) (void);
} functions[] = {
#include "swfdec_test_function_list.h"
- { NULL, NULL, NULL }
+ { NULL, NULL }
};
#undef SWFDEC_TEST_FUNCTION
@@ -65,10 +64,9 @@ swfdec_test_function_init_context (SwfdecAsContext *cx)
swfdec_as_context_get_string (cx, "Native"), &val);
for (i = 0; functions[i].name; i++) {
- GType type = functions[i].type ? functions[i].type () : 0;
- swfdec_as_object_add_constructor (obj,
+ swfdec_as_object_add_function (obj,
swfdec_as_context_get_string (cx, functions[i].name),
- type, functions[i].fun, NULL);
+ functions[i].fun);
}
}
diff --git a/test/swfdec_test_function.h b/test/swfdec_test_function.h
index a523fcd..7868b3a 100644
--- a/test/swfdec_test_function.h
+++ b/test/swfdec_test_function.h
@@ -25,7 +25,7 @@
G_BEGIN_DECLS
-#define SWFDEC_TEST_FUNCTION(name, fun, type) \
+#define SWFDEC_TEST_FUNCTION(name, fun) \
void fun (SwfdecAsContext *cx, SwfdecAsObject *this, guint argc, SwfdecAsValue *argv, SwfdecAsValue *retval);
void swfdec_test_function_init_context (SwfdecAsContext *cx);
diff --git a/test/swfdec_test_global.c b/test/swfdec_test_global.c
index 7edd8d2..1f64faa 100644
--- a/test/swfdec_test_global.c
+++ b/test/swfdec_test_global.c
@@ -26,7 +26,7 @@
#include "swfdec_test_function.h"
#include "swfdec_test_initialize.h"
-SWFDEC_TEST_FUNCTION ("print", swfdec_test_print, 0)
+SWFDEC_TEST_FUNCTION ("print", swfdec_test_print)
void
swfdec_test_print (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
diff --git a/test/swfdec_test_http_request.c b/test/swfdec_test_http_request.c
index 9f00671..9beddf3 100644
--- a/test/swfdec_test_http_request.c
+++ b/test/swfdec_test_http_request.c
@@ -106,7 +106,7 @@ swfdec_test_http_request_init (SwfdecTestHTTPRequest *this)
/*** AS CODE ***/
-SWFDEC_TEST_FUNCTION ("HTTPRequest_toString", swfdec_test_http_request_toString, 0)
+SWFDEC_TEST_FUNCTION ("HTTPRequest_toString", swfdec_test_http_request_toString)
void
swfdec_test_http_request_toString (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -127,7 +127,7 @@ swfdec_test_http_request_toString (SwfdecAsContext *cx, SwfdecAsObject *object,
swfdec_as_context_give_string (cx, g_string_free (string, FALSE)));
}
-SWFDEC_TEST_FUNCTION ("HTTPRequest_get_server", swfdec_test_http_request_get_server, 0)
+SWFDEC_TEST_FUNCTION ("HTTPRequest_get_server", swfdec_test_http_request_get_server)
void
swfdec_test_http_request_get_server (SwfdecAsContext *cx,
SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
@@ -140,7 +140,7 @@ swfdec_test_http_request_get_server (SwfdecAsContext *cx,
SWFDEC_AS_VALUE_SET_OBJECT (retval, SWFDEC_AS_OBJECT (request->server));
}
-SWFDEC_TEST_FUNCTION ("HTTPRequest_get_url", swfdec_test_http_request_get_url, 0)
+SWFDEC_TEST_FUNCTION ("HTTPRequest_get_url", swfdec_test_http_request_get_url)
void
swfdec_test_http_request_get_url (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -156,7 +156,7 @@ swfdec_test_http_request_get_url (SwfdecAsContext *cx, SwfdecAsObject *object,
swfdec_as_context_give_string (cx, soup_uri_to_string (uri, FALSE)));
}
-SWFDEC_TEST_FUNCTION ("HTTPRequest_get_path", swfdec_test_http_request_get_path, 0)
+SWFDEC_TEST_FUNCTION ("HTTPRequest_get_path", swfdec_test_http_request_get_path)
void
swfdec_test_http_request_get_path (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -189,7 +189,7 @@ swfdec_test_http_request_foreach_set_headers (const char *name,
swfdec_as_context_get_string (cx, name), &val);
}
-SWFDEC_TEST_FUNCTION ("HTTPRequest_get_headers", swfdec_test_http_request_get_headers, 0)
+SWFDEC_TEST_FUNCTION ("HTTPRequest_get_headers", swfdec_test_http_request_get_headers)
void
swfdec_test_http_request_get_headers (SwfdecAsContext *cx,
SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
@@ -208,7 +208,7 @@ swfdec_test_http_request_get_headers (SwfdecAsContext *cx,
SWFDEC_AS_VALUE_SET_OBJECT (retval, request->headers);
}
-SWFDEC_TEST_FUNCTION ("HTTPRequest_get_contentType", swfdec_test_http_request_get_contentType, 0)
+SWFDEC_TEST_FUNCTION ("HTTPRequest_get_contentType", swfdec_test_http_request_get_contentType)
void
swfdec_test_http_request_get_contentType (SwfdecAsContext *cx,
SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
@@ -230,7 +230,7 @@ swfdec_test_http_request_get_contentType (SwfdecAsContext *cx,
}
}
-SWFDEC_TEST_FUNCTION ("HTTPRequest_set_contentType", swfdec_test_http_request_set_contentType, 0)
+SWFDEC_TEST_FUNCTION ("HTTPRequest_set_contentType", swfdec_test_http_request_set_contentType)
void
swfdec_test_http_request_set_contentType (SwfdecAsContext *cx,
SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
@@ -255,7 +255,7 @@ swfdec_test_http_request_set_contentType (SwfdecAsContext *cx,
}
}
-SWFDEC_TEST_FUNCTION ("HTTPRequest_get_statusCode", swfdec_test_http_request_get_statusCode, 0)
+SWFDEC_TEST_FUNCTION ("HTTPRequest_get_statusCode", swfdec_test_http_request_get_statusCode)
void
swfdec_test_http_request_get_statusCode (SwfdecAsContext *cx,
SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
@@ -268,7 +268,7 @@ swfdec_test_http_request_get_statusCode (SwfdecAsContext *cx,
swfdec_as_value_set_integer (cx, retval, request->message->status_code);
}
-SWFDEC_TEST_FUNCTION ("HTTPRequest_set_statusCode", swfdec_test_http_request_set_statusCode, 0)
+SWFDEC_TEST_FUNCTION ("HTTPRequest_set_statusCode", swfdec_test_http_request_set_statusCode)
void
swfdec_test_http_request_set_statusCode (SwfdecAsContext *cx,
SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
@@ -290,7 +290,7 @@ swfdec_test_http_request_set_statusCode (SwfdecAsContext *cx,
soup_message_set_status (request->message, status_code);
}
-SWFDEC_TEST_FUNCTION ("HTTPRequest_send", swfdec_test_http_request_send, 0)
+SWFDEC_TEST_FUNCTION ("HTTPRequest_send", swfdec_test_http_request_send)
void
swfdec_test_http_request_send (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -324,7 +324,7 @@ swfdec_test_http_request_send (SwfdecAsContext *cx, SwfdecAsObject *object,
request->state = SWFDEC_TEST_HTTP_REQUEST_STATE_SENDING;
}
-SWFDEC_TEST_FUNCTION ("HTTPRequest_close", swfdec_test_http_request_close, 0)
+SWFDEC_TEST_FUNCTION ("HTTPRequest_close", swfdec_test_http_request_close)
void
swfdec_test_http_request_close (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *retval)
diff --git a/test/swfdec_test_http_server.c b/test/swfdec_test_http_server.c
index 94593b0..4148e94 100644
--- a/test/swfdec_test_http_server.c
+++ b/test/swfdec_test_http_server.c
@@ -153,7 +153,7 @@ swfdec_test_http_server_init (SwfdecTestHTTPServer *server)
/*** AS CODE ***/
-SWFDEC_TEST_FUNCTION ("HTTPServer_get_port", swfdec_test_http_server_get_port, 0)
+SWFDEC_TEST_FUNCTION ("HTTPServer_get_port", swfdec_test_http_server_get_port)
void
swfdec_test_http_server_get_port (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -165,7 +165,7 @@ swfdec_test_http_server_get_port (SwfdecAsContext *cx, SwfdecAsObject *object,
swfdec_as_value_set_integer (cx, retval, server->port);
}
-SWFDEC_TEST_FUNCTION ("HTTPServer_getRequest", swfdec_test_http_server_get_request, 0)
+SWFDEC_TEST_FUNCTION ("HTTPServer_getRequest", swfdec_test_http_server_get_request)
void
swfdec_test_http_server_get_request (SwfdecAsContext *cx,
SwfdecAsObject *object, guint argc, SwfdecAsValue *argv,
diff --git a/test/swfdec_test_image.c b/test/swfdec_test_image.c
index be88a4b..a988194 100644
--- a/test/swfdec_test_image.c
+++ b/test/swfdec_test_image.c
@@ -136,7 +136,7 @@ buffer_diff_core (unsigned char *buf_a,
return result;
}
-SWFDEC_TEST_FUNCTION ("Image_compare", swfdec_test_image_compare, 0)
+SWFDEC_TEST_FUNCTION ("Image_compare", swfdec_test_image_compare)
void
swfdec_test_image_compare (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -180,7 +180,7 @@ swfdec_test_image_compare (SwfdecAsContext *cx, SwfdecAsObject *object, guint ar
}
}
-SWFDEC_TEST_FUNCTION ("Image_save", swfdec_test_image_save, 0)
+SWFDEC_TEST_FUNCTION ("Image_save", swfdec_test_image_save)
void
swfdec_test_image_save (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -203,7 +203,7 @@ swfdec_test_image_save (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SWFDEC_AS_VALUE_SET_BOOLEAN (retval, TRUE);
}
-SWFDEC_TEST_FUNCTION ("Image", swfdec_test_image_create, NULL)
+SWFDEC_TEST_FUNCTION ("Image", swfdec_test_image_create)
void
swfdec_test_image_create (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
diff --git a/test/swfdec_test_socket.c b/test/swfdec_test_socket.c
index ad5413b..bd2f5a5 100644
--- a/test/swfdec_test_socket.c
+++ b/test/swfdec_test_socket.c
@@ -93,7 +93,7 @@ swfdec_test_socket_init (SwfdecTestSocket *sock)
/*** AS CODE ***/
-SWFDEC_TEST_FUNCTION ("Socket_send", swfdec_test_socket_send, 0)
+SWFDEC_TEST_FUNCTION ("Socket_send", swfdec_test_socket_send)
void
swfdec_test_socket_send (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -112,7 +112,7 @@ swfdec_test_socket_send (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc
swfdec_buffer_unref (buffer);
}
-SWFDEC_TEST_FUNCTION ("Socket_receive", swfdec_test_socket_receive, 0)
+SWFDEC_TEST_FUNCTION ("Socket_receive", swfdec_test_socket_receive)
void
swfdec_test_socket_receive (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -143,7 +143,7 @@ swfdec_test_socket_receive (SwfdecAsContext *cx, SwfdecAsObject *object, guint a
SWFDEC_AS_RELAY (swfdec_test_buffer_new (cx, buffer))));
}
-SWFDEC_TEST_FUNCTION ("Socket_error", swfdec_test_socket_error, 0)
+SWFDEC_TEST_FUNCTION ("Socket_error", swfdec_test_socket_error)
void
swfdec_test_socket_error (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -155,7 +155,7 @@ swfdec_test_socket_error (SwfdecAsContext *cx, SwfdecAsObject *object, guint arg
swfdec_test_socket_do_close (sock, FALSE);
}
-SWFDEC_TEST_FUNCTION ("Socket_close", swfdec_test_socket_close_as, 0)
+SWFDEC_TEST_FUNCTION ("Socket_close", swfdec_test_socket_close_as)
void
swfdec_test_socket_close_as (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -167,7 +167,7 @@ swfdec_test_socket_close_as (SwfdecAsContext *cx, SwfdecAsObject *object, guint
swfdec_test_socket_do_close (sock, TRUE);
}
-SWFDEC_TEST_FUNCTION ("Socket_get_closed", swfdec_test_socket_get_closed, 0)
+SWFDEC_TEST_FUNCTION ("Socket_get_closed", swfdec_test_socket_get_closed)
void
swfdec_test_socket_get_closed (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
diff --git a/test/swfdec_test_test.c b/test/swfdec_test_test.c
index d7c3b91..5e49d36 100644
--- a/test/swfdec_test_test.c
+++ b/test/swfdec_test_test.c
@@ -210,7 +210,7 @@ swfdec_test_do_reset (SwfdecTestTest *test, const char *filename)
swfdec_test_test_load_plugin (test, filename);
}
-SWFDEC_TEST_FUNCTION ("Test_advance", swfdec_test_test_advance, 0)
+SWFDEC_TEST_FUNCTION ("Test_advance", swfdec_test_test_advance)
void
swfdec_test_test_advance (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -230,7 +230,7 @@ swfdec_test_test_advance (SwfdecAsContext *cx, SwfdecAsObject *object, guint arg
}
}
-SWFDEC_TEST_FUNCTION ("Test_reset", swfdec_test_test_reset, 0)
+SWFDEC_TEST_FUNCTION ("Test_reset", swfdec_test_test_reset)
void
swfdec_test_test_reset (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -243,7 +243,7 @@ swfdec_test_test_reset (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
swfdec_test_do_reset (test, filename);
}
-SWFDEC_TEST_FUNCTION ("Test_mouse_move", swfdec_test_test_mouse_move, 0)
+SWFDEC_TEST_FUNCTION ("Test_mouse_move", swfdec_test_test_mouse_move)
void
swfdec_test_test_mouse_move (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -263,7 +263,7 @@ swfdec_test_test_mouse_move (SwfdecAsContext *cx, SwfdecAsObject *object, guint
}
}
-SWFDEC_TEST_FUNCTION ("Test_mouse_press", swfdec_test_test_mouse_press, 0)
+SWFDEC_TEST_FUNCTION ("Test_mouse_press", swfdec_test_test_mouse_press)
void
swfdec_test_test_mouse_press (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -285,7 +285,7 @@ swfdec_test_test_mouse_press (SwfdecAsContext *cx, SwfdecAsObject *object, guint
}
}
-SWFDEC_TEST_FUNCTION ("Test_mouse_release", swfdec_test_test_mouse_release, 0)
+SWFDEC_TEST_FUNCTION ("Test_mouse_release", swfdec_test_test_mouse_release)
void
swfdec_test_test_mouse_release (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -307,7 +307,7 @@ swfdec_test_test_mouse_release (SwfdecAsContext *cx, SwfdecAsObject *object, gui
}
}
-SWFDEC_TEST_FUNCTION ("Test_render", swfdec_test_test_render, 0)
+SWFDEC_TEST_FUNCTION ("Test_render", swfdec_test_test_render)
void
swfdec_test_test_render (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -337,7 +337,7 @@ swfdec_test_test_render (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc
}
}
-SWFDEC_TEST_FUNCTION ("Test", swfdec_test_test_new, 0)
+SWFDEC_TEST_FUNCTION ("Test", swfdec_test_test_new)
void
swfdec_test_test_new (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -357,7 +357,7 @@ swfdec_test_test_new (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SWFDEC_AS_VALUE_SET_OBJECT (retval, object);
}
-SWFDEC_TEST_FUNCTION ("Test_get_launched", swfdec_test_test_get_launched, 0)
+SWFDEC_TEST_FUNCTION ("Test_get_launched", swfdec_test_test_get_launched)
void
swfdec_test_test_get_launched (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -375,7 +375,7 @@ swfdec_test_test_get_launched (SwfdecAsContext *cx, SwfdecAsObject *object,
SWFDEC_AS_VALUE_SET_OBJECT (retval, swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (buf)));
}
-SWFDEC_TEST_FUNCTION ("Socket_getSocket", swfdec_test_test_getSocket, 0)
+SWFDEC_TEST_FUNCTION ("Socket_getSocket", swfdec_test_test_getSocket)
void
swfdec_test_test_getSocket (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -401,7 +401,7 @@ swfdec_test_test_getSocket (SwfdecAsContext *cx, SwfdecAsObject *object, guint a
}
}
-SWFDEC_TEST_FUNCTION ("Test_get_trace", swfdec_test_test_get_trace, 0)
+SWFDEC_TEST_FUNCTION ("Test_get_trace", swfdec_test_test_get_trace)
void
swfdec_test_test_get_trace (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -419,7 +419,7 @@ swfdec_test_test_get_trace (SwfdecAsContext *cx, SwfdecAsObject *object, guint a
SWFDEC_AS_VALUE_SET_OBJECT (retval, swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (buf)));
}
-SWFDEC_TEST_FUNCTION ("Test_get_quit", swfdec_test_test_get_quit, 0)
+SWFDEC_TEST_FUNCTION ("Test_get_quit", swfdec_test_test_get_quit)
void
swfdec_test_test_get_quit (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -432,7 +432,7 @@ swfdec_test_test_get_quit (SwfdecAsContext *cx, SwfdecAsObject *object, guint ar
SWFDEC_AS_VALUE_SET_BOOLEAN (retval, !test->plugin_loaded || test->plugin_error || test->plugin_quit);
}
-SWFDEC_TEST_FUNCTION ("Test_get_rate", swfdec_test_test_get_rate, 0)
+SWFDEC_TEST_FUNCTION ("Test_get_rate", swfdec_test_test_get_rate)
void
swfdec_test_test_get_rate (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
commit ebf03d1ddc44d44ac8111461705058ddf5225f9c
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Oct 25 14:55:32 2008 +0200
make SwfdecTestTest a relay
diff --git a/test/swfdec_test_test.c b/test/swfdec_test_test.c
index 53e9043..d7c3b91 100644
--- a/test/swfdec_test_test.c
+++ b/test/swfdec_test_test.c
@@ -158,7 +158,7 @@ swfdec_test_test_unload_plugin (SwfdecTestTest *test)
/*** SWFDEC_TEST_TEST ***/
-G_DEFINE_TYPE (SwfdecTestTest, swfdec_test_test, SWFDEC_TYPE_AS_OBJECT)
+G_DEFINE_TYPE (SwfdecTestTest, swfdec_test_test, SWFDEC_TYPE_AS_RELAY)
static void
swfdec_test_test_dispose (GObject *object)
@@ -303,7 +303,7 @@ swfdec_test_test_mouse_release (SwfdecAsContext *cx, SwfdecAsObject *object, gui
if (test->plugin.advance) {
test->plugin.mouse_release (&test->plugin, x, y, button);
} else {
- swfdec_test_throw (cx, "plugin doesn't implement mouse_press");
+ swfdec_test_throw (cx, "plugin doesn't implement mouse_release");
}
}
@@ -333,11 +333,11 @@ swfdec_test_test_render (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc
x, y, w, h);
SWFDEC_AS_VALUE_SET_OBJECT (retval, swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (image)));
} else {
- swfdec_test_throw (cx, "plugin doesn't implement mouse_press");
+ swfdec_test_throw (cx, "plugin doesn't implement render");
}
}
-SWFDEC_TEST_FUNCTION ("Test", swfdec_test_test_new, swfdec_test_test_get_type)
+SWFDEC_TEST_FUNCTION ("Test", swfdec_test_test_new, 0)
void
swfdec_test_test_new (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -345,9 +345,16 @@ swfdec_test_test_new (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecTestTest *test;
const char *filename = NULL;
- SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_TEST, &test, "|s", &filename);
+ if (!swfdec_as_context_is_constructing (cx))
+ return;
+
+ SWFDEC_AS_CHECK (0, NULL, "|s", &filename);
+ test = g_object_new (SWFDEC_TYPE_TEST_TEST, "context", cx, NULL);
swfdec_test_do_reset (test, filename);
+
+ swfdec_as_object_set_relay (object, SWFDEC_AS_RELAY (test));
+ SWFDEC_AS_VALUE_SET_OBJECT (retval, object);
}
SWFDEC_TEST_FUNCTION ("Test_get_launched", swfdec_test_test_get_launched, 0)
diff --git a/test/swfdec_test_test.h b/test/swfdec_test_test.h
index 19d50f3..bc82863 100644
--- a/test/swfdec_test_test.h
+++ b/test/swfdec_test_test.h
@@ -39,7 +39,7 @@ typedef struct _SwfdecTestTestClass SwfdecTestTestClass;
struct _SwfdecTestTest
{
- SwfdecAsObject as_object;
+ SwfdecAsRelay relay;
SwfdecTestPlugin plugin; /* the plugin we use */
GModule * module; /* module we loaded the plugin from or NULL */
@@ -57,7 +57,7 @@ struct _SwfdecTestTest
struct _SwfdecTestTestClass
{
- SwfdecAsObjectClass as_object_class;
+ SwfdecAsRelayClass relay_class;
};
extern char *swfdec_test_plugin_name;
commit 2c6d63314c9816374765d3e5d15303c0ee610490
Author: Benjamin Otte <otte at gnome.org>
Date: Sat Oct 25 14:46:41 2008 +0200
make SwfdecTestImage a relay
diff --git a/test/swfdec_test_image.c b/test/swfdec_test_image.c
index b54f713..be88a4b 100644
--- a/test/swfdec_test_image.c
+++ b/test/swfdec_test_image.c
@@ -28,26 +28,26 @@
#define SWFDEC_TEST_IMAGE_IS_VALID(image) ((image)->surface && \
cairo_surface_status ((image)->surface) == CAIRO_STATUS_SUCCESS)
-SwfdecAsObject *
+SwfdecTestImage *
swfdec_test_image_new (SwfdecAsContext *context, guint width, guint height)
{
- SwfdecAsValue val;
- SwfdecAsObject *ret;
+ SwfdecTestImage *ret;
+ SwfdecAsObject *object;
ret = g_object_new (SWFDEC_TYPE_TEST_IMAGE, "context", context, NULL);
- swfdec_as_object_get_variable (context->global,
- swfdec_as_context_get_string (context, "Image"), &val);
- if (SWFDEC_AS_VALUE_IS_OBJECT (&val))
- swfdec_as_object_set_constructor (ret, SWFDEC_AS_VALUE_GET_OBJECT (&val));
+ ret->surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
+
+ object = swfdec_as_object_new (context, NULL);
+ swfdec_as_object_set_constructor_by_name (object,
+ swfdec_as_context_get_string (context, "Image"), NULL);
+ swfdec_as_object_set_relay (object, SWFDEC_AS_RELAY (ret));
- SWFDEC_TEST_IMAGE (ret)->surface =
- cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
return ret;
}
/*** SWFDEC_TEST_IMAGE ***/
-G_DEFINE_TYPE (SwfdecTestImage, swfdec_test_image, SWFDEC_TYPE_AS_OBJECT)
+G_DEFINE_TYPE (SwfdecTestImage, swfdec_test_image, SWFDEC_TYPE_AS_RELAY)
static void
swfdec_test_image_dispose (GObject *object)
@@ -142,14 +142,16 @@ swfdec_test_image_compare (SwfdecAsContext *cx, SwfdecAsObject *object, guint ar
SwfdecAsValue *argv, SwfdecAsValue *retval)
{
SwfdecTestImage *image, *compare, *diff;
+ SwfdecAsObject *o;
int w, h;
- SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_IMAGE, &image, "O", &compare);
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_IMAGE, &image, "o", &o);
- if (!SWFDEC_IS_TEST_IMAGE (compare))
+ if (!SWFDEC_IS_TEST_IMAGE (o->relay))
return;
+ compare = SWFDEC_TEST_IMAGE (o->relay);
- SWFDEC_AS_VALUE_SET_OBJECT (retval, SWFDEC_AS_OBJECT (image));
+ SWFDEC_AS_VALUE_SET_OBJECT (retval, swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (image)));
if (!SWFDEC_TEST_IMAGE_IS_VALID (image) ||
!SWFDEC_TEST_IMAGE_IS_VALID (compare))
return;
@@ -164,8 +166,6 @@ swfdec_test_image_compare (SwfdecAsContext *cx, SwfdecAsObject *object, guint ar
if (h != cairo_image_surface_get_height (compare->surface))
return;
diff = SWFDEC_TEST_IMAGE (swfdec_test_image_new (cx, w, h));
- if (!diff)
- return;
if (!buffer_diff_core (cairo_image_surface_get_data (image->surface),
cairo_image_surface_get_data (compare->surface),
@@ -203,7 +203,7 @@ swfdec_test_image_save (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SWFDEC_AS_VALUE_SET_BOOLEAN (retval, TRUE);
}
-SWFDEC_TEST_FUNCTION ("Image", swfdec_test_image_create, swfdec_test_image_get_type)
+SWFDEC_TEST_FUNCTION ("Image", swfdec_test_image_create, NULL)
void
swfdec_test_image_create (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
@@ -211,8 +211,15 @@ swfdec_test_image_create (SwfdecAsContext *cx, SwfdecAsObject *object, guint arg
SwfdecTestImage *image;
const char *filename;
- SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_IMAGE, &image, "s", &filename);
+ if (!swfdec_as_context_is_constructing (cx))
+ return;
+
+ SWFDEC_AS_CHECK (0, NULL, "s", &filename);
+ image = g_object_new (SWFDEC_TYPE_TEST_IMAGE, "context", cx, NULL);
image->surface = cairo_image_surface_create_from_png (filename);
+
+ swfdec_as_object_set_relay (object, SWFDEC_AS_RELAY (image));
+ SWFDEC_AS_VALUE_SET_OBJECT (retval, object);
}
diff --git a/test/swfdec_test_image.h b/test/swfdec_test_image.h
index 6de6ccc..5791953 100644
--- a/test/swfdec_test_image.h
+++ b/test/swfdec_test_image.h
@@ -37,21 +37,21 @@ typedef struct _SwfdecTestImageClass SwfdecTestImageClass;
struct _SwfdecTestImage
{
- SwfdecAsObject as_object;
+ SwfdecAsRelay relay;
cairo_surface_t * surface; /* surface or NULL when broken image */
};
struct _SwfdecTestImageClass
{
- SwfdecAsObjectClass as_object_class;
+ SwfdecAsRelayClass relay_class;
};
-GType swfdec_test_image_get_type (void);
+GType swfdec_test_image_get_type (void);
-SwfdecAsObject *swfdec_test_image_new (SwfdecAsContext * context,
- guint width,
- guint height);
+SwfdecTestImage * swfdec_test_image_new (SwfdecAsContext * context,
+ guint width,
+ guint height);
G_END_DECLS
#endif
diff --git a/test/swfdec_test_test.c b/test/swfdec_test_test.c
index 9cee933..53e9043 100644
--- a/test/swfdec_test_test.c
+++ b/test/swfdec_test_test.c
@@ -313,7 +313,7 @@ swfdec_test_test_render (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc
SwfdecAsValue *argv, SwfdecAsValue *retval)
{
SwfdecTestTest *test;
- SwfdecAsObject *image;
+ SwfdecTestImage *image;
int x = 0, y = 0, w = 0, h = 0;
SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_TEST, &test, "|iiii", &x, &y, &w, &h);
@@ -331,7 +331,7 @@ swfdec_test_test_render (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc
test->plugin.screenshot (&test->plugin,
cairo_image_surface_get_data (SWFDEC_TEST_IMAGE (image)->surface),
x, y, w, h);
- SWFDEC_AS_VALUE_SET_OBJECT (retval, image);
+ SWFDEC_AS_VALUE_SET_OBJECT (retval, swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (image)));
} else {
swfdec_test_throw (cx, "plugin doesn't implement mouse_press");
}
commit e2843e15ded8376ea4d60b4c0d3784f1ecd0c678
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Oct 24 15:31:24 2008 +0200
make SwfdecTestBufer a relay
diff --git a/test/swfdec_test_buffer.c b/test/swfdec_test_buffer.c
index b9ddda4..e26fc97 100644
--- a/test/swfdec_test_buffer.c
+++ b/test/swfdec_test_buffer.c
@@ -28,25 +28,26 @@
#include "swfdec_test_function.h"
#include "swfdec_test_utils.h"
-SwfdecAsObject *
+SwfdecTestBuffer *
swfdec_test_buffer_new (SwfdecAsContext *context, SwfdecBuffer *buffer)
{
- SwfdecAsValue val;
- SwfdecAsObject *ret;
+ SwfdecTestBuffer *ret;
+ SwfdecAsObject *object;
ret = g_object_new (SWFDEC_TYPE_TEST_BUFFER, "context", context, NULL);
- swfdec_as_object_get_variable (context->global,
- swfdec_as_context_get_string (context, "Buffer"), &val);
- if (SWFDEC_AS_VALUE_IS_OBJECT (&val))
- swfdec_as_object_set_constructor (ret, SWFDEC_AS_VALUE_GET_OBJECT (&val));
+ ret->buffer = buffer;
+
+ object = swfdec_as_object_new (context, NULL);
+ swfdec_as_object_set_constructor_by_name (object,
+ swfdec_as_context_get_string (context, "Buffer"), NULL);
+ swfdec_as_object_set_relay (object, SWFDEC_AS_RELAY (ret));
- SWFDEC_TEST_BUFFER (ret)->buffer = buffer;
return ret;
}
/*** SWFDEC_TEST_BUFFER ***/
-G_DEFINE_TYPE (SwfdecTestBuffer, swfdec_test_buffer, SWFDEC_TYPE_AS_OBJECT)
+G_DEFINE_TYPE (SwfdecTestBuffer, swfdec_test_buffer, SWFDEC_TYPE_AS_RELAY)
static void
swfdec_test_buffer_dispose (GObject *object)
@@ -141,15 +142,17 @@ swfdec_test_buffer_diff (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc
SwfdecAsValue *argv, SwfdecAsValue *retval)
{
SwfdecTestBuffer *buffer, *compare = NULL;
+ SwfdecAsObject *compare_object;
GError *error = NULL;
char *ret;
- SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_BUFFER, &buffer, "|o", &compare);
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_BUFFER, &buffer, "|o", &compare_object);
- if (!SWFDEC_IS_TEST_BUFFER (compare)) {
+ if (compare_object == NULL || !SWFDEC_IS_TEST_BUFFER (compare_object->relay)) {
swfdec_test_throw (cx, "must pass a buffer to Buffer.diff");
return;
}
+ compare = SWFDEC_TEST_BUFFER (compare_object->relay);
ret = swfdec_test_diff_buffers (compare->buffer, buffer->buffer, &error);
if (ret) {
@@ -190,7 +193,7 @@ swfdec_test_buffer_load (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc
SwfdecAsValue *argv, SwfdecAsValue *retval)
{
SwfdecBuffer *b;
- SwfdecAsObject *buffer;
+ SwfdecTestBuffer *buffer;
const char *filename;
GError *error = NULL;
@@ -204,7 +207,7 @@ swfdec_test_buffer_load (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc
}
buffer = swfdec_test_buffer_new (cx, b);
- SWFDEC_AS_VALUE_SET_OBJECT (retval, buffer);
+ SWFDEC_AS_VALUE_SET_OBJECT (retval, swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (buffer)));
}
SWFDEC_TEST_FUNCTION ("Buffer_sub", swfdec_test_buffer_sub, 0)
@@ -213,8 +216,7 @@ swfdec_test_buffer_sub (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
{
SwfdecBuffer *b;
- SwfdecTestBuffer *buffer;
- SwfdecAsObject *o;
+ SwfdecTestBuffer *buffer, *sub;
guint offset, length = 0;
SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_BUFFER, &buffer, "i|i", &offset, &length);
@@ -227,8 +229,8 @@ swfdec_test_buffer_sub (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
length = buffer->buffer->length - offset;
b = swfdec_buffer_new_subbuffer (buffer->buffer, offset, length);
- o = swfdec_test_buffer_new (cx, b);
- SWFDEC_AS_VALUE_SET_OBJECT (retval, o);
+ sub = swfdec_test_buffer_new (cx, b);
+ SWFDEC_AS_VALUE_SET_OBJECT (retval, swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (sub)));
}
SWFDEC_TEST_FUNCTION ("Buffer_toString", swfdec_test_buffer_toString, 0)
@@ -268,8 +270,8 @@ swfdec_test_buffer_from_args (SwfdecAsContext *cx, guint argc, SwfdecAsValue *ar
SwfdecBuffer *b = NULL;
if (SWFDEC_AS_VALUE_IS_OBJECT (&argv[i])) {
SwfdecAsObject *o = SWFDEC_AS_VALUE_GET_OBJECT (&argv[i]);
- if (SWFDEC_IS_TEST_BUFFER (o))
- b = swfdec_buffer_ref (SWFDEC_TEST_BUFFER (o)->buffer);
+ if (SWFDEC_IS_TEST_BUFFER (o->relay))
+ b = swfdec_buffer_ref (SWFDEC_TEST_BUFFER (o->relay)->buffer);
} else if (SWFDEC_AS_VALUE_IS_NUMBER (&argv[i])) {
b = swfdec_buffer_new (1);
b->data[0] = swfdec_as_value_to_integer (cx, &argv[i]);
@@ -290,19 +292,21 @@ swfdec_test_buffer_from_args (SwfdecAsContext *cx, guint argc, SwfdecAsValue *ar
return buffer;
}
-SWFDEC_TEST_FUNCTION ("Buffer", swfdec_test_buffer_create, swfdec_test_buffer_get_type)
+SWFDEC_TEST_FUNCTION ("Buffer", swfdec_test_buffer_create, NULL)
void
swfdec_test_buffer_create (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
SwfdecAsValue *argv, SwfdecAsValue *retval)
{
SwfdecTestBuffer *buffer;
- SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_BUFFER, &buffer, "");
-
if (!swfdec_as_context_is_constructing (cx))
return;
+ buffer = g_object_new (SWFDEC_TYPE_TEST_BUFFER, "context", cx, NULL);
buffer->buffer = swfdec_test_buffer_from_args (cx, argc, argv);
+ swfdec_as_object_set_relay (object, SWFDEC_AS_RELAY (buffer));
+
+ SWFDEC_AS_VALUE_SET_OBJECT (retval, object);
}
diff --git a/test/swfdec_test_buffer.h b/test/swfdec_test_buffer.h
index 7e70f87..3d29bc2 100644
--- a/test/swfdec_test_buffer.h
+++ b/test/swfdec_test_buffer.h
@@ -37,24 +37,24 @@ typedef struct _SwfdecTestBufferClass SwfdecTestBufferClass;
struct _SwfdecTestBuffer
{
- SwfdecAsObject as_object;
+ SwfdecAsRelay relay;
SwfdecBuffer * buffer;
};
struct _SwfdecTestBufferClass
{
- SwfdecAsObjectClass as_object_class;
+ SwfdecAsRelayClass relay_class;
};
-GType swfdec_test_buffer_get_type (void);
+GType swfdec_test_buffer_get_type (void);
-SwfdecAsObject *swfdec_test_buffer_new (SwfdecAsContext * context,
- SwfdecBuffer * buffer);
+SwfdecTestBuffer * swfdec_test_buffer_new (SwfdecAsContext * context,
+ SwfdecBuffer * buffer);
-SwfdecBuffer * swfdec_test_buffer_from_args (SwfdecAsContext * cx,
- guint argc,
- SwfdecAsValue * argv);
+SwfdecBuffer * swfdec_test_buffer_from_args (SwfdecAsContext * cx,
+ guint argc,
+ SwfdecAsValue * argv);
G_END_DECLS
#endif
diff --git a/test/swfdec_test_socket.c b/test/swfdec_test_socket.c
index d6dcba7..ad5413b 100644
--- a/test/swfdec_test_socket.c
+++ b/test/swfdec_test_socket.c
@@ -139,7 +139,8 @@ swfdec_test_socket_receive (SwfdecAsContext *cx, SwfdecAsObject *object, guint a
buffer = swfdec_buffer_queue_pull (sock->receive_queue, depth);
}
}
- SWFDEC_AS_VALUE_SET_OBJECT (retval, swfdec_test_buffer_new (cx, buffer));
+ SWFDEC_AS_VALUE_SET_OBJECT (retval, swfdec_as_relay_get_as_object (
+ SWFDEC_AS_RELAY (swfdec_test_buffer_new (cx, buffer))));
}
SWFDEC_TEST_FUNCTION ("Socket_error", swfdec_test_socket_error, 0)
diff --git a/test/swfdec_test_test.c b/test/swfdec_test_test.c
index ee16a2a..9cee933 100644
--- a/test/swfdec_test_test.c
+++ b/test/swfdec_test_test.c
@@ -356,7 +356,7 @@ swfdec_test_test_get_launched (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *retval)
{
SwfdecTestTest *test;
- SwfdecAsObject *o;
+ SwfdecTestBuffer *buf;
SwfdecBuffer *buffer;
gsize len;
@@ -364,8 +364,8 @@ swfdec_test_test_get_launched (SwfdecAsContext *cx, SwfdecAsObject *object,
len = swfdec_buffer_queue_get_depth (test->launched);
buffer = swfdec_buffer_queue_peek (test->launched, len);
- o = swfdec_test_buffer_new (cx, buffer);
- SWFDEC_AS_VALUE_SET_OBJECT (retval, o);
+ buf = swfdec_test_buffer_new (cx, buffer);
+ SWFDEC_AS_VALUE_SET_OBJECT (retval, swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (buf)));
}
SWFDEC_TEST_FUNCTION ("Socket_getSocket", swfdec_test_test_getSocket, 0)
@@ -400,7 +400,7 @@ swfdec_test_test_get_trace (SwfdecAsContext *cx, SwfdecAsObject *object, guint a
SwfdecAsValue *argv, SwfdecAsValue *retval)
{
SwfdecTestTest *test;
- SwfdecAsObject *o;
+ SwfdecTestBuffer *buf;
SwfdecBuffer *buffer;
gsize len;
@@ -408,8 +408,8 @@ swfdec_test_test_get_trace (SwfdecAsContext *cx, SwfdecAsObject *object, guint a
len = swfdec_buffer_queue_get_depth (test->trace);
buffer = swfdec_buffer_queue_peek (test->trace, len);
- o = swfdec_test_buffer_new (cx, buffer);
- SWFDEC_AS_VALUE_SET_OBJECT (retval, o);
+ buf = swfdec_test_buffer_new (cx, buffer);
+ SWFDEC_AS_VALUE_SET_OBJECT (retval, swfdec_as_relay_get_as_object (SWFDEC_AS_RELAY (buf)));
}
SWFDEC_TEST_FUNCTION ("Test_get_quit", swfdec_test_test_get_quit, 0)
commit 6cc572b85705feee1e31eb48511d7ee9d71f3b27
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Oct 24 15:31:08 2008 +0200
export swfdec_as_object_set_constructor_by_name()
diff --git a/swfdec/swfdec_as_internal.h b/swfdec/swfdec_as_internal.h
index 4b53c46..dc7ce23 100644
--- a/swfdec/swfdec_as_internal.h
+++ b/swfdec/swfdec_as_internal.h
@@ -70,14 +70,6 @@ void swfdec_as_object_add_native_variable (SwfdecAsObject * object,
const char * variable,
SwfdecAsNative get,
SwfdecAsNative set);
-SwfdecAsObject * swfdec_as_object_set_constructor_by_name
- (SwfdecAsObject * object,
- const char * name,
- ...) G_GNUC_NULL_TERMINATED;
-SwfdecAsObject * swfdec_as_object_set_constructor_by_namev
- (SwfdecAsObject * object,
- const char * name,
- va_list args);
/* swfdec_as_array.h */
void swfdec_as_array_remove_range (SwfdecAsObject * object,
diff --git a/swfdec/swfdec_as_object.h b/swfdec/swfdec_as_object.h
index 214d951..123faae 100644
--- a/swfdec/swfdec_as_object.h
+++ b/swfdec/swfdec_as_object.h
@@ -106,6 +106,14 @@ GType swfdec_as_object_get_type (void);
SwfdecAsObject *swfdec_as_object_new (SwfdecAsContext * context,
...) G_GNUC_NULL_TERMINATED;
SwfdecAsObject *swfdec_as_object_new_empty (SwfdecAsContext * context);
+SwfdecAsObject * swfdec_as_object_set_constructor_by_name
+ (SwfdecAsObject * object,
+ const char * name,
+ ...) G_GNUC_NULL_TERMINATED;
+SwfdecAsObject * swfdec_as_object_set_constructor_by_namev
+ (SwfdecAsObject * object,
+ const char * name,
+ va_list args);
void swfdec_as_object_create (SwfdecAsFunction * fun,
guint n_args,
const SwfdecAsValue * args,
commit 103676c395f1439d40d75be64d4d225d82c8f8f7
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Oct 24 15:30:51 2008 +0200
export swfdec_as_relay.h
diff --git a/swfdec/Makefile.am b/swfdec/Makefile.am
index dfdce00..a73cea0 100644
--- a/swfdec/Makefile.am
+++ b/swfdec/Makefile.am
@@ -209,6 +209,7 @@ public_headers = \
swfdec_as_function.h \
swfdec_as_native_function.h \
swfdec_as_object.h \
+ swfdec_as_relay.h \
swfdec_as_string_value.h \
swfdec_as_types.h \
swfdec_audio.h \
@@ -245,7 +246,6 @@ noinst_HEADERS = \
swfdec_as_gcable.h \
swfdec_as_interpret.h \
swfdec_as_number.h \
- swfdec_as_relay.h \
swfdec_as_script_function.h \
swfdec_as_stack.h \
swfdec_as_string.h \
diff --git a/swfdec/swfdec.h b/swfdec/swfdec.h
index 32b55d8..eff395f 100644
--- a/swfdec/swfdec.h
+++ b/swfdec/swfdec.h
@@ -1,7 +1,7 @@
/* Swfdec
* Copyright (C) 2003-2006 David Schleef <ds at schleef.org>
* 2005-2006 Eric Anholt <eric at anholt.net>
- * 2006-2007 Benjamin Otte <otte at gnome.org>
+ * 2006-2008 Benjamin Otte <otte at gnome.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -29,6 +29,7 @@
#include <swfdec/swfdec_as_function.h>
#include <swfdec/swfdec_as_native_function.h>
#include <swfdec/swfdec_as_object.h>
+#include <swfdec/swfdec_as_relay.h>
#include <swfdec/swfdec_as_types.h>
#include <swfdec/swfdec_script.h>
commit 086e7fb9cc770882c64efe30275f9f2dddafbef4
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Oct 24 13:52:53 2008 +0200
make NetStream a relay
diff --git a/swfdec/swfdec_net_stream.c b/swfdec/swfdec_net_stream.c
index b5aefe5..dee670e 100644
--- a/swfdec/swfdec_net_stream.c
+++ b/swfdec/swfdec_net_stream.c
@@ -1,5 +1,5 @@
/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ * Copyright (C) 2007-2008 Benjamin Otte <otte at gnome.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -44,9 +44,11 @@ swfdec_net_stream_onstatus (SwfdecNetStream *stream, const char *code, const cha
{
SwfdecAsValue val;
SwfdecAsObject *object;
+ SwfdecAsContext *cx;
+ cx = swfdec_gc_object_get_context (stream);
swfdec_sandbox_use (stream->sandbox);
- object = swfdec_as_object_new (swfdec_gc_object_get_context (stream), SWFDEC_AS_STR_Object, NULL);
+ object = swfdec_as_object_new (cx, SWFDEC_AS_STR_Object, NULL);
SWFDEC_INFO ("emitting onStatus for %s %s", level, code);
SWFDEC_AS_VALUE_SET_STRING (&val, code);
swfdec_as_object_set_variable (object, SWFDEC_AS_STR_code, &val);
@@ -54,14 +56,14 @@ swfdec_net_stream_onstatus (SwfdecNetStream *stream, const char *code, const cha
swfdec_as_object_set_variable (object, SWFDEC_AS_STR_level, &val);
SWFDEC_AS_VALUE_SET_OBJECT (&val, object);
- if (!swfdec_as_object_call (SWFDEC_AS_OBJECT (stream),
+ if (!swfdec_as_relay_call (SWFDEC_AS_RELAY (stream),
SWFDEC_AS_STR_onStatus, 1, &val, NULL)) {
// if it's an error message and the stream object didn't have onStatus
// handler, call System.onStatus
if (level == SWFDEC_AS_STR_error) {
SwfdecAsValue system;
- swfdec_as_object_get_variable (swfdec_gc_object_get_context (stream)->global,
+ swfdec_as_object_get_variable (cx->global,
SWFDEC_AS_STR_System, &system);
if (SWFDEC_AS_VALUE_IS_OBJECT (&system)) {
swfdec_as_object_call (SWFDEC_AS_VALUE_GET_OBJECT (&system),
@@ -275,7 +277,7 @@ swfdec_net_stream_video_goto (SwfdecNetStream *stream, guint timestamp)
SWFDEC_AMF_STRING, &name, SWFDEC_AMF_MIXED_ARRAY, &value) != 2) {
SWFDEC_ERROR ("could not parse data tag");
} else {
- swfdec_as_object_call (SWFDEC_AS_OBJECT (stream),
+ swfdec_as_relay_call (SWFDEC_AS_RELAY (stream),
SWFDEC_AS_VALUE_GET_STRING (&name), 1, &value, NULL);
}
swfdec_sandbox_unuse (stream->sandbox);
@@ -502,7 +504,7 @@ swfdec_net_stream_video_provider_init (SwfdecVideoProviderInterface *iface)
/*** SWFDEC_NET_STREAM ***/
-G_DEFINE_TYPE_WITH_CODE (SwfdecNetStream, swfdec_net_stream, SWFDEC_TYPE_AS_OBJECT,
+G_DEFINE_TYPE_WITH_CODE (SwfdecNetStream, swfdec_net_stream, SWFDEC_TYPE_AS_RELAY,
G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_STREAM_TARGET, swfdec_net_stream_stream_target_init)
G_IMPLEMENT_INTERFACE (SWFDEC_TYPE_VIDEO_PROVIDER, swfdec_net_stream_video_provider_init))
diff --git a/swfdec/swfdec_net_stream.h b/swfdec/swfdec_net_stream.h
index d198b52..078b9e9 100644
--- a/swfdec/swfdec_net_stream.h
+++ b/swfdec/swfdec_net_stream.h
@@ -1,5 +1,5 @@
/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ * Copyright (C) 2007-2008 Benjamin Otte <otte at gnome.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -21,7 +21,7 @@
#define _SWFDEC_NET_STREAM_H_
#include <swfdec/swfdec.h>
-#include <swfdec/swfdec_as_object.h>
+#include <swfdec/swfdec_as_relay.h>
#include <swfdec/swfdec_net_connection.h>
#include <swfdec/swfdec_flv_decoder.h>
#include <swfdec/swfdec_player_internal.h>
@@ -43,7 +43,7 @@ typedef struct _SwfdecNetStreamClass SwfdecNetStreamClass;
struct _SwfdecNetStream
{
- SwfdecAsObject object;
+ SwfdecAsRelay relay;
SwfdecNetConnection * conn; /* connection used for opening streams */
char * requested_url; /* URL we have requested that isn't loaded yet */
@@ -72,7 +72,7 @@ struct _SwfdecNetStream
struct _SwfdecNetStreamClass
{
- SwfdecAsObjectClass object_class;
+ SwfdecAsRelayClass relay_class;
};
GType swfdec_net_stream_get_type (void);
diff --git a/swfdec/swfdec_net_stream_as.c b/swfdec/swfdec_net_stream_as.c
index 028abfe..44910be 100644
--- a/swfdec/swfdec_net_stream_as.c
+++ b/swfdec/swfdec_net_stream_as.c
@@ -1,5 +1,5 @@
/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ * Copyright (C) 2007-2008 Benjamin Otte <otte at gnome.org>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -290,7 +290,9 @@ swfdec_net_stream_construct (SwfdecAsContext *cx, SwfdecAsObject *obj, guint arg
SWFDEC_FIXME ("What do we do if not constructing?");
return;
}
- stream = SWFDEC_NET_STREAM (obj);
+ stream = g_object_new (SWFDEC_TYPE_NET_STREAM, "context", cx, NULL);
+ swfdec_as_object_set_relay (obj, SWFDEC_AS_RELAY (stream));
+
swfdec_net_stream_setup (cx, obj, 0, NULL, rval);
if (argc == 0 ||
!SWFDEC_AS_VALUE_IS_OBJECT (&argv[0]) ||
@@ -313,9 +315,8 @@ swfdec_net_stream_init_context (SwfdecPlayer *player)
context = SWFDEC_AS_CONTEXT (player);
proto = swfdec_as_object_new_empty (context);
- stream = SWFDEC_AS_OBJECT (swfdec_as_object_add_constructor (context->global,
- SWFDEC_AS_STR_NetStream, SWFDEC_TYPE_NET_STREAM,
- swfdec_net_stream_construct, proto));
+ stream = SWFDEC_AS_OBJECT (swfdec_as_object_add_function (context->global,
+ SWFDEC_AS_STR_NetStream, swfdec_net_stream_construct));
/* set the right properties on the NetStream.prototype object */
swfdec_as_object_add_function (proto, SWFDEC_AS_STR_pause, swfdec_net_stream_pause);
swfdec_as_object_add_function (proto, SWFDEC_AS_STR_play, swfdec_net_stream_play);
@@ -326,5 +327,8 @@ swfdec_net_stream_init_context (SwfdecPlayer *player)
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);
+ SWFDEC_AS_VALUE_SET_OBJECT (&val, proto);
+ swfdec_as_object_set_variable_and_flags (stream, SWFDEC_AS_STR_prototype, &val,
+ SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT);
}
diff --git a/swfdec/swfdec_video_movie_as.c b/swfdec/swfdec_video_movie_as.c
index 62492ff..4b44361 100644
--- a/swfdec/swfdec_video_movie_as.c
+++ b/swfdec/swfdec_video_movie_as.c
@@ -40,13 +40,13 @@ swfdec_video_attach_video (SwfdecAsContext *cx, SwfdecAsObject *object,
SWFDEC_AS_CHECK (SWFDEC_TYPE_VIDEO_MOVIE, &video, "O", &o);
- if (!SWFDEC_IS_VIDEO_PROVIDER (o)) {
+ if (o == NULL || !SWFDEC_IS_VIDEO_PROVIDER (o->relay)) {
SWFDEC_WARNING ("calling attachVideo without a NetStream object");
swfdec_video_movie_set_provider (video, NULL);
return;
}
- swfdec_video_movie_set_provider (video, SWFDEC_VIDEO_PROVIDER (o));
+ swfdec_video_movie_set_provider (video, SWFDEC_VIDEO_PROVIDER (o->relay));
}
SWFDEC_AS_NATIVE (667, 2, swfdec_video_clear)
commit 6413f62b70131ccaaf454580cc9df7993ec42c2a
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Oct 24 11:00:53 2008 +0200
move NetStream get function into add_variable calls
diff --git a/swfdec/swfdec_net_stream.c b/swfdec/swfdec_net_stream.c
index 0884975..b5aefe5 100644
--- a/swfdec/swfdec_net_stream.c
+++ b/swfdec/swfdec_net_stream.c
@@ -528,70 +528,6 @@ swfdec_net_stream_dispose (GObject *object)
G_OBJECT_CLASS (swfdec_net_stream_parent_class)->dispose (object);
}
-static gboolean
-swfdec_net_stream_get_variable (SwfdecAsObject *object, SwfdecAsObject *orig,
- const char *variable, SwfdecAsValue *val, guint *flags)
-{
- SwfdecNetStream *stream;
- SwfdecAsContext *cx;
-
- if (SWFDEC_AS_OBJECT_CLASS (swfdec_net_stream_parent_class)->get (object, orig, variable, val, flags))
- return TRUE;
-
- cx = swfdec_gc_object_get_context (object);
- stream = SWFDEC_NET_STREAM (object);
- /* FIXME: need case insensitive comparisons? */
- if (variable == SWFDEC_AS_STR_time) {
- guint msecs;
- if (stream->flvdecoder == NULL ||
- !swfdec_flv_decoder_get_video_info (stream->flvdecoder, &msecs, NULL)) {
- swfdec_as_value_set_integer (cx, val, 0);
- } else {
- if (msecs >= stream->current_time)
- msecs = 0;
- else
- msecs = stream->current_time - msecs;
- swfdec_as_value_set_number (cx, val, msecs / 1000.);
- }
- *flags = 0;
- return TRUE;
- } else if (variable == SWFDEC_AS_STR_bytesLoaded) {
- if (stream->loader == NULL)
- swfdec_as_value_set_integer (cx, val, 0);
- else
- swfdec_as_value_set_number (cx, val, swfdec_loader_get_loaded (stream->loader));
- *flags = 0;
- return TRUE;
- } else if (variable == SWFDEC_AS_STR_bytesTotal) {
- glong bytes;
- if (stream->loader == NULL) {
- bytes = 0;
- } else {
- bytes = swfdec_loader_get_size (stream->loader);
- if (bytes < 0)
- bytes = swfdec_loader_get_loaded (stream->loader);
- }
- swfdec_as_value_set_number (cx, val, bytes);
- *flags = 0;
- return TRUE;
- } else if (variable == SWFDEC_AS_STR_bufferLength) {
- SWFDEC_STUB ("Netstream.bufferLength (get)");
- } else if (variable == SWFDEC_AS_STR_bufferTime) {
- SWFDEC_STUB ("Netstream.bufferTime (get)");
- } else if (variable == SWFDEC_AS_STR_audiocodec) {
- SWFDEC_STUB ("Netstream.audiocodec (get)");
- } else if (variable == SWFDEC_AS_STR_currentFps) {
- SWFDEC_STUB ("Netstream.currentFps (get)");
- } else if (variable == SWFDEC_AS_STR_decodedFrames) {
- SWFDEC_STUB ("Netstream.decodedFrames (get)");
- } else if (variable == SWFDEC_AS_STR_liveDelay) {
- SWFDEC_STUB ("Netstream.liveDelay (get)");
- } else if (variable == SWFDEC_AS_STR_videoCodec) {
- SWFDEC_STUB ("Netstream.videoCodec (get)");
- }
- return FALSE;
-}
-
static void
swfdec_net_stream_mark (SwfdecGcObject *object)
{
@@ -610,13 +546,10 @@ swfdec_net_stream_class_init (SwfdecNetStreamClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
SwfdecGcObjectClass *gc_class = SWFDEC_GC_OBJECT_CLASS (klass);
- SwfdecAsObjectClass *asobject_class = SWFDEC_AS_OBJECT_CLASS (klass);
object_class->dispose = swfdec_net_stream_dispose;
gc_class->mark = swfdec_net_stream_mark;
-
- asobject_class->get = swfdec_net_stream_get_variable;
}
static void
diff --git a/swfdec/swfdec_net_stream_as.c b/swfdec/swfdec_net_stream_as.c
index 72a7f01..028abfe 100644
--- a/swfdec/swfdec_net_stream_as.c
+++ b/swfdec/swfdec_net_stream_as.c
@@ -148,6 +148,139 @@ swfdec_net_stream_do_seek (SwfdecAsContext *cx, SwfdecAsObject *object,
}
static void
+swfdec_net_stream_get_time (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+ SwfdecAsValue *argv, SwfdecAsValue *ret)
+{
+ SwfdecNetStream *stream;
+ guint msecs;
+
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_NET_STREAM, &stream, "");
+
+ if (stream->flvdecoder == NULL ||
+ !swfdec_flv_decoder_get_video_info (stream->flvdecoder, &msecs, NULL)) {
+ swfdec_as_value_set_integer (cx, ret, 0);
+ } else {
+ if (msecs >= stream->current_time)
+ msecs = 0;
+ else
+ msecs = stream->current_time - msecs;
+ swfdec_as_value_set_number (cx, ret, msecs / 1000.);
+ }
+}
+
+static void
+swfdec_net_stream_get_bytesLoaded (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+ SwfdecAsValue *argv, SwfdecAsValue *ret)
+{
+ SwfdecNetStream *stream;
+
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_NET_STREAM, &stream, "");
+
+ if (stream->loader == NULL)
+ swfdec_as_value_set_integer (cx, ret, 0);
+ else
+ swfdec_as_value_set_number (cx, ret, swfdec_loader_get_loaded (stream->loader));
+}
+
+static void
+swfdec_net_stream_get_bytesTotal (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+ SwfdecAsValue *argv, SwfdecAsValue *ret)
+{
+ SwfdecNetStream *stream;
+ glong bytes;
+
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_NET_STREAM, &stream, "");
+
+ if (stream->loader == NULL) {
+ bytes = 0;
+ } else {
+ bytes = swfdec_loader_get_size (stream->loader);
+ if (bytes < 0)
+ bytes = swfdec_loader_get_loaded (stream->loader);
+ }
+ swfdec_as_value_set_number (cx, ret, bytes);
+}
+
+static void
+swfdec_net_stream_get_bufferLength (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+ SwfdecAsValue *argv, SwfdecAsValue *ret)
+{
+ SWFDEC_STUB ("Netstream.bufferLength (get)");
+}
+
+static void
+swfdec_net_stream_get_bufferTime (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+ SwfdecAsValue *argv, SwfdecAsValue *ret)
+{
+ SWFDEC_STUB ("Netstream.bufferTime (get)");
+}
+
+static void
+swfdec_net_stream_get_audiocodec (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+ SwfdecAsValue *argv, SwfdecAsValue *ret)
+{
+ SWFDEC_STUB ("Netstream.audiocodec (get)");
+}
+
+static void
+swfdec_net_stream_get_currentFps (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+ SwfdecAsValue *argv, SwfdecAsValue *ret)
+{
+ SWFDEC_STUB ("Netstream.currentFps (get)");
+}
+
+static void
+swfdec_net_stream_get_decodedFrames (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+ SwfdecAsValue *argv, SwfdecAsValue *ret)
+{
+ SWFDEC_STUB ("Netstream.decodedFrames (get)");
+}
+
+static void
+swfdec_net_stream_get_liveDelay (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+ SwfdecAsValue *argv, SwfdecAsValue *ret)
+{
+ SWFDEC_STUB ("Netstream.liveDelay (get)");
+}
+
+static void
+swfdec_net_stream_get_videoCodec (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+ SwfdecAsValue *argv, SwfdecAsValue *ret)
+{
+ SWFDEC_STUB ("Netstream.videoCodec (get)");
+}
+
+SWFDEC_AS_NATIVE (2101, 200, swfdec_net_stream_setup)
+void
+swfdec_net_stream_setup (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+ SwfdecAsValue *argv, SwfdecAsValue *ret)
+{
+ if (object == NULL)
+ return;
+
+ swfdec_as_object_add_native_variable (object, SWFDEC_AS_STR_time,
+ swfdec_net_stream_get_time, NULL);
+ swfdec_as_object_add_native_variable (object, SWFDEC_AS_STR_bytesLoaded,
+ swfdec_net_stream_get_bytesLoaded, NULL);
+ swfdec_as_object_add_native_variable (object, SWFDEC_AS_STR_bytesTotal,
+ swfdec_net_stream_get_bytesTotal, NULL);
+ swfdec_as_object_add_native_variable (object, SWFDEC_AS_STR_bufferLength,
+ swfdec_net_stream_get_bufferLength, NULL);
+ swfdec_as_object_add_native_variable (object, SWFDEC_AS_STR_bufferTime,
+ swfdec_net_stream_get_bufferTime, NULL);
+ swfdec_as_object_add_native_variable (object, SWFDEC_AS_STR_audiocodec,
+ swfdec_net_stream_get_audiocodec, NULL);
+ swfdec_as_object_add_native_variable (object, SWFDEC_AS_STR_currentFps,
+ swfdec_net_stream_get_currentFps, NULL);
+ swfdec_as_object_add_native_variable (object, SWFDEC_AS_STR_decodedFrames,
+ swfdec_net_stream_get_decodedFrames, NULL);
+ swfdec_as_object_add_native_variable (object, SWFDEC_AS_STR_liveDelay,
+ swfdec_net_stream_get_liveDelay, NULL);
+ swfdec_as_object_add_native_variable (object, SWFDEC_AS_STR_videoCodec,
+ swfdec_net_stream_get_videoCodec, NULL);
+}
+
+static void
swfdec_net_stream_construct (SwfdecAsContext *cx, SwfdecAsObject *obj, guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
{
SwfdecNetStream *stream;
@@ -158,6 +291,7 @@ swfdec_net_stream_construct (SwfdecAsContext *cx, SwfdecAsObject *obj, guint arg
return;
}
stream = SWFDEC_NET_STREAM (obj);
+ swfdec_net_stream_setup (cx, obj, 0, NULL, rval);
if (argc == 0 ||
!SWFDEC_AS_VALUE_IS_OBJECT (&argv[0]) ||
!SWFDEC_IS_NET_CONNECTION ((conn = (SwfdecNetConnection *) SWFDEC_AS_VALUE_GET_OBJECT (&argv[0])))) {
@@ -165,6 +299,7 @@ swfdec_net_stream_construct (SwfdecAsContext *cx, SwfdecAsObject *obj, guint arg
return;
}
stream->conn = conn;
+ SWFDEC_AS_VALUE_SET_OBJECT (rval, obj);
}
void
commit 40ffef0504f457ccd7a965fe37b000962c20821c
Author: Benjamin Otte <otte at gnome.org>
Date: Fri Oct 24 10:53:23 2008 +0200
remove another unnecessary check
diff --git a/swfdec/swfdec_as_object.c b/swfdec/swfdec_as_object.c
index e25b716..20cf7c2 100644
--- a/swfdec/swfdec_as_object.c
+++ b/swfdec/swfdec_as_object.c
@@ -1504,8 +1504,6 @@ swfdec_as_object_add_native_variable (SwfdecAsObject *object,
get_func =
swfdec_as_native_function_new (swfdec_gc_object_get_context (object), variable, get, NULL);
- if (get_func == NULL)
- return;
if (set != NULL) {
set_func =
More information about the Swfdec-commits
mailing list