json 2.7.2 → 2.8.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,177 +0,0 @@
1
- #ifndef _GENERATOR_H_
2
- #define _GENERATOR_H_
3
-
4
- #include <math.h>
5
- #include <ctype.h>
6
-
7
- #include "ruby.h"
8
-
9
- #ifdef HAVE_RUBY_RE_H
10
- #include "ruby/re.h"
11
- #else
12
- #include "re.h"
13
- #endif
14
-
15
- #ifndef rb_intern_str
16
- #define rb_intern_str(string) SYM2ID(rb_str_intern(string))
17
- #endif
18
-
19
- #ifndef rb_obj_instance_variables
20
- #define rb_obj_instance_variables(object) rb_funcall(object, rb_intern("instance_variables"), 0)
21
- #endif
22
-
23
- #define option_given_p(opts, key) RTEST(rb_funcall(opts, i_key_p, 1, key))
24
-
25
- /* unicode definitions */
26
-
27
- #define UNI_STRICT_CONVERSION 1
28
-
29
- typedef unsigned long UTF32; /* at least 32 bits */
30
- typedef unsigned short UTF16; /* at least 16 bits */
31
- typedef unsigned char UTF8; /* typically 8 bits */
32
-
33
- #define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD
34
- #define UNI_MAX_BMP (UTF32)0x0000FFFF
35
- #define UNI_MAX_UTF16 (UTF32)0x0010FFFF
36
- #define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF
37
- #define UNI_MAX_LEGAL_UTF32 (UTF32)0x0010FFFF
38
-
39
- #define UNI_SUR_HIGH_START (UTF32)0xD800
40
- #define UNI_SUR_HIGH_END (UTF32)0xDBFF
41
- #define UNI_SUR_LOW_START (UTF32)0xDC00
42
- #define UNI_SUR_LOW_END (UTF32)0xDFFF
43
-
44
- static const int halfShift = 10; /* used for shifting by 10 bits */
45
-
46
- static const UTF32 halfBase = 0x0010000UL;
47
- static const UTF32 halfMask = 0x3FFUL;
48
-
49
- static unsigned char isLegalUTF8(const UTF8 *source, unsigned long length);
50
- static void unicode_escape(char *buf, UTF16 character);
51
- static void unicode_escape_to_buffer(FBuffer *buffer, char buf[6], UTF16 character);
52
- static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string, char script_safe);
53
- static void convert_UTF8_to_JSON(FBuffer *buffer, VALUE string, char script_safe);
54
- static char *fstrndup(const char *ptr, unsigned long len);
55
-
56
- /* ruby api and some helpers */
57
-
58
- typedef struct JSON_Generator_StateStruct {
59
- char *indent;
60
- long indent_len;
61
- char *space;
62
- long space_len;
63
- char *space_before;
64
- long space_before_len;
65
- char *object_nl;
66
- long object_nl_len;
67
- char *array_nl;
68
- long array_nl_len;
69
- FBuffer *array_delim;
70
- FBuffer *object_delim;
71
- FBuffer *object_delim2;
72
- long max_nesting;
73
- char allow_nan;
74
- char ascii_only;
75
- char script_safe;
76
- char strict;
77
- long depth;
78
- long buffer_initial_length;
79
- } JSON_Generator_State;
80
-
81
- #define GET_STATE_TO(self, state) \
82
- TypedData_Get_Struct(self, JSON_Generator_State, &JSON_Generator_State_type, state)
83
-
84
- #define GET_STATE(self) \
85
- JSON_Generator_State *state; \
86
- GET_STATE_TO(self, state)
87
-
88
- #define GENERATE_JSON(type) \
89
- FBuffer *buffer; \
90
- VALUE Vstate; \
91
- JSON_Generator_State *state; \
92
- \
93
- rb_scan_args(argc, argv, "01", &Vstate); \
94
- Vstate = cState_from_state_s(cState, Vstate); \
95
- TypedData_Get_Struct(Vstate, JSON_Generator_State, &JSON_Generator_State_type, state); \
96
- buffer = cState_prepare_buffer(Vstate); \
97
- generate_json_##type(buffer, Vstate, state, self); \
98
- return fbuffer_to_s(buffer)
99
-
100
- static VALUE mHash_to_json(int argc, VALUE *argv, VALUE self);
101
- static VALUE mArray_to_json(int argc, VALUE *argv, VALUE self);
102
- #ifdef RUBY_INTEGER_UNIFICATION
103
- static VALUE mInteger_to_json(int argc, VALUE *argv, VALUE self);
104
- #else
105
- static VALUE mFixnum_to_json(int argc, VALUE *argv, VALUE self);
106
- static VALUE mBignum_to_json(int argc, VALUE *argv, VALUE self);
107
- #endif
108
- static VALUE mFloat_to_json(int argc, VALUE *argv, VALUE self);
109
- static VALUE mString_included_s(VALUE self, VALUE modul);
110
- static VALUE mString_to_json(int argc, VALUE *argv, VALUE self);
111
- static VALUE mString_to_json_raw_object(VALUE self);
112
- static VALUE mString_to_json_raw(int argc, VALUE *argv, VALUE self);
113
- static VALUE mString_Extend_json_create(VALUE self, VALUE o);
114
- static VALUE mTrueClass_to_json(int argc, VALUE *argv, VALUE self);
115
- static VALUE mFalseClass_to_json(int argc, VALUE *argv, VALUE self);
116
- static VALUE mNilClass_to_json(int argc, VALUE *argv, VALUE self);
117
- static VALUE mObject_to_json(int argc, VALUE *argv, VALUE self);
118
- static void State_free(void *state);
119
- static VALUE cState_s_allocate(VALUE klass);
120
- static VALUE cState_configure(VALUE self, VALUE opts);
121
- static VALUE cState_to_h(VALUE self);
122
- static void generate_json(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
123
- static void generate_json_object(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
124
- static void generate_json_array(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
125
- static void generate_json_string(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
126
- static void generate_json_null(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
127
- static void generate_json_false(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
128
- static void generate_json_true(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
129
- #ifdef RUBY_INTEGER_UNIFICATION
130
- static void generate_json_integer(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
131
- #endif
132
- static void generate_json_fixnum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
133
- static void generate_json_bignum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
134
- static void generate_json_float(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
135
- static VALUE cState_partial_generate(VALUE self, VALUE obj);
136
- static VALUE cState_generate(VALUE self, VALUE obj);
137
- static VALUE cState_initialize(int argc, VALUE *argv, VALUE self);
138
- static VALUE cState_from_state_s(VALUE self, VALUE opts);
139
- static VALUE cState_indent(VALUE self);
140
- static VALUE cState_indent_set(VALUE self, VALUE indent);
141
- static VALUE cState_space(VALUE self);
142
- static VALUE cState_space_set(VALUE self, VALUE space);
143
- static VALUE cState_space_before(VALUE self);
144
- static VALUE cState_space_before_set(VALUE self, VALUE space_before);
145
- static VALUE cState_object_nl(VALUE self);
146
- static VALUE cState_object_nl_set(VALUE self, VALUE object_nl);
147
- static VALUE cState_array_nl(VALUE self);
148
- static VALUE cState_array_nl_set(VALUE self, VALUE array_nl);
149
- static VALUE cState_max_nesting(VALUE self);
150
- static VALUE cState_max_nesting_set(VALUE self, VALUE depth);
151
- static VALUE cState_allow_nan_p(VALUE self);
152
- static VALUE cState_ascii_only_p(VALUE self);
153
- static VALUE cState_depth(VALUE self);
154
- static VALUE cState_depth_set(VALUE self, VALUE depth);
155
- static VALUE cState_script_safe(VALUE self);
156
- static VALUE cState_script_safe_set(VALUE self, VALUE depth);
157
- static VALUE cState_strict(VALUE self);
158
- static VALUE cState_strict_set(VALUE self, VALUE strict);
159
- static FBuffer *cState_prepare_buffer(VALUE self);
160
- #ifndef ZALLOC
161
- #define ZALLOC(type) ((type *)ruby_zalloc(sizeof(type)))
162
- static inline void *ruby_zalloc(size_t n)
163
- {
164
- void *p = ruby_xmalloc(n);
165
- memset(p, 0, n);
166
- return p;
167
- }
168
- #endif
169
- #ifdef TypedData_Make_Struct
170
- static const rb_data_type_t JSON_Generator_State_type;
171
- #define NEW_TYPEDDATA_WRAPPER 1
172
- #else
173
- #define TypedData_Make_Struct(klass, type, ignore, json) Data_Make_Struct(klass, type, NULL, State_free, json)
174
- #define TypedData_Get_Struct(self, JSON_Generator_State, ignore, json) Data_Get_Struct(self, JSON_Generator_State, json)
175
- #endif
176
-
177
- #endif
@@ -1 +0,0 @@
1
- parser.o: parser.c parser.h $(srcdir)/../fbuffer/fbuffer.h
@@ -1,96 +0,0 @@
1
- #ifndef _PARSER_H_
2
- #define _PARSER_H_
3
-
4
- #include "ruby.h"
5
-
6
- #ifndef HAVE_RUBY_RE_H
7
- #include "re.h"
8
- #endif
9
-
10
- #ifdef HAVE_RUBY_ST_H
11
- #include "ruby/st.h"
12
- #else
13
- #include "st.h"
14
- #endif
15
-
16
- #ifndef MAYBE_UNUSED
17
- # define MAYBE_UNUSED(x) x
18
- #endif
19
-
20
- #define option_given_p(opts, key) RTEST(rb_funcall(opts, i_key_p, 1, key))
21
-
22
- /* unicode */
23
-
24
- typedef unsigned long UTF32; /* at least 32 bits */
25
- typedef unsigned short UTF16; /* at least 16 bits */
26
- typedef unsigned char UTF8; /* typically 8 bits */
27
-
28
- #define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD
29
- #define UNI_SUR_HIGH_START (UTF32)0xD800
30
- #define UNI_SUR_HIGH_END (UTF32)0xDBFF
31
- #define UNI_SUR_LOW_START (UTF32)0xDC00
32
- #define UNI_SUR_LOW_END (UTF32)0xDFFF
33
-
34
- typedef struct JSON_ParserStruct {
35
- VALUE Vsource;
36
- char *source;
37
- long len;
38
- char *memo;
39
- VALUE create_id;
40
- int max_nesting;
41
- int allow_nan;
42
- int parsing_name;
43
- int symbolize_names;
44
- int freeze;
45
- VALUE object_class;
46
- VALUE array_class;
47
- VALUE decimal_class;
48
- int create_additions;
49
- VALUE match_string;
50
- FBuffer *fbuffer;
51
- } JSON_Parser;
52
-
53
- #define GET_PARSER \
54
- GET_PARSER_INIT; \
55
- if (!json->Vsource) rb_raise(rb_eTypeError, "uninitialized instance")
56
- #define GET_PARSER_INIT \
57
- JSON_Parser *json; \
58
- TypedData_Get_Struct(self, JSON_Parser, &JSON_Parser_type, json)
59
-
60
- #define MinusInfinity "-Infinity"
61
- #define EVIL 0x666
62
-
63
- static UTF32 unescape_unicode(const unsigned char *p);
64
- static int convert_UTF32_to_UTF8(char *buf, UTF32 ch);
65
- static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting);
66
- static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting);
67
- static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result);
68
- static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result);
69
- static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting);
70
- static VALUE json_string_unescape(char *string, char *stringEnd, int intern, int symbolize);
71
- static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result);
72
- static VALUE convert_encoding(VALUE source);
73
- static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self);
74
- static VALUE cParser_parse(VALUE self);
75
- static void JSON_mark(void *json);
76
- static void JSON_free(void *json);
77
- static VALUE cJSON_parser_s_allocate(VALUE klass);
78
- static VALUE cParser_source(VALUE self);
79
- #ifndef ZALLOC
80
- #define ZALLOC(type) ((type *)ruby_zalloc(sizeof(type)))
81
- static inline void *ruby_zalloc(size_t n)
82
- {
83
- void *p = ruby_xmalloc(n);
84
- memset(p, 0, n);
85
- return p;
86
- }
87
- #endif
88
- #ifdef TypedData_Make_Struct
89
- static const rb_data_type_t JSON_Parser_type;
90
- #define NEW_TYPEDDATA_WRAPPER 1
91
- #else
92
- #define TypedData_Make_Struct(klass, type, ignore, json) Data_Make_Struct(klass, type, NULL, JSON_free, json)
93
- #define TypedData_Get_Struct(self, JSON_Parser, ignore, json) Data_Get_Struct(self, JSON_Parser, json)
94
- #endif
95
-
96
- #endif
data/ext/json/extconf.rb DELETED
@@ -1,3 +0,0 @@
1
- require 'mkmf'
2
-
3
- create_makefile('json')
@@ -1,337 +0,0 @@
1
- #frozen_string_literal: false
2
- require 'strscan'
3
-
4
- module JSON
5
- module Pure
6
- # This class implements the JSON parser that is used to parse a JSON string
7
- # into a Ruby data structure.
8
- class Parser < StringScanner
9
- STRING = /" ((?:[^\x0-\x1f"\\] |
10
- # escaped special characters:
11
- \\["\\\/bfnrt] |
12
- \\u[0-9a-fA-F]{4} |
13
- # match all but escaped special characters:
14
- \\[\x20-\x21\x23-\x2e\x30-\x5b\x5d-\x61\x63-\x65\x67-\x6d\x6f-\x71\x73\x75-\xff])*)
15
- "/nx
16
- INTEGER = /(-?0|-?[1-9]\d*)/
17
- FLOAT = /(-?
18
- (?:0|[1-9]\d*)
19
- (?:
20
- \.\d+(?i:e[+-]?\d+) |
21
- \.\d+ |
22
- (?i:e[+-]?\d+)
23
- )
24
- )/x
25
- NAN = /NaN/
26
- INFINITY = /Infinity/
27
- MINUS_INFINITY = /-Infinity/
28
- OBJECT_OPEN = /\{/
29
- OBJECT_CLOSE = /\}/
30
- ARRAY_OPEN = /\[/
31
- ARRAY_CLOSE = /\]/
32
- PAIR_DELIMITER = /:/
33
- COLLECTION_DELIMITER = /,/
34
- TRUE = /true/
35
- FALSE = /false/
36
- NULL = /null/
37
- IGNORE = %r(
38
- (?:
39
- //[^\n\r]*[\n\r]| # line comments
40
- /\* # c-style comments
41
- (?:
42
- [^*/]| # normal chars
43
- /[^*]| # slashes that do not start a nested comment
44
- \*[^/]| # asterisks that do not end this comment
45
- /(?=\*/) # single slash before this comment's end
46
- )*
47
- \*/ # the End of this comment
48
- |[ \t\r\n]+ # whitespaces: space, horizontal tab, lf, cr
49
- )+
50
- )mx
51
-
52
- UNPARSED = Object.new.freeze
53
-
54
- # Creates a new JSON::Pure::Parser instance for the string _source_.
55
- #
56
- # It will be configured by the _opts_ hash. _opts_ can have the following
57
- # keys:
58
- # * *max_nesting*: The maximum depth of nesting allowed in the parsed data
59
- # structures. Disable depth checking with :max_nesting => false|nil|0,
60
- # it defaults to 100.
61
- # * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
62
- # defiance of RFC 7159 to be parsed by the Parser. This option defaults
63
- # to false.
64
- # * *freeze*: If set to true, all parsed objects will be frozen. Parsed
65
- # string will be deduplicated if possible.
66
- # * *symbolize_names*: If set to true, returns symbols for the names
67
- # (keys) in a JSON object. Otherwise strings are returned, which is
68
- # also the default. It's not possible to use this option in
69
- # conjunction with the *create_additions* option.
70
- # * *create_additions*: If set to true, the Parser creates
71
- # additions when a matching class and create_id are found. This
72
- # option defaults to false.
73
- # * *object_class*: Defaults to Hash
74
- # * *array_class*: Defaults to Array
75
- # * *decimal_class*: Specifies which class to use instead of the default
76
- # (Float) when parsing decimal numbers. This class must accept a single
77
- # string argument in its constructor.
78
- def initialize(source, opts = {})
79
- opts ||= {}
80
- source = convert_encoding source
81
- super source
82
- if !opts.key?(:max_nesting) # defaults to 100
83
- @max_nesting = 100
84
- elsif opts[:max_nesting]
85
- @max_nesting = opts[:max_nesting]
86
- else
87
- @max_nesting = 0
88
- end
89
- @allow_nan = !!opts[:allow_nan]
90
- @symbolize_names = !!opts[:symbolize_names]
91
- @freeze = !!opts[:freeze]
92
- if opts.key?(:create_additions)
93
- @create_additions = !!opts[:create_additions]
94
- else
95
- @create_additions = false
96
- end
97
- @symbolize_names && @create_additions and raise ArgumentError,
98
- 'options :symbolize_names and :create_additions cannot be used '\
99
- 'in conjunction'
100
- @create_id = @create_additions ? JSON.create_id : nil
101
- @object_class = opts[:object_class] || Hash
102
- @array_class = opts[:array_class] || Array
103
- @decimal_class = opts[:decimal_class]
104
- @match_string = opts[:match_string]
105
- end
106
-
107
- alias source string
108
-
109
- def reset
110
- super
111
- @current_nesting = 0
112
- end
113
-
114
- # Parses the current JSON string _source_ and returns the
115
- # complete data structure as a result.
116
- def parse
117
- reset
118
- obj = nil
119
- while !eos? && skip(IGNORE) do end
120
- if eos?
121
- raise ParserError, "source is not valid JSON!"
122
- else
123
- obj = parse_value
124
- UNPARSED.equal?(obj) and raise ParserError,
125
- "source is not valid JSON!"
126
- obj.freeze if @freeze
127
- end
128
- while !eos? && skip(IGNORE) do end
129
- eos? or raise ParserError, "source is not valid JSON!"
130
- obj
131
- end
132
-
133
- private
134
-
135
- def convert_encoding(source)
136
- if source.respond_to?(:to_str)
137
- source = source.to_str
138
- else
139
- raise TypeError,
140
- "#{source.inspect} is not like a string"
141
- end
142
- if source.encoding != ::Encoding::ASCII_8BIT
143
- source = source.encode(::Encoding::UTF_8)
144
- source.force_encoding(::Encoding::ASCII_8BIT)
145
- end
146
- source
147
- end
148
-
149
- # Unescape characters in strings.
150
- UNESCAPE_MAP = Hash.new { |h, k| h[k] = k.chr }
151
- UNESCAPE_MAP.update({
152
- ?" => '"',
153
- ?\\ => '\\',
154
- ?/ => '/',
155
- ?b => "\b",
156
- ?f => "\f",
157
- ?n => "\n",
158
- ?r => "\r",
159
- ?t => "\t",
160
- ?u => nil,
161
- })
162
-
163
- EMPTY_8BIT_STRING = ''
164
- if ::String.method_defined?(:encode)
165
- EMPTY_8BIT_STRING.force_encoding Encoding::ASCII_8BIT
166
- end
167
-
168
- STR_UMINUS = ''.respond_to?(:-@)
169
- def parse_string
170
- if scan(STRING)
171
- return '' if self[1].empty?
172
- string = self[1].gsub(%r((?:\\[\\bfnrt"/]|(?:\\u(?:[A-Fa-f\d]{4}))+|\\[\x20-\xff]))n) do |c|
173
- if u = UNESCAPE_MAP[$&[1]]
174
- u
175
- else # \uXXXX
176
- bytes = EMPTY_8BIT_STRING.dup
177
- i = 0
178
- while c[6 * i] == ?\\ && c[6 * i + 1] == ?u
179
- bytes << c[6 * i + 2, 2].to_i(16) << c[6 * i + 4, 2].to_i(16)
180
- i += 1
181
- end
182
- JSON.iconv('utf-8', 'utf-16be', bytes).force_encoding(::Encoding::ASCII_8BIT)
183
- end
184
- end
185
- if string.respond_to?(:force_encoding)
186
- string.force_encoding(::Encoding::UTF_8)
187
- end
188
-
189
- if @freeze
190
- if STR_UMINUS
191
- string = -string
192
- else
193
- string.freeze
194
- end
195
- end
196
-
197
- if @create_additions and @match_string
198
- for (regexp, klass) in @match_string
199
- klass.json_creatable? or next
200
- string =~ regexp and return klass.json_create(string)
201
- end
202
- end
203
- string
204
- else
205
- UNPARSED
206
- end
207
- rescue => e
208
- raise ParserError, "Caught #{e.class} at '#{peek(20)}': #{e}"
209
- end
210
-
211
- def parse_value
212
- case
213
- when scan(FLOAT)
214
- if @decimal_class then
215
- if @decimal_class == BigDecimal then
216
- BigDecimal(self[1])
217
- else
218
- @decimal_class.new(self[1]) || Float(self[1])
219
- end
220
- else
221
- Float(self[1])
222
- end
223
- when scan(INTEGER)
224
- Integer(self[1])
225
- when scan(TRUE)
226
- true
227
- when scan(FALSE)
228
- false
229
- when scan(NULL)
230
- nil
231
- when !UNPARSED.equal?(string = parse_string)
232
- string
233
- when scan(ARRAY_OPEN)
234
- @current_nesting += 1
235
- ary = parse_array
236
- @current_nesting -= 1
237
- ary
238
- when scan(OBJECT_OPEN)
239
- @current_nesting += 1
240
- obj = parse_object
241
- @current_nesting -= 1
242
- obj
243
- when @allow_nan && scan(NAN)
244
- NaN
245
- when @allow_nan && scan(INFINITY)
246
- Infinity
247
- when @allow_nan && scan(MINUS_INFINITY)
248
- MinusInfinity
249
- else
250
- UNPARSED
251
- end
252
- end
253
-
254
- def parse_array
255
- raise NestingError, "nesting of #@current_nesting is too deep" if
256
- @max_nesting.nonzero? && @current_nesting > @max_nesting
257
- result = @array_class.new
258
- delim = false
259
- loop do
260
- case
261
- when eos?
262
- raise ParserError, "unexpected end of string while parsing array"
263
- when !UNPARSED.equal?(value = parse_value)
264
- delim = false
265
- result << value
266
- skip(IGNORE)
267
- if scan(COLLECTION_DELIMITER)
268
- delim = true
269
- elsif match?(ARRAY_CLOSE)
270
- ;
271
- else
272
- raise ParserError, "expected ',' or ']' in array at '#{peek(20)}'!"
273
- end
274
- when scan(ARRAY_CLOSE)
275
- if delim
276
- raise ParserError, "expected next element in array at '#{peek(20)}'!"
277
- end
278
- break
279
- when skip(IGNORE)
280
- ;
281
- else
282
- raise ParserError, "unexpected token in array at '#{peek(20)}'!"
283
- end
284
- end
285
- result
286
- end
287
-
288
- def parse_object
289
- raise NestingError, "nesting of #@current_nesting is too deep" if
290
- @max_nesting.nonzero? && @current_nesting > @max_nesting
291
- result = @object_class.new
292
- delim = false
293
- loop do
294
- case
295
- when eos?
296
- raise ParserError, "unexpected end of string while parsing object"
297
- when !UNPARSED.equal?(string = parse_string)
298
- skip(IGNORE)
299
- unless scan(PAIR_DELIMITER)
300
- raise ParserError, "expected ':' in object at '#{peek(20)}'!"
301
- end
302
- skip(IGNORE)
303
- unless UNPARSED.equal?(value = parse_value)
304
- result[@symbolize_names ? string.to_sym : string] = value
305
- delim = false
306
- skip(IGNORE)
307
- if scan(COLLECTION_DELIMITER)
308
- delim = true
309
- elsif match?(OBJECT_CLOSE)
310
- ;
311
- else
312
- raise ParserError, "expected ',' or '}' in object at '#{peek(20)}'!"
313
- end
314
- else
315
- raise ParserError, "expected value in object at '#{peek(20)}'!"
316
- end
317
- when scan(OBJECT_CLOSE)
318
- if delim
319
- raise ParserError, "expected next name, value pair in object at '#{peek(20)}'!"
320
- end
321
- if @create_additions and klassname = result[@create_id]
322
- klass = JSON.deep_const_get klassname
323
- break unless klass and klass.json_creatable?
324
- result = klass.json_create(result)
325
- end
326
- break
327
- when skip(IGNORE)
328
- ;
329
- else
330
- raise ParserError, "unexpected token in object at '#{peek(20)}'!"
331
- end
332
- end
333
- result
334
- end
335
- end
336
- end
337
- end
data/lib/json/pure.rb DELETED
@@ -1,15 +0,0 @@
1
- require 'json/common'
2
-
3
- module JSON
4
- # This module holds all the modules/classes that implement JSON's
5
- # functionality in pure ruby.
6
- module Pure
7
- require 'json/pure/parser'
8
- require 'json/pure/generator'
9
- $DEBUG and warn "Using Pure library for JSON."
10
- JSON.parser = Parser
11
- JSON.generator = Generator
12
- end
13
-
14
- JSON_LOADED = true unless defined?(::JSON::JSON_LOADED)
15
- end
File without changes