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/parse.h
CHANGED
@@ -1,7 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
* All rights reserved.
|
4
|
-
*/
|
1
|
+
// Copyright (c) 2011 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_PARSE_H
|
7
5
|
#define OJ_PARSE_H
|
@@ -10,100 +8,104 @@
|
|
10
8
|
#include <stdio.h>
|
11
9
|
#include <string.h>
|
12
10
|
|
13
|
-
#include "ruby.h"
|
14
|
-
#include "oj.h"
|
15
|
-
#include "val_stack.h"
|
16
11
|
#include "circarray.h"
|
12
|
+
#include "oj.h"
|
17
13
|
#include "reader.h"
|
14
|
+
#include "ruby.h"
|
18
15
|
#include "rxclass.h"
|
16
|
+
#include "val_stack.h"
|
19
17
|
|
20
18
|
struct _rxClass;
|
19
|
+
struct _parseInfo;
|
21
20
|
|
22
21
|
typedef struct _numInfo {
|
23
|
-
int64_t
|
24
|
-
int64_t
|
25
|
-
int64_t
|
26
|
-
int64_t
|
27
|
-
const char
|
28
|
-
size_t
|
29
|
-
long
|
30
|
-
|
31
|
-
int
|
32
|
-
int
|
33
|
-
int
|
34
|
-
int
|
35
|
-
int
|
22
|
+
int64_t i;
|
23
|
+
int64_t num;
|
24
|
+
int64_t div;
|
25
|
+
int64_t di;
|
26
|
+
const char *str;
|
27
|
+
size_t len;
|
28
|
+
long exp;
|
29
|
+
struct _parseInfo *pi;
|
30
|
+
int big;
|
31
|
+
int infinity;
|
32
|
+
int nan;
|
33
|
+
int neg;
|
34
|
+
int has_exp;
|
35
|
+
int no_big;
|
36
|
+
int bigdec_load;
|
36
37
|
} *NumInfo;
|
37
38
|
|
38
39
|
typedef struct _parseInfo {
|
39
40
|
// used for the string parser
|
40
|
-
const char
|
41
|
-
const char
|
42
|
-
const char
|
41
|
+
const char *json;
|
42
|
+
const char *cur;
|
43
|
+
const char *end;
|
43
44
|
// used for the stream parser
|
44
|
-
struct _reader
|
45
|
-
|
46
|
-
struct _err
|
47
|
-
struct _options
|
48
|
-
VALUE
|
49
|
-
struct _valStack
|
50
|
-
CircArray
|
51
|
-
struct _rxClass
|
52
|
-
int
|
53
|
-
int
|
54
|
-
VALUE
|
55
|
-
VALUE
|
56
|
-
void
|
57
|
-
VALUE
|
58
|
-
void
|
59
|
-
void
|
60
|
-
void
|
61
|
-
|
62
|
-
VALUE
|
63
|
-
void
|
64
|
-
void
|
65
|
-
void
|
66
|
-
void
|
67
|
-
|
68
|
-
void
|
69
|
-
void
|
70
|
-
void
|
71
|
-
VALUE
|
72
|
-
bool
|
45
|
+
struct _reader rd;
|
46
|
+
|
47
|
+
struct _err err;
|
48
|
+
struct _options options;
|
49
|
+
VALUE handler;
|
50
|
+
struct _valStack stack;
|
51
|
+
CircArray circ_array;
|
52
|
+
struct _rxClass str_rx;
|
53
|
+
int expect_value;
|
54
|
+
int max_depth; // just for the json gem
|
55
|
+
VALUE proc;
|
56
|
+
VALUE (*start_hash)(struct _parseInfo *pi);
|
57
|
+
void (*end_hash)(struct _parseInfo *pi);
|
58
|
+
VALUE (*hash_key)(struct _parseInfo *pi, const char *key, size_t klen);
|
59
|
+
void (*hash_set_cstr)(struct _parseInfo *pi, Val kval, const char *str, size_t len, const char *orig);
|
60
|
+
void (*hash_set_num)(struct _parseInfo *pi, Val kval, NumInfo ni);
|
61
|
+
void (*hash_set_value)(struct _parseInfo *pi, Val kval, VALUE value);
|
62
|
+
|
63
|
+
VALUE (*start_array)(struct _parseInfo *pi);
|
64
|
+
void (*end_array)(struct _parseInfo *pi);
|
65
|
+
void (*array_append_cstr)(struct _parseInfo *pi, const char *str, size_t len, const char *orig);
|
66
|
+
void (*array_append_num)(struct _parseInfo *pi, NumInfo ni);
|
67
|
+
void (*array_append_value)(struct _parseInfo *pi, VALUE value);
|
68
|
+
|
69
|
+
void (*add_cstr)(struct _parseInfo *pi, const char *str, size_t len, const char *orig);
|
70
|
+
void (*add_num)(struct _parseInfo *pi, NumInfo ni);
|
71
|
+
void (*add_value)(struct _parseInfo *pi, VALUE val);
|
72
|
+
VALUE err_class;
|
73
|
+
bool has_callbacks;
|
73
74
|
} *ParseInfo;
|
74
75
|
|
75
|
-
extern void
|
76
|
-
extern void
|
77
|
-
extern VALUE
|
78
|
-
extern VALUE
|
76
|
+
extern void oj_parse2(ParseInfo pi);
|
77
|
+
extern void oj_set_error_at(ParseInfo pi, VALUE err_clas, const char *file, int line, const char *format, ...);
|
78
|
+
extern VALUE oj_pi_parse(int argc, VALUE *argv, ParseInfo pi, char *json, size_t len, int yieldOk);
|
79
|
+
extern VALUE oj_num_as_value(NumInfo ni);
|
79
80
|
|
80
|
-
extern void
|
81
|
-
extern void
|
82
|
-
extern void
|
83
|
-
extern void
|
81
|
+
extern void oj_set_strict_callbacks(ParseInfo pi);
|
82
|
+
extern void oj_set_object_callbacks(ParseInfo pi);
|
83
|
+
extern void oj_set_compat_callbacks(ParseInfo pi);
|
84
|
+
extern void oj_set_custom_callbacks(ParseInfo pi);
|
85
|
+
extern void oj_set_wab_callbacks(ParseInfo pi);
|
84
86
|
|
85
|
-
extern void
|
86
|
-
extern VALUE
|
87
|
+
extern void oj_sparse2(ParseInfo pi);
|
88
|
+
extern VALUE oj_pi_sparse(int argc, VALUE *argv, ParseInfo pi, int fd);
|
87
89
|
|
88
|
-
|
89
|
-
|
90
|
+
extern VALUE oj_cstr_to_value(const char *str, size_t len, size_t cache_str);
|
91
|
+
extern VALUE oj_calc_hash_key(ParseInfo pi, Val parent);
|
92
|
+
|
93
|
+
static inline void parse_info_init(ParseInfo pi) {
|
90
94
|
memset(pi, 0, sizeof(struct _parseInfo));
|
91
95
|
}
|
92
96
|
|
93
|
-
|
94
|
-
|
97
|
+
extern void oj_scanner_init(void);
|
98
|
+
|
99
|
+
static inline bool empty_ok(Options options) {
|
95
100
|
switch (options->mode) {
|
96
101
|
case ObjectMode:
|
97
|
-
case WabMode:
|
98
|
-
return true;
|
102
|
+
case WabMode: return true;
|
99
103
|
case CompatMode:
|
100
|
-
case RailsMode:
|
101
|
-
return false;
|
104
|
+
case RailsMode: return false;
|
102
105
|
case StrictMode:
|
103
106
|
case NullMode:
|
104
107
|
case CustomMode:
|
105
|
-
default:
|
106
|
-
break;
|
108
|
+
default: break;
|
107
109
|
}
|
108
110
|
return Yes == options->empty_string;
|
109
111
|
}
|