private int AuxGetInfo(string what, LuaDebug ar, StkId func, CallInfo ci) { int status = 1; for (int i = 0; i < what.Length; ++i) { char c = what[i]; switch (c) { case 'S': { FuncInfo(ar, func); break; } case 'l': { ar.CurrentLine = (ci != null && ci.IsLua) ? GetCurrentLine(ci) : -1; break; } case 'u': { Utl.Assert(func.V.TtIsFunction()); if (func.V.ClIsLuaClosure()) { var lcl = func.V.ClLValue(); ar.NumUps = lcl.Upvals.Length; ar.IsVarArg = lcl.Proto.IsVarArg; ar.NumParams = lcl.Proto.NumParams; } else if (func.V.ClIsCsClosure()) { var ccl = func.V.ClCsValue(); ar.NumUps = ccl.Upvals.Length; ar.IsVarArg = true; ar.NumParams = 0; } else { throw new System.NotImplementedException(); } break; } case 't': { ar.IsTailCall = (ci != null) ? ((ci.CallStatus & CallStatus.CIST_TAIL) != 0) : false; break; } case 'n': { var prevCI = BaseCI[ci.Index - 1]; if (ci != null && ((ci.CallStatus & CallStatus.CIST_TAIL) == 0) && prevCI.IsLua) { ar.NameWhat = GetFuncName(prevCI, out ar.Name); } else { ar.NameWhat = null; } if (ar.NameWhat == null) { ar.NameWhat = ""; // not found ar.Name = null; } break; } case 'L': case 'f': // handled by GetInfo break; default: status = 0; // invalid option break; } } return(status); }
private bool IsInStack(CallInfo ci, StkId o) { // TODO return(false); }