/// <summary> /// 以名称获取字段,没有就返回nil /// </summary> /// <param name="name"></param> /// <returns></returns> public ScriptObject GetFileld(string filed) { Contract.Assert(Type == ValueType.TABLE); TablePart tablePart = Value.RefPartHandle.ConverToTablePart(); ScriptObject s = tablePart.TryGetValue(filed); if (s != null) { return(s); } ScriptObject metaTable = tablePart.MetaTable; if (metaTable != null) { s = metaTable.GetFileld("_index"); if (s.Type == ValueType.TABLE) { return(s.GetFileld(filed)); } else if (s.Type == ValueType.FUNCTION) { //多一次拷贝(实际上) //RunEnvironment.Instance.LocalStack.InvokeFunction(s, this, ScriptObject.CreateString(filed)); StackState state = RunEnvironment.Instance.LocalStack; state.PushFunction(s); state.Push(this); state.Push(filed); return(state.InvokeFunction()); } } return(RunEnvironment.Nil); }
/// <summary> /// 调用栈中的函数 /// </summary> public static ScriptObject InvokeFuncInStack() { StackState stack = RunEnvironment.Instance.LocalStack; return(stack.InvokeFunction()); }