private static void Main(string[] args) { // var l=new List<int>(); // l.Add(1); // l.Add(2); // l.Add(3); // l.Add(4); // l.Reverse(1,2); // l.ForEach(Console.WriteLine); if (args.Length <= 0) { return; } try { var fs = File.OpenRead(args[0]); var data = new byte[fs.Length]; fs.Read(data, 0, data.Length); var ls = new state.LuaState(); ls.Register("print", print); ls.Register("getmetatable", getMetatable); ls.Register("setmetatable", setMetatable); ls.Load(ref data, "chunk", "b"); ls.Call(0, 0); } catch (Exception e) { Console.WriteLine(e.ToString()); } // Console.ReadKey(); }
private (object, bool) CallMetamethod(object a, object b, string mmName, LuaState ls) { var mm = GetMetafield(a, mmName, ls); if (mm is null) { mm = GetMetafield(b, mmName, ls); if (mm is null) { return(null, false); } } //ls.stack.check(4); ls._stack.Push(mm); ls._stack.Push(a); ls._stack.Push(b); ls.Call(2, 1); return(ls._stack.Pop(), true); }