读书人

LUA源码分析9:Debug.quot;getlocalamp;quot

发布时间: 2012-11-07 09:56:10 作者: rapoo

LUA源码分析九:Debug."getlocal"

?

函数:{"getlocal", db_getlocal}

从db_getlocal开始跟调.该函数是把自身的所有变量打印出来。大体的思路是算到执行码,根据执行码的大小限制,遍历函数保存的变量信息,然后依次打印。

?

?

?

const char *luaF_getlocalname (const Proto *f, int local_number, int pc) {  int i;  /*  locvars表示存放的函数变量,大小为f->sizelocvars  startpc...endpc,表示在这个范围内的为active变量。  */  for (i = 0; i<f->sizelocvars && f->locvars[i].startpc <= pc; i++) {    if (pc < f->locvars[i].endpc) {  /* is variable active? */      local_number--;      if (local_number == 0)        return getstr(f->locvars[i].varname);    }  }  return NULL;  /* not found */}

?跟调了下l.p->code和startpc,endpc两个值,在parse的时候就被设置好。

startpc,endpc被设置成l.p->code类似的边界范围值,比如标识局部变量等。

而ci->savedpc和l.p->code之间势必还插入了其他的值,所以你会看到luaF_getlocalname中的判断过程

?

?

读书人网 >编程

热点推荐