ruby-changes:23299
From: naruse <ko1@a...>
Date: Mon, 16 Apr 2012 20:15:43 +0900 (JST)
Subject: [ruby-changes:23299] naruse:r35350 (ruby_1_9_3): Merge eacb6564c05ff7428bcbb3c34f72655b1b5d6ca3.
naruse 2012-04-16 20:15:31 +0900 (Mon, 16 Apr 2012) New Revision: 35350 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=35350 Log: Merge eacb6564c05ff7428bcbb3c34f72655b1b5d6ca3. [Backport #6304] Modified files: branches/ruby_1_9_3/ext/json/parser/parser.c branches/ruby_1_9_3/ext/json/parser/parser.rl Index: ruby_1_9_3/ext/json/parser/parser.rl =================================================================== --- ruby_1_9_3/ext/json/parser/parser.rl (revision 35349) +++ ruby_1_9_3/ext/json/parser/parser.rl (revision 35350) @@ -78,7 +78,7 @@ static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions, i_chr, i_max_nesting, i_allow_nan, i_symbolize_names, i_quirks_mode, i_object_class, i_array_class, i_key_p, i_deep_const_get, i_match, - i_match_string, i_aset, i_leftshift; + i_match_string, i_aset, i_aref, i_leftshift; %%{ machine JSON_common; @@ -166,7 +166,12 @@ if (cs >= JSON_object_first_final) { if (json->create_additions) { - VALUE klassname = rb_hash_aref(*result, json->create_id); + VALUE klassname; + if (NIL_P(json->object_class)) { + klassname = rb_hash_aref(*result, json->create_id); + } else { + klassname = rb_funcall(*result, i_aref, 1, json->create_id); + } if (!NIL_P(klassname)) { VALUE klass = rb_funcall(mJSON, i_deep_const_get, 1, klassname); if (RTEST(rb_funcall(klass, i_json_creatable_p, 0))) { @@ -886,6 +891,7 @@ i_key_p = rb_intern("key?"); i_deep_const_get = rb_intern("deep_const_get"); i_aset = rb_intern("[]="); + i_aref = rb_intern("[]"); i_leftshift = rb_intern("<<"); #ifdef HAVE_RUBY_ENCODING_H CEncoding_UTF_8 = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-8")); Index: ruby_1_9_3/ext/json/parser/parser.c =================================================================== --- ruby_1_9_3/ext/json/parser/parser.c (revision 35349) +++ ruby_1_9_3/ext/json/parser/parser.c (revision 35350) @@ -80,7 +80,7 @@ static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions, i_chr, i_max_nesting, i_allow_nan, i_symbolize_names, i_quirks_mode, i_object_class, i_array_class, i_key_p, i_deep_const_get, i_match, - i_match_string, i_aset, i_leftshift; + i_match_string, i_aset, i_aref, i_leftshift; #line 109 "parser.rl" @@ -444,7 +444,12 @@ if (cs >= JSON_object_first_final) { if (json->create_additions) { - VALUE klassname = rb_hash_aref(*result, json->create_id); + VALUE klassname; + if (NIL_P(json->object_class)) { + klassname = rb_hash_aref(*result, json->create_id); + } else { + klassname = rb_funcall(*result, i_aref, 1, json->create_id); + } if (!NIL_P(klassname)) { VALUE klass = rb_funcall(mJSON, i_deep_const_get, 1, klassname); if (RTEST(rb_funcall(klass, i_json_creatable_p, 0))) { @@ -2166,6 +2171,7 @@ i_key_p = rb_intern("key?"); i_deep_const_get = rb_intern("deep_const_get"); i_aset = rb_intern("[]="); + i_aref = rb_intern("[]"); i_leftshift = rb_intern("<<"); #ifdef HAVE_RUBY_ENCODING_H CEncoding_UTF_8 = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-8")); -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/