summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog19
-rw-r--r--eval.c30
-rw-r--r--gc.c2
-rw-r--r--hash.c8
-rw-r--r--version.h4
5 files changed, 54 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index d1f2adba31..cbbf0cfbd0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,10 +3,29 @@ Tue Jun 12 14:21:28 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
* lib/mkmf.rb: target_prefix is only for installation, not for
build.
+Tue Jun 12 00:41:18 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (method_eq): new method Method#==. [new]
+
Mon Jun 11 14:29:41 2001 WATANABE Hirofumi <eban@ruby-lang.org>
* confgure.in: add RUBY_CANONICAL_BUILD.
+Sun Jun 10 17:31:47 2001 Guy Decoux <decoux@moulon.inra.fr>
+
+ * gc.c (STR_NO_ORIG): STR_NO_ORIG value was different between
+ string.c and gc.c
+
+Sat Jun 9 22:10:04 2001 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_eval): should convert *non-array at the end of
+ arguments by using Array().
+
+Sat Jun 9 17:04:30 2001 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
+
+ * hash.c (ruby_setenv): readline library leaves their environment
+ strings uncopied. "free" check revised.
+
Sat Jun 9 16:31:03 2001 Usaku Nakamura <usa@osb.att.ne.jp>
* ext/extmk.rb.in: Use -F and -T for mswin32 because cl.exe doesn't
diff --git a/eval.c b/eval.c
index 9648305239..80905ba8af 100644
--- a/eval.c
+++ b/eval.c
@@ -2520,7 +2520,7 @@ rb_eval(self, n)
case NODE_ARGSCAT:
result = rb_ary_concat(rb_eval(self, node->nd_head),
- rb_eval(self, node->nd_body));
+ rb_Array(rb_eval(self, node->nd_body)));
break;
case NODE_ARGSPUSH:
@@ -6599,6 +6599,27 @@ mnew(klass, obj, id, mklass)
}
static VALUE
+method_eq(method, other)
+ VALUE method, other;
+{
+ struct METHOD *m1, *m2;
+
+ if (TYPE(other) != T_DATA || RDATA(other)->dmark != (RUBY_DATA_FUNC)bm_mark)
+ return Qfalse;
+ if (CLASS_OF(method) != CLASS_OF(other))
+ return Qfalse;
+
+ Data_Get_Struct(method, struct METHOD, m1);
+ Data_Get_Struct(other, struct METHOD, m2);
+
+ if (m1->klass != m2->klass || m1->oklass != m2->oklass ||
+ m1->recv != m2->recv || m1->body != m2->body)
+ return Qfalse;
+
+ return Qtrue;
+}
+
+static VALUE
method_unbind(obj)
VALUE obj;
{
@@ -6608,7 +6629,7 @@ method_unbind(obj)
Data_Get_Struct(obj, struct METHOD, orig);
method = Data_Make_Struct(rb_cUnboundMethod, struct METHOD, bm_mark, free, data);
data->klass = orig->klass;
- data->recv = obj;
+ data->recv = 0;
data->id = orig->id;
data->body = orig->body;
data->oklass = orig->oklass;
@@ -6649,7 +6670,7 @@ method_clone(self)
struct METHOD *orig, *data;
Data_Get_Struct(self, struct METHOD, orig);
- clone = Data_Make_Struct(CLASS_OF(self),struct METHOD,bm_mark,free,data);
+ clone = Data_Make_Struct(CLASS_OF(self),struct METHOD, bm_mark, free, data);
CLONESETUP(clone, self);
*data = *orig;
@@ -6709,7 +6730,7 @@ umethod_bind(method, recv)
rb_raise(rb_eTypeError, "method `%s' overridden", rb_id2name(data->oid));
}
if (!rb_obj_is_instance_of(recv, data->oklass)) {
- rb_raise(rb_eTypeError, "first argument must be an instance of %s",
+ rb_raise(rb_eTypeError, "bind argument must be an instance of %s",
rb_class2name(data->oklass));
}
}
@@ -6891,6 +6912,7 @@ Init_Proc()
rb_cMethod = rb_define_class("Method", rb_cObject);
rb_undef_method(CLASS_OF(rb_cMethod), "new");
+ rb_define_method(rb_cMethod, "==", method_eq, 1);
rb_define_method(rb_cMethod, "clone", method_clone, 0);
rb_define_method(rb_cMethod, "call", method_call, -1);
rb_define_method(rb_cMethod, "[]", method_call, -1);
diff --git a/gc.c b/gc.c
index c684efa618..912f71c566 100644
--- a/gc.c
+++ b/gc.c
@@ -785,7 +785,7 @@ obj_free(obj)
}
break;
case T_STRING:
-#define STR_NO_ORIG FL_USER0 /* copied from string.c */
+#define STR_NO_ORIG FL_USER2 /* copied from string.c */
if (!RANY(obj)->as.string.orig || FL_TEST(obj, STR_NO_ORIG)) {
RUBY_CRITICAL(free(RANY(obj)->as.string.ptr));
}
diff --git a/hash.c b/hash.c
index f3c621acee..39a9a522d7 100644
--- a/hash.c
+++ b/hash.c
@@ -1066,8 +1066,12 @@ ruby_setenv(name, value)
environ = tmpenv; /* tell exec where it is now */
}
if (!value) {
- if (environ[i] != origenviron[i])
- free(environ[i]);
+ if (environ != origenviron) {
+ char **envp = origenviron;
+ while (*envp && *envp != environ[i]) envp++;
+ if (!*envp)
+ free(environ[i]);
+ }
while (environ[i]) {
environ[i] = environ[i+1];
i++;
diff --git a/version.h b/version.h
index 9ec28b4abc..803bfc0634 100644
--- a/version.h
+++ b/version.h
@@ -1,4 +1,4 @@
#define RUBY_VERSION "1.7.1"
-#define RUBY_RELEASE_DATE "2001-06-07"
+#define RUBY_RELEASE_DATE "2001-06-12"
#define RUBY_VERSION_CODE 171
-#define RUBY_RELEASE_CODE 20010607
+#define RUBY_RELEASE_CODE 20010612