diff options
| author | Mike Pall <mike> | 2010-02-05 01:35:38 +0100 |
|---|---|---|
| committer | Mike Pall <mike> | 2010-02-05 01:35:38 +0100 |
| commit | a0914c409b615af85eafb7e2787be628483ffde2 (patch) | |
| tree | cce46eed095637c4d4873ce38c4dbd952f7851d3 /src/lj_parse.c | |
| parent | 8dcc4364cf2c56c9bdd8047fd0dceb4b70f727d2 (diff) | |
| download | luajit-a0914c409b615af85eafb7e2787be628483ffde2.tar.gz luajit-a0914c409b615af85eafb7e2787be628483ffde2.tar.bz2 luajit-a0914c409b615af85eafb7e2787be628483ffde2.zip | |
32/64 bit memory ref cleanup, part 4: GCproto ->varinfo.
Diffstat (limited to 'src/lj_parse.c')
| -rw-r--r-- | src/lj_parse.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/lj_parse.c b/src/lj_parse.c index a3291553..30a423bd 100644 --- a/src/lj_parse.c +++ b/src/lj_parse.c | |||
| @@ -974,19 +974,21 @@ static void checkname(LexState *ls, ExpDesc *e) | |||
| 974 | 974 | ||
| 975 | /* -- Variable handling --------------------------------------------------- */ | 975 | /* -- Variable handling --------------------------------------------------- */ |
| 976 | 976 | ||
| 977 | #define getlocvar(fs, i) ((fs)->pt->varinfo[(fs)->actvar[(i)]]) | 977 | #define getlocvar(fs, i) (proto_varinfo((fs)->pt)[(fs)->actvar[(i)]]) |
| 978 | 978 | ||
| 979 | static BCReg registerlocalvar(LexState *ls, GCstr *name) | 979 | static BCReg registerlocalvar(LexState *ls, GCstr *name) |
| 980 | { | 980 | { |
| 981 | FuncState *fs = ls->fs; | 981 | FuncState *fs = ls->fs; |
| 982 | GCproto *pt = fs->pt; | 982 | GCproto *pt = fs->pt; |
| 983 | VarInfo *varinfo = proto_varinfo(pt); | ||
| 983 | if (LJ_UNLIKELY(fs->nlocvars >= pt->sizevarinfo)) { | 984 | if (LJ_UNLIKELY(fs->nlocvars >= pt->sizevarinfo)) { |
| 984 | MSize oldsize = pt->sizevarinfo; | 985 | MSize oldsize = pt->sizevarinfo; |
| 985 | checklimit(fs, fs->nlocvars, 32767, "local variables"); | 986 | checklimit(fs, fs->nlocvars, 32767, "local variables"); |
| 986 | lj_mem_growvec(fs->L, pt->varinfo, pt->sizevarinfo, 32767, VarInfo); | 987 | lj_mem_growvec(fs->L, varinfo, pt->sizevarinfo, 32767, VarInfo); |
| 987 | while (oldsize < pt->sizevarinfo) pt->varinfo[oldsize++].name = NULL; | 988 | setmref(pt->varinfo, varinfo); |
| 989 | while (oldsize < pt->sizevarinfo) setgcrefnull(varinfo[oldsize++].name); | ||
| 988 | } | 990 | } |
| 989 | pt->varinfo[fs->nlocvars].name = name; | 991 | setgcref(varinfo[fs->nlocvars].name, obj2gco(name)); |
| 990 | lj_gc_objbarrier(ls->L, pt, name); | 992 | lj_gc_objbarrier(ls->L, pt, name); |
| 991 | return fs->nlocvars++; | 993 | return fs->nlocvars++; |
| 992 | } | 994 | } |
| @@ -1048,7 +1050,7 @@ static BCReg searchvar(FuncState *fs, GCstr *n) | |||
| 1048 | { | 1050 | { |
| 1049 | int i; | 1051 | int i; |
| 1050 | for (i = fs->nactvar-1; i >= 0; i--) { | 1052 | for (i = fs->nactvar-1; i >= 0; i--) { |
| 1051 | if (n == getlocvar(fs, i).name) | 1053 | if (n == gco2str(gcref(getlocvar(fs, i).name))) |
| 1052 | return (BCReg)i; | 1054 | return (BCReg)i; |
| 1053 | } | 1055 | } |
| 1054 | return (BCReg)-1; /* Not found. */ | 1056 | return (BCReg)-1; /* Not found. */ |
| @@ -1237,6 +1239,7 @@ static void close_func(LexState *ls) | |||
| 1237 | BCIns *bc; | 1239 | BCIns *bc; |
| 1238 | GCRef *uvname; | 1240 | GCRef *uvname; |
| 1239 | BCLine *lineinfo; | 1241 | BCLine *lineinfo; |
| 1242 | VarInfo *varinfo; | ||
| 1240 | removevars(ls, 0); | 1243 | removevars(ls, 0); |
| 1241 | finalret(fs, pt); | 1244 | finalret(fs, pt); |
| 1242 | bc = proto_bc(pt); | 1245 | bc = proto_bc(pt); |
| @@ -1249,7 +1252,9 @@ static void close_func(LexState *ls) | |||
| 1249 | lj_mem_reallocvec(L, lineinfo, pt->sizelineinfo, fs->pc, BCLine); | 1252 | lj_mem_reallocvec(L, lineinfo, pt->sizelineinfo, fs->pc, BCLine); |
| 1250 | setmref(pt->lineinfo, lineinfo); | 1253 | setmref(pt->lineinfo, lineinfo); |
| 1251 | pt->sizelineinfo = fs->pc; | 1254 | pt->sizelineinfo = fs->pc; |
| 1252 | lj_mem_reallocvec(L, pt->varinfo, pt->sizevarinfo, fs->nlocvars, VarInfo); | 1255 | varinfo = proto_varinfo(pt); |
| 1256 | lj_mem_reallocvec(L, varinfo, pt->sizevarinfo, fs->nlocvars, VarInfo); | ||
| 1257 | setmref(pt->varinfo, varinfo); | ||
| 1253 | pt->sizevarinfo = fs->nlocvars; | 1258 | pt->sizevarinfo = fs->nlocvars; |
| 1254 | uvname = mref(pt->uvname, GCRef); | 1259 | uvname = mref(pt->uvname, GCRef); |
| 1255 | lj_mem_reallocvec(L, uvname, pt->sizeuvname, fs->nuv, GCRef); | 1260 | lj_mem_reallocvec(L, uvname, pt->sizeuvname, fs->nuv, GCRef); |
