summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-12-19 09:20:20 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2002-12-19 09:20:20 +0000
commitbaa00aa2506745308a598ce91e65a727ba25f30f (patch)
treefc289dbd1d10586ba6537ab070a7f42bd7bc9cb6 /eval.c
parenta0a14ed14a86b7204ba3e9d557a296ca08a8bb8d (diff)
* numeric.c (num_step): use DBL_EPSILON.
* array.c (rb_check_array_type): new function: return an array (convert if possible), or nil. * string.c (rb_check_string_type): new function: return a string (convert if possible), or nil. * numeric.c (rb_dbl_cmp): returns nil if values are not comparable. * numeric.c (fix_cmp,flo_cmp): use rb_num_coerce_cmp() * bignum.c (rb_big_cmp): ditto. * numeric.c (rb_num_coerce_cmp): new coercing function for "<=>", which does not raise TypeError. * numeric.c (do_coerce): can be supress exception now. * object.c (rb_mod_cmp): should return nil for non class/module objects. * re.c (rb_reg_eqq): return false if the argument is not a string. now returns boolean value. * class.c (rb_include_module): argument should be T_MODULE, not T_class, nor T_ICLASS. * eval.c (is_defined): "defined?" should return "assignment" for attribute assignment (e.g. a.foo=b) and indexed assignment (e.g. a[2] = 44). * parse.y (aryset): use NODE_ATTRASGN. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3169 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/eval.c b/eval.c
index 86c22ab..b7662c9 100644
--- a/eval.c
+++ b/eval.c
@@ -1881,6 +1881,7 @@ is_defined(self, node, buf)
goto check_bound;
case NODE_CALL:
+ case NODE_ATTRASGN:
PUSH_TAG(PROT_NONE);
if ((state = EXEC_TAG()) == 0) {
val = rb_eval(self, node->nd_recv);
@@ -1909,7 +1910,9 @@ is_defined(self, node, buf)
}
else if (!rb_method_boundp(val, node->nd_mid, call))
break;
- return arg_defined(self, node->nd_args, buf, "method");
+ return arg_defined(self, node->nd_args, buf,
+ nd_type(node) == NODE_ATTRASGN ?
+ "assignment" : "method");
}
break;
@@ -1936,7 +1939,6 @@ is_defined(self, node, buf)
return "false";
case NODE_ATTRSET:
- case NODE_ATTRASGN:
case NODE_OP_ASGN1:
case NODE_OP_ASGN2:
case NODE_MASGN:
@@ -5039,7 +5041,7 @@ compile(src, file, line)
NODE *node;
ruby_nerrs = 0;
- Check_Type(src, T_STRING);
+ StringValue(src);
node = rb_compile_string(file, src, line);
if (ruby_nerrs == 0) return node;