aot_fun_put_extdouble Subroutine

private subroutine aot_fun_put_extdouble(L, fun, arg)

Put an argument of type extended double 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~~CallsGraph proc~aot_fun_put_extdouble aot_fun_put_extdouble interface~flu_pushnumber flu_pushnumber proc~aot_fun_put_extdouble->interface~flu_pushnumber proc~flu_pushvalue flu_pushvalue proc~aot_fun_put_extdouble->proc~flu_pushvalue proc~flu_settop flu_settop proc~aot_fun_put_extdouble->proc~flu_settop proc~flu_pushdouble flu_pushdouble interface~flu_pushnumber->proc~flu_pushdouble proc~flu_pushreal flu_pushreal interface~flu_pushnumber->proc~flu_pushreal interface~lua_pushvalue lua_pushvalue proc~flu_pushvalue->interface~lua_pushvalue interface~lua_settop lua_settop proc~flu_settop->interface~lua_settop interface~lua_pushnumber lua_pushnumber proc~flu_pushdouble->interface~lua_pushnumber proc~flu_pushreal->interface~lua_pushnumber

Called by

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

Source Code

  subroutine aot_fun_put_extdouble(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

    ! 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 flu_pushNumber(L, locarg)
      fun%arg_count = fun%arg_count+1
    end if

  end subroutine aot_fun_put_extdouble