diff options
author | Mike Pall <mike> | 2011-01-23 14:23:21 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2011-01-23 14:23:21 +0100 |
commit | 72b3fff72f6bb9cf5796bbcd50e9a490d4e02b4b (patch) | |
tree | 5ee063bd3f5af95dddda47f30c67adfe5bc0e5ad /src/lj_cconv.c | |
parent | f529d22869429d458c5382cf6787f213d7bd5296 (diff) | |
download | luajit2-72b3fff72f6bb9cf5796bbcd50e9a490d4e02b4b.tar.gz |
FFI: Simplify initializer rules. Clarify docs.
Diffstat (limited to 'src/lj_cconv.c')
-rw-r--r-- | src/lj_cconv.c | 9 |
1 files changed, 2 insertions, 7 deletions
diff --git a/src/lj_cconv.c b/src/lj_cconv.c index ac6374ed..d4578f88 100644 --- a/src/lj_cconv.c +++ b/src/lj_cconv.c @@ -679,17 +679,12 @@ static void cconv_struct_init(CTState *cts, CType *d, CTSize sz, uint8_t *dp, ** This is true if an aggregate is to be initialized with a value. ** Valarrays are treated as values here so ct_tv handles (V|C, I|F). */ -int lj_cconv_multi_init(CTState *cts, CType *d, TValue *o) +int lj_cconv_multi_init(CType *d, TValue *o) { if (!(ctype_isrefarray(d->info) || ctype_isstruct(d->info))) return 0; /* Destination is not an aggregate. */ if (tvistab(o) || (tvisstr(o) && !ctype_isstruct(d->info))) return 0; /* Initializer is not a value. */ - if (tviscdata(o)) { - CTInfo info = lj_ctype_rawref(cts, cdataV(o)->typeid)->info; - if (ctype_isrefarray(info) || ctype_isstruct(info)) - return 0; /* Initializer is not a value. */ - } return 1; /* Otherwise the initializer is a value. */ } @@ -699,7 +694,7 @@ void lj_cconv_ct_init(CTState *cts, CType *d, CTSize sz, { if (len == 0) memset(dp, 0, sz); - else if (len == 1 && !lj_cconv_multi_init(cts, d, o)) + else if (len == 1 && !lj_cconv_multi_init(d, o)) lj_cconv_ct_tv(cts, d, dp, o, 0); else if (ctype_isarray(d->info)) /* Also handles valarray init with len>1. */ cconv_array_init(cts, d, sz, dp, o, len); |