首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-11-07 
LUA源码分析九:Debug.getlocal?函数:{getlocal, db_getlocal}从db_getlocal开始跟调.该函数是把自身的

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中的判断过程

?

?

热点排行