Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(284)

Unified Diff: runtime/lib/math.cc

Issue 11316031: - Move MathNatives from dart:core to dart:math. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/lib/lib_sources.gypi ('k') | runtime/lib/math.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/lib/math.cc
===================================================================
--- runtime/lib/math.cc (revision 14972)
+++ runtime/lib/math.cc (working copy)
@@ -16,162 +16,59 @@
namespace dart {
-DEFINE_NATIVE_ENTRY(MathNatives_sqrt, 1) {
+DEFINE_NATIVE_ENTRY(Math_sqrt, 1) {
GET_NATIVE_ARGUMENT(Double, operand, arguments->NativeArgAt(0));
return Double::New(sqrt(operand.value()));
}
-DEFINE_NATIVE_ENTRY(MathNatives_sin, 1) {
+DEFINE_NATIVE_ENTRY(Math_sin, 1) {
GET_NATIVE_ARGUMENT(Double, operand, arguments->NativeArgAt(0));
return Double::New(sin(operand.value()));
}
-DEFINE_NATIVE_ENTRY(MathNatives_cos, 1) {
+DEFINE_NATIVE_ENTRY(Math_cos, 1) {
GET_NATIVE_ARGUMENT(Double, operand, arguments->NativeArgAt(0));
return Double::New(cos(operand.value()));
}
-DEFINE_NATIVE_ENTRY(MathNatives_tan, 1) {
+DEFINE_NATIVE_ENTRY(Math_tan, 1) {
GET_NATIVE_ARGUMENT(Double, operand, arguments->NativeArgAt(0));
return Double::New(tan(operand.value()));
}
-DEFINE_NATIVE_ENTRY(MathNatives_asin, 1) {
+DEFINE_NATIVE_ENTRY(Math_asin, 1) {
GET_NATIVE_ARGUMENT(Double, operand, arguments->NativeArgAt(0));
return Double::New(asin(operand.value()));
}
-DEFINE_NATIVE_ENTRY(MathNatives_acos, 1) {
+DEFINE_NATIVE_ENTRY(Math_acos, 1) {
GET_NATIVE_ARGUMENT(Double, operand, arguments->NativeArgAt(0));
return Double::New(acos(operand.value()));
}
-DEFINE_NATIVE_ENTRY(MathNatives_atan, 1) {
+DEFINE_NATIVE_ENTRY(Math_atan, 1) {
GET_NATIVE_ARGUMENT(Double, operand, arguments->NativeArgAt(0));
return Double::New(atan(operand.value()));
}
-DEFINE_NATIVE_ENTRY(MathNatives_atan2, 2) {
+DEFINE_NATIVE_ENTRY(Math_atan2, 2) {
GET_NATIVE_ARGUMENT(Double, operand1, arguments->NativeArgAt(0));
GET_NATIVE_ARGUMENT(Double, operand2, arguments->NativeArgAt(1));
return Double::New(atan2(operand1.value(), operand2.value()));
}
-DEFINE_NATIVE_ENTRY(MathNatives_exp, 1) {
+DEFINE_NATIVE_ENTRY(Math_exp, 1) {
GET_NATIVE_ARGUMENT(Double, operand, arguments->NativeArgAt(0));
return Double::New(exp(operand.value()));
}
-DEFINE_NATIVE_ENTRY(MathNatives_log, 1) {
+DEFINE_NATIVE_ENTRY(Math_log, 1) {
GET_NATIVE_ARGUMENT(Double, operand, arguments->NativeArgAt(0));
return Double::New(log(operand.value()));
}
-DEFINE_NATIVE_ENTRY(MathNatives_random, 0) {
+DEFINE_NATIVE_ENTRY(Math_random, 0) {
return Double::New(static_cast<double>(Random::RandomInt32()-1)/0x80000000);
}
-
-// TODO(srdjan): Investigate for performance hit; the integer and double parsing
-// may not be efficient as we need to generate two extra growable arrays.
-static bool IsValidLiteral(const Scanner::GrowableTokenStream& tokens,
- Token::Kind literal_kind,
- bool* is_positive,
- String** value) {
- if ((tokens.length() == 2) &&
- (tokens[0].kind == literal_kind) &&
- (tokens[1].kind == Token::kEOS)) {
- *is_positive = true;
- *value = tokens[0].literal;
- return true;
- }
- if ((tokens.length() == 3) &&
- ((tokens[0].kind == Token::kTIGHTADD) ||
- (tokens[0].kind == Token::kSUB)) &&
- (tokens[1].kind == literal_kind) &&
- (tokens[2].kind == Token::kEOS)) {
- // Check there is no space between "+/-" and number.
- if ((tokens[0].offset + 1) != tokens[1].offset) {
- return false;
- }
- *is_positive = tokens[0].kind == Token::kTIGHTADD;
- *value = tokens[1].literal;
- return true;
- }
- return false;
-}
-
-
-DEFINE_NATIVE_ENTRY(MathNatives_parseInt, 1) {
- GET_NATIVE_ARGUMENT(String, value, arguments->NativeArgAt(0));
- const String& dummy_key = String::Handle(Symbols::Empty());
- Scanner scanner(value, dummy_key);
- const Scanner::GrowableTokenStream& tokens = scanner.GetStream();
- String* int_string;
- bool is_positive;
- if (IsValidLiteral(tokens, Token::kINTEGER, &is_positive, &int_string)) {
- if (is_positive) {
- return Integer::New(*int_string);
- } else {
- String& temp = String::Handle();
- temp = String::Concat(String::Handle(Symbols::New("-")),
- *int_string);
- return Integer::New(temp);
- }
- } else {
- GrowableArray<const Object*> args;
- args.Add(&value);
- Exceptions::ThrowByType(Exceptions::kFormat, args);
- return Object::null();
- }
-}
-
-
-DEFINE_NATIVE_ENTRY(MathNatives_parseDouble, 1) {
- GET_NATIVE_ARGUMENT(String, value, arguments->NativeArgAt(0));
- const String& dummy_key = String::Handle(Symbols::Empty());
- Scanner scanner(value, dummy_key);
- const Scanner::GrowableTokenStream& tokens = scanner.GetStream();
- String* number_string;
- bool is_positive;
- if (IsValidLiteral(tokens, Token::kDOUBLE, &is_positive, &number_string)) {
- const char* cstr = number_string->ToCString();
- char* p_end = NULL;
- double double_value = strtod(cstr, &p_end);
- ASSERT(p_end != cstr);
- if (!is_positive) {
- double_value = -double_value;
- }
- return Double::New(double_value);
- }
-
- if (IsValidLiteral(tokens, Token::kINTEGER, &is_positive, &number_string)) {
- Integer& res = Integer::Handle(Integer::New(*number_string));
- if (is_positive) {
- return Double::New(res.AsDoubleValue());
- } else {
- return Double::New(-res.AsDoubleValue());
- }
- }
-
- // Infinity and nan.
- if (IsValidLiteral(tokens, Token::kIDENT, &is_positive, &number_string)) {
- if (number_string->Equals("NaN")) {
- return Double::New(NAN);
- }
- if (number_string->Equals("Infinity")) {
- if (is_positive) {
- return Double::New(INFINITY);
- } else {
- return Double::New(-INFINITY);
- }
- }
- }
-
- GrowableArray<const Object*> args;
- args.Add(&value);
- Exceptions::ThrowByType(Exceptions::kFormat, args);
- return Object::null();
-}
-
} // namespace dart
« no previous file with comments | « runtime/lib/lib_sources.gypi ('k') | runtime/lib/math.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698