diff options
author | tduehr <tduehr@gmail.com> | 2014-01-15 16:21:09 -0600 |
---|---|---|
committer | tduehr <tduehr@gmail.com> | 2014-10-13 14:42:00 -0500 |
commit | bfd4509b7d6e404f5ade3376471a4305bc93dae5 (patch) | |
tree | 0badac627e2d328c1140c84c97227eb33c1a0f6d | |
parent | eab7025e2227edd157966c197e0fd96edea2d325 (diff) | |
download | ffi-bfd4509b7d6e404f5ade3376471a4305bc93dae5.tar.gz |
make function calls with float arguments JustWork with enums
-rw-r--r-- | ext/ffi_c/Call.c | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/ext/ffi_c/Call.c b/ext/ffi_c/Call.c index 820d977..b028811 100644 --- a/ext/ffi_c/Call.c +++ b/ext/ffi_c/Call.c @@ -246,7 +246,7 @@ rbffi_SetupCallParams(int argc, VALUE* argv, int paramCount, Type** paramTypes, case NATIVE_ULONG: if (unlikely(type == T_SYMBOL && enums != Qnil)) { VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); - *(ffi_sarg *) param = NUM2ULONG(value); + *(ffi_arg *) param = NUM2ULONG(value); } else { *(ffi_arg *) param = NUM2ULONG(argv[argidx]); } @@ -256,19 +256,37 @@ rbffi_SetupCallParams(int argc, VALUE* argv, int paramCount, Type** paramTypes, break; case NATIVE_FLOAT32: - param->f32 = (float) NUM2DBL(argv[argidx]); + if (unlikely(type == T_SYMBOL && enums != Qnil)) { + VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); + param->f32 = (float) NUM2DBL(value); + } else { + param->f32 = (float) NUM2DBL(argv[argidx]); + } + ADJ(param, FLOAT32); ++argidx; break; case NATIVE_FLOAT64: - param->f64 = NUM2DBL(argv[argidx]); + if (unlikely(type == T_SYMBOL && enums != Qnil)) { + VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); + param->f64 = NUM2DBL(value); + } else { + param->f64 = NUM2DBL(argv[argidx]); + } + ADJ(param, FLOAT64); ++argidx; break; case NATIVE_LONGDOUBLE: - param->ld = rbffi_num2longdouble(argv[argidx]); + if (unlikely(type == T_SYMBOL && enums != Qnil)) { + VALUE value = rb_funcall(enums, id_map_symbol, 1, argv[argidx]); + param->ld = rbffi_num2longdouble(value); + } else { + param->ld = rbffi_num2longdouble(argv[argidx]); + } + ADJ(param, LONGDOUBLE); ++argidx; break; |