diff options
Diffstat (limited to 'src/lj_crecord.c')
-rw-r--r-- | src/lj_crecord.c | 7 |
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 | ||
950 | static 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 | |||
950 | void LJ_FASTCALL recff_ffi_new(jit_State *J, RecordFFData *rd) | 955 | void 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]); |