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/