summaryrefslogtreecommitdiff
path: root/object.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-12-09 16:39:49 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-12-09 16:39:49 +0000
commit9d8075b99cf131e0b2522bcf82a5b47e82d3882e (patch)
tree4215356c5ede9a7dbd0c02a5fcdebece7768d51f /object.c
parente56e8c758d8effb54144df0b61ca9d5f6b98a0cd (diff)
* parse.y (expr): redefinable not (!) operator.
* parse.y (arg): ditto. * object.c (rb_obj_not): new method "!". * object.c (rb_obj_not_equal): new method "!=". * object.c (rb_obj_not_match): new method "!~". git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14162 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'object.c')
-rw-r--r--object.c49
1 files changed, 45 insertions, 4 deletions
diff --git a/object.c b/object.c
index 689e87a27a..1152b855f2 100644
--- a/object.c
+++ b/object.c
@@ -96,6 +96,33 @@ rb_obj_equal(VALUE obj1, VALUE obj2)
return Qfalse;
}
+/*
+ * call-seq:
+ * !obj => true or false
+ *
+ * Boolean negate.
+ */
+
+static VALUE
+rb_obj_not(VALUE obj)
+{
+ return RTEST(obj) ? Qfalse : Qtrue;
+}
+
+/*
+ * call-seq:
+ * obj != other => true or false
+ *
+ * Returns true if two objects are not-equal, otherwise false.
+ */
+
+static VALUE
+rb_obj_not_equal(VALUE obj1, VALUE obj2)
+{
+ VALUE result = rb_funcall(obj1, id_eq, 1, obj2);
+ return RTEST(result) ? Qfalse : Qtrue;
+}
+
VALUE
rb_class_real(VALUE cl)
{
@@ -991,11 +1018,24 @@ rb_false(VALUE obj)
*/
static VALUE
-rb_obj_pattern_match(VALUE obj1, VALUE obj2)
+rb_obj_match(VALUE obj1, VALUE obj2)
{
return Qnil;
}
+/*
+ * call-seq:
+ * obj !~ other => nil
+ *
+ * Returns true if two objects does not match, using <i>=~</i> method.
+ */
+
+static VALUE
+rb_obj_not_match(VALUE obj1, VALUE obj2)
+{
+ return Qtrue;
+}
+
/***********************************************************************
*
@@ -2307,6 +2347,8 @@ Init_Object(void)
rb_define_alloc_func(rb_cBasicObject, rb_class_allocate_instance);
rb_define_method(rb_cBasicObject, "==", rb_obj_equal, 1);
rb_define_method(rb_cBasicObject, "equal?", rb_obj_equal, 1);
+ rb_define_method(rb_cBasicObject, "!@", rb_obj_not, 0);
+ rb_define_method(rb_cBasicObject, "!=", rb_obj_not_equal, 1);
rb_mKernel = rb_define_module("Kernel");
rb_include_module(rb_cObject, rb_mKernel);
@@ -2319,12 +2361,11 @@ Init_Object(void)
rb_define_method(rb_mKernel, "nil?", rb_false, 0);
rb_define_method(rb_mKernel, "===", rb_equal, 1);
- rb_define_method(rb_mKernel, "=~", rb_obj_pattern_match, 1);
-
+ rb_define_method(rb_mKernel, "=~", rb_obj_match, 1);
+ rb_define_method(rb_mKernel, "!~", rb_obj_not_match, 1);
rb_define_method(rb_mKernel, "eql?", rb_obj_equal, 1);
rb_define_method(rb_mKernel, "class", rb_obj_class, 0);
-
rb_define_method(rb_mKernel, "clone", rb_obj_clone, 0);
rb_define_method(rb_mKernel, "dup", rb_obj_dup, 0);
rb_define_method(rb_mKernel, "initialize_copy", rb_obj_init_copy, 1);