summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-11-14 23:54:06 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-11-14 23:54:06 +0000
commitba2147ba40a147c10da3f8e202b4f78488bab6d9 (patch)
tree9f279add5f9f86d3340ec0be83469291a2601bbc
parent83e19791ef93da8f13eab296abcc2d9afe320ab8 (diff)
* eval.c (rb_method_node): new API to retrieve method body.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4957 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--array.c4
-rw-r--r--eval.c10
-rw-r--r--hash.c9
-rw-r--r--node.h2
5 files changed, 27 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 01ccf02b68..c1bbb8cadc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Sat Nov 15 07:40:14 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_method_node): new API to retrieve method body.
+
Fri Nov 14 13:21:30 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
* ext/tcltklib/tcltklib.c: fix (en-bugged at 2003/11/07)
diff --git a/array.c b/array.c
index ba030bf468..5f41d26409 100644
--- a/array.c
+++ b/array.c
@@ -81,8 +81,8 @@ static VALUE
rb_ary_frozen_p(ary)
VALUE ary;
{
- if (FL_TEST(ary, FL_FREEZE|ARY_TMPLOCK))
- return Qtrue;
+ if (OBJ_FROZEN(ary)) return Qtrue;
+ if (FL_TEST(ary, ARY_TMPLOCK)) return Qtrue;
return Qfalse;
}
diff --git a/eval.c b/eval.c
index de8408170d..64fa28bd98 100644
--- a/eval.c
+++ b/eval.c
@@ -421,6 +421,16 @@ rb_get_method_body(klassp, idp, noexp)
return body;
}
+NODE*
+rb_method_node(klass, id)
+ VALUE klass;
+ ID id;
+{
+ int noex;
+
+ return rb_get_method_body(&klass, &id, &noex);
+}
+
static void
remove_method(klass, mid)
VALUE klass;
diff --git a/hash.c b/hash.c
index 75c07797d3..b2a17698df 100644
--- a/hash.c
+++ b/hash.c
@@ -41,6 +41,14 @@ rb_hash_freeze(hash)
return rb_obj_freeze(hash);
}
+static VALUE
+rb_hash_frozen_p(hash)
+ VALUE hash;
+{
+ if (OBJ_FROZEN(hash)) return Qtrue;
+ return Qfalse;
+}
+
VALUE rb_cHash;
static VALUE envtbl;
@@ -1789,6 +1797,7 @@ Init_Hash()
rb_define_method(rb_cHash,"to_a", rb_hash_to_a, 0);
rb_define_method(rb_cHash,"to_s", rb_hash_to_s, 0);
rb_define_method(rb_cHash,"inspect", rb_hash_inspect, 0);
+ rb_define_method(rb_cHash,"frozen?", rb_hash_frozen_p, 0);
rb_define_method(rb_cHash,"==", rb_hash_equal, 1);
rb_define_method(rb_cHash,"[]", rb_hash_aref, 1);
diff --git a/node.h b/node.h
index 0e5150ced9..c06336e17f 100644
--- a/node.h
+++ b/node.h
@@ -352,6 +352,8 @@ NODE *rb_compile_file _((const char*, VALUE, int));
void rb_add_method _((VALUE, ID, NODE *, int));
NODE *rb_node_newnode _((enum node_type,VALUE,VALUE,VALUE));
+NODE* rb_method_node _((VALUE klass, ID id));
+
struct global_entry *rb_global_entry _((ID));
VALUE rb_gvar_get _((struct global_entry *));
VALUE rb_gvar_set _((struct global_entry *, VALUE));