json 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of json might be problematic. Click here for more details.

data/CHANGES CHANGED
@@ -1,3 +1,6 @@
1
+ 2007-03-24 (1.0.3)
2
+ * Improved performance of pure variant a bit.
3
+ * The ext variant of this release supports the mswin32 platform. Ugh!
1
4
  2007-03-24 (1.0.2)
2
5
  * Ext Parser didn't parse 0e0 correctly into 0.0: Fixed!
3
6
  2007-03-24 (1.0.1)
data/Rakefile CHANGED
@@ -1,10 +1,12 @@
1
1
  # vim: set et sw=2 ts=2:
2
+
2
3
  require 'rake/gempackagetask'
3
4
  require 'rake/clean'
4
5
 
5
6
  require 'rbconfig'
6
7
  include Config
7
8
 
9
+ ON_WINDOWS = RUBY_PLATFORM =~ /mswin32/i
8
10
  PKG_NAME = 'json'
9
11
  PKG_VERSION = File.read('VERSION').chomp
10
12
  PKG_FILES = FileList["**/*"].exclude(/CVS|pkg|coverage|Makefile/).exclude(/\.(so|bundle|o|#{CONFIG['DLEXT']})$/)
@@ -19,7 +21,7 @@ EXT_GENERATOR_SRC = "#{EXT_GENERATOR_DIR}/generator.c"
19
21
  RAGEL_CODEGEN = %w[rlcodegen rlgen-cd].find { |c| system(c, '-v') }
20
22
  RAGEL_PATH = "#{EXT_PARSER_DIR}/parser.rl"
21
23
  CLEAN.include 'doc', 'coverage', FileList['diagrams/*.*'],
22
- FileList["ext/**/*.{so,bundle,#{CONFIG['DLEXT']},o}"],
24
+ FileList["ext/**/*.{so,bundle,#{CONFIG['DLEXT']},o,obj,pdb,lib,manifest,exp,def}"],
23
25
  FileList["ext/**/Makefile"]
24
26
 
25
27
 
@@ -28,8 +30,7 @@ task :install_pure => :version do
28
30
  ruby 'install.rb'
29
31
  end
30
32
 
31
- desc "Installing library (extension)"
32
- task :install_ext => [ :compile, :install_pure ] do
33
+ task :install_ext_really do
33
34
  sitearchdir = CONFIG["sitearchdir"]
34
35
  cd 'ext' do
35
36
  for file in Dir["json/ext/*.#{CONFIG['DLEXT']}"]
@@ -40,6 +41,9 @@ task :install_ext => [ :compile, :install_pure ] do
40
41
  end
41
42
  end
42
43
 
44
+ desc "Installing library (extension)"
45
+ task :install_ext => [ :compile, :install_pure, :install_ext_really ]
46
+
43
47
  task :install => :install_ext
44
48
 
45
49
  desc "Compiling extension"
@@ -48,7 +52,12 @@ task :compile => [ EXT_PARSER_DL, EXT_GENERATOR_DL ]
48
52
  file EXT_PARSER_DL => EXT_PARSER_SRC do
49
53
  cd EXT_PARSER_DIR do
50
54
  ruby 'extconf.rb'
51
- sh 'make'
55
+ if ON_WINDOWS
56
+ sh 'nmake'
57
+ sh "mt -manifest parser.#{CONFIG['DLEXT']}.manifest -outputresource:parser.#{CONFIG['DLEXT']};2"
58
+ else
59
+ sh 'make'
60
+ end
52
61
  end
53
62
  cp "#{EXT_PARSER_DIR}/parser.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
54
63
  end
@@ -56,7 +65,12 @@ end
56
65
  file EXT_GENERATOR_DL => EXT_GENERATOR_SRC do
57
66
  cd EXT_GENERATOR_DIR do
58
67
  ruby 'extconf.rb'
59
- sh 'make'
68
+ if ON_WINDOWS
69
+ sh 'nmake'
70
+ sh "mt -manifest generator.#{CONFIG['DLEXT']}.manifest -outputresource:generator.#{CONFIG['DLEXT']};2"
71
+ else
72
+ sh 'make'
73
+ end
60
74
  end
61
75
  cp "#{EXT_GENERATOR_DIR}/generator.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
62
76
  end
@@ -220,6 +234,44 @@ Rake::GemPackageTask.new(spec_ext) do |pkg|
220
234
  pkg.package_files += PKG_FILES
221
235
  end
222
236
 
237
+ task :package_win => :compile do
238
+ mkdir_p 'pkg'
239
+ spec_win_ext = Gem::Specification.new do |s|
240
+ s.name = 'json'
241
+ s.platform = Gem::Platform::WIN32
242
+ s.version = PKG_VERSION
243
+ s.summary = "A JSON implementation as a Ruby extension"
244
+ s.description = ""
245
+
246
+ s.files = PKG_FILES.to_a <<
247
+ "#{EXT_ROOT_DIR}/parser.#{CONFIG['DLEXT']}" <<
248
+ "#{EXT_ROOT_DIR}/generator.#{CONFIG['DLEXT']}"
249
+
250
+ s.require_path = EXT_ROOT_DIR
251
+ s.require_paths << 'ext'
252
+ s.require_paths << 'lib'
253
+
254
+ s.bindir = "bin"
255
+ s.executables = ["edit_json.rb"]
256
+ s.default_executable = "edit_json.rb"
257
+
258
+ s.has_rdoc = true
259
+ s.rdoc_options <<
260
+ '--title' << 'JSON -- A JSON implemention' <<
261
+ '--main' << 'JSON' << '--line-numbers'
262
+ s.test_files << 'tests/runner.rb'
263
+
264
+ s.author = "Florian Frank"
265
+ s.email = "flori@ping.de"
266
+ s.homepage = "http://json.rubyforge.org"
267
+ s.rubyforge_project = "json"
268
+ end
269
+
270
+ gem_file = "json-#{spec_win_ext.version}-#{spec_win_ext.platform}.gem"
271
+ Gem::Builder.new(spec_win_ext).build
272
+ mv gem_file, 'pkg'
273
+ end
274
+
223
275
  task :mrproper => [ :ragel_clean, :clean ] do
224
276
  for dir in [ EXT_PARSER_DIR, EXT_GENERATOR_DIR ]
225
277
  cd(dir) { rm_f 'Makefile' }
@@ -243,6 +295,10 @@ EOT
243
295
  end
244
296
  end
245
297
 
246
- task :release => [ :version, :clean, :ragel_clean, :ragel, :package ]
298
+ if ON_WINDOWS
299
+ task :release => [ :version, :clean, :compile, :package_win ]
300
+ else
301
+ task :release => [ :version, :mrproper, :package ]
302
+ end
247
303
 
248
304
  task :default => [ :version, :compile ]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.2
1
+ 1.0.3
@@ -10,7 +10,7 @@ class BC_Parser < Bullshit::TimeCase
10
10
  duration 10
11
11
 
12
12
  def setup
13
- a = [ nil, false, true, "fÖßÄr", [ "n€st€d", true ], { "fooß" => "bär", "quux" => true } ]
13
+ a = [ nil, false, true, "fÖß\nÄr", [ "n€st€d", true ], { "fooß" => "bär", "qu\r\nux" => true } ]
14
14
  @big = a * 100
15
15
  @json = JSON.generate(@big)
16
16
  end
@@ -100,7 +100,7 @@ inline static unsigned char isLegalUTF8(const UTF8 *source, int length)
100
100
  return 1;
101
101
  }
102
102
 
103
- inline void JSON_convert_UTF8_to_JSON(VALUE buffer, VALUE string, ConversionFlags flags)
103
+ void JSON_convert_UTF8_to_JSON(VALUE buffer, VALUE string, ConversionFlags flags)
104
104
  {
105
105
  char buf[7];
106
106
  const UTF8* source = (UTF8 *) RSTRING(string)->ptr;
@@ -1349,10 +1349,10 @@ static VALUE cParser_initialize(VALUE self, VALUE source)
1349
1349
  */
1350
1350
  static VALUE cParser_parse(VALUE self)
1351
1351
  {
1352
- GET_STRUCT;
1353
1352
  char *p, *pe;
1354
1353
  int cs = EVIL;
1355
1354
  VALUE result = Qnil;
1355
+ GET_STRUCT;
1356
1356
 
1357
1357
 
1358
1358
  #line 1359 "parser.c"
@@ -444,10 +444,10 @@ static VALUE cParser_initialize(VALUE self, VALUE source)
444
444
  */
445
445
  static VALUE cParser_parse(VALUE self)
446
446
  {
447
- GET_STRUCT;
448
447
  char *p, *pe;
449
448
  int cs = EVIL;
450
449
  VALUE result = Qnil;
450
+ GET_STRUCT;
451
451
 
452
452
  %% write init;
453
453
  p = json->source;
@@ -59,7 +59,7 @@ static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080
59
59
  */
60
60
  static const UTF8 firstByteMark[7] = { 0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC };
61
61
 
62
- inline char *JSON_convert_UTF16_to_UTF8 (
62
+ char *JSON_convert_UTF16_to_UTF8 (
63
63
  VALUE buffer,
64
64
  char *source,
65
65
  char *sourceEnd,
@@ -77,22 +77,26 @@ module JSON
77
77
 
78
78
  private
79
79
 
80
+ # Unescape characters in strings.
81
+ UNESCAPE_MAP = {
82
+ ?" => '"',
83
+ ?\\ => '\\',
84
+ ?/ => '/',
85
+ ?b => "\b",
86
+ ?f => "\f",
87
+ ?n => "\n",
88
+ ?r => "\r",
89
+ ?t => "\t",
90
+ }
91
+
80
92
  def parse_string
81
93
  if scan(STRING)
82
94
  return '' if self[1].empty?
83
- self[1].gsub(%r((?:\\[\\bfnrt"/]|(?:\\u(?:[A-Fa-f\d]{4}))+))) do
84
- case $~[0]
85
- when '\\"' then '"'
86
- when '\\\\' then '\\'
87
- when '\\/' then '/'
88
- when '\\b' then "\b"
89
- when '\\f' then "\f"
90
- when '\\n' then "\n"
91
- when '\\r' then "\r"
92
- when '\\t' then "\t"
93
- else
95
+ self[1].gsub(%r((?:\\[\\bfnrt"/]|(?:\\u(?:[A-Fa-f\d]{4}))+))) do |c|
96
+ if u = UNESCAPE_MAP[c[1]]
97
+ u
98
+ else # \uXXXX
94
99
  bytes = ''
95
- c = $~[0]
96
100
  i = 0
97
101
  while c[6 * i] == ?\\ && c[6 * i + 1] == ?u
98
102
  bytes << c[6 * i + 2, 2].to_i(16) << c[6 * i + 4, 2].to_i(16)
@@ -1,6 +1,6 @@
1
1
  module JSON
2
2
  # JSON version
3
- VERSION = '1.0.2'
3
+ VERSION = '1.0.3'
4
4
  VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
@@ -41,7 +41,10 @@ class TC_JSONUnicode < Test::Unit::TestCase
41
41
  (0..0x7f).each do |i|
42
42
  json = '["\u%04x"]' % i
43
43
  assert_equal i, JSON.parse(json).first[0]
44
- if [?\b, ?\n, ?\r, ?\t, ?\f].include?(i)
44
+ if i == ?\b
45
+ generated = JSON.generate(["" << i])
46
+ assert '["\b"]' == generated || '["\10"]' == generated
47
+ elsif [?\n, ?\r, ?\t, ?\f].include?(i)
45
48
  assert_equal '[' << ('' << i).dump << ']', JSON.generate(["" << i])
46
49
  elsif i < 0x20
47
50
  assert_equal json, JSON.generate(["" << i])
@@ -1,7 +1,5 @@
1
1
  $KCODE='UTF8'
2
2
  require 'json'
3
- require 'irb'
4
- require 'pp'
5
3
 
6
4
  class Fuzzer
7
5
  def initialize(n, freqs = {})
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.2
3
3
  specification_version: 1
4
4
  name: json
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.0.2
7
- date: 2007-04-02 00:00:00 +02:00
6
+ version: 1.0.3
7
+ date: 2007-04-26 00:00:00 +02:00
8
8
  summary: A JSON implementation as a Ruby extension
9
9
  require_paths:
10
10
  - ext/json/ext