Main Page | Class Hierarchy | Alphabetical List | Data Structures | Directories | File List | Data Fields | Globals

def-script.h File Reference

Go to the source code of this file.

Defines

#define BEGIN_NOEXCEPTION   try {
#define END_NOEXCEPTION

Functions

const char * script_getLeaderName ()
Scripterscript_getLeader (lua_State *L)
int script_debugStack (lua_State *L)
 char *debugStack(error_message)
int script_file_include (lua_State *L) throw ()
 void file_include(filename)
int script_file_exists (lua_State *L) throw ()
 bool file_exists(filename)


Define Documentation

#define BEGIN_NOEXCEPTION   try {
 

Definition at line 17 of file def-script.h.

#define END_NOEXCEPTION
 

Value:

} \
catch (std::exception &e) { \
    luaL_error(L, e.what()); \
} \
catch (...) { \
    luaL_error(L, "unknown exception"); \
}

Definition at line 18 of file def-script.h.


Function Documentation

int script_debugStack lua_State *  L  ) 
 

char *debugStack(error_message)

Definition at line 35 of file def-script.cpp.

00036 {
00037     //NOTE: stolen from "lua/ldblib.c"
00038     /* size of the first part of the stack */
00039     static const int LEVELS1 = 12;
00040     /* size of the second part of the stack */
00041     static const int LEVELS2 = 10;
00042 
00043     int level = 1;  /* skip level 0 (it's this function) */
00044     int firstpart = 1;  /* still before eventual `...' */
00045     lua_Debug ar;
00046     if (lua_gettop(L) == 0)
00047       lua_pushliteral(L, "");
00048     else if (!lua_isstring(L, 1)) return 1;  /* no string message */
00049     else lua_pushliteral(L, "\n");
00050     lua_pushliteral(L, "stack traceback:");
00051     while (lua_getstack(L, level++, &ar)) {
00052       if (level > LEVELS1 && firstpart) {
00053         /* no more than `LEVELS2' more levels? */
00054         if (!lua_getstack(L, level+LEVELS2, &ar))
00055           level--;  /* keep going */
00056         else {
00057           lua_pushliteral(L, "\n\t...");  /* too many levels */
00058           while (lua_getstack(L, level+LEVELS2, &ar))  /* find last levels */
00059             level++;
00060         }
00061         firstpart = 0;
00062         continue;
00063       }
00064       lua_pushliteral(L, "\n\t");
00065       lua_getinfo(L, "Snl", &ar);
00066       lua_pushfstring(L, "%s:", ar.short_src);
00067       if (ar.currentline > 0)
00068         lua_pushfstring(L, "%d:", ar.currentline);
00069       switch (*ar.namewhat) {
00070         case 'g':  /* global */ 
00071         case 'l':  /* local */
00072         case 'f':  /* field */
00073         case 'm':  /* method */
00074           lua_pushfstring(L, " in function `%s'", ar.name);
00075           break;
00076         default: {
00077           if (*ar.what == 'm')  /* main? */
00078             lua_pushfstring(L, " in main chunk");
00079           else if (*ar.what == 'C' || *ar.what == 't')
00080             lua_pushliteral(L, " ?");  /* C function or tail call */
00081           else
00082             lua_pushfstring(L, " in function <%s:%d>",
00083                                ar.short_src, ar.linedefined);
00084         }
00085       }
00086       lua_concat(L, lua_gettop(L));
00087     }
00088     lua_concat(L, lua_gettop(L));
00089     //NOTE: return debug_message
00090     return 1;
00091 }

int script_file_exists lua_State *  L  )  throw ()
 

bool file_exists(filename)

Returns true when such file exists in userdir or systemdir.

Definition at line 116 of file def-script.cpp.

00117 {
00118     BEGIN_NOEXCEPTION;
00119     const char *filename = luaL_checkstring(L, 1);
00120 
00121     bool exists = Path::dataReadPath(filename).exists();
00122     lua_pushboolean(L, exists);
00123     END_NOEXCEPTION;
00124     //NOTE: return exists
00125     return 1;
00126 }

int script_file_include lua_State *  L  )  throw ()
 

void file_include(filename)

Do file in usedir or systemdir.

Definition at line 100 of file def-script.cpp.

00101 {
00102     BEGIN_NOEXCEPTION;
00103     const char *filename = luaL_checkstring(L, 1);
00104 
00105     script_getLeader(L)->scriptInclude(Path::dataReadPath(filename));
00106     END_NOEXCEPTION;
00107     return 0;
00108 }

Scripter* script_getLeader lua_State *  L  ) 
 

Definition at line 16 of file def-script.cpp.

00017 {
00018     lua_pushstring(L, script_getLeaderName());
00019     lua_rawget(L, LUA_REGISTRYINDEX);
00020     if (lua_isnil(L, -1)) {
00021         luaL_error(L, ExInfo("no leader")
00022                 .addInfo("key", script_getLeaderName()).what());
00023     }
00024     luaL_checktype(L, -1, LUA_TLIGHTUSERDATA);
00025     Scripter *result = static_cast<Scripter*>(lua_touserdata(L, -1));
00026     lua_pop(L, 1);
00027 
00028     return result;
00029 }

const char* script_getLeaderName  )  [inline]
 

Definition at line 27 of file def-script.h.

00027 { return "script_leader"; }


Generated on Wed Jun 1 09:54:32 2005 for Fish Fillets - Next Generation by  doxygen 1.4.2