diff options
Diffstat (limited to 'java/src/json')
-rw-r--r-- | java/src/json/ext/Generator.java | 43 | ||||
-rw-r--r-- | java/src/json/ext/Parser.java | 6 | ||||
-rw-r--r-- | java/src/json/ext/Parser.rl | 2 |
3 files changed, 37 insertions, 14 deletions
diff --git a/java/src/json/ext/Generator.java b/java/src/json/ext/Generator.java index 96a5e7e..24bf049 100644 --- a/java/src/json/ext/Generator.java +++ b/java/src/json/ext/Generator.java @@ -7,6 +7,7 @@ package json.ext; import org.jruby.Ruby; import org.jruby.RubyArray; +import org.jruby.RubyBasicObject; import org.jruby.RubyBignum; import org.jruby.RubyBoolean; import org.jruby.RubyClass; @@ -15,6 +16,7 @@ import org.jruby.RubyFloat; import org.jruby.RubyHash; import org.jruby.RubyNumeric; import org.jruby.RubyString; +import org.jruby.runtime.ClassIndex; import org.jruby.runtime.ThreadContext; import org.jruby.runtime.builtin.IRubyObject; import org.jruby.util.ByteList; @@ -57,6 +59,19 @@ public final class Generator { return handler.generateNew(session, object); } + // NOTE: drop this once Ruby 1.9.3 support is gone! + private static final int FIXNUM = 1; + private static final int BIGNUM = 2; + private static final int ARRAY = 3; + private static final int STRING = 4; + private static final int NIL = 5; + private static final int TRUE = 6; + private static final int FALSE = 7; + private static final int HASH = 10; + private static final int FLOAT = 11; + // hard-coded due JRuby 1.7 compatibility + // https://github.com/jruby/jruby/blob/1.7.27/core/src/main/java/org/jruby/runtime/ClassIndex.java + /** * Returns the best serialization handler for the given object. */ @@ -65,16 +80,24 @@ public final class Generator { @SuppressWarnings("unchecked") private static <T extends IRubyObject> Handler<? super T> 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.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; + switch (((RubyBasicObject) object).getNativeTypeIndex()) { + // can not use getNativeClassIndex due 1.7 compatibility + case NIL : return (Handler) NIL_HANDLER; + case TRUE : return (Handler) TRUE_HANDLER; + case FALSE : return (Handler) FALSE_HANDLER; + case FLOAT : return (Handler) FLOAT_HANDLER; + case FIXNUM : return (Handler) FIXNUM_HANDLER; + case BIGNUM : return (Handler) BIGNUM_HANDLER; + case STRING : + if (((RubyBasicObject) object).getMetaClass() != runtime.getString()) break; + return (Handler) STRING_HANDLER; + case ARRAY : + if (((RubyBasicObject) object).getMetaClass() != runtime.getArray()) break; + return (Handler) ARRAY_HANDLER; + case HASH : + if (((RubyBasicObject) object).getMetaClass() != runtime.getHash()) break; + return (Handler) HASH_HANDLER; + } return GENERIC_HANDLER; } diff --git a/java/src/json/ext/Parser.java b/java/src/json/ext/Parser.java index 2ba9f8f..647afca 100644 --- a/java/src/json/ext/Parser.java +++ b/java/src/json/ext/Parser.java @@ -55,7 +55,7 @@ public class Parser extends RubyObject { private RubyClass objectClass; private RubyClass arrayClass; private RubyClass decimalClass; - private RubyHash matchString; + private RubyHash match_string; private static final int DEFAULT_MAX_NESTING = 100; @@ -165,7 +165,7 @@ public class Parser extends RubyObject { this.objectClass = opts.getClass("object_class", runtime.getHash()); this.arrayClass = opts.getClass("array_class", runtime.getArray()); this.decimalClass = opts.getClass("decimal_class", null); - this.matchString = opts.getHash("match_string"); + this.match_string = opts.getHash("match_string"); if(symbolizeNames && createAdditions) { throw runtime.newArgumentError( @@ -1437,7 +1437,7 @@ case 5: // line 608 "Parser.rl" if (parser.createAdditions) { - RubyHash matchString = parser.matchString; + RubyHash matchString = parser.match_string; if (matchString != null) { final IRubyObject[] memoArray = { result, null }; try { diff --git a/java/src/json/ext/Parser.rl b/java/src/json/ext/Parser.rl index 4d170e1..c0c72ad 100644 --- a/java/src/json/ext/Parser.rl +++ b/java/src/json/ext/Parser.rl @@ -607,7 +607,7 @@ public class Parser extends RubyObject { %% write exec; if (parser.createAdditions) { - RubyHash matchString = parser.matchString; + RubyHash matchString = parser.match_string; if (matchString != null) { final IRubyObject[] memoArray = { result, null }; try { |