oj 3.9.1 → 3.16.11
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1452 -0
- data/README.md +21 -6
- data/RELEASE_NOTES.md +61 -0
- data/ext/oj/buf.h +50 -68
- data/ext/oj/cache.c +329 -0
- data/ext/oj/cache.h +22 -0
- data/ext/oj/cache8.c +60 -62
- data/ext/oj/cache8.h +9 -36
- data/ext/oj/circarray.c +38 -42
- data/ext/oj/circarray.h +12 -13
- data/ext/oj/code.c +158 -179
- data/ext/oj/code.h +20 -22
- data/ext/oj/compat.c +145 -205
- data/ext/oj/custom.c +740 -880
- data/ext/oj/debug.c +126 -0
- data/ext/oj/dump.c +1145 -844
- data/ext/oj/dump.h +71 -57
- data/ext/oj/dump_compat.c +575 -655
- data/ext/oj/dump_leaf.c +96 -186
- data/ext/oj/dump_object.c +533 -660
- data/ext/oj/dump_strict.c +306 -340
- data/ext/oj/encode.h +4 -33
- data/ext/oj/encoder.c +43 -0
- data/ext/oj/err.c +28 -28
- data/ext/oj/err.h +39 -42
- data/ext/oj/extconf.rb +28 -7
- data/ext/oj/fast.c +1052 -1113
- data/ext/oj/intern.c +313 -0
- data/ext/oj/intern.h +22 -0
- data/ext/oj/mem.c +318 -0
- data/ext/oj/mem.h +53 -0
- data/ext/oj/mimic_json.c +471 -430
- data/ext/oj/object.c +532 -580
- data/ext/oj/odd.c +156 -142
- data/ext/oj/odd.h +25 -26
- data/ext/oj/oj.c +1346 -961
- data/ext/oj/oj.h +307 -290
- data/ext/oj/parse.c +954 -858
- data/ext/oj/parse.h +74 -72
- data/ext/oj/parser.c +1600 -0
- data/ext/oj/parser.h +103 -0
- data/ext/oj/rails.c +819 -836
- data/ext/oj/rails.h +8 -11
- data/ext/oj/reader.c +136 -147
- data/ext/oj/reader.h +69 -83
- data/ext/oj/resolve.c +41 -63
- data/ext/oj/resolve.h +4 -6
- data/ext/oj/rxclass.c +69 -72
- data/ext/oj/rxclass.h +12 -13
- data/ext/oj/saj.c +440 -485
- data/ext/oj/saj2.c +584 -0
- data/ext/oj/saj2.h +23 -0
- data/ext/oj/scp.c +79 -118
- data/ext/oj/simd.h +10 -0
- data/ext/oj/sparse.c +739 -709
- data/ext/oj/stream_writer.c +141 -175
- data/ext/oj/strict.c +103 -128
- data/ext/oj/string_writer.c +244 -261
- data/ext/oj/trace.c +34 -41
- data/ext/oj/trace.h +42 -15
- data/ext/oj/usual.c +1218 -0
- data/ext/oj/usual.h +69 -0
- data/ext/oj/util.c +107 -107
- data/ext/oj/util.h +4 -3
- data/ext/oj/val_stack.c +61 -78
- data/ext/oj/val_stack.h +80 -114
- data/ext/oj/validate.c +46 -0
- data/ext/oj/wab.c +316 -361
- data/lib/oj/active_support_helper.rb +1 -3
- data/lib/oj/bag.rb +8 -1
- data/lib/oj/easy_hash.rb +9 -9
- data/lib/oj/error.rb +1 -2
- data/lib/oj/json.rb +162 -150
- data/lib/oj/mimic.rb +54 -20
- data/lib/oj/saj.rb +20 -6
- data/lib/oj/schandler.rb +5 -4
- data/lib/oj/state.rb +12 -8
- data/lib/oj/version.rb +1 -2
- data/lib/oj.rb +2 -8
- data/pages/Compatibility.md +1 -1
- data/pages/Encoding.md +1 -1
- data/pages/InstallOptions.md +20 -0
- data/pages/JsonGem.md +15 -0
- data/pages/Modes.md +9 -3
- data/pages/Options.md +62 -12
- data/pages/Parser.md +309 -0
- data/pages/Rails.md +73 -22
- metadata +68 -192
- data/ext/oj/hash.c +0 -163
- data/ext/oj/hash.h +0 -46
- data/ext/oj/hash_test.c +0 -512
- data/test/_test_active.rb +0 -76
- data/test/_test_active_mimic.rb +0 -96
- data/test/_test_mimic_rails.rb +0 -126
- data/test/activerecord/result_test.rb +0 -27
- data/test/activesupport4/decoding_test.rb +0 -108
- data/test/activesupport4/encoding_test.rb +0 -531
- data/test/activesupport4/test_helper.rb +0 -41
- data/test/activesupport5/decoding_test.rb +0 -125
- data/test/activesupport5/encoding_test.rb +0 -485
- data/test/activesupport5/encoding_test_cases.rb +0 -90
- data/test/activesupport5/test_helper.rb +0 -50
- data/test/activesupport5/time_zone_test_helpers.rb +0 -24
- data/test/bar.rb +0 -25
- data/test/files.rb +0 -29
- data/test/foo.rb +0 -21
- data/test/helper.rb +0 -26
- data/test/isolated/shared.rb +0 -308
- data/test/isolated/test_mimic_after.rb +0 -13
- data/test/isolated/test_mimic_alone.rb +0 -12
- data/test/isolated/test_mimic_as_json.rb +0 -45
- data/test/isolated/test_mimic_before.rb +0 -13
- data/test/isolated/test_mimic_define.rb +0 -28
- data/test/isolated/test_mimic_rails_after.rb +0 -22
- data/test/isolated/test_mimic_rails_before.rb +0 -21
- data/test/isolated/test_mimic_redefine.rb +0 -15
- data/test/json_gem/json_addition_test.rb +0 -216
- data/test/json_gem/json_common_interface_test.rb +0 -148
- data/test/json_gem/json_encoding_test.rb +0 -107
- data/test/json_gem/json_ext_parser_test.rb +0 -20
- data/test/json_gem/json_fixtures_test.rb +0 -35
- data/test/json_gem/json_generator_test.rb +0 -383
- data/test/json_gem/json_generic_object_test.rb +0 -90
- data/test/json_gem/json_parser_test.rb +0 -470
- data/test/json_gem/json_string_matching_test.rb +0 -42
- data/test/json_gem/test_helper.rb +0 -18
- data/test/perf.rb +0 -107
- data/test/perf_compat.rb +0 -130
- data/test/perf_fast.rb +0 -164
- data/test/perf_file.rb +0 -64
- data/test/perf_object.rb +0 -138
- data/test/perf_saj.rb +0 -109
- data/test/perf_scp.rb +0 -151
- data/test/perf_simple.rb +0 -287
- data/test/perf_strict.rb +0 -145
- data/test/perf_wab.rb +0 -131
- data/test/sample/change.rb +0 -14
- data/test/sample/dir.rb +0 -19
- data/test/sample/doc.rb +0 -36
- data/test/sample/file.rb +0 -48
- data/test/sample/group.rb +0 -16
- data/test/sample/hasprops.rb +0 -16
- data/test/sample/layer.rb +0 -12
- data/test/sample/line.rb +0 -20
- data/test/sample/oval.rb +0 -10
- data/test/sample/rect.rb +0 -10
- data/test/sample/shape.rb +0 -35
- data/test/sample/text.rb +0 -20
- data/test/sample.rb +0 -54
- data/test/sample_json.rb +0 -37
- data/test/test_compat.rb +0 -509
- data/test/test_custom.rb +0 -503
- data/test/test_debian.rb +0 -53
- data/test/test_fast.rb +0 -470
- data/test/test_file.rb +0 -239
- data/test/test_gc.rb +0 -49
- data/test/test_hash.rb +0 -29
- data/test/test_integer_range.rb +0 -73
- data/test/test_null.rb +0 -376
- data/test/test_object.rb +0 -1018
- data/test/test_saj.rb +0 -186
- data/test/test_scp.rb +0 -433
- data/test/test_strict.rb +0 -410
- data/test/test_various.rb +0 -741
- data/test/test_wab.rb +0 -307
- data/test/test_writer.rb +0 -380
- data/test/tests.rb +0 -24
- data/test/tests_mimic.rb +0 -14
- data/test/tests_mimic_addition.rb +0 -7
- data/test/zoo.rb +0 -13
data/ext/oj/code.c
CHANGED
@@ -1,235 +1,214 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
* All rights reserved.
|
4
|
-
*/
|
1
|
+
// Copyright (c) 2017 Peter Ohler. All rights reserved.
|
2
|
+
// Licensed under the MIT License. See LICENSE file in the project root for license details.
|
5
3
|
|
6
4
|
#include "code.h"
|
5
|
+
|
7
6
|
#include "dump.h"
|
8
7
|
|
9
|
-
inline static VALUE
|
10
|
-
|
11
|
-
|
12
|
-
ID ci = rb_intern(classname);
|
8
|
+
inline static VALUE resolve_classname(VALUE mod, const char *classname) {
|
9
|
+
VALUE clas = Qundef;
|
10
|
+
ID ci = rb_intern(classname);
|
13
11
|
|
14
12
|
if (rb_const_defined_at(mod, ci)) {
|
15
|
-
|
13
|
+
clas = rb_const_get_at(mod, ci);
|
16
14
|
}
|
17
15
|
return clas;
|
18
16
|
}
|
19
17
|
|
20
|
-
static VALUE
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
char
|
25
|
-
char
|
26
|
-
const char *n = name;
|
18
|
+
static VALUE path2class(const char *name) {
|
19
|
+
char class_name[1024];
|
20
|
+
VALUE clas;
|
21
|
+
char *end = class_name + sizeof(class_name) - 1;
|
22
|
+
char *s;
|
23
|
+
const char *n = name;
|
27
24
|
|
28
25
|
clas = rb_cObject;
|
29
26
|
for (s = class_name; '\0' != *n; n++) {
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
27
|
+
if (':' == *n) {
|
28
|
+
*s = '\0';
|
29
|
+
n++;
|
30
|
+
if (':' != *n) {
|
31
|
+
return Qundef;
|
32
|
+
}
|
33
|
+
if (Qundef == (clas = resolve_classname(clas, class_name))) {
|
34
|
+
return Qundef;
|
35
|
+
}
|
36
|
+
s = class_name;
|
37
|
+
} else if (end <= s) {
|
38
|
+
return Qundef;
|
39
|
+
} else {
|
40
|
+
*s++ = *n;
|
41
|
+
}
|
45
42
|
}
|
46
43
|
*s = '\0';
|
47
44
|
|
48
45
|
return resolve_classname(clas, class_name);
|
49
46
|
}
|
50
47
|
|
51
|
-
bool
|
52
|
-
|
53
|
-
|
54
|
-
Code c = codes;
|
48
|
+
bool oj_code_dump(Code codes, VALUE obj, int depth, Out out) {
|
49
|
+
VALUE clas = rb_obj_class(obj);
|
50
|
+
Code c = codes;
|
55
51
|
|
56
52
|
for (; NULL != c->name; c++) {
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
53
|
+
if (Qundef == c->clas) { // indicates not defined
|
54
|
+
continue;
|
55
|
+
}
|
56
|
+
if (Qnil == c->clas) {
|
57
|
+
c->clas = path2class(c->name);
|
58
|
+
}
|
59
|
+
if (clas == c->clas && c->active) {
|
60
|
+
c->encode(obj, depth, out);
|
61
|
+
return true;
|
62
|
+
}
|
67
63
|
}
|
68
64
|
return false;
|
69
65
|
}
|
70
66
|
|
71
67
|
VALUE
|
72
68
|
oj_code_load(Code codes, VALUE clas, VALUE args) {
|
73
|
-
Code
|
69
|
+
Code c = codes;
|
74
70
|
|
75
71
|
for (; NULL != c->name; c++) {
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
72
|
+
if (Qundef == c->clas) { // indicates not defined
|
73
|
+
continue;
|
74
|
+
}
|
75
|
+
if (Qnil == c->clas) {
|
76
|
+
c->clas = path2class(c->name);
|
77
|
+
}
|
78
|
+
if (clas == c->clas) {
|
79
|
+
if (NULL == c->decode) {
|
80
|
+
break;
|
81
|
+
}
|
82
|
+
return c->decode(clas, args);
|
83
|
+
}
|
88
84
|
}
|
89
85
|
return Qnil;
|
90
86
|
}
|
91
87
|
|
92
|
-
void
|
93
|
-
|
94
|
-
Code c = codes;
|
88
|
+
void oj_code_set_active(Code codes, VALUE clas, bool active) {
|
89
|
+
Code c = codes;
|
95
90
|
|
96
91
|
for (; NULL != c->name; c++) {
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
92
|
+
if (Qundef == c->clas) { // indicates not defined
|
93
|
+
continue;
|
94
|
+
}
|
95
|
+
if (Qnil == c->clas) {
|
96
|
+
c->clas = path2class(c->name);
|
97
|
+
}
|
98
|
+
if (clas == c->clas || Qnil == clas) {
|
99
|
+
c->active = active;
|
100
|
+
if (Qnil != clas) {
|
101
|
+
break;
|
102
|
+
}
|
103
|
+
}
|
109
104
|
}
|
110
105
|
}
|
111
106
|
|
112
|
-
bool
|
113
|
-
|
114
|
-
Code c = codes;
|
107
|
+
bool oj_code_has(Code codes, VALUE clas, bool encode) {
|
108
|
+
Code c = codes;
|
115
109
|
|
116
110
|
for (; NULL != c->name; c++) {
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
111
|
+
if (Qundef == c->clas) { // indicates not defined
|
112
|
+
continue;
|
113
|
+
}
|
114
|
+
if (Qnil == c->clas) {
|
115
|
+
c->clas = path2class(c->name);
|
116
|
+
}
|
117
|
+
if (clas == c->clas) {
|
118
|
+
if (encode) {
|
119
|
+
return c->active && NULL != c->encode;
|
120
|
+
} else {
|
121
|
+
return c->active && NULL != c->decode;
|
122
|
+
}
|
123
|
+
}
|
130
124
|
}
|
131
125
|
return false;
|
132
126
|
}
|
133
127
|
|
134
|
-
void
|
135
|
-
|
136
|
-
int
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
size_t
|
141
|
-
|
142
|
-
|
143
|
-
|
128
|
+
void oj_code_attrs(VALUE obj, Attr attrs, int depth, Out out, bool with_class) {
|
129
|
+
int d2 = depth + 1;
|
130
|
+
int d3 = d2 + 1;
|
131
|
+
size_t sep_len = out->opts->dump_opts.before_size + out->opts->dump_opts.after_size + 2;
|
132
|
+
const char *classname = rb_obj_classname(obj);
|
133
|
+
size_t len = strlen(classname);
|
134
|
+
size_t size = d2 * out->indent + 10 + len + out->opts->create_id_len + sep_len;
|
135
|
+
bool no_comma = true;
|
136
|
+
|
144
137
|
assure_size(out, size);
|
145
138
|
*out->cur++ = '{';
|
146
139
|
|
147
140
|
if (with_class) {
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
memcpy(out->cur, classname, len);
|
164
|
-
out->cur += len;
|
165
|
-
*out->cur++ = '"';
|
166
|
-
no_comma = false;
|
141
|
+
fill_indent(out, d2);
|
142
|
+
*out->cur++ = '"';
|
143
|
+
APPEND_CHARS(out->cur, out->opts->create_id, out->opts->create_id_len);
|
144
|
+
*out->cur++ = '"';
|
145
|
+
if (0 < out->opts->dump_opts.before_size) {
|
146
|
+
APPEND_CHARS(out->cur, out->opts->dump_opts.before_sep, out->opts->dump_opts.before_size);
|
147
|
+
}
|
148
|
+
*out->cur++ = ':';
|
149
|
+
if (0 < out->opts->dump_opts.after_size) {
|
150
|
+
APPEND_CHARS(out->cur, out->opts->dump_opts.after_sep, out->opts->dump_opts.after_size);
|
151
|
+
}
|
152
|
+
*out->cur++ = '"';
|
153
|
+
APPEND_CHARS(out->cur, classname, len);
|
154
|
+
*out->cur++ = '"';
|
155
|
+
no_comma = false;
|
167
156
|
}
|
168
157
|
size = d3 * out->indent + 2;
|
169
158
|
for (; NULL != attrs->name; attrs++) {
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
*b = '0';
|
221
|
-
}
|
222
|
-
assure_size(out, (sizeof(buf) - (b - buf)));
|
223
|
-
for (; '\0' != *b; b++) {
|
224
|
-
*out->cur++ = *b;
|
225
|
-
}
|
226
|
-
}
|
227
|
-
} else {
|
228
|
-
oj_dump_compat_val(attrs->value, d3, out, true);
|
229
|
-
}
|
159
|
+
assure_size(out, size + attrs->len + sep_len + 2);
|
160
|
+
if (no_comma) {
|
161
|
+
no_comma = false;
|
162
|
+
} else {
|
163
|
+
*out->cur++ = ',';
|
164
|
+
}
|
165
|
+
fill_indent(out, d2);
|
166
|
+
*out->cur++ = '"';
|
167
|
+
APPEND_CHARS(out->cur, attrs->name, attrs->len);
|
168
|
+
*out->cur++ = '"';
|
169
|
+
if (0 < out->opts->dump_opts.before_size) {
|
170
|
+
APPEND_CHARS(out->cur, out->opts->dump_opts.before_sep, out->opts->dump_opts.before_size);
|
171
|
+
}
|
172
|
+
*out->cur++ = ':';
|
173
|
+
if (0 < out->opts->dump_opts.after_size) {
|
174
|
+
APPEND_CHARS(out->cur, out->opts->dump_opts.after_sep, out->opts->dump_opts.after_size);
|
175
|
+
}
|
176
|
+
if (Qundef == attrs->value) {
|
177
|
+
if (Qundef != attrs->time) {
|
178
|
+
switch (out->opts->time_format) {
|
179
|
+
case RubyTime: oj_dump_ruby_time(attrs->time, out); break;
|
180
|
+
case XmlTime: oj_dump_xml_time(attrs->time, out); break;
|
181
|
+
case UnixZTime: oj_dump_time(attrs->time, out, true); break;
|
182
|
+
case UnixTime:
|
183
|
+
default: oj_dump_time(attrs->time, out, false); break;
|
184
|
+
}
|
185
|
+
} else {
|
186
|
+
char buf[32];
|
187
|
+
char *b = buf + sizeof(buf) - 1;
|
188
|
+
bool neg = false;
|
189
|
+
long num = attrs->num;
|
190
|
+
size_t cnt = 0;
|
191
|
+
|
192
|
+
if (0 > num) {
|
193
|
+
neg = true;
|
194
|
+
num = -num;
|
195
|
+
}
|
196
|
+
*b-- = '\0';
|
197
|
+
if (0 < num) {
|
198
|
+
b = oj_longlong_to_string(num, neg, b);
|
199
|
+
} else {
|
200
|
+
*b = '0';
|
201
|
+
}
|
202
|
+
cnt = sizeof(buf) - (b - buf) - 1;
|
203
|
+
assure_size(out, cnt);
|
204
|
+
APPEND_CHARS(out->cur, b, cnt);
|
205
|
+
}
|
206
|
+
} else {
|
207
|
+
oj_dump_compat_val(attrs->value, d3, out, true);
|
208
|
+
}
|
230
209
|
}
|
231
210
|
assure_size(out, depth * out->indent + 2);
|
232
211
|
fill_indent(out, depth);
|
233
212
|
*out->cur++ = '}';
|
234
|
-
*out->cur
|
213
|
+
*out->cur = '\0';
|
235
214
|
}
|
data/ext/oj/code.h
CHANGED
@@ -1,7 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
* All rights reserved.
|
4
|
-
*/
|
1
|
+
// Copyright (c) 2017 Peter Ohler. All rights reserved.
|
2
|
+
// Licensed under the MIT License. See LICENSE file in the project root for license details.
|
5
3
|
|
6
4
|
#ifndef OJ_CODE_H
|
7
5
|
#define OJ_CODE_H
|
@@ -10,33 +8,33 @@
|
|
10
8
|
|
11
9
|
#include "oj.h"
|
12
10
|
|
13
|
-
typedef void
|
14
|
-
typedef VALUE
|
11
|
+
typedef void (*EncodeFunc)(VALUE obj, int depth, Out out);
|
12
|
+
typedef VALUE (*DecodeFunc)(VALUE clas, VALUE args);
|
15
13
|
|
16
14
|
typedef struct _code {
|
17
|
-
const char
|
18
|
-
VALUE
|
19
|
-
EncodeFunc
|
20
|
-
DecodeFunc
|
21
|
-
bool
|
15
|
+
const char *name;
|
16
|
+
VALUE clas;
|
17
|
+
EncodeFunc encode;
|
18
|
+
DecodeFunc decode;
|
19
|
+
bool active; // For compat mode.
|
22
20
|
} *Code;
|
23
21
|
|
24
22
|
// Used by encode functions.
|
25
23
|
typedef struct _attr {
|
26
|
-
const char
|
27
|
-
int
|
28
|
-
VALUE
|
29
|
-
long
|
30
|
-
VALUE
|
24
|
+
const char *name;
|
25
|
+
int len;
|
26
|
+
VALUE value;
|
27
|
+
long num;
|
28
|
+
VALUE time;
|
31
29
|
} *Attr;
|
32
30
|
|
33
|
-
extern bool
|
34
|
-
extern VALUE
|
35
|
-
extern void
|
36
|
-
extern bool
|
31
|
+
extern bool oj_code_dump(Code codes, VALUE obj, int depth, Out out);
|
32
|
+
extern VALUE oj_code_load(Code codes, VALUE clas, VALUE args);
|
33
|
+
extern void oj_code_set_active(Code codes, VALUE clas, bool active);
|
34
|
+
extern bool oj_code_has(Code codes, VALUE clas, bool encode);
|
37
35
|
|
38
|
-
extern void
|
36
|
+
extern void oj_code_attrs(VALUE obj, Attr attrs, int depth, Out out, bool with_class);
|
39
37
|
|
40
|
-
extern struct _code
|
38
|
+
extern struct _code oj_compat_codes[];
|
41
39
|
|
42
40
|
#endif /* OJ_CODE_H */
|