Put an array of quadruples into the list of arguments for the function.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(flu_state) | :: | L | ||||
type(aot_fun_type) | :: | fun | Handle of the function, this argument should be put into. |
|||
real(kind=quad_k), | intent(in) | :: | arg(:) | Actual argument to hand over to the Lua function. |
subroutine aot_fun_put_quadruple_v(L, fun, arg)
type(flu_state) :: L !< Handle for the Lua script.
!> Handle of the function, this argument should be put into.
type(aot_fun_type) :: fun
!> Actual argument to hand over to the Lua function.
real(kind=quad_k), intent(in) :: arg(:)
real(kind=double_k) :: locarg(size(arg))
integer :: thandle
! Only do something, if the function is actually properly defined.
if (fun%handle /= 0) then
locarg = real(arg, kind=double_k)
! If the function was executed before this call, it has to be
! reset.
if (fun%arg_count == -1) then
! Set the top of the stack to the reference of the function.
! Discarding anything above it.
call flu_settop(L, fun%handle)
! Push a copy of the function itself on the stack again, before
! adding arguments, to savely survive popping of the function
! upon execution.
call flu_pushvalue(L, fun%handle)
! Increase the argument count to 0 again (really start counting
! arguments afterwards.
fun%arg_count = fun%arg_count+1
end if
call aot_table_from_1Darray(L, thandle, locarg)
fun%arg_count = fun%arg_count+1
end if
end subroutine aot_fun_put_quadruple_v