summaryrefslogtreecommitdiff
path: root/vm_eval.c
diff options
context:
space:
mode:
authormarcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-03-14 21:10:34 +0000
committermarcandre <marcandre@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-03-14 21:10:34 +0000
commit7316302483182a73136b00ad368585e551cbd86f (patch)
treed32188711001581a5e7e21d6669f6c4e91fcb497 /vm_eval.c
parent35c356ea72094dbbf1397d8f5acd065bd23d1177 (diff)
* include/ruby/intern.h: Add rb_check_arity, rb_error_arity [#6085]
* array.c: Use rb_check_arity / rb_error_arity * class.c: ditto * enumerator.c: ditto * eval.c: ditto * file.c: ditto * hash.c: ditto * numeric.c: ditto * proc.c: ditto * process.c: ditto * random.c: ditto * re.c: ditto * signal.c: ditto * string.c: ditto * struct.c: ditto * transcode.c: ditto * vm_eval.c: ditto * vm_insnhelper.c: ditto & implementation of rb_error_arity * test/ruby/test_arity.rb: tests for above git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35024 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_eval.c')
-rw-r--r--vm_eval.c40
1 files changed, 12 insertions, 28 deletions
diff --git a/vm_eval.c b/vm_eval.c
index aa326216b9..8bad08944d 100644
--- a/vm_eval.c
+++ b/vm_eval.c
@@ -87,16 +87,12 @@ vm_call0(rb_thread_t* th, VALUE recv, VALUE id, int argc, const VALUE *argv,
break;
}
case VM_METHOD_TYPE_ATTRSET: {
- if (argc != 1) {
- rb_raise(rb_eArgError, "wrong number of arguments (%d for 1)", argc);
- }
+ rb_check_arity(argc, 1, 1);
val = rb_ivar_set(recv, def->body.attr.id, argv[0]);
break;
}
case VM_METHOD_TYPE_IVAR: {
- if (argc != 0) {
- rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", argc);
- }
+ rb_check_arity(argc, 0, 0);
val = rb_attr_get(recv, def->body.attr.id);
break;
}
@@ -1283,36 +1279,24 @@ static VALUE
specific_eval(int argc, VALUE *argv, VALUE klass, VALUE self)
{
if (rb_block_given_p()) {
- if (argc > 0) {
- rb_raise(rb_eArgError, "wrong number of arguments (%d for 0)", argc);
- }
+ rb_check_arity(argc, 0, 0);
return yield_under(klass, self, Qundef);
}
else {
const char *file = "(eval)";
int line = 1;
- if (argc == 0) {
- rb_raise(rb_eArgError, "block not supplied");
+ rb_check_arity(argc, 1, 3);
+ if (rb_safe_level() >= 4) {
+ StringValue(argv[0]);
}
else {
- if (rb_safe_level() >= 4) {
- StringValue(argv[0]);
- }
- else {
- SafeStringValue(argv[0]);
- }
- if (argc > 3) {
- const char *name = rb_id2name(rb_frame_callee());
- rb_raise(rb_eArgError,
- "wrong number of arguments: %s(src) or %s{..}",
- name, name);
- }
- if (argc > 2)
- line = NUM2INT(argv[2]);
- if (argc > 1) {
- file = StringValuePtr(argv[1]);
- }
+ SafeStringValue(argv[0]);
+ }
+ if (argc > 2)
+ line = NUM2INT(argv[2]);
+ if (argc > 1) {
+ file = StringValuePtr(argv[1]);
}
return eval_under(klass, self, argv[0], file, line);
}