Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mruby
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
mruby
Commits
8b4bd315
Commit
8b4bd315
authored
8 years ago
by
Yukihiro "Matz" Matsumoto
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move #== and #!= to BasicObject; ref #3417
parent
3f9450e7
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
52 additions
and
51 deletions
+52
-51
src/class.c
src/class.c
+51
-0
src/kernel.c
src/kernel.c
+1
-51
No files found.
src/class.c
View file @
8b4bd315
...
...
@@ -1486,6 +1486,55 @@ mrb_bob_not(mrb_state *mrb, mrb_value cv)
return
mrb_bool_value
(
!
mrb_test
(
cv
));
}
/* 15.3.1.3.1 */
/* 15.3.1.3.10 */
/* 15.3.1.3.11 */
/*
* call-seq:
* obj == other -> true or false
* obj.equal?(other) -> true or false
* obj.eql?(other) -> true or false
*
* Equality---At the <code>Object</code> level, <code>==</code> returns
* <code>true</code> only if <i>obj</i> and <i>other</i> are the
* same object. Typically, this method is overridden in descendant
* classes to provide class-specific meaning.
*
* Unlike <code>==</code>, the <code>equal?</code> method should never be
* overridden by subclasses: it is used to determine object identity
* (that is, <code>a.equal?(b)</code> iff <code>a</code> is the same
* object as <code>b</code>).
*
* The <code>eql?</code> method returns <code>true</code> if
* <i>obj</i> and <i>anObject</i> have the same value. Used by
* <code>Hash</code> to test members for equality. For objects of
* class <code>Object</code>, <code>eql?</code> is synonymous with
* <code>==</code>. Subclasses normally continue this tradition, but
* there are exceptions. <code>Numeric</code> types, for example,
* perform type conversion across <code>==</code>, but not across
* <code>eql?</code>, so:
*
* 1 == 1.0 #=> true
* 1.eql? 1.0 #=> false
*/
mrb_value
mrb_obj_equal_m
(
mrb_state
*
mrb
,
mrb_value
self
)
{
mrb_value
arg
;
mrb_get_args
(
mrb
,
"o"
,
&
arg
);
return
mrb_bool_value
(
mrb_obj_equal
(
mrb
,
self
,
arg
));
}
static
mrb_value
mrb_obj_not_equal_m
(
mrb_state
*
mrb
,
mrb_value
self
)
{
mrb_value
arg
;
mrb_get_args
(
mrb
,
"o"
,
&
arg
);
return
mrb_bool_value
(
!
mrb_equal
(
mrb
,
self
,
arg
));
}
MRB_API
mrb_bool
mrb_obj_respond_to
(
mrb_state
*
mrb
,
struct
RClass
*
c
,
mrb_sym
mid
)
{
...
...
@@ -2235,6 +2284,8 @@ mrb_init_class(mrb_state *mrb)
MRB_SET_INSTANCE_TT
(
cls
,
MRB_TT_CLASS
);
mrb_define_method
(
mrb
,
bob
,
"initialize"
,
mrb_bob_init
,
MRB_ARGS_NONE
());
mrb_define_method
(
mrb
,
bob
,
"!"
,
mrb_bob_not
,
MRB_ARGS_NONE
());
mrb_define_method
(
mrb
,
bob
,
"=="
,
mrb_obj_equal_m
,
MRB_ARGS_REQ
(
1
));
/* 15.3.1.3.1 */
mrb_define_method
(
mrb
,
bob
,
"!="
,
mrb_obj_not_equal_m
,
MRB_ARGS_REQ
(
1
));
mrb_define_class_method
(
mrb
,
cls
,
"new"
,
mrb_class_new_class
,
MRB_ARGS_OPT
(
1
));
mrb_define_method
(
mrb
,
cls
,
"superclass"
,
mrb_class_superclass
,
MRB_ARGS_NONE
());
/* 15.2.3.3.4 */
...
...
This diff is collapsed.
Click to expand it.
src/kernel.c
View file @
8b4bd315
...
...
@@ -66,55 +66,6 @@ mrb_obj_inspect(mrb_state *mrb, mrb_value obj)
return
mrb_any_to_s
(
mrb
,
obj
);
}
/* 15.3.1.3.1 */
/* 15.3.1.3.10 */
/* 15.3.1.3.11 */
/*
* call-seq:
* obj == other -> true or false
* obj.equal?(other) -> true or false
* obj.eql?(other) -> true or false
*
* Equality---At the <code>Object</code> level, <code>==</code> returns
* <code>true</code> only if <i>obj</i> and <i>other</i> are the
* same object. Typically, this method is overridden in descendant
* classes to provide class-specific meaning.
*
* Unlike <code>==</code>, the <code>equal?</code> method should never be
* overridden by subclasses: it is used to determine object identity
* (that is, <code>a.equal?(b)</code> iff <code>a</code> is the same
* object as <code>b</code>).
*
* The <code>eql?</code> method returns <code>true</code> if
* <i>obj</i> and <i>anObject</i> have the same value. Used by
* <code>Hash</code> to test members for equality. For objects of
* class <code>Object</code>, <code>eql?</code> is synonymous with
* <code>==</code>. Subclasses normally continue this tradition, but
* there are exceptions. <code>Numeric</code> types, for example,
* perform type conversion across <code>==</code>, but not across
* <code>eql?</code>, so:
*
* 1 == 1.0 #=> true
* 1.eql? 1.0 #=> false
*/
static
mrb_value
mrb_obj_equal_m
(
mrb_state
*
mrb
,
mrb_value
self
)
{
mrb_value
arg
;
mrb_get_args
(
mrb
,
"o"
,
&
arg
);
return
mrb_bool_value
(
mrb_obj_equal
(
mrb
,
self
,
arg
));
}
static
mrb_value
mrb_obj_not_equal_m
(
mrb_state
*
mrb
,
mrb_value
self
)
{
mrb_value
arg
;
mrb_get_args
(
mrb
,
"o"
,
&
arg
);
return
mrb_bool_value
(
!
mrb_equal
(
mrb
,
self
,
arg
));
}
/* 15.3.1.3.2 */
/*
* call-seq:
...
...
@@ -1227,6 +1178,7 @@ mrb_local_variables(mrb_state *mrb, mrb_value self)
return
mrb_hash_keys
(
mrb
,
vars
);
}
mrb_value
mrb_obj_equal_m
(
mrb_state
*
mrb
,
mrb_value
);
void
mrb_init_kernel
(
mrb_state
*
mrb
)
{
...
...
@@ -1242,8 +1194,6 @@ mrb_init_kernel(mrb_state *mrb)
mrb_define_method
(
mrb
,
krn
,
"singleton_class"
,
mrb_singleton_class
,
MRB_ARGS_NONE
());
mrb_define_method
(
mrb
,
krn
,
"=="
,
mrb_obj_equal_m
,
MRB_ARGS_REQ
(
1
));
/* 15.3.1.3.1 */
mrb_define_method
(
mrb
,
krn
,
"!="
,
mrb_obj_not_equal_m
,
MRB_ARGS_REQ
(
1
));
mrb_define_method
(
mrb
,
krn
,
"==="
,
mrb_equal_m
,
MRB_ARGS_REQ
(
1
));
/* 15.3.1.3.2 */
mrb_define_method
(
mrb
,
krn
,
"__id__"
,
mrb_obj_id_m
,
MRB_ARGS_NONE
());
/* 15.3.1.3.3 */
mrb_define_method
(
mrb
,
krn
,
"__send__"
,
mrb_f_send
,
MRB_ARGS_ANY
());
/* 15.3.1.3.4 */
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment