53 lines
1.7 KiB
C#
53 lines
1.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
|
|
namespace Language.Lua
|
|
{
|
|
public partial class FunctionBody
|
|
{
|
|
public LuaValue Evaluate(LuaTable enviroment)
|
|
{
|
|
return new LuaFunction(
|
|
new LuaFunc(delegate(LuaValue[] args)
|
|
{
|
|
var table = new LuaTable(enviroment);
|
|
|
|
List<string> names = this.ParamList.NameList;
|
|
|
|
if (names.Count > 0)
|
|
{
|
|
int argCount = Math.Min(names.Count, args.Length);
|
|
|
|
for (int i = 0; i < argCount; i++)
|
|
{
|
|
table.SetNameValue(names[i], args[i]);
|
|
}
|
|
|
|
if (this.ParamList.HasVarArg)
|
|
{
|
|
if (argCount < args.Length)
|
|
{
|
|
LuaValue[] remainedArgs = new LuaValue[args.Length - argCount];
|
|
for (int i = 0; i < remainedArgs.Length; i++)
|
|
{
|
|
remainedArgs[i] = args[argCount + i];
|
|
}
|
|
table.SetNameValue("...", new LuaMultiValue(remainedArgs));
|
|
}
|
|
}
|
|
}
|
|
else if (this.ParamList.IsVarArg != null)
|
|
{
|
|
table.SetNameValue("...", new LuaMultiValue(args));
|
|
}
|
|
|
|
this.Chunk.Enviroment = table;
|
|
|
|
return this.Chunk.Execute();
|
|
})
|
|
);
|
|
}
|
|
}
|
|
}
|