aboutsummaryrefslogtreecommitdiff
path: root/luamem.c
diff options
context:
space:
mode:
Diffstat (limited to 'luamem.c')
-rw-r--r--luamem.c29
1 files changed, 5 insertions, 24 deletions
diff --git a/luamem.c b/luamem.c
index 164cbca2..169255de 100644
--- a/luamem.c
+++ b/luamem.c
@@ -3,7 +3,7 @@
3** TecCGraf - PUC-Rio 3** TecCGraf - PUC-Rio
4*/ 4*/
5 5
6char *rcs_mem = "$Id: mem.c,v 1.9 1996/03/14 15:55:49 roberto Exp roberto $"; 6char *rcs_mem = "$Id: mem.c,v 1.10 1996/03/21 16:31:32 roberto Exp roberto $";
7 7
8#include <stdlib.h> 8#include <stdlib.h>
9#include <string.h> 9#include <string.h>
@@ -14,27 +14,8 @@ char *rcs_mem = "$Id: mem.c,v 1.9 1996/03/14 15:55:49 roberto Exp roberto $";
14#include "table.h" 14#include "table.h"
15 15
16 16
17char *luaI_memerrormsg[NUMERRMSG] = { 17#define mem_error() lua_error(memEM)
18 "code size overflow", 18
19 "symbol table overflow",
20 "constant table overflow",
21 "stack size overflow",
22 "lex buffer overflow",
23 "lock table overflow"
24};
25
26
27static void mem_error (void)
28{
29 Long recovered = luaI_collectgarbage(); /* try to collect garbage */
30 if (recovered)
31 lua_error("not enough memory");
32 else
33 { /* if there is no garbage then must exit */
34 fprintf(stderr, "lua error: memory overflow - unable to recover\n");
35 exit(1);
36 }
37}
38 19
39void luaI_free (void *block) 20void luaI_free (void *block)
40{ 21{
@@ -66,10 +47,10 @@ void *luaI_realloc (void *oldblock, unsigned long size)
66 47
67 48
68int luaI_growvector (void **block, unsigned long nelems, int size, 49int luaI_growvector (void **block, unsigned long nelems, int size,
69 enum memerrormsg errormsg, unsigned long limit) 50 char *errormsg, unsigned long limit)
70{ 51{
71 if (nelems >= limit) 52 if (nelems >= limit)
72 lua_error(luaI_memerrormsg[errormsg]); 53 lua_error(errormsg);
73 nelems = (nelems == 0) ? 20 : nelems*2; 54 nelems = (nelems == 0) ? 20 : nelems*2;
74 if (nelems > limit) 55 if (nelems > limit)
75 nelems = limit; 56 nelems = limit;