oj 3.13.11 → 3.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +74 -0
  3. data/README.md +4 -2
  4. data/ext/oj/buf.h +11 -6
  5. data/ext/oj/cache.c +25 -24
  6. data/ext/oj/cache8.c +10 -9
  7. data/ext/oj/circarray.c +8 -6
  8. data/ext/oj/circarray.h +2 -2
  9. data/ext/oj/code.c +17 -24
  10. data/ext/oj/code.h +2 -2
  11. data/ext/oj/compat.c +17 -44
  12. data/ext/oj/custom.c +70 -141
  13. data/ext/oj/debug.c +3 -9
  14. data/ext/oj/dump.c +128 -118
  15. data/ext/oj/dump.h +12 -8
  16. data/ext/oj/dump_compat.c +564 -641
  17. data/ext/oj/dump_leaf.c +17 -63
  18. data/ext/oj/dump_object.c +70 -199
  19. data/ext/oj/dump_strict.c +22 -46
  20. data/ext/oj/encoder.c +1 -1
  21. data/ext/oj/err.c +2 -13
  22. data/ext/oj/err.h +9 -12
  23. data/ext/oj/extconf.rb +14 -5
  24. data/ext/oj/fast.c +75 -103
  25. data/ext/oj/intern.c +52 -50
  26. data/ext/oj/intern.h +4 -8
  27. data/ext/oj/mem.c +318 -0
  28. data/ext/oj/mem.h +53 -0
  29. data/ext/oj/mimic_json.c +75 -47
  30. data/ext/oj/object.c +49 -66
  31. data/ext/oj/odd.c +89 -67
  32. data/ext/oj/odd.h +15 -15
  33. data/ext/oj/oj.c +140 -99
  34. data/ext/oj/oj.h +80 -51
  35. data/ext/oj/parse.c +162 -184
  36. data/ext/oj/parse.h +7 -10
  37. data/ext/oj/parser.c +89 -34
  38. data/ext/oj/parser.h +18 -7
  39. data/ext/oj/rails.c +82 -146
  40. data/ext/oj/rails.h +1 -1
  41. data/ext/oj/reader.c +11 -12
  42. data/ext/oj/reader.h +4 -2
  43. data/ext/oj/resolve.c +3 -4
  44. data/ext/oj/rxclass.c +6 -5
  45. data/ext/oj/rxclass.h +1 -1
  46. data/ext/oj/saj.c +20 -31
  47. data/ext/oj/saj2.c +329 -93
  48. data/ext/oj/saj2.h +23 -0
  49. data/ext/oj/scp.c +3 -14
  50. data/ext/oj/sparse.c +26 -70
  51. data/ext/oj/stream_writer.c +12 -22
  52. data/ext/oj/strict.c +20 -52
  53. data/ext/oj/string_writer.c +21 -21
  54. data/ext/oj/trace.h +31 -4
  55. data/ext/oj/usual.c +105 -150
  56. data/ext/oj/usual.h +68 -0
  57. data/ext/oj/util.h +1 -1
  58. data/ext/oj/val_stack.c +1 -1
  59. data/ext/oj/val_stack.h +8 -7
  60. data/ext/oj/validate.c +21 -26
  61. data/ext/oj/wab.c +31 -68
  62. data/lib/oj/active_support_helper.rb +0 -1
  63. data/lib/oj/bag.rb +7 -1
  64. data/lib/oj/easy_hash.rb +4 -5
  65. data/lib/oj/error.rb +0 -1
  66. data/lib/oj/json.rb +4 -2
  67. data/lib/oj/mimic.rb +4 -2
  68. data/lib/oj/saj.rb +20 -6
  69. data/lib/oj/state.rb +9 -6
  70. data/lib/oj/version.rb +1 -2
  71. data/lib/oj.rb +2 -0
  72. data/pages/Compatibility.md +1 -1
  73. data/pages/InstallOptions.md +20 -0
  74. data/pages/Options.md +10 -0
  75. data/test/_test_active.rb +8 -9
  76. data/test/_test_active_mimic.rb +7 -8
  77. data/test/_test_mimic_rails.rb +17 -20
  78. data/test/activerecord/result_test.rb +5 -6
  79. data/test/{activesupport5 → activesupport7}/abstract_unit.rb +16 -12
  80. data/test/{activesupport5 → activesupport7}/decoding_test.rb +2 -10
  81. data/test/{activesupport5 → activesupport7}/encoding_test.rb +20 -34
  82. data/test/{activesupport5 → activesupport7}/encoding_test_cases.rb +6 -0
  83. data/test/{activesupport5 → activesupport7}/time_zone_test_helpers.rb +8 -0
  84. data/test/files.rb +15 -15
  85. data/test/foo.rb +9 -71
  86. data/test/helper.rb +11 -8
  87. data/test/isolated/shared.rb +3 -2
  88. data/test/json_gem/json_addition_test.rb +2 -2
  89. data/test/json_gem/json_common_interface_test.rb +4 -4
  90. data/test/json_gem/json_encoding_test.rb +0 -0
  91. data/test/json_gem/json_ext_parser_test.rb +1 -0
  92. data/test/json_gem/json_fixtures_test.rb +3 -2
  93. data/test/json_gem/json_generator_test.rb +48 -36
  94. data/test/json_gem/json_generic_object_test.rb +11 -11
  95. data/test/json_gem/json_parser_test.rb +54 -47
  96. data/test/json_gem/json_string_matching_test.rb +9 -9
  97. data/test/json_gem/test_helper.rb +7 -3
  98. data/test/mem.rb +13 -12
  99. data/test/perf.rb +21 -26
  100. data/test/perf_compat.rb +31 -33
  101. data/test/perf_dump.rb +50 -0
  102. data/test/perf_fast.rb +80 -82
  103. data/test/perf_file.rb +27 -29
  104. data/test/perf_object.rb +65 -69
  105. data/test/perf_once.rb +12 -11
  106. data/test/perf_parser.rb +42 -48
  107. data/test/perf_saj.rb +46 -54
  108. data/test/perf_scp.rb +57 -69
  109. data/test/perf_simple.rb +41 -39
  110. data/test/perf_strict.rb +68 -70
  111. data/test/perf_wab.rb +67 -69
  112. data/test/prec.rb +3 -3
  113. data/test/sample/change.rb +0 -1
  114. data/test/sample/dir.rb +0 -1
  115. data/test/sample/doc.rb +0 -1
  116. data/test/sample/file.rb +0 -1
  117. data/test/sample/group.rb +0 -1
  118. data/test/sample/hasprops.rb +0 -1
  119. data/test/sample/layer.rb +0 -1
  120. data/test/sample/rect.rb +0 -1
  121. data/test/sample/shape.rb +0 -1
  122. data/test/sample/text.rb +0 -1
  123. data/test/sample.rb +16 -16
  124. data/test/sample_json.rb +8 -8
  125. data/test/test_compat.rb +76 -42
  126. data/test/test_custom.rb +72 -51
  127. data/test/test_debian.rb +7 -10
  128. data/test/test_fast.rb +86 -90
  129. data/test/test_file.rb +41 -30
  130. data/test/test_gc.rb +16 -5
  131. data/test/test_generate.rb +5 -5
  132. data/test/test_hash.rb +4 -4
  133. data/test/test_integer_range.rb +9 -9
  134. data/test/test_null.rb +20 -20
  135. data/test/test_object.rb +85 -96
  136. data/test/test_parser.rb +6 -22
  137. data/test/test_parser_debug.rb +27 -0
  138. data/test/test_parser_saj.rb +115 -23
  139. data/test/test_parser_usual.rb +6 -6
  140. data/test/test_rails.rb +2 -2
  141. data/test/test_saj.rb +10 -8
  142. data/test/test_scp.rb +37 -39
  143. data/test/test_strict.rb +30 -32
  144. data/test/test_various.rb +147 -99
  145. data/test/test_wab.rb +48 -44
  146. data/test/test_writer.rb +47 -47
  147. data/test/tests.rb +13 -4
  148. data/test/tests_mimic.rb +12 -3
  149. data/test/tests_mimic_addition.rb +12 -3
  150. metadata +33 -144
  151. data/test/activesupport4/decoding_test.rb +0 -108
  152. data/test/activesupport4/encoding_test.rb +0 -531
  153. data/test/activesupport4/test_helper.rb +0 -41
  154. data/test/activesupport5/test_helper.rb +0 -72
  155. data/test/bar.rb +0 -16
  156. data/test/baz.rb +0 -16
  157. data/test/bug.rb +0 -16
  158. data/test/zoo.rb +0 -13
data/ext/oj/dump_strict.c CHANGED
@@ -22,15 +22,13 @@ static const char ninf_val[] = NINF_VAL;
22
22
  static const char nan_val[] = NAN_VAL;
23
23
 
24
24
  static void raise_strict(VALUE obj) {
25
- rb_raise(rb_eTypeError,
26
- "Failed to dump %s Object to JSON in strict mode.\n",
27
- rb_class2name(rb_obj_class(obj)));
25
+ rb_raise(rb_eTypeError, "Failed to dump %s Object to JSON in strict mode.\n", rb_class2name(rb_obj_class(obj)));
28
26
  }
29
27
 
30
28
  // Removed dependencies on math due to problems with CentOS 5.4.
31
29
  static void dump_float(VALUE obj, int depth, Out out, bool as_ok) {
32
30
  char buf[64];
33
- char * b;
31
+ char* b;
34
32
  double d = rb_num2dbl(obj);
35
33
  int cnt = 0;
36
34
 
@@ -92,7 +90,7 @@ static void dump_float(VALUE obj, int depth, Out out, bool as_ok) {
92
90
  } else if (d == (double)(long long int)d) {
93
91
  cnt = snprintf(buf, sizeof(buf), "%.1f", d);
94
92
  } else if (0 == out->opts->float_prec) {
95
- volatile VALUE rstr = rb_funcall(obj, oj_to_s_id, 0);
93
+ volatile VALUE rstr = oj_safe_string_convert(obj);
96
94
 
97
95
  cnt = (int)RSTRING_LEN(rstr);
98
96
  if ((int)sizeof(buf) <= cnt) {
@@ -105,9 +103,7 @@ static void dump_float(VALUE obj, int depth, Out out, bool as_ok) {
105
103
  }
106
104
  }
107
105
  assure_size(out, cnt);
108
- for (b = buf; '\0' != *b; b++) {
109
- *out->cur++ = *b;
110
- }
106
+ APPEND_CHARS(out->cur, buf, cnt);
111
107
  *out->cur = '\0';
112
108
  }
113
109
 
@@ -134,19 +130,17 @@ static void dump_array(VALUE a, int depth, Out out, bool as_ok) {
134
130
  } else {
135
131
  size = d2 * out->indent + 2;
136
132
  }
133
+ assure_size(out, size * cnt);
137
134
  cnt--;
138
135
  for (i = 0; i <= cnt; i++) {
139
- assure_size(out, size);
140
136
  if (out->opts->dump_opts.use) {
141
137
  if (0 < out->opts->dump_opts.array_size) {
142
- strcpy(out->cur, out->opts->dump_opts.array_nl);
143
- out->cur += out->opts->dump_opts.array_size;
138
+ APPEND_CHARS(out->cur, out->opts->dump_opts.array_nl, out->opts->dump_opts.array_size);
144
139
  }
145
140
  if (0 < out->opts->dump_opts.indent_size) {
146
141
  int i;
147
142
  for (i = d2; 0 < i; i--) {
148
- strcpy(out->cur, out->opts->dump_opts.indent_str);
149
- out->cur += out->opts->dump_opts.indent_size;
143
+ APPEND_CHARS(out->cur, out->opts->dump_opts.indent_str, out->opts->dump_opts.indent_size);
150
144
  }
151
145
  }
152
146
  } else {
@@ -167,15 +161,13 @@ static void dump_array(VALUE a, int depth, Out out, bool as_ok) {
167
161
  // printf("*** d2: %u indent: %u '%s'\n", d2, out->opts->dump_opts->indent_size,
168
162
  // out->opts->dump_opts->indent);
169
163
  if (0 < out->opts->dump_opts.array_size) {
170
- strcpy(out->cur, out->opts->dump_opts.array_nl);
171
- out->cur += out->opts->dump_opts.array_size;
164
+ APPEND_CHARS(out->cur, out->opts->dump_opts.array_nl, out->opts->dump_opts.array_size);
172
165
  }
173
166
  if (0 < out->opts->dump_opts.indent_size) {
174
167
  int i;
175
168
 
176
169
  for (i = depth; 0 < i; i--) {
177
- strcpy(out->cur, out->opts->dump_opts.indent_str);
178
- out->cur += out->opts->dump_opts.indent_size;
170
+ APPEND_CHARS(out->cur, out->opts->dump_opts.indent_str, out->opts->dump_opts.indent_size);
179
171
  }
180
172
  }
181
173
  } else {
@@ -214,14 +206,12 @@ static int hash_cb(VALUE key, VALUE value, VALUE ov) {
214
206
  size = depth * out->opts->dump_opts.indent_size + out->opts->dump_opts.hash_size + 1;
215
207
  assure_size(out, size);
216
208
  if (0 < out->opts->dump_opts.hash_size) {
217
- strcpy(out->cur, out->opts->dump_opts.hash_nl);
218
- out->cur += out->opts->dump_opts.hash_size;
209
+ APPEND_CHARS(out->cur, out->opts->dump_opts.hash_nl, out->opts->dump_opts.hash_size);
219
210
  }
220
211
  if (0 < out->opts->dump_opts.indent_size) {
221
212
  int i;
222
213
  for (i = depth; 0 < i; i--) {
223
- strcpy(out->cur, out->opts->dump_opts.indent_str);
224
- out->cur += out->opts->dump_opts.indent_size;
214
+ APPEND_CHARS(out->cur, out->opts->dump_opts.indent_str, out->opts->dump_opts.indent_size);
225
215
  }
226
216
  }
227
217
  if (rtype == T_STRING) {
@@ -232,13 +222,11 @@ static int hash_cb(VALUE key, VALUE value, VALUE ov) {
232
222
  size = out->opts->dump_opts.before_size + out->opts->dump_opts.after_size + 2;
233
223
  assure_size(out, size);
234
224
  if (0 < out->opts->dump_opts.before_size) {
235
- strcpy(out->cur, out->opts->dump_opts.before_sep);
236
- out->cur += out->opts->dump_opts.before_size;
225
+ APPEND_CHARS(out->cur, out->opts->dump_opts.before_sep, out->opts->dump_opts.before_size);
237
226
  }
238
227
  *out->cur++ = ':';
239
228
  if (0 < out->opts->dump_opts.after_size) {
240
- strcpy(out->cur, out->opts->dump_opts.after_sep);
241
- out->cur += out->opts->dump_opts.after_size;
229
+ APPEND_CHARS(out->cur, out->opts->dump_opts.after_sep, out->opts->dump_opts.after_size);
242
230
  }
243
231
  }
244
232
  if (NullMode == out->opts->mode) {
@@ -281,15 +269,13 @@ static void dump_hash(VALUE obj, int depth, Out out, bool as_ok) {
281
269
  size = depth * out->opts->dump_opts.indent_size + out->opts->dump_opts.hash_size + 1;
282
270
  assure_size(out, size);
283
271
  if (0 < out->opts->dump_opts.hash_size) {
284
- strcpy(out->cur, out->opts->dump_opts.hash_nl);
285
- out->cur += out->opts->dump_opts.hash_size;
272
+ APPEND_CHARS(out->cur, out->opts->dump_opts.hash_nl, out->opts->dump_opts.hash_size);
286
273
  }
287
274
  if (0 < out->opts->dump_opts.indent_size) {
288
275
  int i;
289
276
 
290
277
  for (i = depth; 0 < i; i--) {
291
- strcpy(out->cur, out->opts->dump_opts.indent_str);
292
- out->cur += out->opts->dump_opts.indent_size;
278
+ APPEND_CHARS(out->cur, out->opts->dump_opts.indent_str, out->opts->dump_opts.indent_size);
293
279
  }
294
280
  }
295
281
  }
@@ -302,7 +288,7 @@ static void dump_data_strict(VALUE obj, int depth, Out out, bool as_ok) {
302
288
  VALUE clas = rb_obj_class(obj);
303
289
 
304
290
  if (oj_bigdecimal_class == clas) {
305
- volatile VALUE rstr = rb_funcall(obj, oj_to_s_id, 0);
291
+ volatile VALUE rstr = oj_safe_string_convert(obj);
306
292
 
307
293
  oj_dump_raw(RSTRING_PTR(rstr), (int)RSTRING_LEN(rstr), out);
308
294
  } else {
@@ -314,7 +300,7 @@ static void dump_data_null(VALUE obj, int depth, Out out, bool as_ok) {
314
300
  VALUE clas = rb_obj_class(obj);
315
301
 
316
302
  if (oj_bigdecimal_class == clas) {
317
- volatile VALUE rstr = rb_funcall(obj, oj_to_s_id, 0);
303
+ volatile VALUE rstr = oj_safe_string_convert(obj);
318
304
 
319
305
  oj_dump_raw(RSTRING_PTR(rstr), (int)RSTRING_LEN(rstr), out);
320
306
  } else {
@@ -350,9 +336,7 @@ static DumpFunc strict_funcs[] = {
350
336
  void oj_dump_strict_val(VALUE obj, int depth, Out out) {
351
337
  int type = rb_type(obj);
352
338
 
353
- if (Yes == out->opts->trace) {
354
- oj_trace("dump", obj, __FILE__, __LINE__, depth, TraceIn);
355
- }
339
+ TRACE(out->opts->trace, "dump", obj, depth, TraceIn);
356
340
  if (MAX_DEPTH < depth) {
357
341
  rb_raise(rb_eNoMemError, "Too deeply nested.\n");
358
342
  }
@@ -361,9 +345,7 @@ void oj_dump_strict_val(VALUE obj, int depth, Out out) {
361
345
 
362
346
  if (NULL != f) {
363
347
  f(obj, depth, out, false);
364
- if (Yes == out->opts->trace) {
365
- oj_trace("dump", obj, __FILE__, __LINE__, depth, TraceOut);
366
- }
348
+ TRACE(out->opts->trace, "dump", obj, depth, TraceOut);
367
349
  return;
368
350
  }
369
351
  }
@@ -398,9 +380,7 @@ static DumpFunc null_funcs[] = {
398
380
  void oj_dump_null_val(VALUE obj, int depth, Out out) {
399
381
  int type = rb_type(obj);
400
382
 
401
- if (Yes == out->opts->trace) {
402
- oj_trace("dump", obj, __FILE__, __LINE__, depth, TraceOut);
403
- }
383
+ TRACE(out->opts->trace, "dump", obj, depth, TraceOut);
404
384
  if (MAX_DEPTH < depth) {
405
385
  rb_raise(rb_eNoMemError, "Too deeply nested.\n");
406
386
  }
@@ -409,14 +389,10 @@ void oj_dump_null_val(VALUE obj, int depth, Out out) {
409
389
 
410
390
  if (NULL != f) {
411
391
  f(obj, depth, out, false);
412
- if (Yes == out->opts->trace) {
413
- oj_trace("dump", obj, __FILE__, __LINE__, depth, TraceOut);
414
- }
392
+ TRACE(out->opts->trace, "dump", obj, depth, TraceOut);
415
393
  return;
416
394
  }
417
395
  }
418
396
  oj_dump_nil(Qnil, depth, out, false);
419
- if (Yes == out->opts->trace) {
420
- oj_trace("dump", Qnil, __FILE__, __LINE__, depth, TraceOut);
421
- }
397
+ TRACE(out->opts->trace, "dump", Qnil, depth, TraceOut);
422
398
  }
data/ext/oj/encoder.c CHANGED
@@ -27,7 +27,7 @@ typedef struct _encoder {
27
27
  struct _dumpOpts dump_opts;
28
28
  struct _rxClass str_rx;
29
29
  VALUE* ignore; // Qnil terminated array of classes or NULL
30
- } * Encoder;
30
+ }* Encoder;
31
31
 
32
32
  /*
33
33
  rb_define_module_function(Oj, "encode", encode, -1);
data/ext/oj/err.c CHANGED
@@ -39,11 +39,7 @@ void _oj_err_set_with_location(Err err,
39
39
  oj_err_set(err, eclas, "%s at line %d, column %d [%s:%d]", msg, n, col, file, line);
40
40
  }
41
41
 
42
- void _oj_raise_error(const char *msg,
43
- const char *json,
44
- const char *current,
45
- const char *file,
46
- int line) {
42
+ void _oj_raise_error(const char *msg, const char *json, const char *current, const char *file, int line) {
47
43
  struct _err err;
48
44
  int n = 1;
49
45
  int col = 1;
@@ -56,13 +52,6 @@ void _oj_raise_error(const char *msg,
56
52
  n++;
57
53
  }
58
54
  }
59
- oj_err_set(&err,
60
- oj_parse_error_class,
61
- "%s at line %d, column %d [%s:%d]",
62
- msg,
63
- n,
64
- col,
65
- file,
66
- line);
55
+ oj_err_set(&err, oj_parse_error_class, "%s at line %d, column %d [%s:%d]", msg, n, col, file, line);
67
56
  rb_raise(err.clas, "%s", err.msg);
68
57
  }
data/ext/oj/err.h CHANGED
@@ -5,6 +5,7 @@
5
5
  #define OJ_ERR_H
6
6
 
7
7
  #include <errno.h>
8
+
8
9
  #include "ruby.h"
9
10
 
10
11
  // Needed to silence 2.4.0 warnings.
@@ -12,12 +13,12 @@
12
13
  #define NORETURN(x) x
13
14
  #endif
14
15
 
15
- #define OJ_ERR_START 300
16
+ #define OJ_ERR_START 300
16
17
 
17
18
  typedef enum {
18
- OJ_OK = 0,
19
- OJ_ERR_MEMORY = ENOMEM,
20
- OJ_ERR_PARSE = OJ_ERR_START,
19
+ OJ_OK = 0,
20
+ OJ_ERR_MEMORY = ENOMEM,
21
+ OJ_ERR_PARSE = OJ_ERR_START,
21
22
  OJ_ERR_READ,
22
23
  OJ_ERR_WRITE,
23
24
  OJ_ERR_OVERFLOW,
@@ -29,13 +30,12 @@ typedef enum {
29
30
  OJ_ERR_LAST,
30
31
  } ojStatus;
31
32
 
32
- #define set_error(err, eclas, msg, json, current) \
33
- _oj_err_set_with_location(err, eclas, msg, json, current, FILE, LINE)
33
+ #define set_error(err, eclas, msg, json, current) _oj_err_set_with_location(err, eclas, msg, json, current, FILE, LINE)
34
34
 
35
35
  typedef struct _err {
36
36
  VALUE clas;
37
37
  char msg[128];
38
- } * Err;
38
+ } *Err;
39
39
 
40
40
  extern VALUE oj_parse_error_class;
41
41
 
@@ -52,11 +52,8 @@ NORETURN(extern void oj_err_raise(Err e));
52
52
 
53
53
  #define raise_error(msg, json, current) _oj_raise_error(msg, json, current, __FILE__, __LINE__)
54
54
 
55
- NORETURN(extern void _oj_raise_error(const char *msg,
56
- const char *json,
57
- const char *current,
58
- const char *file,
59
- int line));
55
+ NORETURN(
56
+ extern void _oj_raise_error(const char *msg, const char *json, const char *current, const char *file, int line));
60
57
 
61
58
  inline static void err_init(Err e) {
62
59
  e->clas = Qnil;
data/ext/oj/extconf.rb CHANGED
@@ -23,14 +23,10 @@ dflags = {
23
23
  'RSTRUCT_LEN_RETURNS_INTEGER_OBJECT' => ('ruby' == type && '2' == version[0] && '4' == version[1] && '1' >= version[2]) ? 1 : 0,
24
24
  }
25
25
 
26
- have_func('rb_time_timespec')
27
- have_func('rb_ivar_count')
28
- have_func('rb_ivar_foreach')
29
26
  # Support for compaction.
30
27
  have_func('rb_gc_mark_movable')
31
28
  have_func('stpcpy')
32
29
  have_func('pthread_mutex_init')
33
- have_func('rb_enc_associate')
34
30
  have_func('rb_enc_interned_str')
35
31
  have_func('rb_ext_ractor_safe', 'ruby.h')
36
32
  # rb_hash_bulk_insert is deep down in a header not included in normal build and that seems to fool have_func.
@@ -38,7 +34,20 @@ have_func('rb_hash_bulk_insert', 'ruby.h') unless '2' == version[0] && '6' == ve
38
34
 
39
35
  dflags['OJ_DEBUG'] = true unless ENV['OJ_DEBUG'].nil?
40
36
 
41
- dflags.each do |k,v|
37
+ if with_config('--with-sse42')
38
+ if try_cflags('-msse4.2')
39
+ $CPPFLAGS += ' -msse4.2'
40
+ dflags['OJ_USE_SSE4_2'] = 1
41
+ else
42
+ warn 'SSE 4.2 is not supported on this platform.'
43
+ end
44
+ end
45
+
46
+ if enable_config('trace-log', false)
47
+ dflags['OJ_ENABLE_TRACE_LOG'] = 1
48
+ end
49
+
50
+ dflags.each do |k, v|
42
51
  if v.nil?
43
52
  $CPPFLAGS += " -D#{k}"
44
53
  else