aot_fun_put_extdouble_v Subroutine

private subroutine aot_fun_put_extdouble_v(L, fun, arg)

Put an array of extended doubles into the list of arguments for the function.

Arguments

Type IntentOptional Attributes Name
type(flu_State) :: L
type(aot_fun_type) :: fun

Handle of the function, this argument should be put into.

real(kind=xdble_k), intent(in) :: arg(:)

Actual argument to hand over to the Lua function.


Calls

proc~~aot_fun_put_extdouble_v~~CallsGraph proc~aot_fun_put_extdouble_v aot_fun_put_extdouble_v interface~aot_table_from_1darray~3 aot_table_from_1Darray proc~aot_fun_put_extdouble_v->interface~aot_table_from_1darray~3 proc~flu_pushvalue flu_pushvalue proc~aot_fun_put_extdouble_v->proc~flu_pushvalue proc~flu_settop flu_settop proc~aot_fun_put_extdouble_v->proc~flu_settop proc~create_1darray_extdouble create_1Darray_extdouble interface~aot_table_from_1darray~3->proc~create_1darray_extdouble interface~lua_pushvalue lua_pushvalue proc~flu_pushvalue->interface~lua_pushvalue interface~lua_settop lua_settop proc~flu_settop->interface~lua_settop interface~flu_pushinteger flu_pushinteger proc~create_1darray_extdouble->interface~flu_pushinteger interface~flu_pushnumber flu_pushnumber proc~create_1darray_extdouble->interface~flu_pushnumber proc~flu_createtable flu_createtable proc~create_1darray_extdouble->proc~flu_createtable proc~flu_gettop flu_gettop proc~create_1darray_extdouble->proc~flu_gettop proc~flu_settable flu_settable proc~create_1darray_extdouble->proc~flu_settable proc~flu_pushint flu_pushint interface~flu_pushinteger->proc~flu_pushint proc~flu_pushlong flu_pushlong interface~flu_pushinteger->proc~flu_pushlong proc~flu_pushdouble flu_pushdouble interface~flu_pushnumber->proc~flu_pushdouble proc~flu_pushreal flu_pushreal interface~flu_pushnumber->proc~flu_pushreal interface~lua_createtable lua_createtable proc~flu_createtable->interface~lua_createtable interface~lua_gettop lua_gettop proc~flu_gettop->interface~lua_gettop interface~lua_settable lua_settable proc~flu_settable->interface~lua_settable interface~lua_pushnumber lua_pushnumber proc~flu_pushdouble->interface~lua_pushnumber interface~lua_pushinteger lua_pushinteger proc~flu_pushint->interface~lua_pushinteger proc~flu_pushlong->interface~lua_pushinteger proc~flu_pushreal->interface~lua_pushnumber

Called by

proc~~aot_fun_put_extdouble_v~~CalledByGraph proc~aot_fun_put_extdouble_v aot_fun_put_extdouble_v interface~aot_fun_put~2 aot_fun_put interface~aot_fun_put~2->proc~aot_fun_put_extdouble_v

Source Code

  subroutine aot_fun_put_extdouble_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=xdble_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_extdouble_v