tcltklib.c: rb_path2class

* ext/tk/tcltklib.c (ip_ruby_cmd_receiver_const_get): simply use
  rb_path2class() to get a class/module from its name.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49029 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2014-12-26 06:28:29 +00:00
parent 5fd0076871
commit d7d1e344f5
2 changed files with 6 additions and 54 deletions

View File

@ -1,3 +1,8 @@
Fri Dec 26 15:28:27 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
* ext/tk/tcltklib.c (ip_ruby_cmd_receiver_const_get): simply use
rb_path2class() to get a class/module from its name.
Fri Dec 26 15:20:54 2014 Nobuyoshi Nakada <nobu@ruby-lang.org> Fri Dec 26 15:20:54 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
* marshal.c (w_long): append at once by w_nbyte() instead of * marshal.c (w_long): append at once by w_nbyte() instead of

View File

@ -3489,58 +3489,11 @@ ip_ruby_cmd_core(arg)
return ret; return ret;
} }
#define SUPPORT_NESTED_CONST_AS_IP_RUBY_CMD_RECEIVER 1
static VALUE static VALUE
ip_ruby_cmd_receiver_const_get(name) ip_ruby_cmd_receiver_const_get(name)
char *name; char *name;
{ {
volatile VALUE klass = rb_cObject; return rb_path2class(name);
#if 0
char *head, *tail;
#endif
int state;
#if SUPPORT_NESTED_CONST_AS_IP_RUBY_CMD_RECEIVER
klass = rb_eval_string_protect(name, &state);
if (state) {
return Qnil;
} else {
return klass;
}
#else
return rb_const_get(klass, rb_intern(name));
#endif
/* TODO!!!!!! */
/* support nest of classes/modules */
/* return rb_eval_string(name); */
/* return rb_eval_string_protect(name, &state); */
#if 0 /* doesn't work!! (fail to autoload?) */
/* duplicate */
head = name = strdup(name);
/* has '::' at head ? */
if (*head == ':') head += 2;
tail = head;
/* search */
while(*tail) {
if (*tail == ':') {
*tail = '\0';
klass = rb_const_get(klass, rb_intern(head));
tail += 2;
head = tail;
} else {
tail++;
}
}
free(name);
return rb_const_get(klass, rb_intern(head));
#endif
} }
static VALUE static VALUE
@ -3548,18 +3501,12 @@ ip_ruby_cmd_receiver_get(str)
char *str; char *str;
{ {
volatile VALUE receiver; volatile VALUE receiver;
#if !SUPPORT_NESTED_CONST_AS_IP_RUBY_CMD_RECEIVER
int state; int state;
#endif
if (str[0] == ':' || ('A' <= str[0] && str[0] <= 'Z')) { if (str[0] == ':' || ('A' <= str[0] && str[0] <= 'Z')) {
/* class | module | constant */ /* class | module | constant */
#if SUPPORT_NESTED_CONST_AS_IP_RUBY_CMD_RECEIVER
receiver = ip_ruby_cmd_receiver_const_get(str);
#else
receiver = rb_protect(ip_ruby_cmd_receiver_const_get, (VALUE)str, &state); receiver = rb_protect(ip_ruby_cmd_receiver_const_get, (VALUE)str, &state);
if (state) return Qnil; if (state) return Qnil;
#endif
} else if (str[0] == '$') { } else if (str[0] == '$') {
/* global variable */ /* global variable */
receiver = rb_gv_get(str); receiver = rb_gv_get(str);