diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1999-11-22 11:12:07 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1999-11-22 11:12:07 -0200 |
| commit | 29ede6aa13144ff7b69c57a87be1ee93f57ae896 (patch) | |
| tree | adcfb5dcff7db55481cd675349e23dec0e63c939 /lfunc.c | |
| parent | 951897c09319ae5474a4b86bb7d615136577caa0 (diff) | |
| download | lua-29ede6aa13144ff7b69c57a87be1ee93f57ae896.tar.gz lua-29ede6aa13144ff7b69c57a87be1ee93f57ae896.tar.bz2 lua-29ede6aa13144ff7b69c57a87be1ee93f57ae896.zip | |
first implementation of multiple states (reentrant code).
Diffstat (limited to 'lfunc.c')
| -rw-r--r-- | lfunc.c | 38 |
1 files changed, 20 insertions, 18 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lfunc.c,v 1.13 1999/10/14 19:46:57 roberto Exp roberto $ | 2 | ** $Id: lfunc.c,v 1.14 1999/11/10 15:39:35 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 | */ |
| @@ -7,28 +7,30 @@ | |||
| 7 | 7 | ||
| 8 | #include <stdlib.h> | 8 | #include <stdlib.h> |
| 9 | 9 | ||
| 10 | #define LUA_REENTRANT | ||
| 11 | |||
| 10 | #include "lfunc.h" | 12 | #include "lfunc.h" |
| 11 | #include "lmem.h" | 13 | #include "lmem.h" |
| 12 | #include "lstate.h" | 14 | #include "lstate.h" |
| 13 | 15 | ||
| 14 | #define gcsizeproto(p) numblocks(0, sizeof(TProtoFunc)) | 16 | #define gcsizeproto(L, p) numblocks(L, 0, sizeof(TProtoFunc)) |
| 15 | #define gcsizeclosure(c) numblocks(c->nelems, sizeof(Closure)) | 17 | #define gcsizeclosure(L, c) numblocks(L, c->nelems, sizeof(Closure)) |
| 16 | 18 | ||
| 17 | 19 | ||
| 18 | 20 | ||
| 19 | Closure *luaF_newclosure (int nelems) { | 21 | Closure *luaF_newclosure (lua_State *L, int nelems) { |
| 20 | Closure *c = (Closure *)luaM_malloc(sizeof(Closure)+nelems*sizeof(TObject)); | 22 | Closure *c = (Closure *)luaM_malloc(L, sizeof(Closure)+nelems*sizeof(TObject)); |
| 21 | c->next = L->rootcl; | 23 | c->next = L->rootcl; |
| 22 | L->rootcl = c; | 24 | L->rootcl = c; |
| 23 | c->marked = 0; | 25 | c->marked = 0; |
| 24 | c->nelems = nelems; | 26 | c->nelems = nelems; |
| 25 | L->nblocks += gcsizeclosure(c); | 27 | L->nblocks += gcsizeclosure(L, c); |
| 26 | return c; | 28 | return c; |
| 27 | } | 29 | } |
| 28 | 30 | ||
| 29 | 31 | ||
| 30 | TProtoFunc *luaF_newproto (void) { | 32 | TProtoFunc *luaF_newproto (lua_State *L) { |
| 31 | TProtoFunc *f = luaM_new(TProtoFunc); | 33 | TProtoFunc *f = luaM_new(L, TProtoFunc); |
| 32 | f->code = NULL; | 34 | f->code = NULL; |
| 33 | f->lineDefined = 0; | 35 | f->lineDefined = 0; |
| 34 | f->source = NULL; | 36 | f->source = NULL; |
| @@ -38,23 +40,23 @@ TProtoFunc *luaF_newproto (void) { | |||
| 38 | f->next = L->rootproto; | 40 | f->next = L->rootproto; |
| 39 | L->rootproto = f; | 41 | L->rootproto = f; |
| 40 | f->marked = 0; | 42 | f->marked = 0; |
| 41 | L->nblocks += gcsizeproto(f); | 43 | L->nblocks += gcsizeproto(L, f); |
| 42 | return f; | 44 | return f; |
| 43 | } | 45 | } |
| 44 | 46 | ||
| 45 | 47 | ||
| 46 | void luaF_freeproto (TProtoFunc *f) { | 48 | void luaF_freeproto (lua_State *L, TProtoFunc *f) { |
| 47 | L->nblocks -= gcsizeproto(f); | 49 | L->nblocks -= gcsizeproto(L, f); |
| 48 | luaM_free(f->code); | 50 | luaM_free(L, f->code); |
| 49 | luaM_free(f->locvars); | 51 | luaM_free(L, f->locvars); |
| 50 | luaM_free(f->consts); | 52 | luaM_free(L, f->consts); |
| 51 | luaM_free(f); | 53 | luaM_free(L, f); |
| 52 | } | 54 | } |
| 53 | 55 | ||
| 54 | 56 | ||
| 55 | void luaF_freeclosure (Closure *c) { | 57 | void luaF_freeclosure (lua_State *L, Closure *c) { |
| 56 | L->nblocks -= gcsizeclosure(c); | 58 | L->nblocks -= gcsizeclosure(L, c); |
| 57 | luaM_free(c); | 59 | luaM_free(L, c); |
| 58 | } | 60 | } |
| 59 | 61 | ||
| 60 | 62 | ||
