summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-01-28 08:42:40 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-01-28 08:42:40 +0000
commitc9cf552a91f7248b73e2e7cab5b423861176a95c (patch)
tree8dc3e9ac704d3f5789f5547d0de557712d390b36
parent5f12cd3e24538d79581e6572badcca1a6d3ae95e (diff)
* eval.c (is_defined): defined?(Foo::Baz) should check constants
only, no methods. * eval.c (is_defined): should not dump core on defined?(a::b) where a is not a class nor a module. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_6@2020 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog8
-rw-r--r--class.c13
-rw-r--r--eval.c4
-rw-r--r--ext/pty/pty.c2
-rw-r--r--ext/tk/lib/tk.rb4
-rw-r--r--ext/tk/lib/tkfont.rb4
-rw-r--r--ext/tk/lib/tktext.rb16
7 files changed, 35 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index 2041d21972..1e8f1d9626 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Mon Jan 28 13:29:41 2002 K.Kosako <kosako@sofnec.co.jp>
+
+ * eval.c (is_defined): defined?(Foo::Baz) should check constants
+ only, no methods.
+
+ * eval.c (is_defined): should not dump core on defined?(a::b)
+ where a is not a class nor a module.
+
Fri Jan 25 17:48:43 2002 WATANABE Hirofumi <eban@ruby-lang.org>
* configure.in (solaris): add '-shared' only for GNU ld.
diff --git a/class.c b/class.c
index f906390246..b4d8c935ae 100644
--- a/class.c
+++ b/class.c
@@ -304,7 +304,7 @@ void
rb_include_module(klass, module)
VALUE klass, module;
{
- VALUE p;
+ VALUE p, c;
int changed = 0;
rb_frozen_class_p(klass);
@@ -323,18 +323,19 @@ rb_include_module(klass, module)
Check_Type(module, T_MODULE);
}
+ c = klass;
while (module) {
if (RCLASS(klass)->m_tbl == RCLASS(module)->m_tbl)
rb_raise(rb_eArgError, "cyclic include detected");
/* ignore if the module included already in superclasses */
for (p = RCLASS(klass)->super; p; p = RCLASS(p)->super) {
- if (BUILTIN_TYPE(p) == T_ICLASS &&
- RCLASS(p)->m_tbl == RCLASS(module)->m_tbl) {
- goto skip;
+ if (BUILTIN_TYPE(p) == T_ICLASS) {
+ if (RCLASS(p)->m_tbl == RCLASS(module)->m_tbl)
+ goto skip;
}
}
- RCLASS(klass)->super = include_class_new(module, RCLASS(klass)->super);
- klass = RCLASS(klass)->super;
+ RCLASS(c)->super = include_class_new(module, RCLASS(c)->super);
+ c = RCLASS(c)->super;
changed = 1;
skip:
module = RCLASS(module)->super;
diff --git a/eval.c b/eval.c
index 79bc1c6703..e6e5ab6753 100644
--- a/eval.c
+++ b/eval.c
@@ -1871,8 +1871,9 @@ is_defined(self, node, buf)
case T_MODULE:
if (rb_const_defined_at(val, node->nd_mid))
return "constant";
+ break;
default:
- if (rb_method_boundp(val, node->nd_mid, 1)) {
+ if (rb_method_boundp(CLASS_OF(val), node->nd_mid, 1)) {
return "method";
}
}
@@ -6783,6 +6784,7 @@ umethod_bind(method, recv)
method = Data_Make_Struct(rb_cMethod,struct METHOD,bm_mark,free,bound);
*bound = *data;
bound->recv = recv;
+ bound->rklass = CLASS_OF(recv);
return method;
}
diff --git a/ext/pty/pty.c b/ext/pty/pty.c
index 15f3b5caa8..5adb0992e0 100644
--- a/ext/pty/pty.c
+++ b/ext/pty/pty.c
@@ -452,7 +452,7 @@ pty_getpty(self, command)
rfptr->f = fdopen(info.fd, "r");
rfptr->path = strdup(RSTRING(command)->ptr);
- wfptr->mode = rb_io_mode_flags("w");
+ wfptr->mode = rb_io_mode_flags("w") | FMODE_SYNC;
wfptr->f = fdopen(dup(info.fd), "w");
wfptr->path = strdup(RSTRING(command)->ptr);
diff --git a/ext/tk/lib/tk.rb b/ext/tk/lib/tk.rb
index 681b673ff8..144569b339 100644
--- a/ext/tk/lib/tk.rb
+++ b/ext/tk/lib/tk.rb
@@ -1317,7 +1317,7 @@ class TkVariable
opts = ['r','w','u'].find_all{|c| opts.index(c)}.join('')
idx = -1
newopts = ''
- @trace_var.each_with_index{|i,e|
+ @trace_var.each_with_index{|e,i|
if idx < 0 && e[0] == opts && e[1] == cmd
idx = i
next
@@ -1351,7 +1351,7 @@ class TkVariable
return unless @trace_elem[elem].kind_of? Array
opts = ['r','w','u'].find_all{|c| opts.index(c)}.join('')
idx = -1
- @trace_elem[elem].each_with_index{|i,e|
+ @trace_elem[elem].each_with_index{|e,i|
if idx < 0 && e[0] == opts && e[1] == cmd
idx = i
next
diff --git a/ext/tk/lib/tkfont.rb b/ext/tk/lib/tkfont.rb
index c44b215ee9..c1e45cbe54 100644
--- a/ext/tk/lib/tkfont.rb
+++ b/ext/tk/lib/tkfont.rb
@@ -173,8 +173,8 @@ class TkFont
TkFont.new(nil, nil).call_font_configure(path, *(args + [{}]))
else
begin
- compound = Hash[*list(tk_call('font', 'configure',
- fnt))].collect{|key,value|
+ compound = Hash[*tk_split_simplelist(tk_call('font', 'configure',
+ fnt))].collect{|key,value|
[key[1..-1], value]
}.assoc('compound')[1]
rescue
diff --git a/ext/tk/lib/tktext.rb b/ext/tk/lib/tktext.rb
index 6ec738edb0..f7d93618f9 100644
--- a/ext/tk/lib/tktext.rb
+++ b/ext/tk/lib/tktext.rb
@@ -813,12 +813,20 @@ class TkTextMark<TkObject
tk_call @t.path, 'mark', 'gravity', @id, direction
end
- def next(index)
- @t.tagid2obj(tk_call(@t.path, 'mark', 'next', index))
+ def next(index = nil)
+ if index
+ @t.tagid2obj(tk_call(@t.path, 'mark', 'next', index))
+ else
+ @t.tagid2obj(tk_call(@t.path, 'mark', 'next', @id))
+ end
end
- def previous(index)
- @t.tagid2obj(tk_call(@t.path, 'mark', 'previous', index))
+ def previous(index = nil)
+ if index
+ @t.tagid2obj(tk_call(@t.path, 'mark', 'previous', index))
+ else
+ @t.tagid2obj(tk_call(@t.path, 'mark', 'previous', @id))
+ end
end
end