Beispiel #1
0
static int auxgetinfo (LuaThread *L, const char *what, LuaDebug *ar,
                    LuaClosure *f, LuaStackFrame *ci) {
  THREAD_CHECK(L);
  int status = 1;
  for (; *what; what++) {
    switch (*what) {
      case 'S': {
        funcinfo(ar, f);
        break;
      }
      case 'l': {
        //ar->currentline = (ci && ci->isLua()) ? currentline(ci) : -1;
        ar->currentline = ci ? ci->getCurrentLine() : -1;
        break;
      }
      case 'u': {
        ar->nups = (f == NULL) ? 0 : f->nupvalues;
        if (f == NULL || f->isC) {
          ar->isvararg = true;
          ar->nparams = 0;
        }
        else {
          ar->isvararg = f->proto_->is_vararg;
          ar->nparams = f->proto_->numparams;
        }
        break;
      }
      case 't': {
        ar->istailcall = (ci) ? (ci->callstatus & CIST_TAIL ? true : false) : false;
        break;
      }
      case 'n': {
        /* calling function is a known Lua function? */
        if (ci && !(ci->callstatus & CIST_TAIL) && ci->previous->isLua()) {
          const char* temp = getfuncname2(L, ci->previous, ar->name2);
          if(temp) {
            ar->namewhat2 = temp;
          }
          else {
            ar->namewhat2.clear();
          }
        }
        else {
          ar->namewhat2.clear();
        }
        if (ar->namewhat2.empty()) {
          ar->name2.clear();
        }
        break;
      }
      case 'L':
      case 'f':  /* handled by lua_getinfo */
        break;
      default: status = 0;  /* invalid option */
    }
  }
  return status;
}
Beispiel #2
0
static int auxgetinfo (lua_State *L, const char *what, lua_Debug *ar,
                       Closure *f, CallInfo *ci) {
    int status = 1;
    for (; *what; what++) {
        switch (*what) {
        case 'S': {
            funcinfo(ar, f);
            break;
        }
        case 'l': {
            ar->currentline = (ci && isLua(ci)) ? currentline(ci) : -1;
            break;
        }
        case 'u': {
            ar->nups = (f == NULL) ? 0 : f->c.nupvalues;
            if (noLuaClosure(f)) {
                ar->isvararg = 1;
                ar->nparams = 0;
            }
            else {
                ar->isvararg = f->l.p->is_vararg;
                ar->nparams = f->l.p->numparams;
            }
            break;
        }
        case 't': {
            ar->istailcall = (ci) ? ci->callstatus & CIST_TAIL : 0;
            break;
        }
        case 'n': {
            /* calling function is a known Lua function? */
            if (ci && !(ci->callstatus & CIST_TAIL) && isLua(ci->previous))
                ar->namewhat = getfuncname(L, ci->previous, &ar->name);
            else
                ar->namewhat = NULL;
            if (ar->namewhat == NULL) {
                ar->namewhat = "";  /* not found */
                ar->name = NULL;
            }
            break;
        }
        case 'L':
        case 'f':  /* handled by lua_getinfo */
            break;
        default:
            status = 0;  /* invalid option */
        }
    }
    return status;
}
Beispiel #3
0
static int auxgetinfo(lua_State* L, const char* what, lua_Debug* ar,
		      Closure* f, CallInfo* ci)
{
	int status = 1;
	if (f == NULL)
	{
		info_tailcall(ar);
		return status;
	}
	for (; *what; what++)
	{
		switch (*what)
		{
			case 'S':
			{
				funcinfo(ar, f);
				break;
			}
			case 'l':
			{
				ar->currentline = (ci) ? currentline(L, ci) : -1;
				break;
			}
			case 'u':
			{
				ar->nups = f->c.nupvalues;
				break;
			}
			case 'n':
			{
				ar->namewhat = (ci) ? getfuncname(L, ci, &ar->name) : NULL;
				if (ar->namewhat == NULL)
				{
					ar->namewhat = "";  /* not found */
					ar->name = NULL;
				}
				break;
			}
			case 'L':
			case 'f':	 /* handled by lua_getinfo */
				break;
			default:
				status = 0;  /* invalid option */
		}
	}
	return status;
}
Beispiel #4
0
static int
auxgetinfo(lua_State * L, const char *what, lua_Debug * ar, StkId f, CallInfo * ci)
{
  int status = 1;
  for (; *what; what++) {
    switch (*what) {
    case 'S':
      {
        funcinfo(ar, f);
        break;
      }
    case 'l':
      {
        ar->currentline = (ci) ? currentline(ci) : -1;
        break;
      }
    case 'u':
      {
        ar->nups = clvalue(f)->c.nupvalues;
        break;
      }
    case 'n':
      {
        ar->namewhat = (ci) ? getfuncname(ci, &ar->name) : NULL;
        if (ar->namewhat == NULL) {
          /* try to find a global name */
          if ((ar->name = travglobals(L, f)) != NULL)
            ar->namewhat = "global";
          else
            ar->namewhat = "";  /* not found */
        }
        break;
      }
    case 'f':
      {
        setobj2s(L->top, f);
        break;
      }
    default:
      status = 0;               /* invalid option */
    }
  }
  return status;
}
Beispiel #5
0
LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar) {
  StkId func;
  int isactive = (*what != '>');
  if (isactive)
    func = ar->_func;
  else {
    what++;  /* skip the '>' */
    func = L->top - 1;
  }
  for (; *what; what++) {
    switch (*what) {
      case 'S': {
        funcinfo(L, ar, func);
        break;
      }
      case 'l': {
        ar->currentline = currentline(func);
        break;
      }
      case 'u': {
        ar->nups = nups(func);
        break;
      }
      case 'n': {
        ar->namewhat = (isactive) ? getfuncname(L, func, &ar->name) : NULL;
        if (ar->namewhat == NULL)
          getname(L, func, ar);
        break;
      }
      case 'f': {
        setnormalized(L->top, func);
        incr_top;  /* push function */
        break;
      }
      default: return 0;  /* invalid option */
    }
  }
  if (!isactive) L->top--;  /* pop function */
  return 1;
}