aboutsummaryrefslogtreecommitdiff
path: root/lstate.c
diff options
context:
space:
mode:
Diffstat (limited to 'lstate.c')
-rw-r--r--lstate.c27
1 files changed, 7 insertions, 20 deletions
diff --git a/lstate.c b/lstate.c
index e5ad27bd..c8f3d65b 100644
--- a/lstate.c
+++ b/lstate.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lstate.c,v 1.12 1999/05/11 20:08:20 roberto Exp roberto $ 2** $Id: lstate.c,v 1.13 1999/08/16 20:52:00 roberto Exp roberto $
3** Global State 3** Global State
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -7,13 +7,11 @@
7 7
8#include "lbuiltin.h" 8#include "lbuiltin.h"
9#include "ldo.h" 9#include "ldo.h"
10#include "lfunc.h"
11#include "lgc.h" 10#include "lgc.h"
12#include "llex.h" 11#include "llex.h"
13#include "lmem.h" 12#include "lmem.h"
14#include "lstate.h" 13#include "lstate.h"
15#include "lstring.h" 14#include "lstring.h"
16#include "ltable.h"
17#include "ltm.h" 15#include "ltm.h"
18 16
19 17
@@ -36,14 +34,10 @@ void lua_open (void) {
36 L->debug = 0; 34 L->debug = 0;
37 L->callhook = NULL; 35 L->callhook = NULL;
38 L->linehook = NULL; 36 L->linehook = NULL;
39 L->rootproto.next = NULL; 37 L->rootproto = NULL;
40 L->rootproto.marked = 0; 38 L->rootcl = NULL;
41 L->rootcl.next = NULL; 39 L->rootglobal = NULL;
42 L->rootcl.marked = 0; 40 L->roottable = NULL;
43 L->rootglobal.next = NULL;
44 L->rootglobal.marked = 0;
45 L->roottable.next = NULL;
46 L->roottable.marked = 0;
47 L->IMtable = NULL; 41 L->IMtable = NULL;
48 L->refArray = NULL; 42 L->refArray = NULL;
49 L->refSize = 0; 43 L->refSize = 0;
@@ -58,21 +52,14 @@ void lua_open (void) {
58 52
59 53
60void lua_close (void) { 54void lua_close (void) {
61 TaggedString *alludata = luaS_collectudata(); 55 luaC_collect(1); /* collect all elements */
62 L->GCthreshold = MAX_INT; /* to avoid GC during GC */
63 luaC_hashcallIM((Hash *)L->roottable.next); /* GC t.methods for tables */
64 luaC_strcallIM(alludata); /* GC tag methods for userdata */
65 luaD_gcIM(&luaO_nilobject); /* GC tag method for nil (signal end of GC) */
66 luaH_free((Hash *)L->roottable.next);
67 luaF_freeproto((TProtoFunc *)L->rootproto.next);
68 luaF_freeclosure((Closure *)L->rootcl.next);
69 luaS_free(alludata);
70 luaS_freeall(); 56 luaS_freeall();
71 luaM_free(L->stack.stack); 57 luaM_free(L->stack.stack);
72 luaM_free(L->IMtable); 58 luaM_free(L->IMtable);
73 luaM_free(L->refArray); 59 luaM_free(L->refArray);
74 luaM_free(L->Mbuffer); 60 luaM_free(L->Mbuffer);
75 luaM_free(L->Cblocks); 61 luaM_free(L->Cblocks);
62 LUA_ASSERT(L->nblocks == 0, "wrong count for nblocks");
76 luaM_free(L); 63 luaM_free(L);
77 L = NULL; 64 L = NULL;
78#ifdef DEBUG 65#ifdef DEBUG