fixes compatibility with Rubinius

This commit is contained in:
frsyuki 2010-08-31 09:29:01 +09:00
parent 09b47cc536
commit 71a1cb0184
3 changed files with 20 additions and 7 deletions

View File

@ -35,6 +35,23 @@ extern VALUE s_enc_utf8_value;
#endif
/* ruby 1.8 and Rubinius */
#ifndef RBIGNUM_POSITIVE_P
# ifdef RUBINIUS
# define RBIGNUM_POSITIVE_P(b) (rb_funcall(b, rb_intern(">="), 1, INT2FIX(0)) == Qtrue)
# else
# define RBIGNUM_POSITIVE_P(b) (RBIGNUM(b)->sign)
# endif
#endif
/* Rubinius */
#ifdef RUBINIUS
static inline void rb_gc_enable() { return; }
static inline void rb_gc_disable() { return; }
#endif
/* ruby 1.8.5 */
#ifndef RSTRING_PTR
#define RSTRING_PTR(s) (RSTRING(s)->ptr)

View File

@ -1,5 +1,5 @@
require 'mkmf'
require './version.rb'
$CFLAGS << %[ -I.. -Wall -O4 -DMESSAGEPACK_VERSION=\\"#{MessagePack::VERSION}\\"]
$CFLAGS << %[ -I.. -Wall -O4 -DMESSAGEPACK_VERSION=\\"#{MessagePack::VERSION}\\" -g]
create_makefile('msgpack')

View File

@ -118,10 +118,6 @@ static VALUE MessagePack_Fixnum_to_msgpack(int argc, VALUE *argv, VALUE self)
}
#ifndef RBIGNUM_SIGN // Ruby 1.8
#define RBIGNUM_SIGN(b) (RBIGNUM(b)->sign)
#endif
/*
* Document-method: Bignum#to_msgpack
*
@ -133,9 +129,9 @@ static VALUE MessagePack_Fixnum_to_msgpack(int argc, VALUE *argv, VALUE self)
static VALUE MessagePack_Bignum_to_msgpack(int argc, VALUE *argv, VALUE self)
{
ARG_BUFFER(out, argc, argv);
if(RBIGNUM_SIGN(self)) { // positive
if(RBIGNUM_POSITIVE_P(self)) {
msgpack_pack_uint64(out, rb_big2ull(self));
} else { // negative
} else {
msgpack_pack_int64(out, rb_big2ll(self));
}
return out;