Support Boolean in MiniFFI

This commit is contained in:
Inori 2019-08-24 22:53:53 -04:00
parent b844c3dea2
commit ffa5784ec0

View file

@ -12,6 +12,7 @@
#define _T_NUMBER 1 #define _T_NUMBER 1
#define _T_POINTER 2 #define _T_POINTER 2
#define _T_INTEGER 3 #define _T_INTEGER 3
#define _T_BOOL 4
// Might need to let MiniFFI.initialize set calling convention // Might need to let MiniFFI.initialize set calling convention
@ -126,6 +127,10 @@ RB_METHOD(MiniFFI_initialize)
case 'I': case 'i': case 'I': case 'i':
rb_ary_push(ary_imports, INT2FIX(_T_INTEGER)); rb_ary_push(ary_imports, INT2FIX(_T_INTEGER));
break; break;
case 'B': case 'b':
rb_ary_push(ary_imports, INT2FIX(_T_BOOL));
break;
} }
} }
break; break;
@ -147,6 +152,10 @@ RB_METHOD(MiniFFI_initialize)
case 'I': case 'i': case 'I': case 'i':
rb_ary_push(ary_imports, INT2FIX(_T_INTEGER)); rb_ary_push(ary_imports, INT2FIX(_T_INTEGER));
break; break;
case 'B': case 'b':
rb_ary_push(ary_imports, INT2FIX(_T_BOOL));
break;
} }
} }
break; break;
@ -181,6 +190,10 @@ RB_METHOD(MiniFFI_initialize)
case 'I': case 'i': case 'I': case 'i':
ex = _T_INTEGER; ex = _T_INTEGER;
break; break;
case 'B': case 'b':
ex = _T_BOOL;
break;
} }
} }
rb_iv_set(self, "_exports", INT2FIX(ex)); rb_iv_set(self, "_exports", INT2FIX(ex));
@ -227,6 +240,10 @@ RB_METHOD(MiniFFI_call)
lParam = (unsigned long)RSTRING_PTR(str); lParam = (unsigned long)RSTRING_PTR(str);
} }
break; break;
case _T_BOOL:
lParam = (rb_ary_entry(args, i) == Qtrue);
break;
case _T_NUMBER: case _T_INTEGER: default: case _T_NUMBER: case _T_INTEGER: default:
lParam = NUM2OFFT(rb_ary_entry(args, i)); lParam = NUM2OFFT(rb_ary_entry(args, i));
@ -247,6 +264,9 @@ RB_METHOD(MiniFFI_call)
case _T_POINTER: case _T_POINTER:
return rb_str_new2((char*)ret); return rb_str_new2((char*)ret);
case _T_BOOL:
return rb_bool_new(ret);
case _T_VOID: default: case _T_VOID: default:
return OFFT2NUM(0); return OFFT2NUM(0);