static void in_argument_from_ruby(RBGIArgMetadata *metadata, VALUE rb_arguments, GArray *in_args, GPtrArray *args_metadata, VALUE self) { if (metadata->callback_p && !metadata->destroy_p) { in_callback_argument_from_ruby(metadata, in_args); return; } if (metadata->rb_arg_index == -1) { return; } if (metadata->array_p) { GIArgument *array_argument; GIArgument *length_argument = NULL; GIArgInfo *length_arg_info = NULL; VALUE rb_argument = Qnil; if (RARRAY_LEN(rb_arguments) > metadata->rb_arg_index) { rb_argument = RARRAY_PTR(rb_arguments)[metadata->rb_arg_index]; } array_argument = &(g_array_index(in_args, GIArgument, metadata->in_arg_index)); if (metadata->array_length_in_arg_index != -1) { RBGIArgMetadata *length_metadata; length_argument = &(g_array_index(in_args, GIArgument, metadata->array_length_in_arg_index)); length_metadata = g_ptr_array_index(args_metadata, metadata->array_length_arg_index); length_arg_info = &(length_metadata->arg_info); } RVAL2GI_IN_ARRAY_ARGUMENT(array_argument, length_argument, &(metadata->arg_info), length_arg_info, rb_argument); } else { GIArgument *argument; VALUE rb_argument = Qnil; if (RARRAY_LEN(rb_arguments) > metadata->rb_arg_index) { rb_argument = RARRAY_PTR(rb_arguments)[metadata->rb_arg_index]; } argument = &(g_array_index(in_args, GIArgument, metadata->in_arg_index)); RVAL2GI_IN_ARGUMENT(argument, &(metadata->arg_info), rb_argument, self); } }
static void in_argument_from_ruby(RBGIArgMetadata *metadata, VALUE rb_arguments, GArray *in_args) { if (metadata->rb_arg_index == -1) { return; } if (metadata->callback_p) { in_callback_argument_from_ruby(metadata, in_args); } else { GIArgument *argument; VALUE rb_argument = Qnil; if (RARRAY_LEN(rb_arguments) > metadata->rb_arg_index) { rb_argument = RARRAY_PTR(rb_arguments)[metadata->rb_arg_index]; } argument = &(g_array_index(in_args, GIArgument, metadata->in_arg_index)); RVAL2GI_IN_ARGUMENT(argument, &(metadata->arg_info), rb_argument); } }