diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-12-09 16:39:49 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-12-09 16:39:49 +0000 |
commit | 9d8075b99cf131e0b2522bcf82a5b47e82d3882e (patch) | |
tree | 4215356c5ede9a7dbd0c02a5fcdebece7768d51f /object.c | |
parent | e56e8c758d8effb54144df0b61ca9d5f6b98a0cd (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.c | 49 |
1 files changed, 45 insertions, 4 deletions
@@ -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); |