From c1801e623f75dab3ccc4444ebe76417e1ef88afb Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Tue, 16 Sep 1997 16:25:59 -0300 Subject: [PATCH] Some generic functions over Lua objects --- lobject.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 lobject.c diff --git a/lobject.c b/lobject.c new file mode 100644 index 00000000..b9cabb0b --- /dev/null +++ b/lobject.c @@ -0,0 +1,68 @@ +/* +** $Id: $ +** Some generic functions over Lua objects +** See Copyright Notice in lua.h +*/ + +#include +#include + +#include "lobject.h" +#include "lua.h" + + +char *luaO_typenames[] = { /* ORDER LUA_T */ + "userdata", "line", "cmark", "mark", "function", "function", + "prototype", "table", "string", "number", "nil", + NULL +}; + + +long luaO_nentities = 0; + + +/* hash dimensions values */ +static long dimensions[] = + {5L, 11L, 23L, 47L, 97L, 197L, 397L, 797L, 1597L, 3203L, 6421L, + 12853L, 25717L, 51437L, 102811L, 205619L, 411233L, 822433L, + 1644817L, 3289613L, 6579211L, 13158023L, MAX_INT}; + + +int luaO_redimension (int oldsize) +{ + int i; + for (i=0; dimensions[i] oldsize) + return dimensions[i]; + } + lua_error("table overflow"); + return 0; /* to avoid warnings */ +} + + +int luaO_equalObj (TObject *t1, TObject *t2) +{ + if (ttype(t1) != ttype(t2)) return 0; + switch (ttype(t1)) { + case LUA_T_NIL: return 1; + case LUA_T_NUMBER: return nvalue(t1) == nvalue(t2); + case LUA_T_STRING: case LUA_T_USERDATA: return svalue(t1) == svalue(t2); + case LUA_T_ARRAY: return avalue(t1) == avalue(t2); + case LUA_T_FUNCTION: return t1->value.cl == t2->value.cl; + case LUA_T_CFUNCTION: return fvalue(t1) == fvalue(t2); + default: + lua_error("internal error in `lua_equalObj'"); + return 0; /* UNREACHEABLE */ + } +} + + +int luaO_findstring (char *name, char *list[]) +{ + int i; + for (i=0; list[i]; i++) + if (strcmp(list[i], name) == 0) + return i; + return -1; /* name not found */ +} +