diff options
Diffstat (limited to '')
-rw-r--r-- | src/lj_lib.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/lj_lib.c b/src/lj_lib.c index de1c8646..0ba0ecb1 100644 --- a/src/lj_lib.c +++ b/src/lj_lib.c | |||
@@ -14,6 +14,8 @@ | |||
14 | #include "lj_str.h" | 14 | #include "lj_str.h" |
15 | #include "lj_tab.h" | 15 | #include "lj_tab.h" |
16 | #include "lj_func.h" | 16 | #include "lj_func.h" |
17 | #include "lj_bc.h" | ||
18 | #include "lj_dispatch.h" | ||
17 | #include "lj_vm.h" | 19 | #include "lj_vm.h" |
18 | #include "lj_lib.h" | 20 | #include "lj_lib.h" |
19 | 21 | ||
@@ -46,6 +48,7 @@ void lj_lib_register(lua_State *L, const char *libname, | |||
46 | GCtab *env = tabref(L->env); | 48 | GCtab *env = tabref(L->env); |
47 | GCfunc *ofn = NULL; | 49 | GCfunc *ofn = NULL; |
48 | int ffid = *p++; | 50 | int ffid = *p++; |
51 | BCIns *bcff = &L2GG(L)->bcff[*p++]; | ||
49 | GCtab *tab = lib_create_table(L, libname, *p++); | 52 | GCtab *tab = lib_create_table(L, libname, *p++); |
50 | ptrdiff_t tpos = L->top - L->base; | 53 | ptrdiff_t tpos = L->top - L->base; |
51 | 54 | ||
@@ -68,10 +71,10 @@ void lj_lib_register(lua_State *L, const char *libname, | |||
68 | fn->c.ffid = (uint8_t)(ffid++); | 71 | fn->c.ffid = (uint8_t)(ffid++); |
69 | name = (const char *)p; | 72 | name = (const char *)p; |
70 | p += len; | 73 | p += len; |
71 | if (tag != LIBINIT_CF) { | 74 | if (tag == LIBINIT_CF) |
72 | fn->c.gate = makeasmfunc(p[0] + (p[1] << 8)); | 75 | setmref(fn->c.pc, &G(L)->bc_cfunc_int); |
73 | p += 2; | 76 | else |
74 | } | 77 | setmref(fn->c.pc, bcff++); |
75 | if (tag == LIBINIT_ASM_) | 78 | if (tag == LIBINIT_ASM_) |
76 | fn->c.f = ofn->c.f; /* Copy handler from previous function. */ | 79 | fn->c.f = ofn->c.f; /* Copy handler from previous function. */ |
77 | else | 80 | else |