oj 3.13.11 → 3.13.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +50 -0
  3. data/README.md +2 -0
  4. data/ext/oj/buf.h +4 -0
  5. data/ext/oj/circarray.c +1 -1
  6. data/ext/oj/code.c +15 -22
  7. data/ext/oj/compat.c +10 -10
  8. data/ext/oj/custom.c +62 -108
  9. data/ext/oj/dump.c +85 -97
  10. data/ext/oj/dump.h +12 -8
  11. data/ext/oj/dump_compat.c +46 -88
  12. data/ext/oj/dump_leaf.c +14 -58
  13. data/ext/oj/dump_object.c +33 -156
  14. data/ext/oj/dump_strict.c +17 -29
  15. data/ext/oj/extconf.rb +5 -4
  16. data/ext/oj/fast.c +24 -22
  17. data/ext/oj/intern.c +15 -11
  18. data/ext/oj/intern.h +1 -1
  19. data/ext/oj/mimic_json.c +44 -32
  20. data/ext/oj/object.c +42 -41
  21. data/ext/oj/odd.c +83 -63
  22. data/ext/oj/odd.h +13 -13
  23. data/ext/oj/oj.c +57 -22
  24. data/ext/oj/oj.h +24 -3
  25. data/ext/oj/parse.c +114 -78
  26. data/ext/oj/parse.h +2 -0
  27. data/ext/oj/parser.c +77 -21
  28. data/ext/oj/parser.h +12 -0
  29. data/ext/oj/rails.c +41 -65
  30. data/ext/oj/rails.h +1 -1
  31. data/ext/oj/reader.c +2 -0
  32. data/ext/oj/saj.c +11 -23
  33. data/ext/oj/saj2.c +333 -85
  34. data/ext/oj/saj2.h +23 -0
  35. data/ext/oj/sparse.c +4 -0
  36. data/ext/oj/stream_writer.c +3 -1
  37. data/ext/oj/strict.c +13 -13
  38. data/ext/oj/string_writer.c +12 -5
  39. data/ext/oj/usual.c +82 -129
  40. data/ext/oj/usual.h +68 -0
  41. data/ext/oj/val_stack.c +1 -1
  42. data/ext/oj/validate.c +21 -26
  43. data/ext/oj/wab.c +21 -26
  44. data/lib/oj/saj.rb +20 -6
  45. data/lib/oj/state.rb +1 -1
  46. data/lib/oj/version.rb +1 -1
  47. data/pages/Compatibility.md +1 -1
  48. data/pages/Options.md +6 -0
  49. data/test/activesupport7/abstract_unit.rb +49 -0
  50. data/test/activesupport7/decoding_test.rb +125 -0
  51. data/test/activesupport7/encoding_test.rb +486 -0
  52. data/test/activesupport7/encoding_test_cases.rb +104 -0
  53. data/test/activesupport7/time_zone_test_helpers.rb +47 -0
  54. data/test/bar.rb +3 -8
  55. data/test/foo.rb +3 -3
  56. data/test/helper.rb +8 -2
  57. data/test/json_gem/json_generator_test.rb +5 -4
  58. data/test/json_gem/json_parser_test.rb +8 -1
  59. data/test/json_gem/test_helper.rb +7 -3
  60. data/test/perf_dump.rb +50 -0
  61. data/test/test_compat.rb +25 -0
  62. data/test/test_custom.rb +13 -2
  63. data/test/test_file.rb +23 -7
  64. data/test/test_gc.rb +11 -0
  65. data/test/test_object.rb +8 -10
  66. data/test/test_parser.rb +3 -19
  67. data/test/test_parser_debug.rb +27 -0
  68. data/test/test_parser_saj.rb +92 -2
  69. data/test/test_scp.rb +2 -4
  70. data/test/test_strict.rb +2 -0
  71. data/test/test_various.rb +8 -3
  72. data/test/test_wab.rb +2 -0
  73. data/test/tests.rb +9 -0
  74. data/test/tests_mimic.rb +9 -0
  75. data/test/tests_mimic_addition.rb +9 -0
  76. metadata +13 -116
data/ext/oj/rails.c CHANGED
@@ -167,17 +167,14 @@ static void dump_struct(VALUE obj, int depth, Out out, bool as_ok) {
167
167
  }
168
168
  fill_indent(out, d3);
169
169
  *out->cur++ = '"';
170
- memcpy(out->cur, name, len);
171
- out->cur += len;
170
+ APPEND_CHARS(out->cur, name, len);
172
171
  *out->cur++ = '"';
173
172
  if (0 < out->opts->dump_opts.before_size) {
174
- strcpy(out->cur, out->opts->dump_opts.before_sep);
175
- out->cur += out->opts->dump_opts.before_size;
173
+ APPEND_CHARS(out->cur, out->opts->dump_opts.before_sep, out->opts->dump_opts.before_size);
176
174
  }
177
175
  *out->cur++ = ':';
178
176
  if (0 < out->opts->dump_opts.after_size) {
179
- strcpy(out->cur, out->opts->dump_opts.after_sep);
180
- out->cur += out->opts->dump_opts.after_size;
177
+ APPEND_CHARS(out->cur, out->opts->dump_opts.after_sep, out->opts->dump_opts.after_size);
181
178
  }
182
179
  #ifdef RSTRUCT_LEN
183
180
  v = RSTRUCT_GET(obj, i);
@@ -323,20 +320,15 @@ static void dump_time(VALUE obj, int depth, Out out, bool as_ok) {
323
320
  long long sec;
324
321
  long long nsec;
325
322
 
326
- #ifdef HAVE_RB_TIME_TIMESPEC
327
323
  if (16 <= sizeof(struct timespec)) {
328
324
  struct timespec ts = rb_time_timespec(obj);
329
325
 
330
326
  sec = (long long)ts.tv_sec;
331
327
  nsec = ts.tv_nsec;
332
328
  } else {
333
- sec = rb_num2ll(rb_funcall2(obj, oj_tv_sec_id, 0, 0));
334
- nsec = rb_num2ll(rb_funcall2(obj, oj_tv_nsec_id, 0, 0));
329
+ sec = NUM2LL(rb_funcall2(obj, oj_tv_sec_id, 0, 0));
330
+ nsec = NUM2LL(rb_funcall2(obj, oj_tv_nsec_id, 0, 0));
335
331
  }
336
- #else
337
- sec = rb_num2ll(rb_funcall2(obj, oj_tv_sec_id, 0, 0));
338
- nsec = rb_num2ll(rb_funcall2(obj, oj_tv_nsec_id, 0, 0));
339
- #endif
340
332
  dump_sec_nano(obj, sec, nsec, out);
341
333
  }
342
334
 
@@ -345,9 +337,9 @@ static void dump_timewithzone(VALUE obj, int depth, Out out, bool as_ok) {
345
337
  long long nsec = 0;
346
338
 
347
339
  if (rb_respond_to(obj, oj_tv_nsec_id)) {
348
- nsec = rb_num2ll(rb_funcall2(obj, oj_tv_nsec_id, 0, 0));
340
+ nsec = NUM2LL(rb_funcall2(obj, oj_tv_nsec_id, 0, 0));
349
341
  } else if (rb_respond_to(obj, oj_tv_usec_id)) {
350
- nsec = rb_num2ll(rb_funcall2(obj, oj_tv_usec_id, 0, 0)) * 1000;
342
+ nsec = NUM2LL(rb_funcall2(obj, oj_tv_usec_id, 0, 0)) * 1000;
351
343
  }
352
344
  dump_sec_nano(obj, sec, nsec, out);
353
345
  }
@@ -405,14 +397,12 @@ static void dump_row(VALUE row, StrLen cols, int ccnt, int depth, Out out) {
405
397
  assure_size(out, size);
406
398
  if (out->opts->dump_opts.use) {
407
399
  if (0 < out->opts->dump_opts.array_size) {
408
- strcpy(out->cur, out->opts->dump_opts.array_nl);
409
- out->cur += out->opts->dump_opts.array_size;
400
+ APPEND_CHARS(out->cur, out->opts->dump_opts.array_nl, out->opts->dump_opts.array_size);
410
401
  }
411
402
  if (0 < out->opts->dump_opts.indent_size) {
412
403
  int i;
413
404
  for (i = d2; 0 < i; i--) {
414
- strcpy(out->cur, out->opts->dump_opts.indent_str);
415
- out->cur += out->opts->dump_opts.indent_size;
405
+ APPEND_CHARS(out->cur, out->opts->dump_opts.indent_str, out->opts->dump_opts.indent_size);
416
406
  }
417
407
  }
418
408
  } else {
@@ -429,15 +419,13 @@ static void dump_row(VALUE row, StrLen cols, int ccnt, int depth, Out out) {
429
419
  assure_size(out, size);
430
420
  if (out->opts->dump_opts.use) {
431
421
  if (0 < out->opts->dump_opts.array_size) {
432
- strcpy(out->cur, out->opts->dump_opts.array_nl);
433
- out->cur += out->opts->dump_opts.array_size;
422
+ APPEND_CHARS(out->cur, out->opts->dump_opts.array_nl, out->opts->dump_opts.array_size);
434
423
  }
435
424
  if (0 < out->opts->dump_opts.indent_size) {
436
425
  int i;
437
426
 
438
427
  for (i = depth; 0 < i; i--) {
439
- strcpy(out->cur, out->opts->dump_opts.indent_str);
440
- out->cur += out->opts->dump_opts.indent_size;
428
+ APPEND_CHARS(out->cur, out->opts->dump_opts.indent_str, out->opts->dump_opts.indent_size);
441
429
  }
442
430
  }
443
431
  } else {
@@ -477,14 +465,12 @@ static void dump_activerecord_result(VALUE obj, int depth, Out out, bool as_ok)
477
465
  assure_size(out, size);
478
466
  if (out->opts->dump_opts.use) {
479
467
  if (0 < out->opts->dump_opts.array_size) {
480
- strcpy(out->cur, out->opts->dump_opts.array_nl);
481
- out->cur += out->opts->dump_opts.array_size;
468
+ APPEND_CHARS(out->cur, out->opts->dump_opts.array_nl, out->opts->dump_opts.array_size);
482
469
  }
483
470
  if (0 < out->opts->dump_opts.indent_size) {
484
471
  int i;
485
472
  for (i = d2; 0 < i; i--) {
486
- strcpy(out->cur, out->opts->dump_opts.indent_str);
487
- out->cur += out->opts->dump_opts.indent_size;
473
+ APPEND_CHARS(out->cur, out->opts->dump_opts.indent_str, out->opts->dump_opts.indent_size);
488
474
  }
489
475
  }
490
476
  } else {
@@ -500,15 +486,13 @@ static void dump_activerecord_result(VALUE obj, int depth, Out out, bool as_ok)
500
486
  assure_size(out, size);
501
487
  if (out->opts->dump_opts.use) {
502
488
  if (0 < out->opts->dump_opts.array_size) {
503
- strcpy(out->cur, out->opts->dump_opts.array_nl);
504
- out->cur += out->opts->dump_opts.array_size;
489
+ APPEND_CHARS(out->cur, out->opts->dump_opts.array_nl, out->opts->dump_opts.array_size);
505
490
  }
506
491
  if (0 < out->opts->dump_opts.indent_size) {
507
492
  int i;
508
493
 
509
494
  for (i = depth; 0 < i; i--) {
510
- strcpy(out->cur, out->opts->dump_opts.indent_str);
511
- out->cur += out->opts->dump_opts.indent_size;
495
+ APPEND_CHARS(out->cur, out->opts->dump_opts.indent_str, out->opts->dump_opts.indent_size);
512
496
  }
513
497
  }
514
498
  } else {
@@ -533,7 +517,7 @@ static void dump_as_string(VALUE obj, int depth, Out out, bool as_ok) {
533
517
  static void dump_as_json(VALUE obj, int depth, Out out, bool as_ok) {
534
518
  volatile VALUE ja;
535
519
 
536
- if (Yes == out->opts->trace) {
520
+ if (RB_UNLIKELY(Yes == out->opts->trace)) {
537
521
  oj_trace("as_json", obj, __FILE__, __LINE__, depth + 1, TraceRubyIn);
538
522
  }
539
523
  // Some classes elect to not take an options argument so check the arity
@@ -543,7 +527,7 @@ static void dump_as_json(VALUE obj, int depth, Out out, bool as_ok) {
543
527
  } else {
544
528
  ja = rb_funcall2(obj, oj_as_json_id, out->argc, out->argv);
545
529
  }
546
- if (Yes == out->opts->trace) {
530
+ if (RB_UNLIKELY(Yes == out->opts->trace)) {
547
531
  oj_trace("as_json", obj, __FILE__, __LINE__, depth + 1, TraceRubyOut);
548
532
  }
549
533
 
@@ -908,7 +892,6 @@ static VALUE protect_dump(VALUE ov) {
908
892
  }
909
893
 
910
894
  static VALUE encode(VALUE obj, ROptTable ropts, Options opts, int argc, VALUE *argv) {
911
- char buf[4096];
912
895
  struct _out out;
913
896
  struct _options copts = *opts;
914
897
  volatile VALUE rstr = Qnil;
@@ -925,9 +908,9 @@ static VALUE encode(VALUE obj, ROptTable ropts, Options opts, int argc, VALUE *a
925
908
  } else {
926
909
  copts.escape_mode = RailsEsc;
927
910
  }
928
- out.buf = buf;
929
- out.end = buf + sizeof(buf) - 10;
930
- out.allocated = false;
911
+
912
+ oj_out_init(&out);
913
+
931
914
  out.omit_nil = copts.dump_opts.omit_nil;
932
915
  out.caller = 0;
933
916
  out.cur = out.buf;
@@ -963,9 +946,9 @@ static VALUE encode(VALUE obj, ROptTable ropts, Options opts, int argc, VALUE *a
963
946
  if (Yes == copts.circular) {
964
947
  oj_cache8_delete(out.circ_cache);
965
948
  }
966
- if (out.allocated) {
967
- xfree(out.buf);
968
- }
949
+
950
+ oj_out_free(&out);
951
+
969
952
  if (0 != line) {
970
953
  rb_jump_tag(line);
971
954
  }
@@ -1175,12 +1158,15 @@ oj_optimize_rails(VALUE self) {
1175
1158
  *
1176
1159
  * The Oj ActiveSupport compliant encoder.
1177
1160
  */
1178
- void oj_mimic_rails_init() {
1161
+ void oj_mimic_rails_init(void) {
1179
1162
  VALUE rails = rb_define_module_under(Oj, "Rails");
1180
1163
 
1181
1164
  rb_define_module_function(rails, "encode", rails_encode, -1);
1182
1165
 
1183
1166
  encoder_class = rb_define_class_under(rails, "Encoder", rb_cObject);
1167
+ rb_gc_register_address(&encoder_class);
1168
+ rb_undef_alloc_func(encoder_class);
1169
+
1184
1170
  rb_define_module_function(encoder_class, "new", encoder_new, -1);
1185
1171
  rb_define_module_function(rails, "optimize", rails_optimize, -1);
1186
1172
  rb_define_module_function(rails, "deoptimize", rails_deoptimize, -1);
@@ -1263,19 +1249,17 @@ static void dump_array(VALUE a, int depth, Out out, bool as_ok) {
1263
1249
  } else {
1264
1250
  size = d2 * out->indent + 2;
1265
1251
  }
1252
+ assure_size(out, size * cnt);
1266
1253
  cnt--;
1267
1254
  for (i = 0; i <= cnt; i++) {
1268
- assure_size(out, size);
1269
1255
  if (out->opts->dump_opts.use) {
1270
1256
  if (0 < out->opts->dump_opts.array_size) {
1271
- strcpy(out->cur, out->opts->dump_opts.array_nl);
1272
- out->cur += out->opts->dump_opts.array_size;
1257
+ APPEND_CHARS(out->cur, out->opts->dump_opts.array_nl, out->opts->dump_opts.array_size);
1273
1258
  }
1274
1259
  if (0 < out->opts->dump_opts.indent_size) {
1275
1260
  int i;
1276
1261
  for (i = d2; 0 < i; i--) {
1277
- strcpy(out->cur, out->opts->dump_opts.indent_str);
1278
- out->cur += out->opts->dump_opts.indent_size;
1262
+ APPEND_CHARS(out->cur, out->opts->dump_opts.indent_str, out->opts->dump_opts.indent_size);
1279
1263
  }
1280
1264
  }
1281
1265
  } else {
@@ -1290,15 +1274,13 @@ static void dump_array(VALUE a, int depth, Out out, bool as_ok) {
1290
1274
  assure_size(out, size);
1291
1275
  if (out->opts->dump_opts.use) {
1292
1276
  if (0 < out->opts->dump_opts.array_size) {
1293
- strcpy(out->cur, out->opts->dump_opts.array_nl);
1294
- out->cur += out->opts->dump_opts.array_size;
1277
+ APPEND_CHARS(out->cur, out->opts->dump_opts.array_nl, out->opts->dump_opts.array_size);
1295
1278
  }
1296
1279
  if (0 < out->opts->dump_opts.indent_size) {
1297
1280
  int i;
1298
1281
 
1299
1282
  for (i = depth; 0 < i; i--) {
1300
- strcpy(out->cur, out->opts->dump_opts.indent_str);
1301
- out->cur += out->opts->dump_opts.indent_size;
1283
+ APPEND_CHARS(out->cur, out->opts->dump_opts.indent_str, out->opts->dump_opts.indent_size);
1302
1284
  }
1303
1285
  }
1304
1286
  } else {
@@ -1336,14 +1318,12 @@ static int hash_cb(VALUE key, VALUE value, VALUE ov) {
1336
1318
  size = depth * out->opts->dump_opts.indent_size + out->opts->dump_opts.hash_size + 1;
1337
1319
  assure_size(out, size);
1338
1320
  if (0 < out->opts->dump_opts.hash_size) {
1339
- strcpy(out->cur, out->opts->dump_opts.hash_nl);
1340
- out->cur += out->opts->dump_opts.hash_size;
1321
+ APPEND_CHARS(out->cur, out->opts->dump_opts.hash_nl, out->opts->dump_opts.hash_size);
1341
1322
  }
1342
1323
  if (0 < out->opts->dump_opts.indent_size) {
1343
1324
  int i;
1344
1325
  for (i = depth; 0 < i; i--) {
1345
- strcpy(out->cur, out->opts->dump_opts.indent_str);
1346
- out->cur += out->opts->dump_opts.indent_size;
1326
+ APPEND_CHARS(out->cur, out->opts->dump_opts.indent_str, out->opts->dump_opts.indent_size);
1347
1327
  }
1348
1328
  }
1349
1329
  if (rtype == T_STRING) {
@@ -1354,13 +1334,11 @@ static int hash_cb(VALUE key, VALUE value, VALUE ov) {
1354
1334
  size = out->opts->dump_opts.before_size + out->opts->dump_opts.after_size + 2;
1355
1335
  assure_size(out, size);
1356
1336
  if (0 < out->opts->dump_opts.before_size) {
1357
- strcpy(out->cur, out->opts->dump_opts.before_sep);
1358
- out->cur += out->opts->dump_opts.before_size;
1337
+ APPEND_CHARS(out->cur, out->opts->dump_opts.before_sep, out->opts->dump_opts.before_size);
1359
1338
  }
1360
1339
  *out->cur++ = ':';
1361
1340
  if (0 < out->opts->dump_opts.after_size) {
1362
- strcpy(out->cur, out->opts->dump_opts.after_sep);
1363
- out->cur += out->opts->dump_opts.after_size;
1341
+ APPEND_CHARS(out->cur, out->opts->dump_opts.after_sep, out->opts->dump_opts.after_size);
1364
1342
  }
1365
1343
  }
1366
1344
  dump_rails_val(value, depth, out, true);
@@ -1403,15 +1381,13 @@ static void dump_hash(VALUE obj, int depth, Out out, bool as_ok) {
1403
1381
  size = depth * out->opts->dump_opts.indent_size + out->opts->dump_opts.hash_size + 1;
1404
1382
  assure_size(out, size);
1405
1383
  if (0 < out->opts->dump_opts.hash_size) {
1406
- strcpy(out->cur, out->opts->dump_opts.hash_nl);
1407
- out->cur += out->opts->dump_opts.hash_size;
1384
+ APPEND_CHARS(out->cur, out->opts->dump_opts.hash_nl, out->opts->dump_opts.hash_size);
1408
1385
  }
1409
1386
  if (0 < out->opts->dump_opts.indent_size) {
1410
1387
  int i;
1411
1388
 
1412
1389
  for (i = depth; 0 < i; i--) {
1413
- strcpy(out->cur, out->opts->dump_opts.indent_str);
1414
- out->cur += out->opts->dump_opts.indent_size;
1390
+ APPEND_CHARS(out->cur, out->opts->dump_opts.indent_str, out->opts->dump_opts.indent_size);
1415
1391
  }
1416
1392
  }
1417
1393
  }
@@ -1488,7 +1464,7 @@ static DumpFunc rails_funcs[] = {
1488
1464
  static void dump_rails_val(VALUE obj, int depth, Out out, bool as_ok) {
1489
1465
  int type = rb_type(obj);
1490
1466
 
1491
- if (Yes == out->opts->trace) {
1467
+ if (RB_UNLIKELY(Yes == out->opts->trace)) {
1492
1468
  oj_trace("dump", obj, __FILE__, __LINE__, depth, TraceIn);
1493
1469
  }
1494
1470
  if (MAX_DEPTH < depth) {
@@ -1499,14 +1475,14 @@ static void dump_rails_val(VALUE obj, int depth, Out out, bool as_ok) {
1499
1475
 
1500
1476
  if (NULL != f) {
1501
1477
  f(obj, depth, out, as_ok);
1502
- if (Yes == out->opts->trace) {
1478
+ if (RB_UNLIKELY(Yes == out->opts->trace)) {
1503
1479
  oj_trace("dump", obj, __FILE__, __LINE__, depth, TraceOut);
1504
1480
  }
1505
1481
  return;
1506
1482
  }
1507
1483
  }
1508
1484
  oj_dump_nil(Qnil, depth, out, false);
1509
- if (Yes == out->opts->trace) {
1485
+ if (RB_UNLIKELY(Yes == out->opts->trace)) {
1510
1486
  oj_trace("dump", Qnil, __FILE__, __LINE__, depth, TraceOut);
1511
1487
  }
1512
1488
  }
data/ext/oj/rails.h CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  #include "dump.h"
8
8
 
9
- extern void oj_mimic_rails_init();
9
+ extern void oj_mimic_rails_init(void);
10
10
  extern ROpt oj_rails_get_opt(ROptTable rot, VALUE clas);
11
11
 
12
12
  extern bool oj_rails_hash_opt;
data/ext/oj/reader.c CHANGED
@@ -6,9 +6,11 @@
6
6
  #include <stdlib.h>
7
7
  #include <strings.h>
8
8
  #include <sys/types.h>
9
+ #ifdef NEEDS_UIO
9
10
  #if NEEDS_UIO
10
11
  #include <sys/uio.h>
11
12
  #endif
13
+ #endif
12
14
  #include <time.h>
13
15
  #include <unistd.h>
14
16
 
data/ext/oj/saj.c CHANGED
@@ -210,10 +210,7 @@ static void read_hash(ParseInfo pi, const char *key) {
210
210
  pi->s++;
211
211
  } else {
212
212
  if (pi->has_error) {
213
- call_error("invalid format, expected , or } while in an object",
214
- pi,
215
- __FILE__,
216
- __LINE__);
213
+ call_error("invalid format, expected , or } while in an object", pi, __FILE__, __LINE__);
217
214
  }
218
215
  raise_error("invalid format, expected , or } while in an object", pi->str, pi->s);
219
216
  }
@@ -243,10 +240,7 @@ static void read_array(ParseInfo pi, const char *key) {
243
240
  break;
244
241
  } else {
245
242
  if (pi->has_error) {
246
- call_error("invalid format, expected , or ] while in an array",
247
- pi,
248
- __FILE__,
249
- __LINE__);
243
+ call_error("invalid format, expected , or ] while in an array", pi, __FILE__, __LINE__);
250
244
  }
251
245
  raise_error("invalid format, expected , or ] while in an array", pi->str, pi->s);
252
246
  }
@@ -276,7 +270,7 @@ static void read_str(ParseInfo pi, const char *key) {
276
270
  #endif
277
271
 
278
272
  static void read_num(ParseInfo pi, const char *key) {
279
- char * start = pi->s;
273
+ char *start = pi->s;
280
274
  int64_t n = 0;
281
275
  long a = 0;
282
276
  long div = 1;
@@ -351,9 +345,7 @@ static void read_num(ParseInfo pi, const char *key) {
351
345
 
352
346
  *pi->s = '\0';
353
347
  if (pi->has_add_value) {
354
- call_add_value(pi->handler,
355
- rb_funcall(rb_cObject, oj_bigdecimal_id, 1, rb_str_new2(start)),
356
- key);
348
+ call_add_value(pi->handler, rb_funcall(rb_cObject, oj_bigdecimal_id, 1, rb_str_new2(start)), key);
357
349
  }
358
350
  *pi->s = c;
359
351
  } else {
@@ -371,9 +363,7 @@ static void read_num(ParseInfo pi, const char *key) {
371
363
 
372
364
  *pi->s = '\0';
373
365
  if (pi->has_add_value) {
374
- call_add_value(pi->handler,
375
- rb_funcall(rb_cObject, oj_bigdecimal_id, 1, rb_str_new2(start)),
376
- key);
366
+ call_add_value(pi->handler, rb_funcall(rb_cObject, oj_bigdecimal_id, 1, rb_str_new2(start)), key);
377
367
  }
378
368
  *pi->s = c;
379
369
  } else {
@@ -505,9 +495,9 @@ static char *unicode_to_chars(ParseInfo pi, char *t, uint32_t code) {
505
495
  * reached again. Do not read the character after the terminating quote.
506
496
  */
507
497
  static char *read_quoted_value(ParseInfo pi) {
508
- char * value = 0;
509
- char * h = pi->s; /* head */
510
- char * t = h; /* tail */
498
+ char *value = 0;
499
+ char *h = pi->s; /* head */
500
+ char *t = h; /* tail */
511
501
  uint32_t code;
512
502
 
513
503
  h++; /* skip quote character */
@@ -588,15 +578,13 @@ static void saj_parse(VALUE handler, char *json) {
588
578
  pi.str = json;
589
579
  pi.s = json;
590
580
  #if IS_WINDOWS
591
- pi.stack_min = (void *)((char *)&obj -
592
- (512 * 1024)); /* assume a 1M stack and give half to ruby */
581
+ pi.stack_min = (void *)((char *)&obj - (512L * 1024L)); /* assume a 1M stack and give half to ruby */
593
582
  #else
594
583
  {
595
584
  struct rlimit lim;
596
585
 
597
586
  if (0 == getrlimit(RLIMIT_STACK, &lim) && RLIM_INFINITY != lim.rlim_cur) {
598
- pi.stack_min = (void *)((char *)&obj - (lim.rlim_cur / 4 *
599
- 3)); /* let 3/4ths of the stack be used only */
587
+ pi.stack_min = (void *)((char *)&obj - (lim.rlim_cur / 4 * 3)); /* let 3/4ths of the stack be used only */
600
588
  } else {
601
589
  pi.stack_min = 0; /* indicates not to check stack limit */
602
590
  }
@@ -633,7 +621,7 @@ static void saj_parse(VALUE handler, char *json) {
633
621
  */
634
622
  VALUE
635
623
  oj_saj_parse(int argc, VALUE *argv, VALUE self) {
636
- char * json = 0;
624
+ char *json = 0;
637
625
  size_t len = 0;
638
626
  VALUE input = argv[1];
639
627