scout 5.7.1 → 5.7.2.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (251) hide show
  1. data/CHANGELOG.markdown +5 -0
  2. data/lib/scout/command/run.rb +1 -1
  3. data/lib/scout/server.rb +2 -1
  4. data/lib/scout/streamer.rb +3 -2
  5. data/lib/scout/streamer_daemon.rb +4 -4
  6. data/lib/scout/version.rb +1 -1
  7. data/test/scout_test.rb +7 -8
  8. data/vendor/httpclient/README.txt +759 -0
  9. data/vendor/httpclient/bin/httpclient +65 -0
  10. data/vendor/httpclient/lib/hexdump.rb +50 -0
  11. data/vendor/httpclient/lib/http-access2.rb +55 -0
  12. data/vendor/httpclient/lib/http-access2/cookie.rb +1 -0
  13. data/vendor/httpclient/lib/http-access2/http.rb +1 -0
  14. data/vendor/httpclient/lib/httpclient.rb +1156 -0
  15. data/vendor/httpclient/lib/httpclient/auth.rb +899 -0
  16. data/vendor/httpclient/lib/httpclient/cacert.p7s +1912 -0
  17. data/vendor/httpclient/lib/httpclient/connection.rb +88 -0
  18. data/vendor/httpclient/lib/httpclient/cookie.rb +438 -0
  19. data/vendor/httpclient/lib/httpclient/http.rb +1046 -0
  20. data/vendor/httpclient/lib/httpclient/include_client.rb +83 -0
  21. data/vendor/httpclient/lib/httpclient/session.rb +1025 -0
  22. data/vendor/httpclient/lib/httpclient/ssl_config.rb +403 -0
  23. data/vendor/httpclient/lib/httpclient/timeout.rb +140 -0
  24. data/vendor/httpclient/lib/httpclient/util.rb +178 -0
  25. data/vendor/httpclient/lib/httpclient/version.rb +3 -0
  26. data/vendor/httpclient/lib/oauthclient.rb +110 -0
  27. data/vendor/httpclient/sample/async.rb +8 -0
  28. data/vendor/httpclient/sample/auth.rb +11 -0
  29. data/vendor/httpclient/sample/cookie.rb +18 -0
  30. data/vendor/httpclient/sample/dav.rb +103 -0
  31. data/vendor/httpclient/sample/howto.rb +49 -0
  32. data/vendor/httpclient/sample/oauth_buzz.rb +57 -0
  33. data/vendor/httpclient/sample/oauth_friendfeed.rb +59 -0
  34. data/vendor/httpclient/sample/oauth_salesforce_10.rb +63 -0
  35. data/vendor/httpclient/sample/oauth_twitter.rb +61 -0
  36. data/vendor/httpclient/sample/ssl/0cert.pem +22 -0
  37. data/vendor/httpclient/sample/ssl/0key.pem +30 -0
  38. data/vendor/httpclient/sample/ssl/1000cert.pem +19 -0
  39. data/vendor/httpclient/sample/ssl/1000key.pem +18 -0
  40. data/vendor/httpclient/sample/ssl/htdocs/index.html +10 -0
  41. data/vendor/httpclient/sample/ssl/ssl_client.rb +22 -0
  42. data/vendor/httpclient/sample/ssl/webrick_httpsd.rb +29 -0
  43. data/vendor/httpclient/sample/stream.rb +21 -0
  44. data/vendor/httpclient/sample/thread.rb +27 -0
  45. data/vendor/httpclient/sample/wcat.rb +21 -0
  46. data/vendor/httpclient/test/ca-chain.cert +44 -0
  47. data/vendor/httpclient/test/ca.cert +23 -0
  48. data/vendor/httpclient/test/client.cert +19 -0
  49. data/vendor/httpclient/test/client.key +15 -0
  50. data/vendor/httpclient/test/helper.rb +129 -0
  51. data/vendor/httpclient/test/htdigest +1 -0
  52. data/vendor/httpclient/test/htpasswd +2 -0
  53. data/vendor/httpclient/test/runner.rb +2 -0
  54. data/vendor/httpclient/test/server.cert +19 -0
  55. data/vendor/httpclient/test/server.key +15 -0
  56. data/vendor/httpclient/test/sslsvr.rb +65 -0
  57. data/vendor/httpclient/test/subca.cert +21 -0
  58. data/vendor/httpclient/test/test_auth.rb +321 -0
  59. data/vendor/httpclient/test/test_cookie.rb +391 -0
  60. data/vendor/httpclient/test/test_hexdump.rb +14 -0
  61. data/vendor/httpclient/test/test_http-access2.rb +507 -0
  62. data/vendor/httpclient/test/test_httpclient.rb +1783 -0
  63. data/vendor/httpclient/test/test_include_client.rb +52 -0
  64. data/vendor/httpclient/test/test_ssl.rb +235 -0
  65. data/vendor/multi_json/.document +5 -0
  66. data/vendor/multi_json/.rspec +3 -0
  67. data/vendor/multi_json/.travis.yml +11 -0
  68. data/vendor/multi_json/.yardopts +6 -0
  69. data/vendor/multi_json/CHANGELOG.md +169 -0
  70. data/vendor/multi_json/CONTRIBUTING.md +46 -0
  71. data/vendor/multi_json/Gemfile +31 -0
  72. data/vendor/multi_json/LICENSE.md +20 -0
  73. data/vendor/multi_json/README.md +109 -0
  74. data/vendor/multi_json/Rakefile +12 -0
  75. data/vendor/multi_json/lib/multi_json.rb +157 -0
  76. data/vendor/multi_json/lib/multi_json/adapter.rb +48 -0
  77. data/vendor/multi_json/lib/multi_json/adapters/gson.rb +19 -0
  78. data/vendor/multi_json/lib/multi_json/adapters/jr_jackson.rb +19 -0
  79. data/vendor/multi_json/lib/multi_json/adapters/json_common.rb +25 -0
  80. data/vendor/multi_json/lib/multi_json/adapters/json_gem.rb +11 -0
  81. data/vendor/multi_json/lib/multi_json/adapters/json_pure.rb +11 -0
  82. data/vendor/multi_json/lib/multi_json/adapters/nsjsonserialization.rb +34 -0
  83. data/vendor/multi_json/lib/multi_json/adapters/oj.rb +24 -0
  84. data/vendor/multi_json/lib/multi_json/adapters/ok_json.rb +22 -0
  85. data/vendor/multi_json/lib/multi_json/adapters/yajl.rb +19 -0
  86. data/vendor/multi_json/lib/multi_json/convertible_hash_keys.rb +43 -0
  87. data/vendor/multi_json/lib/multi_json/load_error.rb +11 -0
  88. data/vendor/multi_json/lib/multi_json/options.rb +48 -0
  89. data/vendor/multi_json/lib/multi_json/vendor/okjson.rb +606 -0
  90. data/vendor/multi_json/lib/multi_json/version.rb +20 -0
  91. data/vendor/multi_json/multi_json.gemspec +22 -0
  92. data/vendor/multi_json/spec/adapter_shared_example.rb +235 -0
  93. data/vendor/multi_json/spec/has_options.rb +119 -0
  94. data/vendor/multi_json/spec/helper.rb +35 -0
  95. data/vendor/multi_json/spec/json_common_shared_example.rb +30 -0
  96. data/vendor/multi_json/spec/multi_json_spec.rb +226 -0
  97. data/vendor/{signature → pusher}/.document +0 -0
  98. data/vendor/{json_pure/diagrams/.keep → pusher/.gemtest} +0 -0
  99. data/vendor/pusher/.gitignore +23 -0
  100. data/vendor/pusher/.travis.yml +15 -0
  101. data/vendor/pusher/Gemfile +2 -0
  102. data/vendor/{pusher-gem → pusher}/LICENSE +1 -1
  103. data/vendor/pusher/README.md +186 -0
  104. data/vendor/{pusher-gem → pusher}/Rakefile +0 -0
  105. data/vendor/{pusher-gem → pusher}/examples/async_message.rb +0 -0
  106. data/vendor/pusher/lib/pusher.rb +60 -0
  107. data/vendor/{pusher-gem → pusher}/lib/pusher/channel.rb +47 -54
  108. data/vendor/pusher/lib/pusher/client.rb +306 -0
  109. data/vendor/pusher/lib/pusher/request.rb +107 -0
  110. data/vendor/pusher/lib/pusher/resource.rb +36 -0
  111. data/vendor/pusher/lib/pusher/webhook.rb +110 -0
  112. data/vendor/{pusher-gem → pusher}/pusher.gemspec +6 -5
  113. data/vendor/pusher/spec/channel_spec.rb +127 -0
  114. data/vendor/pusher/spec/client_spec.rb +464 -0
  115. data/vendor/{pusher-gem → pusher}/spec/spec_helper.rb +12 -0
  116. data/vendor/pusher/spec/web_hook_spec.rb +117 -0
  117. data/vendor/signature/.travis.yml +15 -0
  118. data/vendor/signature/Gemfile +1 -1
  119. data/vendor/signature/README.md +38 -28
  120. data/vendor/signature/lib/signature.rb +97 -15
  121. data/vendor/signature/lib/signature/query_encoder.rb +47 -0
  122. data/vendor/signature/lib/signature/version.rb +1 -1
  123. data/vendor/signature/signature.gemspec +3 -2
  124. data/vendor/signature/spec/signature_spec.rb +164 -55
  125. data/vendor/signature/spec/spec_helper.rb +2 -3
  126. metadata +120 -145
  127. data/vendor/json_pure/.gitignore +0 -12
  128. data/vendor/json_pure/.travis.yml +0 -20
  129. data/vendor/json_pure/CHANGES +0 -282
  130. data/vendor/json_pure/COPYING +0 -58
  131. data/vendor/json_pure/COPYING-json-jruby +0 -57
  132. data/vendor/json_pure/GPL +0 -340
  133. data/vendor/json_pure/Gemfile +0 -11
  134. data/vendor/json_pure/README-json-jruby.markdown +0 -33
  135. data/vendor/json_pure/README.rdoc +0 -358
  136. data/vendor/json_pure/Rakefile +0 -412
  137. data/vendor/json_pure/TODO +0 -1
  138. data/vendor/json_pure/VERSION +0 -1
  139. data/vendor/json_pure/data/example.json +0 -1
  140. data/vendor/json_pure/data/index.html +0 -38
  141. data/vendor/json_pure/data/prototype.js +0 -4184
  142. data/vendor/json_pure/ext/json/ext/fbuffer/fbuffer.h +0 -181
  143. data/vendor/json_pure/ext/json/ext/generator/depend +0 -1
  144. data/vendor/json_pure/ext/json/ext/generator/extconf.rb +0 -14
  145. data/vendor/json_pure/ext/json/ext/generator/generator.c +0 -1435
  146. data/vendor/json_pure/ext/json/ext/generator/generator.h +0 -148
  147. data/vendor/json_pure/ext/json/ext/parser/depend +0 -1
  148. data/vendor/json_pure/ext/json/ext/parser/extconf.rb +0 -13
  149. data/vendor/json_pure/ext/json/ext/parser/parser.c +0 -2204
  150. data/vendor/json_pure/ext/json/ext/parser/parser.h +0 -77
  151. data/vendor/json_pure/ext/json/ext/parser/parser.rl +0 -927
  152. data/vendor/json_pure/install.rb +0 -23
  153. data/vendor/json_pure/java/src/json/ext/ByteListTranscoder.java +0 -167
  154. data/vendor/json_pure/java/src/json/ext/Generator.java +0 -444
  155. data/vendor/json_pure/java/src/json/ext/GeneratorMethods.java +0 -232
  156. data/vendor/json_pure/java/src/json/ext/GeneratorService.java +0 -43
  157. data/vendor/json_pure/java/src/json/ext/GeneratorState.java +0 -543
  158. data/vendor/json_pure/java/src/json/ext/OptionsReader.java +0 -114
  159. data/vendor/json_pure/java/src/json/ext/Parser.java +0 -2644
  160. data/vendor/json_pure/java/src/json/ext/Parser.rl +0 -968
  161. data/vendor/json_pure/java/src/json/ext/ParserService.java +0 -35
  162. data/vendor/json_pure/java/src/json/ext/RuntimeInfo.java +0 -121
  163. data/vendor/json_pure/java/src/json/ext/StringDecoder.java +0 -167
  164. data/vendor/json_pure/java/src/json/ext/StringEncoder.java +0 -106
  165. data/vendor/json_pure/java/src/json/ext/Utils.java +0 -89
  166. data/vendor/json_pure/json-java.gemspec +0 -23
  167. data/vendor/json_pure/json.gemspec +0 -37
  168. data/vendor/json_pure/json_pure.gemspec +0 -39
  169. data/vendor/json_pure/lib/json.rb +0 -62
  170. data/vendor/json_pure/lib/json/add/bigdecimal.rb +0 -28
  171. data/vendor/json_pure/lib/json/add/complex.rb +0 -22
  172. data/vendor/json_pure/lib/json/add/core.rb +0 -11
  173. data/vendor/json_pure/lib/json/add/date.rb +0 -34
  174. data/vendor/json_pure/lib/json/add/date_time.rb +0 -50
  175. data/vendor/json_pure/lib/json/add/exception.rb +0 -31
  176. data/vendor/json_pure/lib/json/add/ostruct.rb +0 -31
  177. data/vendor/json_pure/lib/json/add/range.rb +0 -29
  178. data/vendor/json_pure/lib/json/add/rational.rb +0 -22
  179. data/vendor/json_pure/lib/json/add/regexp.rb +0 -30
  180. data/vendor/json_pure/lib/json/add/struct.rb +0 -30
  181. data/vendor/json_pure/lib/json/add/symbol.rb +0 -25
  182. data/vendor/json_pure/lib/json/add/time.rb +0 -38
  183. data/vendor/json_pure/lib/json/common.rb +0 -487
  184. data/vendor/json_pure/lib/json/ext.rb +0 -21
  185. data/vendor/json_pure/lib/json/ext/.keep +0 -0
  186. data/vendor/json_pure/lib/json/generic_object.rb +0 -70
  187. data/vendor/json_pure/lib/json/pure.rb +0 -21
  188. data/vendor/json_pure/lib/json/pure/generator.rb +0 -522
  189. data/vendor/json_pure/lib/json/pure/parser.rb +0 -359
  190. data/vendor/json_pure/lib/json/version.rb +0 -8
  191. data/vendor/json_pure/tests/fixtures/fail1.json +0 -1
  192. data/vendor/json_pure/tests/fixtures/fail10.json +0 -1
  193. data/vendor/json_pure/tests/fixtures/fail11.json +0 -1
  194. data/vendor/json_pure/tests/fixtures/fail12.json +0 -1
  195. data/vendor/json_pure/tests/fixtures/fail13.json +0 -1
  196. data/vendor/json_pure/tests/fixtures/fail14.json +0 -1
  197. data/vendor/json_pure/tests/fixtures/fail18.json +0 -1
  198. data/vendor/json_pure/tests/fixtures/fail19.json +0 -1
  199. data/vendor/json_pure/tests/fixtures/fail2.json +0 -1
  200. data/vendor/json_pure/tests/fixtures/fail20.json +0 -1
  201. data/vendor/json_pure/tests/fixtures/fail21.json +0 -1
  202. data/vendor/json_pure/tests/fixtures/fail22.json +0 -1
  203. data/vendor/json_pure/tests/fixtures/fail23.json +0 -1
  204. data/vendor/json_pure/tests/fixtures/fail24.json +0 -1
  205. data/vendor/json_pure/tests/fixtures/fail25.json +0 -1
  206. data/vendor/json_pure/tests/fixtures/fail27.json +0 -2
  207. data/vendor/json_pure/tests/fixtures/fail28.json +0 -2
  208. data/vendor/json_pure/tests/fixtures/fail3.json +0 -1
  209. data/vendor/json_pure/tests/fixtures/fail4.json +0 -1
  210. data/vendor/json_pure/tests/fixtures/fail5.json +0 -1
  211. data/vendor/json_pure/tests/fixtures/fail6.json +0 -1
  212. data/vendor/json_pure/tests/fixtures/fail7.json +0 -1
  213. data/vendor/json_pure/tests/fixtures/fail8.json +0 -1
  214. data/vendor/json_pure/tests/fixtures/fail9.json +0 -1
  215. data/vendor/json_pure/tests/fixtures/pass1.json +0 -56
  216. data/vendor/json_pure/tests/fixtures/pass15.json +0 -1
  217. data/vendor/json_pure/tests/fixtures/pass16.json +0 -1
  218. data/vendor/json_pure/tests/fixtures/pass17.json +0 -1
  219. data/vendor/json_pure/tests/fixtures/pass2.json +0 -1
  220. data/vendor/json_pure/tests/fixtures/pass26.json +0 -1
  221. data/vendor/json_pure/tests/fixtures/pass3.json +0 -6
  222. data/vendor/json_pure/tests/setup_variant.rb +0 -11
  223. data/vendor/json_pure/tests/test_json.rb +0 -545
  224. data/vendor/json_pure/tests/test_json_addition.rb +0 -196
  225. data/vendor/json_pure/tests/test_json_encoding.rb +0 -65
  226. data/vendor/json_pure/tests/test_json_fixtures.rb +0 -35
  227. data/vendor/json_pure/tests/test_json_generate.rb +0 -322
  228. data/vendor/json_pure/tests/test_json_generic_object.rb +0 -75
  229. data/vendor/json_pure/tests/test_json_string_matching.rb +0 -39
  230. data/vendor/json_pure/tests/test_json_unicode.rb +0 -72
  231. data/vendor/json_pure/tools/fuzz.rb +0 -139
  232. data/vendor/json_pure/tools/server.rb +0 -62
  233. data/vendor/pusher-gem/Gemfile +0 -2
  234. data/vendor/pusher-gem/README.md +0 -80
  235. data/vendor/pusher-gem/lib/pusher.rb +0 -107
  236. data/vendor/pusher-gem/lib/pusher/request.rb +0 -107
  237. data/vendor/pusher-gem/spec/channel_spec.rb +0 -274
  238. data/vendor/pusher-gem/spec/pusher_spec.rb +0 -87
  239. data/vendor/ruby-hmac/History.txt +0 -15
  240. data/vendor/ruby-hmac/Manifest.txt +0 -11
  241. data/vendor/ruby-hmac/README.md +0 -41
  242. data/vendor/ruby-hmac/Rakefile +0 -23
  243. data/vendor/ruby-hmac/lib/hmac-md5.rb +0 -11
  244. data/vendor/ruby-hmac/lib/hmac-rmd160.rb +0 -11
  245. data/vendor/ruby-hmac/lib/hmac-sha1.rb +0 -11
  246. data/vendor/ruby-hmac/lib/hmac-sha2.rb +0 -25
  247. data/vendor/ruby-hmac/lib/hmac.rb +0 -118
  248. data/vendor/ruby-hmac/lib/ruby_hmac.rb +0 -2
  249. data/vendor/ruby-hmac/ruby-hmac.gemspec +0 -33
  250. data/vendor/ruby-hmac/test/test_hmac.rb +0 -89
  251. data/vendor/signature/VERSION +0 -1
@@ -1,114 +0,0 @@
1
- /*
2
- * This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
3
- *
4
- * Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
5
- * for details.
6
- */
7
- package json.ext;
8
-
9
- import org.jruby.Ruby;
10
- import org.jruby.RubyClass;
11
- import org.jruby.RubyHash;
12
- import org.jruby.RubyNumeric;
13
- import org.jruby.RubyString;
14
- import org.jruby.runtime.ThreadContext;
15
- import org.jruby.runtime.builtin.IRubyObject;
16
- import org.jruby.util.ByteList;
17
-
18
- final class OptionsReader {
19
- private final ThreadContext context;
20
- private final Ruby runtime;
21
- private final RubyHash opts;
22
- private RuntimeInfo info;
23
-
24
- OptionsReader(ThreadContext context, IRubyObject vOpts) {
25
- this.context = context;
26
- this.runtime = context.getRuntime();
27
- if (vOpts == null || vOpts.isNil()) {
28
- opts = null;
29
- } else if (vOpts.respondsTo("to_hash")) {
30
- opts = vOpts.convertToHash();
31
- } else if (vOpts.respondsTo("to_h")) {
32
- opts = vOpts.callMethod(context, "to_h").convertToHash();
33
- } else {
34
- opts = vOpts.convertToHash(); /* Should just raise the correct TypeError */
35
- }
36
- }
37
-
38
- private RuntimeInfo getRuntimeInfo() {
39
- if (info != null) return info;
40
- info = RuntimeInfo.forRuntime(runtime);
41
- return info;
42
- }
43
-
44
- /**
45
- * Efficiently looks up items with a {@link RubySymbol Symbol} key
46
- * @param key The Symbol name to look up for
47
- * @return The item in the {@link RubyHash Hash}, or <code>null</code>
48
- * if not found
49
- */
50
- IRubyObject get(String key) {
51
- return opts == null ? null : opts.fastARef(runtime.newSymbol(key));
52
- }
53
-
54
- boolean getBool(String key, boolean defaultValue) {
55
- IRubyObject value = get(key);
56
- return value == null ? defaultValue : value.isTrue();
57
- }
58
-
59
- int getInt(String key, int defaultValue) {
60
- IRubyObject value = get(key);
61
- if (value == null) return defaultValue;
62
- if (!value.isTrue()) return 0;
63
- return RubyNumeric.fix2int(value);
64
- }
65
-
66
- /**
67
- * Reads the setting from the options hash. If no entry is set for this
68
- * key or if it evaluates to <code>false</code>, returns null; attempts to
69
- * coerce the value to {@link RubyString String} otherwise.
70
- * @param key The Symbol name to look up for
71
- * @return <code>null</code> if the key is not in the Hash or if
72
- * its value evaluates to <code>false</code>
73
- * @throws RaiseException <code>TypeError</code> if the value does not
74
- * evaluate to <code>false</code> and can't be
75
- * converted to string
76
- */
77
- ByteList getString(String key) {
78
- RubyString str = getString(key, null);
79
- return str == null ? null : str.getByteList().dup();
80
- }
81
-
82
- RubyString getString(String key, RubyString defaultValue) {
83
- IRubyObject value = get(key);
84
- if (value == null || !value.isTrue()) return defaultValue;
85
-
86
- RubyString str = value.convertToString();
87
- RuntimeInfo info = getRuntimeInfo();
88
- if (info.encodingsSupported() && str.encoding(context) != info.utf8.get()) {
89
- str = (RubyString)str.encode(context, info.utf8.get());
90
- }
91
- return str;
92
- }
93
-
94
- /**
95
- * Reads the setting from the options hash. If it is <code>nil</code> or
96
- * undefined, returns the default value given.
97
- * If not, ensures it is a RubyClass instance and shares the same
98
- * allocator as the default value (i.e. for the basic types which have
99
- * their specific allocators, this ensures the passed value is
100
- * a subclass of them).
101
- */
102
- RubyClass getClass(String key, RubyClass defaultValue) {
103
- IRubyObject value = get(key);
104
-
105
- if (value == null || value.isNil()) return defaultValue;
106
- return (RubyClass)value;
107
- }
108
-
109
- public RubyHash getHash(String key) {
110
- IRubyObject value = get(key);
111
- if (value == null || value.isNil()) return new RubyHash(runtime);
112
- return (RubyHash) value;
113
- }
114
- }
@@ -1,2644 +0,0 @@
1
-
2
- // line 1 "Parser.rl"
3
- /*
4
- * This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
5
- *
6
- * Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
7
- * for details.
8
- */
9
- package json.ext;
10
-
11
- import org.jruby.Ruby;
12
- import org.jruby.RubyArray;
13
- import org.jruby.RubyClass;
14
- import org.jruby.RubyEncoding;
15
- import org.jruby.RubyFloat;
16
- import org.jruby.RubyHash;
17
- import org.jruby.RubyInteger;
18
- import org.jruby.RubyModule;
19
- import org.jruby.RubyNumeric;
20
- import org.jruby.RubyObject;
21
- import org.jruby.RubyString;
22
- import org.jruby.anno.JRubyMethod;
23
- import org.jruby.exceptions.JumpException;
24
- import org.jruby.exceptions.RaiseException;
25
- import org.jruby.runtime.Block;
26
- import org.jruby.runtime.ObjectAllocator;
27
- import org.jruby.runtime.ThreadContext;
28
- import org.jruby.runtime.Visibility;
29
- import org.jruby.runtime.builtin.IRubyObject;
30
- import org.jruby.util.ByteList;
31
- import org.jruby.util.ConvertBytes;
32
- import static org.jruby.util.ConvertDouble.DoubleConverter;
33
-
34
- /**
35
- * The <code>JSON::Ext::Parser</code> class.
36
- *
37
- * <p>This is the JSON parser implemented as a Java class. To use it as the
38
- * standard parser, set
39
- * <pre>JSON.parser = JSON::Ext::Parser</pre>
40
- * This is performed for you when you <code>include "json/ext"</code>.
41
- *
42
- * <p>This class does not perform the actual parsing, just acts as an interface
43
- * to Ruby code. When the {@link #parse()} method is invoked, a
44
- * Parser.ParserSession object is instantiated, which handles the process.
45
- *
46
- * @author mernen
47
- */
48
- public class Parser extends RubyObject {
49
- private final RuntimeInfo info;
50
- private RubyString vSource;
51
- private RubyString createId;
52
- private boolean createAdditions;
53
- private int maxNesting;
54
- private boolean allowNaN;
55
- private boolean symbolizeNames;
56
- private boolean quirksMode;
57
- private RubyClass objectClass;
58
- private RubyClass arrayClass;
59
- private RubyHash match_string;
60
-
61
- private static final int DEFAULT_MAX_NESTING = 100;
62
-
63
- private static final ByteList JSON_MINUS_INFINITY = new ByteList(ByteList.plain("-Infinity"));
64
- // constant names in the JSON module containing those values
65
- private static final String CONST_NAN = "NaN";
66
- private static final String CONST_INFINITY = "Infinity";
67
- private static final String CONST_MINUS_INFINITY = "MinusInfinity";
68
-
69
- static final ObjectAllocator ALLOCATOR = new ObjectAllocator() {
70
- public IRubyObject allocate(Ruby runtime, RubyClass klazz) {
71
- return new Parser(runtime, klazz);
72
- }
73
- };
74
-
75
- /**
76
- * Multiple-value return for internal parser methods.
77
- *
78
- * <p>All the <code>parse<var>Stuff</var></code> methods return instances of
79
- * <code>ParserResult</code> when successful, or <code>null</code> when
80
- * there's a problem with the input data.
81
- */
82
- static final class ParserResult {
83
- /**
84
- * The result of the successful parsing. Should never be
85
- * <code>null</code>.
86
- */
87
- IRubyObject result;
88
- /**
89
- * The point where the parser returned.
90
- */
91
- int p;
92
-
93
- void update(IRubyObject result, int p) {
94
- this.result = result;
95
- this.p = p;
96
- }
97
- }
98
-
99
- public Parser(Ruby runtime, RubyClass metaClass) {
100
- super(runtime, metaClass);
101
- info = RuntimeInfo.forRuntime(runtime);
102
- }
103
-
104
- /**
105
- * <code>Parser.new(source, opts = {})</code>
106
- *
107
- * <p>Creates a new <code>JSON::Ext::Parser</code> instance for the string
108
- * <code>source</code>.
109
- * It will be configured by the <code>opts</code> Hash.
110
- * <code>opts</code> can have the following keys:
111
- *
112
- * <dl>
113
- * <dt><code>:max_nesting</code>
114
- * <dd>The maximum depth of nesting allowed in the parsed data
115
- * structures. Disable depth checking with <code>:max_nesting => false|nil|0</code>,
116
- * it defaults to 100.
117
- *
118
- * <dt><code>:allow_nan</code>
119
- * <dd>If set to <code>true</code>, allow <code>NaN</code>,
120
- * <code>Infinity</code> and <code>-Infinity</code> in defiance of RFC 4627
121
- * to be parsed by the Parser. This option defaults to <code>false</code>.
122
- *
123
- * <dt><code>:symbolize_names</code>
124
- * <dd>If set to <code>true</code>, returns symbols for the names (keys) in
125
- * a JSON object. Otherwise strings are returned, which is also the default.
126
- *
127
- * <dt><code>:quirks_mode?</code>
128
- * <dd>If set to <code>true</code>, if the parse is in quirks_mode, false
129
- * otherwise.
130
- *
131
- * <dt><code>:create_additions</code>
132
- * <dd>If set to <code>false</code>, the Parser doesn't create additions
133
- * even if a matchin class and <code>create_id</code> was found. This option
134
- * defaults to <code>true</code>.
135
- *
136
- * <dt><code>:object_class</code>
137
- * <dd>Defaults to Hash.
138
- *
139
- * <dt><code>:array_class</code>
140
- * <dd>Defaults to Array.
141
- *
142
- * <dt><code>:quirks_mode</code>
143
- * <dd>Enables quirks_mode for parser, that is for example parsing single
144
- * JSON values instead of documents is possible.
145
- * </dl>
146
- */
147
- @JRubyMethod(name = "new", required = 1, optional = 1, meta = true)
148
- public static IRubyObject newInstance(IRubyObject clazz, IRubyObject[] args, Block block) {
149
- Parser parser = (Parser)((RubyClass)clazz).allocate();
150
-
151
- parser.callInit(args, block);
152
-
153
- return parser;
154
- }
155
-
156
- @JRubyMethod(required = 1, optional = 1, visibility = Visibility.PRIVATE)
157
- public IRubyObject initialize(ThreadContext context, IRubyObject[] args) {
158
- Ruby runtime = context.getRuntime();
159
- if (this.vSource != null) {
160
- throw runtime.newTypeError("already initialized instance");
161
- }
162
-
163
- OptionsReader opts = new OptionsReader(context, args.length > 1 ? args[1] : null);
164
- this.maxNesting = opts.getInt("max_nesting", DEFAULT_MAX_NESTING);
165
- this.allowNaN = opts.getBool("allow_nan", false);
166
- this.symbolizeNames = opts.getBool("symbolize_names", false);
167
- this.quirksMode = opts.getBool("quirks_mode", false);
168
- this.createId = opts.getString("create_id", getCreateId(context));
169
- this.createAdditions = opts.getBool("create_additions", false);
170
- this.objectClass = opts.getClass("object_class", runtime.getHash());
171
- this.arrayClass = opts.getClass("array_class", runtime.getArray());
172
- this.match_string = opts.getHash("match_string");
173
-
174
- this.vSource = args[0].convertToString();
175
- if (!quirksMode) this.vSource = convertEncoding(context, vSource);
176
-
177
- return this;
178
- }
179
-
180
- /**
181
- * Checks the given string's encoding. If a non-UTF-8 encoding is detected,
182
- * a converted copy is returned.
183
- * Returns the source string if no conversion is needed.
184
- */
185
- private RubyString convertEncoding(ThreadContext context, RubyString source) {
186
- ByteList bl = source.getByteList();
187
- int len = bl.length();
188
- if (len < 2) {
189
- throw Utils.newException(context, Utils.M_PARSER_ERROR,
190
- "A JSON text must at least contain two octets!");
191
- }
192
-
193
- if (info.encodingsSupported()) {
194
- RubyEncoding encoding = (RubyEncoding)source.encoding(context);
195
- if (encoding != info.ascii8bit.get()) {
196
- return (RubyString)source.encode(context, info.utf8.get());
197
- }
198
-
199
- String sniffedEncoding = sniffByteList(bl);
200
- if (sniffedEncoding == null) return source; // assume UTF-8
201
- return reinterpretEncoding(context, source, sniffedEncoding);
202
- }
203
-
204
- String sniffedEncoding = sniffByteList(bl);
205
- if (sniffedEncoding == null) return source; // assume UTF-8
206
- Ruby runtime = context.getRuntime();
207
- return (RubyString)info.jsonModule.get().
208
- callMethod(context, "iconv",
209
- new IRubyObject[] {
210
- runtime.newString("utf-8"),
211
- runtime.newString(sniffedEncoding),
212
- source});
213
- }
214
-
215
- /**
216
- * Checks the first four bytes of the given ByteList to infer its encoding,
217
- * using the principle demonstrated on section 3 of RFC 4627 (JSON).
218
- */
219
- private static String sniffByteList(ByteList bl) {
220
- if (bl.length() < 4) return null;
221
- if (bl.get(0) == 0 && bl.get(2) == 0) {
222
- return bl.get(1) == 0 ? "utf-32be" : "utf-16be";
223
- }
224
- if (bl.get(1) == 0 && bl.get(3) == 0) {
225
- return bl.get(2) == 0 ? "utf-32le" : "utf-16le";
226
- }
227
- return null;
228
- }
229
-
230
- /**
231
- * Assumes the given (binary) RubyString to be in the given encoding, then
232
- * converts it to UTF-8.
233
- */
234
- private RubyString reinterpretEncoding(ThreadContext context,
235
- RubyString str, String sniffedEncoding) {
236
- RubyEncoding actualEncoding = info.getEncoding(context, sniffedEncoding);
237
- RubyEncoding targetEncoding = info.utf8.get();
238
- RubyString dup = (RubyString)str.dup();
239
- dup.force_encoding(context, actualEncoding);
240
- return (RubyString)dup.encode_bang(context, targetEncoding);
241
- }
242
-
243
- /**
244
- * <code>Parser#parse()</code>
245
- *
246
- * <p>Parses the current JSON text <code>source</code> and returns the
247
- * complete data structure as a result.
248
- */
249
- @JRubyMethod
250
- public IRubyObject parse(ThreadContext context) {
251
- return new ParserSession(this, context).parse();
252
- }
253
-
254
- /**
255
- * <code>Parser#source()</code>
256
- *
257
- * <p>Returns a copy of the current <code>source</code> string, that was
258
- * used to construct this Parser.
259
- */
260
- @JRubyMethod(name = "source")
261
- public IRubyObject source_get() {
262
- return checkAndGetSource().dup();
263
- }
264
-
265
- /**
266
- * <code>Parser#quirks_mode?()</code>
267
- *
268
- * <p>If set to <code>true</code>, if the parse is in quirks_mode, false
269
- * otherwise.
270
- */
271
- @JRubyMethod(name = "quirks_mode?")
272
- public IRubyObject quirks_mode_p(ThreadContext context) {
273
- return context.getRuntime().newBoolean(quirksMode);
274
- }
275
-
276
- public RubyString checkAndGetSource() {
277
- if (vSource != null) {
278
- return vSource;
279
- } else {
280
- throw getRuntime().newTypeError("uninitialized instance");
281
- }
282
- }
283
-
284
- /**
285
- * Queries <code>JSON.create_id</code>. Returns <code>null</code> if it is
286
- * set to <code>nil</code> or <code>false</code>, and a String if not.
287
- */
288
- private RubyString getCreateId(ThreadContext context) {
289
- IRubyObject v = info.jsonModule.get().callMethod(context, "create_id");
290
- return v.isTrue() ? v.convertToString() : null;
291
- }
292
-
293
- /**
294
- * A string parsing session.
295
- *
296
- * <p>Once a ParserSession is instantiated, the source string should not
297
- * change until the parsing is complete. The ParserSession object assumes
298
- * the source {@link RubyString} is still associated to its original
299
- * {@link ByteList}, which in turn must still be bound to the same
300
- * <code>byte[]</code> value (and on the same offset).
301
- */
302
- // Ragel uses lots of fall-through
303
- @SuppressWarnings("fallthrough")
304
- private static class ParserSession {
305
- private final Parser parser;
306
- private final ThreadContext context;
307
- private final ByteList byteList;
308
- private final ByteList view;
309
- private final byte[] data;
310
- private final StringDecoder decoder;
311
- private int currentNesting = 0;
312
- private final DoubleConverter dc;
313
-
314
- // initialization value for all state variables.
315
- // no idea about the origins of this value, ask Flori ;)
316
- private static final int EVIL = 0x666;
317
-
318
- private ParserSession(Parser parser, ThreadContext context) {
319
- this.parser = parser;
320
- this.context = context;
321
- this.byteList = parser.checkAndGetSource().getByteList();
322
- this.data = byteList.unsafeBytes();
323
- this.view = new ByteList(data, false);
324
- this.decoder = new StringDecoder(context);
325
- this.dc = new DoubleConverter();
326
- }
327
-
328
- private RaiseException unexpectedToken(int absStart, int absEnd) {
329
- RubyString msg = getRuntime().newString("unexpected token at '")
330
- .cat(data, absStart, absEnd - absStart)
331
- .cat((byte)'\'');
332
- return newException(Utils.M_PARSER_ERROR, msg);
333
- }
334
-
335
- private Ruby getRuntime() {
336
- return context.getRuntime();
337
- }
338
-
339
-
340
- // line 363 "Parser.rl"
341
-
342
-
343
-
344
- // line 345 "Parser.java"
345
- private static byte[] init__JSON_value_actions_0()
346
- {
347
- return new byte [] {
348
- 0, 1, 0, 1, 1, 1, 2, 1, 3, 1, 4, 1,
349
- 5, 1, 6, 1, 7, 1, 8, 1, 9
350
- };
351
- }
352
-
353
- private static final byte _JSON_value_actions[] = init__JSON_value_actions_0();
354
-
355
-
356
- private static byte[] init__JSON_value_key_offsets_0()
357
- {
358
- return new byte [] {
359
- 0, 0, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
360
- 21, 22, 23, 24, 25, 26, 27, 28, 29, 30
361
- };
362
- }
363
-
364
- private static final byte _JSON_value_key_offsets[] = init__JSON_value_key_offsets_0();
365
-
366
-
367
- private static char[] init__JSON_value_trans_keys_0()
368
- {
369
- return new char [] {
370
- 34, 45, 73, 78, 91, 102, 110, 116, 123, 48, 57, 110,
371
- 102, 105, 110, 105, 116, 121, 97, 78, 97, 108, 115, 101,
372
- 117, 108, 108, 114, 117, 101, 0
373
- };
374
- }
375
-
376
- private static final char _JSON_value_trans_keys[] = init__JSON_value_trans_keys_0();
377
-
378
-
379
- private static byte[] init__JSON_value_single_lengths_0()
380
- {
381
- return new byte [] {
382
- 0, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
383
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 0
384
- };
385
- }
386
-
387
- private static final byte _JSON_value_single_lengths[] = init__JSON_value_single_lengths_0();
388
-
389
-
390
- private static byte[] init__JSON_value_range_lengths_0()
391
- {
392
- return new byte [] {
393
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
394
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
395
- };
396
- }
397
-
398
- private static final byte _JSON_value_range_lengths[] = init__JSON_value_range_lengths_0();
399
-
400
-
401
- private static byte[] init__JSON_value_index_offsets_0()
402
- {
403
- return new byte [] {
404
- 0, 0, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29,
405
- 31, 33, 35, 37, 39, 41, 43, 45, 47, 49
406
- };
407
- }
408
-
409
- private static final byte _JSON_value_index_offsets[] = init__JSON_value_index_offsets_0();
410
-
411
-
412
- private static byte[] init__JSON_value_trans_targs_0()
413
- {
414
- return new byte [] {
415
- 21, 21, 2, 9, 21, 11, 15, 18, 21, 21, 0, 3,
416
- 0, 4, 0, 5, 0, 6, 0, 7, 0, 8, 0, 21,
417
- 0, 10, 0, 21, 0, 12, 0, 13, 0, 14, 0, 21,
418
- 0, 16, 0, 17, 0, 21, 0, 19, 0, 20, 0, 21,
419
- 0, 0, 0
420
- };
421
- }
422
-
423
- private static final byte _JSON_value_trans_targs[] = init__JSON_value_trans_targs_0();
424
-
425
-
426
- private static byte[] init__JSON_value_trans_actions_0()
427
- {
428
- return new byte [] {
429
- 13, 11, 0, 0, 15, 0, 0, 0, 17, 11, 0, 0,
430
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9,
431
- 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 3,
432
- 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 5,
433
- 0, 0, 0
434
- };
435
- }
436
-
437
- private static final byte _JSON_value_trans_actions[] = init__JSON_value_trans_actions_0();
438
-
439
-
440
- private static byte[] init__JSON_value_from_state_actions_0()
441
- {
442
- return new byte [] {
443
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
444
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 19
445
- };
446
- }
447
-
448
- private static final byte _JSON_value_from_state_actions[] = init__JSON_value_from_state_actions_0();
449
-
450
-
451
- static final int JSON_value_start = 1;
452
- static final int JSON_value_first_final = 21;
453
- static final int JSON_value_error = 0;
454
-
455
- static final int JSON_value_en_main = 1;
456
-
457
-
458
- // line 469 "Parser.rl"
459
-
460
-
461
- void parseValue(ParserResult res, int p, int pe) {
462
- int cs = EVIL;
463
- IRubyObject result = null;
464
-
465
-
466
- // line 467 "Parser.java"
467
- {
468
- cs = JSON_value_start;
469
- }
470
-
471
- // line 476 "Parser.rl"
472
-
473
- // line 474 "Parser.java"
474
- {
475
- int _klen;
476
- int _trans = 0;
477
- int _acts;
478
- int _nacts;
479
- int _keys;
480
- int _goto_targ = 0;
481
-
482
- _goto: while (true) {
483
- switch ( _goto_targ ) {
484
- case 0:
485
- if ( p == pe ) {
486
- _goto_targ = 4;
487
- continue _goto;
488
- }
489
- if ( cs == 0 ) {
490
- _goto_targ = 5;
491
- continue _goto;
492
- }
493
- case 1:
494
- _acts = _JSON_value_from_state_actions[cs];
495
- _nacts = (int) _JSON_value_actions[_acts++];
496
- while ( _nacts-- > 0 ) {
497
- switch ( _JSON_value_actions[_acts++] ) {
498
- case 9:
499
- // line 454 "Parser.rl"
500
- {
501
- p--;
502
- { p += 1; _goto_targ = 5; if (true) continue _goto;}
503
- }
504
- break;
505
- // line 506 "Parser.java"
506
- }
507
- }
508
-
509
- _match: do {
510
- _keys = _JSON_value_key_offsets[cs];
511
- _trans = _JSON_value_index_offsets[cs];
512
- _klen = _JSON_value_single_lengths[cs];
513
- if ( _klen > 0 ) {
514
- int _lower = _keys;
515
- int _mid;
516
- int _upper = _keys + _klen - 1;
517
- while (true) {
518
- if ( _upper < _lower )
519
- break;
520
-
521
- _mid = _lower + ((_upper-_lower) >> 1);
522
- if ( data[p] < _JSON_value_trans_keys[_mid] )
523
- _upper = _mid - 1;
524
- else if ( data[p] > _JSON_value_trans_keys[_mid] )
525
- _lower = _mid + 1;
526
- else {
527
- _trans += (_mid - _keys);
528
- break _match;
529
- }
530
- }
531
- _keys += _klen;
532
- _trans += _klen;
533
- }
534
-
535
- _klen = _JSON_value_range_lengths[cs];
536
- if ( _klen > 0 ) {
537
- int _lower = _keys;
538
- int _mid;
539
- int _upper = _keys + (_klen<<1) - 2;
540
- while (true) {
541
- if ( _upper < _lower )
542
- break;
543
-
544
- _mid = _lower + (((_upper-_lower) >> 1) & ~1);
545
- if ( data[p] < _JSON_value_trans_keys[_mid] )
546
- _upper = _mid - 2;
547
- else if ( data[p] > _JSON_value_trans_keys[_mid+1] )
548
- _lower = _mid + 2;
549
- else {
550
- _trans += ((_mid - _keys)>>1);
551
- break _match;
552
- }
553
- }
554
- _trans += _klen;
555
- }
556
- } while (false);
557
-
558
- cs = _JSON_value_trans_targs[_trans];
559
-
560
- if ( _JSON_value_trans_actions[_trans] != 0 ) {
561
- _acts = _JSON_value_trans_actions[_trans];
562
- _nacts = (int) _JSON_value_actions[_acts++];
563
- while ( _nacts-- > 0 )
564
- {
565
- switch ( _JSON_value_actions[_acts++] )
566
- {
567
- case 0:
568
- // line 371 "Parser.rl"
569
- {
570
- result = getRuntime().getNil();
571
- }
572
- break;
573
- case 1:
574
- // line 374 "Parser.rl"
575
- {
576
- result = getRuntime().getFalse();
577
- }
578
- break;
579
- case 2:
580
- // line 377 "Parser.rl"
581
- {
582
- result = getRuntime().getTrue();
583
- }
584
- break;
585
- case 3:
586
- // line 380 "Parser.rl"
587
- {
588
- if (parser.allowNaN) {
589
- result = getConstant(CONST_NAN);
590
- } else {
591
- throw unexpectedToken(p - 2, pe);
592
- }
593
- }
594
- break;
595
- case 4:
596
- // line 387 "Parser.rl"
597
- {
598
- if (parser.allowNaN) {
599
- result = getConstant(CONST_INFINITY);
600
- } else {
601
- throw unexpectedToken(p - 7, pe);
602
- }
603
- }
604
- break;
605
- case 5:
606
- // line 394 "Parser.rl"
607
- {
608
- if (pe > p + 9 - (parser.quirksMode ? 1 : 0) &&
609
- absSubSequence(p, p + 9).equals(JSON_MINUS_INFINITY)) {
610
-
611
- if (parser.allowNaN) {
612
- result = getConstant(CONST_MINUS_INFINITY);
613
- {p = (( p + 10))-1;}
614
- p--;
615
- { p += 1; _goto_targ = 5; if (true) continue _goto;}
616
- } else {
617
- throw unexpectedToken(p, pe);
618
- }
619
- }
620
- parseFloat(res, p, pe);
621
- if (res.result != null) {
622
- result = res.result;
623
- {p = (( res.p))-1;}
624
- }
625
- parseInteger(res, p, pe);
626
- if (res.result != null) {
627
- result = res.result;
628
- {p = (( res.p))-1;}
629
- }
630
- p--;
631
- { p += 1; _goto_targ = 5; if (true) continue _goto;}
632
- }
633
- break;
634
- case 6:
635
- // line 420 "Parser.rl"
636
- {
637
- parseString(res, p, pe);
638
- if (res.result == null) {
639
- p--;
640
- { p += 1; _goto_targ = 5; if (true) continue _goto;}
641
- } else {
642
- result = res.result;
643
- {p = (( res.p))-1;}
644
- }
645
- }
646
- break;
647
- case 7:
648
- // line 430 "Parser.rl"
649
- {
650
- currentNesting++;
651
- parseArray(res, p, pe);
652
- currentNesting--;
653
- if (res.result == null) {
654
- p--;
655
- { p += 1; _goto_targ = 5; if (true) continue _goto;}
656
- } else {
657
- result = res.result;
658
- {p = (( res.p))-1;}
659
- }
660
- }
661
- break;
662
- case 8:
663
- // line 442 "Parser.rl"
664
- {
665
- currentNesting++;
666
- parseObject(res, p, pe);
667
- currentNesting--;
668
- if (res.result == null) {
669
- p--;
670
- { p += 1; _goto_targ = 5; if (true) continue _goto;}
671
- } else {
672
- result = res.result;
673
- {p = (( res.p))-1;}
674
- }
675
- }
676
- break;
677
- // line 678 "Parser.java"
678
- }
679
- }
680
- }
681
-
682
- case 2:
683
- if ( cs == 0 ) {
684
- _goto_targ = 5;
685
- continue _goto;
686
- }
687
- if ( ++p != pe ) {
688
- _goto_targ = 1;
689
- continue _goto;
690
- }
691
- case 4:
692
- case 5:
693
- }
694
- break; }
695
- }
696
-
697
- // line 477 "Parser.rl"
698
-
699
- if (cs >= JSON_value_first_final && result != null) {
700
- res.update(result, p);
701
- } else {
702
- res.update(null, p);
703
- }
704
- }
705
-
706
-
707
- // line 708 "Parser.java"
708
- private static byte[] init__JSON_integer_actions_0()
709
- {
710
- return new byte [] {
711
- 0, 1, 0
712
- };
713
- }
714
-
715
- private static final byte _JSON_integer_actions[] = init__JSON_integer_actions_0();
716
-
717
-
718
- private static byte[] init__JSON_integer_key_offsets_0()
719
- {
720
- return new byte [] {
721
- 0, 0, 4, 7, 9, 9
722
- };
723
- }
724
-
725
- private static final byte _JSON_integer_key_offsets[] = init__JSON_integer_key_offsets_0();
726
-
727
-
728
- private static char[] init__JSON_integer_trans_keys_0()
729
- {
730
- return new char [] {
731
- 45, 48, 49, 57, 48, 49, 57, 48, 57, 48, 57, 0
732
- };
733
- }
734
-
735
- private static final char _JSON_integer_trans_keys[] = init__JSON_integer_trans_keys_0();
736
-
737
-
738
- private static byte[] init__JSON_integer_single_lengths_0()
739
- {
740
- return new byte [] {
741
- 0, 2, 1, 0, 0, 0
742
- };
743
- }
744
-
745
- private static final byte _JSON_integer_single_lengths[] = init__JSON_integer_single_lengths_0();
746
-
747
-
748
- private static byte[] init__JSON_integer_range_lengths_0()
749
- {
750
- return new byte [] {
751
- 0, 1, 1, 1, 0, 1
752
- };
753
- }
754
-
755
- private static final byte _JSON_integer_range_lengths[] = init__JSON_integer_range_lengths_0();
756
-
757
-
758
- private static byte[] init__JSON_integer_index_offsets_0()
759
- {
760
- return new byte [] {
761
- 0, 0, 4, 7, 9, 10
762
- };
763
- }
764
-
765
- private static final byte _JSON_integer_index_offsets[] = init__JSON_integer_index_offsets_0();
766
-
767
-
768
- private static byte[] init__JSON_integer_indicies_0()
769
- {
770
- return new byte [] {
771
- 0, 2, 3, 1, 2, 3, 1, 1, 4, 1, 3, 4,
772
- 0
773
- };
774
- }
775
-
776
- private static final byte _JSON_integer_indicies[] = init__JSON_integer_indicies_0();
777
-
778
-
779
- private static byte[] init__JSON_integer_trans_targs_0()
780
- {
781
- return new byte [] {
782
- 2, 0, 3, 5, 4
783
- };
784
- }
785
-
786
- private static final byte _JSON_integer_trans_targs[] = init__JSON_integer_trans_targs_0();
787
-
788
-
789
- private static byte[] init__JSON_integer_trans_actions_0()
790
- {
791
- return new byte [] {
792
- 0, 0, 0, 0, 1
793
- };
794
- }
795
-
796
- private static final byte _JSON_integer_trans_actions[] = init__JSON_integer_trans_actions_0();
797
-
798
-
799
- static final int JSON_integer_start = 1;
800
- static final int JSON_integer_first_final = 3;
801
- static final int JSON_integer_error = 0;
802
-
803
- static final int JSON_integer_en_main = 1;
804
-
805
-
806
- // line 496 "Parser.rl"
807
-
808
-
809
- void parseInteger(ParserResult res, int p, int pe) {
810
- int new_p = parseIntegerInternal(p, pe);
811
- if (new_p == -1) {
812
- res.update(null, p);
813
- return;
814
- }
815
- RubyInteger number = createInteger(p, new_p);
816
- res.update(number, new_p + 1);
817
- return;
818
- }
819
-
820
- int parseIntegerInternal(int p, int pe) {
821
- int cs = EVIL;
822
-
823
-
824
- // line 825 "Parser.java"
825
- {
826
- cs = JSON_integer_start;
827
- }
828
-
829
- // line 513 "Parser.rl"
830
- int memo = p;
831
-
832
- // line 833 "Parser.java"
833
- {
834
- int _klen;
835
- int _trans = 0;
836
- int _acts;
837
- int _nacts;
838
- int _keys;
839
- int _goto_targ = 0;
840
-
841
- _goto: while (true) {
842
- switch ( _goto_targ ) {
843
- case 0:
844
- if ( p == pe ) {
845
- _goto_targ = 4;
846
- continue _goto;
847
- }
848
- if ( cs == 0 ) {
849
- _goto_targ = 5;
850
- continue _goto;
851
- }
852
- case 1:
853
- _match: do {
854
- _keys = _JSON_integer_key_offsets[cs];
855
- _trans = _JSON_integer_index_offsets[cs];
856
- _klen = _JSON_integer_single_lengths[cs];
857
- if ( _klen > 0 ) {
858
- int _lower = _keys;
859
- int _mid;
860
- int _upper = _keys + _klen - 1;
861
- while (true) {
862
- if ( _upper < _lower )
863
- break;
864
-
865
- _mid = _lower + ((_upper-_lower) >> 1);
866
- if ( data[p] < _JSON_integer_trans_keys[_mid] )
867
- _upper = _mid - 1;
868
- else if ( data[p] > _JSON_integer_trans_keys[_mid] )
869
- _lower = _mid + 1;
870
- else {
871
- _trans += (_mid - _keys);
872
- break _match;
873
- }
874
- }
875
- _keys += _klen;
876
- _trans += _klen;
877
- }
878
-
879
- _klen = _JSON_integer_range_lengths[cs];
880
- if ( _klen > 0 ) {
881
- int _lower = _keys;
882
- int _mid;
883
- int _upper = _keys + (_klen<<1) - 2;
884
- while (true) {
885
- if ( _upper < _lower )
886
- break;
887
-
888
- _mid = _lower + (((_upper-_lower) >> 1) & ~1);
889
- if ( data[p] < _JSON_integer_trans_keys[_mid] )
890
- _upper = _mid - 2;
891
- else if ( data[p] > _JSON_integer_trans_keys[_mid+1] )
892
- _lower = _mid + 2;
893
- else {
894
- _trans += ((_mid - _keys)>>1);
895
- break _match;
896
- }
897
- }
898
- _trans += _klen;
899
- }
900
- } while (false);
901
-
902
- _trans = _JSON_integer_indicies[_trans];
903
- cs = _JSON_integer_trans_targs[_trans];
904
-
905
- if ( _JSON_integer_trans_actions[_trans] != 0 ) {
906
- _acts = _JSON_integer_trans_actions[_trans];
907
- _nacts = (int) _JSON_integer_actions[_acts++];
908
- while ( _nacts-- > 0 )
909
- {
910
- switch ( _JSON_integer_actions[_acts++] )
911
- {
912
- case 0:
913
- // line 490 "Parser.rl"
914
- {
915
- p--;
916
- { p += 1; _goto_targ = 5; if (true) continue _goto;}
917
- }
918
- break;
919
- // line 920 "Parser.java"
920
- }
921
- }
922
- }
923
-
924
- case 2:
925
- if ( cs == 0 ) {
926
- _goto_targ = 5;
927
- continue _goto;
928
- }
929
- if ( ++p != pe ) {
930
- _goto_targ = 1;
931
- continue _goto;
932
- }
933
- case 4:
934
- case 5:
935
- }
936
- break; }
937
- }
938
-
939
- // line 515 "Parser.rl"
940
-
941
- if (cs < JSON_integer_first_final) {
942
- return -1;
943
- }
944
-
945
- return p;
946
- }
947
-
948
- RubyInteger createInteger(int p, int new_p) {
949
- Ruby runtime = getRuntime();
950
- ByteList num = absSubSequence(p, new_p);
951
- return bytesToInum(runtime, num);
952
- }
953
-
954
- RubyInteger bytesToInum(Ruby runtime, ByteList num) {
955
- return runtime.is1_9() ?
956
- ConvertBytes.byteListToInum19(runtime, num, 10, true) :
957
- ConvertBytes.byteListToInum(runtime, num, 10, true);
958
- }
959
-
960
-
961
- // line 962 "Parser.java"
962
- private static byte[] init__JSON_float_actions_0()
963
- {
964
- return new byte [] {
965
- 0, 1, 0
966
- };
967
- }
968
-
969
- private static final byte _JSON_float_actions[] = init__JSON_float_actions_0();
970
-
971
-
972
- private static byte[] init__JSON_float_key_offsets_0()
973
- {
974
- return new byte [] {
975
- 0, 0, 4, 7, 10, 12, 16, 18, 23, 29, 29
976
- };
977
- }
978
-
979
- private static final byte _JSON_float_key_offsets[] = init__JSON_float_key_offsets_0();
980
-
981
-
982
- private static char[] init__JSON_float_trans_keys_0()
983
- {
984
- return new char [] {
985
- 45, 48, 49, 57, 48, 49, 57, 46, 69, 101, 48, 57,
986
- 43, 45, 48, 57, 48, 57, 46, 69, 101, 48, 57, 69,
987
- 101, 45, 46, 48, 57, 69, 101, 45, 46, 48, 57, 0
988
- };
989
- }
990
-
991
- private static final char _JSON_float_trans_keys[] = init__JSON_float_trans_keys_0();
992
-
993
-
994
- private static byte[] init__JSON_float_single_lengths_0()
995
- {
996
- return new byte [] {
997
- 0, 2, 1, 3, 0, 2, 0, 3, 2, 0, 2
998
- };
999
- }
1000
-
1001
- private static final byte _JSON_float_single_lengths[] = init__JSON_float_single_lengths_0();
1002
-
1003
-
1004
- private static byte[] init__JSON_float_range_lengths_0()
1005
- {
1006
- return new byte [] {
1007
- 0, 1, 1, 0, 1, 1, 1, 1, 2, 0, 2
1008
- };
1009
- }
1010
-
1011
- private static final byte _JSON_float_range_lengths[] = init__JSON_float_range_lengths_0();
1012
-
1013
-
1014
- private static byte[] init__JSON_float_index_offsets_0()
1015
- {
1016
- return new byte [] {
1017
- 0, 0, 4, 7, 11, 13, 17, 19, 24, 29, 30
1018
- };
1019
- }
1020
-
1021
- private static final byte _JSON_float_index_offsets[] = init__JSON_float_index_offsets_0();
1022
-
1023
-
1024
- private static byte[] init__JSON_float_indicies_0()
1025
- {
1026
- return new byte [] {
1027
- 0, 2, 3, 1, 2, 3, 1, 4, 5, 5, 1, 6,
1028
- 1, 7, 7, 8, 1, 8, 1, 4, 5, 5, 3, 1,
1029
- 5, 5, 1, 6, 9, 1, 1, 1, 1, 8, 9, 0
1030
- };
1031
- }
1032
-
1033
- private static final byte _JSON_float_indicies[] = init__JSON_float_indicies_0();
1034
-
1035
-
1036
- private static byte[] init__JSON_float_trans_targs_0()
1037
- {
1038
- return new byte [] {
1039
- 2, 0, 3, 7, 4, 5, 8, 6, 10, 9
1040
- };
1041
- }
1042
-
1043
- private static final byte _JSON_float_trans_targs[] = init__JSON_float_trans_targs_0();
1044
-
1045
-
1046
- private static byte[] init__JSON_float_trans_actions_0()
1047
- {
1048
- return new byte [] {
1049
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
1050
- };
1051
- }
1052
-
1053
- private static final byte _JSON_float_trans_actions[] = init__JSON_float_trans_actions_0();
1054
-
1055
-
1056
- static final int JSON_float_start = 1;
1057
- static final int JSON_float_first_final = 8;
1058
- static final int JSON_float_error = 0;
1059
-
1060
- static final int JSON_float_en_main = 1;
1061
-
1062
-
1063
- // line 550 "Parser.rl"
1064
-
1065
-
1066
- void parseFloat(ParserResult res, int p, int pe) {
1067
- int new_p = parseFloatInternal(p, pe);
1068
- if (new_p == -1) {
1069
- res.update(null, p);
1070
- return;
1071
- }
1072
- RubyFloat number = createFloat(p, new_p);
1073
- res.update(number, new_p + 1);
1074
- return;
1075
- }
1076
-
1077
- int parseFloatInternal(int p, int pe) {
1078
- int cs = EVIL;
1079
-
1080
-
1081
- // line 1082 "Parser.java"
1082
- {
1083
- cs = JSON_float_start;
1084
- }
1085
-
1086
- // line 567 "Parser.rl"
1087
- int memo = p;
1088
-
1089
- // line 1090 "Parser.java"
1090
- {
1091
- int _klen;
1092
- int _trans = 0;
1093
- int _acts;
1094
- int _nacts;
1095
- int _keys;
1096
- int _goto_targ = 0;
1097
-
1098
- _goto: while (true) {
1099
- switch ( _goto_targ ) {
1100
- case 0:
1101
- if ( p == pe ) {
1102
- _goto_targ = 4;
1103
- continue _goto;
1104
- }
1105
- if ( cs == 0 ) {
1106
- _goto_targ = 5;
1107
- continue _goto;
1108
- }
1109
- case 1:
1110
- _match: do {
1111
- _keys = _JSON_float_key_offsets[cs];
1112
- _trans = _JSON_float_index_offsets[cs];
1113
- _klen = _JSON_float_single_lengths[cs];
1114
- if ( _klen > 0 ) {
1115
- int _lower = _keys;
1116
- int _mid;
1117
- int _upper = _keys + _klen - 1;
1118
- while (true) {
1119
- if ( _upper < _lower )
1120
- break;
1121
-
1122
- _mid = _lower + ((_upper-_lower) >> 1);
1123
- if ( data[p] < _JSON_float_trans_keys[_mid] )
1124
- _upper = _mid - 1;
1125
- else if ( data[p] > _JSON_float_trans_keys[_mid] )
1126
- _lower = _mid + 1;
1127
- else {
1128
- _trans += (_mid - _keys);
1129
- break _match;
1130
- }
1131
- }
1132
- _keys += _klen;
1133
- _trans += _klen;
1134
- }
1135
-
1136
- _klen = _JSON_float_range_lengths[cs];
1137
- if ( _klen > 0 ) {
1138
- int _lower = _keys;
1139
- int _mid;
1140
- int _upper = _keys + (_klen<<1) - 2;
1141
- while (true) {
1142
- if ( _upper < _lower )
1143
- break;
1144
-
1145
- _mid = _lower + (((_upper-_lower) >> 1) & ~1);
1146
- if ( data[p] < _JSON_float_trans_keys[_mid] )
1147
- _upper = _mid - 2;
1148
- else if ( data[p] > _JSON_float_trans_keys[_mid+1] )
1149
- _lower = _mid + 2;
1150
- else {
1151
- _trans += ((_mid - _keys)>>1);
1152
- break _match;
1153
- }
1154
- }
1155
- _trans += _klen;
1156
- }
1157
- } while (false);
1158
-
1159
- _trans = _JSON_float_indicies[_trans];
1160
- cs = _JSON_float_trans_targs[_trans];
1161
-
1162
- if ( _JSON_float_trans_actions[_trans] != 0 ) {
1163
- _acts = _JSON_float_trans_actions[_trans];
1164
- _nacts = (int) _JSON_float_actions[_acts++];
1165
- while ( _nacts-- > 0 )
1166
- {
1167
- switch ( _JSON_float_actions[_acts++] )
1168
- {
1169
- case 0:
1170
- // line 541 "Parser.rl"
1171
- {
1172
- p--;
1173
- { p += 1; _goto_targ = 5; if (true) continue _goto;}
1174
- }
1175
- break;
1176
- // line 1177 "Parser.java"
1177
- }
1178
- }
1179
- }
1180
-
1181
- case 2:
1182
- if ( cs == 0 ) {
1183
- _goto_targ = 5;
1184
- continue _goto;
1185
- }
1186
- if ( ++p != pe ) {
1187
- _goto_targ = 1;
1188
- continue _goto;
1189
- }
1190
- case 4:
1191
- case 5:
1192
- }
1193
- break; }
1194
- }
1195
-
1196
- // line 569 "Parser.rl"
1197
-
1198
- if (cs < JSON_float_first_final) {
1199
- return -1;
1200
- }
1201
-
1202
- return p;
1203
- }
1204
-
1205
- RubyFloat createFloat(int p, int new_p) {
1206
- Ruby runtime = getRuntime();
1207
- ByteList num = absSubSequence(p, new_p);
1208
- return RubyFloat.newFloat(runtime, dc.parse(num, true, runtime.is1_9()));
1209
- }
1210
-
1211
-
1212
- // line 1213 "Parser.java"
1213
- private static byte[] init__JSON_string_actions_0()
1214
- {
1215
- return new byte [] {
1216
- 0, 2, 0, 1
1217
- };
1218
- }
1219
-
1220
- private static final byte _JSON_string_actions[] = init__JSON_string_actions_0();
1221
-
1222
-
1223
- private static byte[] init__JSON_string_key_offsets_0()
1224
- {
1225
- return new byte [] {
1226
- 0, 0, 1, 5, 8, 14, 20, 26, 32
1227
- };
1228
- }
1229
-
1230
- private static final byte _JSON_string_key_offsets[] = init__JSON_string_key_offsets_0();
1231
-
1232
-
1233
- private static char[] init__JSON_string_trans_keys_0()
1234
- {
1235
- return new char [] {
1236
- 34, 34, 92, 0, 31, 117, 0, 31, 48, 57, 65, 70,
1237
- 97, 102, 48, 57, 65, 70, 97, 102, 48, 57, 65, 70,
1238
- 97, 102, 48, 57, 65, 70, 97, 102, 0
1239
- };
1240
- }
1241
-
1242
- private static final char _JSON_string_trans_keys[] = init__JSON_string_trans_keys_0();
1243
-
1244
-
1245
- private static byte[] init__JSON_string_single_lengths_0()
1246
- {
1247
- return new byte [] {
1248
- 0, 1, 2, 1, 0, 0, 0, 0, 0
1249
- };
1250
- }
1251
-
1252
- private static final byte _JSON_string_single_lengths[] = init__JSON_string_single_lengths_0();
1253
-
1254
-
1255
- private static byte[] init__JSON_string_range_lengths_0()
1256
- {
1257
- return new byte [] {
1258
- 0, 0, 1, 1, 3, 3, 3, 3, 0
1259
- };
1260
- }
1261
-
1262
- private static final byte _JSON_string_range_lengths[] = init__JSON_string_range_lengths_0();
1263
-
1264
-
1265
- private static byte[] init__JSON_string_index_offsets_0()
1266
- {
1267
- return new byte [] {
1268
- 0, 0, 2, 6, 9, 13, 17, 21, 25
1269
- };
1270
- }
1271
-
1272
- private static final byte _JSON_string_index_offsets[] = init__JSON_string_index_offsets_0();
1273
-
1274
-
1275
- private static byte[] init__JSON_string_indicies_0()
1276
- {
1277
- return new byte [] {
1278
- 0, 1, 2, 3, 1, 0, 4, 1, 0, 5, 5, 5,
1279
- 1, 6, 6, 6, 1, 7, 7, 7, 1, 0, 0, 0,
1280
- 1, 1, 0
1281
- };
1282
- }
1283
-
1284
- private static final byte _JSON_string_indicies[] = init__JSON_string_indicies_0();
1285
-
1286
-
1287
- private static byte[] init__JSON_string_trans_targs_0()
1288
- {
1289
- return new byte [] {
1290
- 2, 0, 8, 3, 4, 5, 6, 7
1291
- };
1292
- }
1293
-
1294
- private static final byte _JSON_string_trans_targs[] = init__JSON_string_trans_targs_0();
1295
-
1296
-
1297
- private static byte[] init__JSON_string_trans_actions_0()
1298
- {
1299
- return new byte [] {
1300
- 0, 0, 1, 0, 0, 0, 0, 0
1301
- };
1302
- }
1303
-
1304
- private static final byte _JSON_string_trans_actions[] = init__JSON_string_trans_actions_0();
1305
-
1306
-
1307
- static final int JSON_string_start = 1;
1308
- static final int JSON_string_first_final = 8;
1309
- static final int JSON_string_error = 0;
1310
-
1311
- static final int JSON_string_en_main = 1;
1312
-
1313
-
1314
- // line 614 "Parser.rl"
1315
-
1316
-
1317
- void parseString(ParserResult res, int p, int pe) {
1318
- int cs = EVIL;
1319
- IRubyObject result = null;
1320
-
1321
-
1322
- // line 1323 "Parser.java"
1323
- {
1324
- cs = JSON_string_start;
1325
- }
1326
-
1327
- // line 621 "Parser.rl"
1328
- int memo = p;
1329
-
1330
- // line 1331 "Parser.java"
1331
- {
1332
- int _klen;
1333
- int _trans = 0;
1334
- int _acts;
1335
- int _nacts;
1336
- int _keys;
1337
- int _goto_targ = 0;
1338
-
1339
- _goto: while (true) {
1340
- switch ( _goto_targ ) {
1341
- case 0:
1342
- if ( p == pe ) {
1343
- _goto_targ = 4;
1344
- continue _goto;
1345
- }
1346
- if ( cs == 0 ) {
1347
- _goto_targ = 5;
1348
- continue _goto;
1349
- }
1350
- case 1:
1351
- _match: do {
1352
- _keys = _JSON_string_key_offsets[cs];
1353
- _trans = _JSON_string_index_offsets[cs];
1354
- _klen = _JSON_string_single_lengths[cs];
1355
- if ( _klen > 0 ) {
1356
- int _lower = _keys;
1357
- int _mid;
1358
- int _upper = _keys + _klen - 1;
1359
- while (true) {
1360
- if ( _upper < _lower )
1361
- break;
1362
-
1363
- _mid = _lower + ((_upper-_lower) >> 1);
1364
- if ( data[p] < _JSON_string_trans_keys[_mid] )
1365
- _upper = _mid - 1;
1366
- else if ( data[p] > _JSON_string_trans_keys[_mid] )
1367
- _lower = _mid + 1;
1368
- else {
1369
- _trans += (_mid - _keys);
1370
- break _match;
1371
- }
1372
- }
1373
- _keys += _klen;
1374
- _trans += _klen;
1375
- }
1376
-
1377
- _klen = _JSON_string_range_lengths[cs];
1378
- if ( _klen > 0 ) {
1379
- int _lower = _keys;
1380
- int _mid;
1381
- int _upper = _keys + (_klen<<1) - 2;
1382
- while (true) {
1383
- if ( _upper < _lower )
1384
- break;
1385
-
1386
- _mid = _lower + (((_upper-_lower) >> 1) & ~1);
1387
- if ( data[p] < _JSON_string_trans_keys[_mid] )
1388
- _upper = _mid - 2;
1389
- else if ( data[p] > _JSON_string_trans_keys[_mid+1] )
1390
- _lower = _mid + 2;
1391
- else {
1392
- _trans += ((_mid - _keys)>>1);
1393
- break _match;
1394
- }
1395
- }
1396
- _trans += _klen;
1397
- }
1398
- } while (false);
1399
-
1400
- _trans = _JSON_string_indicies[_trans];
1401
- cs = _JSON_string_trans_targs[_trans];
1402
-
1403
- if ( _JSON_string_trans_actions[_trans] != 0 ) {
1404
- _acts = _JSON_string_trans_actions[_trans];
1405
- _nacts = (int) _JSON_string_actions[_acts++];
1406
- while ( _nacts-- > 0 )
1407
- {
1408
- switch ( _JSON_string_actions[_acts++] )
1409
- {
1410
- case 0:
1411
- // line 589 "Parser.rl"
1412
- {
1413
- int offset = byteList.begin();
1414
- ByteList decoded = decoder.decode(byteList, memo + 1 - offset,
1415
- p - offset);
1416
- result = getRuntime().newString(decoded);
1417
- if (result == null) {
1418
- p--;
1419
- { p += 1; _goto_targ = 5; if (true) continue _goto;}
1420
- } else {
1421
- {p = (( p + 1))-1;}
1422
- }
1423
- }
1424
- break;
1425
- case 1:
1426
- // line 602 "Parser.rl"
1427
- {
1428
- p--;
1429
- { p += 1; _goto_targ = 5; if (true) continue _goto;}
1430
- }
1431
- break;
1432
- // line 1433 "Parser.java"
1433
- }
1434
- }
1435
- }
1436
-
1437
- case 2:
1438
- if ( cs == 0 ) {
1439
- _goto_targ = 5;
1440
- continue _goto;
1441
- }
1442
- if ( ++p != pe ) {
1443
- _goto_targ = 1;
1444
- continue _goto;
1445
- }
1446
- case 4:
1447
- case 5:
1448
- }
1449
- break; }
1450
- }
1451
-
1452
- // line 623 "Parser.rl"
1453
-
1454
- if (parser.createAdditions) {
1455
- RubyHash match_string = parser.match_string;
1456
- if (match_string != null) {
1457
- final IRubyObject[] memoArray = { result, null };
1458
- try {
1459
- match_string.visitAll(new RubyHash.Visitor() {
1460
- @Override
1461
- public void visit(IRubyObject pattern, IRubyObject klass) {
1462
- if (pattern.callMethod(context, "===", memoArray[0]).isTrue()) {
1463
- memoArray[1] = klass;
1464
- throw JumpException.SPECIAL_JUMP;
1465
- }
1466
- }
1467
- });
1468
- } catch (JumpException e) { }
1469
- if (memoArray[1] != null) {
1470
- RubyClass klass = (RubyClass) memoArray[1];
1471
- if (klass.respondsTo("json_creatable?") &&
1472
- klass.callMethod(context, "json_creatable?").isTrue()) {
1473
- result = klass.callMethod(context, "json_create", result);
1474
- }
1475
- }
1476
- }
1477
- }
1478
-
1479
- if (cs >= JSON_string_first_final && result != null) {
1480
- RuntimeInfo info = RuntimeInfo.forRuntime(context.getRuntime());
1481
- if (info.encodingsSupported() && result instanceof RubyString) {
1482
- ((RubyString)result).force_encoding(context, info.utf8.get());
1483
- }
1484
- res.update(result, p + 1);
1485
- } else {
1486
- res.update(null, p + 1);
1487
- }
1488
- }
1489
-
1490
-
1491
- // line 1492 "Parser.java"
1492
- private static byte[] init__JSON_array_actions_0()
1493
- {
1494
- return new byte [] {
1495
- 0, 1, 0, 1, 1
1496
- };
1497
- }
1498
-
1499
- private static final byte _JSON_array_actions[] = init__JSON_array_actions_0();
1500
-
1501
-
1502
- private static byte[] init__JSON_array_key_offsets_0()
1503
- {
1504
- return new byte [] {
1505
- 0, 0, 1, 18, 25, 41, 43, 44, 46, 47, 49, 50,
1506
- 52, 53, 55, 56, 58, 59
1507
- };
1508
- }
1509
-
1510
- private static final byte _JSON_array_key_offsets[] = init__JSON_array_key_offsets_0();
1511
-
1512
-
1513
- private static char[] init__JSON_array_trans_keys_0()
1514
- {
1515
- return new char [] {
1516
- 91, 13, 32, 34, 45, 47, 73, 78, 91, 93, 102, 110,
1517
- 116, 123, 9, 10, 48, 57, 13, 32, 44, 47, 93, 9,
1518
- 10, 13, 32, 34, 45, 47, 73, 78, 91, 102, 110, 116,
1519
- 123, 9, 10, 48, 57, 42, 47, 42, 42, 47, 10, 42,
1520
- 47, 42, 42, 47, 10, 42, 47, 42, 42, 47, 10, 0
1521
- };
1522
- }
1523
-
1524
- private static final char _JSON_array_trans_keys[] = init__JSON_array_trans_keys_0();
1525
-
1526
-
1527
- private static byte[] init__JSON_array_single_lengths_0()
1528
- {
1529
- return new byte [] {
1530
- 0, 1, 13, 5, 12, 2, 1, 2, 1, 2, 1, 2,
1531
- 1, 2, 1, 2, 1, 0
1532
- };
1533
- }
1534
-
1535
- private static final byte _JSON_array_single_lengths[] = init__JSON_array_single_lengths_0();
1536
-
1537
-
1538
- private static byte[] init__JSON_array_range_lengths_0()
1539
- {
1540
- return new byte [] {
1541
- 0, 0, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0,
1542
- 0, 0, 0, 0, 0, 0
1543
- };
1544
- }
1545
-
1546
- private static final byte _JSON_array_range_lengths[] = init__JSON_array_range_lengths_0();
1547
-
1548
-
1549
- private static byte[] init__JSON_array_index_offsets_0()
1550
- {
1551
- return new byte [] {
1552
- 0, 0, 2, 18, 25, 40, 43, 45, 48, 50, 53, 55,
1553
- 58, 60, 63, 65, 68, 70
1554
- };
1555
- }
1556
-
1557
- private static final byte _JSON_array_index_offsets[] = init__JSON_array_index_offsets_0();
1558
-
1559
-
1560
- private static byte[] init__JSON_array_indicies_0()
1561
- {
1562
- return new byte [] {
1563
- 0, 1, 0, 0, 2, 2, 3, 2, 2, 2, 4, 2,
1564
- 2, 2, 2, 0, 2, 1, 5, 5, 6, 7, 4, 5,
1565
- 1, 6, 6, 2, 2, 8, 2, 2, 2, 2, 2, 2,
1566
- 2, 6, 2, 1, 9, 10, 1, 11, 9, 11, 6, 9,
1567
- 6, 10, 12, 13, 1, 14, 12, 14, 5, 12, 5, 13,
1568
- 15, 16, 1, 17, 15, 17, 0, 15, 0, 16, 1, 0
1569
- };
1570
- }
1571
-
1572
- private static final byte _JSON_array_indicies[] = init__JSON_array_indicies_0();
1573
-
1574
-
1575
- private static byte[] init__JSON_array_trans_targs_0()
1576
- {
1577
- return new byte [] {
1578
- 2, 0, 3, 13, 17, 3, 4, 9, 5, 6, 8, 7,
1579
- 10, 12, 11, 14, 16, 15
1580
- };
1581
- }
1582
-
1583
- private static final byte _JSON_array_trans_targs[] = init__JSON_array_trans_targs_0();
1584
-
1585
-
1586
- private static byte[] init__JSON_array_trans_actions_0()
1587
- {
1588
- return new byte [] {
1589
- 0, 0, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0,
1590
- 0, 0, 0, 0, 0, 0
1591
- };
1592
- }
1593
-
1594
- private static final byte _JSON_array_trans_actions[] = init__JSON_array_trans_actions_0();
1595
-
1596
-
1597
- static final int JSON_array_start = 1;
1598
- static final int JSON_array_first_final = 17;
1599
- static final int JSON_array_error = 0;
1600
-
1601
- static final int JSON_array_en_main = 1;
1602
-
1603
-
1604
- // line 697 "Parser.rl"
1605
-
1606
-
1607
- void parseArray(ParserResult res, int p, int pe) {
1608
- int cs = EVIL;
1609
-
1610
- if (parser.maxNesting > 0 && currentNesting > parser.maxNesting) {
1611
- throw newException(Utils.M_NESTING_ERROR,
1612
- "nesting of " + currentNesting + " is too deep");
1613
- }
1614
-
1615
- IRubyObject result;
1616
- if (parser.arrayClass == getRuntime().getArray()) {
1617
- result = RubyArray.newArray(getRuntime());
1618
- } else {
1619
- result = parser.arrayClass.newInstance(context,
1620
- IRubyObject.NULL_ARRAY, Block.NULL_BLOCK);
1621
- }
1622
-
1623
-
1624
- // line 1625 "Parser.java"
1625
- {
1626
- cs = JSON_array_start;
1627
- }
1628
-
1629
- // line 716 "Parser.rl"
1630
-
1631
- // line 1632 "Parser.java"
1632
- {
1633
- int _klen;
1634
- int _trans = 0;
1635
- int _acts;
1636
- int _nacts;
1637
- int _keys;
1638
- int _goto_targ = 0;
1639
-
1640
- _goto: while (true) {
1641
- switch ( _goto_targ ) {
1642
- case 0:
1643
- if ( p == pe ) {
1644
- _goto_targ = 4;
1645
- continue _goto;
1646
- }
1647
- if ( cs == 0 ) {
1648
- _goto_targ = 5;
1649
- continue _goto;
1650
- }
1651
- case 1:
1652
- _match: do {
1653
- _keys = _JSON_array_key_offsets[cs];
1654
- _trans = _JSON_array_index_offsets[cs];
1655
- _klen = _JSON_array_single_lengths[cs];
1656
- if ( _klen > 0 ) {
1657
- int _lower = _keys;
1658
- int _mid;
1659
- int _upper = _keys + _klen - 1;
1660
- while (true) {
1661
- if ( _upper < _lower )
1662
- break;
1663
-
1664
- _mid = _lower + ((_upper-_lower) >> 1);
1665
- if ( data[p] < _JSON_array_trans_keys[_mid] )
1666
- _upper = _mid - 1;
1667
- else if ( data[p] > _JSON_array_trans_keys[_mid] )
1668
- _lower = _mid + 1;
1669
- else {
1670
- _trans += (_mid - _keys);
1671
- break _match;
1672
- }
1673
- }
1674
- _keys += _klen;
1675
- _trans += _klen;
1676
- }
1677
-
1678
- _klen = _JSON_array_range_lengths[cs];
1679
- if ( _klen > 0 ) {
1680
- int _lower = _keys;
1681
- int _mid;
1682
- int _upper = _keys + (_klen<<1) - 2;
1683
- while (true) {
1684
- if ( _upper < _lower )
1685
- break;
1686
-
1687
- _mid = _lower + (((_upper-_lower) >> 1) & ~1);
1688
- if ( data[p] < _JSON_array_trans_keys[_mid] )
1689
- _upper = _mid - 2;
1690
- else if ( data[p] > _JSON_array_trans_keys[_mid+1] )
1691
- _lower = _mid + 2;
1692
- else {
1693
- _trans += ((_mid - _keys)>>1);
1694
- break _match;
1695
- }
1696
- }
1697
- _trans += _klen;
1698
- }
1699
- } while (false);
1700
-
1701
- _trans = _JSON_array_indicies[_trans];
1702
- cs = _JSON_array_trans_targs[_trans];
1703
-
1704
- if ( _JSON_array_trans_actions[_trans] != 0 ) {
1705
- _acts = _JSON_array_trans_actions[_trans];
1706
- _nacts = (int) _JSON_array_actions[_acts++];
1707
- while ( _nacts-- > 0 )
1708
- {
1709
- switch ( _JSON_array_actions[_acts++] )
1710
- {
1711
- case 0:
1712
- // line 666 "Parser.rl"
1713
- {
1714
- parseValue(res, p, pe);
1715
- if (res.result == null) {
1716
- p--;
1717
- { p += 1; _goto_targ = 5; if (true) continue _goto;}
1718
- } else {
1719
- if (parser.arrayClass == getRuntime().getArray()) {
1720
- ((RubyArray)result).append(res.result);
1721
- } else {
1722
- result.callMethod(context, "<<", res.result);
1723
- }
1724
- {p = (( res.p))-1;}
1725
- }
1726
- }
1727
- break;
1728
- case 1:
1729
- // line 681 "Parser.rl"
1730
- {
1731
- p--;
1732
- { p += 1; _goto_targ = 5; if (true) continue _goto;}
1733
- }
1734
- break;
1735
- // line 1736 "Parser.java"
1736
- }
1737
- }
1738
- }
1739
-
1740
- case 2:
1741
- if ( cs == 0 ) {
1742
- _goto_targ = 5;
1743
- continue _goto;
1744
- }
1745
- if ( ++p != pe ) {
1746
- _goto_targ = 1;
1747
- continue _goto;
1748
- }
1749
- case 4:
1750
- case 5:
1751
- }
1752
- break; }
1753
- }
1754
-
1755
- // line 717 "Parser.rl"
1756
-
1757
- if (cs >= JSON_array_first_final) {
1758
- res.update(result, p + 1);
1759
- } else {
1760
- throw unexpectedToken(p, pe);
1761
- }
1762
- }
1763
-
1764
-
1765
- // line 1766 "Parser.java"
1766
- private static byte[] init__JSON_object_actions_0()
1767
- {
1768
- return new byte [] {
1769
- 0, 1, 0, 1, 1, 1, 2
1770
- };
1771
- }
1772
-
1773
- private static final byte _JSON_object_actions[] = init__JSON_object_actions_0();
1774
-
1775
-
1776
- private static byte[] init__JSON_object_key_offsets_0()
1777
- {
1778
- return new byte [] {
1779
- 0, 0, 1, 8, 14, 16, 17, 19, 20, 36, 43, 49,
1780
- 51, 52, 54, 55, 57, 58, 60, 61, 63, 64, 66, 67,
1781
- 69, 70, 72, 73
1782
- };
1783
- }
1784
-
1785
- private static final byte _JSON_object_key_offsets[] = init__JSON_object_key_offsets_0();
1786
-
1787
-
1788
- private static char[] init__JSON_object_trans_keys_0()
1789
- {
1790
- return new char [] {
1791
- 123, 13, 32, 34, 47, 125, 9, 10, 13, 32, 47, 58,
1792
- 9, 10, 42, 47, 42, 42, 47, 10, 13, 32, 34, 45,
1793
- 47, 73, 78, 91, 102, 110, 116, 123, 9, 10, 48, 57,
1794
- 13, 32, 44, 47, 125, 9, 10, 13, 32, 34, 47, 9,
1795
- 10, 42, 47, 42, 42, 47, 10, 42, 47, 42, 42, 47,
1796
- 10, 42, 47, 42, 42, 47, 10, 42, 47, 42, 42, 47,
1797
- 10, 0
1798
- };
1799
- }
1800
-
1801
- private static final char _JSON_object_trans_keys[] = init__JSON_object_trans_keys_0();
1802
-
1803
-
1804
- private static byte[] init__JSON_object_single_lengths_0()
1805
- {
1806
- return new byte [] {
1807
- 0, 1, 5, 4, 2, 1, 2, 1, 12, 5, 4, 2,
1808
- 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2,
1809
- 1, 2, 1, 0
1810
- };
1811
- }
1812
-
1813
- private static final byte _JSON_object_single_lengths[] = init__JSON_object_single_lengths_0();
1814
-
1815
-
1816
- private static byte[] init__JSON_object_range_lengths_0()
1817
- {
1818
- return new byte [] {
1819
- 0, 0, 1, 1, 0, 0, 0, 0, 2, 1, 1, 0,
1820
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1821
- 0, 0, 0, 0
1822
- };
1823
- }
1824
-
1825
- private static final byte _JSON_object_range_lengths[] = init__JSON_object_range_lengths_0();
1826
-
1827
-
1828
- private static byte[] init__JSON_object_index_offsets_0()
1829
- {
1830
- return new byte [] {
1831
- 0, 0, 2, 9, 15, 18, 20, 23, 25, 40, 47, 53,
1832
- 56, 58, 61, 63, 66, 68, 71, 73, 76, 78, 81, 83,
1833
- 86, 88, 91, 93
1834
- };
1835
- }
1836
-
1837
- private static final byte _JSON_object_index_offsets[] = init__JSON_object_index_offsets_0();
1838
-
1839
-
1840
- private static byte[] init__JSON_object_indicies_0()
1841
- {
1842
- return new byte [] {
1843
- 0, 1, 0, 0, 2, 3, 4, 0, 1, 5, 5, 6,
1844
- 7, 5, 1, 8, 9, 1, 10, 8, 10, 5, 8, 5,
1845
- 9, 7, 7, 11, 11, 12, 11, 11, 11, 11, 11, 11,
1846
- 11, 7, 11, 1, 13, 13, 14, 15, 4, 13, 1, 14,
1847
- 14, 2, 16, 14, 1, 17, 18, 1, 19, 17, 19, 14,
1848
- 17, 14, 18, 20, 21, 1, 22, 20, 22, 13, 20, 13,
1849
- 21, 23, 24, 1, 25, 23, 25, 7, 23, 7, 24, 26,
1850
- 27, 1, 28, 26, 28, 0, 26, 0, 27, 1, 0
1851
- };
1852
- }
1853
-
1854
- private static final byte _JSON_object_indicies[] = init__JSON_object_indicies_0();
1855
-
1856
-
1857
- private static byte[] init__JSON_object_trans_targs_0()
1858
- {
1859
- return new byte [] {
1860
- 2, 0, 3, 23, 27, 3, 4, 8, 5, 7, 6, 9,
1861
- 19, 9, 10, 15, 11, 12, 14, 13, 16, 18, 17, 20,
1862
- 22, 21, 24, 26, 25
1863
- };
1864
- }
1865
-
1866
- private static final byte _JSON_object_trans_targs[] = init__JSON_object_trans_targs_0();
1867
-
1868
-
1869
- private static byte[] init__JSON_object_trans_actions_0()
1870
- {
1871
- return new byte [] {
1872
- 0, 0, 3, 0, 5, 0, 0, 0, 0, 0, 0, 1,
1873
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1874
- 0, 0, 0, 0, 0
1875
- };
1876
- }
1877
-
1878
- private static final byte _JSON_object_trans_actions[] = init__JSON_object_trans_actions_0();
1879
-
1880
-
1881
- static final int JSON_object_start = 1;
1882
- static final int JSON_object_first_final = 27;
1883
- static final int JSON_object_error = 0;
1884
-
1885
- static final int JSON_object_en_main = 1;
1886
-
1887
-
1888
- // line 776 "Parser.rl"
1889
-
1890
-
1891
- void parseObject(ParserResult res, int p, int pe) {
1892
- int cs = EVIL;
1893
- IRubyObject lastName = null;
1894
- boolean objectDefault = true;
1895
-
1896
- if (parser.maxNesting > 0 && currentNesting > parser.maxNesting) {
1897
- throw newException(Utils.M_NESTING_ERROR,
1898
- "nesting of " + currentNesting + " is too deep");
1899
- }
1900
-
1901
- // this is guaranteed to be a RubyHash due to the earlier
1902
- // allocator test at OptionsReader#getClass
1903
- IRubyObject result;
1904
- if (parser.objectClass == getRuntime().getHash()) {
1905
- result = RubyHash.newHash(getRuntime());
1906
- } else {
1907
- objectDefault = false;
1908
- result = parser.objectClass.newInstance(context,
1909
- IRubyObject.NULL_ARRAY, Block.NULL_BLOCK);
1910
- }
1911
-
1912
-
1913
- // line 1914 "Parser.java"
1914
- {
1915
- cs = JSON_object_start;
1916
- }
1917
-
1918
- // line 800 "Parser.rl"
1919
-
1920
- // line 1921 "Parser.java"
1921
- {
1922
- int _klen;
1923
- int _trans = 0;
1924
- int _acts;
1925
- int _nacts;
1926
- int _keys;
1927
- int _goto_targ = 0;
1928
-
1929
- _goto: while (true) {
1930
- switch ( _goto_targ ) {
1931
- case 0:
1932
- if ( p == pe ) {
1933
- _goto_targ = 4;
1934
- continue _goto;
1935
- }
1936
- if ( cs == 0 ) {
1937
- _goto_targ = 5;
1938
- continue _goto;
1939
- }
1940
- case 1:
1941
- _match: do {
1942
- _keys = _JSON_object_key_offsets[cs];
1943
- _trans = _JSON_object_index_offsets[cs];
1944
- _klen = _JSON_object_single_lengths[cs];
1945
- if ( _klen > 0 ) {
1946
- int _lower = _keys;
1947
- int _mid;
1948
- int _upper = _keys + _klen - 1;
1949
- while (true) {
1950
- if ( _upper < _lower )
1951
- break;
1952
-
1953
- _mid = _lower + ((_upper-_lower) >> 1);
1954
- if ( data[p] < _JSON_object_trans_keys[_mid] )
1955
- _upper = _mid - 1;
1956
- else if ( data[p] > _JSON_object_trans_keys[_mid] )
1957
- _lower = _mid + 1;
1958
- else {
1959
- _trans += (_mid - _keys);
1960
- break _match;
1961
- }
1962
- }
1963
- _keys += _klen;
1964
- _trans += _klen;
1965
- }
1966
-
1967
- _klen = _JSON_object_range_lengths[cs];
1968
- if ( _klen > 0 ) {
1969
- int _lower = _keys;
1970
- int _mid;
1971
- int _upper = _keys + (_klen<<1) - 2;
1972
- while (true) {
1973
- if ( _upper < _lower )
1974
- break;
1975
-
1976
- _mid = _lower + (((_upper-_lower) >> 1) & ~1);
1977
- if ( data[p] < _JSON_object_trans_keys[_mid] )
1978
- _upper = _mid - 2;
1979
- else if ( data[p] > _JSON_object_trans_keys[_mid+1] )
1980
- _lower = _mid + 2;
1981
- else {
1982
- _trans += ((_mid - _keys)>>1);
1983
- break _match;
1984
- }
1985
- }
1986
- _trans += _klen;
1987
- }
1988
- } while (false);
1989
-
1990
- _trans = _JSON_object_indicies[_trans];
1991
- cs = _JSON_object_trans_targs[_trans];
1992
-
1993
- if ( _JSON_object_trans_actions[_trans] != 0 ) {
1994
- _acts = _JSON_object_trans_actions[_trans];
1995
- _nacts = (int) _JSON_object_actions[_acts++];
1996
- while ( _nacts-- > 0 )
1997
- {
1998
- switch ( _JSON_object_actions[_acts++] )
1999
- {
2000
- case 0:
2001
- // line 731 "Parser.rl"
2002
- {
2003
- parseValue(res, p, pe);
2004
- if (res.result == null) {
2005
- p--;
2006
- { p += 1; _goto_targ = 5; if (true) continue _goto;}
2007
- } else {
2008
- if (parser.objectClass == getRuntime().getHash()) {
2009
- ((RubyHash)result).op_aset(context, lastName, res.result);
2010
- } else {
2011
- result.callMethod(context, "[]=", new IRubyObject[] { lastName, res.result });
2012
- }
2013
- {p = (( res.p))-1;}
2014
- }
2015
- }
2016
- break;
2017
- case 1:
2018
- // line 746 "Parser.rl"
2019
- {
2020
- parseString(res, p, pe);
2021
- if (res.result == null) {
2022
- p--;
2023
- { p += 1; _goto_targ = 5; if (true) continue _goto;}
2024
- } else {
2025
- RubyString name = (RubyString)res.result;
2026
- if (parser.symbolizeNames) {
2027
- lastName = context.getRuntime().is1_9()
2028
- ? name.intern19()
2029
- : name.intern();
2030
- } else {
2031
- lastName = name;
2032
- }
2033
- {p = (( res.p))-1;}
2034
- }
2035
- }
2036
- break;
2037
- case 2:
2038
- // line 764 "Parser.rl"
2039
- {
2040
- p--;
2041
- { p += 1; _goto_targ = 5; if (true) continue _goto;}
2042
- }
2043
- break;
2044
- // line 2045 "Parser.java"
2045
- }
2046
- }
2047
- }
2048
-
2049
- case 2:
2050
- if ( cs == 0 ) {
2051
- _goto_targ = 5;
2052
- continue _goto;
2053
- }
2054
- if ( ++p != pe ) {
2055
- _goto_targ = 1;
2056
- continue _goto;
2057
- }
2058
- case 4:
2059
- case 5:
2060
- }
2061
- break; }
2062
- }
2063
-
2064
- // line 801 "Parser.rl"
2065
-
2066
- if (cs < JSON_object_first_final) {
2067
- res.update(null, p + 1);
2068
- return;
2069
- }
2070
-
2071
- IRubyObject returnedResult = result;
2072
-
2073
- // attempt to de-serialize object
2074
- if (parser.createAdditions) {
2075
- IRubyObject vKlassName;
2076
- if (objectDefault) {
2077
- vKlassName = ((RubyHash)result).op_aref(context, parser.createId);
2078
- } else {
2079
- vKlassName = result.callMethod(context, "[]", parser.createId);
2080
- }
2081
-
2082
- if (!vKlassName.isNil()) {
2083
- // might throw ArgumentError, we let it propagate
2084
- IRubyObject klass = parser.info.jsonModule.get().
2085
- callMethod(context, "deep_const_get", vKlassName);
2086
- if (klass.respondsTo("json_creatable?") &&
2087
- klass.callMethod(context, "json_creatable?").isTrue()) {
2088
-
2089
- returnedResult = klass.callMethod(context, "json_create", result);
2090
- }
2091
- }
2092
- }
2093
- res.update(returnedResult, p + 1);
2094
- }
2095
-
2096
-
2097
- // line 2098 "Parser.java"
2098
- private static byte[] init__JSON_actions_0()
2099
- {
2100
- return new byte [] {
2101
- 0, 1, 0, 1, 1
2102
- };
2103
- }
2104
-
2105
- private static final byte _JSON_actions[] = init__JSON_actions_0();
2106
-
2107
-
2108
- private static byte[] init__JSON_key_offsets_0()
2109
- {
2110
- return new byte [] {
2111
- 0, 0, 7, 9, 10, 12, 13, 15, 16, 18, 19
2112
- };
2113
- }
2114
-
2115
- private static final byte _JSON_key_offsets[] = init__JSON_key_offsets_0();
2116
-
2117
-
2118
- private static char[] init__JSON_trans_keys_0()
2119
- {
2120
- return new char [] {
2121
- 13, 32, 47, 91, 123, 9, 10, 42, 47, 42, 42, 47,
2122
- 10, 42, 47, 42, 42, 47, 10, 13, 32, 47, 9, 10,
2123
- 0
2124
- };
2125
- }
2126
-
2127
- private static final char _JSON_trans_keys[] = init__JSON_trans_keys_0();
2128
-
2129
-
2130
- private static byte[] init__JSON_single_lengths_0()
2131
- {
2132
- return new byte [] {
2133
- 0, 5, 2, 1, 2, 1, 2, 1, 2, 1, 3
2134
- };
2135
- }
2136
-
2137
- private static final byte _JSON_single_lengths[] = init__JSON_single_lengths_0();
2138
-
2139
-
2140
- private static byte[] init__JSON_range_lengths_0()
2141
- {
2142
- return new byte [] {
2143
- 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1
2144
- };
2145
- }
2146
-
2147
- private static final byte _JSON_range_lengths[] = init__JSON_range_lengths_0();
2148
-
2149
-
2150
- private static byte[] init__JSON_index_offsets_0()
2151
- {
2152
- return new byte [] {
2153
- 0, 0, 7, 10, 12, 15, 17, 20, 22, 25, 27
2154
- };
2155
- }
2156
-
2157
- private static final byte _JSON_index_offsets[] = init__JSON_index_offsets_0();
2158
-
2159
-
2160
- private static byte[] init__JSON_indicies_0()
2161
- {
2162
- return new byte [] {
2163
- 0, 0, 2, 3, 4, 0, 1, 5, 6, 1, 7, 5,
2164
- 7, 0, 5, 0, 6, 8, 9, 1, 10, 8, 10, 11,
2165
- 8, 11, 9, 11, 11, 12, 11, 1, 0
2166
- };
2167
- }
2168
-
2169
- private static final byte _JSON_indicies[] = init__JSON_indicies_0();
2170
-
2171
-
2172
- private static byte[] init__JSON_trans_targs_0()
2173
- {
2174
- return new byte [] {
2175
- 1, 0, 2, 10, 10, 3, 5, 4, 7, 9, 8, 10,
2176
- 6
2177
- };
2178
- }
2179
-
2180
- private static final byte _JSON_trans_targs[] = init__JSON_trans_targs_0();
2181
-
2182
-
2183
- private static byte[] init__JSON_trans_actions_0()
2184
- {
2185
- return new byte [] {
2186
- 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0,
2187
- 0
2188
- };
2189
- }
2190
-
2191
- private static final byte _JSON_trans_actions[] = init__JSON_trans_actions_0();
2192
-
2193
-
2194
- static final int JSON_start = 1;
2195
- static final int JSON_first_final = 10;
2196
- static final int JSON_error = 0;
2197
-
2198
- static final int JSON_en_main = 1;
2199
-
2200
-
2201
- // line 866 "Parser.rl"
2202
-
2203
-
2204
- public IRubyObject parseStrict() {
2205
- int cs = EVIL;
2206
- int p, pe;
2207
- IRubyObject result = null;
2208
- ParserResult res = new ParserResult();
2209
-
2210
-
2211
- // line 2212 "Parser.java"
2212
- {
2213
- cs = JSON_start;
2214
- }
2215
-
2216
- // line 875 "Parser.rl"
2217
- p = byteList.begin();
2218
- pe = p + byteList.length();
2219
-
2220
- // line 2221 "Parser.java"
2221
- {
2222
- int _klen;
2223
- int _trans = 0;
2224
- int _acts;
2225
- int _nacts;
2226
- int _keys;
2227
- int _goto_targ = 0;
2228
-
2229
- _goto: while (true) {
2230
- switch ( _goto_targ ) {
2231
- case 0:
2232
- if ( p == pe ) {
2233
- _goto_targ = 4;
2234
- continue _goto;
2235
- }
2236
- if ( cs == 0 ) {
2237
- _goto_targ = 5;
2238
- continue _goto;
2239
- }
2240
- case 1:
2241
- _match: do {
2242
- _keys = _JSON_key_offsets[cs];
2243
- _trans = _JSON_index_offsets[cs];
2244
- _klen = _JSON_single_lengths[cs];
2245
- if ( _klen > 0 ) {
2246
- int _lower = _keys;
2247
- int _mid;
2248
- int _upper = _keys + _klen - 1;
2249
- while (true) {
2250
- if ( _upper < _lower )
2251
- break;
2252
-
2253
- _mid = _lower + ((_upper-_lower) >> 1);
2254
- if ( data[p] < _JSON_trans_keys[_mid] )
2255
- _upper = _mid - 1;
2256
- else if ( data[p] > _JSON_trans_keys[_mid] )
2257
- _lower = _mid + 1;
2258
- else {
2259
- _trans += (_mid - _keys);
2260
- break _match;
2261
- }
2262
- }
2263
- _keys += _klen;
2264
- _trans += _klen;
2265
- }
2266
-
2267
- _klen = _JSON_range_lengths[cs];
2268
- if ( _klen > 0 ) {
2269
- int _lower = _keys;
2270
- int _mid;
2271
- int _upper = _keys + (_klen<<1) - 2;
2272
- while (true) {
2273
- if ( _upper < _lower )
2274
- break;
2275
-
2276
- _mid = _lower + (((_upper-_lower) >> 1) & ~1);
2277
- if ( data[p] < _JSON_trans_keys[_mid] )
2278
- _upper = _mid - 2;
2279
- else if ( data[p] > _JSON_trans_keys[_mid+1] )
2280
- _lower = _mid + 2;
2281
- else {
2282
- _trans += ((_mid - _keys)>>1);
2283
- break _match;
2284
- }
2285
- }
2286
- _trans += _klen;
2287
- }
2288
- } while (false);
2289
-
2290
- _trans = _JSON_indicies[_trans];
2291
- cs = _JSON_trans_targs[_trans];
2292
-
2293
- if ( _JSON_trans_actions[_trans] != 0 ) {
2294
- _acts = _JSON_trans_actions[_trans];
2295
- _nacts = (int) _JSON_actions[_acts++];
2296
- while ( _nacts-- > 0 )
2297
- {
2298
- switch ( _JSON_actions[_acts++] )
2299
- {
2300
- case 0:
2301
- // line 838 "Parser.rl"
2302
- {
2303
- currentNesting = 1;
2304
- parseObject(res, p, pe);
2305
- if (res.result == null) {
2306
- p--;
2307
- { p += 1; _goto_targ = 5; if (true) continue _goto;}
2308
- } else {
2309
- result = res.result;
2310
- {p = (( res.p))-1;}
2311
- }
2312
- }
2313
- break;
2314
- case 1:
2315
- // line 850 "Parser.rl"
2316
- {
2317
- currentNesting = 1;
2318
- parseArray(res, p, pe);
2319
- if (res.result == null) {
2320
- p--;
2321
- { p += 1; _goto_targ = 5; if (true) continue _goto;}
2322
- } else {
2323
- result = res.result;
2324
- {p = (( res.p))-1;}
2325
- }
2326
- }
2327
- break;
2328
- // line 2329 "Parser.java"
2329
- }
2330
- }
2331
- }
2332
-
2333
- case 2:
2334
- if ( cs == 0 ) {
2335
- _goto_targ = 5;
2336
- continue _goto;
2337
- }
2338
- if ( ++p != pe ) {
2339
- _goto_targ = 1;
2340
- continue _goto;
2341
- }
2342
- case 4:
2343
- case 5:
2344
- }
2345
- break; }
2346
- }
2347
-
2348
- // line 878 "Parser.rl"
2349
-
2350
- if (cs >= JSON_first_final && p == pe) {
2351
- return result;
2352
- } else {
2353
- throw unexpectedToken(p, pe);
2354
- }
2355
- }
2356
-
2357
-
2358
- // line 2359 "Parser.java"
2359
- private static byte[] init__JSON_quirks_mode_actions_0()
2360
- {
2361
- return new byte [] {
2362
- 0, 1, 0
2363
- };
2364
- }
2365
-
2366
- private static final byte _JSON_quirks_mode_actions[] = init__JSON_quirks_mode_actions_0();
2367
-
2368
-
2369
- private static byte[] init__JSON_quirks_mode_key_offsets_0()
2370
- {
2371
- return new byte [] {
2372
- 0, 0, 16, 18, 19, 21, 22, 24, 25, 27, 28
2373
- };
2374
- }
2375
-
2376
- private static final byte _JSON_quirks_mode_key_offsets[] = init__JSON_quirks_mode_key_offsets_0();
2377
-
2378
-
2379
- private static char[] init__JSON_quirks_mode_trans_keys_0()
2380
- {
2381
- return new char [] {
2382
- 13, 32, 34, 45, 47, 73, 78, 91, 102, 110, 116, 123,
2383
- 9, 10, 48, 57, 42, 47, 42, 42, 47, 10, 42, 47,
2384
- 42, 42, 47, 10, 13, 32, 47, 9, 10, 0
2385
- };
2386
- }
2387
-
2388
- private static final char _JSON_quirks_mode_trans_keys[] = init__JSON_quirks_mode_trans_keys_0();
2389
-
2390
-
2391
- private static byte[] init__JSON_quirks_mode_single_lengths_0()
2392
- {
2393
- return new byte [] {
2394
- 0, 12, 2, 1, 2, 1, 2, 1, 2, 1, 3
2395
- };
2396
- }
2397
-
2398
- private static final byte _JSON_quirks_mode_single_lengths[] = init__JSON_quirks_mode_single_lengths_0();
2399
-
2400
-
2401
- private static byte[] init__JSON_quirks_mode_range_lengths_0()
2402
- {
2403
- return new byte [] {
2404
- 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 1
2405
- };
2406
- }
2407
-
2408
- private static final byte _JSON_quirks_mode_range_lengths[] = init__JSON_quirks_mode_range_lengths_0();
2409
-
2410
-
2411
- private static byte[] init__JSON_quirks_mode_index_offsets_0()
2412
- {
2413
- return new byte [] {
2414
- 0, 0, 15, 18, 20, 23, 25, 28, 30, 33, 35
2415
- };
2416
- }
2417
-
2418
- private static final byte _JSON_quirks_mode_index_offsets[] = init__JSON_quirks_mode_index_offsets_0();
2419
-
2420
-
2421
- private static byte[] init__JSON_quirks_mode_indicies_0()
2422
- {
2423
- return new byte [] {
2424
- 0, 0, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2,
2425
- 0, 2, 1, 4, 5, 1, 6, 4, 6, 7, 4, 7,
2426
- 5, 8, 9, 1, 10, 8, 10, 0, 8, 0, 9, 7,
2427
- 7, 11, 7, 1, 0
2428
- };
2429
- }
2430
-
2431
- private static final byte _JSON_quirks_mode_indicies[] = init__JSON_quirks_mode_indicies_0();
2432
-
2433
-
2434
- private static byte[] init__JSON_quirks_mode_trans_targs_0()
2435
- {
2436
- return new byte [] {
2437
- 1, 0, 10, 6, 3, 5, 4, 10, 7, 9, 8, 2
2438
- };
2439
- }
2440
-
2441
- private static final byte _JSON_quirks_mode_trans_targs[] = init__JSON_quirks_mode_trans_targs_0();
2442
-
2443
-
2444
- private static byte[] init__JSON_quirks_mode_trans_actions_0()
2445
- {
2446
- return new byte [] {
2447
- 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0
2448
- };
2449
- }
2450
-
2451
- private static final byte _JSON_quirks_mode_trans_actions[] = init__JSON_quirks_mode_trans_actions_0();
2452
-
2453
-
2454
- static final int JSON_quirks_mode_start = 1;
2455
- static final int JSON_quirks_mode_first_final = 10;
2456
- static final int JSON_quirks_mode_error = 0;
2457
-
2458
- static final int JSON_quirks_mode_en_main = 1;
2459
-
2460
-
2461
- // line 906 "Parser.rl"
2462
-
2463
-
2464
- public IRubyObject parseQuirksMode() {
2465
- int cs = EVIL;
2466
- int p, pe;
2467
- IRubyObject result = null;
2468
- ParserResult res = new ParserResult();
2469
-
2470
-
2471
- // line 2472 "Parser.java"
2472
- {
2473
- cs = JSON_quirks_mode_start;
2474
- }
2475
-
2476
- // line 915 "Parser.rl"
2477
- p = byteList.begin();
2478
- pe = p + byteList.length();
2479
-
2480
- // line 2481 "Parser.java"
2481
- {
2482
- int _klen;
2483
- int _trans = 0;
2484
- int _acts;
2485
- int _nacts;
2486
- int _keys;
2487
- int _goto_targ = 0;
2488
-
2489
- _goto: while (true) {
2490
- switch ( _goto_targ ) {
2491
- case 0:
2492
- if ( p == pe ) {
2493
- _goto_targ = 4;
2494
- continue _goto;
2495
- }
2496
- if ( cs == 0 ) {
2497
- _goto_targ = 5;
2498
- continue _goto;
2499
- }
2500
- case 1:
2501
- _match: do {
2502
- _keys = _JSON_quirks_mode_key_offsets[cs];
2503
- _trans = _JSON_quirks_mode_index_offsets[cs];
2504
- _klen = _JSON_quirks_mode_single_lengths[cs];
2505
- if ( _klen > 0 ) {
2506
- int _lower = _keys;
2507
- int _mid;
2508
- int _upper = _keys + _klen - 1;
2509
- while (true) {
2510
- if ( _upper < _lower )
2511
- break;
2512
-
2513
- _mid = _lower + ((_upper-_lower) >> 1);
2514
- if ( data[p] < _JSON_quirks_mode_trans_keys[_mid] )
2515
- _upper = _mid - 1;
2516
- else if ( data[p] > _JSON_quirks_mode_trans_keys[_mid] )
2517
- _lower = _mid + 1;
2518
- else {
2519
- _trans += (_mid - _keys);
2520
- break _match;
2521
- }
2522
- }
2523
- _keys += _klen;
2524
- _trans += _klen;
2525
- }
2526
-
2527
- _klen = _JSON_quirks_mode_range_lengths[cs];
2528
- if ( _klen > 0 ) {
2529
- int _lower = _keys;
2530
- int _mid;
2531
- int _upper = _keys + (_klen<<1) - 2;
2532
- while (true) {
2533
- if ( _upper < _lower )
2534
- break;
2535
-
2536
- _mid = _lower + (((_upper-_lower) >> 1) & ~1);
2537
- if ( data[p] < _JSON_quirks_mode_trans_keys[_mid] )
2538
- _upper = _mid - 2;
2539
- else if ( data[p] > _JSON_quirks_mode_trans_keys[_mid+1] )
2540
- _lower = _mid + 2;
2541
- else {
2542
- _trans += ((_mid - _keys)>>1);
2543
- break _match;
2544
- }
2545
- }
2546
- _trans += _klen;
2547
- }
2548
- } while (false);
2549
-
2550
- _trans = _JSON_quirks_mode_indicies[_trans];
2551
- cs = _JSON_quirks_mode_trans_targs[_trans];
2552
-
2553
- if ( _JSON_quirks_mode_trans_actions[_trans] != 0 ) {
2554
- _acts = _JSON_quirks_mode_trans_actions[_trans];
2555
- _nacts = (int) _JSON_quirks_mode_actions[_acts++];
2556
- while ( _nacts-- > 0 )
2557
- {
2558
- switch ( _JSON_quirks_mode_actions[_acts++] )
2559
- {
2560
- case 0:
2561
- // line 892 "Parser.rl"
2562
- {
2563
- parseValue(res, p, pe);
2564
- if (res.result == null) {
2565
- p--;
2566
- { p += 1; _goto_targ = 5; if (true) continue _goto;}
2567
- } else {
2568
- result = res.result;
2569
- {p = (( res.p))-1;}
2570
- }
2571
- }
2572
- break;
2573
- // line 2574 "Parser.java"
2574
- }
2575
- }
2576
- }
2577
-
2578
- case 2:
2579
- if ( cs == 0 ) {
2580
- _goto_targ = 5;
2581
- continue _goto;
2582
- }
2583
- if ( ++p != pe ) {
2584
- _goto_targ = 1;
2585
- continue _goto;
2586
- }
2587
- case 4:
2588
- case 5:
2589
- }
2590
- break; }
2591
- }
2592
-
2593
- // line 918 "Parser.rl"
2594
-
2595
- if (cs >= JSON_quirks_mode_first_final && p == pe) {
2596
- return result;
2597
- } else {
2598
- throw unexpectedToken(p, pe);
2599
- }
2600
- }
2601
-
2602
- public IRubyObject parse() {
2603
- if (parser.quirksMode) {
2604
- return parseQuirksMode();
2605
- } else {
2606
- return parseStrict();
2607
- }
2608
-
2609
- }
2610
-
2611
- /**
2612
- * Updates the "view" bytelist with the new offsets and returns it.
2613
- * @param start
2614
- * @param end
2615
- */
2616
- private ByteList absSubSequence(int absStart, int absEnd) {
2617
- view.setBegin(absStart);
2618
- view.setRealSize(absEnd - absStart);
2619
- return view;
2620
- }
2621
-
2622
- /**
2623
- * Retrieves a constant directly descended from the <code>JSON</code> module.
2624
- * @param name The constant name
2625
- */
2626
- private IRubyObject getConstant(String name) {
2627
- return parser.info.jsonModule.get().getConstant(name);
2628
- }
2629
-
2630
- private RaiseException newException(String className, String message) {
2631
- return Utils.newException(context, className, message);
2632
- }
2633
-
2634
- private RaiseException newException(String className, RubyString message) {
2635
- return Utils.newException(context, className, message);
2636
- }
2637
-
2638
- private RaiseException newException(String className,
2639
- String messageBegin, ByteList messageEnd) {
2640
- return newException(className,
2641
- getRuntime().newString(messageBegin).cat(messageEnd));
2642
- }
2643
- }
2644
- }