@@ -124,33 +124,23 @@ ecma_builtin_math_object_max_min (bool is_max, /**< 'max' or 'min' operation */
124124 uint32_t args_number ) /**< number of arguments */
125125{
126126 ecma_number_t result_num = ecma_number_make_infinity (is_max );
127- bool nan_found = false;
128127
129128 while (args_number > 0 )
130129 {
131130 ecma_number_t arg_num ;
131+ ecma_value_t value = ecma_op_to_number (* arg , & arg_num );
132132
133- if (ecma_is_value_number ( * arg ))
133+ if (ECMA_IS_VALUE_ERROR ( value ))
134134 {
135- arg_num = ecma_get_number_from_value (* arg );
136- }
137- else
138- {
139- ecma_value_t value = ecma_op_to_number (* arg , & arg_num );
140-
141- if (ECMA_IS_VALUE_ERROR (value ))
142- {
143- return value ;
144- }
135+ return value ;
145136 }
146137
147138 arg ++ ;
148139 args_number -- ;
149140
150- if (JERRY_UNLIKELY ( nan_found || ecma_number_is_nan (arg_num ) ))
141+ if (ecma_number_is_nan (arg_num ))
151142 {
152- nan_found = true;
153- continue ;
143+ result_num = arg_num ;
154144 }
155145
156146 if (ecma_number_is_zero (arg_num ) && ecma_number_is_zero (result_num ))
@@ -171,11 +161,6 @@ ecma_builtin_math_object_max_min (bool is_max, /**< 'max' or 'min' operation */
171161 }
172162 }
173163
174- if (JERRY_UNLIKELY (nan_found ))
175- {
176- result_num = ecma_number_make_nan ();
177- }
178-
179164 return ecma_make_number_value (result_num );
180165} /* ecma_builtin_math_object_max_min */
181166
@@ -198,54 +183,37 @@ ecma_builtin_math_object_hypot (const ecma_value_t *arg, /**< arguments list */
198183 return ecma_make_number_value (0.0 );
199184 }
200185
201- bool nan_found = false;
202- bool inf_found = false;
203186 ecma_number_t result_num = 0 ;
187+ bool inf = false;
204188
205189 while (args_number > 0 )
206190 {
207191 ecma_number_t arg_num ;
208- if (ecma_is_value_number (* arg ))
192+ ecma_value_t value = ecma_op_to_number (* arg , & arg_num );
193+ if (ECMA_IS_VALUE_ERROR (value ))
209194 {
210- arg_num = ecma_get_number_from_value (* arg );
211- }
212- else
213- {
214- ecma_value_t value = ecma_op_to_number (* arg , & arg_num );
215- if (ECMA_IS_VALUE_ERROR (value ))
216- {
217- return value ;
218- }
195+ return value ;
219196 }
220197
221198 arg ++ ;
222199 args_number -- ;
223200
224- if (JERRY_UNLIKELY ( inf_found || ecma_number_is_infinity ( arg_num )) )
201+ if (ecma_number_is_nan ( arg_num ) && ! inf )
225202 {
226- inf_found = true ;
203+ result_num = arg_num ;
227204 continue ;
228205 }
229206
230- if (JERRY_UNLIKELY ( nan_found || ecma_number_is_nan ( arg_num ) ))
207+ if (ecma_number_is_infinity ( arg_num ))
231208 {
232- nan_found = true;
209+ inf = true;
210+ result_num = ecma_number_make_infinity (false);
233211 continue ;
234212 }
235213
236214 result_num += arg_num * arg_num ;
237215 }
238216
239- if (JERRY_UNLIKELY (inf_found ))
240- {
241- return ecma_make_number_value (ecma_number_make_infinity (false));
242- }
243-
244- if (JERRY_UNLIKELY (nan_found ))
245- {
246- return ecma_make_nan_value ();
247- }
248-
249217 return ecma_make_number_value (sqrt (result_num ));
250218} /* ecma_builtin_math_object_hypot */
251219
@@ -344,18 +312,11 @@ ecma_builtin_math_dispatch_routine (uint8_t builtin_routine_id, /**< built-in wi
344312
345313 if (arguments_number >= 1 )
346314 {
347- if (ecma_is_value_number (arguments_list [0 ]))
348- {
349- x = ecma_get_number_from_value (arguments_list [0 ]);
350- }
351- else
352- {
353- ecma_value_t value = ecma_op_to_number (arguments_list [0 ], & x );
315+ ecma_value_t value = ecma_op_to_number (arguments_list [0 ], & x );
354316
355- if (ECMA_IS_VALUE_ERROR (value ))
356- {
357- return value ;
358- }
317+ if (ECMA_IS_VALUE_ERROR (value ))
318+ {
319+ return value ;
359320 }
360321 }
361322
0 commit comments