[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]