OpenSim.Region.ScriptEngine.../src/LUA/Method/LuaDelegate.cs

47 lines
1.3 KiB
C#

using System;
namespace NLua.Method
{
public class LuaDelegate
{
public LuaFunction Function;
public Type[] ReturnTypes;
public LuaDelegate()
{
Function = null;
ReturnTypes = null;
}
public object CallFunction(object[] args, object[] inArgs, int[] outArgs)
{
// args is the return array of arguments, inArgs is the actual array
// of arguments passed to the function (with in parameters only), outArgs
// has the positions of out parameters
object returnValue;
int iRefArgs;
object[] returnValues = Function.Call(inArgs, ReturnTypes);
if (ReturnTypes[0] == typeof(void))
{
returnValue = null;
iRefArgs = 0;
}
else
{
returnValue = returnValues[0];
iRefArgs = 1;
}
// Sets the value of out and ref parameters (from
// the values returned by the Lua function).
for (int i = 0; i < outArgs.Length; i++)
{
args[outArgs[i]] = returnValues[iRefArgs];
iRefArgs++;
}
return returnValue;
}
}
}