diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-09-16 16:25:59 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1997-09-16 16:25:59 -0300 |
commit | c1801e623f75dab3ccc4444ebe76417e1ef88afb (patch) | |
tree | f09c2221e1607601ae630a51be088e38b5a62339 /lobject.c | |
parent | a404f6e0e621927dc3765db556a7f4e645756a47 (diff) | |
download | lua-github-c1801e623f75dab3ccc4444ebe76417e1ef88afb.tar.gz |
Some generic functions over Lua objects
Diffstat (limited to 'lobject.c')
-rw-r--r-- | lobject.c | 68 |
1 files changed, 68 insertions, 0 deletions
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 <stdlib.h> +#include <string.h> + +#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]<MAX_INT; i++) { + if (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 */ +} + |