%PDF- %PDF-
Direktori : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/runtime/ |
Current File : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/runtime/runtime-numbers.cc |
// Copyright 2014 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "src/execution/arguments-inl.h" #include "src/execution/isolate-inl.h" #include "src/heap/heap-inl.h" // For ToBoolean. TODO(jkummerow): Drop. namespace v8 { namespace internal { RUNTIME_FUNCTION(Runtime_StringToNumber) { HandleScope handle_scope(isolate); DCHECK_EQ(1, args.length()); Handle<String> subject = args.at<String>(0); return *String::ToNumber(isolate, subject); } // ES6 18.2.5 parseInt(string, radix) slow path RUNTIME_FUNCTION(Runtime_StringParseInt) { HandleScope handle_scope(isolate); DCHECK_EQ(2, args.length()); Handle<Object> string = args.at(0); Handle<Object> radix = args.at(1); // Convert {string} to a String first, and flatten it. Handle<String> subject; ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, subject, Object::ToString(isolate, string)); subject = String::Flatten(isolate, subject); // Convert {radix} to Int32. if (!IsNumber(*radix)) { ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, radix, Object::ToNumber(isolate, radix)); } int radix32 = DoubleToInt32(Object::Number(*radix)); if (radix32 != 0 && (radix32 < 2 || radix32 > 36)) { return ReadOnlyRoots(isolate).nan_value(); } double result = StringToInt(isolate, subject, radix32); return *isolate->factory()->NewNumber(result); } // ES6 18.2.4 parseFloat(string) RUNTIME_FUNCTION(Runtime_StringParseFloat) { HandleScope shs(isolate); DCHECK_EQ(1, args.length()); Handle<String> subject = args.at<String>(0); double value = StringToDouble(isolate, subject, ALLOW_TRAILING_JUNK, std::numeric_limits<double>::quiet_NaN()); return *isolate->factory()->NewNumber(value); } RUNTIME_FUNCTION(Runtime_NumberToStringSlow) { HandleScope scope(isolate); DCHECK_EQ(1, args.length()); return *isolate->factory()->NumberToString(args.at(0), NumberCacheMode::kSetOnly); } RUNTIME_FUNCTION(Runtime_MaxSmi) { SealHandleScope shs(isolate); DCHECK_EQ(0, args.length()); return Smi::FromInt(Smi::kMaxValue); } RUNTIME_FUNCTION(Runtime_IsSmi) { SealHandleScope shs(isolate); DCHECK_EQ(1, args.length()); Tagged<Object> obj = args[0]; return isolate->heap()->ToBoolean(IsSmi(obj)); } RUNTIME_FUNCTION(Runtime_GetHoleNaNUpper) { HandleScope scope(isolate); DCHECK_EQ(0, args.length()); return *isolate->factory()->NewNumberFromUint(kHoleNanUpper32); } RUNTIME_FUNCTION(Runtime_GetHoleNaNLower) { HandleScope scope(isolate); DCHECK_EQ(0, args.length()); return *isolate->factory()->NewNumberFromUint(kHoleNanLower32); } } // namespace internal } // namespace v8