예제 #1
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;
}
예제 #2
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;
}
예제 #3
0
파일: ldebug.c 프로젝트: Dany3R9/Proj
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;
}
예제 #4
0
static
void
getsource(unsigned long *i, char **s, char **t, unsigned long *u)
{
    char *a;

    *s = *t = NULL;
    *i = *u = 0;
    /* From mpatrol release 1.4.5, the thread id, source function name, file
     * name and line number for each allocation, reallocation and deallocation
     * is also written to the tracing output file.
     */
    if (version >= 10405)
    {
        *i = getuleb128();
        *s = getfuncname();
        *t = getfilename();
        *u = getuleb128();
    }
}
예제 #5
0
파일: ldebug.c 프로젝트: rparet/darkpawns
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;
}