From 0c5e9d121c1053ccac58082bc7afe4bae3e7c45f Mon Sep 17 00:00:00 2001 From: okazu-dm Date: Sat, 2 Jun 2018 17:08:53 +0900 Subject: [PATCH 1/2] Pass test_parse_big_integers on jruby Aggregate FIXNUM_HANDLER and BIGNUM_HANDLER to INTEGER_HANDLER --- java/src/json/ext/Generator.java | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/java/src/json/ext/Generator.java b/java/src/json/ext/Generator.java index 96a5e7e4..c11344bc 100644 --- a/java/src/json/ext/Generator.java +++ b/java/src/json/ext/Generator.java @@ -7,12 +7,11 @@ import org.jruby.Ruby; import org.jruby.RubyArray; -import org.jruby.RubyBignum; import org.jruby.RubyBoolean; import org.jruby.RubyClass; -import org.jruby.RubyFixnum; import org.jruby.RubyFloat; import org.jruby.RubyHash; +import org.jruby.RubyInteger; import org.jruby.RubyNumeric; import org.jruby.RubyString; import org.jruby.runtime.ThreadContext; @@ -67,14 +66,14 @@ private Generator() { Handler getHandlerFor(Ruby runtime, T object) { RubyClass metaClass = object.getMetaClass(); if (metaClass == runtime.getString()) return (Handler)STRING_HANDLER; - if (metaClass == runtime.getFixnum()) return (Handler)FIXNUM_HANDLER; + if (metaClass == runtime.getFixnum()) return (Handler)INTEGER_HANDLER; if (metaClass == runtime.getHash()) return (Handler)HASH_HANDLER; if (metaClass == runtime.getArray()) return (Handler)ARRAY_HANDLER; if (object.isNil()) return (Handler)NIL_HANDLER; if (object == runtime.getTrue()) return (Handler)TRUE_HANDLER; if (object == runtime.getFalse()) return (Handler)FALSE_HANDLER; if (metaClass == runtime.getFloat()) return (Handler)FLOAT_HANDLER; - if (metaClass == runtime.getBignum()) return (Handler)BIGNUM_HANDLER; + if (metaClass == runtime.getBignum()) return (Handler)INTEGER_HANDLER; return GENERIC_HANDLER; } @@ -208,22 +207,10 @@ void generate(Session session, T object, ByteList buffer) { /* Handlers */ - - static final Handler BIGNUM_HANDLER = - new Handler() { - @Override - void generate(Session session, RubyBignum object, ByteList buffer) { - // JRUBY-4751: RubyBignum.to_s() returns generic object - // representation (fixed in 1.5, but we maintain backwards - // compatibility; call to_s(IRubyObject[]) then - buffer.append(((RubyString)object.to_s(IRubyObject.NULL_ARRAY)).getByteList()); - } - }; - - static final Handler FIXNUM_HANDLER = - new Handler() { + static final Handler INTEGER_HANDLER = + new Handler() { @Override - void generate(Session session, RubyFixnum object, ByteList buffer) { + void generate(Session session, RubyInteger object, ByteList buffer) { buffer.append(object.to_s().getByteList()); } }; From 4a4aad862274e859b84445ecfb7c0ac161cf1ca7 Mon Sep 17 00:00:00 2001 From: okazu-dm Date: Wed, 13 Jun 2018 19:32:00 +0900 Subject: [PATCH 2/2] Remove unnecessary condition --- java/src/json/ext/Generator.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/java/src/json/ext/Generator.java b/java/src/json/ext/Generator.java index c11344bc..fe8fd40a 100644 --- a/java/src/json/ext/Generator.java +++ b/java/src/json/ext/Generator.java @@ -65,15 +65,14 @@ private Generator() { private static Handler getHandlerFor(Ruby runtime, T object) { RubyClass metaClass = object.getMetaClass(); - if (metaClass == runtime.getString()) return (Handler)STRING_HANDLER; - if (metaClass == runtime.getFixnum()) return (Handler)INTEGER_HANDLER; - if (metaClass == runtime.getHash()) return (Handler)HASH_HANDLER; - if (metaClass == runtime.getArray()) return (Handler)ARRAY_HANDLER; - if (object.isNil()) return (Handler)NIL_HANDLER; - if (object == runtime.getTrue()) return (Handler)TRUE_HANDLER; - if (object == runtime.getFalse()) return (Handler)FALSE_HANDLER; - if (metaClass == runtime.getFloat()) return (Handler)FLOAT_HANDLER; - if (metaClass == runtime.getBignum()) return (Handler)INTEGER_HANDLER; + if (metaClass == runtime.getString()) return (Handler)STRING_HANDLER; + if (metaClass == runtime.getInteger()) return (Handler)INTEGER_HANDLER; + if (metaClass == runtime.getHash()) return (Handler)HASH_HANDLER; + if (metaClass == runtime.getArray()) return (Handler)ARRAY_HANDLER; + if (object.isNil()) return (Handler)NIL_HANDLER; + if (object == runtime.getTrue()) return (Handler)TRUE_HANDLER; + if (object == runtime.getFalse()) return (Handler)FALSE_HANDLER; + if (metaClass == runtime.getFloat()) return (Handler)FLOAT_HANDLER; return GENERIC_HANDLER; }