mruby-math/math.c: avoid mrb_get_args() if possible

When a method takes single argument, we can use lighter `mrb_get_arg1()`
instead of `mrb_get_args()`.
This commit is contained in:
Yukihiro "Matz" Matsumoto
2023-01-24 09:15:20 +09:00
parent aefc5befbd
commit d9bf3235d2
+22 -77
View File
@@ -174,6 +174,8 @@ log2(double x)
#endif
#define get_float_arg(mrb) mrb_as_float((mrb), mrb_get_arg1(mrb))
/*
TRIGONOMETRIC FUNCTIONS
*/
@@ -188,11 +190,7 @@ log2(double x)
static mrb_value
math_sin(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_get_args(mrb, "f", &x);
x = sin(x);
mrb_float x = sin(get_float_arg(mrb));
return mrb_float_value(mrb, x);
}
@@ -206,11 +204,7 @@ math_sin(mrb_state *mrb, mrb_value obj)
static mrb_value
math_cos(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_get_args(mrb, "f", &x);
x = cos(x);
mrb_float x = cos(get_float_arg(mrb));
return mrb_float_value(mrb, x);
}
@@ -223,11 +217,7 @@ math_cos(mrb_state *mrb, mrb_value obj)
static mrb_value
math_tan(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_get_args(mrb, "f", &x);
x = tan(x);
mrb_float x = tan(get_float_arg(mrb));
return mrb_float_value(mrb, x);
}
@@ -245,9 +235,8 @@ math_tan(mrb_state *mrb, mrb_value obj)
static mrb_value
math_asin(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_float x = get_float_arg(mrb);
mrb_get_args(mrb, "f", &x);
if (x < -1.0 || x > 1.0) {
domain_error(mrb, "asin");
}
@@ -265,9 +254,8 @@ math_asin(mrb_state *mrb, mrb_value obj)
static mrb_value
math_acos(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_float x = get_float_arg(mrb);
mrb_get_args(mrb, "f", &x);
if (x < -1.0 || x > 1.0) {
domain_error(mrb, "acos");
}
@@ -285,11 +273,7 @@ math_acos(mrb_state *mrb, mrb_value obj)
static mrb_value
math_atan(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_get_args(mrb, "f", &x);
x = atan(x);
mrb_float x = atan(get_float_arg(mrb));
return mrb_float_value(mrb, x);
}
@@ -336,11 +320,7 @@ math_atan2(mrb_state *mrb, mrb_value obj)
static mrb_value
math_sinh(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_get_args(mrb, "f", &x);
x = sinh(x);
mrb_float x = sinh(get_float_arg(mrb));
return mrb_float_value(mrb, x);
}
@@ -353,11 +333,7 @@ math_sinh(mrb_state *mrb, mrb_value obj)
static mrb_value
math_cosh(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_get_args(mrb, "f", &x);
x = cosh(x);
mrb_float x = cosh(get_float_arg(mrb));
return mrb_float_value(mrb, x);
}
@@ -371,11 +347,7 @@ math_cosh(mrb_state *mrb, mrb_value obj)
static mrb_value
math_tanh(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_get_args(mrb, "f", &x);
x = tanh(x);
mrb_float x = tanh(get_float_arg(mrb));
return mrb_float_value(mrb, x);
}
@@ -393,12 +365,7 @@ math_tanh(mrb_state *mrb, mrb_value obj)
static mrb_value
math_asinh(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_get_args(mrb, "f", &x);
x = asinh(x);
mrb_float x = asinh(get_float_arg(mrb));
return mrb_float_value(mrb, x);
}
@@ -411,9 +378,8 @@ math_asinh(mrb_state *mrb, mrb_value obj)
static mrb_value
math_acosh(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_float x = get_float_arg(mrb);
mrb_get_args(mrb, "f", &x);
if (x < 1.0) {
domain_error(mrb, "acosh");
}
@@ -431,9 +397,8 @@ math_acosh(mrb_state *mrb, mrb_value obj)
static mrb_value
math_atanh(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_float x = get_float_arg(mrb);
mrb_get_args(mrb, "f", &x);
if (x < -1.0 || x > 1.0) {
domain_error(mrb, "atanh");
}
@@ -460,11 +425,7 @@ math_atanh(mrb_state *mrb, mrb_value obj)
static mrb_value
math_exp(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_get_args(mrb, "f", &x);
x = exp(x);
mrb_float x = exp(get_float_arg(mrb));
return mrb_float_value(mrb, x);
}
@@ -518,9 +479,8 @@ math_log(mrb_state *mrb, mrb_value obj)
static mrb_value
math_log2(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_float x = get_float_arg(mrb);
mrb_get_args(mrb, "f", &x);
if (x < 0.0) {
domain_error(mrb, "log2");
}
@@ -543,9 +503,8 @@ math_log2(mrb_state *mrb, mrb_value obj)
static mrb_value
math_log10(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_float x = get_float_arg(mrb);
mrb_get_args(mrb, "f", &x);
if (x < 0.0) {
domain_error(mrb, "log10");
}
@@ -564,9 +523,8 @@ math_log10(mrb_state *mrb, mrb_value obj)
static mrb_value
math_sqrt(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_float x = get_float_arg(mrb);
mrb_get_args(mrb, "f", &x);
if (x < 0.0) {
domain_error(mrb, "sqrt");
}
@@ -610,11 +568,7 @@ math_sqrt(mrb_state *mrb, mrb_value obj)
static mrb_value
math_cbrt(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_get_args(mrb, "f", &x);
x = cbrt(x);
mrb_float x = cbrt(get_float_arg(mrb));
return mrb_float_value(mrb, x);
}
@@ -633,10 +587,9 @@ math_cbrt(mrb_state *mrb, mrb_value obj)
static mrb_value
math_frexp(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_float x = get_float_arg(mrb);
int exp;
mrb_get_args(mrb, "f", &x);
x = frexp(x, &exp);
return mrb_assoc_new(mrb, mrb_float_value(mrb, x), mrb_fixnum_value(exp));
@@ -692,11 +645,7 @@ math_hypot(mrb_state *mrb, mrb_value obj)
static mrb_value
math_erf(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_get_args(mrb, "f", &x);
x = erf(x);
mrb_float x = erf(get_float_arg(mrb));
return mrb_float_value(mrb, x);
}
@@ -710,11 +659,7 @@ math_erf(mrb_state *mrb, mrb_value obj)
static mrb_value
math_erfc(mrb_state *mrb, mrb_value obj)
{
mrb_float x;
mrb_get_args(mrb, "f", &x);
x = erfc(x);
mrb_float x = erfc(get_float_arg(mrb));
return mrb_float_value(mrb, x);
}