diff options
Diffstat (limited to 'src/lj_ir.h')
-rw-r--r-- | src/lj_ir.h | 18 |
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) \ | 380 | static 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) |