Lua does not need all those different types...

This commit is contained in:
Roberto Ierusalimschy 2003-04-28 16:26:16 -03:00
parent 943c82b376
commit 572a69df78
6 changed files with 32 additions and 26 deletions

4
lgc.c
View File

@ -1,5 +1,5 @@
/* /*
** $Id: lgc.c,v 1.170 2003/03/18 12:50:04 roberto Exp roberto $ ** $Id: lgc.c,v 1.171 2003/04/03 13:35:34 roberto Exp roberto $
** Garbage Collector ** Garbage Collector
** See Copyright Notice in lua.h ** See Copyright Notice in lua.h
*/ */
@ -389,7 +389,7 @@ static void sweepstrings (lua_State *L, int all) {
static void checkSizes (lua_State *L) { static void checkSizes (lua_State *L) {
/* check size of string hash */ /* check size of string hash */
if (G(L)->strt.nuse < cast(ls_nstr, G(L)->strt.size/4) && if (G(L)->strt.nuse < cast(lu_int32, G(L)->strt.size/4) &&
G(L)->strt.size > MINSTRTABSIZE*2) G(L)->strt.size > MINSTRTABSIZE*2)
luaS_resize(L, G(L)->strt.size/2); /* table is too big */ luaS_resize(L, G(L)->strt.size/2); /* table is too big */
/* check size of buffer */ /* check size of buffer */

View File

@ -1,5 +1,5 @@
/* /*
** $Id: llimits.h,v 1.51 2002/11/25 17:47:13 roberto Exp roberto $ ** $Id: llimits.h,v 1.52 2003/02/20 19:33:23 roberto Exp roberto $
** Limits, basic types, and some other `installation-dependent' definitions ** Limits, basic types, and some other `installation-dependent' definitions
** See Copyright Notice in lua.h ** See Copyright Notice in lua.h
*/ */
@ -40,21 +40,26 @@
** any machine, but may not be optimal. ** any machine, but may not be optimal.
*/ */
/* an unsigned integer to hold hash values */
typedef unsigned int lu_hash;
/* its signed equivalent */
typedef int ls_hash;
/* an unsigned integer big enough to count the total memory used by Lua; */ /*
/* it should be at least as large as size_t */ ** an unsigned integer with at least 32 bits
typedef unsigned long lu_mem; */
#ifndef LUA_UINT32
#define LUA_UINT32 unsigned long
#endif
typedef LUA_UINT32 lu_int32;
/*
** an unsigned integer big enough to count the total memory used by Lua;
** it should be at least as large as `size_t'
*/
typedef lu_int32 lu_mem;
#define MAX_LUMEM ULONG_MAX #define MAX_LUMEM ULONG_MAX
/* an integer big enough to count the number of strings in use */
typedef long ls_nstr;
/* chars used as small naturals (so that `char' is reserved for characters) */ /* chars used as small naturals (so that `char' is reserved for characters) */
typedef unsigned char lu_byte; typedef unsigned char lu_byte;
@ -69,7 +74,7 @@ typedef unsigned char lu_byte;
** this is for hashing only; there is no problem if the integer ** this is for hashing only; there is no problem if the integer
** cannot hold the whole pointer value ** cannot hold the whole pointer value
*/ */
#define IntPoint(p) ((lu_hash)(p)) #define IntPoint(p) ((unsigned int)(p))
@ -114,7 +119,7 @@ typedef LUA_UACNUMBER l_uacNumber;
** type for virtual-machine instructions ** type for virtual-machine instructions
** must be an unsigned with (at least) 4 bytes (see details in lopcodes.h) ** must be an unsigned with (at least) 4 bytes (see details in lopcodes.h)
*/ */
typedef unsigned long Instruction; typedef lu_int32 Instruction;
/* maximum depth for calls (unsigned short) */ /* maximum depth for calls (unsigned short) */

View File

@ -1,5 +1,5 @@
/* /*
** $Id: lobject.h,v 1.158 2003/02/18 16:02:56 roberto Exp roberto $ ** $Id: lobject.h,v 1.159 2003/03/18 12:50:04 roberto Exp roberto $
** Type definitions for Lua objects ** Type definitions for Lua objects
** See Copyright Notice in lua.h ** See Copyright Notice in lua.h
*/ */
@ -181,7 +181,7 @@ typedef union TString {
struct { struct {
CommonHeader; CommonHeader;
lu_byte reserved; lu_byte reserved;
lu_hash hash; unsigned int hash;
size_t len; size_t len;
} tsv; } tsv;
} TString; } TString;

View File

@ -1,5 +1,5 @@
/* /*
** $Id: lstate.h,v 1.108 2002/11/25 17:47:13 roberto Exp roberto $ ** $Id: lstate.h,v 1.109 2003/02/27 11:52:30 roberto Exp roberto $
** Global State ** Global State
** See Copyright Notice in lua.h ** See Copyright Notice in lua.h
*/ */
@ -64,7 +64,7 @@ struct lua_longjmp; /* defined in ldo.c */
typedef struct stringtable { typedef struct stringtable {
GCObject **hash; GCObject **hash;
ls_nstr nuse; /* number of elements */ lu_int32 nuse; /* number of elements */
int size; int size;
} stringtable; } stringtable;

View File

@ -1,5 +1,5 @@
/* /*
** $Id: lstring.c,v 1.77 2002/11/13 11:32:26 roberto Exp roberto $ ** $Id: lstring.c,v 1.78 2002/12/04 17:38:31 roberto Exp roberto $
** String table (keeps all strings handled by Lua) ** String table (keeps all strings handled by Lua)
** See Copyright Notice in lua.h ** See Copyright Notice in lua.h
*/ */
@ -34,7 +34,7 @@ void luaS_resize (lua_State *L, int newsize) {
GCObject *p = tb->hash[i]; GCObject *p = tb->hash[i];
while (p) { /* for each node in the list */ while (p) { /* for each node in the list */
GCObject *next = p->gch.next; /* save next */ GCObject *next = p->gch.next; /* save next */
lu_hash h = gcotots(p)->tsv.hash; unsigned int h = gcotots(p)->tsv.hash;
int h1 = lmod(h, newsize); /* new position */ int h1 = lmod(h, newsize); /* new position */
lua_assert(cast(int, h%newsize) == lmod(h, newsize)); lua_assert(cast(int, h%newsize) == lmod(h, newsize));
p->gch.next = newhash[h1]; /* chain it */ p->gch.next = newhash[h1]; /* chain it */
@ -48,7 +48,8 @@ void luaS_resize (lua_State *L, int newsize) {
} }
static TString *newlstr (lua_State *L, const char *str, size_t l, lu_hash h) { static TString *newlstr (lua_State *L, const char *str, size_t l,
unsigned int h) {
TString *ts = cast(TString *, luaM_malloc(L, sizestring(l))); TString *ts = cast(TString *, luaM_malloc(L, sizestring(l)));
stringtable *tb; stringtable *tb;
ts->tsv.len = l; ts->tsv.len = l;
@ -63,7 +64,7 @@ static TString *newlstr (lua_State *L, const char *str, size_t l, lu_hash h) {
ts->tsv.next = tb->hash[h]; /* chain new entry */ ts->tsv.next = tb->hash[h]; /* chain new entry */
tb->hash[h] = valtogco(ts); tb->hash[h] = valtogco(ts);
tb->nuse++; tb->nuse++;
if (tb->nuse > cast(ls_nstr, tb->size) && tb->size <= MAX_INT/2) if (tb->nuse > cast(lu_int32, tb->size) && tb->size <= MAX_INT/2)
luaS_resize(L, tb->size*2); /* too crowded */ luaS_resize(L, tb->size*2); /* too crowded */
return ts; return ts;
} }
@ -71,7 +72,7 @@ static TString *newlstr (lua_State *L, const char *str, size_t l, lu_hash h) {
TString *luaS_newlstr (lua_State *L, const char *str, size_t l) { TString *luaS_newlstr (lua_State *L, const char *str, size_t l) {
GCObject *o; GCObject *o;
lu_hash h = (lu_hash)l; /* seed */ unsigned int h = cast(unsigned int, l); /* seed */
size_t step = (l>>5)+1; /* if string is too long, don't hash all its chars */ size_t step = (l>>5)+1; /* if string is too long, don't hash all its chars */
size_t l1; size_t l1;
for (l1=l; l1>=step; l1-=step) /* compute hash */ for (l1=l; l1>=step; l1-=step) /* compute hash */

View File

@ -1,5 +1,5 @@
/* /*
** $Id: ltable.c,v 1.132 2003/04/03 13:35:34 roberto Exp roberto $ ** $Id: ltable.c,v 1.133 2003/04/28 13:31:46 roberto Exp roberto $
** Lua tables (hash) ** Lua tables (hash)
** See Copyright Notice in lua.h ** See Copyright Notice in lua.h
*/ */
@ -85,7 +85,7 @@ static Node *hashnum (const Table *t, lua_Number n) {
lua_assert(sizeof(a) <= sizeof(n)); lua_assert(sizeof(a) <= sizeof(n));
memcpy(a, &n, sizeof(a)); memcpy(a, &n, sizeof(a));
for (i = 1; i < numints; i++) a[0] += a[i]; for (i = 1; i < numints; i++) a[0] += a[i];
return hashmod(t, cast(lu_hash, a[0])); return hashmod(t, a[0]);
} }