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

ruby-changes:25475

From: nobu <ko1@a...>
Date: Wed, 7 Nov 2012 09:17:23 +0900 (JST)
Subject: [ruby-changes:25475] nobu:r37532 (trunk): object.c: inadvertent symbol

nobu	2012-11-07 09:16:03 +0900 (Wed, 07 Nov 2012)

  New Revision: 37532

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=37532

  Log:
    object.c: inadvertent symbol
    
    * object.c (rb_mod_const_get): avoid inadvertent symbol creation.

  Modified files:
    trunk/ChangeLog
    trunk/object.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 37531)
+++ ChangeLog	(revision 37532)
@@ -1,3 +1,7 @@
+Wed Nov  7 09:15:58 2012  Nobuyoshi Nakada  <nobu@r...>
+
+	* object.c (rb_mod_const_get): avoid inadvertent symbol creation.
+
 Wed Nov  7 07:52:50 2012  Nobuyoshi Nakada  <nobu@r...>
 
 	* enum.c (rb_enum_cycle_size): prefix with rb.
Index: object.c
===================================================================
--- object.c	(revision 37531)
+++ object.c	(revision 37532)
@@ -1947,13 +1947,21 @@
     }
 
     while (*p) {
+	VALUE part;
+
 	while (*p && *p != ':') p++;
 
 	if (pbeg == p) {
 	    rb_raise(rb_eNameError, "wrong constant name %s", path);
 	}
 
-	id = rb_intern3(pbeg, p-pbeg, enc);
+	id = rb_check_id_cstr(pbeg, p-pbeg, enc);
+	if (id) {
+	    part = ID2SYM(id);
+	}
+	else {
+	    part = rb_str_subseq(name, pbeg-path, p-pbeg);
+	}
 	if (p[0] == ':') {
 	    if (p[1] != ':') {
 		rb_raise(rb_eNameError, "wrong constant name %s", path);
@@ -1966,7 +1974,7 @@
 	    rb_raise(rb_eTypeError, "%s does not refer to class/module", path);
 	}
 
-        mod = rb_mod_single_const_get(mod, ID2SYM(id), recur);
+        mod = rb_mod_single_const_get(mod, part, recur);
     }
 
     return mod;

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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