From 9d8075b99cf131e0b2522bcf82a5b47e82d3882e Mon Sep 17 00:00:00 2001 From: matz Date: Sun, 9 Dec 2007 16:39:49 +0000 Subject: * 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 --- object.c | 49 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 4 deletions(-) (limited to 'object.c') 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 =~ 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); -- cgit v1.2.3