From ffa5784ec06fa02ce20f4211c810e503b432d7e7 Mon Sep 17 00:00:00 2001 From: Inori Date: Sat, 24 Aug 2019 22:53:53 -0400 Subject: [PATCH] Support Boolean in MiniFFI --- binding/miniffi-binding.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/binding/miniffi-binding.cpp b/binding/miniffi-binding.cpp index cc7c3a6f..7c468320 100644 --- a/binding/miniffi-binding.cpp +++ b/binding/miniffi-binding.cpp @@ -12,6 +12,7 @@ #define _T_NUMBER 1 #define _T_POINTER 2 #define _T_INTEGER 3 +#define _T_BOOL 4 // Might need to let MiniFFI.initialize set calling convention @@ -126,6 +127,10 @@ RB_METHOD(MiniFFI_initialize) case 'I': case 'i': rb_ary_push(ary_imports, INT2FIX(_T_INTEGER)); break; + + case 'B': case 'b': + rb_ary_push(ary_imports, INT2FIX(_T_BOOL)); + break; } } break; @@ -147,6 +152,10 @@ RB_METHOD(MiniFFI_initialize) case 'I': case 'i': rb_ary_push(ary_imports, INT2FIX(_T_INTEGER)); break; + + case 'B': case 'b': + rb_ary_push(ary_imports, INT2FIX(_T_BOOL)); + break; } } break; @@ -181,6 +190,10 @@ RB_METHOD(MiniFFI_initialize) case 'I': case 'i': ex = _T_INTEGER; break; + + case 'B': case 'b': + ex = _T_BOOL; + break; } } rb_iv_set(self, "_exports", INT2FIX(ex)); @@ -227,6 +240,10 @@ RB_METHOD(MiniFFI_call) lParam = (unsigned long)RSTRING_PTR(str); } break; + + case _T_BOOL: + lParam = (rb_ary_entry(args, i) == Qtrue); + break; case _T_NUMBER: case _T_INTEGER: default: lParam = NUM2OFFT(rb_ary_entry(args, i)); @@ -247,6 +264,9 @@ RB_METHOD(MiniFFI_call) case _T_POINTER: return rb_str_new2((char*)ret); + + case _T_BOOL: + return rb_bool_new(ret); case _T_VOID: default: return OFFT2NUM(0);