From 886a450a3d3b47ebffb2b21334b872ebedf1e3c8 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Tue, 8 May 2012 18:34:12 +0200 Subject: [PATCH] FFI: Allow 'typedef _Bool int BOOL;' to make Windows users happy. --- src/lj_cconv.c | 14 ++++++++------ src/lj_cparse.c | 9 +++++++-- src/lj_ctype.c | 2 +- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/lj_cconv.c b/src/lj_cconv.c index 818c1f44..240a8d10 100644 --- a/src/lj_cconv.c +++ b/src/lj_cconv.c @@ -131,21 +131,23 @@ void lj_cconv_ct_ct(CTState *cts, CType *d, CType *s, /* Some basic sanity checks. */ lua_assert(!ctype_isnum(dinfo) || dsize > 0); lua_assert(!ctype_isnum(sinfo) || ssize > 0); - lua_assert(!ctype_isbool(dinfo) || dsize == 1); - lua_assert(!ctype_isbool(sinfo) || ssize == 1); + lua_assert(!ctype_isbool(dinfo) || dsize == 1 || dsize == 4); + lua_assert(!ctype_isbool(sinfo) || ssize == 1 || ssize == 4); lua_assert(!ctype_isinteger(dinfo) || (1u<size == 1 ? (*sp != 0) : (*(int *)sp != 0); setboolV(o, b); setboolV(&cts->g->tmptv2, b); /* Remember for trace recorder. */ } diff --git a/src/lj_cparse.c b/src/lj_cparse.c index 526332d4..ff5abc70 100644 --- a/src/lj_cparse.c +++ b/src/lj_cparse.c @@ -1502,8 +1502,13 @@ end_decl: /* Determine type info and size. */ CTInfo info = CTINFO(CT_NUM, (cds & CDF_UNSIGNED) ? CTF_UNSIGNED : 0); if ((cds & CDF_BOOL)) { - info = CTINFO(CT_NUM, CTF_UNSIGNED|CTF_BOOL); - lua_assert(sz == 1); + if ((cds & ~(CDF_SCL|CDF_BOOL|CDF_INT|CDF_SIGNED|CDF_UNSIGNED))) + cp_errmsg(cp, 0, LJ_ERR_FFI_INVTYPE); + info |= CTF_BOOL; + if (!sz) { + if (!(cds & CDF_SIGNED)) info |= CTF_UNSIGNED; + sz = 1; + } } else if ((cds & CDF_FP)) { info = CTINFO(CT_NUM, CTF_FP); if ((cds & CDF_LONG)) sz = sizeof(long double); diff --git a/src/lj_ctype.c b/src/lj_ctype.c index 353fe9e3..2ea08e25 100644 --- a/src/lj_ctype.c +++ b/src/lj_ctype.c @@ -43,7 +43,7 @@ #define CTKWDEF(_) \ /* Type specifiers. */ \ _("void", -1, CTOK_VOID) \ - _("_Bool", 1, CTOK_BOOL) \ + _("_Bool", 0, CTOK_BOOL) \ _("bool", 1, CTOK_BOOL) \ _("char", 1, CTOK_CHAR) \ _("int", 4, CTOK_INT) \