Benjamin Otte
2007-Aug-19 18:17 UTC
[Swfdec] 2 commits - libswfdec/swfdec_as_array.c libswfdec/swfdec_as_object.c libswfdec/swfdec_as_object.h libswfdec/swfdec_as_super.c libswfdec/swfdec_as_with.c libswfdec/swfdec_movie.c libswfdec/swfdec_player.c libswfdec/swfdec_sprite_movie.c libswfdec/swfdec_video_movie.c
libswfdec/swfdec_as_array.c | 9 ++--- libswfdec/swfdec_as_object.c | 62 ++++++++++++++++++---------------------- libswfdec/swfdec_as_object.h | 14 +++++---- libswfdec/swfdec_as_super.c | 2 - libswfdec/swfdec_as_with.c | 4 +- libswfdec/swfdec_movie.c | 4 +- libswfdec/swfdec_player.c | 2 - libswfdec/swfdec_sprite_movie.c | 2 - libswfdec/swfdec_video_movie.c | 2 - 9 files changed, 50 insertions(+), 51 deletions(-) New commits: diff-tree 4e35fceb28469c2bc9ee49c9ec71573d6df8861e (from cb77cc43c823c4f3260d6341cf5ed04b65783deb) Author: Benjamin Otte <otte at gnome.org> Date: Sun Aug 19 20:16:59 2007 +0200 SwfdecAsObject->set() now takes a default_flags parameter This parameter is used to set the default set of flags, when a variable is newly created. Now we don't have the need to call set_flags() after every init function diff --git a/libswfdec/swfdec_as_array.c b/libswfdec/swfdec_as_array.c index a64b165..495bff1 100644 --- a/libswfdec/swfdec_as_array.c +++ b/libswfdec/swfdec_as_array.c @@ -332,7 +332,7 @@ swfdec_as_array_add (SwfdecAsObject *obj static void swfdec_as_array_set (SwfdecAsObject *object, const char *variable, - const SwfdecAsValue *val) + const SwfdecAsValue *val, guint flags) { char *end; gboolean indexvar = TRUE; @@ -353,7 +353,7 @@ swfdec_as_array_set (SwfdecAsObject *obj } SWFDEC_AS_OBJECT_CLASS (swfdec_as_array_parent_class)->set (object, variable, - val); + val, flags); // if we added new value outside the current length, set a bigger length if (indexvar) { diff --git a/libswfdec/swfdec_as_object.c b/libswfdec/swfdec_as_object.c index 2150244..811be98 100644 --- a/libswfdec/swfdec_as_object.c +++ b/libswfdec/swfdec_as_object.c @@ -157,7 +157,7 @@ swfdec_as_object_hash_lookup (SwfdecAsOb } static inline SwfdecAsVariable * -swfdec_as_object_hash_create (SwfdecAsObject *object, const char *variable) +swfdec_as_object_hash_create (SwfdecAsObject *object, const char *variable, guint flags) { SwfdecAsVariable *var; @@ -166,6 +166,7 @@ swfdec_as_object_hash_create (SwfdecAsOb if (!swfdec_as_variable_name_is_valid (variable)) return NULL; var = g_slice_new0 (SwfdecAsVariable); + var->flags = flags; g_hash_table_insert (object->properties, (gpointer) variable, var); return var; @@ -194,20 +195,9 @@ swfdec_as_object_do_get (SwfdecAsObject return TRUE; } -static SwfdecAsVariable * -swfdec_as_object_lookup_variable (SwfdecAsObject *object, const char *variable) -{ - SwfdecAsVariable *var; - - var = swfdec_as_object_hash_lookup (object, variable); - if (var == NULL) - var = swfdec_as_object_hash_create (object, variable); - return var; -} - static void swfdec_as_object_do_set (SwfdecAsObject *object, const char *variable, - const SwfdecAsValue *val) + const SwfdecAsValue *val, guint flags) { SwfdecAsVariable *var; @@ -241,7 +231,7 @@ swfdec_as_object_do_set (SwfdecAsObject } } if (var == NULL) { - var = swfdec_as_object_hash_create (object, variable); + var = swfdec_as_object_hash_create (object, variable, flags); if (var == NULL) return; } @@ -549,12 +539,25 @@ swfdec_as_object_collect (SwfdecAsObject * @value: value to set the variable to * * Sets a variable on @object. It is not guaranteed that getting the variable - * after setting it results in the same value, as some variables can be - * read-only or require a specific type. + * after setting it results in the same value. This is a mcaro that calls + * swfdec_as_object_set_variable_and_flags() + **/ +/** + * swfdec_as_object_set_variable: + * @object: a #SwfdecAsObject + * @variable: garbage-collected name of the variable to set + * @value: value to set the variable to + * @default_flags: flags to use if creating the variable anew - the flags will + * be ignored if the property already exists. + * + * Sets a variable on @object. It is not guaranteed that getting the variable + * after setting it results in the same value, because various mechanisms (like + * the Actionscript Object.addProperty function or constant variables) can + * avoid this. **/ void -swfdec_as_object_set_variable (SwfdecAsObject *object, - const char *variable, const SwfdecAsValue *value) +swfdec_as_object_set_variable_and_flags (SwfdecAsObject *object, + const char *variable, const SwfdecAsValue *value, guint default_flags) { SwfdecAsObjectClass *klass; @@ -563,7 +566,7 @@ swfdec_as_object_set_variable (SwfdecAsO g_return_if_fail (SWFDEC_IS_AS_VALUE (value)); klass = SWFDEC_AS_OBJECT_GET_CLASS (object); - klass->set (object, variable, value); + klass->set (object, variable, value, default_flags); } /** @@ -987,12 +990,13 @@ swfdec_as_object_add_variable (SwfdecAsO g_return_if_fail (SWFDEC_IS_AS_FUNCTION (get)); g_return_if_fail (set == NULL || SWFDEC_IS_AS_FUNCTION (set)); - var = swfdec_as_object_lookup_variable (object, variable); + var = swfdec_as_object_hash_lookup (object, variable); + if (var == NULL) + var = swfdec_as_object_hash_create (object, variable, 0); if (var == NULL) return; var->get = get; var->set = set; - var->flags = 0; if (set == NULL) var->flags |= SWFDEC_AS_VARIABLE_CONSTANT; } diff --git a/libswfdec/swfdec_as_object.h b/libswfdec/swfdec_as_object.h index 5baec7d..1109110 100644 --- a/libswfdec/swfdec_as_object.h +++ b/libswfdec/swfdec_as_object.h @@ -72,7 +72,8 @@ struct _SwfdecAsObjectClass { /* set the variable - and return it (or NULL on error) */ void (* set) (SwfdecAsObject * object, const char * variable, - const SwfdecAsValue * val); + const SwfdecAsValue * val, + guint default_flags); /* set flags of a variable */ void (* set_flags) (SwfdecAsObject * object, const char * variable, @@ -109,9 +110,13 @@ void swfdec_as_object_add (SwfdecAsObj /* I'd like to name these [gs]et_property, but binding authors will complain * about overlap with g_object_[gs]et_property then */ -void swfdec_as_object_set_variable (SwfdecAsObject * object, +#define swfdec_as_object_set_variable(object, variable, value) \ + swfdec_as_object_set_variable_and_flags (object, variable, value, 0) +void swfdec_as_object_set_variable_and_flags + (SwfdecAsObject * object, const char * variable, - const SwfdecAsValue * value); + const SwfdecAsValue * value, + guint default_flags); void swfdec_as_object_add_variable (SwfdecAsObject * object, const char * variable, SwfdecAsFunction * get, diff --git a/libswfdec/swfdec_as_super.c b/libswfdec/swfdec_as_super.c index 653c30a..aa75a0b 100644 --- a/libswfdec/swfdec_as_super.c +++ b/libswfdec/swfdec_as_super.c @@ -88,7 +88,7 @@ swfdec_as_super_get (SwfdecAsObject *obj } static void -swfdec_as_super_set (SwfdecAsObject *object, const char *variable, const SwfdecAsValue *val) +swfdec_as_super_set (SwfdecAsObject *object, const char *variable, const SwfdecAsValue *val, guint flags) { /* This seems to be ignored completely */ } diff --git a/libswfdec/swfdec_as_with.c b/libswfdec/swfdec_as_with.c index 62af9b8..a6b032e 100644 --- a/libswfdec/swfdec_as_with.c +++ b/libswfdec/swfdec_as_with.c @@ -60,12 +60,12 @@ swfdec_as_with_get (SwfdecAsObject *obje static void swfdec_as_with_set (SwfdecAsObject *object, const char *variable, - const SwfdecAsValue *val) + const SwfdecAsValue *val, guint flags) { SwfdecAsWith *with = SWFDEC_AS_WITH (object); SwfdecAsObjectClass *klass = SWFDEC_AS_OBJECT_GET_CLASS (with->object); - klass->set (with->object, variable, val); + klass->set (with->object, variable, val, flags); } static void diff --git a/libswfdec/swfdec_movie.c b/libswfdec/swfdec_movie.c index 3bac79f..0ddb8ff 100644 --- a/libswfdec/swfdec_movie.c +++ b/libswfdec/swfdec_movie.c @@ -875,7 +875,7 @@ swfdec_movie_get_variable (SwfdecAsObjec static void swfdec_movie_set_variable (SwfdecAsObject *object, const char *variable, - const SwfdecAsValue *val) + const SwfdecAsValue *val, guint flags) { SwfdecMovie *movie = SWFDEC_MOVIE (object); @@ -883,7 +883,7 @@ swfdec_movie_set_variable (SwfdecAsObjec return; if (swfdec_movie_set_asprop (movie, variable, val)) return; - SWFDEC_AS_OBJECT_CLASS (swfdec_movie_parent_class)->set (object, variable, val); + SWFDEC_AS_OBJECT_CLASS (swfdec_movie_parent_class)->set (object, variable, val, flags); } static char * diff-tree cb77cc43c823c4f3260d6341cf5ed04b65783deb (from 5d29f9261756c094b4d0f9a80da05fb6892094bf) Author: Benjamin Otte <otte at gnome.org> Date: Sun Aug 19 20:01:22 2007 +0200 remove the third argument from swfdec_as_object_set_constructor() It was FALSE every time diff --git a/libswfdec/swfdec_as_array.c b/libswfdec/swfdec_as_array.c index 9d245c3..a64b165 100644 --- a/libswfdec/swfdec_as_array.c +++ b/libswfdec/swfdec_as_array.c @@ -400,7 +400,7 @@ swfdec_as_array_new (SwfdecAsContext *co return FALSE; ret = g_object_new (SWFDEC_TYPE_AS_ARRAY, NULL); swfdec_as_object_add (ret, context, sizeof (SwfdecAsArray)); - swfdec_as_object_set_constructor (ret, context->Array, FALSE); + swfdec_as_object_set_constructor (ret, context->Array); return ret; } @@ -1052,8 +1052,7 @@ swfdec_as_array_construct (SwfdecAsConte swfdec_as_object_add (object, cx, sizeof (SwfdecAsArray)); swfdec_as_object_get_variable (cx->global, SWFDEC_AS_STR_Array, &val); if (SWFDEC_AS_VALUE_IS_OBJECT (&val)) { - swfdec_as_object_set_constructor (object, - SWFDEC_AS_VALUE_GET_OBJECT (&val), FALSE); + swfdec_as_object_set_constructor (object, SWFDEC_AS_VALUE_GET_OBJECT (&val)); } else { SWFDEC_INFO ("\"Array\" is not an object"); } diff --git a/libswfdec/swfdec_as_object.c b/libswfdec/swfdec_as_object.c index 8d4df41..2150244 100644 --- a/libswfdec/swfdec_as_object.c +++ b/libswfdec/swfdec_as_object.c @@ -921,7 +921,7 @@ swfdec_as_object_create (SwfdecAsFunctio return; new = g_object_new (type, NULL); swfdec_as_object_add (new, context, size); - swfdec_as_object_set_constructor (new, SWFDEC_AS_OBJECT (fun), FALSE); + swfdec_as_object_set_constructor (new, SWFDEC_AS_OBJECT (fun)); swfdec_as_function_call (fun, new, n_args, args, NULL); context->frame->construct = TRUE; } @@ -930,9 +930,6 @@ swfdec_as_object_create (SwfdecAsFunctio * swfdec_as_object_set_constructor: * @object: a #SwfdecAsObject * @construct: the constructor of @object - * @scripted: %TRUE if this object was created by a script. Flash sets the - * property named "__constructor__" on script-created objects, but - * "constructor" on native ones. * * Sets the constructor variables for @object. Most objects get these * variables set automatically, but for objects you created yourself, you want @@ -942,8 +939,7 @@ swfdec_as_object_create (SwfdecAsFunctio * object.__proto__ = construct.prototype; ]| **/ void -swfdec_as_object_set_constructor (SwfdecAsObject *object, - SwfdecAsObject *construct, gboolean scripted) +swfdec_as_object_set_constructor (SwfdecAsObject *object, SwfdecAsObject *construct) { SwfdecAsValue val; SwfdecAsObject *proto; @@ -964,12 +960,8 @@ swfdec_as_object_set_constructor (Swfdec swfdec_as_object_set_variable_flags (object, SWFDEC_AS_STR___proto__, SWFDEC_AS_VARIABLE_HIDDEN | SWFDEC_AS_VARIABLE_PERMANENT); SWFDEC_AS_VALUE_SET_OBJECT (&val, construct); - swfdec_as_object_set_variable (object, - scripted ? SWFDEC_AS_STR_constructor : SWFDEC_AS_STR___constructor__, - &val); - swfdec_as_object_set_variable_flags (object, - scripted ? SWFDEC_AS_STR_constructor : SWFDEC_AS_STR___constructor__, - SWFDEC_AS_VARIABLE_HIDDEN); + swfdec_as_object_set_variable (object, SWFDEC_AS_STR___constructor__, &val); + swfdec_as_object_set_variable_flags (object, SWFDEC_AS_STR___constructor__, SWFDEC_AS_VARIABLE_HIDDEN); } /** diff --git a/libswfdec/swfdec_as_object.h b/libswfdec/swfdec_as_object.h index 55bfc05..5baec7d 100644 --- a/libswfdec/swfdec_as_object.h +++ b/libswfdec/swfdec_as_object.h @@ -99,8 +99,7 @@ void swfdec_as_object_create (SwfdecAs guint n_args, const SwfdecAsValue * args); void swfdec_as_object_set_constructor(SwfdecAsObject * object, - SwfdecAsObject * construct, - gboolean scripted); + SwfdecAsObject * construct); SwfdecAsObject *swfdec_as_object_resolve (SwfdecAsObject * object); char * swfdec_as_object_get_debug (SwfdecAsObject * object); diff --git a/libswfdec/swfdec_player.c b/libswfdec/swfdec_player.c index 39a1cb1..942dadf 100644 --- a/libswfdec/swfdec_player.c +++ b/libswfdec/swfdec_player.c @@ -1444,7 +1444,7 @@ swfdec_player_initialize (SwfdecPlayer * } if (context->state == SWFDEC_AS_CONTEXT_NEW) { context->state = SWFDEC_AS_CONTEXT_RUNNING; - swfdec_as_object_set_constructor (player->roots->data, player->MovieClip, FALSE); + swfdec_as_object_set_constructor (player->roots->data, player->MovieClip); } } SWFDEC_INFO ("initializing player to size %ux%u", width, height); diff --git a/libswfdec/swfdec_sprite_movie.c b/libswfdec/swfdec_sprite_movie.c index 4f9067d..9af9370 100644 --- a/libswfdec/swfdec_sprite_movie.c +++ b/libswfdec/swfdec_sprite_movie.c @@ -583,7 +583,7 @@ swfdec_sprite_movie_init_movie (SwfdecMo if (constructor == NULL) constructor = SWFDEC_PLAYER (context)->MovieClip; - swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), constructor, FALSE); + swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), constructor); swfdec_sprite_movie_goto (movie, 1); if (!swfdec_sprite_movie_iterate_end (mov)) { g_assert_not_reached (); diff --git a/libswfdec/swfdec_video_movie.c b/libswfdec/swfdec_video_movie.c index 60676e0..eeb137c 100644 --- a/libswfdec/swfdec_video_movie.c +++ b/libswfdec/swfdec_video_movie.c @@ -100,7 +100,7 @@ swfdec_video_movie_init_movie (SwfdecMov { SwfdecPlayer *player = SWFDEC_PLAYER (SWFDEC_AS_OBJECT (movie)->context); - swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), player->Video, FALSE); + swfdec_as_object_set_constructor (SWFDEC_AS_OBJECT (movie), player->Video); } static void
Reasonably Related Threads
- 4 commits - libswfdec/swfdec_as_object.c libswfdec/swfdec_as_object.h libswfdec/swfdec_as_super.c libswfdec/swfdec_as_with.c libswfdec/swfdec_movie.c libswfdec/swfdec_net_stream.c libswfdec/swfdec_sprite_movie.c test/trace
- Branch 'vivi' - 23 commits - libswfdec/swfdec_as_object.c libswfdec/swfdec_as_object.h libswfdec/swfdec_as_super.c libswfdec/swfdec_as_with.c libswfdec/swfdec_movie.c libswfdec/swfdec_net_stream.c libswfdec/swfdec_sprite_movie.c test/trace vivified/core
- 15 commits - libswfdec/swfdec_as_context.c libswfdec/swfdec_as_frame.c libswfdec/swfdec_as_frame_internal.h libswfdec/swfdec_as_interpret.c libswfdec/swfdec_as_object.c libswfdec/swfdec_as_object.h libswfdec/swfdec_as_super.c libswfdec/swfdec_as_with.c
- Branch 'as' - 11 commits - libswfdec/swfdec_as_array.c libswfdec/swfdec_as_context.c libswfdec/swfdec_as_function.c libswfdec/swfdec_as_interpret.c libswfdec/swfdec_as_native_function.c libswfdec/swfdec_as_number.c libswfdec/swfdec_as_object.c
- Branch 'vivi' - 60 commits - libswfdec-gtk/swfdec_gtk_loader.c libswfdec/Makefile.am libswfdec/swfdec_as_array.c libswfdec/swfdec_as_context.c libswfdec/swfdec_as_frame.c libswfdec/swfdec_as_frame_internal.h libswfdec/swfdec_as_interpret.c