[Swfdec-commits] 12 commits - swfdec/swfdec_load_object_as.c swfdec/swfdec_load_object.c swfdec/swfdec_marshal.list swfdec/swfdec_player.c swfdec/swfdec_player_internal.h vivified/code
Pekka Lampila
medar at kemper.freedesktop.org
Mon Jun 16 04:26:36 PDT 2008
swfdec/swfdec_load_object.c | 10
swfdec/swfdec_load_object_as.c | 57 ++--
swfdec/swfdec_marshal.list | 2
swfdec/swfdec_player.c | 31 +-
swfdec/swfdec_player_internal.h | 9
vivified/code/test/compiler/Makefile.am | 10
vivified/code/test/compiler/builtin_call.as | 11
vivified/code/test/compiler/builtin_call.as.expect | 48 +++
vivified/code/test/compiler/function_call.as | 1
vivified/code/test/compiler/function_call.as.expect | 7
vivified/code/test/compiler/function_call_arguments.as | 1
vivified/code/test/compiler/function_call_arguments.as.expect | 9
vivified/code/test/compiler/function_call_get_member.as | 2
vivified/code/test/compiler/function_call_get_member.as.expect | 15 +
vivified/code/test/compiler/function_call_returned.as | 1
vivified/code/test/compiler/function_call_returned.as.expect | 8
vivified/code/vivi_parser.c | 135 ++++------
17 files changed, 244 insertions(+), 113 deletions(-)
New commits:
commit 5006bfac57be257fd7595b22413a11b93555ddbf
Merge: 76edb98... 6c9b0a8...
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Mon Jun 16 13:54:50 2008 +0300
Merge branch 'master' of ssh://medar@git.freedesktop.org/git/swfdec/swfdec
commit 76edb981df3a37a865269881baa4e71e9ed2ed10
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Mon Jun 16 13:51:24 2008 +0300
Fix parsing of typeOf in vivi-compile
diff --git a/vivified/code/vivi_parser.c b/vivified/code/vivi_parser.c
index 879dc12..e632b96 100644
--- a/vivified/code/vivi_parser.c
+++ b/vivified/code/vivi_parser.c
@@ -1660,10 +1660,15 @@ peek_builtin_call (ParseData *data)
const char *identifier;
const ViviParserValue *value;
- if (!peek_token (data, TOKEN_IDENTIFIER))
- return FALSE;
+ if (peek_token (data, TOKEN_TYPEOF)) {
+ identifier = "typeOf";
+ } else {
+ if (!peek_token (data, TOKEN_IDENTIFIER))
+ return FALSE;
- identifier = vivi_parser_scanner_get_value (data->scanner, 1)->value.v_identifier;
+ identifier =
+ vivi_parser_scanner_get_value (data->scanner, 1)->value.v_identifier;
+ }
value = vivi_parser_scanner_get_value (data->scanner, 2);
@@ -1685,7 +1690,11 @@ parse_builtin_call (ParseData *data)
const char *identifier;
ViviCodeValue *value, *argument;
- identifier = parse_identifier_value (data);
+ if (try_parse_token (data, TOKEN_TYPEOF)) {
+ identifier = "typeOf";
+ } else {
+ identifier = parse_identifier_value (data);
+ }
for (i = 0; i < G_N_ELEMENTS (builtin_calls); i++) {
if (g_ascii_strcasecmp (identifier, builtin_calls[i].name) == 0)
commit bbfb05578d6e6f7fc2ec5ce261b668a8d71a631d
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Mon Jun 16 13:50:57 2008 +0300
Add a vivi-compile test for some builtin calls
diff --git a/vivified/code/test/compiler/Makefile.am b/vivified/code/test/compiler/Makefile.am
index 30c4277..6b0c476 100644
--- a/vivified/code/test/compiler/Makefile.am
+++ b/vivified/code/test/compiler/Makefile.am
@@ -54,6 +54,8 @@ EXTRA_DIST = \
automatic_semicolon.as.expect \
bitwise_not.as \
bitwise_not.as.expect \
+ builtin_call.as \
+ builtin_call.as.expect \
builtin_statement.as \
builtin_statement.as.expect \
break.as \
diff --git a/vivified/code/test/compiler/builtin_call.as b/vivified/code/test/compiler/builtin_call.as
new file mode 100644
index 0000000..154f939
--- /dev/null
+++ b/vivified/code/test/compiler/builtin_call.as
@@ -0,0 +1,11 @@
+trace (chr (x));
+trace (concat (x, y));
+trace (eval (x));
+trace (getTimer ());
+trace (int (x));
+trace (length (x));
+trace (Number (x));
+trace (ord (x));
+trace (random (x));
+trace (targetPath (x));
+trace (typeOf (x));
diff --git a/vivified/code/test/compiler/builtin_call.as.expect b/vivified/code/test/compiler/builtin_call.as.expect
new file mode 100644
index 0000000..f78cc9e
--- /dev/null
+++ b/vivified/code/test/compiler/builtin_call.as.expect
@@ -0,0 +1,48 @@
+asm {
+ pool "x", "y"
+ push pool 0
+ get_variable
+ ascii_to_char
+ trace
+ push pool 0
+ get_variable
+ push pool 1
+ get_variable
+ string_add
+ trace
+ push pool 0
+ get_variable
+ get_variable
+ trace
+ get_time
+ trace
+ push pool 0
+ get_variable
+ to_integer
+ trace
+ push pool 0
+ get_variable
+ string_length
+ trace
+ push pool 0
+ get_variable
+ to_number
+ trace
+ push pool 0
+ get_variable
+ char_to_ascii
+ trace
+ push pool 0
+ get_variable
+ random
+ trace
+ push pool 0
+ get_variable
+ target_path
+ trace
+ push pool 0
+ get_variable
+ type_of
+ trace
+ end
+}
commit 28745744794157df5727075bfb12b9e3f3e97340
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Mon Jun 16 13:37:38 2008 +0300
Add a vivi-compile test for getting member from function call's returned value
diff --git a/vivified/code/test/compiler/Makefile.am b/vivified/code/test/compiler/Makefile.am
index 3c6a691..30c4277 100644
--- a/vivified/code/test/compiler/Makefile.am
+++ b/vivified/code/test/compiler/Makefile.am
@@ -94,6 +94,8 @@ EXTRA_DIST = \
function_call.as.expect \
function_call_arguments.as \
function_call_arguments.as.expect \
+ function_call_get_member.as \
+ function_call_get_member.as.expect \
function_call_returned.as \
function_call_returned.as.expect \
function_declaration.as \
diff --git a/vivified/code/test/compiler/function_call_get_member.as b/vivified/code/test/compiler/function_call_get_member.as
new file mode 100644
index 0000000..d60cd72
--- /dev/null
+++ b/vivified/code/test/compiler/function_call_get_member.as
@@ -0,0 +1,2 @@
+trace (test ().x);
+trace (test ()[x]);
diff --git a/vivified/code/test/compiler/function_call_get_member.as.expect b/vivified/code/test/compiler/function_call_get_member.as.expect
new file mode 100644
index 0000000..945981c
--- /dev/null
+++ b/vivified/code/test/compiler/function_call_get_member.as.expect
@@ -0,0 +1,15 @@
+asm {
+ pool "test", "x"
+ push 0, pool 0
+ call_function
+ push pool 1
+ get_member
+ trace
+ push 0, pool 0
+ call_function
+ push pool 1
+ get_variable
+ get_member
+ trace
+ end
+}
commit 5416d1dfca0885058f8999966451bdcb2ef6af5b
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Mon Jun 16 13:34:58 2008 +0300
Fix parsing of "foo ().x" (get member after call) in vivi-compile
diff --git a/vivified/code/vivi_parser.c b/vivified/code/vivi_parser.c
index 283143e..879dc12 100644
--- a/vivified/code/vivi_parser.c
+++ b/vivified/code/vivi_parser.c
@@ -1862,61 +1862,10 @@ static ViviCodeValue *
parse_function_expression (ParseData *data);
static gboolean
-peek_member_expression (ParseData *data)
-{
- return (peek_primary_expression (data) || peek_function_expression (data));
-}
-
-static ViviCodeValue *
-parse_member_expression (ParseData *data)
-{
- ViviCodeValue *value;
-
- vivi_parser_start_code_token (data);
-
- if (peek_primary_expression (data)) {
- value = parse_primary_expression (data);
- } else if (peek_function_expression (data)) {
- value = parse_function_expression (data);
- } else {
- vivi_parser_error_unexpected_or (data, ERROR_TOKEN_PRIMARY_EXPRESSION,
- ERROR_TOKEN_FUNCTION_EXPRESSION, TOKEN_NONE);
- value = vivi_code_undefined_new ();
-
- vivi_parser_duplicate_code_token (data);
- vivi_parser_end_code_token (data, VIVI_CODE_TOKEN (value));
- }
-
- while (TRUE) {
- ViviCodeValue *tmp;
-
- if (try_parse_token (data, TOKEN_BRACKET_LEFT)) {
- ViviCodeValue *member = parse_expression (data);
- tmp = value;
- value = vivi_code_get_new (tmp, member);
- g_object_unref (tmp);
- g_object_unref (member);
- parse_token (data, TOKEN_BRACKET_RIGHT);
- } else if (try_parse_token (data, TOKEN_DOT)) {
- tmp = value;
- value = vivi_code_get_new_name (tmp, parse_identifier_value (data));
- g_object_unref (tmp);
- } else {
- vivi_parser_end_code_token (data, NULL);
- return value;
- }
-
- vivi_parser_duplicate_code_token (data);
- vivi_parser_end_code_token (data, VIVI_CODE_TOKEN (value));
- }
-
- g_assert_not_reached ();
-}
-
-static gboolean
peek_left_hand_side_expression (ParseData *data)
{
- return (peek_token (data, TOKEN_NEW) || peek_member_expression (data));
+ return (peek_token (data, TOKEN_NEW) || peek_primary_expression (data) ||
+ peek_function_expression (data));
}
@@ -1948,29 +1897,58 @@ parse_left_hand_side_expression (ParseData *data)
if (peek_builtin_call (data)) {
value = parse_builtin_call (data);
+ } else if (peek_primary_expression (data)) {
+ value = parse_primary_expression (data);
+ } else if (peek_function_expression (data)) {
+ value = parse_function_expression (data);
} else {
- value = parse_member_expression (data);
+ vivi_parser_error_unexpected_or (data, ERROR_TOKEN_PRIMARY_EXPRESSION,
+ ERROR_TOKEN_FUNCTION_EXPRESSION, TOKEN_NONE);
+ value = vivi_code_undefined_new ();
+ vivi_parser_duplicate_code_token (data);
+ vivi_parser_end_code_token (data, VIVI_CODE_TOKEN (value));
}
- while (try_parse_token (data, TOKEN_PARENTHESIS_LEFT)) {
- if (!try_parse_token (data, TOKEN_PARENTHESIS_RIGHT)) {
- parse_value_list (data, peek_assignment_expression,
- parse_assignment_expression, &arguments, TOKEN_COMMA);
- parse_token (data, TOKEN_PARENTHESIS_RIGHT);
- } else {
- arguments = NULL;
- }
+ while (TRUE) {
+ ViviCodeValue *tmp;
- name = value;
- value = vivi_parser_function_call_new (name);
- g_object_unref (name);
+ if (try_parse_token (data, TOKEN_BRACKET_LEFT)) {
+ ViviCodeValue *member = parse_expression (data);
+ tmp = value;
+ value = vivi_code_get_new (tmp, member);
+ g_object_unref (tmp);
+ g_object_unref (member);
+ parse_token (data, TOKEN_BRACKET_RIGHT);
+ } else if (try_parse_token (data, TOKEN_DOT)) {
+ tmp = value;
+ value = vivi_code_get_new_name (tmp, parse_identifier_value (data));
+ g_object_unref (tmp);
+ } else if (try_parse_token (data, TOKEN_PARENTHESIS_LEFT)) {
+ if (!try_parse_token (data, TOKEN_PARENTHESIS_RIGHT)) {
+ parse_value_list (data, peek_assignment_expression,
+ parse_assignment_expression, &arguments, TOKEN_COMMA);
+ parse_token (data, TOKEN_PARENTHESIS_RIGHT);
+ } else {
+ arguments = NULL;
+ }
- if (arguments != NULL) {
- for (i = 0; arguments[i] != NULL; i++) {
- vivi_code_function_call_add_argument (VIVI_CODE_FUNCTION_CALL (value),
- arguments[i]);
+ name = value;
+ value = vivi_parser_function_call_new (name);
+ g_object_unref (name);
+
+ if (arguments != NULL) {
+ for (i = 0; arguments[i] != NULL; i++) {
+ vivi_code_function_call_add_argument (VIVI_CODE_FUNCTION_CALL (value),
+ arguments[i]);
+ }
+ free_value_list (arguments);
}
- free_value_list (arguments);
+
+ vivi_parser_duplicate_code_token (data);
+ vivi_parser_end_code_token (data, VIVI_CODE_TOKEN (value));
+ } else {
+ vivi_parser_end_code_token (data, NULL);
+ return value;
}
vivi_parser_duplicate_code_token (data);
commit f7e62ddfb1bb1532037ba81fa59182f80f17e60d
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Mon Jun 16 13:18:53 2008 +0300
Add a vivi-compile test for calling the value returned from function call
diff --git a/vivified/code/test/compiler/Makefile.am b/vivified/code/test/compiler/Makefile.am
index 02bd5a6..3c6a691 100644
--- a/vivified/code/test/compiler/Makefile.am
+++ b/vivified/code/test/compiler/Makefile.am
@@ -94,6 +94,8 @@ EXTRA_DIST = \
function_call.as.expect \
function_call_arguments.as \
function_call_arguments.as.expect \
+ function_call_returned.as \
+ function_call_returned.as.expect \
function_declaration.as \
function_declaration.as.expect \
function_expression.as \
diff --git a/vivified/code/test/compiler/function_call_returned.as b/vivified/code/test/compiler/function_call_returned.as
new file mode 100644
index 0000000..8ab2c9f
--- /dev/null
+++ b/vivified/code/test/compiler/function_call_returned.as
@@ -0,0 +1 @@
+test (1) (2);
diff --git a/vivified/code/test/compiler/function_call_returned.as.expect b/vivified/code/test/compiler/function_call_returned.as.expect
new file mode 100644
index 0000000..06c6634
--- /dev/null
+++ b/vivified/code/test/compiler/function_call_returned.as.expect
@@ -0,0 +1,8 @@
+asm {
+ pool "test"
+ push 2, 1, 1, 1, pool 0
+ call_function
+ call_function
+ pop
+ end
+}
commit 50835a1532642ea063afa7f804dbc8fb1879483d
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Mon Jun 16 13:03:19 2008 +0300
Add two vivi-compile tests for function calls
diff --git a/vivified/code/test/compiler/Makefile.am b/vivified/code/test/compiler/Makefile.am
index af55f30..02bd5a6 100644
--- a/vivified/code/test/compiler/Makefile.am
+++ b/vivified/code/test/compiler/Makefile.am
@@ -90,6 +90,10 @@ EXTRA_DIST = \
for.as.expect \
for_local.as \
for_local.as.expect \
+ function_call.as \
+ function_call.as.expect \
+ function_call_arguments.as \
+ function_call_arguments.as.expect \
function_declaration.as \
function_declaration.as.expect \
function_expression.as \
diff --git a/vivified/code/test/compiler/function_call.as b/vivified/code/test/compiler/function_call.as
new file mode 100644
index 0000000..edfcef2
--- /dev/null
+++ b/vivified/code/test/compiler/function_call.as
@@ -0,0 +1 @@
+test ();
diff --git a/vivified/code/test/compiler/function_call.as.expect b/vivified/code/test/compiler/function_call.as.expect
new file mode 100644
index 0000000..da18af0
--- /dev/null
+++ b/vivified/code/test/compiler/function_call.as.expect
@@ -0,0 +1,7 @@
+asm {
+ pool "test"
+ push 0, pool 0
+ call_function
+ pop
+ end
+}
diff --git a/vivified/code/test/compiler/function_call_arguments.as b/vivified/code/test/compiler/function_call_arguments.as
new file mode 100644
index 0000000..7f24134
--- /dev/null
+++ b/vivified/code/test/compiler/function_call_arguments.as
@@ -0,0 +1 @@
+test (a, 3);
diff --git a/vivified/code/test/compiler/function_call_arguments.as.expect b/vivified/code/test/compiler/function_call_arguments.as.expect
new file mode 100644
index 0000000..29dbfbb
--- /dev/null
+++ b/vivified/code/test/compiler/function_call_arguments.as.expect
@@ -0,0 +1,9 @@
+asm {
+ pool "a", "test"
+ push 3, pool 0
+ get_variable
+ push 2, pool 1
+ call_function
+ pop
+ end
+}
commit 6928186baf91665d578be4e31034e6c4ca5853ad
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Fri Jun 13 10:15:29 2008 +0300
Change launch signal to include a list of custom headers
diff --git a/swfdec/swfdec_marshal.list b/swfdec/swfdec_marshal.list
index 5debc75..fb33a3e 100644
--- a/swfdec/swfdec_marshal.list
+++ b/swfdec/swfdec_marshal.list
@@ -2,6 +2,6 @@ BOOLEAN:DOUBLE,DOUBLE,INT
BOOLEAN:UINT,UINT,BOOLEAN
VOID:BOXED,POINTER,UINT
VOID:STRING,STRING
-VOID:STRING,STRING,BOXED
+VOID:STRING,STRING,BOXED,UINT,BOXED,BOXED
VOID:ULONG,UINT
VOID:ULONG,ULONG
diff --git a/swfdec/swfdec_player.c b/swfdec/swfdec_player.c
index e5ab90e..36608af 100644
--- a/swfdec/swfdec_player.c
+++ b/swfdec/swfdec_player.c
@@ -2280,9 +2280,11 @@ swfdec_player_class_init (SwfdecPlayerClass *klass)
* @player: the #SwfdecPlayer affected
* @url: URL to open
* @target: target to load the URL into
- * @data: optional data to pass on with the request. Will be of mime type
- * application/x-www-form-urlencoded. Can be %NULL indicating no data
- * should be passed.
+ * @data: optional data to pass on with the request. Can be %NULL indicating
+ * no data should be passed.
+ * @header_count: number of custom HTTP headers to be sent
+ * @header_names: names of the custom HTTP headers. %NULL terminated
+ * @header_values: values of the custom HTTP headers. %NULL terminated
*
* Emitted whenever the @player encounters an URL that should be loaded into
* a target the Flash player does not recognize. In most cases this happens
@@ -2291,8 +2293,8 @@ swfdec_player_class_init (SwfdecPlayerClass *klass)
* The effect of calling any swfdec functions on the emitting @player is undefined.
*/
signals[LAUNCH] = g_signal_new ("launch", G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST, 0, NULL, NULL, swfdec_marshal_VOID__STRING_STRING_BOXED,
- G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_STRING, SWFDEC_TYPE_BUFFER);
+ G_SIGNAL_RUN_LAST, 0, NULL, NULL, swfdec_marshal_VOID__STRING_STRING_BOXED_UINT_BOXED_BOXED,
+ G_TYPE_NONE, 3, G_TYPE_STRING, G_TYPE_STRING, SWFDEC_TYPE_BUFFER, G_TYPE_UINT, G_TYPE_STRV, G_TYPE_STRV);
/**
* SwfdecPlayer::missing-plugins:
* @player: the #SwfdecPlayer missing plugins
@@ -2538,19 +2540,27 @@ swfdec_player_get_movie_at_level (SwfdecPlayer *player, int level)
}
void
-swfdec_player_launch (SwfdecPlayer *player, const char *url,
- const char *target, SwfdecBuffer *data)
+swfdec_player_launch_with_headers (SwfdecPlayer *player, const char *url,
+ const char *target, SwfdecBuffer *data, guint header_count,
+ const char **header_names, const char **header_values)
{
g_return_if_fail (SWFDEC_IS_PLAYER (player));
g_return_if_fail (url != NULL);
g_return_if_fail (target != NULL);
+ g_return_if_fail (header_count == 0 || header_names != NULL);
+ g_return_if_fail (header_count == 0 || header_values != NULL);
+ g_return_if_fail (header_names == NULL ||
+ header_names[header_count] == NULL);
+ g_return_if_fail (header_values == NULL ||
+ header_values[header_count] == NULL);
if (!g_ascii_strncasecmp (url, "FSCommand:", strlen ("FSCommand:"))) {
const char *command = url + strlen ("FSCommand:");
g_signal_emit (player, signals[FSCOMMAND], 0, command, target);
return;
}
- g_signal_emit (player, signals[LAUNCH], 0, url, target, data);
+ g_signal_emit (player, signals[LAUNCH], 0, url, target, data, header_count,
+ header_names, header_values);
}
void
diff --git a/swfdec/swfdec_player_internal.h b/swfdec/swfdec_player_internal.h
index 8391998..ac3a939 100644
--- a/swfdec/swfdec_player_internal.h
+++ b/swfdec/swfdec_player_internal.h
@@ -255,10 +255,15 @@ SwfdecSpriteMovie *
(SwfdecPlayer * player,
SwfdecResource * resource,
int level);
-void swfdec_player_launch (SwfdecPlayer * player,
+#define swfdec_player_launch(player,url,target,data) \
+ swfdec_player_launch_with_headers ((player), (url), (target), (data), 0, NULL, NULL)
+void swfdec_player_launch_with_headers (SwfdecPlayer * player,
const char * url,
const char * target,
- SwfdecBuffer * data);
+ SwfdecBuffer * data,
+ guint header_count,
+ const char ** header_names,
+ const char ** header_values);
void swfdec_player_stage_to_global (SwfdecPlayer * player,
double * x,
double * y);
commit bbc384ffccbccadb81623ab4c6f11b27b6acd2e0
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Tue Jun 10 16:22:38 2008 +0300
Change to SwfdecPlayer:launch signal's documentation that was forgotten earlier
diff --git a/swfdec/swfdec_player.c b/swfdec/swfdec_player.c
index 7ff6124..e5ab90e 100644
--- a/swfdec/swfdec_player.c
+++ b/swfdec/swfdec_player.c
@@ -2278,7 +2278,6 @@ swfdec_player_class_init (SwfdecPlayerClass *klass)
/**
* SwfdecPlayer::launch:
* @player: the #SwfdecPlayer affected
- * @request: the type of request
* @url: URL to open
* @target: target to load the URL into
* @data: optional data to pass on with the request. Will be of mime type
commit 4f812ecfd76ff3501375c92063f70579871eb6be
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Tue Jun 10 16:13:14 2008 +0300
Implement XML/LoadVars.send, support for sending headers is still missing
diff --git a/swfdec/swfdec_load_object_as.c b/swfdec/swfdec_load_object_as.c
index 820dab7..034ecd9 100644
--- a/swfdec/swfdec_load_object_as.c
+++ b/swfdec/swfdec_load_object_as.c
@@ -91,14 +91,6 @@ swfdec_load_object_as_load (SwfdecAsContext *cx, SwfdecAsObject *object, guint a
SWFDEC_AS_VALUE_SET_BOOLEAN (rval, TRUE);
}
-SWFDEC_AS_NATIVE (301, 1, swfdec_load_object_as_send)
-void
-swfdec_load_object_as_send (SwfdecAsContext *cx, SwfdecAsObject *object,
- guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
-{
- SWFDEC_STUB ("LoadVars/XML.send");
-}
-
static void
swfdec_load_object_as_get_headers (SwfdecAsObject *object, guint *header_count,
char ***header_names, char ***header_values)
@@ -176,6 +168,38 @@ end:
*header_values = (char **)g_ptr_array_free (array_values, FALSE);
}
+SWFDEC_AS_NATIVE (301, 1, swfdec_load_object_as_send)
+void
+swfdec_load_object_as_send (SwfdecAsContext *cx, SwfdecAsObject *object,
+ guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
+{
+ const char *url, *target, *method, *data;
+ SwfdecAsValue val;
+ SwfdecBuffer *buffer;
+
+ SWFDEC_AS_VALUE_SET_BOOLEAN (rval, FALSE);
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_AS_OBJECT, &object, "s|ss", &url, &target, &method);
+
+ SWFDEC_AS_VALUE_SET_OBJECT (&val, object);
+ data = swfdec_as_value_to_string (cx, &val);
+
+ if (method == NULL || g_ascii_strcasecmp (method, "GET") == 0) {
+ 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_FIXME ("XML/LoadVars.send: Support for sending headers missing");
+
+ swfdec_player_launch (SWFDEC_PLAYER (cx), url, target, buffer);
+
+ SWFDEC_AS_VALUE_SET_BOOLEAN (rval, TRUE);
+}
+
SWFDEC_AS_NATIVE (301, 2, swfdec_load_object_as_sendAndLoad)
void
swfdec_load_object_as_sendAndLoad (SwfdecAsContext *cx, SwfdecAsObject *object,
commit 1c4c5bcbc8a3782fe625e4e4c5d07186b7bea98c
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Tue Jun 10 16:08:05 2008 +0300
Clean up sendAndLoad code a little
diff --git a/swfdec/swfdec_load_object_as.c b/swfdec/swfdec_load_object_as.c
index 8695a52..820dab7 100644
--- a/swfdec/swfdec_load_object_as.c
+++ b/swfdec/swfdec_load_object_as.c
@@ -181,27 +181,20 @@ void
swfdec_load_object_as_sendAndLoad (SwfdecAsContext *cx, SwfdecAsObject *object,
guint argc, SwfdecAsValue *argv, SwfdecAsValue *rval)
{
- const char *url, *data, *method_string;
+ const char *url, *data, *method;
guint header_count;
char **header_names, **header_values;
SwfdecAsObject *target;
SwfdecAsValue val;
SwfdecBuffer *buffer;
- gboolean get;
- SWFDEC_AS_CHECK (SWFDEC_TYPE_AS_OBJECT, &object, "sO|s", &url, &target, &method_string);
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_AS_OBJECT, &object, "sO|s", &url, &target,
+ &method);
- SWFDEC_FIXME ("support for contentType is missing");
-
- if (method_string == NULL || g_ascii_strcasecmp (method_string, "get") == 0) {
- get = TRUE;
- } else {
- get = FALSE;
- }
SWFDEC_AS_VALUE_SET_OBJECT (&val, object);
data = swfdec_as_value_to_string (cx, &val);
- if (get) {
+ if (method == NULL || g_ascii_strcasecmp (method, "GET") == 0) {
url = swfdec_as_context_give_string (cx,
g_strjoin (NULL, url, "?", data, NULL));
buffer = NULL;
commit d374120e83b7a1336eab01a5e4ffa4ba6e17d796
Author: Pekka Lampila <pekka.lampila at iki.fi>
Date: Mon Jun 9 14:35:01 2008 +0300
Make header_names and header_values NULL terminated
diff --git a/swfdec/swfdec_load_object.c b/swfdec/swfdec_load_object.c
index afc7781..1ec98f2 100644
--- a/swfdec/swfdec_load_object.c
+++ b/swfdec/swfdec_load_object.c
@@ -126,7 +126,6 @@ static void
swfdec_load_object_dispose (GObject *object)
{
SwfdecLoadObject *load = SWFDEC_LOAD_OBJECT (object);
- guint i;
if (load->loader) {
swfdec_stream_set_target (SWFDEC_STREAM (load->loader), NULL);
@@ -137,13 +136,8 @@ swfdec_load_object_dispose (GObject *object)
swfdec_buffer_unref (load->buffer);
load->buffer = NULL;
}
-
- for (i = 0; i < load->header_count; i++) {
- g_free (load->header_names[i]);
- g_free (load->header_values[i]);
- }
- g_free (load->header_names);
- g_free (load->header_values);
+ g_strfreev (load->header_names);
+ g_strfreev (load->header_values);
G_OBJECT_CLASS (swfdec_load_object_parent_class)->dispose (object);
}
diff --git a/swfdec/swfdec_load_object_as.c b/swfdec/swfdec_load_object_as.c
index 0571990..8695a52 100644
--- a/swfdec/swfdec_load_object_as.c
+++ b/swfdec/swfdec_load_object_as.c
@@ -170,6 +170,8 @@ swfdec_load_object_as_get_headers (SwfdecAsObject *object, guint *header_count,
end:
g_assert (array_names->len == array_values->len);
*header_count = array_names->len;
+ g_ptr_array_add (array_names, NULL);
+ g_ptr_array_add (array_values, NULL);
*header_names = (char **)g_ptr_array_free (array_names, FALSE);
*header_values = (char **)g_ptr_array_free (array_values, FALSE);
}
diff --git a/swfdec/swfdec_player.c b/swfdec/swfdec_player.c
index 790ad6c..7ff6124 100644
--- a/swfdec/swfdec_player.c
+++ b/swfdec/swfdec_player.c
@@ -2719,6 +2719,10 @@ swfdec_player_load_with_headers (SwfdecPlayer *player, const char *url,
g_return_val_if_fail (url != NULL, NULL);
g_return_val_if_fail (header_count == 0 || header_names != NULL, NULL);
g_return_val_if_fail (header_count == 0 || header_values != NULL, NULL);
+ g_return_val_if_fail (header_names == NULL ||
+ header_names[header_count] == NULL, NULL);
+ g_return_val_if_fail (header_values == NULL ||
+ header_values[header_count] == NULL, NULL);
loader = g_object_new (player->priv->loader_type, NULL);
klass = SWFDEC_LOADER_GET_CLASS (loader);
More information about the Swfdec-commits
mailing list