| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include <math.h> | 5 #include <math.h> |
| 6 | 6 |
| 7 #include "vm/bootstrap_natives.h" | 7 #include "vm/bootstrap_natives.h" |
| 8 | 8 |
| 9 #include "vm/bigint_operations.h" | 9 #include "vm/bigint_operations.h" |
| 10 #include "vm/double_conversion.h" | 10 #include "vm/double_conversion.h" |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 GET_NATIVE_ARGUMENT(Smi, fraction_digits, arguments->At(1)); | 181 GET_NATIVE_ARGUMENT(Smi, fraction_digits, arguments->At(1)); |
| 182 double d = arg.value(); | 182 double d = arg.value(); |
| 183 intptr_t fraction_digits_value = fraction_digits.Value(); | 183 intptr_t fraction_digits_value = fraction_digits.Value(); |
| 184 if (0 <= fraction_digits_value && fraction_digits_value <= 20 | 184 if (0 <= fraction_digits_value && fraction_digits_value <= 20 |
| 185 && kLowerBoundary < d && d < kUpperBoundary) { | 185 && kLowerBoundary < d && d < kUpperBoundary) { |
| 186 return DoubleToStringAsFixed(d, static_cast<int>(fraction_digits_value)); | 186 return DoubleToStringAsFixed(d, static_cast<int>(fraction_digits_value)); |
| 187 } else { | 187 } else { |
| 188 GrowableArray<const Object*> args; | 188 GrowableArray<const Object*> args; |
| 189 args.Add(&String::ZoneHandle(String::New( | 189 args.Add(&String::ZoneHandle(String::New( |
| 190 "Illegal arguments to double.toStringAsFixed"))); | 190 "Illegal arguments to double.toStringAsFixed"))); |
| 191 Exceptions::ThrowByType(Exceptions::kIllegalArgument, args); | 191 Exceptions::ThrowByType(Exceptions::kArgument, args); |
| 192 return Object::null(); | 192 return Object::null(); |
| 193 } | 193 } |
| 194 } | 194 } |
| 195 | 195 |
| 196 | 196 |
| 197 DEFINE_NATIVE_ENTRY(Double_toStringAsExponential, 2) { | 197 DEFINE_NATIVE_ENTRY(Double_toStringAsExponential, 2) { |
| 198 const Double& arg = Double::CheckedHandle(arguments->At(0)); | 198 const Double& arg = Double::CheckedHandle(arguments->At(0)); |
| 199 GET_NATIVE_ARGUMENT(Smi, fraction_digits, arguments->At(1)); | 199 GET_NATIVE_ARGUMENT(Smi, fraction_digits, arguments->At(1)); |
| 200 double d = arg.value(); | 200 double d = arg.value(); |
| 201 intptr_t fraction_digits_value = fraction_digits.Value(); | 201 intptr_t fraction_digits_value = fraction_digits.Value(); |
| 202 if (-1 <= fraction_digits_value && fraction_digits_value <= 20) { | 202 if (-1 <= fraction_digits_value && fraction_digits_value <= 20) { |
| 203 return DoubleToStringAsExponential( | 203 return DoubleToStringAsExponential( |
| 204 d, static_cast<int>(fraction_digits_value)); | 204 d, static_cast<int>(fraction_digits_value)); |
| 205 } else { | 205 } else { |
| 206 GrowableArray<const Object*> args; | 206 GrowableArray<const Object*> args; |
| 207 args.Add(&String::ZoneHandle(String::New( | 207 args.Add(&String::ZoneHandle(String::New( |
| 208 "Illegal arguments to double.toStringAsExponential"))); | 208 "Illegal arguments to double.toStringAsExponential"))); |
| 209 Exceptions::ThrowByType(Exceptions::kIllegalArgument, args); | 209 Exceptions::ThrowByType(Exceptions::kArgument, args); |
| 210 return Object::null(); | 210 return Object::null(); |
| 211 } | 211 } |
| 212 } | 212 } |
| 213 | 213 |
| 214 | 214 |
| 215 DEFINE_NATIVE_ENTRY(Double_toStringAsPrecision, 2) { | 215 DEFINE_NATIVE_ENTRY(Double_toStringAsPrecision, 2) { |
| 216 const Double& arg = Double::CheckedHandle(arguments->At(0)); | 216 const Double& arg = Double::CheckedHandle(arguments->At(0)); |
| 217 GET_NATIVE_ARGUMENT(Smi, precision, arguments->At(1)); | 217 GET_NATIVE_ARGUMENT(Smi, precision, arguments->At(1)); |
| 218 double d = arg.value(); | 218 double d = arg.value(); |
| 219 intptr_t precision_value = precision.Value(); | 219 intptr_t precision_value = precision.Value(); |
| 220 if (1 <= precision_value && precision_value <= 21) { | 220 if (1 <= precision_value && precision_value <= 21) { |
| 221 return DoubleToStringAsPrecision(d, static_cast<int>(precision_value)); | 221 return DoubleToStringAsPrecision(d, static_cast<int>(precision_value)); |
| 222 } else { | 222 } else { |
| 223 GrowableArray<const Object*> args; | 223 GrowableArray<const Object*> args; |
| 224 args.Add(&String::ZoneHandle(String::New( | 224 args.Add(&String::ZoneHandle(String::New( |
| 225 "Illegal arguments to double.toStringAsPrecision"))); | 225 "Illegal arguments to double.toStringAsPrecision"))); |
| 226 Exceptions::ThrowByType(Exceptions::kIllegalArgument, args); | 226 Exceptions::ThrowByType(Exceptions::kArgument, args); |
| 227 return Object::null(); | 227 return Object::null(); |
| 228 } | 228 } |
| 229 } | 229 } |
| 230 | 230 |
| 231 | 231 |
| 232 DEFINE_NATIVE_ENTRY(Double_isInfinite, 1) { | 232 DEFINE_NATIVE_ENTRY(Double_isInfinite, 1) { |
| 233 const Double& arg = Double::CheckedHandle(arguments->At(0)); | 233 const Double& arg = Double::CheckedHandle(arguments->At(0)); |
| 234 return Bool::Get(isinf(arg.value())); | 234 return Bool::Get(isinf(arg.value())); |
| 235 } | 235 } |
| 236 | 236 |
| 237 | 237 |
| 238 DEFINE_NATIVE_ENTRY(Double_isNaN, 1) { | 238 DEFINE_NATIVE_ENTRY(Double_isNaN, 1) { |
| 239 const Double& arg = Double::CheckedHandle(arguments->At(0)); | 239 const Double& arg = Double::CheckedHandle(arguments->At(0)); |
| 240 return Bool::Get(isnan(arg.value())); | 240 return Bool::Get(isnan(arg.value())); |
| 241 } | 241 } |
| 242 | 242 |
| 243 | 243 |
| 244 DEFINE_NATIVE_ENTRY(Double_isNegative, 1) { | 244 DEFINE_NATIVE_ENTRY(Double_isNegative, 1) { |
| 245 const Double& arg = Double::CheckedHandle(arguments->At(0)); | 245 const Double& arg = Double::CheckedHandle(arguments->At(0)); |
| 246 // Include negative zero, infinity. | 246 // Include negative zero, infinity. |
| 247 return Bool::Get(signbit(arg.value()) && !isnan(arg.value())); | 247 return Bool::Get(signbit(arg.value()) && !isnan(arg.value())); |
| 248 } | 248 } |
| 249 | 249 |
| 250 // Add here only functions using/referring to old-style casts. | 250 // Add here only functions using/referring to old-style casts. |
| 251 | 251 |
| 252 } // namespace dart | 252 } // namespace dart |
| OLD | NEW |