[seed] Return objects as array starting from index zero
- From: Danilo Cesar Lemes de Paula <danilocesar src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [seed] Return objects as array starting from index zero
- Date: Tue, 7 Jun 2016 17:41:36 +0000 (UTC)
commit edcc73307f2a519fa6ddeb31fbfda40f5ae0771f
Author: Danilo Cesar Lemes de Paula <danilo cesar collabora co uk>
Date: Mon Jun 6 18:41:23 2016 -0300
Return objects as array starting from index zero
When a method returns void but has OUT arguments, seed would return
an object similar as an Array, but the starting index is be 1 instead
of zero.
This behavior is not correct, the starting index should always be zero.
libseed/seed-engine.c | 29 ++++++++++++++++++++---------
1 files changed, 20 insertions(+), 9 deletions(-)
---
diff --git a/libseed/seed-engine.c b/libseed/seed-engine.c
index 07cf58c..b4539ff 100644
--- a/libseed/seed-engine.c
+++ b/libseed/seed-engine.c
@@ -485,6 +485,17 @@ _process_skipped_arguments(const JSValueRef arguments[],
return skip;
}
+void
+_add_jsvalue_in_array(JSContextRef ctx,
+ JSObjectRef dest,
+ gint pos,
+ JSValueRef obj)
+{
+ gchar* int_str = g_strdup_printf("%d", pos);
+ seed_object_set_property(ctx, (JSObjectRef) dest, int_str, obj);
+ g_free(int_str);
+}
+
static JSValueRef
seed_gobject_method_invoked(JSContextRef ctx,
JSObjectRef function,
@@ -518,6 +529,7 @@ seed_gobject_method_invoked(JSContextRef ctx,
GError* error = 0;
gint length_arg_pos = 0;
guint64 array_len = 0;
+ gint array_return_value_count = 0;
info = JSObjectGetPrivate(function);
@@ -545,6 +557,9 @@ seed_gobject_method_invoked(JSContextRef ctx,
skipped_args
= _process_skipped_arguments(arguments, info, &out_skipped_args);
+ SEED_NOTE(INVOCATION, "Calling seed_object_method_invoked for function %s",
+ g_base_info_get_name(info));
+
// now loop through all the other args.
for (i = 0, j = 0; (i < (n_args)); i++) {
if (skipped_args[i]) {
@@ -824,9 +839,10 @@ seed_gobject_method_invoked(JSContextRef ctx,
JSValueRef jsout_val
= seed_value_from_gi_argument_full(ctx, &retval, type_info, exception,
array_len, tag);
+
if (use_return_as_out && force_return_array) {
- seed_object_set_property(ctx, (JSObjectRef) retval_ref, "0",
- jsout_val);
+ _add_jsvalue_in_array(ctx, (JSObjectRef) retval_ref,
+ array_return_value_count++, jsout_val);
} else
retval_ref = jsout_val;
@@ -845,10 +861,7 @@ seed_gobject_method_invoked(JSContextRef ctx,
// etc..
in_args_pos = out_args_pos = 0;
- gint array_return_count = 1;
for (i = 0; (i < n_args); i++) {
- // We start array_return_count as 1 because the position 0 is
- // the real returned value.
JSValueRef jsout_val;
arg_info = g_callable_info_get_arg((GICallableInfo*) info, i);
dir = g_arg_info_get_direction(arg_info);
@@ -973,10 +986,8 @@ seed_gobject_method_invoked(JSContextRef ctx,
if (use_return_as_out) {
if (force_return_array) {
- gchar* int_str = g_strdup_printf("%d", array_return_count++);
- seed_object_set_property(ctx, (JSObjectRef) retval_ref, int_str,
- jsout_val);
- g_free(int_str);
+ _add_jsvalue_in_array(ctx, (JSObjectRef) retval_ref,
+ array_return_value_count++, jsout_val);
} else {
seed_object_set_property(ctx, (JSObjectRef) retval_ref,
g_base_info_get_name(
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]