lua-users home
lua-l archive

Question about a metatable's name in luasocket

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Why the code below(tcp.c in luasocket) use "tcp{master}"?
My question is about "{}" in metatable's name.
Using this url to see the whole file quickly:
http://www.google.com/codesearch/p?hl=en#-V8qIAgTIn4/kepler-1.0/luasocket-2.0.1/src/tcp.c&q=luasocket%202.0.1
Thanks!
-----------------------------------
int tcp_open(lua_State *L)
{
 /* create classes */
 auxiliar_newclass(L, "tcp{master}", tcp);
 auxiliar_newclass(L, "tcp{client}", tcp);
 auxiliar_newclass(L, "tcp{server}", tcp);
 /* create class groups */
 auxiliar_add2group(L, "tcp{master}", "tcp{any}");
 auxiliar_add2group(L, "tcp{client}", "tcp{any}");
 auxiliar_add2group(L, "tcp{server}", "tcp{any}");
 /* define library functions */
 luaL_openlib(L, NULL, func, 0);
 return 0;
}
/*-------------------------------------------------------------------------*\
* Creates a new class with given methods
* Methods whose names start with __ are passed directly to the metatable.
\*-------------------------------------------------------------------------*/
void auxiliar_newclass(lua_State *L, const char *classname, luaL_reg *func) {
 luaL_newmetatable(L, classname); /* mt */
 /* create __index table to place methods */
 lua_pushstring(L, "__index"); /* mt,"__index" */
 lua_newtable(L); /* mt,"__index",it */
 /* put class name into class metatable */
 lua_pushstring(L, "class"); /* mt,"__index",it,"class" */
 lua_pushstring(L, classname); /* mt,"__index",it,"class",classname */
 lua_rawset(L, -3); /* mt,"__index",it */
 /* pass all methods that start with _ to the metatable, and all others
 * to the index table */
 for (; func->name; func++) { /* mt,"__index",it */
 lua_pushstring(L, func->name);
 lua_pushcfunction(L, func->func);
 lua_rawset(L, func->name[0] == '_' ? -5: -3);
 }
 lua_rawset(L, -3); /* mt */
 lua_pop(L, 1);
}

AltStyle によって変換されたページ (->オリジナル) /