details.
This commit is contained in:
12
lapi.c
12
lapi.c
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
** $Id: lapi.c,v 1.102 2000/10/02 14:47:43 roberto Exp roberto $
|
** $Id: lapi.c,v 1.103 2000/10/02 20:10:55 roberto Exp roberto $
|
||||||
** Lua API
|
** Lua API
|
||||||
** See Copyright Notice in lua.h
|
** See Copyright Notice in lua.h
|
||||||
*/
|
*/
|
||||||
@@ -141,10 +141,14 @@ int lua_isstring (lua_State *L, int index) {
|
|||||||
return (t == LUA_TSTRING || t == LUA_TNUMBER);
|
return (t == LUA_TSTRING || t == LUA_TNUMBER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int auxtag (const TObject *o) {
|
||||||
|
return ((ttype(o) == TAG_USERDATA) ? tsvalue(o)->u.d.tag :
|
||||||
|
(ttype(o) == TAG_TABLE) ? hvalue(o)->htag : (int)ttype(o));
|
||||||
|
}
|
||||||
|
|
||||||
int lua_tag (lua_State *L, int index) {
|
int lua_tag (lua_State *L, int index) {
|
||||||
btest(L, index,
|
btest(L, index, auxtag(o), LUA_NOTAG);
|
||||||
((ttype(o) == TAG_USERDATA) ? tsvalue(o)->u.d.tag :
|
|
||||||
luaT_effectivetag(L, o)), LUA_NOTAG);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int lua_equal (lua_State *L, int index1, int index2) {
|
int lua_equal (lua_State *L, int index1, int index2) {
|
||||||
|
|||||||
15
ltm.c
15
ltm.c
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
** $Id: ltm.c,v 1.50 2000/09/29 12:42:13 roberto Exp roberto $
|
** $Id: ltm.c,v 1.51 2000/10/02 20:10:55 roberto Exp roberto $
|
||||||
** Tag methods
|
** Tag methods
|
||||||
** See Copyright Notice in lua.h
|
** See Copyright Notice in lua.h
|
||||||
*/
|
*/
|
||||||
@@ -117,15 +117,20 @@ int lua_copytagmethods (lua_State *L, int tagto, int tagfrom) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int luaT_effectivetag (lua_State *L, const TObject *o) {
|
const TObject *luaT_gettagmethods (lua_State *L, const TObject *o) {
|
||||||
lua_Tag t = ttype(o);
|
lua_Tag t = ttype(o);
|
||||||
switch (t) {
|
switch (t) {
|
||||||
case TAG_USERDATA: {
|
case TAG_USERDATA: {
|
||||||
int tag = tsvalue(o)->u.d.tag;
|
int tag = tsvalue(o)->u.d.tag;
|
||||||
return (tag > L->last_tag) ? TAG_USERDATA : tag; /* deprecated test */
|
if (tag > L->last_tag)
|
||||||
|
return L->IMtable[TAG_USERDATA].int_method;
|
||||||
|
else
|
||||||
|
return L->IMtable[tag].int_method;
|
||||||
}
|
}
|
||||||
case TAG_TABLE: return hvalue(o)->htag;
|
case TAG_TABLE:
|
||||||
default: return t;
|
return L->IMtable[hvalue(o)->htag].int_method;
|
||||||
|
default:
|
||||||
|
return L->IMtable[(int)t].int_method;;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
6
ltm.h
6
ltm.h
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
** $Id: ltm.h,v 1.14 2000/08/07 20:21:34 roberto Exp roberto $
|
** $Id: ltm.h,v 1.15 2000/09/05 19:33:32 roberto Exp roberto $
|
||||||
** Tag methods
|
** Tag methods
|
||||||
** See Copyright Notice in lua.h
|
** See Copyright Notice in lua.h
|
||||||
*/
|
*/
|
||||||
@@ -42,14 +42,14 @@ struct IM {
|
|||||||
|
|
||||||
|
|
||||||
#define luaT_getim(L,tag,event) (&L->IMtable[tag].int_method[event])
|
#define luaT_getim(L,tag,event) (&L->IMtable[tag].int_method[event])
|
||||||
#define luaT_getimbyObj(L,o,e) (luaT_getim(L, luaT_effectivetag(L, o),(e)))
|
#define luaT_getimbyObj(L,o,e) (&luaT_gettagmethods((L),(o))[e])
|
||||||
|
|
||||||
extern const char *const luaT_eventname[];
|
extern const char *const luaT_eventname[];
|
||||||
|
|
||||||
|
|
||||||
void luaT_init (lua_State *L);
|
void luaT_init (lua_State *L);
|
||||||
void luaT_realtag (lua_State *L, int tag);
|
void luaT_realtag (lua_State *L, int tag);
|
||||||
int luaT_effectivetag (lua_State *L, const TObject *o);
|
const TObject *luaT_gettagmethods (lua_State *L, const TObject *o);
|
||||||
int luaT_validevent (int t, int e); /* used by compatibility module */
|
int luaT_validevent (int t, int e); /* used by compatibility module */
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
4
lvm.c
4
lvm.c
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
** $Id: lvm.c,v 1.139 2000/10/02 20:10:55 roberto Exp roberto $
|
** $Id: lvm.c,v 1.140 2000/10/03 14:03:21 roberto Exp roberto $
|
||||||
** Lua virtual machine
|
** Lua virtual machine
|
||||||
** See Copyright Notice in lua.h
|
** See Copyright Notice in lua.h
|
||||||
*/
|
*/
|
||||||
@@ -174,7 +174,7 @@ void luaV_settable (lua_State *L, StkId t, StkId key) {
|
|||||||
|
|
||||||
const TObject *luaV_getglobal (lua_State *L, TString *s) {
|
const TObject *luaV_getglobal (lua_State *L, TString *s) {
|
||||||
const TObject *value = luaH_getstr(L->gt, s);
|
const TObject *value = luaH_getstr(L->gt, s);
|
||||||
TObject *im = luaT_getimbyObj(L, value, IM_GETGLOBAL);
|
const TObject *im = luaT_getimbyObj(L, value, IM_GETGLOBAL);
|
||||||
if (ttype(im) == TAG_NIL) /* is there a tag method? */
|
if (ttype(im) == TAG_NIL) /* is there a tag method? */
|
||||||
return value; /* default behavior */
|
return value; /* default behavior */
|
||||||
else { /* tag method */
|
else { /* tag method */
|
||||||
|
|||||||
Reference in New Issue
Block a user