aboutsummaryrefslogtreecommitdiff
path: root/src/lj_ir.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_ir.h')
-rw-r--r--src/lj_ir.h18
1 files changed, 15 insertions, 3 deletions
diff --git a/src/lj_ir.h b/src/lj_ir.h
index 75519ed4..ca871238 100644
--- a/src/lj_ir.h
+++ b/src/lj_ir.h
@@ -362,6 +362,7 @@ typedef struct IRType1 { uint8_t irt; } IRType1;
362 362
363#define irt_isnil(t) (irt_type(t) == IRT_NIL) 363#define irt_isnil(t) (irt_type(t) == IRT_NIL)
364#define irt_ispri(t) ((uint32_t)irt_type(t) <= IRT_TRUE) 364#define irt_ispri(t) ((uint32_t)irt_type(t) <= IRT_TRUE)
365#define irt_islightud(t) (irt_type(t) == IRT_LIGHTUD)
365#define irt_isstr(t) (irt_type(t) == IRT_STR) 366#define irt_isstr(t) (irt_type(t) == IRT_STR)
366#define irt_isfunc(t) (irt_type(t) == IRT_FUNC) 367#define irt_isfunc(t) (irt_type(t) == IRT_FUNC)
367#define irt_istab(t) (irt_type(t) == IRT_TAB) 368#define irt_istab(t) (irt_type(t) == IRT_TAB)
@@ -376,9 +377,20 @@ typedef struct IRType1 { uint8_t irt; } IRType1;
376#define irt_isgcv(t) (irt_typerange((t), IRT_STR, IRT_UDATA)) 377#define irt_isgcv(t) (irt_typerange((t), IRT_STR, IRT_UDATA))
377#define irt_isaddr(t) (irt_typerange((t), IRT_LIGHTUD, IRT_UDATA)) 378#define irt_isaddr(t) (irt_typerange((t), IRT_LIGHTUD, IRT_UDATA))
378 379
379#define itype2irt(tv) \ 380static LJ_AINLINE IRType itype2irt(const TValue *tv)
380 (~uitype(tv) < IRT_NUM ? cast(IRType, ~uitype(tv)) : IRT_NUM) 381{
381#define irt_toitype(t) ((int32_t)~(uint32_t)irt_type(t)) 382 if (tvisnum(tv))
383 return IRT_NUM;
384#if LJ_64
385 else if (tvislightud(tv))
386 return IRT_LIGHTUD;
387#endif
388 else
389 return cast(IRType, ~uitype(tv));
390}
391
392#define irt_toitype(t) \
393 check_exp(!(LJ_64 && irt_islightud((t))), (int32_t)~(uint32_t)irt_type((t)))
382 394
383#define irt_isguard(t) ((t).irt & IRT_GUARD) 395#define irt_isguard(t) ((t).irt & IRT_GUARD)
384#define irt_ismarked(t) ((t).irt & IRT_MARK) 396#define irt_ismarked(t) ((t).irt & IRT_MARK)