diff options
Diffstat (limited to 'src/lj_dispatch.c')
-rw-r--r-- | src/lj_dispatch.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/lj_dispatch.c b/src/lj_dispatch.c index d2fce2e0..b427a06e 100644 --- a/src/lj_dispatch.c +++ b/src/lj_dispatch.c | |||
@@ -153,8 +153,7 @@ int luaJIT_setmode(lua_State *L, int idx, int mode) | |||
153 | case LUAJIT_MODE_TRACE: | 153 | case LUAJIT_MODE_TRACE: |
154 | if (!(mode & LUAJIT_MODE_FLUSH)) | 154 | if (!(mode & LUAJIT_MODE_FLUSH)) |
155 | return 0; /* Failed. */ | 155 | return 0; /* Failed. */ |
156 | lj_trace_flush(G2J(g), idx); | 156 | return lj_trace_flush(G2J(g), idx); |
157 | break; | ||
158 | #else | 157 | #else |
159 | case LUAJIT_MODE_ENGINE: | 158 | case LUAJIT_MODE_ENGINE: |
160 | case LUAJIT_MODE_FUNC: | 159 | case LUAJIT_MODE_FUNC: |
@@ -165,6 +164,20 @@ int luaJIT_setmode(lua_State *L, int idx, int mode) | |||
165 | return 0; /* Failed. */ | 164 | return 0; /* Failed. */ |
166 | break; | 165 | break; |
167 | #endif | 166 | #endif |
167 | case LUAJIT_MODE_WRAPCFUNC: | ||
168 | if ((mode & LUAJIT_MODE_ON)) { | ||
169 | if (idx != 0) { | ||
170 | cTValue *tv = idx > 0 ? L->base + (idx-1) : L->top + idx; | ||
171 | if (tvislightud(tv) && lightudV(tv) != NULL) | ||
172 | g->wrapf = (lua_CFunction)lightudV(tv); | ||
173 | else | ||
174 | return 0; /* Failed. */ | ||
175 | } | ||
176 | g->wrapmode = 1; | ||
177 | } else { | ||
178 | g->wrapmode = 0; | ||
179 | } | ||
180 | break; | ||
168 | default: | 181 | default: |
169 | return 0; /* Failed. */ | 182 | return 0; /* Failed. */ |
170 | } | 183 | } |