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