json 1.8.0 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. checksums.yaml +5 -5
  2. data/{CHANGES → CHANGES.md} +251 -87
  3. data/{COPYING-json-jruby → LICENSE} +5 -6
  4. data/README.md +425 -0
  5. data/VERSION +1 -1
  6. data/ext/json/ext/fbuffer/fbuffer.h +10 -4
  7. data/ext/json/ext/generator/extconf.rb +0 -10
  8. data/ext/json/ext/generator/generator.c +308 -135
  9. data/ext/json/ext/generator/generator.h +35 -9
  10. data/ext/json/ext/parser/extconf.rb +25 -6
  11. data/ext/json/ext/parser/parser.c +3035 -1901
  12. data/ext/json/ext/parser/parser.h +29 -10
  13. data/ext/json/ext/parser/parser.rl +261 -211
  14. data/ext/json/extconf.rb +3 -0
  15. data/json.gemspec +57 -27
  16. data/lib/json/add/bigdecimal.rb +3 -2
  17. data/lib/json/add/complex.rb +9 -3
  18. data/lib/json/add/core.rb +1 -0
  19. data/lib/json/add/date.rb +1 -1
  20. data/lib/json/add/date_time.rb +1 -1
  21. data/lib/json/add/exception.rb +1 -1
  22. data/lib/json/add/ostruct.rb +3 -3
  23. data/lib/json/add/range.rb +1 -1
  24. data/lib/json/add/rational.rb +8 -3
  25. data/lib/json/add/regexp.rb +3 -3
  26. data/lib/json/add/set.rb +29 -0
  27. data/lib/json/add/struct.rb +1 -1
  28. data/lib/json/add/symbol.rb +1 -1
  29. data/lib/json/add/time.rb +2 -2
  30. data/lib/json/common.rb +383 -167
  31. data/lib/json/ext.rb +0 -6
  32. data/lib/json/generic_object.rb +5 -4
  33. data/lib/json/pure/generator.rb +83 -126
  34. data/lib/json/pure/parser.rb +63 -85
  35. data/lib/json/pure.rb +2 -8
  36. data/lib/json/version.rb +2 -1
  37. data/lib/json.rb +550 -29
  38. metadata +29 -136
  39. data/.gitignore +0 -12
  40. data/.travis.yml +0 -20
  41. data/COPYING +0 -58
  42. data/GPL +0 -340
  43. data/Gemfile +0 -11
  44. data/README-json-jruby.markdown +0 -33
  45. data/README.rdoc +0 -358
  46. data/Rakefile +0 -412
  47. data/TODO +0 -1
  48. data/data/example.json +0 -1
  49. data/data/index.html +0 -38
  50. data/data/prototype.js +0 -4184
  51. data/diagrams/.keep +0 -0
  52. data/install.rb +0 -23
  53. data/java/src/json/ext/ByteListTranscoder.java +0 -167
  54. data/java/src/json/ext/Generator.java +0 -444
  55. data/java/src/json/ext/GeneratorMethods.java +0 -232
  56. data/java/src/json/ext/GeneratorService.java +0 -43
  57. data/java/src/json/ext/GeneratorState.java +0 -543
  58. data/java/src/json/ext/OptionsReader.java +0 -114
  59. data/java/src/json/ext/Parser.java +0 -2644
  60. data/java/src/json/ext/Parser.rl +0 -968
  61. data/java/src/json/ext/ParserService.java +0 -35
  62. data/java/src/json/ext/RuntimeInfo.java +0 -121
  63. data/java/src/json/ext/StringDecoder.java +0 -167
  64. data/java/src/json/ext/StringEncoder.java +0 -106
  65. data/java/src/json/ext/Utils.java +0 -89
  66. data/json-java.gemspec +0 -23
  67. data/json_pure.gemspec +0 -39
  68. data/lib/json/ext/.keep +0 -0
  69. data/tests/fixtures/fail1.json +0 -1
  70. data/tests/fixtures/fail10.json +0 -1
  71. data/tests/fixtures/fail11.json +0 -1
  72. data/tests/fixtures/fail12.json +0 -1
  73. data/tests/fixtures/fail13.json +0 -1
  74. data/tests/fixtures/fail14.json +0 -1
  75. data/tests/fixtures/fail18.json +0 -1
  76. data/tests/fixtures/fail19.json +0 -1
  77. data/tests/fixtures/fail2.json +0 -1
  78. data/tests/fixtures/fail20.json +0 -1
  79. data/tests/fixtures/fail21.json +0 -1
  80. data/tests/fixtures/fail22.json +0 -1
  81. data/tests/fixtures/fail23.json +0 -1
  82. data/tests/fixtures/fail24.json +0 -1
  83. data/tests/fixtures/fail25.json +0 -1
  84. data/tests/fixtures/fail27.json +0 -2
  85. data/tests/fixtures/fail28.json +0 -2
  86. data/tests/fixtures/fail3.json +0 -1
  87. data/tests/fixtures/fail4.json +0 -1
  88. data/tests/fixtures/fail5.json +0 -1
  89. data/tests/fixtures/fail6.json +0 -1
  90. data/tests/fixtures/fail7.json +0 -1
  91. data/tests/fixtures/fail8.json +0 -1
  92. data/tests/fixtures/fail9.json +0 -1
  93. data/tests/fixtures/pass1.json +0 -56
  94. data/tests/fixtures/pass15.json +0 -1
  95. data/tests/fixtures/pass16.json +0 -1
  96. data/tests/fixtures/pass17.json +0 -1
  97. data/tests/fixtures/pass2.json +0 -1
  98. data/tests/fixtures/pass26.json +0 -1
  99. data/tests/fixtures/pass3.json +0 -6
  100. data/tests/setup_variant.rb +0 -11
  101. data/tests/test_json.rb +0 -545
  102. data/tests/test_json_addition.rb +0 -196
  103. data/tests/test_json_encoding.rb +0 -65
  104. data/tests/test_json_fixtures.rb +0 -35
  105. data/tests/test_json_generate.rb +0 -322
  106. data/tests/test_json_generic_object.rb +0 -75
  107. data/tests/test_json_string_matching.rb +0 -39
  108. data/tests/test_json_unicode.rb +0 -72
  109. data/tools/fuzz.rb +0 -139
  110. data/tools/server.rb +0 -62
@@ -1,7 +1,6 @@
1
1
  #ifndef _GENERATOR_H_
2
2
  #define _GENERATOR_H_
3
3
 
4
- #include <string.h>
5
4
  #include <math.h>
6
5
  #include <ctype.h>
7
6
 
@@ -23,7 +22,7 @@
23
22
 
24
23
  #define option_given_p(opts, key) RTEST(rb_funcall(opts, i_key_p, 1, key))
25
24
 
26
- /* unicode defintions */
25
+ /* unicode definitions */
27
26
 
28
27
  #define UNI_STRICT_CONVERSION 1
29
28
 
@@ -50,8 +49,8 @@ static const UTF32 halfMask = 0x3FFUL;
50
49
  static unsigned char isLegalUTF8(const UTF8 *source, unsigned long length);
51
50
  static void unicode_escape(char *buf, UTF16 character);
52
51
  static void unicode_escape_to_buffer(FBuffer *buffer, char buf[6], UTF16 character);
53
- static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string);
54
- static void convert_UTF8_to_JSON(FBuffer *buffer, VALUE string);
52
+ static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string, char escape_slash);
53
+ static void convert_UTF8_to_JSON(FBuffer *buffer, VALUE string, char escape_slash);
55
54
  static char *fstrndup(const char *ptr, unsigned long len);
56
55
 
57
56
  /* ruby api and some helpers */
@@ -73,14 +72,17 @@ typedef struct JSON_Generator_StateStruct {
73
72
  long max_nesting;
74
73
  char allow_nan;
75
74
  char ascii_only;
76
- char quirks_mode;
75
+ char escape_slash;
77
76
  long depth;
78
77
  long buffer_initial_length;
79
78
  } JSON_Generator_State;
80
79
 
80
+ #define GET_STATE_TO(self, state) \
81
+ TypedData_Get_Struct(self, JSON_Generator_State, &JSON_Generator_State_type, state)
82
+
81
83
  #define GET_STATE(self) \
82
84
  JSON_Generator_State *state; \
83
- Data_Get_Struct(self, JSON_Generator_State, state)
85
+ GET_STATE_TO(self, state)
84
86
 
85
87
  #define GENERATE_JSON(type) \
86
88
  FBuffer *buffer; \
@@ -89,15 +91,19 @@ typedef struct JSON_Generator_StateStruct {
89
91
  \
90
92
  rb_scan_args(argc, argv, "01", &Vstate); \
91
93
  Vstate = cState_from_state_s(cState, Vstate); \
92
- Data_Get_Struct(Vstate, JSON_Generator_State, state); \
94
+ TypedData_Get_Struct(Vstate, JSON_Generator_State, &JSON_Generator_State_type, state); \
93
95
  buffer = cState_prepare_buffer(Vstate); \
94
96
  generate_json_##type(buffer, Vstate, state, self); \
95
97
  return fbuffer_to_s(buffer)
96
98
 
97
99
  static VALUE mHash_to_json(int argc, VALUE *argv, VALUE self);
98
100
  static VALUE mArray_to_json(int argc, VALUE *argv, VALUE self);
101
+ #ifdef RUBY_INTEGER_UNIFICATION
102
+ static VALUE mInteger_to_json(int argc, VALUE *argv, VALUE self);
103
+ #else
99
104
  static VALUE mFixnum_to_json(int argc, VALUE *argv, VALUE self);
100
105
  static VALUE mBignum_to_json(int argc, VALUE *argv, VALUE self);
106
+ #endif
101
107
  static VALUE mFloat_to_json(int argc, VALUE *argv, VALUE self);
102
108
  static VALUE mString_included_s(VALUE self, VALUE modul);
103
109
  static VALUE mString_to_json(int argc, VALUE *argv, VALUE self);
@@ -108,8 +114,7 @@ static VALUE mTrueClass_to_json(int argc, VALUE *argv, VALUE self);
108
114
  static VALUE mFalseClass_to_json(int argc, VALUE *argv, VALUE self);
109
115
  static VALUE mNilClass_to_json(int argc, VALUE *argv, VALUE self);
110
116
  static VALUE mObject_to_json(int argc, VALUE *argv, VALUE self);
111
- static void State_free(JSON_Generator_State *state);
112
- static JSON_Generator_State *State_allocate();
117
+ static void State_free(void *state);
113
118
  static VALUE cState_s_allocate(VALUE klass);
114
119
  static VALUE cState_configure(VALUE self, VALUE opts);
115
120
  static VALUE cState_to_h(VALUE self);
@@ -120,6 +125,9 @@ static void generate_json_string(FBuffer *buffer, VALUE Vstate, JSON_Generator_S
120
125
  static void generate_json_null(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
121
126
  static void generate_json_false(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
122
127
  static void generate_json_true(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
128
+ #ifdef RUBY_INTEGER_UNIFICATION
129
+ static void generate_json_integer(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
130
+ #endif
123
131
  static void generate_json_fixnum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
124
132
  static void generate_json_bignum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
125
133
  static void generate_json_float(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
@@ -143,6 +151,24 @@ static VALUE cState_allow_nan_p(VALUE self);
143
151
  static VALUE cState_ascii_only_p(VALUE self);
144
152
  static VALUE cState_depth(VALUE self);
145
153
  static VALUE cState_depth_set(VALUE self, VALUE depth);
154
+ static VALUE cState_escape_slash(VALUE self);
155
+ static VALUE cState_escape_slash_set(VALUE self, VALUE depth);
146
156
  static FBuffer *cState_prepare_buffer(VALUE self);
157
+ #ifndef ZALLOC
158
+ #define ZALLOC(type) ((type *)ruby_zalloc(sizeof(type)))
159
+ static inline void *ruby_zalloc(size_t n)
160
+ {
161
+ void *p = ruby_xmalloc(n);
162
+ memset(p, 0, n);
163
+ return p;
164
+ }
165
+ #endif
166
+ #ifdef TypedData_Make_Struct
167
+ static const rb_data_type_t JSON_Generator_State_type;
168
+ #define NEW_TYPEDDATA_WRAPPER 1
169
+ #else
170
+ #define TypedData_Make_Struct(klass, type, ignore, json) Data_Make_Struct(klass, type, NULL, State_free, json)
171
+ #define TypedData_Get_Struct(self, JSON_Generator_State, ignore, json) Data_Get_Struct(self, JSON_Generator_State, json)
172
+ #endif
147
173
 
148
174
  #endif
@@ -1,13 +1,32 @@
1
+ # frozen_string_literal: false
1
2
  require 'mkmf'
2
3
 
3
- unless $CFLAGS.gsub!(/ -O[\dsz]?/, ' -O3')
4
- $CFLAGS << ' -O3'
4
+ have_func("rb_enc_raise", "ruby.h")
5
+ have_func("rb_enc_interned_str", "ruby.h")
6
+
7
+ # checking if String#-@ (str_uminus) dedupes... '
8
+ begin
9
+ a = -(%w(t e s t).join)
10
+ b = -(%w(t e s t).join)
11
+ if a.equal?(b)
12
+ $CFLAGS << ' -DSTR_UMINUS_DEDUPE=1 '
13
+ else
14
+ $CFLAGS << ' -DSTR_UMINUS_DEDUPE=0 '
15
+ end
16
+ rescue NoMethodError
17
+ $CFLAGS << ' -DSTR_UMINUS_DEDUPE=0 '
5
18
  end
6
- if CONFIG['CC'] =~ /gcc/
7
- $CFLAGS << ' -Wall'
8
- if $DEBUG && !$CFLAGS.gsub!(/ -O[\dsz]?/, ' -O0 -ggdb')
9
- $CFLAGS << ' -O0 -ggdb'
19
+
20
+ # checking if String#-@ (str_uminus) directly interns frozen strings... '
21
+ begin
22
+ s = rand.to_s.freeze
23
+ if (-s).equal?(s) && (-s.dup).equal?(s)
24
+ $CFLAGS << ' -DSTR_UMINUS_DEDUPE_FROZEN=1 '
25
+ else
26
+ $CFLAGS << ' -DSTR_UMINUS_DEDUPE_FROZEN=0 '
10
27
  end
28
+ rescue NoMethodError
29
+ $CFLAGS << ' -DSTR_UMINUS_DEDUPE_FROZEN=0 '
11
30
  end
12
31
 
13
32
  create_makefile 'json/ext/parser'