mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
Refactor lj_cdata_newv().
This commit is contained in:
parent
6f451c6445
commit
38cfb6a1d9
@ -507,7 +507,7 @@ LJLIB_CF(ffi_new) LJLIB_REC(.)
|
|||||||
if (!(info & CTF_VLA) && ctype_align(info) <= CT_MEMALIGN)
|
if (!(info & CTF_VLA) && ctype_align(info) <= CT_MEMALIGN)
|
||||||
cd = lj_cdata_new(cts, id, sz);
|
cd = lj_cdata_new(cts, id, sz);
|
||||||
else
|
else
|
||||||
cd = lj_cdata_newv(cts, id, sz, ctype_align(info));
|
cd = lj_cdata_newv(L, id, sz, ctype_align(info));
|
||||||
setcdataV(L, o-1, cd); /* Anchor the uninitialized cdata. */
|
setcdataV(L, o-1, cd); /* Anchor the uninitialized cdata. */
|
||||||
lj_cconv_ct_init(cts, ct, sz, cdataptr(cd),
|
lj_cconv_ct_init(cts, ct, sz, cdataptr(cd),
|
||||||
o, (MSize)(L->top - o)); /* Initialize cdata. */
|
o, (MSize)(L->top - o)); /* Initialize cdata. */
|
||||||
|
@ -26,12 +26,12 @@ GCcdata *lj_cdata_newref(CTState *cts, const void *p, CTypeID id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Allocate variable-sized or specially aligned C data object. */
|
/* Allocate variable-sized or specially aligned C data object. */
|
||||||
GCcdata *lj_cdata_newv(CTState *cts, CTypeID id, CTSize sz, CTSize align)
|
GCcdata *lj_cdata_newv(lua_State *L, CTypeID id, CTSize sz, CTSize align)
|
||||||
{
|
{
|
||||||
global_State *g;
|
global_State *g;
|
||||||
MSize extra = sizeof(GCcdataVar) + sizeof(GCcdata) +
|
MSize extra = sizeof(GCcdataVar) + sizeof(GCcdata) +
|
||||||
(align > CT_MEMALIGN ? (1u<<align) - (1u<<CT_MEMALIGN) : 0);
|
(align > CT_MEMALIGN ? (1u<<align) - (1u<<CT_MEMALIGN) : 0);
|
||||||
char *p = lj_mem_newt(cts->L, extra + sz, char);
|
char *p = lj_mem_newt(L, extra + sz, char);
|
||||||
uintptr_t adata = (uintptr_t)p + sizeof(GCcdataVar) + sizeof(GCcdata);
|
uintptr_t adata = (uintptr_t)p + sizeof(GCcdataVar) + sizeof(GCcdata);
|
||||||
uintptr_t almask = (1u << align) - 1u;
|
uintptr_t almask = (1u << align) - 1u;
|
||||||
GCcdata *cd = (GCcdata *)(((adata + almask) & ~almask) - sizeof(GCcdata));
|
GCcdata *cd = (GCcdata *)(((adata + almask) & ~almask) - sizeof(GCcdata));
|
||||||
@ -39,7 +39,7 @@ GCcdata *lj_cdata_newv(CTState *cts, CTypeID id, CTSize sz, CTSize align)
|
|||||||
cdatav(cd)->offset = (uint16_t)((char *)cd - p);
|
cdatav(cd)->offset = (uint16_t)((char *)cd - p);
|
||||||
cdatav(cd)->extra = extra;
|
cdatav(cd)->extra = extra;
|
||||||
cdatav(cd)->len = sz;
|
cdatav(cd)->len = sz;
|
||||||
g = cts->g;
|
g = G(L);
|
||||||
setgcrefr(cd->nextgc, g->gc.root);
|
setgcrefr(cd->nextgc, g->gc.root);
|
||||||
setgcref(g->gc.root, obj2gco(cd));
|
setgcref(g->gc.root, obj2gco(cd));
|
||||||
newwhite(g, obj2gco(cd));
|
newwhite(g, obj2gco(cd));
|
||||||
|
@ -58,7 +58,7 @@ static LJ_AINLINE GCcdata *lj_cdata_new_(lua_State *L, CTypeID id, CTSize sz)
|
|||||||
}
|
}
|
||||||
|
|
||||||
LJ_FUNC GCcdata *lj_cdata_newref(CTState *cts, const void *pp, CTypeID id);
|
LJ_FUNC GCcdata *lj_cdata_newref(CTState *cts, const void *pp, CTypeID id);
|
||||||
LJ_FUNC GCcdata *lj_cdata_newv(CTState *cts, CTypeID id, CTSize sz,
|
LJ_FUNC GCcdata *lj_cdata_newv(lua_State *L, CTypeID id, CTSize sz,
|
||||||
CTSize align);
|
CTSize align);
|
||||||
|
|
||||||
LJ_FUNC void LJ_FASTCALL lj_cdata_free(global_State *g, GCcdata *cd);
|
LJ_FUNC void LJ_FASTCALL lj_cdata_free(global_State *g, GCcdata *cd);
|
||||||
|
Loading…
Reference in New Issue
Block a user