From 8cb8594a3bcfdc1447aebfcd0ac85db9af5ca490 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Tue, 20 Dec 1994 19:20:36 -0200 Subject: [PATCH] better control of integer types and their limits --- fallback.c | 10 ++++----- hash.c | 62 ++++++++++++++++++++++++++++-------------------------- hash.h | 12 +++++------ inout.c | 22 +++++++++---------- inout.h | 11 +++++----- lex.c | 4 ++-- lua.stx | 20 +++++++++++------- luamem.c | 6 +++--- opcode.c | 49 +++++++++++++++++++++--------------------- opcode.h | 45 ++++++++++++++++++--------------------- table.c | 31 ++++++++++++++------------- table.h | 8 +++---- tree.c | 6 +++--- tree.h | 5 +++-- 14 files changed, 148 insertions(+), 143 deletions(-) diff --git a/fallback.c b/fallback.c index 0076da24..e11b1afb 100644 --- a/fallback.c +++ b/fallback.c @@ -3,7 +3,7 @@ ** TecCGraf - PUC-Rio */ -char *rcs_fallback="$Id: fallback.c,v 1.8 1994/11/21 13:30:15 roberto Exp roberto $"; +char *rcs_fallback="$Id: fallback.c,v 1.9 1994/11/21 18:22:58 roberto Stab roberto $"; #include @@ -116,12 +116,12 @@ static void funcFB (void) */ static Object *lockArray = NULL; -static int lockSize = 0; +static Word lockSize = 0; int luaI_lock (Object *object) { - int i; - int oldSize; + Word i; + Word oldSize; if (tag(object) == LUA_T_NIL) return -1; for (i=0; i nhash) return dimensions[i]; } - return nhash*2+1; + lua_error("table overflow"); + return 0; /* to avoid warnings */ } -static int hashindex (Hash *t, Object *ref) /* hash function */ +static Word hashindex (Hash *t, Object *ref) /* hash function */ { switch (tag(ref)) { @@ -53,7 +55,7 @@ static int hashindex (Hash *t, Object *ref) /* hash function */ lua_reportbug ("unexpected type to index table"); return -1; /* UNREACHEABLE */ case LUA_T_NUMBER: - return (((int)nvalue(ref))%nhash(t)); + return (((Word)nvalue(ref))%nhash(t)); case LUA_T_STRING: { unsigned long h = tsvalue(ref)->hash; @@ -64,20 +66,20 @@ static int hashindex (Hash *t, Object *ref) /* hash function */ h = ((h<<5)-h)^(unsigned char)*(name++); tsvalue(ref)->hash = h; } - return h%nhash(t); /* make it a valid index */ + return (Word)h%nhash(t); /* make it a valid index */ } case LUA_T_FUNCTION: - return (((int)bvalue(ref))%nhash(t)); + return (((IntPoint)bvalue(ref))%nhash(t)); case LUA_T_CFUNCTION: - return (((int)fvalue(ref))%nhash(t)); + return (((IntPoint)fvalue(ref))%nhash(t)); case LUA_T_ARRAY: - return (((int)avalue(ref))%nhash(t)); + return (((IntPoint)avalue(ref))%nhash(t)); default: /* user data */ - return (((int)uvalue(ref))%nhash(t)); + return (((IntPoint)uvalue(ref))%nhash(t)); } } -int lua_equalObj (Object *t1, Object *t2) +Bool lua_equalObj (Object *t1, Object *t2) { if (tag(t1) != tag(t2)) return 0; switch (tag(t1)) @@ -92,9 +94,9 @@ int lua_equalObj (Object *t1, Object *t2) } } -static int present (Hash *t, Object *ref) +static Word present (Hash *t, Object *ref) { - int h = hashindex(t, ref); + Word h = hashindex(t, ref); while (tag(ref(node(t, h))) != LUA_T_NIL) { if (lua_equalObj(ref, ref(node(t, h)))) @@ -108,9 +110,9 @@ static int present (Hash *t, Object *ref) /* ** Alloc a vector node */ -static Node *hashnodecreate (int nhash) +static Node *hashnodecreate (Word nhash) { - int i; + Word i; Node *v = newvector (nhash, Node); for (i=0; i= nhash(t)) { @@ -326,7 +328,7 @@ void lua_next (void) } else { - int h = present (t, luaI_Address(r)); + Word h = present (t, luaI_Address(r)); hashnext(t, h+1); } } diff --git a/hash.h b/hash.h index cfb0ee5c..f51edd00 100644 --- a/hash.h +++ b/hash.h @@ -2,7 +2,7 @@ ** hash.h ** hash manager for lua ** Luiz Henrique de Figueiredo - 17 Aug 90 -** $Id: hash.h,v 2.5 1994/11/14 18:41:15 roberto Exp roberto $ +** $Id: hash.h,v 2.6 1994/11/17 13:58:57 roberto Stab roberto $ */ #ifndef hash_h @@ -18,16 +18,16 @@ typedef struct Hash { struct Hash *next; char mark; - unsigned int nhash; - unsigned int nuse; + Word nhash; + Word nuse; Node *node; } Hash; -int lua_equalObj (Object *t1, Object *t2); -Hash *lua_createarray (int nhash); +Bool lua_equalObj (Object *t1, Object *t2); +Hash *lua_createarray (Word nhash); void lua_hashmark (Hash *h); -int lua_hashcollector (void); +Word lua_hashcollector (void); Object *lua_hashget (Hash *t, Object *ref); Object *lua_hashdefine (Hash *t, Object *ref); void lua_next (void); diff --git a/inout.c b/inout.c index e782045d..b2a50449 100644 --- a/inout.c +++ b/inout.c @@ -5,7 +5,7 @@ ** Also provides some predefined lua functions. */ -char *rcs_inout="$Id: inout.c,v 2.14 1994/12/13 15:54:21 roberto Exp roberto $"; +char *rcs_inout="$Id: inout.c,v 2.15 1994/12/16 15:55:04 roberto Exp roberto $"; #include #include @@ -20,9 +20,9 @@ char *rcs_inout="$Id: inout.c,v 2.14 1994/12/13 15:54:21 roberto Exp roberto $"; #include "lua.h" /* Exported variables */ -int lua_linenumber; -int lua_debug; -int lua_debugline = 0; +Word lua_linenumber; +Bool lua_debug; +Word lua_debugline = 0; /* Internal variables */ @@ -34,12 +34,12 @@ int lua_debugline = 0; typedef struct FuncStackNode { struct FuncStackNode *next; char *file; - int function; - int line; + Word function; + Word line; } FuncStackNode; static FuncStackNode *funcStack = NULL; -static int nfuncstack=0; +static Word nfuncstack=0; static FILE *fp; static char *st; @@ -119,7 +119,7 @@ void lua_closestring (void) ** Called to execute SETFUNCTION opcode, this function pushs a function into ** function stack. */ -void lua_pushfunction (char *file, int function) +void lua_pushfunction (char *file, Word function) { FuncStackNode *newNode; if (nfuncstack++ >= MAXFUNCSTACK) @@ -165,8 +165,8 @@ void lua_reportbug (char *s) do { sprintf (strchr(msg,0), - "\t-> function \"%s\" at file \"%s\":%d\n", - lua_constant[func->function]->str, func->file, line); + "\t-> function \"%s\" at file \"%s\":%u\n", + lua_constant[func->function]->str, func->file, line); line = func->line; func = func->next; lua_popfunction(); @@ -175,7 +175,7 @@ void lua_reportbug (char *s) else { sprintf (strchr(msg,0), - "\n\tin statement begining at line %d of file \"%s\"", + "\n\tin statement begining at line %u of file \"%s\"", lua_debugline, lua_filename()); } } diff --git a/inout.h b/inout.h index 57aa7b3e..059ac0e8 100644 --- a/inout.h +++ b/inout.h @@ -1,21 +1,22 @@ /* -** $Id: inout.h,v 1.5 1994/11/08 20:06:15 roberto Exp roberto $ +** $Id: inout.h,v 1.6 1994/11/21 21:41:09 roberto Stab roberto $ */ #ifndef inout_h #define inout_h +#include "types.h" -extern int lua_linenumber; -extern int lua_debug; -extern int lua_debugline; +extern Word lua_linenumber; +extern Bool lua_debug; +extern Word lua_debugline; char *lua_openfile (char *fn); void lua_closefile (void); char *lua_openstring (char *s); void lua_closestring (void); -void lua_pushfunction (char *file, int function); +void lua_pushfunction (char *file, Word function); void lua_popfunction (void); void lua_reportbug (char *s); diff --git a/lex.c b/lex.c index 098edca0..9dd5e752 100644 --- a/lex.c +++ b/lex.c @@ -1,4 +1,4 @@ -char *rcs_lex = "$Id: lex.c,v 2.11 1994/11/14 21:40:14 roberto Exp $"; +char *rcs_lex = "$Id: lex.c,v 2.12 1994/11/22 16:13:45 roberto Stab $"; #include @@ -195,7 +195,7 @@ int yylex (void) case 'Z': case '_': { - int res; + Word res; do { save_and_next(); } while (isalnum(current) || current == '_'); *yytextLast = 0; res = findReserved(yytext); diff --git a/lua.stx b/lua.stx index 2dd21a3c..5ab2d2cc 100644 --- a/lua.stx +++ b/lua.stx @@ -1,6 +1,6 @@ %{ -char *rcs_luastx = "$Id: lua.stx,v 3.12 1994/11/25 19:24:57 roberto Exp $"; +char *rcs_luastx = "$Id: lua.stx,v 3.13 1994/12/06 14:27:18 roberto Exp roberto $"; #include #include @@ -29,17 +29,17 @@ int yyparse (void); #ifndef CODE_BLOCK #define CODE_BLOCK 256 #endif -static Long maxcode; -static Long maxmain; -static Long maxcurr ; +static Word maxcode; +static Word maxmain; +static Long maxcurr; /* to allow maxcurr *= 2 without overflow */ static Byte *funcCode = NULL; static Byte **initcode; static Byte *basepc; -static Long maincode; -static Long pc; +static Word maincode; +static Word pc; #define MAXVAR 32 -static long varbuffer[MAXVAR]; /* variables in an assignment list; +static Long varbuffer[MAXVAR]; /* variables in an assignment list; it's long to store negative Word values */ static int nvarbuffer=0; /* number of variables at a list */ @@ -57,7 +57,11 @@ static void code_byte (Byte c) { if (pc>maxcurr-2) /* 1 byte free to code HALT of main code */ { + if (maxcurr >= MAX_WORD) + lua_error("code size overflow"); maxcurr *= 2; + if (maxcurr >= MAX_WORD) + maxcurr = MAX_WORD; basepc = growvector(basepc, maxcurr, Byte); } basepc[pc++] = c; @@ -567,7 +571,7 @@ static int lua_localname (Word n) ** indexed by (number -1). If negative, push local indexed by ABS(number)-1. ** Otherwise, if zero, push indexed variable (record). */ -static void lua_pushvar (long number) +static void lua_pushvar (Long number) { if (number > 0) /* global var */ { diff --git a/luamem.c b/luamem.c index b28bd3b9..8c3582c5 100644 --- a/luamem.c +++ b/luamem.c @@ -3,7 +3,7 @@ ** TecCGraf - PUC-Rio */ -char *rcs_mem = "$Id: mem.c,v 1.1 1994/11/16 17:38:08 roberto Exp $"; +char *rcs_mem = "$Id: mem.c,v 1.2 1994/11/16 18:09:11 roberto Stab $"; #include @@ -19,7 +19,7 @@ void luaI_free (void *block) void *luaI_malloc (unsigned long size) { - void *block = malloc(size); + void *block = malloc((size_t)size); if (block == NULL) lua_error("not enough memory"); return block; @@ -28,7 +28,7 @@ void *luaI_malloc (unsigned long size) void *luaI_realloc (void *oldblock, unsigned long size) { - void *block = realloc(oldblock, size); + void *block = realloc(oldblock, (size_t)size); if (block == NULL) lua_error("not enough memory"); return block; diff --git a/opcode.c b/opcode.c index c31e9f99..580ecc33 100644 --- a/opcode.c +++ b/opcode.c @@ -3,7 +3,7 @@ ** TecCGraf - PUC-Rio */ -char *rcs_opcode="$Id: opcode.c,v 3.26 1994/12/16 15:56:45 roberto Exp roberto $"; +char *rcs_opcode="$Id: opcode.c,v 3.27 1994/12/16 16:08:34 roberto Exp roberto $"; #include #include @@ -24,6 +24,8 @@ char *rcs_opcode="$Id: opcode.c,v 3.26 1994/12/16 15:56:45 roberto Exp roberto $ #define STACK_BUFFER (STACKGAP+128) +typedef unsigned int StkId; /* index to stack elements */ + static Long maxstack = 0L; static Object *stack = NULL; static Object *top = NULL; @@ -35,16 +37,16 @@ static Object *top = NULL; #define Ref(st) ((st)-stack+1) -static int CBase = 0; /* when Lua calls C or C calls Lua, points to the */ - /* first slot after the last parameter. */ +static StkId CBase = 0; /* when Lua calls C or C calls Lua, points to */ + /* the first slot after the last parameter. */ static int CnResults = 0; /* when Lua calls C, has the number of parameters; */ /* when C calls Lua, has the number of results. */ static jmp_buf *errorJmp = NULL; /* current error recover point */ -static int lua_execute (Byte *pc, int base); -static void do_call (Object *func, int base, int nResults, int whereRes); +static StkId lua_execute (Byte *pc, StkId base); +static void do_call (Object *func, StkId base, int nResults, StkId whereRes); @@ -94,11 +96,11 @@ static void lua_initstack (void) /* ** Check stack overflow and, if necessary, realloc vector */ -static void lua_checkstack (Word n) +static void lua_checkstack (StkId n) { if ((Long)n > maxstack) { - int t; + StkId t; if (stack == NULL) lua_initstack(); t = top-stack; @@ -176,7 +178,7 @@ static int lua_tostring (Object *obj) /* ** Adjust stack. Set top to the given value, pushing NILs if needed. */ -static void adjust_top (int newtop) +static void adjust_top (StkId newtop) { Object *nt = stack+newtop; while (top < nt) tag(top++) = LUA_T_NIL; @@ -195,11 +197,11 @@ static void adjustC (int nParams) ** and CnResults is the number of parameters. Returns an index ** to the first result from C. */ -static int callC (lua_CFunction func, int base) +static StkId callC (lua_CFunction func, StkId base) { - int oldBase = CBase; + StkId oldBase = CBase; int oldCnResults = CnResults; - int firstResult; + StkId firstResult; CnResults = (top-stack) - base; /* incorporate parameters on the stack */ CBase = base+CnResults; @@ -213,9 +215,9 @@ static int callC (lua_CFunction func, int base) /* ** Call the fallback for invalid functions (see do_call) */ -static void call_funcFB (Object *func, int base, int nResults, int whereRes) +static void call_funcFB (Object *func, StkId base, int nResults, StkId whereRes) { - int i; + StkId i; /* open space for first parameter (func) */ for (i=top-stack; i>base; i--) stack[i] = stack[i-1]; @@ -231,9 +233,9 @@ static void call_funcFB (Object *func, int base, int nResults, int whereRes) ** between [stack+whereRes,top). The number of results is nResults, unless ** nResults=MULT_RET. */ -static void do_call (Object *func, int base, int nResults, int whereRes) +static void do_call (Object *func, StkId base, int nResults, StkId whereRes) { - int firstResult; + StkId firstResult; if (tag(func) == LUA_T_CFUNCTION) firstResult = callC(fvalue(func), base); else if (tag(func) == LUA_T_FUNCTION) @@ -315,7 +317,7 @@ static int do_protectedrun (Object *function, int nResults) { jmp_buf myErrorJmp; int status; - int oldCBase = CBase; + StkId oldCBase = CBase; jmp_buf *oldErr = errorJmp; errorJmp = &myErrorJmp; if (setjmp(myErrorJmp) == 0) @@ -340,7 +342,7 @@ static int do_protectedmain (void) { Byte *code = NULL; int status; - int oldCBase = CBase; + StkId oldCBase = CBase; jmp_buf myErrorJmp; jmp_buf *oldErr = errorJmp; errorJmp = &myErrorJmp; @@ -377,7 +379,7 @@ int lua_callfunction (lua_Object function) int lua_call (char *funcname) { - int n = luaI_findsymbolbyname(funcname); + Word n = luaI_findsymbolbyname(funcname); return do_protectedrun(&s_object(n), MULT_RET); } @@ -455,7 +457,7 @@ lua_Object lua_getsubscript (void) #define MAX_C_BLOCKS 10 static int numCblocks = 0; -static int Cblocks[MAX_C_BLOCKS]; +static StkId Cblocks[MAX_C_BLOCKS]; /* ** API: starts a new block @@ -580,7 +582,7 @@ int lua_lock (void) */ lua_Object lua_getglobal (char *name) { - int n = luaI_findsymbolbyname(name); + Word n = luaI_findsymbolbyname(name); adjustC(0); *top = s_object(n); top++; @@ -594,8 +596,7 @@ lua_Object lua_getglobal (char *name) */ int lua_storeglobal (char *name) { - int n = luaI_findsymbolbyname(name); - if (n < 0) return 1; + Word n = luaI_findsymbolbyname(name); adjustC(1); s_object(n) = *(--top); return 0; @@ -736,7 +737,7 @@ static void comparison (lua_Type tag_less, lua_Type tag_equal, ** [stack+base,top). Returns n such that the the results are between ** [stack+n,top). */ -static int lua_execute (Byte *pc, int base) +static StkId lua_execute (Byte *pc, StkId base) { lua_checkstack(STACKGAP+MAX_TEMPS+base); while (1) @@ -1080,7 +1081,7 @@ static int lua_execute (Byte *pc, int base) int nParams = *(pc++); int nResults = *(pc++); Object *func = top-1-nParams; /* function is below parameters */ - int newBase = (top-stack)-nParams; + StkId newBase = (top-stack)-nParams; do_call(func, newBase, nResults, newBase-1); } break; diff --git a/opcode.h b/opcode.h index f375c7d7..599ece26 100644 --- a/opcode.h +++ b/opcode.h @@ -1,12 +1,13 @@ /* ** TeCGraf - PUC-Rio -** $Id: opcode.h,v 3.8 1994/11/10 17:36:54 roberto Exp roberto $ +** $Id: opcode.h,v 3.9 1994/11/23 14:31:11 roberto Stab $ */ #ifndef opcode_h #define opcode_h #include "lua.h" +#include "types.h" #include "tree.h" #ifndef STACKGAP @@ -21,29 +22,6 @@ #define MAX_TEMPS 20 -typedef unsigned char Byte; - -typedef unsigned short Word; - -typedef signed long Long; - -typedef union -{ - struct {char c1; char c2;} m; - Word w; -} CodeWord; - -typedef union -{ - struct {char c1; char c2; char c3; char c4;} m; - float f; -} CodeFloat; - -typedef union -{ - struct {char c1; char c2; char c3; char c4;} m; - Byte *b; -} CodeCode; typedef enum { @@ -147,12 +125,29 @@ typedef struct #define s_fvalue(i) (fvalue(&s_object(i))) #define s_uvalue(i) (uvalue(&s_object(i))) +typedef union +{ + struct {char c1; char c2;} m; + Word w; +} CodeWord; #define get_word(code,pc) {code.m.c1 = *pc++; code.m.c2 = *pc++;} + +typedef union +{ + struct {char c1; char c2; char c3; char c4;} m; + float f; +} CodeFloat; #define get_float(code,pc) {code.m.c1 = *pc++; code.m.c2 = *pc++;\ code.m.c3 = *pc++; code.m.c4 = *pc++;} + +typedef union +{ + struct {char c1; char c2; char c3; char c4;} m; + Byte *b; +} CodeCode; #define get_code(code,pc) {code.m.c1 = *pc++; code.m.c2 = *pc++;\ code.m.c3 = *pc++; code.m.c4 = *pc++;} - + /* Exported functions */ char *lua_strdup (char *l); diff --git a/table.c b/table.c index faea133f..f17f1ca4 100644 --- a/table.c +++ b/table.c @@ -3,7 +3,7 @@ ** Module to control static tables */ -char *rcs_table="$Id: table.c,v 2.23 1994/11/23 14:31:11 roberto Stab roberto $"; +char *rcs_table="$Id: table.c,v 2.24 1994/12/16 15:55:04 roberto Exp roberto $"; #include @@ -17,8 +17,6 @@ char *rcs_table="$Id: table.c,v 2.23 1994/11/23 14:31:11 roberto Stab roberto $" #include "fallback.h" -#define MAX_WORD 0xFFFD - #define BUFFER_BLOCK 256 Symbol *lua_table; @@ -47,7 +45,7 @@ static void getglobal (void); */ static void lua_initsymbol (void) { - int n; + Word n; lua_maxsymbol = BUFFER_BLOCK; lua_table = newvector(lua_maxsymbol, Symbol); n = luaI_findsymbolbyname("next"); @@ -88,9 +86,8 @@ void lua_initconstant (void) /* ** Given a name, search it at symbol table and return its index. If not ** found, allocate it. -** On error, return -1. */ -int luaI_findsymbol (TreeNode *t) +Word luaI_findsymbol (TreeNode *t) { if (lua_table == NULL) lua_initsymbol(); @@ -98,9 +95,11 @@ int luaI_findsymbol (TreeNode *t) { if (lua_ntable == lua_maxsymbol) { - lua_maxsymbol *= 2; - if (lua_maxsymbol > MAX_WORD) + if (lua_maxsymbol >= MAX_WORD) lua_error("symbol table overflow"); + lua_maxsymbol *= 2; + if (lua_maxsymbol >= MAX_WORD) + lua_maxsymbol = MAX_WORD; lua_table = growvector(lua_table, lua_maxsymbol, Symbol); } t->varindex = lua_ntable; @@ -111,7 +110,7 @@ int luaI_findsymbol (TreeNode *t) } -int luaI_findsymbolbyname (char *name) +Word luaI_findsymbolbyname (char *name) { return luaI_findsymbol(lua_constcreate(name)); } @@ -122,7 +121,7 @@ int luaI_findsymbolbyname (char *name) ** found, allocate it. ** On error, return -1. */ -int luaI_findconstant (TreeNode *t) +Word luaI_findconstant (TreeNode *t) { if (lua_constant == NULL) lua_initconstant(); @@ -130,9 +129,11 @@ int luaI_findconstant (TreeNode *t) { if (lua_nconstant == lua_maxconstant) { - lua_maxconstant *= 2; - if (lua_maxconstant > MAX_WORD) + if (lua_maxconstant >= MAX_WORD) lua_error("constant table overflow"); + lua_maxconstant *= 2; + if (lua_maxconstant >= MAX_WORD) + lua_maxconstant = MAX_WORD; lua_constant = growvector(lua_constant, lua_maxconstant, TaggedString *); } t->constindex = lua_nconstant; @@ -172,9 +173,9 @@ void lua_markobject (Object *o) */ void lua_pack (void) { - static int block = GARBAGE_BLOCK; /* when garbage collector will be called */ - static int nentity = 0; /* counter of new entities (strings and arrays) */ - int recovered = 0; + static Word block = GARBAGE_BLOCK; /* when garbage collector will be called */ + static Word nentity = 0; /* counter of new entities (strings and arrays) */ + Word recovered = 0; if (nentity++ < block) return; lua_travstack(lua_markobject); /* mark stack objects */ lua_travsymbol(lua_markobject); /* mark symbol table objects */ diff --git a/table.h b/table.h index d65751f8..f80f981e 100644 --- a/table.h +++ b/table.h @@ -1,7 +1,7 @@ /* ** Module to control static tables ** TeCGraf - PUC-Rio -** $Id: table.h,v 2.8 1994/11/18 19:27:38 roberto Exp roberto $ +** $Id: table.h,v 2.9 1994/11/23 14:31:11 roberto Stab roberto $ */ #ifndef table_h @@ -18,9 +18,9 @@ extern int lua_nfile; void lua_initconstant (void); -int luaI_findsymbolbyname (char *name); -int luaI_findsymbol (TreeNode *t); -int luaI_findconstant (TreeNode *t); +Word luaI_findsymbolbyname (char *name); +Word luaI_findsymbol (TreeNode *t); +Word luaI_findconstant (TreeNode *t); void lua_travsymbol (void (*fn)(Object *)); void lua_markobject (Object *o); void lua_pack (void); diff --git a/tree.c b/tree.c index 9a9daf19..ac0f096d 100644 --- a/tree.c +++ b/tree.c @@ -3,7 +3,7 @@ ** TecCGraf - PUC-Rio */ -char *rcs_tree="$Id: tree.c,v 1.10 1994/11/23 14:31:11 roberto Stab roberto $"; +char *rcs_tree="$Id: tree.c,v 1.11 1994/11/25 19:27:03 roberto Exp roberto $"; #include @@ -78,10 +78,10 @@ TreeNode *lua_constcreate (char *str) ** Garbage collection function. ** This function traverse the string list freeing unindexed strings */ -int lua_strcollector (void) +Word lua_strcollector (void) { StringNode *curr = string_root, *prev = NULL; - int counter = 0; + Word counter = 0; while (curr) { StringNode *next = curr->next; diff --git a/tree.h b/tree.h index 149819e9..6a42dfa4 100644 --- a/tree.h +++ b/tree.h @@ -1,12 +1,13 @@ /* ** tree.h ** TecCGraf - PUC-Rio -** $Id: tree.h,v 1.6 1994/11/23 14:31:11 roberto Stab roberto $ +** $Id: tree.h,v 1.7 1994/11/25 19:27:03 roberto Exp roberto $ */ #ifndef tree_h #define tree_h +#include "types.h" #define NOT_USED 0xFFFE @@ -30,7 +31,7 @@ typedef struct TreeNode TaggedString *lua_createstring (char *str); TreeNode *lua_constcreate (char *str); -int lua_strcollector (void); +Word lua_strcollector (void); TreeNode *lua_varnext (char *n); #endif