aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>1996-03-21 15:55:02 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>1996-03-21 15:55:02 -0300
commit7a35f23c1688e3e24781c780e121bbdc0e4b53e1 (patch)
treeb3de8cfb741848e579385f4751f95fdc37d3a5d3
parent9284742a11b92dfe4ef011b963240cfa588515cd (diff)
downloadlua-7a35f23c1688e3e24781c780e121bbdc0e4b53e1.tar.gz
lua-7a35f23c1688e3e24781c780e121bbdc0e4b53e1.tar.bz2
lua-7a35f23c1688e3e24781c780e121bbdc0e4b53e1.zip
a simplification about memory error messages.
-rw-r--r--func.c3
-rw-r--r--luamem.c29
-rw-r--r--luamem.h15
-rw-r--r--opcode.c4
-rw-r--r--table.c7
5 files changed, 21 insertions, 37 deletions
diff --git a/func.c b/func.c
index d9ed9831..21b19a19 100644
--- a/func.c
+++ b/func.c
@@ -102,8 +102,7 @@ void lua_funcinfo (lua_Object func, char **filename, int *linedefined)
102void luaI_registerlocalvar (TaggedString *varname, int line) 102void luaI_registerlocalvar (TaggedString *varname, int line)
103{ 103{
104 if (numcurrvars >= maxcurrvars) 104 if (numcurrvars >= maxcurrvars)
105 maxcurrvars = growvector(&currvars, maxcurrvars, LocVar, 105 maxcurrvars = growvector(&currvars, maxcurrvars, LocVar, "", MAX_WORD);
106 lockEM, MAX_WORD);
107 currvars[numcurrvars].varname = varname; 106 currvars[numcurrvars].varname = varname;
108 currvars[numcurrvars].line = line; 107 currvars[numcurrvars].line = line;
109 numcurrvars++; 108 numcurrvars++;
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;
diff --git a/luamem.h b/luamem.h
index dc0e925b..d22cc200 100644
--- a/luamem.h
+++ b/luamem.h
@@ -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.4 1996/03/14 15:55:49 roberto Exp roberto $ 4** $Id: mem.h,v 1.5 1996/03/21 16:31:32 roberto Exp roberto $
5*/ 5*/
6 6
7#ifndef mem_h 7#ifndef mem_h
@@ -13,9 +13,14 @@
13 13
14 14
15/* memory error messages */ 15/* memory error messages */
16#define NUMERRMSG 6 16#define codeEM "code size overflow"
17enum memerrormsg {codeEM, symbolEM, constantEM, stackEM, lexEM, lockEM}; 17#define symbolEM "symbol table overflow"
18extern char *luaI_memerrormsg[]; 18#define constantEM "constant table overflow"
19#define stackEM "stack size overflow"
20#define lexEM "lex buffer overflow"
21#define lockEM "lock table overflow"
22#define tableEM "table overflow"
23#define memEM "not enough memory"
19 24
20 25
21void luaI_free (void *block); 26void luaI_free (void *block);
@@ -23,7 +28,7 @@ void *luaI_malloc (unsigned long size);
23void *luaI_realloc (void *oldblock, unsigned long size); 28void *luaI_realloc (void *oldblock, unsigned long size);
24void *luaI_buffer (unsigned long size); 29void *luaI_buffer (unsigned long size);
25int luaI_growvector (void **block, unsigned long nelems, int size, 30int luaI_growvector (void **block, unsigned long nelems, int size,
26 enum memerrormsg errormsg, unsigned long limit); 31 char *errormsg, unsigned long limit);
27 32
28#define new(s) ((s *)luaI_malloc(sizeof(s))) 33#define new(s) ((s *)luaI_malloc(sizeof(s)))
29#define newvector(n,s) ((s *)luaI_malloc((n)*sizeof(s))) 34#define newvector(n,s) ((s *)luaI_malloc((n)*sizeof(s)))
diff --git a/opcode.c b/opcode.c
index c7db7824..539f2cf3 100644
--- a/opcode.c
+++ b/opcode.c
@@ -3,7 +3,7 @@
3** TecCGraf - PUC-Rio 3** TecCGraf - PUC-Rio
4*/ 4*/
5 5
6char *rcs_opcode="$Id: opcode.c,v 3.63 1996/03/20 17:05:44 roberto Exp roberto $"; 6char *rcs_opcode="$Id: opcode.c,v 3.64 1996/03/21 16:31:32 roberto Exp roberto $";
7 7
8#include <setjmp.h> 8#include <setjmp.h>
9#include <stdio.h> 9#include <stdio.h>
@@ -102,7 +102,7 @@ static void growstack (void)
102 if (stacksize >= limit) 102 if (stacksize >= limit)
103 { 103 {
104 limit = stacksize; 104 limit = stacksize;
105 lua_error(luaI_memerrormsg[stackEM]); 105 lua_error(stackEM);
106 } 106 }
107 } 107 }
108} 108}
diff --git a/table.c b/table.c
index 3920ed19..6c77d2e9 100644
--- a/table.c
+++ b/table.c
@@ -3,7 +3,7 @@
3** Module to control static tables 3** Module to control static tables
4*/ 4*/
5 5
6char *rcs_table="$Id: table.c,v 2.49 1996/03/14 15:57:19 roberto Exp roberto $"; 6char *rcs_table="$Id: table.c,v 2.50 1996/03/21 16:31:32 roberto Exp roberto $";
7 7
8#include "mem.h" 8#include "mem.h"
9#include "opcode.h" 9#include "opcode.h"
@@ -75,12 +75,11 @@ void luaI_initsymbol (void)
75*/ 75*/
76void luaI_initconstant (void) 76void luaI_initconstant (void)
77{ 77{
78 int i;
79 lua_maxconstant = BUFFER_BLOCK; 78 lua_maxconstant = BUFFER_BLOCK;
80 lua_constant = newvector(lua_maxconstant, TaggedString *); 79 lua_constant = newvector(lua_maxconstant, TaggedString *);
81 /* pre-register mem error messages, to avoid loop when error arises */ 80 /* pre-register mem error messages, to avoid loop when error arises */
82 for (i=0; i<NUMERRMSG; i++) 81 luaI_findconstantbyname(tableEM);
83 luaI_findconstantbyname(luaI_memerrormsg[i]); 82 luaI_findconstantbyname(memEM);
84} 83}
85 84
86 85