yajl-ruby 0.6.3 → 0.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.6.4 (November 4th, 2009)
4
+ * All specs pass on Rubinius :)
5
+ * Fixed a bug in Yajl::Encoder which allowed direct, unescaped encoding of NaN, Infinity and -Infinity.
6
+ It will now properly throw a Yajl::EncodeError exception if either of these values are found unescaped.
7
+ * Update bundled Yajl library to 1.0.7
8
+ * Conditionally define RSTRING_* and RARRAY_* for older versions of ruby (1.8.5 is still the default on CentOS)
9
+ * Bugfix for JSON gem exception classes to more accurately match those of the actual JSON gem
10
+ * A few small speed optimizations
11
+ * Updated specs to not run bzip2 related examples if unable to load the bzip2 library
12
+ * Finally added UTF-8 checking specs
13
+ * Removed needless calls to ID2SYM all over the place
14
+ * Updated benchmark scripts to bring the GC into the picture a little more
15
+
3
16
  ## 0.6.3 (August 25th, 2009)
4
17
  * Fixed a bug in the JSON gem compatibility API where strings weren't being properly escaped
5
18
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  This gem is a C binding to the excellent YAJL JSON parsing and generation library.
4
4
 
5
- You can read more info at the projects website http://lloydforge.org/projects/yajl or check out it's codes at http://github.com/lloyd/yajl.
5
+ You can read more info at the projects website http://lloyd.github.com/yajl or check out it's codes at http://github.com/lloyd/yajl.
6
6
 
7
7
  == Features
8
8
 
@@ -19,11 +19,13 @@ You can read more info at the projects website http://lloydforge.org/projects/ya
19
19
 
20
20
  == How to install
21
21
 
22
- Install it like any other gem hosted at the Githubs like so:
22
+ First make sure you've got Gemcutter in your sources list:
23
23
 
24
- (more instructions here: http://gems.github.com)
24
+ gem sources -a http://gemcutter.org
25
25
 
26
- sudo gem install brianmario-yajl-ruby
26
+ Then go ahead and install it as usual:
27
+
28
+ sudo gem install yajl-ruby
27
29
 
28
30
  == Example of use
29
31
 
@@ -216,10 +218,10 @@ There are a lot more possibilities that I'd love to see other gems/plugins for s
216
218
 
217
219
  Some ideas are:
218
220
  * parsing logs in JSON format
219
- * a Rails plugin (http://github.com/technoweenie/yajl-rails)
221
+ * a Rails plugin - DONE! (http://github.com/technoweenie/yajl-rails)
220
222
  * builtin support in Rails 3?
221
- * Rack middleware (ideally the JSON body could be handed to the parser while it's still being received)
222
- * use with ohai (http://github.com/brianmario/ohai)
223
+ * Rack middleware (ideally the JSON body could be handed to the parser while it's still being received, this is apparently possible with Unicorn)
224
+ * use with ohai - DONE! (http://github.com/opscode/ohai/commit/f89baccc3b9ab587d23e0b6257f6fedffe223c02)
223
225
  * JSON API clients (http://github.com/brianmario/crack, http://github.com/brianmario/freckle-api)
224
226
  * Patch Marshal#load and Marshal#dump to use JSON? ;)
225
227
  * etc...
@@ -1,4 +1,4 @@
1
1
  ---
2
- :minor: 6
3
- :patch: 3
2
+ :patch: 4
4
3
  :major: 0
4
+ :minor: 6
@@ -12,9 +12,9 @@ json = File.new(filename, 'r')
12
12
  hash = Yajl::Parser.new.parse(json)
13
13
  json.close
14
14
 
15
- times = ARGV[1] ? ARGV[1].to_i : 1
15
+ times = ARGV[1] ? ARGV[1].to_i : 1000
16
16
  puts "Starting benchmark encoding #{filename} #{times} times\n\n"
17
- Benchmark.bm { |x|
17
+ Benchmark.bmbm { |x|
18
18
  io_encoder = Yajl::Encoder.new
19
19
  x.report {
20
20
  puts "Yajl::Encoder#encode (to an IO)"
@@ -30,7 +30,7 @@ Benchmark.bm { |x|
30
30
  }
31
31
  }
32
32
  x.report {
33
- puts "JSON's #to_json"
33
+ puts "JSON.generate"
34
34
  times.times {
35
35
  JSON.generate(hash)
36
36
  }
@@ -5,14 +5,14 @@ require 'yajl_ext'
5
5
  require 'stringio'
6
6
  require 'json'
7
7
 
8
- times = ARGV[0] ? ARGV[0].to_i : 1
8
+ times = ARGV[0] ? ARGV[0].to_i : 1000
9
9
  filename = 'benchmark/subjects/ohai.json'
10
10
  json = File.new(filename, 'r')
11
11
  hash = Yajl::Parser.new.parse(json)
12
12
  json.close
13
13
 
14
14
  puts "Starting benchmark encoding #{filename} #{times} times\n\n"
15
- Benchmark.bm { |x|
15
+ Benchmark.bmbm { |x|
16
16
  encoder = Yajl::Encoder.new
17
17
  x.report {
18
18
  puts "Yajl::Encoder#encode"
@@ -11,9 +11,9 @@ json = File.new(filename, 'r')
11
11
  hash = Yajl::Parser.new.parse(json)
12
12
  json.close
13
13
 
14
- times = ARGV[0] ? ARGV[0].to_i : 1
14
+ times = ARGV[0] ? ARGV[0].to_i : 1000
15
15
  puts "Starting benchmark encoding #{filename} into JSON #{times} times\n\n"
16
- Benchmark.bm { |x|
16
+ Benchmark.bmbm { |x|
17
17
  encoder = Yajl::Encoder.new
18
18
  x.report {
19
19
  puts "Yajl::Encoder#encode"
@@ -30,14 +30,13 @@ Benchmark.bm { |x|
30
30
  }
31
31
 
32
32
  # YAML Section
33
- filename = 'benchmark/subjects/contacts.yml'
33
+ filename = 'benchmark/subjects/ohai.yml'
34
34
  yml = File.new(filename, 'r')
35
35
  data = YAML.load_stream(yml)
36
36
  yml.close
37
37
 
38
- times = ARGV[0] ? ARGV[0].to_i : 1
39
38
  puts "Starting benchmark encoding #{filename} into YAML #{times} times\n\n"
40
- Benchmark.bm { |x|
39
+ Benchmark.bmbm { |x|
41
40
  x.report {
42
41
  puts "YAML.dump"
43
42
  times.times {
@@ -4,7 +4,7 @@ require 'benchmark'
4
4
  require 'yajl/http_stream'
5
5
  require 'yajl/gzip'
6
6
  require 'yajl/deflate'
7
- require 'yajl/bzip2'
7
+ require 'yajl/bzip2' unless defined?(Bzip2)
8
8
  require 'json'
9
9
  require 'uri'
10
10
  require 'net/http'
@@ -14,7 +14,7 @@ uri = URI.parse('http://search.twitter.com/search.json?q=github')
14
14
 
15
15
  times = ARGV[0] ? ARGV[0].to_i : 1
16
16
  puts "Starting benchmark parsing #{uri.to_s} #{times} times\n\n"
17
- Benchmark.bm { |x|
17
+ Benchmark.bmbm { |x|
18
18
  x.report {
19
19
  puts "Yajl::HttpStream.get"
20
20
  times.times {
@@ -5,17 +5,14 @@ require 'yajl_ext'
5
5
  require 'json'
6
6
  require 'activesupport'
7
7
 
8
- filename = ARGV[0] || 'benchmark/subjects/ohai.json'
8
+ filename = ARGV[0] || 'benchmark/subjects/twitter_search.json'
9
9
  json = File.new(filename, 'r')
10
10
 
11
- # warm up the filesystem
12
- json.read
13
- json.rewind
14
-
15
- times = ARGV[1] ? ARGV[1].to_i : 1
11
+ times = ARGV[1] ? ARGV[1].to_i : 1000
16
12
  puts "Starting benchmark parsing #{File.size(filename)} bytes of JSON data #{times} times\n\n"
17
- Benchmark.bm { |x|
13
+ Benchmark.bmbm { |x|
18
14
  io_parser = Yajl::Parser.new
15
+ io_parser.on_parse_complete = lambda {|obj|} if times > 1
19
16
  x.report {
20
17
  puts "Yajl::Parser#parse (from an IO)"
21
18
  times.times {
@@ -24,6 +21,7 @@ Benchmark.bm { |x|
24
21
  }
25
22
  }
26
23
  string_parser = Yajl::Parser.new
24
+ string_parser.on_parse_complete = lambda {|obj|} if times > 1
27
25
  x.report {
28
26
  puts "Yajl::Parser#parse (from a String)"
29
27
  times.times {
@@ -10,22 +10,18 @@ marshal_filename = 'benchmark/subjects/ohai.marshal_dump'
10
10
  json = File.new(filename, 'r')
11
11
  marshal_file = File.new(marshal_filename, 'r')
12
12
 
13
- # warm up the filesystem
14
- json.read
15
- json.rewind
16
- marshal_file.read
17
- marshal_file.rewind
18
-
19
13
  hash = {}
20
14
 
21
- times = ARGV[0] ? ARGV[0].to_i : 1
15
+ times = ARGV[0] ? ARGV[0].to_i : 1000
22
16
  puts "Starting benchmark parsing #{File.size(filename)} bytes of JSON data #{times} times\n\n"
23
- Benchmark.bm { |x|
17
+ Benchmark.bmbm { |x|
24
18
  x.report {
25
19
  puts "Yajl::Parser#parse"
20
+ yajl = Yajl::Parser.new
21
+ yajl.on_parse_complete = lambda {|obj|} if times > 1
26
22
  times.times {
27
23
  json.rewind
28
- hash = Yajl::Parser.new.parse(json)
24
+ hash = yajl.parse(json)
29
25
  }
30
26
  }
31
27
  x.report {
@@ -9,14 +9,11 @@ require 'yaml'
9
9
  filename = 'benchmark/subjects/ohai.json'
10
10
  json = File.new(filename, 'r')
11
11
 
12
- # warm up the filesystem
13
- json.read
14
- json.rewind
15
-
16
- times = ARGV[0] ? ARGV[0].to_i : 1
12
+ times = ARGV[0] ? ARGV[0].to_i : 1000
17
13
  puts "Starting benchmark parsing #{File.size(filename)} bytes of JSON data #{times} times\n\n"
18
- Benchmark.bm { |x|
14
+ Benchmark.bmbm { |x|
19
15
  parser = Yajl::Parser.new
16
+ parser.on_parse_complete = lambda {|obj|} if times > 1
20
17
  x.report {
21
18
  puts "Yajl::Parser#parse"
22
19
  times.times {
@@ -35,16 +32,11 @@ Benchmark.bm { |x|
35
32
  json.close
36
33
 
37
34
  # YAML section
38
- filename = 'benchmark/subjects/contacts.yml'
35
+ filename = 'benchmark/subjects/ohai.yml'
39
36
  yaml = File.new(filename, 'r')
40
37
 
41
- # warm up the filesystem
42
- yaml.read
43
- yaml.rewind
44
-
45
- times = ARGV[0] ? ARGV[0].to_i : 1
46
38
  puts "Starting benchmark parsing #{File.size(filename)} bytes of YAML data #{times} times\n\n"
47
- Benchmark.bm { |x|
39
+ Benchmark.bmbm { |x|
48
40
  x.report {
49
41
  puts "YAML.load_stream"
50
42
  times.times {
@@ -3,22 +3,16 @@ require 'rubygems'
3
3
  require 'benchmark'
4
4
  require 'yajl_ext'
5
5
  require 'json'
6
- # require 'activesupport'
6
+ require 'activesupport'
7
7
 
8
8
  filename = 'benchmark/subjects/twitter_stream.json'
9
9
  json = File.new(filename, 'r')
10
10
 
11
- # warm up the filesystem
12
- json.read
13
- json.rewind
14
-
15
- times = ARGV[0] ? ARGV[0].to_i : 1
11
+ times = ARGV[0] ? ARGV[0].to_i : 100
16
12
  puts "Starting benchmark parsing JSON stream (#{File.size(filename)} bytes of JSON data with 430 JSON separate strings) #{times} times\n\n"
17
- Benchmark.bm { |x|
13
+ Benchmark.bmbm { |x|
18
14
  parser = Yajl::Parser.new
19
- parser.on_parse_complete = lambda { |obj|
20
- # no-op
21
- }
15
+ parser.on_parse_complete = lambda {|obj|}
22
16
  x.report {
23
17
  puts "Yajl::Parser#parse"
24
18
  times.times {
@@ -35,14 +29,14 @@ Benchmark.bm { |x|
35
29
  end
36
30
  }
37
31
  }
38
- # x.report {
39
- # puts "ActiveSupport::JSON.decode"
40
- # times.times {
41
- # json.rewind
42
- # while chunk = json.gets
43
- # ActiveSupport::JSON.decode(chunk)
44
- # end
45
- # }
46
- # }
32
+ x.report {
33
+ puts "ActiveSupport::JSON.decode"
34
+ times.times {
35
+ json.rewind
36
+ while chunk = json.gets
37
+ ActiveSupport::JSON.decode(chunk)
38
+ end
39
+ }
40
+ }
47
41
  }
48
42
  json.close
@@ -57,7 +57,10 @@ extern "C" {
57
57
  * state */
58
58
  yajl_gen_in_error_state,
59
59
  /** A complete JSON document has been generated */
60
- yajl_gen_generation_complete
60
+ yajl_gen_generation_complete,
61
+ /** yajl_gen_double was passed an invalid floating point value
62
+ * (infinity or NaN). */
63
+ yajl_gen_invalid_number
61
64
  } yajl_gen_status;
62
65
 
63
66
  /** an opaque handle to a generator */
@@ -90,6 +93,9 @@ extern "C" {
90
93
  void YAJL_API yajl_gen_free(yajl_gen handle);
91
94
 
92
95
  yajl_gen_status YAJL_API yajl_gen_integer(yajl_gen hand, long int number);
96
+ /** generate a floating point number. number may not be infinity or
97
+ * NaN, as these have no representation in JSON. In these cases the
98
+ * generator will return 'yajl_gen_invalid_number' */
93
99
  yajl_gen_status YAJL_API yajl_gen_double(yajl_gen hand, double number);
94
100
  yajl_gen_status YAJL_API yajl_gen_number(yajl_gen hand,
95
101
  const char * num,
@@ -1,11 +1,11 @@
1
1
  #include "yajl_ext.h"
2
2
 
3
- // Helpers for building objects
3
+ /* Helpers for building objects */
4
4
  inline void yajl_check_and_fire_callback(void * ctx) {
5
5
  struct yajl_parser_wrapper * wrapper;
6
6
  GetParser((VALUE)ctx, wrapper);
7
7
 
8
- // No need to do any of this if the callback isn't even setup
8
+ /* No need to do any of this if the callback isn't even setup */
9
9
  if (wrapper->parse_complete_callback != Qnil) {
10
10
  int len = RARRAY_LEN(wrapper->builderStack);
11
11
  if (len == 1 && wrapper->nestedArrayLevel == 0 && wrapper->nestedHashLevel == 0) {
@@ -98,15 +98,15 @@ void yajl_encode_part(void * wrapper, VALUE obj, VALUE io) {
98
98
  case T_HASH:
99
99
  status = yajl_gen_map_open(w->encoder);
100
100
 
101
- // TODO: itterate through keys in the hash
101
+ /* TODO: itterate through keys in the hash */
102
102
  VALUE keys = rb_funcall(obj, intern_keys, 0);
103
103
  VALUE entry, keyStr;
104
104
  for(idx=0; idx<RARRAY_LEN(keys); idx++) {
105
105
  entry = rb_ary_entry(keys, idx);
106
- keyStr = rb_funcall(entry, intern_to_s, 0); // key must be a string
107
- // the key
106
+ keyStr = rb_funcall(entry, intern_to_s, 0); /* key must be a string */
107
+ /* the key */
108
108
  yajl_encode_part(w, keyStr, io);
109
- // the value
109
+ /* the value */
110
110
  yajl_encode_part(w, rb_hash_aref(obj, entry), io);
111
111
  }
112
112
 
@@ -133,6 +133,9 @@ void yajl_encode_part(void * wrapper, VALUE obj, VALUE io) {
133
133
  case T_FLOAT:
134
134
  case T_BIGNUM:
135
135
  str = rb_funcall(obj, intern_to_s, 0);
136
+ if (strcmp(RSTRING_PTR(str), "NaN") == 0 || strcmp(RSTRING_PTR(str), "Infinity") == 0 || strcmp(RSTRING_PTR(str), "-Infinity") == 0) {
137
+ rb_raise(cEncodeError, "'%s' is an invalid number", RSTRING_PTR(str));
138
+ }
136
139
  status = yajl_gen_number(w->encoder, RSTRING_PTR(str), (unsigned int)RSTRING_LEN(str));
137
140
  break;
138
141
  case T_STRING:
@@ -141,7 +144,7 @@ void yajl_encode_part(void * wrapper, VALUE obj, VALUE io) {
141
144
  default:
142
145
  if (rb_respond_to(obj, intern_to_json)) {
143
146
  str = rb_funcall(obj, intern_to_json, 0);
144
- quote_strings = 0; // this lets us append on to the buffer without Yajl quoting it again
147
+ quote_strings = 0; /* this lets us append on to the buffer without Yajl quoting it again */
145
148
  } else {
146
149
  str = rb_funcall(obj, intern_to_s, 0);
147
150
  }
@@ -174,7 +177,7 @@ void yajl_parse_chunk(const unsigned char * chunk, unsigned int len, yajl_handle
174
177
  }
175
178
  }
176
179
 
177
- // YAJL Callbacks
180
+ /* YAJL Callbacks */
178
181
  static int yajl_found_null(void * ctx) {
179
182
  yajl_set_static_value(ctx, Qnil);
180
183
  yajl_check_and_fire_callback(ctx);
@@ -188,15 +191,19 @@ static int yajl_found_boolean(void * ctx, int boolean) {
188
191
  }
189
192
 
190
193
  static int yajl_found_number(void * ctx, const char * numberVal, unsigned int numberLen) {
191
- VALUE subString = rb_str_new(numberVal, numberLen);
192
- char * cSubString = RSTRING_PTR(subString);
194
+ char * cSubString = ALLOC_N(char, numberLen+1);
195
+ if (cSubString) {
196
+ memcpy(cSubString, numberVal, numberLen);
197
+ }
198
+ cSubString[numberLen] = '\0';
193
199
 
194
- if (strstr(cSubString, ".") != NULL || strstr(cSubString, "e") != NULL || strstr(cSubString, "E") != NULL) {
195
- yajl_set_static_value(ctx, rb_Float(subString));
200
+ if (strchr(cSubString, '.') != NULL || strchr(cSubString, 'e') != NULL || strchr(cSubString, 'E') != NULL) {
201
+ yajl_set_static_value(ctx, rb_float_new(atof(cSubString)));
196
202
  } else {
197
- yajl_set_static_value(ctx, rb_Integer(subString));
203
+ yajl_set_static_value(ctx, INT2FIX(atoi(cSubString)));
198
204
  }
199
205
  yajl_check_and_fire_callback(ctx);
206
+ free(cSubString);
200
207
  return 1;
201
208
  }
202
209
 
@@ -210,10 +217,9 @@ static int yajl_found_hash_key(void * ctx, const unsigned char * stringVal, unsi
210
217
  struct yajl_parser_wrapper * wrapper;
211
218
  GetParser((VALUE)ctx, wrapper);
212
219
  VALUE keyStr = rb_str_new((const char *)stringVal, stringLen);
213
-
220
+
214
221
  if (wrapper->symbolizeKeys) {
215
- ID key = rb_intern(RSTRING_PTR(keyStr));
216
- yajl_set_static_value(ctx, ID2SYM(key));
222
+ yajl_set_static_value(ctx, rb_funcall(keyStr, intern_to_sym, 0));
217
223
  } else {
218
224
  yajl_set_static_value(ctx, keyStr);
219
225
  }
@@ -260,7 +266,7 @@ static int yajl_found_end_array(void * ctx) {
260
266
  }
261
267
 
262
268
 
263
- // Ruby Interface
269
+ /* Ruby Interface */
264
270
 
265
271
  /*
266
272
  * Document-class: Yajl::Parser
@@ -287,17 +293,17 @@ static VALUE rb_yajl_parser_new(int argc, VALUE * argv, VALUE klass) {
287
293
  VALUE opts, obj;
288
294
  int allowComments = 1, checkUTF8 = 1, symbolizeKeys = 0;
289
295
 
290
- // Scan off config vars
296
+ /* Scan off config vars */
291
297
  if (rb_scan_args(argc, argv, "01", &opts) == 1) {
292
298
  Check_Type(opts, T_HASH);
293
299
 
294
- if (rb_hash_aref(opts, ID2SYM(sym_allow_comments)) == Qfalse) {
300
+ if (rb_hash_aref(opts, sym_allow_comments) == Qfalse) {
295
301
  allowComments = 0;
296
302
  }
297
- if (rb_hash_aref(opts, ID2SYM(sym_check_utf8)) == Qfalse) {
303
+ if (rb_hash_aref(opts, sym_check_utf8) == Qfalse) {
298
304
  checkUTF8 = 0;
299
305
  }
300
- if (rb_hash_aref(opts, ID2SYM(sym_symbolize_keys)) == Qtrue) {
306
+ if (rb_hash_aref(opts, sym_symbolize_keys) == Qtrue) {
301
307
  symbolizeKeys = 1;
302
308
  }
303
309
  }
@@ -354,12 +360,11 @@ static VALUE rb_yajl_parser_init(int argc, VALUE * argv, VALUE self) {
354
360
  static VALUE rb_yajl_parser_parse(int argc, VALUE * argv, VALUE self) {
355
361
  yajl_status stat;
356
362
  struct yajl_parser_wrapper * wrapper;
357
- VALUE parsed, rbufsize, input, blk;
363
+ VALUE rbufsize, input, blk;
358
364
 
359
365
  GetParser(self, wrapper);
360
- parsed = rb_str_new2("");
361
366
 
362
- // setup our parameters
367
+ /* setup our parameters */
363
368
  rb_scan_args(argc, argv, "11&", &input, &rbufsize, &blk);
364
369
  if (NIL_P(rbufsize)) {
365
370
  rbufsize = INT2FIX(READ_BUFSIZE);
@@ -373,6 +378,7 @@ static VALUE rb_yajl_parser_parse(int argc, VALUE * argv, VALUE self) {
373
378
  if (TYPE(input) == T_STRING) {
374
379
  yajl_parse_chunk((const unsigned char *)RSTRING_PTR(input), RSTRING_LEN(input), wrapper->parser);
375
380
  } else if (rb_respond_to(input, intern_eof)) {
381
+ VALUE parsed = rb_str_new2("");
376
382
  while (rb_funcall(input, intern_eof, 0) != Qtrue) {
377
383
  rb_funcall(input, intern_io_read, 2, rbufsize, parsed);
378
384
  yajl_parse_chunk((const unsigned char *)RSTRING_PTR(parsed), RSTRING_LEN(parsed), wrapper->parser);
@@ -381,7 +387,7 @@ static VALUE rb_yajl_parser_parse(int argc, VALUE * argv, VALUE self) {
381
387
  rb_raise(cParseError, "input must be a string or IO");
382
388
  }
383
389
 
384
- // parse any remaining buffered data
390
+ /* parse any remaining buffered data */
385
391
  stat = yajl_parse_complete(wrapper->parser);
386
392
 
387
393
  if (wrapper->parse_complete_callback != Qnil) {
@@ -467,13 +473,13 @@ static VALUE rb_yajl_encoder_new(int argc, VALUE * argv, VALUE klass) {
467
473
  const char * indentString = " ";
468
474
  int beautify = 0;
469
475
 
470
- // Scan off config vars
476
+ /* Scan off config vars */
471
477
  if (rb_scan_args(argc, argv, "01", &opts) == 1) {
472
478
  Check_Type(opts, T_HASH);
473
479
 
474
- if (rb_hash_aref(opts, ID2SYM(sym_pretty)) == Qtrue) {
480
+ if (rb_hash_aref(opts, sym_pretty) == Qtrue) {
475
481
  beautify = 1;
476
- indent = rb_hash_aref(opts, ID2SYM(sym_indent));
482
+ indent = rb_hash_aref(opts, sym_indent);
477
483
  if (indent != Qnil) {
478
484
  Check_Type(indent, T_STRING);
479
485
  indentString = RSTRING_PTR(indent);
@@ -485,8 +491,8 @@ static VALUE rb_yajl_encoder_new(int argc, VALUE * argv, VALUE klass) {
485
491
  obj = Data_Make_Struct(klass, struct yajl_encoder_wrapper, yajl_encoder_wrapper_mark, yajl_encoder_wrapper_free, wrapper);
486
492
  wrapper->encoder = yajl_gen_alloc(&cfg, NULL);
487
493
  wrapper->on_progress_callback = Qnil;
488
- if (opts != Qnil && rb_funcall(opts, intern_has_key, 1, ID2SYM(sym_terminator)) == Qtrue) {
489
- wrapper->terminator = rb_hash_aref(opts, ID2SYM(sym_terminator));
494
+ if (opts != Qnil && rb_funcall(opts, intern_has_key, 1, sym_terminator) == Qtrue) {
495
+ wrapper->terminator = rb_hash_aref(opts, sym_terminator);
490
496
  } else {
491
497
  wrapper->terminator = 0;
492
498
  }
@@ -543,10 +549,10 @@ static VALUE rb_yajl_encoder_encode(int argc, VALUE * argv, VALUE self) {
543
549
  wrapper->on_progress_callback = blk;
544
550
  }
545
551
 
546
- // begin encode process
552
+ /* begin encode process */
547
553
  yajl_encode_part(wrapper, obj, io);
548
554
 
549
- // just make sure we output the remaining buffer
555
+ /* just make sure we output the remaining buffer */
550
556
  yajl_gen_get_buf(wrapper->encoder, &buffer, &len);
551
557
  outBuff = rb_str_new((const char *)buffer, len);
552
558
  yajl_gen_clear(wrapper->encoder);
@@ -590,7 +596,7 @@ static VALUE rb_yajl_encoder_set_progress_cb(VALUE self, VALUE callback) {
590
596
  }
591
597
 
592
598
 
593
- // JSON Gem compatibility
599
+ /* JSON Gem compatibility */
594
600
 
595
601
  /*
596
602
  * Document-class: Hash
@@ -783,7 +789,7 @@ static VALUE rb_yajl_encoder_enable_json_gem_ext(VALUE klass) {
783
789
  }
784
790
 
785
791
 
786
- // Ruby Extension initializer
792
+ /* Ruby Extension initializer */
787
793
  void Init_yajl_ext() {
788
794
  mYajl = rb_define_module("Yajl");
789
795
 
@@ -812,12 +818,13 @@ void Init_yajl_ext() {
812
818
  intern_keys = rb_intern("keys");
813
819
  intern_to_s = rb_intern("to_s");
814
820
  intern_to_json = rb_intern("to_json");
815
-
816
- sym_allow_comments = rb_intern("allow_comments");
817
- sym_check_utf8 = rb_intern("check_utf8");
818
- sym_pretty = rb_intern("pretty");
819
- sym_indent = rb_intern("indent");
820
- sym_terminator = rb_intern("terminator");
821
- sym_symbolize_keys = rb_intern("symbolize_keys");
821
+ intern_to_sym = rb_intern("to_sym");
822
822
  intern_has_key = rb_intern("has_key?");
823
+
824
+ sym_allow_comments = ID2SYM(rb_intern("allow_comments"));
825
+ sym_check_utf8 = ID2SYM(rb_intern("check_utf8"));
826
+ sym_pretty = ID2SYM(rb_intern("pretty"));
827
+ sym_indent = ID2SYM(rb_intern("indent"));
828
+ sym_terminator = ID2SYM(rb_intern("terminator"));
829
+ sym_symbolize_keys = ID2SYM(rb_intern("symbolize_keys"));
823
830
  }