aboutsummaryrefslogtreecommitdiff
path: root/src/lj_meta.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_meta.c')
-rw-r--r--src/lj_meta.c11
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 }