[Swfdec-commits] 10 commits - swfdec-gtk/swfdec_gtk_loader.c swfdec/swfdec_as_interpret.c swfdec/swfdec_codec_gst.c swfdec/swfdec_file_loader.c swfdec/swfdec_loader.c swfdec/swfdec_loader.h swfdec/swfdec_load_object_as.c swfdec/swfdec_load_object.c swfdec/swfdec_load_object.h swfdec/swfdec_movie_clip_loader.c swfdec/swfdec_net_stream.c swfdec/swfdec_player.c swfdec/swfdec_player_internal.h swfdec/swfdec_policy_file.c swfdec/swfdec_resource.c swfdec/swfdec_resource.h swfdec/swfdec_text_field_movie.c test/swfdec_test_plugin.c test/trace vivified/code

Pekka Lampila medar at kemper.freedesktop.org
Fri May 30 01:35:36 PDT 2008


 swfdec-gtk/swfdec_gtk_loader.c                       |    6 -
 swfdec/swfdec_as_interpret.c                         |   65 ++++++++++++++++---
 swfdec/swfdec_codec_gst.c                            |    2 
 swfdec/swfdec_file_loader.c                          |    2 
 swfdec/swfdec_load_object.c                          |    7 --
 swfdec/swfdec_load_object.h                          |    2 
 swfdec/swfdec_load_object_as.c                       |   26 ++++---
 swfdec/swfdec_loader.c                               |   12 ---
 swfdec/swfdec_loader.h                               |    8 --
 swfdec/swfdec_movie_clip_loader.c                    |    6 -
 swfdec/swfdec_net_stream.c                           |    3 
 swfdec/swfdec_player.c                               |   14 +---
 swfdec/swfdec_player_internal.h                      |    2 
 swfdec/swfdec_policy_file.c                          |    2 
 swfdec/swfdec_resource.c                             |   29 ++++----
 swfdec/swfdec_resource.h                             |    2 
 swfdec/swfdec_text_field_movie.c                     |    2 
 test/swfdec_test_plugin.c                            |    5 -
 test/trace/Makefile.am                               |   28 ++++++++
 test/trace/loadobject-sendandload-6.swf              |binary
 test/trace/loadobject-sendandload-6.swf.trace        |    2 
 test/trace/loadobject-sendandload-7.swf              |binary
 test/trace/loadobject-sendandload-7.swf.trace        |    2 
 test/trace/loadobject-sendandload-8.swf              |binary
 test/trace/loadobject-sendandload-8.swf.trace        |    2 
 test/trace/loadobject-sendandload.as                 |   22 ++++++
 test/trace/try-return-in-finally-5.swf               |binary
 test/trace/try-return-in-finally-5.swf.trace         |    2 
 test/trace/try-return-in-finally-6.swf               |binary
 test/trace/try-return-in-finally-6.swf.trace         |    2 
 test/trace/try-return-in-finally-7.swf               |binary
 test/trace/try-return-in-finally-7.swf.trace         |    2 
 test/trace/try-return-in-finally-8.swf               |binary
 test/trace/try-return-in-finally-8.swf.trace         |    2 
 test/trace/try-return-in-finally.as                  |   17 ++++
 test/trace/try-variable-propflags-5.swf              |binary
 test/trace/try-variable-propflags-5.swf.trace        |    4 +
 test/trace/try-variable-propflags-6.swf              |binary
 test/trace/try-variable-propflags-6.swf.trace        |    4 +
 test/trace/try-variable-propflags-7.swf              |binary
 test/trace/try-variable-propflags-7.swf.trace        |    4 +
 test/trace/try-variable-propflags-8.swf              |binary
 test/trace/try-variable-propflags-8.swf.trace        |    4 +
 test/trace/try-variable-propflags.as                 |   15 ++++
 test/trace/video-enumerate.c                         |   39 +++++++++++
 test/trace/video-enumerate.swf                       |binary
 test/trace/video-enumerate.swf.trace                 |    2 
 vivified/code/test/compiler/Makefile.am              |    2 
 vivified/code/test/compiler/asm_jump.as              |    4 +
 vivified/code/test/compiler/asm_jump.as.expect       |    6 +
 vivified/code/test/compiler/try.as.expect            |    1 
 vivified/code/test/compiler/try_no_finally.as.expect |    1 
 vivified/code/vivi_code_asm_get_url2.c               |    6 -
 vivified/code/vivi_code_asm_get_url2.h               |    2 
 vivified/code/vivi_code_get_url.c                    |    2 
 vivified/code/vivi_code_get_url.h                    |    4 -
 vivified/code/vivi_code_try.c                        |    3 
 vivified/code/vivi_parser.c                          |   38 +++++++++--
 58 files changed, 318 insertions(+), 99 deletions(-)

New commits:
commit c1222930eb12abafdb6ec370d0d8a5fafd5adddd
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri May 30 11:35:05 2008 +0300

    Fix two bugs shown by compiler warnings

diff --git a/swfdec/swfdec_codec_gst.c b/swfdec/swfdec_codec_gst.c
index 7414180..919c8e8 100644
--- a/swfdec/swfdec_codec_gst.c
+++ b/swfdec/swfdec_codec_gst.c
@@ -226,6 +226,8 @@ swfdec_gst_decoder_init (SwfdecGstDecoder *dec, GstCaps *srccaps, GstCaps *sinkc
   if (factory) {
     decoder = gst_element_factory_create (factory, "decoder");
     gst_object_unref (factory);
+  } else {
+    decoder = NULL;
   }
   if (decoder == NULL) {
     SWFDEC_ERROR ("failed to create decoder");
diff --git a/swfdec/swfdec_resource.c b/swfdec/swfdec_resource.c
index c602355..5732a10 100644
--- a/swfdec/swfdec_resource.c
+++ b/swfdec/swfdec_resource.c
@@ -543,6 +543,8 @@ swfdec_resource_create_movie (SwfdecResource *resource, SwfdecResourceLoad *load
     int level = swfdec_player_get_level (player, load->target_string);
     if (level >= 0)
       movie = swfdec_player_create_movie_at_level (player, resource, level);
+    else
+      movie = NULL;
   }
   if (movie == NULL) {
     SWFDEC_WARNING ("target does not reference a movie, not loading %s", load->url);
commit c5bffc0b3737b609570f50c53f647f0d93f7e4c1
Merge: 0f0b51c... c88a4bd...
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri May 30 11:31:10 2008 +0300

    Merge branch 'master' of ssh://medar@git.freedesktop.org/git/swfdec/swfdec
    
    Conflicts:
    
    	swfdec/swfdec_as_interpret.c
    	swfdec/swfdec_movie_clip_loader.c
    	swfdec/swfdec_resource.c
    	swfdec/swfdec_resource.h

diff --cc swfdec/swfdec_as_interpret.c
index e972af0,534a86a..e7c2422
--- a/swfdec/swfdec_as_interpret.c
+++ b/swfdec/swfdec_as_interpret.c
@@@ -1143,8 -1143,8 +1143,7 @@@ swfdec_action_get_url (SwfdecAsContext 
    if (!SWFDEC_IS_PLAYER (cx)) {
      SWFDEC_ERROR ("GetURL without a SwfdecPlayer");
    } else {
-     swfdec_resource_load (SWFDEC_PLAYER (cx), target, url,
- 	NULL, NULL, FALSE);
 -    swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, 
 -	SWFDEC_LOADER_REQUEST_DEFAULT, NULL);
++    swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, NULL);
    }
    g_free (url);
    g_free (target);
@@@ -1219,37 -1180,29 +1218,40 @@@ swfdec_action_get_url2 (SwfdecAsContex
    }
    internal = data[0] & 64;
    variables = data[0] & 128;
 -  if (method == 1 || method == 2) {
 -    SWFDEC_FIXME ("encode variables");
 -  }
  
-   target = swfdec_as_value_to_string (cx, swfdec_as_stack_peek (cx, 1));
    url = swfdec_as_value_to_string (cx, swfdec_as_stack_peek (cx, 2));
 +  buffer = NULL;
 +
 +  if (method == 1 || method == 2) {
 +    char *text = swfdec_as_interpret_encode_variables (cx->frame->target);
 +    if (method == 1) {
 +      url = swfdec_as_context_give_string (cx, g_strjoin (NULL, url,
 +	    strchr (url, '?') == NULL ? "?" : "&", data, NULL));
 +    } else {
 +      // don't send the nul-byte
 +      buffer = swfdec_buffer_new_for_data (g_memdup (data, strlen (text)),
 +	  strlen (text));
 +    }
 +    g_free (text);
 +  }
  
    if (!SWFDEC_IS_PLAYER (cx)) {
      SWFDEC_ERROR ("GetURL2 action requires a SwfdecPlayer");
    } else if (variables) {
      SwfdecMovie *movie;
      
+     target = swfdec_as_value_to_string (cx, swfdec_as_stack_peek (cx, 1));
      movie = swfdec_player_get_movie_from_string (SWFDEC_PLAYER (cx), target);
      if (movie != NULL) {
 -      swfdec_load_object_create (SWFDEC_AS_OBJECT (movie), url, method, NULL, NULL,
 +      swfdec_load_object_create (SWFDEC_AS_OBJECT (movie), url, buffer, NULL,
  	  swfdec_as_interpret_load_variables_on_finish);
      }
+   } else if (internal) {
+     swfdec_resource_load_movie (SWFDEC_PLAYER (cx), swfdec_as_stack_peek (cx, 1), 
 -	url, method, NULL, NULL);
++	url, NULL, NULL);
    } else {
-     swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, buffer, NULL,
- 	internal);
+     target = swfdec_as_value_to_string (cx, swfdec_as_stack_peek (cx, 1));
 -    swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, method, NULL);
++    swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, buffer);
    }
  
    swfdec_as_stack_pop_n (cx, 2);
diff --cc swfdec/swfdec_movie_clip_loader.c
index fc05a1e,2c6d5e4..1cb56b2
--- a/swfdec/swfdec_movie_clip_loader.c
+++ b/swfdec/swfdec_movie_clip_loader.c
@@@ -70,11 -70,13 +70,12 @@@ swfdec_movie_clip_loader_loadClip (Swfd
      guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
  {
    SwfdecMovieClipLoader *loader;
-   const char *url, *target;
+   const char *url;
+   SwfdecAsValue target;
  
-   SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE_CLIP_LOADER, &loader, "ss", &url, &target);
+   SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE_CLIP_LOADER, &loader, "sv", &url, &target);
  
-   swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, NULL, loader, TRUE);
 -  swfdec_resource_load_movie (SWFDEC_PLAYER (cx), &target, url, 
 -      SWFDEC_LOADER_REQUEST_DEFAULT, NULL, loader);
++  swfdec_resource_load_movie (SWFDEC_PLAYER (cx), &target, url, NULL, loader);
  }
  
  SWFDEC_AS_NATIVE (112, 102, swfdec_movie_clip_loader_unloadClip)
@@@ -83,11 -85,12 +84,11 @@@ swfdec_movie_clip_loader_unloadClip (Sw
      guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
  {
    SwfdecMovieClipLoader *loader;
-   const char *target;
+   SwfdecAsValue target;
  
-   SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE_CLIP_LOADER, &loader, "s", &target);
+   SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE_CLIP_LOADER, &loader, "v", &target);
  
-   swfdec_resource_load (SWFDEC_PLAYER (cx), target, "", NULL, loader, TRUE);
 -  swfdec_resource_load_movie (SWFDEC_PLAYER (cx), &target, "", 
 -      SWFDEC_LOADER_REQUEST_DEFAULT, NULL, loader);
++  swfdec_resource_load_movie (SWFDEC_PLAYER (cx), &target, "", NULL, loader);
  }
  
  SWFDEC_AS_NATIVE (112, 101, swfdec_movie_clip_loader_getProgress)
diff --cc swfdec/swfdec_resource.c
index 35750a1,7b90528..c602355
--- a/swfdec/swfdec_resource.c
+++ b/swfdec/swfdec_resource.c
@@@ -522,11 -492,12 +492,11 @@@ swfdec_resource_add_export (SwfdecResou
  typedef struct _SwfdecResourceLoad SwfdecResourceLoad;
  struct _SwfdecResourceLoad {
    SwfdecSandbox *		sandbox;
-   char *			target;
+   char *			target_string;
+   SwfdecSpriteMovie *		target_movie;
    char *			url;
 -  SwfdecLoaderRequest		request;
    SwfdecBuffer *		buffer;
    SwfdecMovieClipLoader *	loader;
-   gboolean			target_is_movie;
  };
  
  static void
@@@ -579,8 -580,10 +579,10 @@@ swfdec_resource_do_load (SwfdecPlayer *
      return;
    }
  
-   swfdec_player_root (player, resource, (GFunc) swfdec_as_object_mark);
-   loader = swfdec_player_load (player, load-> url, load->buffer);
+   /* FIXME: load nonetheless, even if there's no movie? */
+   if (!swfdec_resource_create_movie (resource, load))
+     return;
 -  loader = swfdec_player_load (player, load->url, load->request, load->buffer);
++  loader = swfdec_player_load (player, load->url, load->buffer);
    swfdec_resource_set_loader (resource, loader);
    g_object_unref (loader);
  }
@@@ -615,8 -624,8 +623,8 @@@ swfdec_resource_load_request (gpointer 
    }
  
    /* LAUNCH command (aka getURL) */
-   if (!load->target_is_movie && swfdec_player_get_level (player, load->target) < 0) {
-     swfdec_player_launch (player, load->url, load->target, load->buffer);
+   if (load->target_string && swfdec_player_get_level (player, load->target_string) < 0) {
 -    swfdec_player_launch (player, load->request, load->url,load->target_string, load->buffer);
++    swfdec_player_launch (player, load->url, load->target_string, load->buffer);
      return;
    }
  
@@@ -653,46 -662,76 +661,74 @@@
  }
  
  /* NB: must be called from a script */
 -/* FIXME: 7 arguments?! */
 +/* FIXME: 6 arguments?! */
- void
- swfdec_resource_load (SwfdecPlayer *player, const char *target,
-     const char *url, SwfdecBuffer *buffer, SwfdecMovieClipLoader *loader,
-     gboolean target_is_movie)
+ static void
 -swfdec_resource_load_internal (SwfdecPlayer *player, SwfdecSpriteMovie *target_movie, 
 -    const char *target_string, const char *url, SwfdecLoaderRequest request, 
 -    SwfdecBuffer *buffer, SwfdecMovieClipLoader *loader)
++swfdec_resource_load_internal (SwfdecPlayer *player,
++    SwfdecSpriteMovie *target_movie, const char *target_string,
++    const char *url, SwfdecBuffer *buffer, SwfdecMovieClipLoader *loader)
  {
-   SwfdecSpriteMovie *movie;
    SwfdecResourceLoad *load;
  
-   g_return_if_fail (SWFDEC_IS_PLAYER (player));
-   g_return_if_fail (target != NULL);
-   g_return_if_fail (url != NULL);
-   g_return_if_fail (loader == NULL || SWFDEC_IS_MOVIE_CLIP_LOADER (loader));
- 
    g_assert (SWFDEC_AS_CONTEXT (player)->frame != NULL);
    load = g_slice_new (SwfdecResourceLoad);
  
-   if (target_is_movie) {
-     movie = (SwfdecSpriteMovie *) swfdec_player_get_movie_from_string (player, target);
-     if (SWFDEC_IS_SPRITE_MOVIE (movie)) {
-       load->target = swfdec_movie_get_path (SWFDEC_MOVIE (movie), TRUE);
-     } else if (swfdec_player_get_level (player, target) >= 0) {
-       load->target = g_strdup (target);
-     } else {
-       SWFDEC_WARNING ("%s does not reference a movie, not loading %s", target, url);
-       return;
-     }
-   } else {
-     load->target = g_strdup (target);
-   }
    load->sandbox = SWFDEC_SANDBOX (SWFDEC_AS_CONTEXT (player)->global);
    load->url = g_strdup (url);
+   load->target_movie = target_movie;
+   load->target_string = g_strdup (target_string);
 -  load->request = request;
    load->buffer = buffer;
    load->loader = loader;
-   load->target_is_movie = target_is_movie;
  
    swfdec_player_root (player, load, swfdec_resource_load_mark);
    swfdec_player_request_resource (player, swfdec_resource_load_request, load, swfdec_resource_load_free);
  }
  
+ void
+ swfdec_resource_load_movie (SwfdecPlayer *player, const SwfdecAsValue *target, 
 -    const char *url, SwfdecLoaderRequest request, SwfdecBuffer *buffer, 
 -    SwfdecMovieClipLoader *loader)
++    const char *url, SwfdecBuffer *buffer, SwfdecMovieClipLoader *loader)
+ {
+   SwfdecMovie *movie;
+   const char *s;
+ 
+   g_return_if_fail (SWFDEC_IS_PLAYER (player));
+   g_return_if_fail (target != NULL);
+   g_return_if_fail (url != NULL);
+   g_return_if_fail (loader == NULL || SWFDEC_IS_MOVIE_CLIP_LOADER (loader));
+ 
+   if (SWFDEC_AS_VALUE_IS_OBJECT (target)) {
+     SwfdecAsObject *object = SWFDEC_AS_VALUE_GET_OBJECT (target);
+     if (SWFDEC_IS_SPRITE_MOVIE (object)) {
+       swfdec_resource_load_internal (player, SWFDEC_SPRITE_MOVIE (object),
 -	  NULL, url, request, buffer, loader);
++	  NULL, url, buffer, loader);
+       return;
+     }
+   }
+ 
+   s = swfdec_as_value_to_string (SWFDEC_AS_CONTEXT (player), target);
+   movie = swfdec_player_get_movie_from_string (player, s);
+   if (SWFDEC_IS_SPRITE_MOVIE (movie)) {
+     swfdec_resource_load_internal (player, SWFDEC_SPRITE_MOVIE (movie),
 -	NULL, url, request, buffer, loader);
++	NULL, url, buffer, loader);
+     return;
+   }
+   if (swfdec_player_get_level (player, s) < 0) {
+     SWFDEC_WARNING ("%s does not reference a movie, not loading %s", s, url);
+     return;
+   }
 -  swfdec_resource_load_internal (player, NULL, s, url, request, buffer, NULL);
++  swfdec_resource_load_internal (player, NULL, s, url, buffer, NULL);
+ }
+ 
+ void
+ swfdec_resource_load (SwfdecPlayer *player, const char *target, 
 -    const char *url, SwfdecLoaderRequest request, SwfdecBuffer *buffer)
++    const char *url, SwfdecBuffer *buffer)
+ {
+   g_return_if_fail (SWFDEC_IS_PLAYER (player));
+   g_return_if_fail (target != NULL);
+   g_return_if_fail (url != NULL);
+ 
 -  swfdec_resource_load_internal (player, NULL, target, url, request, buffer, NULL);
++  swfdec_resource_load_internal (player, NULL, target, url, buffer, NULL);
+ }
+ 
  gboolean
  swfdec_resource_emit_on_load_init (SwfdecResource *resource)
  {
diff --cc swfdec/swfdec_resource.h
index ac4f292,d1c977f..5b12ee6
--- a/swfdec/swfdec_resource.h
+++ b/swfdec/swfdec_resource.h
@@@ -85,12 -85,17 +85,15 @@@ gpointer	swfdec_resource_get_export		(S
  const char *	swfdec_resource_get_export_name    	(SwfdecResource *	root,
  							 SwfdecCharacter *	character);
  
+ void		swfdec_resource_load_movie		(SwfdecPlayer *		player,
+ 							 const SwfdecAsValue *	target, 
+ 							 const char *		url,
 -							 SwfdecLoaderRequest	request,
+ 							 SwfdecBuffer *		buffer, 
+ 							 SwfdecMovieClipLoader *loader);
  void		swfdec_resource_load			(SwfdecPlayer *		player,
  							 const char *		target,
  							 const char *		url,
- 							 SwfdecBuffer *		buffer,
- 							 SwfdecMovieClipLoader *loader,
- 							 gboolean		target_is_movie);
 -							 SwfdecLoaderRequest	request,
+ 							 SwfdecBuffer *		buffer);
  
  
  G_END_DECLS
commit 0f0b51c3c48777a9bfc3d03a31fd3a3f7a93c32c
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri May 30 10:12:46 2008 +0300

    Implement encoding variables for getURL2 action

diff --git a/swfdec/swfdec_as_interpret.c b/swfdec/swfdec_as_interpret.c
index 3aefca5..e972af0 100644
--- a/swfdec/swfdec_as_interpret.c
+++ b/swfdec/swfdec_as_interpret.c
@@ -1162,11 +1162,50 @@ swfdec_as_interpret_load_variables_on_finish (SwfdecAsObject *target,
   swfdec_actor_queue_script (SWFDEC_ACTOR (target), SWFDEC_EVENT_DATA);
 }
 
+static gboolean
+swfdec_as_interpret_encode_variables_foreach (SwfdecAsObject *object,
+    const char *variable, SwfdecAsValue *value, guint flags, gpointer data)
+{
+  GString *variables = data;
+  char *escaped;
+
+  // FIXME: check propflags?
+
+  if (variables->len > 0)
+    g_string_append_c (variables, '&');
+
+  escaped = swfdec_as_string_escape (object->context, variable);
+  g_string_append (variables, escaped);
+  g_free (escaped);
+
+  g_string_append_c (variables, '=');
+
+  escaped = swfdec_as_string_escape (object->context,
+      swfdec_as_value_to_string (object->context, value));
+  g_string_append (variables, escaped);
+  g_free (escaped);
+
+  return TRUE;
+}
+
+static char *
+swfdec_as_interpret_encode_variables (SwfdecAsObject *object)
+{
+  GString *variables = g_string_new ("");
+
+  SWFDEC_FIXME ("Encoding variables for getURL2 shouldn't include child movies");
+  swfdec_as_object_foreach (object,
+      swfdec_as_interpret_encode_variables_foreach, variables);
+
+  return g_string_free (variables, FALSE);
+}
+
 static void
 swfdec_action_get_url2 (SwfdecAsContext *cx, guint action, const guint8 *data, guint len)
 {
   const char *target, *url;
   guint method, internal, variables;
+  SwfdecBuffer *buffer;
 
   if (len != 1) {
     SWFDEC_ERROR ("GetURL2 requires 1 byte of data, not %u", len);
@@ -1180,12 +1219,23 @@ swfdec_action_get_url2 (SwfdecAsContext *cx, guint action, const guint8 *data, g
   }
   internal = data[0] & 64;
   variables = data[0] & 128;
-  if (method == 1 || method == 2) {
-    SWFDEC_FIXME ("encode variables");
-  }
 
   target = swfdec_as_value_to_string (cx, swfdec_as_stack_peek (cx, 1));
   url = swfdec_as_value_to_string (cx, swfdec_as_stack_peek (cx, 2));
+  buffer = NULL;
+
+  if (method == 1 || method == 2) {
+    char *text = swfdec_as_interpret_encode_variables (cx->frame->target);
+    if (method == 1) {
+      url = swfdec_as_context_give_string (cx, g_strjoin (NULL, url,
+	    strchr (url, '?') == NULL ? "?" : "&", data, NULL));
+    } else {
+      // don't send the nul-byte
+      buffer = swfdec_buffer_new_for_data (g_memdup (data, strlen (text)),
+	  strlen (text));
+    }
+    g_free (text);
+  }
 
   if (!SWFDEC_IS_PLAYER (cx)) {
     SWFDEC_ERROR ("GetURL2 action requires a SwfdecPlayer");
@@ -1194,11 +1244,12 @@ swfdec_action_get_url2 (SwfdecAsContext *cx, guint action, const guint8 *data, g
     
     movie = swfdec_player_get_movie_from_string (SWFDEC_PLAYER (cx), target);
     if (movie != NULL) {
-      swfdec_load_object_create (SWFDEC_AS_OBJECT (movie), url, NULL, NULL,
+      swfdec_load_object_create (SWFDEC_AS_OBJECT (movie), url, buffer, NULL,
 	  swfdec_as_interpret_load_variables_on_finish);
     }
   } else {
-    swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, NULL, NULL, internal);
+    swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, buffer, NULL,
+	internal);
   }
 
   swfdec_as_stack_pop_n (cx, 2);
commit d01cfebb94a1573aa692b9b2040fbd9bba9f11d5
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Fri May 30 10:04:29 2008 +0300

    Add a test to see whether Video object's special props are included in for each

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index fb92f67..9fc0ec2 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -3679,6 +3679,9 @@ EXTRA_DIST = \
 	utf-32-le-bom.txt \
 	values.as \
 	video.flv \
+	video-enumerate.c \
+	video-enumerate.swf \
+	video-enumerate.swf.trace \
 	video-properties.as \
 	video-properties-6.swf \
 	video-properties-6.swf.trace \
diff --git a/test/trace/video-enumerate.c b/test/trace/video-enumerate.c
new file mode 100644
index 0000000..250b159
--- /dev/null
+++ b/test/trace/video-enumerate.c
@@ -0,0 +1,39 @@
+/* gcc `pkg-config --libs --cflags libming` video-enumerate.c -o video-enumerate && ./video-enumerate
+ */
+
+#include <ming.h>
+
+int
+main (int argc, char **argv)
+{
+  SWFMovie movie;
+  SWFVideoStream video;
+  SWFDisplayItem item;
+  SWFAction action;
+
+  if (Ming_init ())
+    return 1;
+  Ming_useSWFVersion (8);
+
+  movie = newSWFMovie();
+  SWFMovie_setRate (movie, 1);
+  SWFMovie_setDimension (movie, 200, 150);
+  video = newSWFVideoStream ();
+  SWFVideoStream_setDimension (video, 200, 150);
+  item = SWFMovie_add (movie, (SWFBlock) video);
+  SWFDisplayItem_setName (item, "video");
+  action = newSWFAction (""
+      "trace (\"Test if the special properties of Video object show up when enumerating\");"
+      "video.x = 'hello';"
+      "props = [];"
+      "for (var prop in video) {"
+      "  props.push(prop);"
+      "}"
+      "props.sort ();"
+      "trace (props);"
+      "getURL ('fscommand:quit', '');"
+      "");
+  SWFMovie_add (movie, (SWFBlock) action);
+  SWFMovie_save (movie, "video-enumerate.swf");
+  return 0;
+}
diff --git a/test/trace/video-enumerate.swf b/test/trace/video-enumerate.swf
new file mode 100644
index 0000000..fa1100d
Binary files /dev/null and b/test/trace/video-enumerate.swf differ
diff --git a/test/trace/video-enumerate.swf.trace b/test/trace/video-enumerate.swf.trace
new file mode 100644
index 0000000..09e13aa
--- /dev/null
+++ b/test/trace/video-enumerate.swf.trace
@@ -0,0 +1,2 @@
+Test if the special properties of Video object show up when enumerating
+deblocking,height,smoothing,width,x
commit 7d3aca171f2125e3443e22c7749b88169e86fe9a
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Thu May 29 15:23:15 2008 +0300

    Remove SwfdecLoaderRequest, now GET variables are appended to the URL earlier
    
    Loads are normal get requests if the buffer is NULL and post requests otherwise

diff --git a/swfdec-gtk/swfdec_gtk_loader.c b/swfdec-gtk/swfdec_gtk_loader.c
index 76155e8..1793a03 100644
--- a/swfdec-gtk/swfdec_gtk_loader.c
+++ b/swfdec-gtk/swfdec_gtk_loader.c
@@ -128,7 +128,7 @@ swfdec_gtk_loader_dispose (GObject *object)
 
 static void
 swfdec_gtk_loader_load (SwfdecLoader *loader, SwfdecPlayer *player, 
-    const char *url_string, SwfdecLoaderRequest request, SwfdecBuffer *buffer)
+    const char *url_string, SwfdecBuffer *buffer)
 {
   SwfdecURL *url;
   
@@ -145,12 +145,12 @@ swfdec_gtk_loader_load (SwfdecLoader *loader, SwfdecPlayer *player,
   if (!swfdec_url_has_protocol (url, "http") &&
       !swfdec_url_has_protocol (url, "https")) {
     SWFDEC_LOADER_CLASS (swfdec_gtk_loader_parent_class)->load (loader, player,
-	url_string, request, buffer);
+	url_string, buffer);
   } else {
     SwfdecGtkLoader *gtk = SWFDEC_GTK_LOADER (loader);
     SwfdecGtkLoaderClass *klass = SWFDEC_GTK_LOADER_GET_CLASS (gtk);
 
-    gtk->message = soup_message_new (request == SWFDEC_LOADER_REQUEST_POST ? "POST" : "GET",
+    gtk->message = soup_message_new (buffer != NULL ? "POST" : "GET",
 	swfdec_url_get_url (url));
     soup_message_set_flags (gtk->message, SOUP_MESSAGE_OVERWRITE_CHUNKS);
     g_signal_connect (gtk->message, "got-chunk", G_CALLBACK (swfdec_gtk_loader_push), gtk);
diff --git a/swfdec/swfdec_as_interpret.c b/swfdec/swfdec_as_interpret.c
index a6d7044..3aefca5 100644
--- a/swfdec/swfdec_as_interpret.c
+++ b/swfdec/swfdec_as_interpret.c
@@ -1143,8 +1143,8 @@ swfdec_action_get_url (SwfdecAsContext *cx, guint action, const guint8 *data, gu
   if (!SWFDEC_IS_PLAYER (cx)) {
     SWFDEC_ERROR ("GetURL without a SwfdecPlayer");
   } else {
-    swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, 
-	SWFDEC_LOADER_REQUEST_DEFAULT, NULL, NULL, FALSE);
+    swfdec_resource_load (SWFDEC_PLAYER (cx), target, url,
+	NULL, NULL, FALSE);
   }
   g_free (url);
   g_free (target);
@@ -1194,11 +1194,11 @@ swfdec_action_get_url2 (SwfdecAsContext *cx, guint action, const guint8 *data, g
     
     movie = swfdec_player_get_movie_from_string (SWFDEC_PLAYER (cx), target);
     if (movie != NULL) {
-      swfdec_load_object_create (SWFDEC_AS_OBJECT (movie), url, method, NULL, NULL,
+      swfdec_load_object_create (SWFDEC_AS_OBJECT (movie), url, NULL, NULL,
 	  swfdec_as_interpret_load_variables_on_finish);
     }
   } else {
-    swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, method, NULL, NULL, internal);
+    swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, NULL, NULL, internal);
   }
 
   swfdec_as_stack_pop_n (cx, 2);
diff --git a/swfdec/swfdec_file_loader.c b/swfdec/swfdec_file_loader.c
index 178601a..7f92275 100644
--- a/swfdec/swfdec_file_loader.c
+++ b/swfdec/swfdec_file_loader.c
@@ -39,7 +39,7 @@ G_DEFINE_TYPE (SwfdecFileLoader, swfdec_file_loader, SWFDEC_TYPE_LOADER)
 
 static void
 swfdec_file_loader_load (SwfdecLoader *loader, SwfdecPlayer *player,
-    const char *url_string, SwfdecLoaderRequest request, SwfdecBuffer *buffer)
+    const char *url_string, SwfdecBuffer *buffer)
 {
   SwfdecStream *stream = SWFDEC_STREAM (loader);
   GError *error = NULL;
diff --git a/swfdec/swfdec_load_object.c b/swfdec/swfdec_load_object.c
index 59ff143..2b15c09 100644
--- a/swfdec/swfdec_load_object.c
+++ b/swfdec/swfdec_load_object.c
@@ -172,7 +172,7 @@ swfdec_load_object_load (SwfdecPlayer *player, gboolean allow, gpointer obj)
     return;
   }
 
-  load->loader = swfdec_player_load (player, load->url, load->request, load->buffer);
+  load->loader = swfdec_player_load (player, load->url, load->buffer);
 
   swfdec_stream_set_target (SWFDEC_STREAM (load->loader), SWFDEC_STREAM_TARGET (load));
   swfdec_loader_set_data_type (load->loader, SWFDEC_LOADER_DATA_TEXT);
@@ -241,8 +241,8 @@ swfdec_load_object_mark (gpointer object, gpointer player)
 
 void
 swfdec_load_object_create (SwfdecAsObject *target, const char *url,
-    SwfdecLoaderRequest request, SwfdecBuffer *data,
-    SwfdecLoadObjectProgress progress, SwfdecLoadObjectFinish finish)
+    SwfdecBuffer *data, SwfdecLoadObjectProgress progress,
+    SwfdecLoadObjectFinish finish)
 {
   SwfdecPlayer *player;
   SwfdecLoadObject *load;
@@ -257,7 +257,6 @@ swfdec_load_object_create (SwfdecAsObject *target, const char *url,
 
   load->target = target;
   load->url = url;
-  load->request = request;
   load->buffer = data;
   load->progress = progress;
   load->finish = finish;
diff --git a/swfdec/swfdec_load_object.h b/swfdec/swfdec_load_object.h
index cd899a9..4e69288 100644
--- a/swfdec/swfdec_load_object.h
+++ b/swfdec/swfdec_load_object.h
@@ -47,7 +47,6 @@ struct _SwfdecLoadObject {
   GObject			object;
   
   const char *			url;		/* GC'ed url to request */
-  SwfdecLoaderRequest		request;	/* type of request */
   SwfdecBuffer *		buffer;		/* data to send */
   SwfdecLoader *		loader;		/* loader when loading or NULL */
 
@@ -66,7 +65,6 @@ GType		swfdec_load_object_get_type	(void);
 
 void		swfdec_load_object_create     	(SwfdecAsObject *		target,
 						 const char *			url,
-						 SwfdecLoaderRequest		request,
 						 SwfdecBuffer *			data,
 						 SwfdecLoadObjectProgress	progress,
 						 SwfdecLoadObjectFinish		finish);
diff --git a/swfdec/swfdec_load_object_as.c b/swfdec/swfdec_load_object_as.c
index b697e6a..5a6510b 100644
--- a/swfdec/swfdec_load_object_as.c
+++ b/swfdec/swfdec_load_object_as.c
@@ -74,8 +74,8 @@ swfdec_load_object_as_load (SwfdecAsContext *cx, SwfdecAsObject *object, guint a
   SWFDEC_AS_VALUE_SET_BOOLEAN (rval, FALSE);
   SWFDEC_AS_CHECK (SWFDEC_TYPE_AS_OBJECT, &object, "s", &url);
 
-  swfdec_load_object_create (object, url, SWFDEC_LOADER_REQUEST_DEFAULT, NULL,
-      swfdec_load_object_on_progress, swfdec_load_object_on_finish);
+  swfdec_load_object_create (object, url, NULL, swfdec_load_object_on_progress,
+      swfdec_load_object_on_finish);
 
   SWFDEC_AS_VALUE_SET_INT (&val, 0);
   swfdec_as_object_set_variable_and_flags (object, SWFDEC_AS_STR__bytesLoaded,
@@ -108,23 +108,31 @@ swfdec_load_object_as_sendAndLoad (SwfdecAsContext *cx, SwfdecAsObject *object,
   SwfdecAsObject *target;
   SwfdecAsValue val;
   SwfdecBuffer *buffer;
-  SwfdecLoaderRequest method;
+  gboolean get;
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_AS_OBJECT, &object, "sO|s", &url, &target, &method_string);
 
   SWFDEC_FIXME ("support for contentType is missing");
 
   if (method_string == NULL || g_ascii_strcasecmp (method_string, "get") == 0) {
-    method = SWFDEC_LOADER_REQUEST_GET;
+    get = TRUE;
   } else {
-    method = SWFDEC_LOADER_REQUEST_POST;
+    get = FALSE;
   }
   SWFDEC_AS_VALUE_SET_OBJECT (&val, object);
   data = swfdec_as_value_to_string (cx, &val);
-  // don't send the nul-byte
-  buffer = swfdec_buffer_new_for_data (g_memdup (data, strlen (data)),
-      strlen (data));
-  swfdec_load_object_create (target, url, method, buffer,
+
+  if (get) {
+    url = swfdec_as_context_give_string (cx,
+	g_strjoin (NULL, url, "?", data, NULL));
+    buffer = NULL;
+  } else {
+    // don't send the nul-byte
+    buffer = swfdec_buffer_new_for_data (g_memdup (data, strlen (data)),
+	strlen (data));
+  }
+
+  swfdec_load_object_create (target, url, buffer,
       swfdec_load_object_on_progress, swfdec_load_object_on_finish);
 
   SWFDEC_AS_VALUE_SET_INT (&val, 0);
diff --git a/swfdec/swfdec_loader.c b/swfdec/swfdec_loader.c
index 9b96681..0b7cff2 100644
--- a/swfdec/swfdec_loader.c
+++ b/swfdec/swfdec_loader.c
@@ -78,18 +78,6 @@
  * inside a #SwfdecLoader.
  */
 
-/**
- * SwfdecLoaderRequest:
- * @SWFDEC_LOADER_REQUEST_DEFAULT: Use the default method (this most likely is 
- *                                 equal to HTTPget)
- * @SWFDEC_LOADER_REQUEST_GET: Use HTTP get
- * @SWFDEC_LOADER_REQUEST_POST: Use HTTP post
- *
- * Describes the moethod to use for requesting a given URL. These methods map
- * naturally to HTTP methods, since HTTP is the common method for requesting 
- * Flash content.
- */
-
 /*** SwfdecLoader ***/
 
 enum {
diff --git a/swfdec/swfdec_loader.h b/swfdec/swfdec_loader.h
index 0622770..1b0c272 100644
--- a/swfdec/swfdec_loader.h
+++ b/swfdec/swfdec_loader.h
@@ -38,13 +38,6 @@ typedef enum {
   SWFDEC_LOADER_DATA_PNG
 } SwfdecLoaderDataType;
 
-/* NB: actal numbers in SwfdecLoaderRequest are important for GetURL2 action */
-typedef enum {
-  SWFDEC_LOADER_REQUEST_DEFAULT = 0,
-  SWFDEC_LOADER_REQUEST_GET = 1,
-  SWFDEC_LOADER_REQUEST_POST = 2
-} SwfdecLoaderRequest;
-
 typedef struct _SwfdecLoader SwfdecLoader;
 typedef struct _SwfdecLoaderClass SwfdecLoaderClass;
 
@@ -74,7 +67,6 @@ struct _SwfdecLoaderClass
   void			(* load)	(SwfdecLoader *			loader, 
 					 SwfdecPlayer *			player,
 					 const char *			url,
-					 SwfdecLoaderRequest		request,
 					 SwfdecBuffer *	           	buffer);
 };
 
diff --git a/swfdec/swfdec_movie_clip_loader.c b/swfdec/swfdec_movie_clip_loader.c
index 77d8704..fc05a1e 100644
--- a/swfdec/swfdec_movie_clip_loader.c
+++ b/swfdec/swfdec_movie_clip_loader.c
@@ -74,8 +74,7 @@ swfdec_movie_clip_loader_loadClip (SwfdecAsContext *cx, SwfdecAsObject *object,
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE_CLIP_LOADER, &loader, "ss", &url, &target);
 
-  swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, 
-      SWFDEC_LOADER_REQUEST_DEFAULT, NULL, loader, TRUE);
+  swfdec_resource_load (SWFDEC_PLAYER (cx), target, url, NULL, loader, TRUE);
 }
 
 SWFDEC_AS_NATIVE (112, 102, swfdec_movie_clip_loader_unloadClip)
@@ -88,8 +87,7 @@ swfdec_movie_clip_loader_unloadClip (SwfdecAsContext *cx, SwfdecAsObject *object
 
   SWFDEC_AS_CHECK (SWFDEC_TYPE_MOVIE_CLIP_LOADER, &loader, "s", &target);
 
-  swfdec_resource_load (SWFDEC_PLAYER (cx), target, "", 
-      SWFDEC_LOADER_REQUEST_DEFAULT, NULL, loader, TRUE);
+  swfdec_resource_load (SWFDEC_PLAYER (cx), target, "", NULL, loader, TRUE);
 }
 
 SWFDEC_AS_NATIVE (112, 101, swfdec_movie_clip_loader_getProgress)
diff --git a/swfdec/swfdec_net_stream.c b/swfdec/swfdec_net_stream.c
index 8b2729b..6a99e5e 100644
--- a/swfdec/swfdec_net_stream.c
+++ b/swfdec/swfdec_net_stream.c
@@ -557,8 +557,7 @@ swfdec_net_stream_load (SwfdecPlayer *player, gboolean allowed, gpointer streamp
   SwfdecLoader *loader;
 
   if (allowed) {
-    loader = swfdec_player_load (player, stream->requested_url, 
-	SWFDEC_LOADER_REQUEST_DEFAULT, NULL);
+    loader = swfdec_player_load (player, stream->requested_url, NULL);
     swfdec_net_stream_set_loader (stream, loader);
     g_object_unref (loader);
   } else {
diff --git a/swfdec/swfdec_player.c b/swfdec/swfdec_player.c
index c06537c..81dd781 100644
--- a/swfdec/swfdec_player.c
+++ b/swfdec/swfdec_player.c
@@ -2298,8 +2298,7 @@ swfdec_player_class_init (SwfdecPlayerClass *klass)
    */
   signals[LAUNCH] = g_signal_new ("launch", G_TYPE_FROM_CLASS (klass),
       G_SIGNAL_RUN_LAST, 0, NULL, NULL, swfdec_marshal_VOID__ENUM_STRING_STRING_BOXED,
-      G_TYPE_NONE, 4, SWFDEC_TYPE_LOADER_REQUEST, G_TYPE_STRING, G_TYPE_STRING, 
-      SWFDEC_TYPE_BUFFER);
+      G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_STRING, SWFDEC_TYPE_BUFFER);
   /**
    * SwfdecPlayer::missing-plugins:
    * @player: the #SwfdecPlayer missing plugins
@@ -2545,7 +2544,7 @@ swfdec_player_get_movie_at_level (SwfdecPlayer *player, int level)
 }
 
 void
-swfdec_player_launch (SwfdecPlayer *player, SwfdecLoaderRequest request, const char *url, 
+swfdec_player_launch (SwfdecPlayer *player, const char *url,
     const char *target, SwfdecBuffer *data)
 {
   g_return_if_fail (SWFDEC_IS_PLAYER (player));
@@ -2557,7 +2556,7 @@ swfdec_player_launch (SwfdecPlayer *player, SwfdecLoaderRequest request, const c
     g_signal_emit (player, signals[FSCOMMAND], 0, command, target);
     return;
   }
-  g_signal_emit (player, signals[LAUNCH], 0, (int) request, url, target, data);
+  g_signal_emit (player, signals[LAUNCH], 0, url, target, data);
 }
 
 void
@@ -2715,7 +2714,7 @@ swfdec_player_create_url (SwfdecPlayer *player, const char *string)
 
 SwfdecLoader *
 swfdec_player_load (SwfdecPlayer *player, const char *url,
-    SwfdecLoaderRequest request, SwfdecBuffer *buffer)
+    SwfdecBuffer *buffer)
 {
   SwfdecLoader *loader;
   SwfdecLoaderClass *klass;
@@ -2726,7 +2725,7 @@ swfdec_player_load (SwfdecPlayer *player, const char *url,
   loader = g_object_new (player->priv->loader_type, NULL);
   klass = SWFDEC_LOADER_GET_CLASS (loader);
   g_return_val_if_fail (klass->load != NULL, NULL);
-  klass->load (loader, player, url, request, buffer);
+  klass->load (loader, player, url, buffer);
 
   return loader;
 }
@@ -3732,8 +3731,7 @@ swfdec_player_set_url (SwfdecPlayer *player, const SwfdecURL *url)
   }
   /* we initialize url and base_url before requesting the loader, so the loader
    * can query them */
-  loader = swfdec_player_load (player, swfdec_url_get_url (url), 
-      SWFDEC_LOADER_REQUEST_DEFAULT, NULL);
+  loader = swfdec_player_load (player, swfdec_url_get_url (url), NULL);
   priv->resource = swfdec_resource_new (player, loader, priv->variables);
   movie = swfdec_movie_new (player, -16384, NULL, priv->resource, NULL, SWFDEC_AS_STR__level0);
   SWFDEC_ACTOR (movie)->focusrect = SWFDEC_FLASH_YES;
diff --git a/swfdec/swfdec_player_internal.h b/swfdec/swfdec_player_internal.h
index 2eee43e..cd31855 100644
--- a/swfdec/swfdec_player_internal.h
+++ b/swfdec/swfdec_player_internal.h
@@ -182,7 +182,6 @@ SwfdecURL *	swfdec_player_create_url	(SwfdecPlayer *		player,
 						 const char *		string);
 SwfdecLoader *	swfdec_player_load		(SwfdecPlayer *		player,
 						 const char *		url,
-						 SwfdecLoaderRequest	request,
 						 SwfdecBuffer *		buffer);
 SwfdecAsObject *swfdec_player_get_export_class	(SwfdecPlayer *		player,
 						 const char *		name);
@@ -252,7 +251,6 @@ SwfdecSpriteMovie *
 						 SwfdecResource *	resource,
 						 int			level);
 void		swfdec_player_launch		(SwfdecPlayer *         player,
-						 SwfdecLoaderRequest	request,
 						 const char *		url,
 						 const char *		target,
 						 SwfdecBuffer *		data);
diff --git a/swfdec/swfdec_policy_file.c b/swfdec/swfdec_policy_file.c
index 941aaa4..9a2471d 100644
--- a/swfdec/swfdec_policy_file.c
+++ b/swfdec/swfdec_policy_file.c
@@ -260,7 +260,7 @@ swfdec_policy_file_new (SwfdecPlayer *player, const SwfdecURL *url)
 	swfdec_url_get_host (url), swfdec_url_get_port (url)));
   } else {
     file->stream = SWFDEC_STREAM (swfdec_player_load (player,
-	  swfdec_url_get_url (url), SWFDEC_LOADER_REQUEST_DEFAULT, NULL));
+	  swfdec_url_get_url (url), NULL));
   }
   swfdec_stream_set_target (file->stream, SWFDEC_STREAM_TARGET (file));
   player->priv->loading_policy_files = 
diff --git a/swfdec/swfdec_resource.c b/swfdec/swfdec_resource.c
index deb7d91..35750a1 100644
--- a/swfdec/swfdec_resource.c
+++ b/swfdec/swfdec_resource.c
@@ -524,7 +524,6 @@ struct _SwfdecResourceLoad {
   SwfdecSandbox *		sandbox;
   char *			target;
   char *			url;
-  SwfdecLoaderRequest		request;
   SwfdecBuffer *		buffer;
   SwfdecMovieClipLoader *	loader;
   gboolean			target_is_movie;
@@ -581,7 +580,7 @@ swfdec_resource_do_load (SwfdecPlayer *player, gboolean allowed, gpointer loadp)
   }
 
   swfdec_player_root (player, resource, (GFunc) swfdec_as_object_mark);
-  loader = swfdec_player_load (player, load-> url, load->request, load->buffer);
+  loader = swfdec_player_load (player, load-> url, load->buffer);
   swfdec_resource_set_loader (resource, loader);
   g_object_unref (loader);
 }
@@ -617,7 +616,7 @@ swfdec_resource_load_request (gpointer loadp, gpointer playerp)
 
   /* LAUNCH command (aka getURL) */
   if (!load->target_is_movie && swfdec_player_get_level (player, load->target) < 0) {
-    swfdec_player_launch (player, load->request, load->url,load->target, load->buffer);
+    swfdec_player_launch (player, load->url, load->target, load->buffer);
     return;
   }
 
@@ -654,10 +653,10 @@ swfdec_resource_load_request (gpointer loadp, gpointer playerp)
 }
 
 /* NB: must be called from a script */
-/* FIXME: 7 arguments?! */
+/* FIXME: 6 arguments?! */
 void
-swfdec_resource_load (SwfdecPlayer *player, const char *target, const char *url, 
-    SwfdecLoaderRequest request, SwfdecBuffer *buffer, SwfdecMovieClipLoader *loader,
+swfdec_resource_load (SwfdecPlayer *player, const char *target,
+    const char *url, SwfdecBuffer *buffer, SwfdecMovieClipLoader *loader,
     gboolean target_is_movie)
 {
   SwfdecSpriteMovie *movie;
@@ -686,7 +685,6 @@ swfdec_resource_load (SwfdecPlayer *player, const char *target, const char *url,
   }
   load->sandbox = SWFDEC_SANDBOX (SWFDEC_AS_CONTEXT (player)->global);
   load->url = g_strdup (url);
-  load->request = request;
   load->buffer = buffer;
   load->loader = loader;
   load->target_is_movie = target_is_movie;
diff --git a/swfdec/swfdec_resource.h b/swfdec/swfdec_resource.h
index 3496789..ac4f292 100644
--- a/swfdec/swfdec_resource.h
+++ b/swfdec/swfdec_resource.h
@@ -88,7 +88,6 @@ const char *	swfdec_resource_get_export_name    	(SwfdecResource *	root,
 void		swfdec_resource_load			(SwfdecPlayer *		player,
 							 const char *		target,
 							 const char *		url,
-							 SwfdecLoaderRequest	request,
 							 SwfdecBuffer *		buffer,
 							 SwfdecMovieClipLoader *loader,
 							 gboolean		target_is_movie);
diff --git a/swfdec/swfdec_text_field_movie.c b/swfdec/swfdec_text_field_movie.c
index d6ec755..a231b12 100644
--- a/swfdec/swfdec_text_field_movie.c
+++ b/swfdec/swfdec_text_field_movie.c
@@ -515,7 +515,7 @@ swfdec_text_field_movie_letter_clicked (SwfdecTextFieldMovie *text,
 
   if (attr->url != SWFDEC_AS_STR_EMPTY) {
     swfdec_player_launch (SWFDEC_PLAYER (SWFDEC_AS_OBJECT (text)->context),
-	SWFDEC_LOADER_REQUEST_DEFAULT, attr->url, attr->target, NULL);
+	attr->url, attr->target, NULL);
   }
 }
 
diff --git a/test/swfdec_test_plugin.c b/test/swfdec_test_plugin.c
index 120aba3..5bf4adb 100644
--- a/test/swfdec_test_plugin.c
+++ b/test/swfdec_test_plugin.c
@@ -100,9 +100,8 @@ swfdec_test_plugin_swfdec_trace (SwfdecPlayer *player, const char *message,
 }
 
 static void
-swfdec_test_plugin_swfdec_launch (SwfdecPlayer *player,
-  SwfdecLoaderRequest request, const char *url, const char *target,
-  SwfdecBuffer *data, SwfdecTestPlugin *plugin)
+swfdec_test_plugin_swfdec_launch (SwfdecPlayer *player, const char *url,
+    const char *target, SwfdecBuffer *data, SwfdecTestPlugin *plugin)
 {
   plugin->launch (plugin, url);
 }
diff --git a/vivified/code/vivi_code_asm_get_url2.c b/vivified/code/vivi_code_asm_get_url2.c
index 8fe0faf..348810b 100644
--- a/vivified/code/vivi_code_asm_get_url2.c
+++ b/vivified/code/vivi_code_asm_get_url2.c
@@ -133,14 +133,14 @@ vivi_code_asm_get_url2_new_from_flags (guint flags)
 }
 
 ViviCodeAsm *
-vivi_code_asm_get_url2_new (SwfdecLoaderRequest method, gboolean internal,
+vivi_code_asm_get_url2_new (guint method, gboolean internal,
     gboolean variables)
 {
   guint flags = 0;
 
-  if (method == SWFDEC_LOADER_REQUEST_GET) {
+  if (method == 1) {
     flags |= (1 << 0);
-  } else if (method == SWFDEC_LOADER_REQUEST_POST) {
+  } else if (method == 2) {
     flags |= (1 << 1);
   }
   if (internal)
diff --git a/vivified/code/vivi_code_asm_get_url2.h b/vivified/code/vivi_code_asm_get_url2.h
index 552d2a6..b53de99 100644
--- a/vivified/code/vivi_code_asm_get_url2.h
+++ b/vivified/code/vivi_code_asm_get_url2.h
@@ -49,7 +49,7 @@ struct _ViviCodeAsmGetUrl2Class
 
 GType		vivi_code_asm_get_url2_get_type			(void);
 
-ViviCodeAsm *	vivi_code_asm_get_url2_new			(SwfdecLoaderRequest		method,
+ViviCodeAsm *	vivi_code_asm_get_url2_new			(guint				method,
 								 gboolean			internal,
 								 gboolean			variables);
 
diff --git a/vivified/code/vivi_code_get_url.c b/vivified/code/vivi_code_get_url.c
index 9d36316..e93f987 100644
--- a/vivified/code/vivi_code_get_url.c
+++ b/vivified/code/vivi_code_get_url.c
@@ -93,7 +93,7 @@ vivi_code_get_url_init (ViviCodeGetUrl *token)
 
 ViviCodeStatement *
 vivi_code_get_url_new (ViviCodeValue *target, ViviCodeValue *url,
-    SwfdecLoaderRequest method, gboolean internal, gboolean variables)
+    guint method, gboolean internal, gboolean variables)
 {
   ViviCodeGetUrl *ret;
 
diff --git a/vivified/code/vivi_code_get_url.h b/vivified/code/vivi_code_get_url.h
index 1207a61..74ee15f 100644
--- a/vivified/code/vivi_code_get_url.h
+++ b/vivified/code/vivi_code_get_url.h
@@ -42,7 +42,7 @@ struct _ViviCodeGetUrl
 
   ViviCodeValue *	url;
   ViviCodeValue *	target;
-  SwfdecLoaderRequest	method;
+  guint			method;
   gboolean		internal;
   gboolean		variables;
 };
@@ -56,7 +56,7 @@ GType			vivi_code_get_url_get_type   	(void);
 
 ViviCodeStatement *	vivi_code_get_url_new		(ViviCodeValue *	target,
 							 ViviCodeValue *	url,
-							 SwfdecLoaderRequest	method,
+							 guint			method,
 							 gboolean		internal,
 							 gboolean		variables);
 
diff --git a/vivified/code/vivi_parser.c b/vivified/code/vivi_parser.c
index 1383f50..283143e 100644
--- a/vivified/code/vivi_parser.c
+++ b/vivified/code/vivi_parser.c
@@ -1440,7 +1440,7 @@ parse_get_url2 (ParseData *data, gboolean require_two, gboolean level,
 {
   ViviCodeValue *url, *target;
   ViviCodeStatement *statement;
-  SwfdecLoaderRequest method;
+  guint method;
 
   parse_token (data, TOKEN_PARENTHESIS_LEFT);
 
@@ -1478,25 +1478,25 @@ parse_get_url2 (ParseData *data, gboolean require_two, gboolean level,
 	  method_string = parse_string_value (data);
 	}
 	if (g_ascii_strcasecmp (method_string, "GET") == 0) {
-	  method = SWFDEC_LOADER_REQUEST_GET;
+	  method = 1;
 	} else if (g_ascii_strcasecmp (method_string, "POST") == 0) {
-	  method = SWFDEC_LOADER_REQUEST_POST;
+	  method = 2;
 	} else {
-	  method = SWFDEC_LOADER_REQUEST_DEFAULT;
+	  method = 0;
 	  // FIXME: only for identifiers?
 	  vivi_parser_error (data, "Invalid URL method: %s\n", method_string);
 	}
       } else {
 	vivi_parser_error_unexpected_or (data, TOKEN_IDENTIFIER, TOKEN_STRING,
 	    TOKEN_NONE);
-	method = SWFDEC_LOADER_REQUEST_DEFAULT;
+	method = 0;
       }
     } else {
-      method = SWFDEC_LOADER_REQUEST_DEFAULT;
+      method = 0;
     }
   } else {
     target = vivi_code_string_new ("");
-    method = SWFDEC_LOADER_REQUEST_DEFAULT;
+    method = 0;
   }
 
   parse_token (data, TOKEN_PARENTHESIS_RIGHT);
commit 817c77910140ac6544d88df7c0be20d28785f1f2
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Thu May 29 14:17:40 2008 +0300

    Add a test for LoadObject's sendAndLoad method

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 6001933..fb92f67 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -1620,6 +1620,13 @@ EXTRA_DIST = \
 	loadobject-bom-7.swf.trace \
 	loadobject-bom-8.swf \
 	loadobject-bom-8.swf.trace \
+	loadobject-sendandload.as \
+	loadobject-sendandload-6.swf \
+	loadobject-sendandload-6.swf.trace \
+	loadobject-sendandload-7.swf \
+	loadobject-sendandload-7.swf.trace \
+	loadobject-sendandload-8.swf \
+	loadobject-sendandload-8.swf.trace \
 	loadvariables.as \
 	loadvariables-5.swf \
 	loadvariables-5.swf.trace \
diff --git a/test/trace/loadobject-sendandload-6.swf b/test/trace/loadobject-sendandload-6.swf
new file mode 100644
index 0000000..8806115
Binary files /dev/null and b/test/trace/loadobject-sendandload-6.swf differ
diff --git a/test/trace/loadobject-sendandload-6.swf.trace b/test/trace/loadobject-sendandload-6.swf.trace
new file mode 100644
index 0000000..b519a50
--- /dev/null
+++ b/test/trace/loadobject-sendandload-6.swf.trace
@@ -0,0 +1,2 @@
+Finished: test=normal\n
+Finished: test=normal\n
diff --git a/test/trace/loadobject-sendandload-7.swf b/test/trace/loadobject-sendandload-7.swf
new file mode 100644
index 0000000..e74c094
Binary files /dev/null and b/test/trace/loadobject-sendandload-7.swf differ
diff --git a/test/trace/loadobject-sendandload-7.swf.trace b/test/trace/loadobject-sendandload-7.swf.trace
new file mode 100644
index 0000000..b519a50
--- /dev/null
+++ b/test/trace/loadobject-sendandload-7.swf.trace
@@ -0,0 +1,2 @@
+Finished: test=normal\n
+Finished: test=normal\n
diff --git a/test/trace/loadobject-sendandload-8.swf b/test/trace/loadobject-sendandload-8.swf
new file mode 100644
index 0000000..c7e658c
Binary files /dev/null and b/test/trace/loadobject-sendandload-8.swf differ
diff --git a/test/trace/loadobject-sendandload-8.swf.trace b/test/trace/loadobject-sendandload-8.swf.trace
new file mode 100644
index 0000000..b519a50
--- /dev/null
+++ b/test/trace/loadobject-sendandload-8.swf.trace
@@ -0,0 +1,2 @@
+Finished: test=normal\n
+Finished: test=normal\n
diff --git a/test/trace/loadobject-sendandload.as b/test/trace/loadobject-sendandload.as
new file mode 100644
index 0000000..1bb4adc
--- /dev/null
+++ b/test/trace/loadobject-sendandload.as
@@ -0,0 +1,22 @@
+// makeswf -v 7 -s 200x150 -r 15 -o loadobject-sendandload-7.swf loadobject-sendandload.as
+
+var o = {};
+o.sendAndLoad = ASnative (301, 2);
+var t = { test: "supernormal" };
+o.test = "verynormal";
+
+t.onData2 = function (str) {
+  trace ("Finished: " + str.split("\n").join("\\n"));
+
+  getURL ("fscommand:quit");
+};
+
+t.onData = function (str) {
+  trace ("Finished: " + str.split("\n").join("\\n"));
+
+  t.onData = t.onData2;
+
+  o.sendAndLoad("test.txt?test=paranormal", t, "POST");
+};
+
+o.sendAndLoad("test.txt?test=paranormal", t, "GET");
commit c7b0f64748de79591048b8fb3960e510ec4db787
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Wed May 28 17:20:08 2008 +0300

    Add a test to see whether the error variable in catch can be changed or deleted

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index f8f97b6..6001933 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -3606,6 +3606,15 @@ EXTRA_DIST = \
 	try-return-in-finally-7.swf.trace \
 	try-return-in-finally-8.swf \
 	try-return-in-finally-8.swf.trace \
+	try-variable-propflags.as \
+	try-variable-propflags-5.swf \
+	try-variable-propflags-5.swf.trace \
+	try-variable-propflags-6.swf \
+	try-variable-propflags-6.swf.trace \
+	try-variable-propflags-7.swf \
+	try-variable-propflags-7.swf.trace \
+	try-variable-propflags-8.swf \
+	try-variable-propflags-8.swf.trace \
 	undefined-tostring.swf \
 	undefined-tostring.swf.trace \
 	undefined1.swf \
diff --git a/test/trace/try-variable-propflags-5.swf b/test/trace/try-variable-propflags-5.swf
new file mode 100644
index 0000000..faec9fc
Binary files /dev/null and b/test/trace/try-variable-propflags-5.swf differ
diff --git a/test/trace/try-variable-propflags-5.swf.trace b/test/trace/try-variable-propflags-5.swf.trace
new file mode 100644
index 0000000..fcdc025
--- /dev/null
+++ b/test/trace/try-variable-propflags-5.swf.trace
@@ -0,0 +1,4 @@
+See if the error variable can be changed and deleted
+Error
+Error2
+undefined
diff --git a/test/trace/try-variable-propflags-6.swf b/test/trace/try-variable-propflags-6.swf
new file mode 100644
index 0000000..6bc3ff4
Binary files /dev/null and b/test/trace/try-variable-propflags-6.swf differ
diff --git a/test/trace/try-variable-propflags-6.swf.trace b/test/trace/try-variable-propflags-6.swf.trace
new file mode 100644
index 0000000..fcdc025
--- /dev/null
+++ b/test/trace/try-variable-propflags-6.swf.trace
@@ -0,0 +1,4 @@
+See if the error variable can be changed and deleted
+Error
+Error2
+undefined
diff --git a/test/trace/try-variable-propflags-7.swf b/test/trace/try-variable-propflags-7.swf
new file mode 100644
index 0000000..6d0131e
Binary files /dev/null and b/test/trace/try-variable-propflags-7.swf differ
diff --git a/test/trace/try-variable-propflags-7.swf.trace b/test/trace/try-variable-propflags-7.swf.trace
new file mode 100644
index 0000000..fcdc025
--- /dev/null
+++ b/test/trace/try-variable-propflags-7.swf.trace
@@ -0,0 +1,4 @@
+See if the error variable can be changed and deleted
+Error
+Error2
+undefined
diff --git a/test/trace/try-variable-propflags-8.swf b/test/trace/try-variable-propflags-8.swf
new file mode 100644
index 0000000..850fb7a
Binary files /dev/null and b/test/trace/try-variable-propflags-8.swf differ
diff --git a/test/trace/try-variable-propflags-8.swf.trace b/test/trace/try-variable-propflags-8.swf.trace
new file mode 100644
index 0000000..fcdc025
--- /dev/null
+++ b/test/trace/try-variable-propflags-8.swf.trace
@@ -0,0 +1,4 @@
+See if the error variable can be changed and deleted
+Error
+Error2
+undefined
diff --git a/test/trace/try-variable-propflags.as b/test/trace/try-variable-propflags.as
new file mode 100644
index 0000000..c065185
--- /dev/null
+++ b/test/trace/try-variable-propflags.as
@@ -0,0 +1,15 @@
+// makeswf -v 7 -s 200x150 -r 15 -o try-variable-propflags.swf try-variable-propflags.as
+
+trace ("See if the error variable can be changed and deleted");
+
+try {
+  throw "Error";
+} catch (e) {
+  trace (e);
+  e = "Error2";
+  trace (e);
+  delete e;
+  trace (e);
+};
+
+getURL ("fscommand:quit", "");
commit b7cc9ae1f1294d30598782b75ce858b4654ed554
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Wed May 28 17:04:12 2008 +0300

    Add a test for using return in try action's finally block

diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 7bc4bb4..f8f97b6 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -3597,6 +3597,15 @@ EXTRA_DIST = \
 	try-throw-in-finally-7.swf.trace \
 	try-throw-in-finally-8.swf \
 	try-throw-in-finally-8.swf.trace \
+	try-return-in-finally.as \
+	try-return-in-finally-5.swf \
+	try-return-in-finally-5.swf.trace \
+	try-return-in-finally-6.swf \
+	try-return-in-finally-6.swf.trace \
+	try-return-in-finally-7.swf \
+	try-return-in-finally-7.swf.trace \
+	try-return-in-finally-8.swf \
+	try-return-in-finally-8.swf.trace \
 	undefined-tostring.swf \
 	undefined-tostring.swf.trace \
 	undefined1.swf \
diff --git a/test/trace/try-return-in-finally-5.swf b/test/trace/try-return-in-finally-5.swf
new file mode 100644
index 0000000..393a0c1
Binary files /dev/null and b/test/trace/try-return-in-finally-5.swf differ
diff --git a/test/trace/try-return-in-finally-5.swf.trace b/test/trace/try-return-in-finally-5.swf.trace
new file mode 100644
index 0000000..37f91a7
--- /dev/null
+++ b/test/trace/try-return-in-finally-5.swf.trace
@@ -0,0 +1,2 @@
+Finally
+undefined
diff --git a/test/trace/try-return-in-finally-6.swf b/test/trace/try-return-in-finally-6.swf
new file mode 100644
index 0000000..46826fc
Binary files /dev/null and b/test/trace/try-return-in-finally-6.swf differ
diff --git a/test/trace/try-return-in-finally-6.swf.trace b/test/trace/try-return-in-finally-6.swf.trace
new file mode 100644
index 0000000..37f91a7
--- /dev/null
+++ b/test/trace/try-return-in-finally-6.swf.trace
@@ -0,0 +1,2 @@
+Finally
+undefined
diff --git a/test/trace/try-return-in-finally-7.swf b/test/trace/try-return-in-finally-7.swf
new file mode 100644
index 0000000..3ba84fb
Binary files /dev/null and b/test/trace/try-return-in-finally-7.swf differ
diff --git a/test/trace/try-return-in-finally-7.swf.trace b/test/trace/try-return-in-finally-7.swf.trace
new file mode 100644
index 0000000..37f91a7
--- /dev/null
+++ b/test/trace/try-return-in-finally-7.swf.trace
@@ -0,0 +1,2 @@
+Finally
+undefined
diff --git a/test/trace/try-return-in-finally-8.swf b/test/trace/try-return-in-finally-8.swf
new file mode 100644
index 0000000..0f29661
Binary files /dev/null and b/test/trace/try-return-in-finally-8.swf differ
diff --git a/test/trace/try-return-in-finally-8.swf.trace b/test/trace/try-return-in-finally-8.swf.trace
new file mode 100644
index 0000000..37f91a7
--- /dev/null
+++ b/test/trace/try-return-in-finally-8.swf.trace
@@ -0,0 +1,2 @@
+Finally
+undefined
diff --git a/test/trace/try-return-in-finally.as b/test/trace/try-return-in-finally.as
new file mode 100644
index 0000000..3892718
--- /dev/null
+++ b/test/trace/try-return-in-finally.as
@@ -0,0 +1,17 @@
+// makeswf -v 7 -r 1 -o try-return-finally-7.swf try-return-finally.as
+
+function test () {
+  try {
+    throw "Try";
+  } finally {
+    return "Finally";
+  };
+}
+
+try {
+  trace (test ());
+} catch (e) {
+  trace (e);
+};
+
+getURL ("FSCommand:quit", "");
commit 4ce990c036d41e3da6e03b19e625baa4103985f5
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Wed May 28 16:04:24 2008 +0300

    Implement parsing of jump asm statements. Add a test

diff --git a/vivified/code/test/compiler/Makefile.am b/vivified/code/test/compiler/Makefile.am
index b17c4b0..af55f30 100644
--- a/vivified/code/test/compiler/Makefile.am
+++ b/vivified/code/test/compiler/Makefile.am
@@ -28,6 +28,8 @@ EXTRA_DIST = \
 	asm_empty.as.expect \
 	asm_get_url2.as \
 	asm_get_url2.as.expect \
+	asm_jump.as \
+	asm_jump.as.expect \
 	asm_label.as \
 	asm_label.as.expect \
 	asm_pool.as \
diff --git a/vivified/code/test/compiler/asm_jump.as b/vivified/code/test/compiler/asm_jump.as
new file mode 100644
index 0000000..758fbff
--- /dev/null
+++ b/vivified/code/test/compiler/asm_jump.as
@@ -0,0 +1,4 @@
+asm {
+  jump hello
+hello:
+}
diff --git a/vivified/code/test/compiler/asm_jump.as.expect b/vivified/code/test/compiler/asm_jump.as.expect
new file mode 100644
index 0000000..771ad9b
--- /dev/null
+++ b/vivified/code/test/compiler/asm_jump.as.expect
@@ -0,0 +1,6 @@
+asm {
+  jump hello
+
+hello:
+  end
+}
diff --git a/vivified/code/vivi_parser.c b/vivified/code/vivi_parser.c
index 67d9121..1383f50 100644
--- a/vivified/code/vivi_parser.c
+++ b/vivified/code/vivi_parser.c
@@ -31,6 +31,7 @@
 #include "vivi_code_and.h"
 #include "vivi_code_asm_code_default.h"
 #include "vivi_code_asm_get_url2.h"
+#include "vivi_code_asm_jump.h"
 #include "vivi_code_asm_pool.h"
 #include "vivi_code_asm_push.h"
 #include "vivi_code_asm_store.h"
@@ -1011,6 +1012,28 @@ parse_asm_store (ParseData *data)
 }
 
 static ViviCodeAsm *
+parse_asm_jump (ParseData *data)
+{
+  ViviCodeAsm *code;
+  ViviCodeLabel *label;
+  const char *name;
+
+  name = parse_identifier_value (data);
+  label = vivi_parser_get_label (data, name);
+  if (label == NULL) {
+    label = VIVI_CODE_LABEL (vivi_code_label_new (name));
+    vivi_parser_add_waiting_label (data, label);
+  }
+
+  parse_automatic_semicolon (data);
+
+  code = vivi_code_asm_jump_new (label);
+  g_object_unref (label);
+
+  return code;
+}
+
+static ViviCodeAsm *
 parse_asm_try (ParseData *data)
 {
   gboolean has_catch, has_finally;
@@ -1275,6 +1298,7 @@ static const AsmStatement asm_statements[] = {
 #include "vivi_code_defaults.h"
 #undef DEFAULT_ASM
   { "get_url2", NULL, parse_asm_get_url2 },
+  { "jump", NULL, parse_asm_jump },
   { "pool", NULL, parse_asm_pool },
   { "push", NULL, parse_asm_push },
   { "store", NULL, parse_asm_store },
commit 23ce0311de3e0269142f0852517c755ae9e638e0
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date:   Wed May 28 15:52:19 2008 +0300

    Fix compiling of try action to jump over catch when there is no exception
    
    Also fixed the test case outputs

diff --git a/vivified/code/test/compiler/try.as.expect b/vivified/code/test/compiler/try.as.expect
index b5a9254..acdadb1 100644
--- a/vivified/code/test/compiler/try.as.expect
+++ b/vivified/code/test/compiler/try.as.expect
@@ -3,6 +3,7 @@ asm {
   try has_catch has_finally "e" try_catch_0001 try_finally_0002 try_end_0003
   push pool 0
   trace
+  jump try_finally_0002
 
 try_catch_0001:
   push pool 1
diff --git a/vivified/code/test/compiler/try_no_finally.as.expect b/vivified/code/test/compiler/try_no_finally.as.expect
index d4db888..73a7c86 100644
--- a/vivified/code/test/compiler/try_no_finally.as.expect
+++ b/vivified/code/test/compiler/try_no_finally.as.expect
@@ -3,6 +3,7 @@ asm {
   try has_catch "e" try_catch_0001 try_end_0002 try_end_0002
   push pool 0
   trace
+  jump try_end_0002
 
 try_catch_0001:
   push pool 1
diff --git a/vivified/code/vivi_code_try.c b/vivified/code/vivi_code_try.c
index b855ea1..0dcef10 100644
--- a/vivified/code/vivi_code_try.c
+++ b/vivified/code/vivi_code_try.c
@@ -27,6 +27,7 @@
 #include "vivi_code_asm.h"
 #include "vivi_code_asm_code_default.h"
 #include "vivi_code_asm_try.h"
+#include "vivi_code_asm_jump.h"
 
 G_DEFINE_TYPE (ViviCodeTry, vivi_code_try, VIVI_TYPE_CODE_STATEMENT)
 
@@ -98,6 +99,8 @@ vivi_code_try_compile (ViviCodeToken *token, ViviCodeCompiler *compiler)
 
   vivi_code_compiler_compile_statement (compiler, try_->try_statement);
   if (try_->catch_statement) {
+    vivi_code_compiler_take_code (compiler, vivi_code_asm_jump_new (
+	  label_finally != NULL ? label_finally : label_end));
     vivi_code_compiler_take_code (compiler, VIVI_CODE_ASM (label_catch));
     vivi_code_compiler_compile_statement (compiler, try_->catch_statement);
   }


More information about the Swfdec-commits mailing list