文件行宏

lua-users home
wiki

这是一个简单的 C 标记过滤器,它将实现一个 __FILE__ 和 __LINE__ 宏系统。请注意,文件名将显示为 @test.lua,字符串将完整显示。您可能需要对 __FILE__ 进行一些处理,就像在 luaU_undump 中一样。

/*
* proxy.c
* lexer proxy for Lua parser -- implements __FILE__ and __LINE__
* Luiz Henrique de Figueiredo
* This code is hereby placed in the public domain.
* Add <<#include "proxy.c">> just before the definition of luaX_next in llex.c
*/

#include <string.h>

static int nexttoken(LexState *ls, SemInfo *seminfo)
{
  int t=llex(ls,seminfo);
  if (t==TK_NAME) {
    if (strcmp(getstr(seminfo->ts),"__FILE__")==0) {
      t=TK_STRING;
      seminfo->ts = ls->source;
    }
    else if (strcmp(getstr(seminfo->ts),"__LINE__")==0) {
      t=TK_NUMBER;
      seminfo->r = ls->linenumber;
    }
  }
  return t;
}

#define llex nexttoken

等效的纯 Lua 代码可以是

function __FILE__() return debug.getinfo(2,'S').source end
function __LINE__() return debug.getinfo(2, 'l').currentline end

最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2007 年 9 月 18 日凌晨 4:11 GMT (差异)