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 | } |
