summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-05-05 07:46:33 +0900
committerYukihiro Matsumoto <[email protected]>2012-05-05 07:46:33 +0900
commita18ab06a23c53dc7615e183b1e9cfcb0652f8650 (patch)
treea06b4c6a901a7de48065ddbc3adf2d1edc238da6 /src
parentb780e63000f4a2a7d2906c4cbd7fbf9056cbb26b (diff)
downloadmruby-a18ab06a23c53dc7615e183b1e9cfcb0652f8650.tar.gz
mruby-a18ab06a23c53dc7615e183b1e9cfcb0652f8650.zip
mrb_get_args(i) should convert using to_int
Diffstat (limited to 'src')
-rw-r--r--src/class.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/class.c b/src/class.c
index d2cf10007..dd9ca7e9c 100644
--- a/src/class.c
+++ b/src/class.c
@@ -357,7 +357,22 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
mrb_int *p;
p = va_arg(ap, mrb_int*);
- *p = (argc > i) ? mrb_fixnum(*sp) : 0;
+ switch (sp->tt) {
+ case MRB_TT_FIXNUM:
+ *p = mrb_fixnum(*sp);
+ break;
+ case MRB_TT_FLOAT:
+ *p = (mrb_int)mrb_float(*sp);
+ break;
+ default:
+ {
+ mrb_value tmp;
+
+ tmp = mrb_convert_type(mrb, *sp, MRB_TT_FIXNUM, "Integer", "to_int");
+ *p = mrb_fixnum(tmp);
+ }
+ break;
+ }
i++; sp++;
}
break;
@@ -368,10 +383,10 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
p = va_arg(ap, mrb_float*);
switch (sp->tt) {
case MRB_TT_FLOAT:
- *p = (argc > i) ? mrb_float(*sp) : 0;
+ *p = mrb_float(*sp);
break;
case MRB_TT_FIXNUM:
- *p = (argc > i) ? (mrb_float)mrb_fixnum(*sp) : 0;
+ *p = (mrb_float)mrb_fixnum(*sp);
break;
default:
{