MCPcopy Create free account
hub / github.com/Snapchat/Valdi / valueToDouble

Method valueToDouble

valdi/src/valdi/hermes/HermesJavaScriptContext.cpp:862–887  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

860}
861
862double HermesJavaScriptContext::valueToDouble(const JSValue& value, JSExceptionTracker& exceptionTracker) {
863 hermes::vm::GCScope gcScope(*_runtime);
864 auto hermesValue = toHermesValue(value);
865 if (hermesValue.isUndefined() || hermesValue.isNull()) {
866 return 0.0;
867 } else if (hermesValue.isNumber()) {
868 return hermesValue.getNumber();
869 } else if (hermesValue.isBool()) {
870 return hermesValue.getBool() ? 1.0 : 0.0;
871 } else if (hermesValue.isString()) {
872 auto stringView =
873 hermes::vm::StringPrimitive::createStringView(*_runtime, _runtime->makeHandle(hermesValue.getString()));
874 std::string utf8;
875 if (stringView.isASCII()) {
876 utf8 += std::string_view(stringView.castToCharPtr(), stringView.length());
877 ;
878 } else {
879 auto converted = Valdi::utf16ToUtf8(stringView.castToChar16Ptr(), stringView.length());
880 utf8 += std::string_view(converted.first, converted.second);
881 }
882
883 return atof(utf8.c_str()); // NOLINT(cert-err34-c)
884 } else {
885 return 0.0;
886 }
887}
888
889int32_t HermesJavaScriptContext::valueToInt(const JSValue& value, JSExceptionTracker& exceptionTracker) {
890 return static_cast<int32_t>(valueToDouble(value, exceptionTracker));

Callers

nothing calls this directly

Calls 10

utf16ToUtf8Function · 0.85
getNumberMethod · 0.80
isBoolMethod · 0.80
getStringMethod · 0.65
isUndefinedMethod · 0.45
isNullMethod · 0.45
isNumberMethod · 0.45
getBoolMethod · 0.45
isStringMethod · 0.45
lengthMethod · 0.45

Tested by

no test coverage detected