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:
parent
5fd0076871
commit
d7d1e344f5
@ -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
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user