diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1996-02-22 17:34:33 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1996-02-22 17:34:33 -0300 |
commit | 8c1a9899d4460aa19780919f4245c08d7ebba0e9 (patch) | |
tree | 685817907f64133330011eb7db845830c9327a3e | |
parent | 05caf09a36cadaab401bc9a24e29e2cd6e4126d4 (diff) | |
download | lua-8c1a9899d4460aa19780919f4245c08d7ebba0e9.tar.gz lua-8c1a9899d4460aa19780919f4245c08d7ebba0e9.tar.bz2 lua-8c1a9899d4460aa19780919f4245c08d7ebba0e9.zip |
functions "luaI_free" and "luaI_realloc" (or macro "growvector") may be
called with NULL.
-rw-r--r-- | fallback.c | 14 | ||||
-rw-r--r-- | func.c | 17 | ||||
-rw-r--r-- | luamem.c | 19 | ||||
-rw-r--r-- | luamem.h | 4 | ||||
-rw-r--r-- | opcode.c | 8 | ||||
-rw-r--r-- | tree.c | 28 |
6 files changed, 33 insertions, 57 deletions
@@ -3,7 +3,7 @@ | |||
3 | ** TecCGraf - PUC-Rio | 3 | ** TecCGraf - PUC-Rio |
4 | */ | 4 | */ |
5 | 5 | ||
6 | char *rcs_fallback="$Id: fallback.c,v 1.18 1996/01/30 15:25:23 roberto Exp roberto $"; | 6 | char *rcs_fallback="$Id: fallback.c,v 1.19 1996/02/08 19:08:34 roberto Exp roberto $"; |
7 | 7 | ||
8 | #include <stdio.h> | 8 | #include <stdio.h> |
9 | #include <string.h> | 9 | #include <string.h> |
@@ -132,16 +132,8 @@ int luaI_lock (Object *object) | |||
132 | } | 132 | } |
133 | /* no more empty spaces */ | 133 | /* no more empty spaces */ |
134 | oldSize = lockSize; | 134 | oldSize = lockSize; |
135 | if (lockArray == NULL) | 135 | lockSize = (lockSize == 0) ? 10 : 3*lockSize/2 + 5; |
136 | { | 136 | lockArray = growvector(lockArray, lockSize, Object); |
137 | lockSize = 10; | ||
138 | lockArray = newvector(lockSize, Object); | ||
139 | } | ||
140 | else | ||
141 | { | ||
142 | lockSize = 3*oldSize/2 + 5; | ||
143 | lockArray = growvector(lockArray, lockSize, Object); | ||
144 | } | ||
145 | for (i=oldSize; i<lockSize; i++) | 137 | for (i=oldSize; i<lockSize; i++) |
146 | tag(&lockArray[i]) = LUA_T_NIL; | 138 | tag(&lockArray[i]) = LUA_T_NIL; |
147 | lockArray[oldSize] = *object; | 139 | lockArray[oldSize] = *object; |
@@ -42,8 +42,7 @@ void luaI_insertfunction (TFunc *f) | |||
42 | static void freefunc (TFunc *f) | 42 | static void freefunc (TFunc *f) |
43 | { | 43 | { |
44 | luaI_free (f->code); | 44 | luaI_free (f->code); |
45 | if (f->locvars) | 45 | luaI_free (f->locvars); |
46 | luaI_free (f->locvars); | ||
47 | luaI_free (f); | 46 | luaI_free (f); |
48 | } | 47 | } |
49 | 48 | ||
@@ -100,16 +99,10 @@ void lua_funcinfo (lua_Object func, char **filename, int *linedefined) | |||
100 | void luaI_registerlocalvar (TaggedString *varname, int line) | 99 | void luaI_registerlocalvar (TaggedString *varname, int line) |
101 | { | 100 | { |
102 | if (numcurrvars >= maxcurrvars) | 101 | if (numcurrvars >= maxcurrvars) |
103 | if (currvars == NULL) | 102 | { |
104 | { | 103 | maxcurrvars = (maxcurrvars == 0) ? LOCALVARINITSIZE : maxcurrvars*2; |
105 | maxcurrvars = LOCALVARINITSIZE; | 104 | currvars = growvector(currvars, maxcurrvars, LocVar); |
106 | currvars = newvector (maxcurrvars, LocVar); | 105 | } |
107 | } | ||
108 | else | ||
109 | { | ||
110 | maxcurrvars *= 2; | ||
111 | currvars = growvector (currvars, maxcurrvars, LocVar); | ||
112 | } | ||
113 | currvars[numcurrvars].varname = varname; | 106 | currvars[numcurrvars].varname = varname; |
114 | currvars[numcurrvars].line = line; | 107 | currvars[numcurrvars].line = line; |
115 | numcurrvars++; | 108 | numcurrvars++; |
@@ -3,7 +3,7 @@ | |||
3 | ** TecCGraf - PUC-Rio | 3 | ** TecCGraf - PUC-Rio |
4 | */ | 4 | */ |
5 | 5 | ||
6 | char *rcs_mem = "$Id: mem.c,v 1.6 1996/01/22 14:15:13 roberto Exp roberto $"; | 6 | char *rcs_mem = "$Id: mem.c,v 1.7 1996/02/04 16:59:12 roberto Exp roberto $"; |
7 | 7 | ||
8 | #include <stdlib.h> | 8 | #include <stdlib.h> |
9 | #include <string.h> | 9 | #include <string.h> |
@@ -27,8 +27,11 @@ static void mem_error (void) | |||
27 | 27 | ||
28 | void luaI_free (void *block) | 28 | void luaI_free (void *block) |
29 | { | 29 | { |
30 | *((int *)block) = -1; /* to catch errors */ | 30 | if (block) |
31 | free(block); | 31 | { |
32 | *((int *)block) = -1; /* to catch errors */ | ||
33 | free(block); | ||
34 | } | ||
32 | } | 35 | } |
33 | 36 | ||
34 | 37 | ||
@@ -43,16 +46,10 @@ void *luaI_malloc (unsigned long size) | |||
43 | 46 | ||
44 | void *luaI_realloc (void *oldblock, unsigned long size) | 47 | void *luaI_realloc (void *oldblock, unsigned long size) |
45 | { | 48 | { |
46 | void *block = realloc(oldblock, (size_t)size); | 49 | void *block = oldblock ? realloc(oldblock, (size_t)size) : |
50 | malloc((size_t)size); | ||
47 | if (block == NULL) | 51 | if (block == NULL) |
48 | mem_error(); | 52 | mem_error(); |
49 | return block; | 53 | return block; |
50 | } | 54 | } |
51 | 55 | ||
52 | |||
53 | char *luaI_strdup (char *str) | ||
54 | { | ||
55 | char *newstr = luaI_malloc(strlen(str)+1); | ||
56 | strcpy(newstr, str); | ||
57 | return newstr; | ||
58 | } | ||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | ** mem.c | 2 | ** mem.c |
3 | ** memory manager for lua | 3 | ** memory manager for lua |
4 | ** $Id: mem.h,v 1.1 1994/11/16 17:38:08 roberto Stab roberto $ | 4 | ** $Id: mem.h,v 1.2 1995/01/13 22:11:12 roberto Exp roberto $ |
5 | */ | 5 | */ |
6 | 6 | ||
7 | #ifndef mem_h | 7 | #ifndef mem_h |
@@ -15,8 +15,6 @@ void luaI_free (void *block); | |||
15 | void *luaI_malloc (unsigned long size); | 15 | void *luaI_malloc (unsigned long size); |
16 | void *luaI_realloc (void *oldblock, unsigned long size); | 16 | void *luaI_realloc (void *oldblock, unsigned long size); |
17 | 17 | ||
18 | char *luaI_strdup (char *str); | ||
19 | |||
20 | #define new(s) ((s *)luaI_malloc(sizeof(s))) | 18 | #define new(s) ((s *)luaI_malloc(sizeof(s))) |
21 | #define newvector(n,s) ((s *)luaI_malloc((n)*sizeof(s))) | 19 | #define newvector(n,s) ((s *)luaI_malloc((n)*sizeof(s))) |
22 | #define growvector(old,n,s) ((s *)luaI_realloc(old,(n)*sizeof(s))) | 20 | #define growvector(old,n,s) ((s *)luaI_realloc(old,(n)*sizeof(s))) |
@@ -3,7 +3,7 @@ | |||
3 | ** TecCGraf - PUC-Rio | 3 | ** TecCGraf - PUC-Rio |
4 | */ | 4 | */ |
5 | 5 | ||
6 | char *rcs_opcode="$Id: opcode.c,v 3.56 1996/02/08 17:03:20 roberto Exp roberto $"; | 6 | char *rcs_opcode="$Id: opcode.c,v 3.57 1996/02/12 18:32:40 roberto Exp roberto $"; |
7 | 7 | ||
8 | #include <setjmp.h> | 8 | #include <setjmp.h> |
9 | #include <stdlib.h> | 9 | #include <stdlib.h> |
@@ -135,8 +135,7 @@ static char *lua_strconc (char *l, char *r) | |||
135 | if (n > buffer_size) | 135 | if (n > buffer_size) |
136 | { | 136 | { |
137 | buffer_size = n; | 137 | buffer_size = n; |
138 | if (buffer != NULL) | 138 | luaI_free(buffer); |
139 | luaI_free(buffer); | ||
140 | buffer = newvector(buffer_size, char); | 139 | buffer = newvector(buffer_size, char); |
141 | } | 140 | } |
142 | strcpy(buffer,l); | 141 | strcpy(buffer,l); |
@@ -525,8 +524,7 @@ static int do_protectedmain (void) | |||
525 | adjustC(0); /* erase extra slot */ | 524 | adjustC(0); /* erase extra slot */ |
526 | } | 525 | } |
527 | errorJmp = oldErr; | 526 | errorJmp = oldErr; |
528 | if (tf.code) | 527 | luaI_free(tf.code); |
529 | luaI_free(tf.code); | ||
530 | return status; | 528 | return status; |
531 | } | 529 | } |
532 | 530 | ||
@@ -3,7 +3,7 @@ | |||
3 | ** TecCGraf - PUC-Rio | 3 | ** TecCGraf - PUC-Rio |
4 | */ | 4 | */ |
5 | 5 | ||
6 | char *rcs_tree="$Id: tree.c,v 1.17 1996/02/14 13:35:51 roberto Exp roberto $"; | 6 | char *rcs_tree="$Id: tree.c,v 1.18 1996/02/14 19:11:09 roberto Exp roberto $"; |
7 | 7 | ||
8 | 8 | ||
9 | #include <string.h> | 9 | #include <string.h> |
@@ -55,20 +55,18 @@ static void grow (stringtable *tb) | |||
55 | int i; | 55 | int i; |
56 | for (i=0; i<newsize; i++) | 56 | for (i=0; i<newsize; i++) |
57 | newhash[i] = NULL; | 57 | newhash[i] = NULL; |
58 | if (tb->size > 0) | 58 | /* rehash */ |
59 | { /* rehash */ | 59 | tb->nuse = 0; |
60 | tb->nuse = 0; | 60 | for (i=0; i<tb->size; i++) |
61 | for (i=0; i<tb->size; i++) | 61 | if (tb->hash[i] != NULL && tb->hash[i] != &EMPTY) |
62 | if (tb->hash[i] != NULL && tb->hash[i] != &EMPTY) | 62 | { |
63 | { | 63 | int h = tb->hash[i]->hash%newsize; |
64 | int h = tb->hash[i]->hash%newsize; | 64 | while (newhash[h]) |
65 | while (newhash[h]) | 65 | h = (h+1)%newsize; |
66 | h = (h+1)%newsize; | 66 | newhash[h] = tb->hash[i]; |
67 | newhash[h] = tb->hash[i]; | 67 | tb->nuse++; |
68 | tb->nuse++; | 68 | } |
69 | } | 69 | luaI_free(tb->hash); |
70 | luaI_free(tb->hash); | ||
71 | } | ||
72 | tb->size = newsize; | 70 | tb->size = newsize; |
73 | tb->hash = newhash; | 71 | tb->hash = newhash; |
74 | } | 72 | } |