aboutsummaryrefslogtreecommitdiff
path: root/lfunc.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>1999-10-04 15:51:04 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>1999-10-04 15:51:04 -0200
commit4343420d4d559a7d4cdacdbc1fd61552dcf59f04 (patch)
tree57e0bdd41e2f3a4ab70d3150022569751e3d02ad /lfunc.c
parent1f7103e05d01a6a4c300a73bcfc8d9b17b2c20a4 (diff)
downloadlua-4343420d4d559a7d4cdacdbc1fd61552dcf59f04.tar.gz
lua-4343420d4d559a7d4cdacdbc1fd61552dcf59f04.tar.bz2
lua-4343420d4d559a7d4cdacdbc1fd61552dcf59f04.zip
simplified version of `gc' tag method (only for userdata now).
Diffstat (limited to 'lfunc.c')
-rw-r--r--lfunc.c34
1 files changed, 12 insertions, 22 deletions
diff --git a/lfunc.c b/lfunc.c
index 32fefb29..ea8a9a42 100644
--- a/lfunc.c
+++ b/lfunc.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lfunc.c,v 1.10 1999/03/04 21:17:26 roberto Exp roberto $ 2** $Id: lfunc.c,v 1.11 1999/08/16 20:52:00 roberto Exp roberto $
3** Auxiliary functions to manipulate prototypes and closures 3** Auxiliary functions to manipulate prototypes and closures
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -18,7 +18,9 @@
18 18
19Closure *luaF_newclosure (int nelems) { 19Closure *luaF_newclosure (int nelems) {
20 Closure *c = (Closure *)luaM_malloc(sizeof(Closure)+nelems*sizeof(TObject)); 20 Closure *c = (Closure *)luaM_malloc(sizeof(Closure)+nelems*sizeof(TObject));
21 luaO_insertlist(&(L->rootcl), (GCnode *)c); 21 c->next = L->rootcl;
22 L->rootcl = c;
23 c->marked = 0;
22 L->nblocks += gcsizeclosure(c); 24 L->nblocks += gcsizeclosure(c);
23 c->nelems = nelems; 25 c->nelems = nelems;
24 return c; 26 return c;
@@ -33,14 +35,16 @@ TProtoFunc *luaF_newproto (void) {
33 f->consts = NULL; 35 f->consts = NULL;
34 f->nconsts = 0; 36 f->nconsts = 0;
35 f->locvars = NULL; 37 f->locvars = NULL;
36 luaO_insertlist(&(L->rootproto), (GCnode *)f); 38 f->next = L->rootproto;
39 L->rootproto = f;
40 f->marked = 0;
37 L->nblocks += gcsizeproto(f); 41 L->nblocks += gcsizeproto(f);
38 return f; 42 return f;
39} 43}
40 44
41 45
42 46void luaF_freeproto (TProtoFunc *f) {
43static void freefunc (TProtoFunc *f) { 47 L->nblocks -= gcsizeproto(f);
44 luaM_free(f->code); 48 luaM_free(f->code);
45 luaM_free(f->locvars); 49 luaM_free(f->locvars);
46 luaM_free(f->consts); 50 luaM_free(f->consts);
@@ -48,23 +52,9 @@ static void freefunc (TProtoFunc *f) {
48} 52}
49 53
50 54
51void luaF_freeproto (TProtoFunc *l) { 55void luaF_freeclosure (Closure *c) {
52 while (l) { 56 L->nblocks -= gcsizeclosure(c);
53 TProtoFunc *next = (TProtoFunc *)l->head.next; 57 luaM_free(c);
54 L->nblocks -= gcsizeproto(l);
55 freefunc(l);
56 l = next;
57 }
58}
59
60
61void luaF_freeclosure (Closure *l) {
62 while (l) {
63 Closure *next = (Closure *)l->head.next;
64 L->nblocks -= gcsizeclosure(l);
65 luaM_free(l);
66 l = next;
67 }
68} 58}
69 59
70 60