yajl-ruby 0.7.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of yajl-ruby might be problematic. Click here for more details.

Files changed (46) hide show
  1. data/CHANGELOG.md +8 -1
  2. data/MIT-LICENSE +3 -3
  3. data/README.rdoc +8 -8
  4. data/VERSION.yml +1 -1
  5. data/benchmark/subjects/ohai.yml +171 -171
  6. data/ext/api/yajl_common.h +9 -9
  7. data/ext/api/yajl_gen.h +10 -10
  8. data/ext/api/yajl_parse.h +15 -15
  9. data/ext/yajl.c +8 -8
  10. data/ext/yajl_alloc.c +6 -6
  11. data/ext/yajl_alloc.h +6 -6
  12. data/ext/yajl_buf.c +7 -7
  13. data/ext/yajl_buf.h +7 -7
  14. data/ext/yajl_bytestack.h +10 -10
  15. data/ext/yajl_encode.c +12 -12
  16. data/ext/yajl_encode.h +6 -6
  17. data/ext/yajl_ext.c +67 -80
  18. data/ext/yajl_ext.h +4 -4
  19. data/ext/yajl_gen.c +16 -16
  20. data/ext/yajl_lex.c +79 -76
  21. data/ext/yajl_lex.h +14 -14
  22. data/ext/yajl_parser.c +34 -34
  23. data/ext/yajl_parser.h +7 -7
  24. data/lib/yajl.rb +7 -7
  25. data/lib/yajl/bzip2/stream_reader.rb +1 -11
  26. data/lib/yajl/bzip2/stream_writer.rb +1 -1
  27. data/lib/yajl/deflate/stream_reader.rb +6 -7
  28. data/lib/yajl/deflate/stream_writer.rb +2 -2
  29. data/lib/yajl/gzip/stream_reader.rb +0 -10
  30. data/lib/yajl/http_stream.rb +12 -12
  31. data/lib/yajl/json_gem/encoding.rb +4 -4
  32. data/lib/yajl/json_gem/parsing.rb +3 -3
  33. data/spec/encoding/encoding_spec.rb +23 -23
  34. data/spec/global/global_spec.rb +8 -8
  35. data/spec/http/http_delete_spec.rb +13 -13
  36. data/spec/http/http_error_spec.rb +2 -2
  37. data/spec/http/http_get_spec.rb +15 -15
  38. data/spec/http/http_post_spec.rb +12 -12
  39. data/spec/http/http_put_spec.rb +14 -14
  40. data/spec/json_gem_compatibility/compatibility_spec.rb +21 -21
  41. data/spec/parsing/active_support_spec.rb +6 -6
  42. data/spec/parsing/chunked_spec.rb +12 -12
  43. data/spec/parsing/fixtures_spec.rb +4 -4
  44. data/spec/parsing/one_off_spec.rb +9 -9
  45. data/yajl-ruby.gemspec +3 -3
  46. metadata +12 -5
data/ext/yajl_bytestack.h CHANGED
@@ -1,22 +1,22 @@
1
1
  /*
2
2
  * Copyright 2009, Lloyd Hilaiel.
3
- *
3
+ *
4
4
  * Redistribution and use in source and binary forms, with or without
5
5
  * modification, are permitted provided that the following conditions are
6
6
  * met:
7
- *
7
+ *
8
8
  * 1. Redistributions of source code must retain the above copyright
9
9
  * notice, this list of conditions and the following disclaimer.
10
- *
10
+ *
11
11
  * 2. Redistributions in binary form must reproduce the above copyright
12
12
  * notice, this list of conditions and the following disclaimer in
13
13
  * the documentation and/or other materials provided with the
14
14
  * distribution.
15
- *
15
+ *
16
16
  * 3. Neither the name of Lloyd Hilaiel nor the names of its
17
17
  * contributors may be used to endorse or promote products derived
18
18
  * from this software without specific prior written permission.
19
- *
19
+ *
20
20
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21
21
  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22
22
  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
@@ -28,7 +28,7 @@
28
28
  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
29
29
  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
30
  * POSSIBILITY OF SUCH DAMAGE.
31
- */
31
+ */
32
32
 
33
33
  /*
34
34
  * A header only implementation of a simple stack of bytes, used in YAJL
@@ -61,7 +61,7 @@ typedef struct yajl_bytestack_t
61
61
 
62
62
  /* initialize a bytestack */
63
63
  #define yajl_bs_free(obs) \
64
- if ((obs).stack) (obs).yaf->free((obs).yaf->ctx, (obs).stack);
64
+ if ((obs).stack) (obs).yaf->free((obs).yaf->ctx, (obs).stack);
65
65
 
66
66
  #define yajl_bs_current(obs) \
67
67
  (assert((obs).used > 0), (obs).stack[(obs).used - 1])
@@ -74,12 +74,12 @@ typedef struct yajl_bytestack_t
74
74
  } \
75
75
  (obs).stack[((obs).used)++] = (byte); \
76
76
  }
77
-
77
+
78
78
  /* removes the top item of the stack, returns nothing */
79
79
  #define yajl_bs_pop(obs) { ((obs).used)--; }
80
80
 
81
81
  #define yajl_bs_set(obs, byte) \
82
- (obs).stack[((obs).used) - 1] = (byte);
83
-
82
+ (obs).stack[((obs).used) - 1] = (byte);
83
+
84
84
 
85
85
  #endif
data/ext/yajl_encode.c CHANGED
@@ -1,22 +1,22 @@
1
1
  /*
2
2
  * Copyright 2007-2009, Lloyd Hilaiel.
3
- *
3
+ *
4
4
  * Redistribution and use in source and binary forms, with or without
5
5
  * modification, are permitted provided that the following conditions are
6
6
  * met:
7
- *
7
+ *
8
8
  * 1. Redistributions of source code must retain the above copyright
9
9
  * notice, this list of conditions and the following disclaimer.
10
- *
10
+ *
11
11
  * 2. Redistributions in binary form must reproduce the above copyright
12
12
  * notice, this list of conditions and the following disclaimer in
13
13
  * the documentation and/or other materials provided with the
14
14
  * distribution.
15
- *
15
+ *
16
16
  * 3. Neither the name of Lloyd Hilaiel nor the names of its
17
17
  * contributors may be used to endorse or promote products derived
18
18
  * from this software without specific prior written permission.
19
- *
19
+ *
20
20
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21
21
  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22
22
  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
@@ -28,7 +28,7 @@
28
28
  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
29
29
  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
30
  * POSSIBILITY OF SUCH DAMAGE.
31
- */
31
+ */
32
32
 
33
33
  #include "yajl_encode.h"
34
34
 
@@ -58,7 +58,7 @@ yajl_string_encode2(const yajl_print_t print,
58
58
  unsigned int len)
59
59
  {
60
60
  unsigned int beg = 0;
61
- unsigned int end = 0;
61
+ unsigned int end = 0;
62
62
  char hexBuf[7];
63
63
  hexBuf[0] = '\\'; hexBuf[1] = 'u'; hexBuf[2] = '0'; hexBuf[3] = '0';
64
64
  hexBuf[6] = 0;
@@ -104,7 +104,7 @@ static void hexToDigit(unsigned int * val, const unsigned char * hex)
104
104
  }
105
105
  }
106
106
 
107
- static void Utf32toUtf8(unsigned int codepoint, char * utf8Buf)
107
+ static void Utf32toUtf8(unsigned int codepoint, char * utf8Buf)
108
108
  {
109
109
  if (codepoint < 0x80) {
110
110
  utf8Buf[0] = (char) codepoint;
@@ -134,7 +134,7 @@ void yajl_string_decode(yajl_buf buf, const unsigned char * str,
134
134
  unsigned int len)
135
135
  {
136
136
  unsigned int beg = 0;
137
- unsigned int end = 0;
137
+ unsigned int end = 0;
138
138
 
139
139
  while (end < len) {
140
140
  if (str[end] == '\\') {
@@ -161,8 +161,8 @@ void yajl_string_decode(yajl_buf buf, const unsigned char * str,
161
161
  unsigned int surrogate = 0;
162
162
  hexToDigit(&surrogate, str + end + 2);
163
163
  codepoint =
164
- (((codepoint & 0x3F) << 10) |
165
- ((((codepoint >> 6) & 0xF) + 1) << 16) |
164
+ (((codepoint & 0x3F) << 10) |
165
+ ((((codepoint >> 6) & 0xF) + 1) << 16) |
166
166
  (surrogate & 0x3FF));
167
167
  end += 5;
168
168
  } else {
@@ -170,7 +170,7 @@ void yajl_string_decode(yajl_buf buf, const unsigned char * str,
170
170
  break;
171
171
  }
172
172
  }
173
-
173
+
174
174
  Utf32toUtf8(codepoint, utf8Buf);
175
175
  unescaped = utf8Buf;
176
176
  break;
data/ext/yajl_encode.h CHANGED
@@ -1,22 +1,22 @@
1
1
  /*
2
2
  * Copyright 2007-2009, Lloyd Hilaiel.
3
- *
3
+ *
4
4
  * Redistribution and use in source and binary forms, with or without
5
5
  * modification, are permitted provided that the following conditions are
6
6
  * met:
7
- *
7
+ *
8
8
  * 1. Redistributions of source code must retain the above copyright
9
9
  * notice, this list of conditions and the following disclaimer.
10
- *
10
+ *
11
11
  * 2. Redistributions in binary form must reproduce the above copyright
12
12
  * notice, this list of conditions and the following disclaimer in
13
13
  * the documentation and/or other materials provided with the
14
14
  * distribution.
15
- *
15
+ *
16
16
  * 3. Neither the name of Lloyd Hilaiel nor the names of its
17
17
  * contributors may be used to endorse or promote products derived
18
18
  * from this software without specific prior written permission.
19
- *
19
+ *
20
20
  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21
21
  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22
22
  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
@@ -28,7 +28,7 @@
28
28
  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
29
29
  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
30
  * POSSIBILITY OF SUCH DAMAGE.
31
- */
31
+ */
32
32
 
33
33
  #ifndef __YAJL_ENCODE_H__
34
34
  #define __YAJL_ENCODE_H__
data/ext/yajl_ext.c CHANGED
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Copyright (c) 2008-2009 Brian Lopez - http://github.com/brianmario
3
- *
3
+ *
4
4
  * Permission is hereby granted, free of charge, to any person obtaining
5
5
  * a copy of this software and associated documentation files (the
6
6
  * "Software"), to deal in the Software without restriction, including
@@ -8,10 +8,10 @@
8
8
  * distribute, sublicense, and/or sell copies of the Software, and to
9
9
  * permit persons to whom the Software is furnished to do so, subject to
10
10
  * the following conditions:
11
- *
11
+ *
12
12
  * The above copyright notice and this permission notice shall be
13
13
  * included in all copies or substantial portions of the Software.
14
- *
14
+ *
15
15
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
16
  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
17
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -23,36 +23,11 @@
23
23
 
24
24
  #include "yajl_ext.h"
25
25
 
26
- inline const char * strnchr(const char * s, size_t count, char c) {
27
- for (; count-- && *s != '\0'; ++s) {
28
- if (*s == c) {
29
- return s;
30
- }
31
- }
32
- return NULL;
33
- }
34
-
35
- inline double strntod(const char * s, size_t count) {
36
- char buf[count+1];
37
- memcpy(buf, s, count);
38
- buf[count] = 0;
39
-
40
- return strtod(buf, NULL);
41
- }
42
-
43
- inline VALUE rb_cstrn2inum(const char * s, size_t count) {
44
- char buf[count+1];
45
- memcpy(buf, s, count);
46
- buf[count] = 0;
47
-
48
- return rb_cstr2inum(buf, 10);
49
- }
50
-
51
26
  /* Helpers for building objects */
52
27
  inline void yajl_check_and_fire_callback(void * ctx) {
53
28
  yajl_parser_wrapper * wrapper;
54
29
  GetParser((VALUE)ctx, wrapper);
55
-
30
+
56
31
  /* No need to do any of this if the callback isn't even setup */
57
32
  if (wrapper->parse_complete_callback != Qnil) {
58
33
  int len = RARRAY_LEN(wrapper->builderStack);
@@ -74,9 +49,9 @@ inline void yajl_set_static_value(void * ctx, VALUE val) {
74
49
  yajl_parser_wrapper * wrapper;
75
50
  VALUE lastEntry, hash;
76
51
  int len;
77
-
52
+
78
53
  GetParser((VALUE)ctx, wrapper);
79
-
54
+
80
55
  len = RARRAY_LEN(wrapper->builderStack);
81
56
  if (len > 0) {
82
57
  lastEntry = rb_ary_entry(wrapper->builderStack, len-1);
@@ -132,7 +107,7 @@ void yajl_encode_part(void * wrapper, VALUE obj, VALUE io) {
132
107
  const unsigned char * buffer;
133
108
  const char * cptr;
134
109
  unsigned int len;
135
-
110
+
136
111
  if (io != Qnil || w->on_progress_callback != Qnil) {
137
112
  status = yajl_gen_get_buf(w->encoder, &buffer, &len);
138
113
  if (len >= WRITE_BUFSIZE) {
@@ -145,11 +120,11 @@ void yajl_encode_part(void * wrapper, VALUE obj, VALUE io) {
145
120
  yajl_gen_clear(w->encoder);
146
121
  }
147
122
  }
148
-
123
+
149
124
  switch (TYPE(obj)) {
150
125
  case T_HASH:
151
126
  status = yajl_gen_map_open(w->encoder);
152
-
127
+
153
128
  /* TODO: itterate through keys in the hash */
154
129
  VALUE keys = rb_funcall(obj, intern_keys, 0);
155
130
  VALUE entry, keyStr;
@@ -161,7 +136,7 @@ void yajl_encode_part(void * wrapper, VALUE obj, VALUE io) {
161
136
  /* the value */
162
137
  yajl_encode_part(w, rb_hash_aref(obj, entry), io);
163
138
  }
164
-
139
+
165
140
  status = yajl_gen_map_close(w->encoder);
166
141
  break;
167
142
  case T_ARRAY:
@@ -186,23 +161,29 @@ void yajl_encode_part(void * wrapper, VALUE obj, VALUE io) {
186
161
  case T_BIGNUM:
187
162
  str = rb_funcall(obj, intern_to_s, 0);
188
163
  cptr = RSTRING_PTR(str);
164
+ len = RSTRING_LEN(str);
189
165
  if (strcmp(cptr, "NaN") == 0 || strcmp(cptr, "Infinity") == 0 || strcmp(cptr, "-Infinity") == 0) {
190
166
  rb_raise(cEncodeError, "'%s' is an invalid number", cptr);
191
167
  }
192
- status = yajl_gen_number(w->encoder, cptr, (unsigned int)strlen(cptr));
168
+ status = yajl_gen_number(w->encoder, cptr, len);
193
169
  break;
194
170
  case T_STRING:
195
171
  cptr = RSTRING_PTR(obj);
196
- status = yajl_gen_string(w->encoder, (const unsigned char *)cptr, (unsigned int)strlen(cptr));
172
+ len = RSTRING_LEN(obj);
173
+ status = yajl_gen_string(w->encoder, (const unsigned char *)cptr, len);
197
174
  break;
198
175
  default:
199
176
  if (rb_respond_to(obj, intern_to_json)) {
200
177
  str = rb_funcall(obj, intern_to_json, 0);
178
+ cptr = RSTRING_PTR(str);
179
+ len = RSTRING_LEN(str);
180
+ status = yajl_gen_number(w->encoder, cptr, len);
201
181
  } else {
202
182
  str = rb_funcall(obj, intern_to_s, 0);
183
+ cptr = RSTRING_PTR(str);
184
+ len = RSTRING_LEN(str);
185
+ status = yajl_gen_string(w->encoder, (const unsigned char *)cptr, len);
203
186
  }
204
- cptr = RSTRING_PTR(str);
205
- status = yajl_gen_string(w->encoder, (const unsigned char *)cptr, (unsigned int)strlen(cptr));
206
187
  break;
207
188
  }
208
189
  }
@@ -225,9 +206,9 @@ void yajl_parser_wrapper_mark(void * wrapper) {
225
206
 
226
207
  void yajl_parse_chunk(const unsigned char * chunk, unsigned int len, yajl_handle parser) {
227
208
  yajl_status stat;
228
-
209
+
229
210
  stat = yajl_parse(parser, chunk, len);
230
-
211
+
231
212
  if (stat != yajl_status_ok && stat != yajl_status_insufficient_data) {
232
213
  unsigned char * str = yajl_get_error(parser, 1, chunk, len);
233
214
  rb_raise(cParseError, "%s", (const char *) str);
@@ -249,13 +230,16 @@ static int yajl_found_boolean(void * ctx, int boolean) {
249
230
  }
250
231
 
251
232
  static int yajl_found_number(void * ctx, const char * numberVal, unsigned int numberLen) {
252
- if (strnchr(numberVal, numberLen, '.') ||
253
- strnchr(numberVal, numberLen, 'e') ||
254
- strnchr(numberVal, numberLen, 'E')) {
255
- yajl_set_static_value(ctx, rb_float_new(strntod(numberVal, numberLen)));
256
- }
257
- else {
258
- yajl_set_static_value(ctx, rb_cstrn2inum(numberVal, numberLen));
233
+ char buf[numberLen+1];
234
+ buf[numberLen] = 0;
235
+ memcpy(buf, numberVal, numberLen);
236
+
237
+ if (memchr(buf, '.', numberLen) ||
238
+ memchr(buf, 'e', numberLen) ||
239
+ memchr(buf, 'E', numberLen)) {
240
+ yajl_set_static_value(ctx, rb_float_new(strtod(buf, NULL)));
241
+ } else {
242
+ yajl_set_static_value(ctx, rb_cstr2inum(buf, 10));
259
243
  }
260
244
  return 1;
261
245
  }
@@ -339,7 +323,7 @@ static int yajl_found_end_array(void * ctx) {
339
323
  * The only basic requirment currently is that the IO object respond to #read(len) and #eof?
340
324
  * The IO is parsed until a complete JSON object has been read and a ruby object will be returned.
341
325
  */
342
-
326
+
343
327
  /*
344
328
  * Document-method: new
345
329
  *
@@ -356,11 +340,11 @@ static VALUE rb_yajl_parser_new(int argc, VALUE * argv, VALUE klass) {
356
340
  yajl_parser_config cfg;
357
341
  VALUE opts, obj;
358
342
  int allowComments = 1, checkUTF8 = 1, symbolizeKeys = 0;
359
-
343
+
360
344
  /* Scan off config vars */
361
345
  if (rb_scan_args(argc, argv, "01", &opts) == 1) {
362
346
  Check_Type(opts, T_HASH);
363
-
347
+
364
348
  if (rb_hash_aref(opts, sym_allow_comments) == Qfalse) {
365
349
  allowComments = 0;
366
350
  }
@@ -372,7 +356,7 @@ static VALUE rb_yajl_parser_new(int argc, VALUE * argv, VALUE klass) {
372
356
  }
373
357
  }
374
358
  cfg = (yajl_parser_config){allowComments, checkUTF8};
375
-
359
+
376
360
  obj = Data_Make_Struct(klass, yajl_parser_wrapper, yajl_parser_wrapper_mark, yajl_parser_wrapper_free, wrapper);
377
361
  wrapper->parser = yajl_alloc(&callbacks, &cfg, NULL, (void *)obj);
378
362
  wrapper->nestedArrayLevel = 0;
@@ -425,10 +409,11 @@ static VALUE rb_yajl_parser_parse(int argc, VALUE * argv, VALUE self) {
425
409
  yajl_status stat;
426
410
  yajl_parser_wrapper * wrapper;
427
411
  VALUE rbufsize, input, blk;
412
+ unsigned int len;
428
413
  const char * cptr;
429
-
414
+
430
415
  GetParser(self, wrapper);
431
-
416
+
432
417
  /* setup our parameters */
433
418
  rb_scan_args(argc, argv, "11&", &input, &rbufsize, &blk);
434
419
  if (NIL_P(rbufsize)) {
@@ -439,24 +424,25 @@ static VALUE rb_yajl_parser_parse(int argc, VALUE * argv, VALUE self) {
439
424
  if (!NIL_P(blk)) {
440
425
  rb_yajl_parser_set_complete_cb(self, blk);
441
426
  }
442
-
427
+
443
428
  if (TYPE(input) == T_STRING) {
444
429
  cptr = RSTRING_PTR(input);
445
- yajl_parse_chunk((const unsigned char*)cptr, (unsigned int)strlen(cptr), wrapper->parser);
446
- } else if (rb_respond_to(input, intern_eof)) {
430
+ len = RSTRING_LEN(input);
431
+ yajl_parse_chunk((const unsigned char*)cptr, len, wrapper->parser);
432
+ } else if (rb_respond_to(input, intern_io_read)) {
447
433
  VALUE parsed = rb_str_new("", READ_BUFSIZE);
448
- while (rb_funcall(input, intern_eof, 0) != Qtrue) {
449
- parsed = rb_funcall(input, intern_io_read, 1, rbufsize);
434
+ while ((parsed = rb_funcall(input, intern_io_read, 1, rbufsize)) != Qnil) {
450
435
  cptr = RSTRING_PTR(parsed);
451
- yajl_parse_chunk((const unsigned char*)cptr, (unsigned int)strlen(cptr), wrapper->parser);
436
+ len = RSTRING_LEN(parsed);
437
+ yajl_parse_chunk((const unsigned char*)cptr, len, wrapper->parser);
452
438
  }
453
439
  } else {
454
440
  rb_raise(cParseError, "input must be a string or IO");
455
441
  }
456
-
442
+
457
443
  /* parse any remaining buffered data */
458
444
  stat = yajl_parse_complete(wrapper->parser);
459
-
445
+
460
446
  if (wrapper->parse_complete_callback != Qnil) {
461
447
  yajl_check_and_fire_callback((void *)self);
462
448
  return Qnil;
@@ -478,16 +464,18 @@ static VALUE rb_yajl_parser_parse(int argc, VALUE * argv, VALUE self) {
478
464
  */
479
465
  static VALUE rb_yajl_parser_parse_chunk(VALUE self, VALUE chunk) {
480
466
  yajl_parser_wrapper * wrapper;
481
-
467
+ unsigned int len;
468
+
482
469
  GetParser(self, wrapper);
483
470
  if (NIL_P(chunk)) {
484
471
  rb_raise(cParseError, "Can't parse a nil string.");
485
472
  return Qnil;
486
473
  }
487
-
474
+
488
475
  if (wrapper->parse_complete_callback != Qnil) {
489
476
  const char * cptr = RSTRING_PTR(chunk);
490
- yajl_parse_chunk((const unsigned char*)cptr, (unsigned int)strlen(cptr), wrapper->parser);
477
+ len = RSTRING_LEN(chunk);
478
+ yajl_parse_chunk((const unsigned char*)cptr, len, wrapper->parser);
491
479
  } else {
492
480
  rb_raise(cParseError, "The on_parse_complete callback isn't setup, parsing useless.");
493
481
  }
@@ -540,11 +528,11 @@ static VALUE rb_yajl_encoder_new(int argc, VALUE * argv, VALUE klass) {
540
528
  VALUE opts, obj, indent;
541
529
  const char * indentString = " ";
542
530
  int beautify = 0;
543
-
531
+
544
532
  /* Scan off config vars */
545
533
  if (rb_scan_args(argc, argv, "01", &opts) == 1) {
546
534
  Check_Type(opts, T_HASH);
547
-
535
+
548
536
  if (rb_hash_aref(opts, sym_pretty) == Qtrue) {
549
537
  beautify = 1;
550
538
  indent = rb_hash_aref(opts, sym_indent);
@@ -558,7 +546,7 @@ static VALUE rb_yajl_encoder_new(int argc, VALUE * argv, VALUE klass) {
558
546
  }
559
547
  }
560
548
  cfg = (yajl_gen_config){beautify, indentString};
561
-
549
+
562
550
  obj = Data_Make_Struct(klass, yajl_encoder_wrapper, yajl_encoder_wrapper_mark, yajl_encoder_wrapper_free, wrapper);
563
551
  wrapper->encoder = yajl_gen_alloc(&cfg, NULL);
564
552
  wrapper->on_progress_callback = Qnil;
@@ -616,15 +604,15 @@ static VALUE rb_yajl_encoder_encode(int argc, VALUE * argv, VALUE self) {
616
604
  const unsigned char * buffer;
617
605
  unsigned int len;
618
606
  VALUE obj, io, blk, outBuff;
619
-
607
+
620
608
  GetEncoder(self, wrapper);
621
-
609
+
622
610
  rb_scan_args(argc, argv, "11&", &obj, &io, &blk);
623
-
611
+
624
612
  if (blk != Qnil) {
625
613
  wrapper->on_progress_callback = blk;
626
614
  }
627
-
615
+
628
616
  /* begin encode process */
629
617
  yajl_encode_part(wrapper, obj, io);
630
618
 
@@ -635,7 +623,7 @@ static VALUE rb_yajl_encoder_encode(int argc, VALUE * argv, VALUE self) {
635
623
  rb_enc_associate_index(outBuff, utf8Encoding);
636
624
  #endif
637
625
  yajl_gen_clear(wrapper->encoder);
638
-
626
+
639
627
  if (io != Qnil) {
640
628
  rb_io_write(io, outBuff);
641
629
  if (wrapper->terminator != 0 && wrapper->terminator != Qnil) {
@@ -871,10 +859,10 @@ static VALUE rb_yajl_encoder_enable_json_gem_ext(VALUE klass) {
871
859
  /* Ruby Extension initializer */
872
860
  void Init_yajl_ext() {
873
861
  mYajl = rb_define_module("Yajl");
874
-
862
+
875
863
  cParseError = rb_define_class_under(mYajl, "ParseError", rb_eStandardError);
876
864
  cEncodeError = rb_define_class_under(mYajl, "EncodeError", rb_eStandardError);
877
-
865
+
878
866
  cParser = rb_define_class_under(mYajl, "Parser", rb_cObject);
879
867
  rb_define_singleton_method(cParser, "new", rb_yajl_parser_new, -1);
880
868
  rb_define_method(cParser, "initialize", rb_yajl_parser_init, -1);
@@ -882,24 +870,23 @@ void Init_yajl_ext() {
882
870
  rb_define_method(cParser, "parse_chunk", rb_yajl_parser_parse_chunk, -1);
883
871
  rb_define_method(cParser, "<<", rb_yajl_parser_parse_chunk, 1);
884
872
  rb_define_method(cParser, "on_parse_complete=", rb_yajl_parser_set_complete_cb, 1);
885
-
873
+
886
874
  cEncoder = rb_define_class_under(mYajl, "Encoder", rb_cObject);
887
875
  rb_define_singleton_method(cEncoder, "new", rb_yajl_encoder_new, -1);
888
876
  rb_define_method(cEncoder, "initialize", rb_yajl_encoder_init, -1);
889
877
  rb_define_method(cEncoder, "encode", rb_yajl_encoder_encode, -1);
890
878
  rb_define_method(cEncoder, "on_progress=", rb_yajl_encoder_set_progress_cb, 1);
891
-
879
+
892
880
  rb_define_singleton_method(cEncoder, "enable_json_gem_compatability", rb_yajl_encoder_enable_json_gem_ext, 0);
893
-
881
+
894
882
  intern_io_read = rb_intern("read");
895
- intern_eof = rb_intern("eof?");
896
883
  intern_call = rb_intern("call");
897
884
  intern_keys = rb_intern("keys");
898
885
  intern_to_s = rb_intern("to_s");
899
886
  intern_to_json = rb_intern("to_json");
900
887
  intern_to_sym = rb_intern("to_sym");
901
888
  intern_has_key = rb_intern("has_key?");
902
-
889
+
903
890
  sym_allow_comments = ID2SYM(rb_intern("allow_comments"));
904
891
  sym_check_utf8 = ID2SYM(rb_intern("check_utf8"));
905
892
  sym_pretty = ID2SYM(rb_intern("pretty"));