Lua4.0 lua_dofile,lua_dostring

本文详细剖析了Lua中lua_dofile和lua_dostring两个函数的实现过程,从文件解析到语法分析,再到虚拟机执行字节码,揭示了它们在处理文件和字符串时的共性和差异,展示了Lua内部机制的一角。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两个函数的定义都位于 ldo.c 中,看看这两个函数都做了什么事儿?

先来看一下 lua_dofile 执行文件

LUA_API int lua_dofile (lua_State *L, const char *filename) {
  int status = parse_file(L, filename);
  if (status == 0)  /* parse OK? */
    status = lua_call(L, 0, LUA_MULTRET);  /* call main */
  return status;
}

先解析文件,如果解析无误,则调用。

由函数名字及下面的调用我们可以猜出,parse_file 应该是做的语法解析。

static int parse_file (lua_State *L, const char *filename) {
  ZIO z;
  int status;
  int bin;  /* flag for file mode */
  int c;    /* look ahead char */
  FILE *f = (filename == NULL) ? stdin : fopen(filename, "r");
  if (f == NULL) return LUA_ERRFILE;  /* unable to open file */
  c = fgetc(f);
  ungetc(c, f);
  bin = (c == ID_CHUNK);
  if (bin &&&nbs
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值