ljx

FORK: LuaJIT with native 5.2 and 5.3 support
git clone https://git.neptards.moe/neptards/ljx.git
Log | Files | Refs | README

lj_cconv.h (2060B)


      1 /*
      2 ** C type conversions.
      3 ** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
      4 */
      5 
      6 #ifndef _LJ_CCONV_H
      7 #define _LJ_CCONV_H
      8 
      9 #include "lj_obj.h"
     10 #include "lj_ctype.h"
     11 
     12 #if LJ_HASFFI
     13 
     14 /* Compressed C type index. ORDER CCX. */
     15 enum {
     16   CCX_B,	/* Bool. */
     17   CCX_I,	/* Integer. */
     18   CCX_F,	/* Floating-point number. */
     19   CCX_C,	/* Complex. */
     20   CCX_V,	/* Vector. */
     21   CCX_P,	/* Pointer. */
     22   CCX_A,	/* Refarray. */
     23   CCX_S		/* Struct/union. */
     24 };
     25 
     26 /* Convert C type info to compressed C type index. ORDER CT. ORDER CCX. */
     27 static LJ_AINLINE uint32_t cconv_idx(CTInfo info)
     28 {
     29   uint32_t idx = ((info >> 26) & 15u);  /* Dispatch bits. */
     30   lua_assert(ctype_type(info) <= CT_MAYCONVERT);
     31 #if LJ_64
     32   idx = ((uint32_t)(U64x(f436fff5,fff7f021) >> 4*idx) & 15u);
     33 #else
     34   idx = (((idx < 8 ? 0xfff7f021u : 0xf436fff5) >> 4*(idx & 7u)) & 15u);
     35 #endif
     36   lua_assert(idx < 8);
     37   return idx;
     38 }
     39 
     40 #define cconv_idx2(dinfo, sinfo) \
     41   ((cconv_idx((dinfo)) << 3) + cconv_idx((sinfo)))
     42 
     43 #define CCX(dst, src)		((CCX_##dst << 3) + CCX_##src)
     44 
     45 /* Conversion flags. */
     46 #define CCF_CAST	0x00000001u
     47 #define CCF_FROMTV	0x00000002u
     48 #define CCF_SAME	0x00000004u
     49 #define CCF_IGNQUAL	0x00000008u
     50 #define CCF_NOERROR     0x00000010u
     51 
     52 #define CCF_ARG_SHIFT	8
     53 #define CCF_ARG(n)	((n) << CCF_ARG_SHIFT)
     54 #define CCF_GETARG(f)	((f) >> CCF_ARG_SHIFT)
     55 
     56 LJ_FUNC int lj_cconv_compatptr(CTState *cts, CType *d, CType *s, CTInfo flags);
     57 LJ_FUNC int lj_cconv_ct_ct(CTState *cts, CType *d, CType *s,
     58 			    uint8_t *dp, uint8_t *sp, CTInfo flags);
     59 LJ_FUNC int lj_cconv_tv_ct(CTState *cts, CType *s, CTypeID sid,
     60 			   TValue *o, uint8_t *sp);
     61 LJ_FUNC int lj_cconv_tv_bf(CTState *cts, CType *s, TValue *o, uint8_t *sp);
     62 LJ_FUNC void lj_cconv_ct_tv(CTState *cts, CType *d,
     63 			    uint8_t *dp, TValue *o, CTInfo flags);
     64 LJ_FUNC void lj_cconv_bf_tv(CTState *cts, CType *d, uint8_t *dp, TValue *o);
     65 LJ_FUNC int lj_cconv_multi_init(CTState *cts, CType *d, TValue *o);
     66 LJ_FUNC void lj_cconv_ct_init(CTState *cts, CType *d, CTSize sz,
     67 			      uint8_t *dp, TValue *o, MSize len);
     68 
     69 #endif
     70 
     71 #endif