summaryrefslogtreecommitdiff
path: root/src/lj_crecord.c
diff options
context:
space:
mode:
authorMike Pall <mike>2011-02-07 17:13:14 +0100
committerMike Pall <mike>2011-02-07 17:13:14 +0100
commit51e8fe9cf0738706dbcaae51774faffebfa389f0 (patch)
treee4add3595dc3fd09146a8aefeaac5d08bc384d8c /src/lj_crecord.c
parent8da287cab809adbc29b8750345773f7f901a7a27 (diff)
downloadluajit-51e8fe9cf0738706dbcaae51774faffebfa389f0.tar.gz
luajit-51e8fe9cf0738706dbcaae51774faffebfa389f0.tar.bz2
luajit-51e8fe9cf0738706dbcaae51774faffebfa389f0.zip
FFI: Allow cdata types for integer arguments of ffi.* functions.
Diffstat (limited to 'src/lj_crecord.c')
-rw-r--r--src/lj_crecord.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/lj_crecord.c b/src/lj_crecord.c
index 8473ee45..44c5844a 100644
--- a/src/lj_crecord.c
+++ b/src/lj_crecord.c
@@ -947,6 +947,11 @@ void LJ_FASTCALL recff_clib_index(jit_State *J, RecordFFData *rd)
947 947
948/* -- FFI library functions ----------------------------------------------- */ 948/* -- FFI library functions ----------------------------------------------- */
949 949
950static TRef crec_toint(jit_State *J, CTState *cts, TRef sp, TValue *sval)
951{
952 return crec_ct_tv(J, ctype_get(cts, CTID_INT32), 0, sp, sval);
953}
954
950void LJ_FASTCALL recff_ffi_new(jit_State *J, RecordFFData *rd) 955void LJ_FASTCALL recff_ffi_new(jit_State *J, RecordFFData *rd)
951{ 956{
952 crec_alloc(J, rd, argv2ctype(J, J->base[0], &rd->argv[0])); 957 crec_alloc(J, rd, argv2ctype(J, J->base[0], &rd->argv[0]));
@@ -959,7 +964,7 @@ void LJ_FASTCALL recff_ffi_string(jit_State *J, RecordFFData *rd)
959 if (tr) { 964 if (tr) {
960 TRef trlen = J->base[1]; 965 TRef trlen = J->base[1];
961 if (trlen) { 966 if (trlen) {
962 trlen = lj_ir_toint(J, trlen); 967 trlen = crec_toint(J, cts, trlen, &rd->argv[1]);
963 tr = crec_ct_tv(J, ctype_get(cts, CTID_P_CVOID), 0, tr, &rd->argv[0]); 968 tr = crec_ct_tv(J, ctype_get(cts, CTID_P_CVOID), 0, tr, &rd->argv[0]);
964 } else { 969 } else {
965 tr = crec_ct_tv(J, ctype_get(cts, CTID_P_CCHAR), 0, tr, &rd->argv[0]); 970 tr = crec_ct_tv(J, ctype_get(cts, CTID_P_CCHAR), 0, tr, &rd->argv[0]);