summaryrefslogtreecommitdiff
path: root/java/src/json
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/json')
-rw-r--r--java/src/json/ext/Generator.java43
-rw-r--r--java/src/json/ext/Parser.java6
-rw-r--r--java/src/json/ext/Parser.rl2
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 {