view lua/luadyncall/src/dyncall.lua @ 46:c21d1c2c84e1

- removed pydc.py wrapper overhead (which only called pydcext.so functions, directly, anyways) * implies renaming pydcext.* to pydc.* * while at it, iterate directly over args that are passed in (before we did extract fptr, sig and a tuple for the args and iterated over latter afterwards); we might have a tiny perf improvement now - added type stub as package_data
author Tassilo Philipp
date Fri, 13 Nov 2020 14:10:31 +0100
parents 0cfcc391201f
children
line wrap: on
line source

require "ldyncall"
require "dynload"

--- invoke dynamic foreign function call
-- This is a front-end function that provides several interfaces
-- @param target Target signature 
-- @param ... if target is a string, then the arguments follow.
-- @see dodyncall for details 

function dyncall(target, ...)
  local t = type(target)
  if t == "string" then
    local libnames, sym, sig = target:match("^@(.+)/(.+)%((.+)")
    local lib = dynload(libnames) -- hold reference as long as the call
    return ldyncall.dodyncall( dynsym( lib,sym ), sig, ...)
  else
    return ldyncall.dodyncall( target, ...)
  end
end

-- pointer utilities
--

topointer = ldyncall.topointer
NULL = topointer(0)