File Line Macros

lua-users home
wiki

Here is a simple C token filter that will implement a __FILE__ and __LINE__ macro system. Note that filenames will appear as @test.lua and strings will appear in full. You may want to cook __FILE__ a little, as done in 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 

An equivalent pure Lua code could be:

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

RecentChanges · preferences
edit · history
Last edited September 17, 2007 10:11 pm GMT (diff)