FFI: No meta fallback when indexing pointer to incomplete struct.

This commit is contained in:
Mike Pall 2014-11-03 21:34:24 +01:00
parent 6d0654d3ec
commit a31c317fb5

View File

@ -127,16 +127,16 @@ collect_attrib:
integer_key: integer_key:
if (ctype_ispointer(ct->info)) { if (ctype_ispointer(ct->info)) {
CTSize sz = lj_ctype_size(cts, ctype_cid(ct->info)); /* Element size. */ CTSize sz = lj_ctype_size(cts, ctype_cid(ct->info)); /* Element size. */
if (sz != CTSIZE_INVALID) { if (sz == CTSIZE_INVALID)
if (ctype_isptr(ct->info)) { lj_err_caller(cts->L, LJ_ERR_FFI_INVSIZE);
p = (uint8_t *)cdata_getptr(p, ct->size); if (ctype_isptr(ct->info)) {
} else if ((ct->info & (CTF_VECTOR|CTF_COMPLEX))) { p = (uint8_t *)cdata_getptr(p, ct->size);
if ((ct->info & CTF_COMPLEX)) idx &= 1; } else if ((ct->info & (CTF_VECTOR|CTF_COMPLEX))) {
*qual |= CTF_CONST; /* Valarray elements are constant. */ if ((ct->info & CTF_COMPLEX)) idx &= 1;
} *qual |= CTF_CONST; /* Valarray elements are constant. */
*pp = p + idx*(int32_t)sz;
return ct;
} }
*pp = p + idx*(int32_t)sz;
return ct;
} }
} else if (tviscdata(key)) { /* Integer cdata key. */ } else if (tviscdata(key)) { /* Integer cdata key. */
GCcdata *cdk = cdataV(key); GCcdata *cdk = cdataV(key);