/
githubmirror
/
node
Обзор
Документация
Войти
/
githubmirror
/
node
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
deps/v8/src/runtime/runtime-numbers.cc
94 строки
3 KB
Michaël Zasso
deps: update V8 to 14.6.202.33
24 апр 2026, 19:01
Не верифицирован
24 апр 2026, 19:01
f1e0b83
Код
Авторство
О чём код?
// 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/common/globals.h" #include "src/execution/arguments-inl.h" #include "src/execution/isolate-inl.h" #include "src/roots/roots-inl.h" #include "src/runtime/runtime-utils.h" 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::NumberValue(*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()); DirectHandle<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_Float64ToStringSlow) { HandleScope scope(isolate); DCHECK_EQ(0, args.length()); // Don't try to canonicalize values. CSA::Float64ToString() machinery // does not check the SmiStringCache, so returning values from there // will not put an entry to DoubleStringCache. const bool canonicalize = false; return *isolate->factory()->DoubleToString( isolate->isolate_data()->GetRawArgument<double>(0), canonicalize, 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 ReadOnlyRoots(isolate).boolean_value(IsSmi(obj)); } } // namespace internal } // namespace v8