diff options
Diffstat (limited to 'src/lj_meta.c')
-rw-r--r-- | src/lj_meta.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/src/lj_meta.c b/src/lj_meta.c index 41124fdc..ab8ae8fe 100644 --- a/src/lj_meta.c +++ b/src/lj_meta.c | |||
@@ -28,14 +28,13 @@ void lj_meta_init(lua_State *L) | |||
28 | #undef MMNAME | 28 | #undef MMNAME |
29 | global_State *g = G(L); | 29 | global_State *g = G(L); |
30 | const char *p, *q; | 30 | const char *p, *q; |
31 | uint32_t i; | 31 | uint32_t mm; |
32 | for (i = 0, p = metanames; *p; i++, p = q) { | 32 | for (mm = 0, p = metanames; *p; mm++, p = q) { |
33 | GCstr *s; | 33 | GCstr *s; |
34 | for (q = p+2; *q && *q != '_'; q++) ; | 34 | for (q = p+2; *q && *q != '_'; q++) ; |
35 | s = lj_str_new(L, p, (size_t)(q-p)); | 35 | s = lj_str_new(L, p, (size_t)(q-p)); |
36 | fixstring(s); /* Never collect these names. */ | 36 | /* NOBARRIER: g->gcroot[] is a GC root. */ |
37 | /* NOBARRIER: g->mmname[] is a GC root. */ | 37 | setgcref(g->gcroot[GCROOT_MMNAME+mm], obj2gco(s)); |
38 | setgcref(g->mmname[i], obj2gco(s)); | ||
39 | } | 38 | } |
40 | } | 39 | } |
41 | 40 | ||
@@ -62,7 +61,7 @@ cTValue *lj_meta_lookup(lua_State *L, cTValue *o, MMS mm) | |||
62 | else | 61 | else |
63 | mt = tabref(basemt_obj(G(L), o)); | 62 | mt = tabref(basemt_obj(G(L), o)); |
64 | if (mt) { | 63 | if (mt) { |
65 | cTValue *mo = lj_tab_getstr(mt, strref(G(L)->mmname[mm])); | 64 | cTValue *mo = lj_tab_getstr(mt, mmname_str(G(L), mm)); |
66 | if (mo) | 65 | if (mo) |
67 | return mo; | 66 | return mo; |
68 | } | 67 | } |